Compare commits

...

89 Commits

Author SHA1 Message Date
bf374ccabb nn 2014-06-03 13:51:59 -04:00
02060d2bbc nnn 2014-06-03 13:51:58 -04:00
8750f1edc0 drawer 2014-06-03 13:51:58 -04:00
798f17a97d kill tray 2014-06-03 13:51:57 -04:00
a4091adbf2 system tray elsewhere 2014-06-03 13:51:57 -04:00
ecf795b6ef reveal 2014-06-03 13:51:56 -04:00
75447b249c adjust timeout animation 2014-06-03 13:51:56 -04:00
26d2fb8a37 messageTray: Add a new message tray indicator 2014-06-03 13:51:55 -04:00
f7223763d2 messageTray: Add an indicatorCount property to the tray
So we don't have to do the property tracking here...
2014-06-03 13:51:55 -04:00
0b414308fb telepathyClient: Use a revealer for new messages in Telepathy as well 2014-06-03 13:51:55 -04:00
060917ae2b messageTray: Add a Revealer widget and use it to animate the notification in/out 2014-06-03 13:51:53 -04:00
9f2e5b9b51 messageTray: Glue the notification to the bottom of the screen, always
We'll animate notifications popping up with another system soon enough,
instead. The idea here is that instead of carefully animating the Y
position of the notificationWidget when a notification updates, we
simply animate the height of the new actor inside the notification.
This will fix some of the awkward updates where instead of the
notification content expanding, we see the buttons or action area
pushed off the edge of the screen...

Animations that happen as a result of adding something new to the
notification or expanding it should be done by tweeing the new actors
in inside the notification.
2014-06-03 13:30:46 -04:00
4a07eb77f6 messageTray: Restyle notifications 2014-06-03 13:30:45 -04:00
fbe379c81c messageTray: Considerably rework how layout is done in notifications
Use a series of nested BoxLayouts, Bins, and more instead of an StTable
and a custom ShellGenericContainer, and hacky style classes.

This also removes the customContent parameter in favor of subclasses
setting the child of this._bodyBin instead.

We lose a few of the fancy features like showing the first part of
the body, ellipsized, next the banner when it will fit, and other
layout logic. But since the layout of notifications is changing
substantially anyways, I don't feel too bad...
2014-06-03 13:30:16 -04:00
a07e8bbf37 messageTray: Remove addBody as a public API
As it's unused.
2014-06-03 13:30:16 -04:00
a6aabb1d3a messageTray: Remove support for notifications with images
This sufficiently complicates the code, and won't fit in the
new design.
2014-06-03 13:30:15 -04:00
aef6273fed messageTray: Remove support for resident notifications
Now the only resident notification is a chat notification. The convenient
thing about this special-case behavior is that there's already special-case
code for it and the shell, and we always know that a chat notification will
always be 1:1 with its chat source.
2014-06-03 13:30:15 -04:00
be8b1c7d2d notificationDaemon: Remove support for resident notifications
They're not really an API that has caught on, and not really one
we want to support, either.
2014-06-03 13:30:15 -04:00
14bc748cea notificationDaemon: Remove the special-case hack for system tray icons
Nothing in the system actually has a standard system tray icon anymore,
so this hack isn't necessary.
2014-06-03 13:30:15 -04:00
c32917f6c1 telepathyClient: Remove all the fancy features
This can be done with another app, like Empathy or Chat.
2014-06-03 12:32:56 -04:00
182d45dace autorunManager: Remove the resident "Removable Devices" notification
Users aren't usually the best at obeying the rules, and systems can
deal with hotplug without ejecting first.

https://bugzilla.gnome.org/show_bug.cgi?id=719857
2014-06-03 12:32:56 -04:00
829e7623df css: Clean up slightly
Remove the networking stuff from the message tray section.
2014-06-03 12:32:56 -04:00
89675c9061 Updated Brazilian Portuguese translation 2014-06-03 13:29:01 +00:00
f9df83802d ui: Adapt to display.get_tab_list API change 2014-06-03 14:52:18 +02:00
e51eb723fc windowMenu: Do a better job with faking the source actor
The 0x0 dummyCursor works well when the menu pops up directly underneath
the pointer (e.g. when triggered by right-clicking the titlebar) or by
keyboard, but not when triggered by the menu button - the menu does not
point to the center of the button's bottom edge, and unless the user
keeps holding the mouse button while moving into the menu, the menu will
be dismissed immediately on button release.
Address these issues by using the button geometry to overlay the window
button with an appropriately sized actor that acts as a proper sourceActor,
to make the window menu behavior consistent with other shell menus.

https://bugzilla.gnome.org/show_bug.cgi?id=731058
2014-06-02 23:48:53 +02:00
5b61f2d642 windowMenu: Implement new show_menu_for_rect() hook
Having the full geometry of the menu's source button (if any) will
allow us to address several misbehaviors of window menus, so use
that instead of show_menu().

https://bugzilla.gnome.org/show_bug.cgi?id=731058
2014-06-02 23:48:53 +02:00
094669baee messageTray: Clear the pointer left timeout when showing a notification
When the pointer leaves the notification area, we queue a timeout to
hide the notification after a little while. If the user is hovering over
a notification and clicks the X button to close the notification, we will
destroy the notification, which causes a "pointer left" event on the
notification area. This queues a timeout which erroneously fires after
the next notification in the queue shows up.

The code and state machine are too complex to properly make sure this
timeout doesn't fire when there is no notification up next, so instead
just clear it when showing a notification to make sure that any
previously queued timeout doesn't apply to us.

https://bugzilla.gnome.org/show_bug.cgi?id=731118
2014-06-02 17:39:52 -04:00
f6b5385495 messageTray: Squash together some duplicated code
https://bugzilla.gnome.org/show_bug.cgi?id=731118
2014-06-02 17:39:51 -04:00
524e2df708 messageTray: Don't exit out early if we have a left timeout
Otherwise, we won't mark the pointer as hovering on the notification.

https://bugzilla.gnome.org/show_bug.cgi?id=731118
2014-06-02 17:39:51 -04:00
9f887d9a28 Updated Lithuanian translation 2014-06-02 23:35:53 +03:00
214a41793f build: Remove GMenu include
The actual GMenu dependency was removed a while ago, so stop adding
it to the GIR includes.
2014-06-02 17:56:38 +02:00
2e40ffc558 Updated Italian translation 2014-05-31 12:55:41 +00:00
3584887938 openbsd: fix shell_global_reexec_self()
Rework the way we re-exec the shell on OpenBSD so that it does not only
work the first time it is re-exec'd.
Plug a small leak in the __linux__ case while here.

https://bugzilla.gnome.org/show_bug.cgi?id=727763
2014-05-30 11:26:39 +02:00
0d6c002b8e calendar: Port EventsList to ClutterTableLayout
We don't make use of any functionality StTable provides over
ClutterTableLayout, so port all users to the Clutter layout
in order to remove our own copy of the code.

https://bugzilla.gnome.org/show_bug.cgi?id=703833
2014-05-28 22:11:38 +02:00
ec714864f2 calendar: Port calendar to ClutterTableLayout
We don't make use of any functionality StTable provides over
ClutterTableLayout, so port all users to the Clutter layout
in order to remove our own copy of the code.

https://bugzilla.gnome.org/show_bug.cgi?id=703833
2014-05-28 22:11:38 +02:00
1b77149ec9 build: Remove ShellNetworkAgent documentation
It is only an internal implementation detail, and it also causes build problem
when NetworkManager is disabled.

https://bugzilla.gnome.org/show_bug.cgi?id=726460
2014-05-28 22:07:19 +02:00
93c9e031e3 Update (allow-none) annotations
The annotation has been deprecated in favor of (nullable) and/or
(optional).
2014-05-28 22:01:55 +02:00
3ff4277f86 workspace: Don't allow closing windows with attached modals
Modal dialogs prevent the parent from being closed in "normal mode",
so it makes sense to not allow it in the overview either.

https://bugzilla.gnome.org/show_bug.cgi?id=729886
2014-05-28 22:01:54 +02:00
2a63267be0 loginDialog: Remove unused variable 2014-05-28 22:01:54 +02:00
2b365627ed windowManager: Remove (un)blockAnimations()
They are no longer used, kill them.
2014-05-28 22:01:53 +02:00
b8f0d0f0dc telepathyClient: Only use 12-hour format when supported by the locale
It is a bit odd to request AM/PM format when the locale selected
by LC_TIME lacks the concept. We ignore the format setting in that
case elsewhere and assume 24-hour format, let's do the same for
chat timestamps for consistency.

https://bugzilla.gnome.org/show_bug.cgi?id=728271
2014-05-28 22:01:53 +02:00
df1bed941d telepathyClient: Remove unused variable 2014-05-28 13:09:43 -04:00
604085fdb9 Update British English translation 2014-05-27 21:44:13 +01:00
2d3c81390b Bump version to 3.13.2
Update NEWS.
2014-05-27 21:35:37 +02:00
516b8f6bf8 screenshot: Don't use meta_window_get_rect
It's going to be removed soon.
2014-05-27 15:14:33 -04:00
75fdca0b47 data: Drop button-layout from overrides schema
The default in gsettings-desktop-schemas now matches what we want,
so no need to keep overriding it.
2014-05-27 19:54:31 +02:00
9f366118f0 windowMenu: Only add workspace actions when enabled by session mode
When workspaces are disabled by the session mode, all workspace
related actions don't make sense. Worse, the "Move to Workspace ..."
actions allow sending windows into a nirvana with no means to
get them back.

https://bugzilla.gnome.org/show_bug.cgi?id=730653
2014-05-27 19:49:06 +02:00
c228a9a89a viewSelector: Don't re-navigate into the active page
Starting keynav into the active page is handled from a key-press
handler on the stage, however we should not "start" keynav when
we are already navigating elsewhere - the latter can happen when
keynav fails (for instance because the focus is trapped inside an
open app folder or at the end of the dash), and the event bubbles
up to the stage. So make sure to only handle the event to actually
start keynav, to not interfere with the normal navigation handling.

Thanks to Carlos Soriano <carlos.soriano89@gmail.com> for the
debugging footwork.

https://bugzilla.gnome.org/show_bug.cgi?id=726760
2014-05-27 19:49:06 +02:00
e747fcb16f windowMenu: Ping window when activating any menu action
We do this for actions in the regular app menu, it makes sense to
do the same for window menu and fallback app menu.
2014-05-27 19:49:05 +02:00
a72a24ebff theme: Bring fallback app-menu style closer to GTK+
The fallback app-menu in GTK+'s client side decorations obviously
uses the GTK+ theme rather than the shell one; update the style
of our own fallback app-menu to resemble that style.

https://bugzilla.gnome.org/show_bug.cgi?id=730752
2014-05-27 19:49:05 +02:00
8811ba2ec0 Support (fallback) app menu in SSD
We now allow "appmenu" in the button layout to make synchronizing it
with GTK+'s client-side decorations easier, but as some people tweak
their settings to get in-window app menus even when using the shell,
actually pop up the app menu when the button is activated.

https://bugzilla.gnome.org/show_bug.cgi?id=730752
2014-05-27 19:49:05 +02:00
38d8e465b3 popupMenu: Hide separator label when not in use
The optional label support introduced in commit af063dc2f2 broke
the centering of separators, as the label still adds additional
spacing even when empty.
Properly hide the label actor in that case to fix the alignment.

https://bugzilla.gnome.org/show_bug.cgi?id=730753
2014-05-27 19:49:04 +02:00
5b3fb024be extensionPrefs: Skip main window when launched with a UUID
The extension-prefs tool is used by gnome-tweak-tool and the
extensions web site to display preferences. However as those
already implement their own extension lists, the main window
is not useful in that context (to not say it is rather silly).

Just skip the main window and only show the specified extension's
preference dialog in those cases.

https://bugzilla.gnome.org/show_bug.cgi?id=730829
2014-05-27 18:02:25 +02:00
521f5f2b6b extensionPrefs: Add switches to enable/disable extensions
Bring the extension-prefs tool in line with the mockup by adding
switches to enable/disable extensions, similar to the extension
page in gnome-tweak-tool.

https://bugzilla.gnome.org/show_bug.cgi?id=730829
2014-05-27 18:02:25 +02:00
e1b30b2924 extension-prefs: Give the UI a bit of GNOME 3 treatment
The extension-prefs UI has never been great, but as the GNOME 3
design patterns are evolving, it is starting to look seriously
outdated. Modernize the UI a bit to have it fit in a bit better.

https://bugzilla.gnome.org/show_bug.cgi?id=730829
2014-05-27 18:02:25 +02:00
dd85670f8b switcherPopup: Add a return value to _keyPressHandler
This allows us to handle keybindings that use Escape instead of just
dismissing the popup unconditionally when we see an Escape press.

https://bugzilla.gnome.org/show_bug.cgi?id=730739
2014-05-26 15:55:37 +02:00
625f3a5113 tools/build: Update to 3.14 2014-05-25 23:22:18 +02:00
58c4a6c847 Updated Hebrew translation 2014-05-22 23:46:51 +03:00
752aca811c windowManager: Support coords 2014-05-22 10:51:49 -04:00
a4cf0501ee Updated Indonesian translation 2014-05-22 09:22:25 +00:00
4c7b992c36 windowMenu: Fix typo
Closing windows is done with delete(), not close() ...
2014-05-21 19:57:17 +02:00
264a51de3f gnome-shell-wayland.desktop: Drop mutter-launch from Exec line
mutter-launch has been replaced with logind's Session and Seat APIs.
2014-05-21 11:11:27 +02:00
625280bcd6 Updated Brazilian Portuguese translation 2014-05-20 19:36:14 +00:00
4f8265f82e Updated Spanish translation 2014-05-20 20:05:06 +02:00
ff07d3a46a Renable compiler warnings and fix a few that show up
The switch to GNOME_COMPILE_WARNINGS() caused -Wall and other
warnings to not actually be used since GNOME_COMPILE_WARNINGS()
just sets WARN_CFLAGS. Add WARN_CFLAGS to AM_CFLAGS so that
it takes effect.

Add  -Wno-error=deprecated-declarations so that when -Werror is
enabled, we don't fail on all the deprecated cogl and clutter
symbols.

https://bugzilla.gnome.org/show_bug.cgi?id=730408
2014-05-19 20:51:12 -04:00
5d11941638 Support resource:/// URL's in GNOME_SHELL_JS envvar
It can be useful to augment the shell's search path by doing

 GNOME_SHELL_JS=resource:///org/gnome/shell:<mypath>

But this doesn't work because resource: is split off. Special
case path elements that are just 'resource' and recombine
them with the next element.

https://bugzilla.gnome.org/show_bug.cgi?id=730409
2014-05-19 20:47:05 -04:00
f1f659571b Updated Turkish translation 2014-05-19 11:46:28 +00:00
c60d13b33e Updated Lithuanian translation 2014-05-18 22:25:40 +03:00
33060d382b Updated Czech translation 2014-05-18 15:40:01 +02:00
4b1e412ac3 Updated Hebrew translation 2014-05-18 02:48:02 +03:00
659730ab09 Mark string as translatable 2014-05-18 01:08:49 +02:00
7c3a99b7ed Updated POTFILES.in 2014-05-18 01:02:36 +02:00
e7af257814 Implement window menus in gnome-shell
https://bugzilla.gnome.org/show_bug.cgi?id=726352
2014-05-17 15:17:29 -04:00
c9190294bc gnome-shell-build-setup.sh: work around removal of gpk-install-package-name
gpk-install-package-name was removed in 3.12. Call the D-Bus interface
using gdbus instead.
2014-05-17 15:10:04 -04:00
e070e3c44a Updated Czech translation 2014-05-16 14:37:15 +02:00
fe87de7cec Updated Hebrew translation 2014-05-16 04:20:15 +03:00
2519e4f08d Updated Brazilian Portuguese translation 2014-05-15 18:28:01 +00:00
fe304d3c94 Updated Lithuanian translation 2014-05-11 23:43:13 +03:00
1f4e6872ab Updated Spanish translation 2014-05-10 19:48:56 +02:00
5ade2e7418 main: emit systemd message for any session except gdm and initial-setup 2014-05-09 23:35:57 +02:00
3e7d325e77 [l10n] Updated Catalan (Valencian) translation 2014-05-09 00:02:51 +02:00
ef04a9d1ed osdWindow: Check monitor validity before updating
When a monitor is removed, the OsdWindow for that monitor may process
the monitors-changed signal before OsdWindowManager does (which will
remove the OSD). If that happens, we will currently try to access
an invalid monitor; check for this to avoid a couple of warning.
2014-05-08 11:14:23 +02:00
011fef4b2b system: Keep key focus when switching between alternatives
When switching between alternatives in AltSwitcher, the currently
visible child is replaced with the alternative. If the original
child has the key focus when it is removed from the stage, the
focus is lost. Detect this case and manually move the focus to
the new child.

https://bugzilla.gnome.org/show_bug.cgi?id=727259
2014-05-06 14:25:39 +02:00
caf6389f79 Fix Italian translation
- "Aereo" is the thing that flies, "Aero" is the Windows 7 theme.
- "Abilita", not "Abilitato", for the Enable action.
2014-05-04 15:22:55 +02:00
c7306449ae workspaceThumbnails: Move to primary monitor first when creating workspace
When dragging a window preview from a non-primary monitor onto a
workspace thumbnail, the window is moved to the primery monitor
first before changing its workspace. However when dragging the window
between thumbnails to create a new workspace, it is kept on its current
monitor instead. This is not only inconsistent, but outright confusing
with the default 'workspaces-only-on-primary' setting, as the newly
created workspace is immediately removed again.

https://bugzilla.gnome.org/show_bug.cgi?id=683819
2014-05-03 23:50:25 +02:00
8c45e6fa43 main: Don't depend on GSystem unconditionally
We only need GSystem when running under systemd. As libgsystem itself
has a hard dependency on systemd, only import it when actually needed
to keep working on systems where systemd is not available.

https://bugzilla.gnome.org/show_bug.cgi?id=728449
2014-05-03 23:50:25 +02:00
9504d21297 Updated Belarusian translation.
(cherry picked from commit 6d679148b6)
2014-05-03 14:46:57 +02:00
0832ca544a Update the default favourite apps list for renamed desktop files
Nautilus and gnome-documents have changed their desktop file names to
support DBus activation.

https://bugzilla.gnome.org/show_bug.cgi?id=729429
2014-05-03 00:01:56 +02:00
a000a1f76e rfkill: make the Airplane mode menu insensitive in the lock screen
Like we do for the bluetooth and wifi menus

https://bugzilla.gnome.org/show_bug.cgi?id=729224
2014-04-30 21:52:56 +02:00
70 changed files with 5022 additions and 5433 deletions

24
NEWS
View File

@ -1,3 +1,27 @@
3.13.2
======
* Make airplane mode menu insensitive in lock screen [Giovanni; #729224]
* Don't always extend struts to the screen edge [Florian; #683819]
* Fix keynav for alternatives in AltSwitcher [Florian; #727259]
* Implement window menus in the shell [Jasper; #726352]
* Support resource:/// URLs in GNOME_SHELL_JS envvar [Owen; #730409]
* Fix switcher popups with keybindings containing Escape [Rui; #730739]
* Update extension-prefs UI to follow GNOME 3 patterns [Florian; #730829]
* Add support for fallback app menu in window decorations [Florian; #730752]
* Fix keynav escaping open app folders [Florian; #726760]
* Misc. bug fixes [Kalev, Florian, Owen; #729429, #728449, #730408, #730753,
#730653]
Contributors:
Giovanni Campagna, Piotr Drąg, Kalev Lember, Rui Matos, Florian Müllner,
Vadim Rutkovsky, Carlos Soriano, Jasper St. Pierre, Owen W. Taylor
Translations:
Ihar Hrachyshka [be], Giovanni Campagna [it], Carles Ferrando [ca@valencia],
Daniel Mustieles [es], Aurimas Černius [lt], Enrico Nicoletto [pt_BR],
Yosef Or Boczko [he], Marek Černocký [cs], Muhammet Kara [tr],
Georges Neto [pt_BR], Andika Triwidada [id]
3.13.1 3.13.1
====== ======
* Ensure the currently focused app icon is viewable [Rui; #726759] * Ensure the currently focused app icon is viewable [Rui; #726759]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.13.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.13.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@ -76,7 +76,7 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90 CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.13.1 MUTTER_MIN_VERSION=3.13.2
GTK_MIN_VERSION=3.7.9 GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0 GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
@ -223,6 +223,14 @@ fi
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no) AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
GNOME_COMPILE_WARNINGS([error]) GNOME_COMPILE_WARNINGS([error])
case "$WARN_CFLAGS" in
*-Werror*)
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
;;
esac
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
AC_SUBST(AM_CFLAGS)
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}" BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to]) AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])

View File

@ -2,7 +2,7 @@
Type=Application Type=Application
_Name=GNOME Shell (wayland compositor) _Name=GNOME Shell (wayland compositor)
_Comment=Window management and application launching _Comment=Window management and application launching
Exec=@bindir@/mutter-launch -- gnome-shell --wayland --display-server Exec=@bindir@/gnome-shell --wayland --display-server
X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gnome-shell X-GNOME-Bugzilla-Product=gnome-shell
X-GNOME-Bugzilla-Component=general X-GNOME-Bugzilla-Component=general

View File

@ -31,7 +31,7 @@
</_description> </_description>
</key> </key>
<key name="favorite-apps" type="as"> <key name="favorite-apps" type="as">
<default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'nautilus.desktop', 'gnome-documents.desktop' ]</default> <default>[ 'epiphany.desktop', 'evolution.desktop', 'empathy.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'libreoffice-writer.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Documents.desktop' ]</default>
<_summary>List of desktop file IDs for favorite applications</_summary> <_summary>List of desktop file IDs for favorite applications</_summary>
<_description> <_description>
The applications corresponding to these identifiers The applications corresponding to these identifiers
@ -221,15 +221,6 @@
</_description> </_description>
</key> </key>
<key name="button-layout" type="s">
<default>":close"</default>
<_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>
</key>
<key name="edge-tiling" type="b"> <key name="edge-tiling" type="b">
<default>true</default> <default>true</default>
<_summary>Enable edge tiling when dropping windows on screen edges</_summary> <_summary>Enable edge tiling when dropping windows on screen edges</_summary>

View File

@ -153,6 +153,21 @@ StScrollBar StButton#vhandle:active {
-arrow-rise: 11px; -arrow-rise: 11px;
} }
.popup-menu-boxpointer.fallback-app-menu {
-arrow-border-radius: 4px;
-arrow-background-color: #ededed;
-arrow-border-width: 1px;
-arrow-border-color: #a6a6a6;
-arrow-base: 24px;
-arrow-rise: 11px;
}
.popup-menu-boxpointer.fallback-app-menu.dark {
-arrow-background-color: #3f4747;
-arrow-border-color: #282b2b;
}
.popup-menu { .popup-menu {
min-width: 200px; min-width: 200px;
} }
@ -166,6 +181,15 @@ StScrollBar StButton#vhandle:active {
background-color: #333333; background-color: #333333;
} }
.fallback-app-menu .popup-submenu-menu-item:open {
background-color: #888888;
color: white;
}
.fallback-app-menu.dark .popup-submenu-menu-item:open {
background-color: #333333;
}
.popup-sub-menu { .popup-sub-menu {
background-gradient-start: rgba(80,80,80,0.3); background-gradient-start: rgba(80,80,80,0.3);
background-gradient-end: rgba(80,80,80,0.4); background-gradient-end: rgba(80,80,80,0.4);
@ -173,6 +197,20 @@ StScrollBar StButton#vhandle:active {
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9); box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
} }
.fallback-app-menu .popup-sub-menu {
background-gradient-start: #dddddd;
background-gradient-end: #dfdfdf;
background-gradient-direction: vertical;
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.4);
}
.fallback-app-menu.dark .popup-sub-menu {
background-gradient-start: #474747;
background-gradient-end: #4b4b4b;
background-gradient-direction: vertical;
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
}
.popup-sub-menu:scrolled .popup-menu-item:ltr { .popup-sub-menu:scrolled .popup-menu-item:ltr {
padding-right: 0em; padding-right: 0em;
} }
@ -221,6 +259,31 @@ StScrollBar StButton#vhandle:active {
color: #9f9f9f; color: #9f9f9f;
} }
.fallback-app-menu .popup-menu-item {
color: #43484a;
}
.fallback-app-menu .popup-menu-item:active {
color: white;
background-color: #4689cd;
}
.fallback-app-menu .popup-menu-item:insensitive {
color: gray;
}
.fallback-app-menu.dark .popup-menu-item {
color: white;
}
.fallback-app-menu.dark .popup-menu-item:active {
background-color: #445f7d;
}
.fallback-app-menu.dark .popup-menu-item:insensitive {
color: #9f9f9f;
}
.popup-separator-menu-item { .popup-separator-menu-item {
-gradient-height: 1px; -gradient-height: 1px;
-gradient-start: rgba(255,255,255,0.0); -gradient-start: rgba(255,255,255,0.0);
@ -230,6 +293,17 @@ StScrollBar StButton#vhandle:active {
padding: 8px 0px; padding: 8px 0px;
} }
.fallback-app-menu .popup-separator-menu-item {
-gradient-start: #a0a2a3;
-gradient-end: #a0a2a3;
-margin-horizontal: 0;
}
.fallback-app-menu.dark .popup-separator-menu-item {
-gradient-start: #818584;
-gradient-end: #818584;
}
.popup-status-menu-item { .popup-status-menu-item {
font-weight: normal; font-weight: normal;
color: #999; color: #999;
@ -329,13 +403,18 @@ StScrollBar StButton#vhandle:active {
icon-size: 16px; icon-size: 16px;
} }
.no-networks-label {
color: #999999;
}
.no-networks-box {
spacing: 12px;
}
/* Buttons */ /* Buttons */
.candidate-page-button, .candidate-page-button,
.notification-button,
.notification-icon-button,
.hotplug-notification-item, .hotplug-notification-item,
.hotplug-resident-eject-button,
.modal-dialog-button, .modal-dialog-button,
.app-view-control { .app-view-control {
border: 1px solid #8b8b8b; border: 1px solid #8b8b8b;
@ -349,17 +428,12 @@ StScrollBar StButton#vhandle:active {
} }
.candidate-page-button:hover, .candidate-page-button:hover,
.notification-button:hover,
.notification-icon-button:hover,
.hotplug-notification-item:hover, .hotplug-notification-item:hover,
.hotplug-resident-eject-button:hover,
.modal-dialog-button:hover { .modal-dialog-button:hover {
background-gradient-start: rgba(255, 255, 255, 0.3); background-gradient-start: rgba(255, 255, 255, 0.3);
background-gradient-end: rgba(255, 255, 255, 0.1); background-gradient-end: rgba(255, 255, 255, 0.1);
} }
.notification-button:focus,
.notification-icon-button:focus,
.hotplug-notification-item:focus, .hotplug-notification-item:focus,
.modal-dialog-button:focus, .modal-dialog-button:focus,
.app-view-control:focus { .app-view-control:focus {
@ -373,10 +447,7 @@ StScrollBar StButton#vhandle:active {
.candidate-page-button:active, .candidate-page-button:active,
.candidate-page-button:pressed, .candidate-page-button:pressed,
.notification-button:active,
.notification-icon-button:active,
.hotplug-notification-item:active, .hotplug-notification-item:active,
.hotplug-resident-eject-button:active,
.modal-dialog-button:active, .modal-dialog-button:active,
.modal-dialog-button:pressed, .modal-dialog-button:pressed,
.app-view-control:checked { .app-view-control:checked {
@ -385,8 +456,6 @@ StScrollBar StButton#vhandle:active {
} }
.candidate-page-button:insensitive, .candidate-page-button:insensitive,
.notification-button:insensitive,
.notification-icon-button:insensitive,
.modal-dialog-button:insensitive { .modal-dialog-button:insensitive {
border-color: #666666; border-color: #666666;
color: #9f9f9f; color: #9f9f9f;
@ -398,7 +467,6 @@ StScrollBar StButton#vhandle:active {
#searchEntry, #searchEntry,
.modal-dialog-button, .modal-dialog-button,
.notification-button,
.hotplug-notification-item, .hotplug-notification-item,
.app-view-controls, .app-view-controls,
#screenShieldNotifications { #screenShieldNotifications {
@ -1226,8 +1294,6 @@ StScrollBar StButton#vhandle:active {
.calendar { .calendar {
padding: .4em 1.75em .8em 1.75em; padding: .4em 1.75em .8em 1.75em;
spacing-rows: 0px;
spacing-columns: 0px;
} }
.calendar-month-label { .calendar-month-label {
@ -1423,111 +1489,87 @@ StScrollBar StButton#vhandle:active {
padding-right: 8pt; padding-right: 8pt;
} }
/* Message Tray */
.notification-drawer {
background: rgba(0,0,0,0.8);
padding: 1em;
border: 2px solid #4c4c4c;
border-bottom: 0px;
border-radius: 6px 6px 0 0;
}
.system-tray-icons,
.notification-drawer-footer-actions {
spacing: 0.5em;
}
.system-tray-icon-button,
.notification-drawer-button {
border-radius: 4px;
border: 1px solid #4c4c4c;
padding: 4px;
}
.system-tray-icon-button {
width: 22px;
height: 22px;
}
.notification-drawer-button StIcon {
icon-size: 22px;
}
.system-tray-icon-button:hover,
.notification-drawer-button:hover {
background: 1px solid #4c4c4c;
}
.url-highlighter { .url-highlighter {
link-color: #ccccff; link-color: #ccccff;
} }
/* Message Tray */ .notification, #notification-container, .notification-drawer {
#message-tray {
background: #2e3436 url(message-tray-background.png);
background-repeat: repeat;
height: 72px;
}
.message-tray-summary {
height: 72px;
}
.message-tray-menu-button StIcon {
padding: 0 20px;
color: #aaaaaa;
icon-size: 24px;
}
.message-tray-menu-button:hover StIcon,
.message-tray-menu-button:active StIcon,
.message-tray-menu-button:focus StIcon {
color: #eeeeee;
}
.no-messages-label,
.no-networks-label {
color: #999999;
}
.no-networks-box {
spacing: 12px;
}
.notification {
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.9);
padding: 8px 8px 4px 8px;
spacing-rows: 4px;
spacing-columns: 10px;
}
.notification, #notification-container {
font-size: 11pt; font-size: 11pt;
width: 34em; width: 34em;
} }
.notification.multi-line-notification { .notification-main-content {
padding-bottom: 8px; padding: 8px;
spacing: 8px;
border-radius: 10px 10px 0px 0px;
background: rgba(0,0,0,0.8);
} }
.notification-unexpanded { .notification-action-area {
/* We want to force the actor at a specific size, irrespective padding: 8px;
of its minimum and preferred size, so we override both */
min-height: 36px;
height: 36px;
} }
/* We use row-span = 2 for the image cell, which prevents its height preferences to be .notification-action-area,
taken into account during allocation, so its height ends up being limited by the height .notification-button {
of the content in the other rows. To avoid showing a stretched image, we set the minimum background: rgba(0,0,0,0.8);
height of the table to be ICON_SIZE + IMAGE_SIZE + spacing-rows = 24 + 125 + 10 = 159 */ border-top: 1px solid #666;
.notification-with-image {
min-height: 159px;
} }
.summary-boxpointer { .notification-button {
-arrow-border-radius: 15px; padding: 8px 0px;
-arrow-background-color: rgba(0,0,0,0.9); border-right: 1px solid #666;
-arrow-base: 36px;
-arrow-rise: 18px;
color: white;
-boxpointer-gap: 4px;
} }
.summary-boxpointer .notification { .notification-button:hover {
border-radius: 9px; background: rgba(255,255,255,0.3);
background: rgba(0,0,0,0) !important;
padding-bottom: 12px;
} }
.summary-boxpointer #summary-right-click-menu { .notification-button:active {
padding-top: 12px; background: rgba(255,255,255,0.1);
padding-bottom: 12px;
} }
.summary-notification-stack-scrollview { .notification-button:last-child {
max-height: 18em; border-right-width: 0px;
padding-top: 8px;
padding-bottom: 8px;
} }
.summary-notification-stack-scrollview:ltr { .notification-title-box {
padding-right: 8px; spacing: 8px;
}
.summary-notification-stack-scrollview:rtl {
padding-left: 8px;
}
.notification-scrollview {
max-height: 10em;
-st-vfade-offset: 24px;
} }
.notification-scrollview:ltr > StScrollBar { .notification-scrollview:ltr > StScrollBar {
@ -1538,37 +1580,9 @@ StScrollBar StButton#vhandle:active {
padding-right: 6px; padding-right: 6px;
} }
.notification-body { .notification-scrollview {
spacing: 5px; max-height: 10em;
} -st-vfade-offset: 24px;
.notification-actions {
padding-top: 18px;
spacing: 10px;
}
.notification-button {
-st-natural-width: 140px;
padding: 4px 4px 5px;
}
.notification-button:focus {
-st-natural-width: 138px;
padding: 3px 4px 4px;
}
.notification-icon-button {
border-radius: 5px;
padding: 5px;
}
.notification-icon-button:focus {
padding: 4px;
}
.notification-icon-button > StIcon {
icon-size: 16px;
padding: 8px;
} }
.secondary-icon { .secondary-icon {
@ -1593,45 +1607,6 @@ StScrollBar StButton#vhandle:active {
padding: 2px 5px; padding: 2px 5px;
} }
.hotplug-resident-box {
spacing: 8px;
}
.hotplug-resident-mount {
spacing: 8px;
border-radius: 4px;
color: #ccc;
}
.hotplug-resident-mount:hover {
background-gradient-direction: horizontal;
background-gradient-start: rgba(255, 255, 255, 0.1);
background-gradient-end: rgba(255, 255, 255, 0);
color: #fff;
}
.hotplug-resident-mount-label {
color: inherit;
padding-left: 6px;
}
.hotplug-resident-mount-icon {
icon-size: 24px;
padding-left: 6px;
}
.hotplug-resident-eject-icon {
icon-size: 16px;
}
.hotplug-resident-eject-button {
padding: 7px;
border-radius: 5px;
color: #ccc;
}
.chat-log-message { .chat-log-message {
color: #888888; color: #888888;
} }
@ -1671,7 +1646,11 @@ StScrollBar StButton#vhandle:active {
padding-right: 4px; padding-right: 4px;
} }
.chat-notification-scrollview{ .chat-notification-body-box {
spacing: 5px;
}
.chat-notification-scrollview {
max-height: 22em; max-height: 22em;
} }
@ -1721,6 +1700,28 @@ StScrollBar StButton#vhandle:active {
-shell-counter-overlap-y: 13px; -shell-counter-overlap-y: 13px;
} }
.message-tray-indicator {
spacing: 4px;
}
.message-tray-indicator-count {
font-size: 1.2em;
font-weight: bold;
color: black;
background-color: rgba(255, 255, 255, 0.7);
border-radius: 1em;
padding: 1em;
text-align: center;
}
.message-tray-indicator-glow {
height: 4px;
background-gradient-start: rgba(255, 255, 255, 0);
background-gradient-end: rgba(255, 255, 255, 1);
background-gradient-direction: vertical;
}
/* OSD */ /* OSD */
.osd-window { .osd-window {
text-align: center; text-align: center;
@ -2590,8 +2591,7 @@ StScrollBar StButton#vhandle:active {
padding-bottom: 0px; padding-bottom: 0px;
} }
#screenShieldNotifications .notification-button, #screenShieldNotifications .notification-button {
#screenShieldNotifications .notification-icon-button {
border: 1px rgba(255,255,255,0.5); border: 1px rgba(255,255,255,0.5);
} }

View File

@ -66,6 +66,7 @@ IGNORE_HFILES= \
gactionmuxer.h \ gactionmuxer.h \
gactionobservable.h \ gactionobservable.h \
gactionobserver.h \ gactionobserver.h \
shell-network-agent.h \
shell-recorder-src.h shell-recorder-src.h
if !BUILD_RECORDER if !BUILD_RECORDER

View File

@ -50,7 +50,6 @@
<xi:include href="xml/shell-wm.xml"/> <xi:include href="xml/shell-wm.xml"/>
<xi:include href="xml/shell-util.xml"/> <xi:include href="xml/shell-util.xml"/>
<xi:include href="xml/shell-mount-operation.xml"/> <xi:include href="xml/shell-mount-operation.xml"/>
<xi:include href="xml/shell-network-agent.xml"/>
<xi:include href="xml/shell-polkit-authentication-agent.xml"/> <xi:include href="xml/shell-polkit-authentication-agent.xml"/>
<xi:include href="xml/shell-tp-client.xml"/> <xi:include href="xml/shell-tp-client.xml"/>
</chapter> </chapter>

View File

@ -23,6 +23,11 @@ const GnomeShellIface = '<node> \
</interface> \ </interface> \
</node>'; </node>';
const customCss = '.prefs-button { \
padding: 8px; \
border-radius: 20px; \
}';
const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface); const GnomeShellProxy = Gio.DBusProxy.makeProxyWrapper(GnomeShellIface);
function stripPrefix(string, prefix) { function stripPrefix(string, prefix) {
@ -46,13 +51,9 @@ const Application = new Lang.Class({
this._extensionPrefsModules = {}; this._extensionPrefsModules = {};
this._extensionIters = {};
this._startupUuid = null; this._startupUuid = null;
}, this._loaded = false;
this._skipMainWindow = false;
_buildModel: function() {
this._model = new Gtk.ListStore();
this._model.set_column_types([GObject.TYPE_STRING, GObject.TYPE_STRING]);
}, },
_extensionAvailable: function(uuid) { _extensionAvailable: function(uuid) {
@ -70,11 +71,6 @@ const Application = new Lang.Class({
return true; return true;
}, },
_setExtensionInsensitive: function(layout, cell, model, iter, data) {
let uuid = model.get_value(iter, 0);
cell.set_sensitive(this._extensionAvailable(uuid));
},
_getExtensionPrefsModule: function(extension) { _getExtensionPrefsModule: function(extension) {
let uuid = extension.metadata.uuid; let uuid = extension.metadata.uuid;
@ -104,21 +100,23 @@ const Application = new Lang.Class({
widget = this._buildErrorUI(extension, e); widget = this._buildErrorUI(extension, e);
} }
// Destroy the current prefs widget, if it exists let dialog = new Gtk.Dialog({ use_header_bar: true,
if (this._extensionPrefsBin.get_child()) modal: true,
this._extensionPrefsBin.get_child().destroy(); title: extension.metadata.name });
this._extensionPrefsBin.add(widget); if (this._skipMainWindow) {
this._extensionSelector.set_active_iter(this._extensionIters[uuid]); this.application.add_window(dialog);
}, if (this._window)
this._window.destroy();
this._window = dialog;
this._window.window_position = Gtk.WindowPosition.CENTER;
} else {
dialog.transient_for = this._window;
}
_extensionSelected: function() { dialog.set_default_size(600, 400);
let [success, iter] = this._extensionSelector.get_active_iter(); dialog.get_content_area().add(widget);
if (!success) dialog.show();
return;
let uuid = this._model.get_value(iter, 0);
this._selectExtension(uuid);
}, },
_buildErrorUI: function(extension, exc) { _buildErrorUI: function(extension, exc) {
@ -151,48 +149,26 @@ const Application = new Lang.Class({
_buildUI: function(app) { _buildUI: function(app) {
this._window = new Gtk.ApplicationWindow({ application: app, this._window = new Gtk.ApplicationWindow({ application: app,
window_position: Gtk.WindowPosition.CENTER, window_position: Gtk.WindowPosition.CENTER });
title: _("GNOME Shell Extension Preferences") });
this._window.set_size_request(600, 400); this._window.set_size_request(800, 500);
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); this._titlebar = new Gtk.HeaderBar({ show_close_button: true,
this._window.add(vbox); title: _("GNOME Shell Extensions") });
this._window.set_titlebar(this._titlebar);
let toolbar = new Gtk.Toolbar(); let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER,
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR); shadow_type: Gtk.ShadowType.IN,
vbox.add(toolbar); halign: Gtk.Align.CENTER,
let toolitem; margin: 18 });
this._window.add(scroll);
let label = new Gtk.Label({ label: '<b>' + _("Extension") + '</b>', this._extensionSelector = new Gtk.ListBox({ selection_mode: Gtk.SelectionMode.NONE });
use_markup: true }); this._extensionSelector.set_sort_func(Lang.bind(this, this._sortList));
toolitem = new Gtk.ToolItem({ child: label }); this._extensionSelector.set_header_func(Lang.bind(this, this._updateHeader));
toolbar.add(toolitem);
this._extensionSelector = new Gtk.ComboBox({ model: this._model, scroll.add(this._extensionSelector);
margin_left: 8,
hexpand: true });
this._extensionSelector.get_style_context().add_class(Gtk.STYLE_CLASS_RAISED);
let renderer = new Gtk.CellRendererText();
this._extensionSelector.pack_start(renderer, true);
this._extensionSelector.add_attribute(renderer, 'text', 1);
this._extensionSelector.set_cell_data_func(renderer, Lang.bind(this, this._setExtensionInsensitive));
this._extensionSelector.connect('changed', Lang.bind(this, this._extensionSelected));
toolitem = new Gtk.ToolItem({ child: this._extensionSelector });
toolitem.set_expand(true);
toolbar.add(toolitem);
this._extensionPrefsBin = new Gtk.Frame();
vbox.add(this._extensionPrefsBin);
let label = new Gtk.Label({
label: _("Select an extension to configure using the combobox above."),
vexpand: true
});
this._extensionPrefsBin.add(label);
this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell'); this._shellProxy = new GnomeShellProxy(Gio.DBus.session, 'org.gnome.Shell', '/org/gnome/Shell');
this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) { this._shellProxy.connectSignal('ExtensionStatusChanged', Lang.bind(this, function(proxy, senderName, [uuid, state, error]) {
@ -203,6 +179,35 @@ const Application = new Lang.Class({
this._window.show_all(); this._window.show_all();
}, },
_addCustomStyle: function() {
let provider = new Gtk.CssProvider();
try {
provider.load_from_data(customCss, -1);
} catch(e) {
log('Failed to add application style');
return;
}
let screen = this._window.window.get_screen();
let priority = Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION;
Gtk.StyleContext.add_provider_for_screen(screen, provider, priority);
},
_sortList: function(row1, row2) {
let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name;
let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name;
return name1.localeCompare(name2);
},
_updateHeader: function(row, before) {
if (!before || row.get_header())
return;
let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL });
row.set_header(sep);
},
_scanExtensions: function() { _scanExtensions: function() {
let finder = new ExtensionUtils.ExtensionFinder(); let finder = new ExtensionUtils.ExtensionFinder();
finder.connect('extension-found', Lang.bind(this, this._extensionFound)); finder.connect('extension-found', Lang.bind(this, this._extensionFound));
@ -211,15 +216,24 @@ const Application = new Lang.Class({
}, },
_extensionFound: function(finder, extension) { _extensionFound: function(finder, extension) {
let iter = this._model.append(); let row = new ExtensionRow(extension.uuid);
this._model.set(iter, [0, 1], [extension.uuid, extension.metadata.name]);
this._extensionIters[extension.uuid] = iter; row.prefsButton.visible = this._extensionAvailable(row.uuid);
row.prefsButton.connect('clicked', Lang.bind(this,
function() {
this._selectExtension(row.uuid);
}));
row.show_all();
this._extensionSelector.add(row);
}, },
_extensionsLoaded: function() { _extensionsLoaded: function() {
if (this._startupUuid && this._extensionAvailable(this._startupUuid)) if (this._startupUuid && this._extensionAvailable(this._startupUuid))
this._selectExtension(this._startupUuid); this._selectExtension(this._startupUuid);
this._startupUuid = null; this._startupUuid = null;
this._skipMainWindow = false;
this._loaded = true;
}, },
_onActivate: function() { _onActivate: function() {
@ -227,29 +241,125 @@ const Application = new Lang.Class({
}, },
_onStartup: function(app) { _onStartup: function(app) {
this._buildModel();
this._buildUI(app); this._buildUI(app);
this._addCustomStyle();
this._scanExtensions(); this._scanExtensions();
}, },
_onCommandLine: function(app, commandLine) { _onCommandLine: function(app, commandLine) {
app.activate(); app.activate();
let args = commandLine.get_arguments(); let args = commandLine.get_arguments();
if (args.length) { if (args.length) {
let uuid = args[0]; let uuid = args[0];
this._skipMainWindow = true;
// Strip off "extension:///" prefix which fakes a URI, if it exists // Strip off "extension:///" prefix which fakes a URI, if it exists
uuid = stripPrefix(uuid, "extension:///"); uuid = stripPrefix(uuid, "extension:///");
if (this._extensionAvailable(uuid)) if (this._extensionAvailable(uuid))
this._selectExtension(uuid); this._selectExtension(uuid);
else else if (!this._loaded)
this._startupUuid = uuid; this._startupUuid = uuid;
else
this._skipMainWindow = false;
} }
return 0; return 0;
} }
}); });
const ExtensionRow = new Lang.Class({
Name: 'ExtensionRow',
Extends: Gtk.ListBoxRow,
_init: function(uuid) {
this.parent();
this.uuid = uuid;
this._settings = new Gio.Settings({ schema: 'org.gnome.shell' });
this._settings.connect('changed::enabled-extensions', Lang.bind(this,
function() {
this._switch.state = this._isEnabled();
}));
this._buildUI();
},
_buildUI: function() {
let extension = ExtensionUtils.extensions[this.uuid];
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL,
hexpand: true, margin: 12, spacing: 6 });
this.add(hbox);
let vbox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL,
spacing: 6, hexpand: true });
hbox.add(vbox);
let name = GLib.markup_escape_text(extension.metadata.name, -1);
let label = new Gtk.Label({ label: '<b>' + name + '</b>',
use_markup: true,
halign: Gtk.Align.START });
vbox.add(label);
let desc = extension.metadata.description.split('\n')[0];
label = new Gtk.Label({ label: desc,
ellipsize: Pango.EllipsizeMode.END,
halign: Gtk.Align.START });
vbox.add(label);
let button = new Gtk.Button({ valign: Gtk.Align.CENTER,
no_show_all: true });
button.add(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
icon_size: Gtk.IconSize.BUTTON,
visible: true }));
button.get_style_context().add_class('prefs-button');
hbox.add(button);
this.prefsButton = button;
this._switch = new Gtk.Switch({ valign: Gtk.Align.CENTER,
state: this._isEnabled() });
this._switch.connect('notify::active', Lang.bind(this,
function() {
if (this._switch.active)
this._enable();
else
this._disable();
}));
this._switch.connect('state-set', function() { return true; });
hbox.add(this._switch);
},
_isEnabled: function() {
let extensions = this._settings.get_strv('enabled-extensions');
return extensions.indexOf(this.uuid) != -1;
},
_enable: function() {
let extensions = this._settings.get_strv('enabled-extensions');
if (extensions.indexOf(this.uuid) != -1)
return;
extensions.push(this.uuid);
this._settings.set_strv('enabled-extensions', extensions);
},
_disable: function() {
let extensions = this._settings.get_strv('enabled-extensions');
let pos = extensions.indexOf(this.uuid);
if (pos == -1)
return;
do {
extensions.splice(pos, 1);
pos = extensions.indexOf(this.uuid);
} while (pos != -1);
this._settings.set_strv('enabled-extensions', extensions);
}
});
function initEnvironment() { function initEnvironment() {
// Monkey-patch in a "global" object that fakes some Shell utilities // Monkey-patch in a "global" object that fakes some Shell utilities
// that ExtensionUtils depends on. // that ExtensionUtils depends on.

View File

@ -48,8 +48,6 @@ const _SCROLL_ANIMATION_TIME = 0.5;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0; const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_HEIGHT = 48; const _LOGO_ICON_HEIGHT = 48;
let _loginDialog = null;
const UserListItem = new Lang.Class({ const UserListItem = new Lang.Class({
Name: 'UserListItem', Name: 'UserListItem',

View File

@ -84,6 +84,7 @@
<file>ui/userWidget.js</file> <file>ui/userWidget.js</file>
<file>ui/viewSelector.js</file> <file>ui/viewSelector.js</file>
<file>ui/windowAttentionHandler.js</file> <file>ui/windowAttentionHandler.js</file>
<file>ui/windowMenu.js</file>
<file>ui/windowManager.js</file> <file>ui/windowManager.js</file>
<file>ui/workspace.js</file> <file>ui/workspace.js</file>
<file>ui/workspaceSwitcherPopup.js</file> <file>ui/workspaceSwitcherPopup.js</file>

View File

@ -167,6 +167,8 @@ const AppSwitcherPopup = new Lang.Class({
this._select(this._selectedIndex, this._nextWindow()); this._select(this._selectedIndex, this._nextWindow());
else if (keysym == Clutter.Up) else if (keysym == Clutter.Up)
this._select(this._selectedIndex, null, true); this._select(this._selectedIndex, null, true);
else
return Clutter.EVENT_PROPAGATE;
} else { } else {
if (keysym == Clutter.Left) if (keysym == Clutter.Left)
this._select(this._previous()); this._select(this._previous());
@ -174,7 +176,11 @@ const AppSwitcherPopup = new Lang.Class({
this._select(this._next()); this._select(this._next());
else if (keysym == Clutter.Down) else if (keysym == Clutter.Down)
this._select(this._selectedIndex, 0); this._select(this._selectedIndex, 0);
else
return Clutter.EVENT_PROPAGATE;
} }
return Clutter.EVENT_STOP;
}, },
_scrollHandler: function(direction) { _scrollHandler: function(direction) {
@ -366,7 +372,7 @@ const WindowSwitcherPopup = new Lang.Class({
_getWindowList: function() { _getWindowList: function() {
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null; let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace); return global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
}, },
_createSwitcher: function() { _createSwitcher: function() {
@ -404,7 +410,11 @@ const WindowSwitcherPopup = new Lang.Class({
this._select(this._previous()); this._select(this._previous());
else if (keysym == Clutter.Right) else if (keysym == Clutter.Right)
this._select(this._next()); this._select(this._next());
else
return Clutter.EVENT_PROPAGATE;
} }
return Clutter.EVENT_STOP;
}, },
_finish: function() { _finish: function() {
@ -449,8 +459,7 @@ const AppSwitcher = new Lang.Class({
let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' }); let settings = new Gio.Settings({ schema: 'org.gnome.shell.app-switcher' });
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
: null; : null;
let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, let allWindows = global.display.get_tab_list(Meta.TabList.NORMAL, workspace);
global.screen, workspace);
// Construct the AppIcons, add to the popup // Construct the AppIcons, add to the popup
for (let i = 0; i < apps.length; i++) { for (let i = 0; i < apps.length; i++) {

View File

@ -408,8 +408,8 @@ const Calendar = new Lang.Class({
this._shouldDateGrabFocus = false; this._shouldDateGrabFocus = false;
this.actor = new St.Table({ homogeneous: false, this.actor = new St.Widget({ style_class: 'calendar',
style_class: 'calendar', layout_manager: new Clutter.TableLayout(),
reactive: true }); reactive: true });
this.actor.connect('scroll-event', this.actor.connect('scroll-event',
@ -441,13 +441,14 @@ const Calendar = new Lang.Class({
}, },
_buildHeader: function() { _buildHeader: function() {
let layout = this.actor.layout_manager;
let offsetCols = this._useWeekdate ? 1 : 0; let offsetCols = this._useWeekdate ? 1 : 0;
this.actor.destroy_all_children(); this.actor.destroy_all_children();
// Top line of the calendar '<| September 2009 |>' // Top line of the calendar '<| September 2009 |>'
this._topBox = new St.BoxLayout(); this._topBox = new St.BoxLayout();
this.actor.add(this._topBox, layout.pack(this._topBox, 0, 0);
{ row: 0, col: 0, col_span: offsetCols + 7 }); layout.set_span(this._topBox, offsetCols + 7, 1);
this._backButton = new St.Button({ style_class: 'calendar-change-month-back', this._backButton = new St.Button({ style_class: 'calendar-change-month-back',
accessible_name: _("Previous month"), accessible_name: _("Previous month"),
@ -479,10 +480,8 @@ const Calendar = new Lang.Class({
let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay()); let customDayAbbrev = _getCalendarDayAbbreviation(iter.getDay());
let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading', let label = new St.Label({ style_class: 'calendar-day-base calendar-day-heading',
text: customDayAbbrev }); text: customDayAbbrev });
this.actor.add(label, let col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
{ row: 1, layout.pack(label, col, 1);
col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7,
x_fill: false, x_align: St.Align.MIDDLE });
iter.setTime(iter.getTime() + MSECS_IN_DAY); iter.setTime(iter.getTime() + MSECS_IN_DAY);
} }
@ -601,6 +600,7 @@ const Calendar = new Lang.Class({
beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY); beginDate.setTime(beginDate.getTime() - (weekPadding + daysToWeekStart) * MSECS_IN_DAY);
let layout = this.actor.layout_manager;
let iter = new Date(beginDate); let iter = new Date(beginDate);
let row = 2; let row = 2;
// nRows here means 6 weeks + one header + one navbar // nRows here means 6 weeks + one header + one navbar
@ -648,16 +648,15 @@ const Calendar = new Lang.Class({
button.style_class = styleClass; button.style_class = styleClass;
let offsetCols = this._useWeekdate ? 1 : 0; let offsetCols = this._useWeekdate ? 1 : 0;
this.actor.add(button, let col = offsetCols + (7 + iter.getDay() - this._weekStart) % 7;
{ row: row, col: offsetCols + (7 + iter.getDay() - this._weekStart) % 7 }); layout.pack(button, col, row);
this._buttons.push(button); this._buttons.push(button);
if (this._useWeekdate && iter.getDay() == 4) { if (this._useWeekdate && iter.getDay() == 4) {
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(), let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(),
style_class: 'calendar-day-base calendar-week-number'}); style_class: 'calendar-day-base calendar-week-number'});
this.actor.add(label, layout.pack(label, 0, row);
{ row: row, col: 0, y_align: St.Align.MIDDLE });
} }
iter.setTime(iter.getTime() + MSECS_IN_DAY); iter.setTime(iter.getTime() + MSECS_IN_DAY);
@ -700,7 +699,10 @@ const EventsList = new Lang.Class({
Name: 'EventsList', Name: 'EventsList',
_init: function() { _init: function() {
this.actor = new St.Table({ style_class: 'events-table' }); let layout = new Clutter.TableLayout();
this.actor = new St.Widget({ style_class: 'events-table',
layout_manager: layout });
layout.hookup_style(this.actor);
this._date = new Date(); this._date = new Date();
this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' }); this._desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
this._desktopSettings.connect('changed', Lang.bind(this, this._update)); this._desktopSettings.connect('changed', Lang.bind(this, this._update));
@ -724,9 +726,11 @@ const EventsList = new Lang.Class({
dayLabel.clutter_text.line_wrap = false; dayLabel.clutter_text.line_wrap = false;
dayLabel.clutter_text.ellipsize = false; dayLabel.clutter_text.ellipsize = false;
this.actor.add(dayLabel, { row: index, col: 0, let layout = this.actor.layout_manager;
x_expand: false, x_align: St.Align.END, layout.pack(dayLabel, 0, index);
y_fill: false, y_align: St.Align.START }); layout.child_set(dayLabel, { x_expand: false,
x_align: Clutter.TableAlignment.END,
y_align: Clutter.TableAlignment.START });
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY); let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let timeString = _formatEventTime(event, clockFormat); let timeString = _formatEventTime(event, clockFormat);
@ -735,18 +739,17 @@ const EventsList = new Lang.Class({
timeLabel.clutter_text.line_wrap = false; timeLabel.clutter_text.line_wrap = false;
timeLabel.clutter_text.ellipsize = false; timeLabel.clutter_text.ellipsize = false;
this.actor.add(timeLabel, { row: index, col: 1, layout.pack(timeLabel, 1, index);
x_expand: false, x_align: St.Align.MIDDLE, layout.child_set(timeLabel, { x_expand: false,
y_fill: false, y_align: St.Align.START }); y_align: Clutter.TableAlignment.START });
let titleLabel = new St.Label({ style_class: 'events-day-task', let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary }); text: event.summary });
titleLabel.clutter_text.line_wrap = true; titleLabel.clutter_text.line_wrap = true;
titleLabel.clutter_text.ellipsize = false; titleLabel.clutter_text.ellipsize = false;
this.actor.add(titleLabel, { row: index, col: 2, layout.pack(titleLabel, 2, index);
x_expand: true, x_align: St.Align.START, layout.child_set(titleLabel, { x_expand: true });
y_fill: false, y_align: St.Align.START });
}, },
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) { _addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) {
@ -755,13 +758,10 @@ const EventsList = new Lang.Class({
if (events.length == 0 && !showNothingScheduled) if (events.length == 0 && !showNothingScheduled)
return index; return index;
this.actor.add(new St.Label({ style_class: 'events-day-header', text: header }), let label = new St.Label({ style_class: 'events-day-header', text: header });
{ row: index, col: 0, col_span: 3, let layout = this.actor.layout_manager;
// In theory, x_expand should be true here, but x_expand layout.pack(label, 0, index);
// is a property of the column for StTable, ie all day cells layout.child_set(label, { column_span: 3, x_expand: false });
// get it too
x_expand: false, x_align: St.Align.START,
y_fill: false, y_align: St.Align.START });
index++; index++;
for (let n = 0; n < events.length; n++) { for (let n = 0; n < events.length; n++) {

View File

@ -170,17 +170,6 @@ const AutorunManager = new Lang.Class({
this._transDispatcher = new AutorunTransientDispatcher(this); this._transDispatcher = new AutorunTransientDispatcher(this);
}, },
_ensureResidentSource: function() {
if (this._residentSource)
return;
this._residentSource = new AutorunResidentSource(this);
let destroyId = this._residentSource.connect('destroy', Lang.bind(this, function() {
this._residentSource.disconnect(destroyId);
this._residentSource = null;
}));
},
enable: function() { enable: function() {
this._scanMounts(); this._scanMounts();
@ -189,17 +178,12 @@ const AutorunManager = new Lang.Class({
}, },
disable: function() { disable: function() {
if (this._residentSource)
this._residentSource.destroy();
this._volumeMonitor.disconnect(this._mountAddedId); this._volumeMonitor.disconnect(this._mountAddedId);
this._volumeMonitor.disconnect(this._mountRemovedId); this._volumeMonitor.disconnect(this._mountRemovedId);
}, },
_processMount: function(mount, hotplug) { _processMount: function(mount, hotplug) {
let discoverer = new ContentTypeDiscoverer(Lang.bind(this, function(mount, apps, contentTypes) { let discoverer = new ContentTypeDiscoverer(Lang.bind(this, function(mount, apps, contentTypes) {
this._ensureResidentSource();
this._residentSource.addMount(mount, apps);
if (hotplug) if (hotplug)
this._transDispatcher.addMount(mount, apps, contentTypes); this._transDispatcher.addMount(mount, apps, contentTypes);
})); }));
@ -224,8 +208,6 @@ const AutorunManager = new Lang.Class({
_onMountRemoved: function(monitor, mount) { _onMountRemoved: function(monitor, mount) {
this._transDispatcher.removeMount(mount); this._transDispatcher.removeMount(mount);
if (this._residentSource)
this._residentSource.removeMount(mount);
}, },
ejectMount: function(mount) { ejectMount: function(mount) {
@ -288,153 +270,6 @@ const AutorunManager = new Lang.Class({
}, },
}); });
const AutorunResidentSource = new Lang.Class({
Name: 'AutorunResidentSource',
Extends: MessageTray.Source,
_init: function(manager) {
this.parent(_("Removable Devices"), 'media-removable');
this.resident = true;
this._mounts = [];
this._manager = manager;
this._notification = new AutorunResidentNotification(this._manager, this);
},
_createPolicy: function() {
return new MessageTray.NotificationPolicy({ showInLockScreen: false });
},
buildRightClickMenu: function() {
return null;
},
addMount: function(mount, apps) {
if (!shouldAutorunMount(mount, false))
return;
let filtered = this._mounts.filter(function (element) {
return (element.mount == mount);
});
if (filtered.length != 0)
return;
let element = { mount: mount, apps: apps };
this._mounts.push(element);
this._redisplay();
},
removeMount: function(mount) {
this._mounts =
this._mounts.filter(function (element) {
return (element.mount != mount);
});
this._redisplay();
},
_redisplay: function() {
if (this._mounts.length == 0) {
this._notification.destroy();
this.destroy();
return;
}
this._notification.updateForMounts(this._mounts);
// add ourselves as a source, and push the notification
if (!Main.messageTray.contains(this)) {
Main.messageTray.add(this);
this.pushNotification(this._notification);
}
}
});
const AutorunResidentNotification = new Lang.Class({
Name: 'AutorunResidentNotification',
Extends: MessageTray.Notification,
_init: function(manager, source) {
this.parent(source, source.title, null, { customContent: true });
// set the notification as resident
this.setResident(true);
this._layout = new St.BoxLayout ({ style_class: 'hotplug-resident-box',
vertical: true });
this._manager = manager;
this.addActor(this._layout,
{ x_expand: true,
x_fill: true });
},
updateForMounts: function(mounts) {
// remove all the layout content
this._layout.destroy_all_children();
for (let idx = 0; idx < mounts.length; idx++) {
let element = mounts[idx];
let actor = this._itemForMount(element.mount, element.apps);
this._layout.add(actor, { x_fill: true,
expand: true });
}
},
_itemForMount: function(mount, apps) {
let item = new St.BoxLayout();
// prepare the mount button content
let mountLayout = new St.BoxLayout();
let mountIcon = new St.Icon({ gicon: mount.get_icon(),
style_class: 'hotplug-resident-mount-icon' });
mountLayout.add_actor(mountIcon);
let labelBin = new St.Bin({ y_align: St.Align.MIDDLE });
let mountLabel =
new St.Label({ text: mount.get_name(),
style_class: 'hotplug-resident-mount-label',
track_hover: true,
reactive: true });
labelBin.add_actor(mountLabel);
mountLayout.add_actor(labelBin);
let mountButton = new St.Button({ child: mountLayout,
x_align: St.Align.START,
x_fill: true,
style_class: 'hotplug-resident-mount',
button_mask: St.ButtonMask.ONE });
item.add(mountButton, { x_align: St.Align.START,
expand: true });
let ejectIcon =
new St.Icon({ icon_name: 'media-eject-symbolic',
style_class: 'hotplug-resident-eject-icon' });
let ejectButton =
new St.Button({ style_class: 'hotplug-resident-eject-button',
button_mask: St.ButtonMask.ONE,
child: ejectIcon });
item.add(ejectButton, { x_align: St.Align.END });
// now connect signals
mountButton.connect('clicked', Lang.bind(this, function(actor, event) {
startAppForMount(apps[0], mount);
}));
ejectButton.connect('clicked', Lang.bind(this, function() {
this._manager.ejectMount(mount);
}));
return item;
},
});
const AutorunTransientDispatcher = new Lang.Class({ const AutorunTransientDispatcher = new Lang.Class({
Name: 'AutorunTransientDispatcher', Name: 'AutorunTransientDispatcher',
@ -559,12 +394,12 @@ const AutorunTransientNotification = new Lang.Class({
Extends: MessageTray.Notification, Extends: MessageTray.Notification,
_init: function(manager, source) { _init: function(manager, source) {
this.parent(source, source.title, null, { customContent: true }); this.parent(source, source.title);
this._manager = manager; this._manager = manager;
this._box = new St.BoxLayout({ style_class: 'hotplug-transient-box', this._box = new St.BoxLayout({ style_class: 'hotplug-transient-box',
vertical: true }); vertical: true });
this.addActor(this._box); this._bodyBin.child = this._box;
this._mount = source.mount; this._mount = source.mount;

View File

@ -102,15 +102,6 @@ const TelepathyClient = new Lang.Class({
this._tpClient.set_handle_channels_func( this._tpClient.set_handle_channels_func(
Lang.bind(this, this._handleChannels)); Lang.bind(this, this._handleChannels));
// Watch subscription requests and connection errors
this._subscriptionSource = null;
this._accountSource = null;
// Workaround for gjs not supporting GPtrArray in signals.
// See BGO bug #653941 for context.
this._tpClient.set_contact_list_changed_func(
Lang.bind(this, this._contactListChanged));
// Allow other clients (such as Empathy) to pre-empt our channels if // Allow other clients (such as Empathy) to pre-empt our channels if
// needed // needed
this._tpClient.set_delegated_channels_callback( this._tpClient.set_delegated_channels_callback(
@ -124,17 +115,12 @@ const TelepathyClient = new Lang.Class({
throw new Error('Couldn\'t register Telepathy client. Error: \n' + e); throw new Error('Couldn\'t register Telepathy client. Error: \n' + e);
} }
this._accountManagerValidityChangedId = this._accountManager.connect('account-validity-changed',
Lang.bind(this, this._accountValidityChanged));
if (!this._accountManager.is_prepared(Tp.AccountManager.get_feature_quark_core())) if (!this._accountManager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
this._accountManager.prepare_async(null, Lang.bind(this, this._accountManagerPrepared)); this._accountManager.prepare_async(null, Lang.bind(this, this._accountManagerPrepared));
}, },
disable: function() { disable: function() {
this._tpClient.unregister(); this._tpClient.unregister();
this._accountManager.disconnect(this._accountManagerValidityChangedId);
this._accountManagerValidityChangedId = 0;
}, },
_observeChannels: function(observer, account, conn, channels, _observeChannels: function(observer, account, conn, channels,
@ -219,33 +205,6 @@ const TelepathyClient = new Lang.Class({
} }
}, },
_displayRoomInvitation: function(conn, channel, dispatchOp, context) {
// We can only approve the rooms if we have been invited to it
let selfContact = channel.group_get_self_contact();
if (selfContact == null) {
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
message: 'Not invited to the room' }));
return;
}
let [invited, inviter, reason, msg] = channel.group_get_local_pending_contact_info(selfContact);
if (!invited) {
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
message: 'Not invited to the room' }));
return;
}
// FIXME: We don't have a 'chat room' icon (bgo #653737) use
// system-users for now as Empathy does.
let source = new ApproverSource(dispatchOp, _("Invitation"),
Gio.icon_new_for_string('system-users'));
Main.messageTray.add(source);
let notif = new RoomInviteNotification(source, dispatchOp, channel, inviter);
source.notify(notif);
context.accept();
},
_approveChannels: function(approver, account, conn, channels, _approveChannels: function(approver, account, conn, channels,
dispatchOp, context) { dispatchOp, context) {
let channel = channels[0]; let channel = channels[0];
@ -259,10 +218,6 @@ const TelepathyClient = new Lang.Class({
if (chanType == Tp.IFACE_CHANNEL_TYPE_TEXT) if (chanType == Tp.IFACE_CHANNEL_TYPE_TEXT)
this._approveTextChannel(account, conn, channel, dispatchOp, context); this._approveTextChannel(account, conn, channel, dispatchOp, context);
else if (chanType == Tp.IFACE_CHANNEL_TYPE_CALL)
this._approveCall(account, conn, channel, dispatchOp, context);
else if (chanType == Tp.IFACE_CHANNEL_TYPE_FILE_TRANSFER)
this._approveFileTransfer(account, conn, channel, dispatchOp, context);
else else
context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT, context.fail(new Tp.Error({ code: Tp.Error.INVALID_ARGUMENT,
message: 'Unsupported channel type' })); message: 'Unsupported channel type' }));
@ -283,45 +238,9 @@ const TelepathyClient = new Lang.Class({
}})); }}));
context.accept(); context.accept();
} else {
this._displayRoomInvitation(conn, channel, dispatchOp, context);
} }
}, },
_approveCall: function(account, conn, channel, dispatchOp, context) {
let isVideo = false;
let props = channel.borrow_immutable_properties();
if (props[Tp.PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO])
isVideo = true;
// We got the TpContact
let source = new ApproverSource(dispatchOp, _("Call"), isVideo ?
Gio.icon_new_for_string('camera-web') :
Gio.icon_new_for_string('audio-input-microphone'));
Main.messageTray.add(source);
let notif = new AudioVideoNotification(source, dispatchOp, channel,
channel.get_target_contact(), isVideo);
source.notify(notif);
context.accept();
},
_approveFileTransfer: function(account, conn, channel, dispatchOp, context) {
// Use the icon of the file being transferred
let gicon = Gio.content_type_get_icon(channel.get_mime_type());
// We got the TpContact
let source = new ApproverSource(dispatchOp, _("File Transfer"), gicon);
Main.messageTray.add(source);
let notif = new FileTransferNotification(source, dispatchOp, channel,
channel.get_target_contact());
source.notify(notif);
context.accept();
},
_delegatedChannelsCb: function(client, channels) { _delegatedChannelsCb: function(client, channels) {
// Nothing to do as we don't make a distinction between observed and // Nothing to do as we don't make a distinction between observed and
// handled channels. // handled channels.
@ -329,105 +248,7 @@ const TelepathyClient = new Lang.Class({
_accountManagerPrepared: function(am, result) { _accountManagerPrepared: function(am, result) {
am.prepare_finish(result); am.prepare_finish(result);
let accounts = am.get_valid_accounts();
for (let i = 0; i < accounts.length; i++) {
this._accountValidityChanged(am, accounts[i], true);
}
}, },
_accountValidityChanged: function(am, account, valid) {
if (!valid)
return;
// It would be better to connect to "status-changed" but we cannot.
// See discussion in https://bugzilla.gnome.org/show_bug.cgi?id=654159
account.connect("notify::connection-status",
Lang.bind(this, this._accountConnectionStatusNotifyCb));
account.connect('notify::connection',
Lang.bind(this, this._connectionChanged));
this._connectionChanged(account);
},
_connectionChanged: function(account) {
let conn = account.get_connection();
if (conn == null)
return;
this._tpClient.grab_contact_list_changed(conn);
if (conn.get_contact_list_state() == Tp.ContactListState.SUCCESS) {
this._contactListChanged(conn, conn.dup_contact_list(), []);
}
},
_contactListChanged: function(conn, added, removed) {
for (let i = 0; i < added.length; i++) {
let contact = added[i];
contact.connect('subscription-states-changed',
Lang.bind(this, this._subscriptionStateChanged));
this._subscriptionStateChanged(contact);
}
},
_subscriptionStateChanged: function(contact) {
if (contact.get_publish_state() != Tp.SubscriptionState.ASK)
return;
/* Implicitly accept publish requests if contact is already subscribed */
if (contact.get_subscribe_state() == Tp.SubscriptionState.YES ||
contact.get_subscribe_state() == Tp.SubscriptionState.ASK) {
contact.authorize_publication_async(function(src, result) {
src.authorize_publication_finish(result)});
return;
}
/* Display notification to ask user to accept/reject request */
let source = this._ensureAppSource();
let notif = new SubscriptionRequestNotification(source, contact);
source.notify(notif);
},
_accountConnectionStatusNotifyCb: function(account) {
let connectionError = account.connection_error;
if (account.connection_status != Tp.ConnectionStatus.DISCONNECTED ||
connectionError == Tp.error_get_dbus_name(Tp.Error.CANCELLED)) {
return;
}
let notif = this._accountNotifications[account.get_object_path()];
if (notif)
return;
/* Display notification that account failed to connect */
let source = this._ensureAppSource();
notif = new AccountNotification(source, account, connectionError);
this._accountNotifications[account.get_object_path()] = notif;
notif.connect('destroy', Lang.bind(this, function() {
delete this._accountNotifications[account.get_object_path()];
}));
source.notify(notif);
},
_ensureAppSource: function() {
if (this._appSource == null) {
this._appSource = new MessageTray.Source(_("Chat"), 'empathy');
this._appSource.policy = new MessageTray.NotificationApplicationPolicy('empathy');
Main.messageTray.add(this._appSource);
this._appSource.connect('destroy', Lang.bind(this, function () {
this._appSource = null;
}));
}
return this._appSource;
}
}); });
const ChatSource = new Lang.Class({ const ChatSource = new Lang.Class({
@ -545,7 +366,7 @@ const ChatSource = new Lang.Class({
_updateAvatarIcon: function() { _updateAvatarIcon: function() {
this.iconUpdated(); this.iconUpdated();
this._notification.update(this._notification.title, null, { customContent: true }); this._notification.update(this._notification.title);
}, },
open: function() { open: function() {
@ -737,7 +558,7 @@ const ChatSource = new Lang.Class({
title = GLib.markup_escape_text(this.title, -1); title = GLib.markup_escape_text(this.title, -1);
this._notification.update(this._notification.title, null, { customContent: true, secondaryGIcon: this.getSecondaryIcon() }); this._notification.update(this._notification.title, null, { secondaryGIcon: this.getSecondaryIcon() });
if (message) if (message)
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>'; msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
@ -764,8 +585,7 @@ const ChatNotification = new Lang.Class({
Extends: MessageTray.Notification, Extends: MessageTray.Notification,
_init: function(source) { _init: function(source) {
this.parent(source, source.title, null, { customContent: true, secondaryGIcon: source.getSecondaryIcon() }); this.parent(source, source.title, null, { secondaryGIcon: source.getSecondaryIcon() });
this.setResident(true);
this._responseEntry = new St.Entry({ style_class: 'chat-response', this._responseEntry = new St.Entry({ style_class: 'chat-response',
can_focus: true }); can_focus: true });
@ -781,16 +601,17 @@ const ChatNotification = new Lang.Class({
this.emit('unfocused'); this.emit('unfocused');
})); }));
this._createScrollArea();
this._lastGroup = null; this._lastGroup = null;
this._lastGroupActor = null;
this._bodyBox = new St.BoxLayout({ style_class: 'chat-notification-body-box' });
this._bodyBin.child = this._bodyBox;
// Keep track of the bottom position for the current adjustment and // Keep track of the bottom position for the current adjustment and
// force a scroll to the bottom if things change while we were at the // force a scroll to the bottom if things change while we were at the
// bottom // bottom
this._oldMaxScrollValue = this._scrollArea.vscroll.adjustment.value; this._oldMaxScrollValue = this._bodyScrollArea.vscroll.adjustment.value;
this._scrollArea.add_style_class_name('chat-notification-scrollview'); this._bodyScrollArea.add_style_class_name('chat-notification-scrollview');
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) { this._bodyScrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
if (adjustment.value == this._oldMaxScrollValue) if (adjustment.value == this._oldMaxScrollValue)
this.scrollTo(St.Side.BOTTOM); this.scrollTo(St.Side.BOTTOM);
this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size); this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size);
@ -827,8 +648,7 @@ const ChatNotification = new Lang.Class({
} }
if (message.direction == NotificationDirection.RECEIVED) { if (message.direction == NotificationDirection.RECEIVED) {
this.update(this.source.title, messageBody, { customContent: true, this.update(this.source.title, messageBody, { bannerMarkup: true });
bannerMarkup: true });
} }
let group = (message.direction == NotificationDirection.RECEIVED ? let group = (message.direction == NotificationDirection.RECEIVED ?
@ -865,7 +685,7 @@ const ChatNotification = new Lang.Class({
expired[i].actor.destroy(); expired[i].actor.destroy();
} }
let groups = this._contentArea.get_children(); let groups = this._bodyBox.get_children();
for (let i = 0; i < groups.length; i++) { for (let i = 0; i < groups.length; i++) {
let group = groups[i]; let group = groups[i];
if (group.get_n_children() == 0) if (group.get_n_children() == 0)
@ -897,9 +717,9 @@ const ChatNotification = new Lang.Class({
if (this._timestampTimeoutId) if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId); Mainloop.source_remove(this._timestampTimeoutId);
let highlighter = new MessageTray.URLHighlighter(props.body, let highlighter = new MessageTray.URLHighlighter();
true, // line wrap? highlighter.actor.clutter_text.line_wrap = true;
true); // allow markup? highlighter.setMarkup(props.body, true);
let body = highlighter.actor; let body = highlighter.actor;
@ -911,14 +731,16 @@ const ChatNotification = new Lang.Class({
if (group != this._lastGroup) { if (group != this._lastGroup) {
this._lastGroup = group; this._lastGroup = group;
let emptyLine = new St.Label({ style_class: 'chat-empty-line' }); let emptyLine = new St.Label({ style_class: 'chat-empty-line' });
this.addActor(emptyLine); this._bodyBox.add_child(emptyLine);
} }
this._lastMessageBox = new St.BoxLayout({ vertical: false }); this._lastMessageBox = new St.BoxLayout({ vertical: false });
this._lastMessageBox.add(body, props.childProps);
this.addActor(this._lastMessageBox);
this.updated(); let revealer = new MessageTray.Revealer(body);
this._lastMessageBox.add(revealer, props.childProps);
revealer.show(true);
this._bodyBox.add_child(this._lastMessageBox);
let timestamp = props.timestamp; let timestamp = props.timestamp;
this._history.unshift({ actor: body, time: timestamp, this._history.unshift({ actor: body, time: timestamp,
@ -949,9 +771,9 @@ const ChatNotification = new Lang.Class({
let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' }); let desktopSettings = new Gio.Settings({ schema: 'org.gnome.desktop.interface' });
let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY); let clockFormat = desktopSettings.get_string(CLOCK_FORMAT_KEY);
let hasAmPm = date.toLocaleFormat('%p') != '';
switch (clockFormat) { if (clockFormat == '24h' || !hasAmPm) {
case '24h':
// Show only the time if date is on today // Show only the time if date is on today
if(daysAgo < 1){ if(daysAgo < 1){
/* Translators: Time in 24h format */ /* Translators: Time in 24h format */
@ -984,10 +806,7 @@ const ChatNotification = new Lang.Class({
// xgettext:no-c-format // xgettext:no-c-format
format = _("%B %d %Y, %H\u2236%M"); format = _("%B %d %Y, %H\u2236%M");
} }
break; } else {
default:
/* explicit fall-through */
case '12h':
// Show only the time if date is on today // Show only the time if date is on today
if(daysAgo < 1){ if(daysAgo < 1){
/* Translators: Time in 24h format */ /* Translators: Time in 24h format */
@ -1020,7 +839,6 @@ const ChatNotification = new Lang.Class({
// xgettext:no-c-format // xgettext:no-c-format
format = _("%B %d %Y, %l\u2236%M %p"); format = _("%B %d %Y, %l\u2236%M %p");
} }
break;
} }
return date.toLocaleFormat(format); return date.toLocaleFormat(format);
}, },
@ -1057,7 +875,7 @@ const ChatNotification = new Lang.Class({
group: 'meta', group: 'meta',
styles: ['chat-meta-message'] }); styles: ['chat-meta-message'] });
this.update(newAlias, null, { customContent: true }); this.update(newAlias);
this._filterMessages(); this._filterMessages();
}, },
@ -1110,359 +928,4 @@ const ChatNotification = new Lang.Class({
} }
}); });
const ApproverSource = new Lang.Class({
Name: 'ApproverSource',
Extends: MessageTray.Source,
_init: function(dispatchOp, text, gicon) {
this._gicon = gicon;
this.parent(text);
this._dispatchOp = dispatchOp;
// Destroy the source if the channel dispatch operation is invalidated
// as we can't approve any more.
this._invalidId = dispatchOp.connect('invalidated',
Lang.bind(this, function(domain, code, msg) {
this.destroy();
}));
},
_createPolicy: function() {
return new MessageTray.NotificationApplicationPolicy('empathy');
},
destroy: function() {
if (this._invalidId != 0) {
this._dispatchOp.disconnect(this._invalidId);
this._invalidId = 0;
}
this.parent();
},
getIcon: function() {
return this._gicon;
}
});
const RoomInviteNotification = new Lang.Class({
Name: 'RoomInviteNotification',
Extends: MessageTray.Notification,
_init: function(source, dispatchOp, channel, inviter) {
this.parent(source,
/* translators: argument is a room name like
* room@jabber.org for example. */
_("Invitation to %s").format(channel.get_identifier()),
null,
{ customContent: true });
this.setResident(true);
/* 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. */
this.addBody(_("%s is inviting you to join %s").format(inviter.get_alias(), channel.get_identifier()));
this.addAction(_("Decline"), Lang.bind(this, function() {
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
src.leave_channels_finish(result);
});
this.destroy();
}));
this.addAction(_("Accept"), Lang.bind(this, function() {
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
src.handle_with_time_finish(result);
});
this.destroy();
}));
}
});
// Audio Video
const AudioVideoNotification = new Lang.Class({
Name: 'AudioVideoNotification',
Extends: MessageTray.Notification,
_init: function(source, dispatchOp, channel, contact, isVideo) {
let title = '';
if (isVideo)
/* translators: argument is a contact name like Alice for example. */
title = _("Video call from %s").format(contact.get_alias());
else
/* translators: argument is a contact name like Alice for example. */
title = _("Call from %s").format(contact.get_alias());
this.parent(source, title, null, { customContent: true });
this.setResident(true);
this.setUrgency(MessageTray.Urgency.CRITICAL);
this.addAction(_("Decline"), Lang.bind(this, function() {
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
src.leave_channels_finish(result);
});
this.destroy();
}));
/* translators: this is a button label (verb), not a noun */
this.addAction(_("Answer"), Lang.bind(this, function() {
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
src.handle_with_time_finish(result);
});
this.destroy();
}));
}
});
// File Transfer
const FileTransferNotification = new Lang.Class({
Name: 'FileTransferNotification',
Extends: MessageTray.Notification,
_init: function(source, dispatchOp, channel, contact) {
this.parent(source,
/* To translators: The first parameter is
* the contact's alias and the second one is the
* file name. The string will be something
* like: "Alice is sending you test.ogg"
*/
_("%s is sending you %s").format(contact.get_alias(),
channel.get_filename()),
null,
{ customContent: true });
this.setResident(true);
this.addAction(_("Decline"), Lang.bind(this, function() {
dispatchOp.leave_channels_async(Tp.ChannelGroupChangeReason.NONE, '', function(src, result) {
src.leave_channels_finish(result);
});
this.destroy();
}));
this.addAction(_("Accept"), Lang.bind(this, function() {
dispatchOp.handle_with_time_async('', global.get_current_time(), function(src, result) {
src.handle_with_time_finish(result);
});
this.destroy();
}));
}
});
// Subscription request
const SubscriptionRequestNotification = new Lang.Class({
Name: 'SubscriptionRequestNotification',
Extends: MessageTray.Notification,
_init: function(source, contact) {
this.parent(source,
/* To translators: The parameter is the contact's alias */
_("%s would like permission to see when you are online").format(contact.get_alias()),
null, { customContent: true });
this._contact = contact;
this._connection = contact.get_connection();
let layout = new St.BoxLayout({ vertical: false });
// Display avatar
let iconBox = new St.Bin({ style_class: 'avatar-box' });
iconBox._size = 48;
let textureCache = St.TextureCache.get_default();
let file = contact.get_avatar_file();
if (file) {
let uri = file.get_uri();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size, scaleFactor);
}
else {
iconBox.child = new St.Icon({ icon_name: 'avatar-default',
icon_size: iconBox._size });
}
layout.add(iconBox);
// subscription request message
let label = new St.Label({ style_class: 'subscription-message',
text: contact.get_publish_request() });
layout.add(label);
this.addActor(layout);
this.addAction(_("Decline"), Lang.bind(this, function() {
contact.remove_async(function(src, result) {
src.remove_finish(result);
});
}));
this.addAction(_("Accept"), Lang.bind(this, function() {
// Authorize the contact and request to see his status as well
contact.authorize_publication_async(function(src, result) {
src.authorize_publication_finish(result);
});
contact.request_subscription_async('', function(src, result) {
src.request_subscription_finish(result);
});
}));
this._changedId = contact.connect('subscription-states-changed',
Lang.bind(this, this._subscriptionStatesChangedCb));
this._invalidatedId = this._connection.connect('invalidated',
Lang.bind(this, this.destroy));
},
destroy: function() {
if (this._changedId != 0) {
this._contact.disconnect(this._changedId);
this._changedId = 0;
}
if (this._invalidatedId != 0) {
this._connection.disconnect(this._invalidatedId);
this._invalidatedId = 0;
}
this.parent();
},
_subscriptionStatesChangedCb: function(contact, subscribe, publish, msg) {
// Destroy the notification if the subscription request has been
// answered
if (publish != Tp.SubscriptionState.ASK)
this.destroy();
}
});
// Messages from empathy/libempathy/empathy-utils.c
// create_errors_to_message_hash()
/* Translator note: these should be the same messages that are
* used in Empathy, so just copy and paste from there. */
let _connectionErrorMessages = {};
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.NETWORK_ERROR)]
= _("Network error");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.AUTHENTICATION_FAILED)]
= _("Authentication failed");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ENCRYPTION_ERROR)]
= _("Encryption error");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_NOT_PROVIDED)]
= _("Certificate not provided");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_UNTRUSTED)]
= _("Certificate untrusted");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_EXPIRED)]
= _("Certificate expired");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_NOT_ACTIVATED)]
= _("Certificate not activated");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_HOSTNAME_MISMATCH)]
= _("Certificate hostname mismatch");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_FINGERPRINT_MISMATCH)]
= _("Certificate fingerprint mismatch");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_SELF_SIGNED)]
= _("Certificate self-signed");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CANCELLED)]
= _("Status is set to offline");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ENCRYPTION_NOT_AVAILABLE)]
= _("Encryption is not available");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_INVALID)]
= _("Certificate is invalid");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_REFUSED)]
= _("Connection has been refused");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_FAILED)]
= _("Connection can't be established");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_LOST)]
= _("Connection has been lost");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.ALREADY_CONNECTED)]
= _("This account is already connected to the server");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CONNECTION_REPLACED)]
= _("Connection has been replaced by a new connection using the same resource");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.REGISTRATION_EXISTS)]
= _("The account already exists on the server");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.SERVICE_BUSY)]
= _("Server is currently too busy to handle the connection");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_REVOKED)]
= _("Certificate has been revoked");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_INSECURE)]
= _("Certificate uses an insecure cipher algorithm or is cryptographically weak");
_connectionErrorMessages[Tp.error_get_dbus_name(Tp.Error.CERT_LIMIT_EXCEEDED)]
= _("The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library");
_connectionErrorMessages['org.freedesktop.DBus.Error.NoReply']
= _("Internal error");
const AccountNotification = new Lang.Class({
Name: 'AccountNotification',
Extends: MessageTray.Notification,
_init: function(source, account, connectionError) {
this.parent(source,
/* translators: argument is the account name, like
* name@jabber.org for example. */
_("Unable to connect to %s").format(account.get_display_name()),
this._getMessage(connectionError));
this._account = account;
this.addAction(_("View account"), Lang.bind(this, function() {
let cmd = 'empathy-accounts --select-account=' +
account.get_path_suffix();
let app_info = Gio.app_info_create_from_commandline(cmd, null, 0);
app_info.launch([], global.create_app_launch_context(0, -1));
}));
this._enabledId = account.connect('notify::enabled',
Lang.bind(this, function() {
if (!account.is_enabled())
this.destroy();
}));
this._invalidatedId = account.connect('invalidated',
Lang.bind(this, this.destroy));
this._connectionStatusId = account.connect('notify::connection-status',
Lang.bind(this, function() {
let status = account.connection_status;
if (status == Tp.ConnectionStatus.CONNECTED) {
this.destroy();
} else if (status == Tp.ConnectionStatus.DISCONNECTED) {
let connectionError = account.connection_error;
if (connectionError == Tp.error_get_dbus_name(Tp.Error.CANCELLED))
this.destroy();
else
this.update(this.title, this._getMessage(connectionError));
}
}));
},
_getMessage: function(connectionError) {
let message;
if (connectionError in _connectionErrorMessages) {
message = _connectionErrorMessages[connectionError];
} else {
message = _("Unknown reason");
}
return message;
},
destroy: function() {
if (this._enabledId != 0) {
this._account.disconnect(this._enabledId);
this._enabledId = 0;
}
if (this._invalidatedId != 0) {
this._account.disconnect(this._invalidatedId);
this._invalidatedId = 0;
}
if (this._connectionStatusId != 0) {
this._account.disconnect(this._connectionStatusId);
this._connectionStatusId = 0;
}
this.parent();
}
});
const Component = TelepathyClient; const Component = TelepathyClient;

View File

@ -87,7 +87,7 @@ const CtrlAltTabManager = new Lang.Class({
if (Main.sessionMode.hasWindows && !Main.overview.visible) { if (Main.sessionMode.hasWindows && !Main.overview.visible) {
let screen = global.screen; let screen = global.screen;
let display = screen.get_display(); let display = screen.get_display();
let windows = display.get_tab_list(Meta.TabList.DOCKS, screen, screen.get_active_workspace ()); let windows = display.get_tab_list(Meta.TabList.DOCKS, screen.get_active_workspace ());
let windowTracker = Shell.WindowTracker.get_default(); let windowTracker = Shell.WindowTracker.get_default();
let textureCache = St.TextureCache.get_default(); let textureCache = St.TextureCache.get_default();
for (let i = 0; i < windows.length; i++) { for (let i = 0; i < windows.length; i++) {
@ -165,6 +165,10 @@ const CtrlAltTabPopup = new Lang.Class({
this._select(this._previous()); this._select(this._previous());
else if (keysym == Clutter.Right) else if (keysym == Clutter.Right)
this._select(this._next()); this._select(this._next());
else
return Clutter.EVENT_PROPAGATE;
return Clutter.EVENT_STOP;
}, },
_finish : function(time) { _finish : function(time) {

View File

@ -22,11 +22,6 @@ const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0; const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff); const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
// The message tray takes this much pressure
// in the pressure barrier at once to release it.
const MESSAGE_TRAY_PRESSURE_THRESHOLD = 250; // pixels
const MESSAGE_TRAY_PRESSURE_TIMEOUT = 1000; // ms
const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
@ -150,7 +145,6 @@ const LayoutManager = new Lang.Class({
this._keyboardIndex = -1; this._keyboardIndex = -1;
this._rightPanelBarrier = null; this._rightPanelBarrier = null;
this._trayBarrier = null;
this._inOverview = false; this._inOverview = false;
this._updateRegionIdle = 0; this._updateRegionIdle = 0;
@ -210,7 +204,6 @@ const LayoutManager = new Lang.Class({
this.trayBox = new St.Widget({ name: 'trayBox', this.trayBox = new St.Widget({ name: 'trayBox',
layout_manager: new Clutter.BinLayout() }); layout_manager: new Clutter.BinLayout() });
this.addChrome(this.trayBox); this.addChrome(this.trayBox);
this._setupTrayPressure();
this.modalDialogGroup = new St.Widget({ name: 'modalDialogGroup', this.modalDialogGroup = new St.Widget({ name: 'modalDialogGroup',
layout_manager: new Clutter.BinLayout() }); layout_manager: new Clutter.BinLayout() });
@ -449,50 +442,9 @@ const LayoutManager = new Lang.Class({
} }
}, },
_setupTrayPressure: function() {
this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD,
MESSAGE_TRAY_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW);
this._trayPressure.setEventFilter(this._trayBarrierEventFilter);
this._trayPressure.connect('trigger', function(barrier) {
if (Main.layoutManager.bottomMonitor.inFullscreen)
return;
Main.messageTray.openTray();
});
},
_updateTrayBarrier: function() {
let monitor = this.bottomMonitor;
if (this._trayBarrier) {
this._trayPressure.removeBarrier(this._trayBarrier);
this._trayBarrier.destroy();
this._trayBarrier = null;
}
this._trayBarrier = new Meta.Barrier({ display: global.display,
x1: monitor.x, x2: monitor.x + monitor.width,
y1: monitor.y + monitor.height, y2: monitor.y + monitor.height,
directions: Meta.BarrierDirection.NEGATIVE_Y });
this._trayPressure.addBarrier(this._trayBarrier);
},
_trayBarrierEventFilter: function(event) {
// Throw out all events where the pointer was grabbed by another
// client, as the client that grabbed the pointer expects to have
// complete control over it
if (event.grabbed && Main.modalCount == 0)
return true;
return false;
},
_monitorsChanged: function() { _monitorsChanged: function() {
this._updateMonitors(); this._updateMonitors();
this._updateBoxes(); this._updateBoxes();
this._updateTrayBarrier();
this._updateHotCorners(); this._updateHotCorners();
this._updateBackgrounds(); this._updateBackgrounds();
this._updateFullscreen(); this._updateFullscreen();
@ -1096,7 +1048,7 @@ const HotCorner = new Lang.Class({
this._setupFallbackCornerIfNeeded(layoutManager); this._setupFallbackCornerIfNeeded(layoutManager);
this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD, this._pressureBarrier = new TriggerablePressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
HOT_CORNER_PRESSURE_TIMEOUT, HOT_CORNER_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW); Shell.KeyBindingMode.OVERVIEW);
@ -1277,14 +1229,12 @@ const PressureBarrier = new Lang.Class({
Name: 'PressureBarrier', Name: 'PressureBarrier',
_init: function(threshold, timeout, keybindingMode) { _init: function(threshold, timeout, keybindingMode) {
this._threshold = threshold; this.threshold = threshold;
this._timeout = timeout; this.timeout = timeout;
this._keybindingMode = keybindingMode; this._keybindingMode = keybindingMode;
this._barriers = []; this._barriers = [];
this._eventFilter = null; this._eventFilter = null;
this.reset();
this._isTriggered = false;
this._reset();
}, },
addBarrier: function(barrier) { addBarrier: function(barrier) {
@ -1313,10 +1263,10 @@ const PressureBarrier = new Lang.Class({
this._eventFilter = filter; this._eventFilter = filter;
}, },
_reset: function() { reset: function() {
this._barrierEvents = []; this._barrierEvents = [];
this._currentPressure = 0;
this._lastTime = 0; this._lastTime = 0;
this.currentPressure = 0;
}, },
_isHorizontal: function(barrier) { _isHorizontal: function(barrier) {
@ -1337,12 +1287,21 @@ const PressureBarrier = new Lang.Class({
return Math.abs(event.dy); return Math.abs(event.dy);
}, },
get currentPressure() {
return this._currentPressure;
},
set currentPressure(value) {
this._currentPressure = value;
this.emit('pressure-changed');
},
_trimBarrierEvents: function() { _trimBarrierEvents: function() {
// Events are guaranteed to be sorted in time order from // Events are guaranteed to be sorted in time order from
// oldest to newest, so just look for the first old event, // oldest to newest, so just look for the first old event,
// and then chop events after that off. // and then chop events after that off.
let i = 0; let i = 0;
let threshold = this._lastTime - this._timeout; let threshold = this._lastTime - this.timeout;
while (i < this._barrierEvents.length) { while (i < this._barrierEvents.length) {
let [time, distance] = this._barrierEvents[i]; let [time, distance] = this._barrierEvents[i];
@ -1355,21 +1314,75 @@ const PressureBarrier = new Lang.Class({
for (i = 0; i < firstNewEvent; i++) { for (i = 0; i < firstNewEvent; i++) {
let [time, distance] = this._barrierEvents[i]; let [time, distance] = this._barrierEvents[i];
this._currentPressure -= distance; this.currentPressure = distance;
} }
this._barrierEvents = this._barrierEvents.slice(firstNewEvent); this._barrierEvents = this._barrierEvents.slice(firstNewEvent);
}, },
_onBarrierLeft: function(barrier, event) { _onBarrierLeft: function(barrier, event) {
this._reset(); this.reset();
},
_shouldUseEvent: function(barrier, event) {
if (this._eventFilter && this._eventFilter(event))
return false;
// Throw out all events not in the proper keybinding mode
if (!(this._keybindingMode & Main.keybindingMode))
return false;
let slide = this._getDistanceAlongBarrier(barrier, event);
let distance = this._getDistanceAcrossBarrier(barrier, event);
// Throw out events where the cursor is move more
// along the axis of the barrier than moving with
// the barrier.
if (slide > distance)
return false;
return true;
},
_appendEvent: function(barrier, event) {
let distance = this._getDistanceAcrossBarrier(barrier, event);
this._lastTime = event.time;
this._trimBarrierEvents();
distance = Math.min(15, distance);
this._barrierEvents.push([event.time, distance]);
this.currentPressure += distance;
},
_onBarrierHit: function(barrier, event) {
if (!this._shouldUseEvent(barrier, event))
return;
this._appendEvent(barrier, event);
}
});
Signals.addSignalMethods(PressureBarrier.prototype);
const TriggerablePressureBarrier = new Lang.Class({
Name: 'TriggerablePressureBarrier',
Extends: PressureBarrier,
_init: function(threshold, timeout, keybindingMode) {
this.parent(threshold, timeout, keybindingMode);
this._isTriggered = false; this._isTriggered = false;
}, },
_trigger: function() { _trigger: function() {
this._isTriggered = true; this._isTriggered = true;
this.emit('trigger'); this.emit('trigger');
this._reset(); this.reset();
},
_onBarrierLeft: function() {
this.parent();
this._isTriggered = false;
}, },
_onBarrierHit: function(barrier, event) { _onBarrierHit: function(barrier, event) {
@ -1378,37 +1391,17 @@ const PressureBarrier = new Lang.Class({
if (this._isTriggered) if (this._isTriggered)
return; return;
if (this._eventFilter && this._eventFilter(event)) if (!this._shouldUseEvent(barrier, event))
return; return;
// Throw out all events not in the proper keybinding mode if (distance >= this.threshold) {
if (!(this._keybindingMode & Main.keybindingMode))
return;
let slide = this._getDistanceAlongBarrier(barrier, event);
let distance = this._getDistanceAcrossBarrier(barrier, event);
if (distance >= this._threshold) {
this._trigger(); this._trigger();
return; return;
} }
// Throw out events where the cursor is move more this._appendEvent(barrier, event);
// along the axis of the barrier than moving with
// the barrier.
if (slide > distance)
return;
this._lastTime = event.time; if (this.currentPressure >= this.threshold)
this._trimBarrierEvents();
distance = Math.min(15, distance);
this._barrierEvents.push([event.time, distance]);
this._currentPressure += distance;
if (this._currentPressure >= this._threshold)
this._trigger(); this._trigger();
} },
}); });
Signals.addSignalMethods(PressureBarrier.prototype);

View File

@ -9,7 +9,6 @@ const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const GSystem = imports.gi.GSystem;
const Components = imports.ui.components; const Components = imports.ui.components;
const CtrlAltTab = imports.ui.ctrlAltTab; const CtrlAltTab = imports.ui.ctrlAltTab;
@ -213,7 +212,12 @@ function _initializeUI() {
if (screenShield) { if (screenShield) {
screenShield.lockIfWasLocked(); screenShield.lockIfWasLocked();
} }
if (LoginManager.haveSystemd() && sessionMode.currentMode === 'user') { if (LoginManager.haveSystemd() &&
sessionMode.currentMode != 'gdm' &&
sessionMode.currentMode != 'initial-setup') {
// Do not import globally to not depend
// on systemd on non-systemd systems.
let GSystem = imports.gi.GSystem;
GSystem.log_structured_print('GNOME Shell started at ' + _startDate, GSystem.log_structured_print('GNOME Shell started at ' + _startDate,
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]); ['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
} else { } else {

File diff suppressed because it is too large Load Diff

View File

@ -91,21 +91,6 @@ const rewriteRules = {
] ]
}; };
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
'bluetooth-applet': 'bluetooth',
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
// when moved to control center
'gnome-sound-applet': 'volume',
'nm-applet': 'network',
'gnome-power-manager': 'battery',
'keyboard': 'keyboard',
'a11y-keyboard': 'a11y',
'kbd-scrolllock': 'keyboard',
'kbd-numlock': 'keyboard',
'kbd-capslock': 'keyboard',
'ibus-ui-gtk': 'keyboard'
};
const FdoNotificationDaemon = new Lang.Class({ const FdoNotificationDaemon = new Lang.Class({
Name: 'FdoNotificationDaemon', Name: 'FdoNotificationDaemon',
@ -120,16 +105,10 @@ const FdoNotificationDaemon = new Lang.Class({
this._nextNotificationId = 1; this._nextNotificationId = 1;
this._trayManager = new Shell.TrayManager();
this._trayIconAddedId = this._trayManager.connect('tray-icon-added', Lang.bind(this, this._onTrayIconAdded));
this._trayIconRemovedId = this._trayManager.connect('tray-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
Shell.WindowTracker.get_default().connect('notify::focus-app', Shell.WindowTracker.get_default().connect('notify::focus-app',
Lang.bind(this, this._onFocusAppChanged)); Lang.bind(this, this._onFocusAppChanged));
Main.overview.connect('hidden', Main.overview.connect('hidden',
Lang.bind(this, this._onFocusAppChanged)); Lang.bind(this, this._onFocusAppChanged));
this._trayManager.manage_screen(global.screen, Main.messageTray.actor);
}, },
_imageForNotificationData: function(hints) { _imageForNotificationData: function(hints) {
@ -170,28 +149,23 @@ const FdoNotificationDaemon = new Lang.Class({
return null; return null;
}, },
_lookupSource: function(title, pid, trayIcon) { _lookupSource: function(title, pid) {
for (let i = 0; i < this._sources.length; i++) { for (let i = 0; i < this._sources.length; i++) {
let source = this._sources[i]; let source = this._sources[i];
if (source.pid == pid && if (source.pid == pid && source.initialTitle == title)
(source.initialTitle == title || source.trayIcon || trayIcon))
return source; return source;
} }
return null; return null;
}, },
// Returns the source associated with ndata.notification if it is set. // Returns the source associated with ndata.notification if it is set.
// If the existing or requested source is associated with a tray icon
// and passed in pid matches a pid of an existing source, the title
// match is ignored to enable representing a tray icon and notifications
// from the same application with a single source.
// //
// If no existing source is found, a new source is created as long as // If no existing source is found, a new source is created as long as
// pid is provided. // pid is provided.
// //
// Either a pid or ndata.notification is needed to retrieve or // Either a pid or ndata.notification is needed to retrieve or
// create a source. // create a source.
_getSource: function(title, pid, ndata, sender, trayIcon) { _getSource: function(title, pid, ndata, sender) {
if (!pid && !(ndata && ndata.notification)) if (!pid && !(ndata && ndata.notification))
return null; return null;
@ -202,13 +176,13 @@ const FdoNotificationDaemon = new Lang.Class({
if (ndata && ndata.notification) if (ndata && ndata.notification)
return ndata.notification.source; return ndata.notification.source;
let source = this._lookupSource(title, pid, trayIcon); let source = this._lookupSource(title, pid);
if (source) { if (source) {
source.setTitle(title); source.setTitle(title);
return source; return source;
} }
let source = new FdoNotificationDaemonSource(title, pid, sender, trayIcon, ndata ? ndata.hints['desktop-entry'] : null); let source = new FdoNotificationDaemonSource(title, pid, sender, ndata ? ndata.hints['desktop-entry'] : null);
this._sources.push(source); this._sources.push(source);
source.connect('destroy', Lang.bind(this, function() { source.connect('destroy', Lang.bind(this, function() {
@ -334,13 +308,14 @@ const FdoNotificationDaemon = new Lang.Class({
}, },
_makeButton: function(id, label, useActionIcons) { _makeButton: function(id, label, useActionIcons) {
let button = new St.Button({ can_focus: true }); let button = new St.Button({ can_focus: true,
x_expand: true,
style_class: 'notification-button' });
let iconName = id.endsWith('-symbolic') ? id : id + '-symbolic'; let iconName = id.endsWith('-symbolic') ? id : id + '-symbolic';
if (useActionIcons && Gtk.IconTheme.get_default().has_icon(iconName)) { if (useActionIcons && Gtk.IconTheme.get_default().has_icon(iconName)) {
button.add_style_class_name('notification-icon-button'); button.child = new St.Icon({ icon_name: iconName, icon_size: 16 });
button.child = new St.Icon({ icon_name: iconName });
} else { } else {
button.add_style_class_name('notification-button');
button.label = label; button.label = label;
} }
return button; return button;
@ -379,8 +354,6 @@ const FdoNotificationDaemon = new Lang.Class({
let gicon = this._iconForNotificationData(icon, hints); let gicon = this._iconForNotificationData(icon, hints);
let gimage = this._imageForNotificationData(hints); let gimage = this._imageForNotificationData(hints);
let image = null;
// If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon // If an icon is not specified, we use 'image-data' or 'image-path' hint for an icon
// and don't show a large image. There are currently many applications that use // and don't show a large image. There are currently many applications that use
// notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets // notify_notification_set_icon_from_pixbuf() from libnotify, which in turn sets
@ -389,10 +362,7 @@ const FdoNotificationDaemon = new Lang.Class({
// So the logic here does the right thing for this case. If both an icon and either // So the logic here does the right thing for this case. If both an icon and either
// one of 'image-data' or 'image-path' are specified, we show both an icon and // one of 'image-data' or 'image-path' are specified, we show both an icon and
// a large image. // a large image.
if (gicon && gimage) if (!gicon && gimage)
image = new St.Icon({ gicon: gimage,
icon_size: notification.IMAGE_SIZE });
else if (!gicon && gimage)
gicon = gimage; gicon = gimage;
else if (!gicon) else if (!gicon)
gicon = this._fallbackIconForNotificationData(hints); gicon = this._fallbackIconForNotificationData(hints);
@ -402,7 +372,6 @@ const FdoNotificationDaemon = new Lang.Class({
clear: true, clear: true,
soundFile: hints['sound-file'], soundFile: hints['sound-file'],
soundName: hints['sound-name'] }); soundName: hints['sound-name'] });
notification.setImage(image);
let hasDefaultAction = false; let hasDefaultAction = false;
@ -442,7 +411,6 @@ const FdoNotificationDaemon = new Lang.Class({
notification.setUrgency(MessageTray.Urgency.CRITICAL); notification.setUrgency(MessageTray.Urgency.CRITICAL);
break; break;
} }
notification.setResident(hints.resident == true);
// 'transient' is a reserved keyword in JS, so we have to retrieve the value // 'transient' is a reserved keyword in JS, so we have to retrieve the value
// of the 'transient' hint with hints['transient'] rather than hints.transient // of the 'transient' hint with hints['transient'] rather than hints.transient
notification.setTransient(hints['transient'] == true); notification.setTransient(hints['transient'] == true);
@ -470,7 +438,6 @@ const FdoNotificationDaemon = new Lang.Class({
'body-markup', 'body-markup',
// 'icon-multi', // 'icon-multi',
'icon-static', 'icon-static',
'persistence',
'sound', 'sound',
]; ];
}, },
@ -492,7 +459,7 @@ const FdoNotificationDaemon = new Lang.Class({
for (let i = 0; i < this._sources.length; i++) { for (let i = 0; i < this._sources.length; i++) {
let source = this._sources[i]; let source = this._sources[i];
if (source.app == tracker.focus_app) { if (source.app == tracker.focus_app) {
source.destroyNonResidentNotifications(); source.destroyNotifications();
return; return;
} }
} }
@ -507,30 +474,15 @@ const FdoNotificationDaemon = new Lang.Class({
this._dbusImpl.emit_signal('ActionInvoked', this._dbusImpl.emit_signal('ActionInvoked',
GLib.Variant.new('(us)', [id, action])); GLib.Variant.new('(us)', [id, action]));
}, },
_onTrayIconAdded: function(o, icon) {
let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass] !== undefined)
return;
let source = this._getSource(icon.title || icon.wm_class || C_("program", "Unknown"), icon.pid, null, null, icon);
},
_onTrayIconRemoved: function(o, icon) {
let source = this._lookupSource(null, icon.pid, true);
if (source)
source.destroy();
}
}); });
const FdoNotificationDaemonSource = new Lang.Class({ const FdoNotificationDaemonSource = new Lang.Class({
Name: 'FdoNotificationDaemonSource', Name: 'FdoNotificationDaemonSource',
Extends: MessageTray.Source, Extends: MessageTray.Source,
_init: function(title, pid, sender, trayIcon, appId) { _init: function(title, pid, sender, appId) {
// Need to set the app before chaining up, so // Need to set the app before chaining up, so
// methods called from the parent constructor can find it // methods called from the parent constructor can find it
this.trayIcon = trayIcon;
this.pid = pid; this.pid = pid;
this.app = this._getApp(appId); this.app = this._getApp(appId);
@ -550,12 +502,6 @@ const FdoNotificationDaemonSource = new Lang.Class({
Lang.bind(this, this._onNameVanished)); Lang.bind(this, this._onNameVanished));
else else
this._nameWatcherId = 0; this._nameWatcherId = 0;
if (this.trayIcon) {
// Try again finding the app, using the WM_CLASS from the tray icon
this._setSummaryIcon(this.trayIcon);
this.useNotificationIcon = false;
}
}, },
_createPolicy: function() { _createPolicy: function() {
@ -571,48 +517,23 @@ const FdoNotificationDaemonSource = new Lang.Class({
// Destroy the notification source when its sender is removed from DBus. // Destroy the notification source when its sender is removed from DBus.
// Only do so if this.app is set to avoid removing "notify-send" sources, senders // Only do so if this.app is set to avoid removing "notify-send" sources, senders
// of which аre removed from DBus immediately. // of which аre removed from DBus immediately.
// Sender being removed from DBus would normally result in a tray icon being removed, if (this.app)
// so allow the code path that handles the tray icon being removed to handle that case.
if (!this.trayIcon && this.app)
this.destroy(); this.destroy();
}, },
processNotification: function(notification, gicon) { processNotification: function(notification, gicon) {
if (gicon) if (gicon)
this._gicon = gicon; this._gicon = gicon;
if (!this.trayIcon)
this.iconUpdated(); this.iconUpdated();
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
if (notification.resident && this.app && tracker.focus_app == this.app) if (this.app && tracker.focus_app == this.app)
this.pushNotification(notification); this.pushNotification(notification);
else else
this.notify(notification); this.notify(notification);
}, },
handleSummaryClick: function(button) {
if (!this.trayIcon)
return false;
let event = Clutter.get_current_event();
// Left clicks are passed through only where there aren't unacknowledged
// notifications, so it possible to open them in summary mode; right
// clicks are always forwarded, as the right click menu is not useful for
// tray icons
if (button == 1 &&
this.notifications.length > 0)
return false;
let id = global.stage.connect('deactivate', Lang.bind(this, function () {
global.stage.disconnect(id);
this.trayIcon.click(event);
}));
Main.overview.hide();
return true;
},
_getApp: function(appId) { _getApp: function(appId) {
let app; let app;
@ -620,16 +541,6 @@ const FdoNotificationDaemonSource = new Lang.Class({
if (app != null) if (app != null)
return app; return app;
if (this.trayIcon) {
app = Shell.AppSystem.get_default().lookup_startup_wmclass(this.trayIcon.wm_class);
if (app != null)
return app;
app = Shell.AppSystem.get_default().lookup_desktop_wmclass(this.trayIcon.wm_class);
if (app != null)
return app;
}
if (appId) { if (appId) {
app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop'); app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
if (app != null) if (app != null)
@ -651,11 +562,10 @@ const FdoNotificationDaemonSource = new Lang.Class({
open: function() { open: function() {
this.openApp(); this.openApp();
this.destroyNonResidentNotifications(); this.destroyNotifications();
}, },
_lastNotificationRemoved: function() { _lastNotificationRemoved: function() {
if (!this.trayIcon)
this.destroy(); this.destroy();
}, },
@ -677,11 +587,7 @@ const FdoNotificationDaemonSource = new Lang.Class({
}, },
createIcon: function(size) { createIcon: function(size) {
if (this.trayIcon) { if (this.app) {
return new Clutter.Clone({ width: size,
height: size,
source: this.trayIcon });
} else if (this.app) {
return this.app.create_icon_texture(size); return this.app.create_icon_texture(size);
} else if (this._gicon) { } else if (this._gicon) {
return new St.Icon({ gicon: this._gicon, return new St.Icon({ gicon: this._gicon,

View File

@ -192,6 +192,8 @@ const OsdWindow = new Lang.Class({
_monitorsChanged: function() { _monitorsChanged: function() {
/* assume 110x110 on a 640x480 display and scale from there */ /* assume 110x110 on a 640x480 display and scale from there */
let monitor = Main.layoutManager.monitors[this._monitorIndex]; let monitor = Main.layoutManager.monitors[this._monitorIndex];
if (!monitor)
return; // we are about to be removed
let scalew = monitor.width / 640.0; let scalew = monitor.width / 640.0;
let scaleh = monitor.height / 480.0; let scaleh = monitor.height / 480.0;

View File

@ -263,8 +263,6 @@ const Overview = new Lang.Class({
this._overview.add(this._controls.actor, { y_fill: true, expand: true }); this._overview.add(this._controls.actor, { y_fill: true, expand: true });
this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent)); this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._stack.add_actor(this._controls.indicatorActor);
// TODO - recalculate everything when desktop size changes // TODO - recalculate everything when desktop size changes
this.dashIconSize = this._dash.iconSize; this.dashIconSize = this._dash.iconSize;
this._dash.connect('icon-size-changed', this._dash.connect('icon-size-changed',

View File

@ -396,111 +396,6 @@ const DashSpacer = new Lang.Class({
} }
}); });
const MessagesIndicator = new Lang.Class({
Name: 'MessagesIndicator',
_init: function(viewSelector) {
this._count = 0;
this._sources = [];
this._viewSelector = viewSelector;
this._container = new St.BoxLayout({ style_class: 'messages-indicator-contents',
reactive: true,
track_hover: true,
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.CENTER });
this._icon = new St.Icon({ icon_name: 'user-idle-symbolic',
icon_size: 16 });
this._container.add_actor(this._icon);
this._label = new St.Label();
this._container.add_actor(this._label);
this._highlight = new St.Widget({ style_class: 'messages-indicator-highlight',
x_expand: true,
y_expand: true,
y_align: Clutter.ActorAlign.END,
visible: false });
this._container.connect('notify::hover', Lang.bind(this,
function() {
this._highlight.visible = this._container.hover;
}));
let clickAction = new Clutter.ClickAction();
this._container.add_action(clickAction);
clickAction.connect('clicked', Lang.bind(this,
function() {
Main.messageTray.openTray();
}));
Main.messageTray.connect('showing', Lang.bind(this,
function() {
this._highlight.visible = false;
this._container.hover = false;
}));
let layout = new Clutter.BinLayout();
this.actor = new St.Widget({ layout_manager: layout,
style_class: 'messages-indicator',
y_expand: true,
y_align: Clutter.ActorAlign.END,
visible: false });
this.actor.add_actor(this._container);
this.actor.add_actor(this._highlight);
Main.messageTray.connect('source-added', Lang.bind(this, this._onSourceAdded));
Main.messageTray.connect('source-removed', Lang.bind(this, this._onSourceRemoved));
let sources = Main.messageTray.getSources();
sources.forEach(Lang.bind(this, function(source) { this._onSourceAdded(null, source); }));
this._viewSelector.connect('page-changed', Lang.bind(this, this._updateVisibility));
Main.overview.connect('showing', Lang.bind(this, this._updateVisibility));
},
_onSourceAdded: function(tray, source) {
if (source.trayIcon)
return;
source.connect('count-updated', Lang.bind(this, this._updateCount));
this._sources.push(source);
this._updateCount();
},
_onSourceRemoved: function(tray, source) {
this._sources.splice(this._sources.indexOf(source), 1);
this._updateCount();
},
_updateCount: function() {
let count = 0;
let hasChats = false;
this._sources.forEach(Lang.bind(this,
function(source) {
count += source.indicatorCount;
hasChats |= source.isChat;
}));
this._count = count;
this._label.text = ngettext("%d new message",
"%d new messages",
count).format(count);
this._icon.visible = hasChats;
this._updateVisibility();
},
_updateVisibility: function() {
let activePage = this._viewSelector.getActivePage();
let visible = ((this._count > 0) && (activePage == ViewSelector.ViewPage.WINDOWS));
this.actor.visible = visible;
}
});
const ControlsLayout = new Lang.Class({ const ControlsLayout = new Lang.Class({
Name: 'ControlsLayout', Name: 'ControlsLayout',
Extends: Clutter.BinLayout, Extends: Clutter.BinLayout,
@ -529,9 +424,6 @@ const ControlsManager = new Lang.Class({
this.viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility)); this.viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility));
this.viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty)); this.viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty));
this._indicator = new MessagesIndicator(this.viewSelector);
this.indicatorActor = this._indicator.actor;
let layout = new ControlsLayout(); let layout = new ControlsLayout();
this.actor = new St.Widget({ layout_manager: layout, this.actor = new St.Widget({ layout_manager: layout,
reactive: true, reactive: true,

View File

@ -251,8 +251,16 @@ const PopupSeparatorMenuItem = new Lang.Class({
this.actor.add(this.label); this.actor.add(this.label);
this.actor.label_actor = this.label; this.actor.label_actor = this.label;
this.label.connect('notify::text',
Lang.bind(this, this._syncVisibility));
this._syncVisibility();
this._separator = new Separator.HorizontalSeparator({ style_class: 'popup-separator-menu-item' }); this._separator = new Separator.HorizontalSeparator({ style_class: 'popup-separator-menu-item' });
this.actor.add(this._separator.actor, { expand: true }); this.actor.add(this._separator.actor, { expand: true });
},
_syncVisibility: function() {
this.label.visible = this.label.text != '';
} }
}); });

View File

@ -292,6 +292,10 @@ const InputSourcePopup = new Lang.Class({
this._select(this._previous()); this._select(this._previous());
else if (keysym == Clutter.Right) else if (keysym == Clutter.Right)
this._select(this._next()); this._select(this._next());
else
return Clutter.EVENT_PROPAGATE;
return Clutter.EVENT_STOP;
}, },
_finish : function() { _finish : function() {

View File

@ -4,6 +4,7 @@ const Gio = imports.gi.Gio;
const Lang = imports.lang; const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
@ -87,6 +88,14 @@ const Indicator = new Lang.Class({
})); }));
this._item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop'); this._item.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
this.menu.addMenuItem(this._item); this.menu.addMenuItem(this._item);
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
},
_sessionUpdated: function() {
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive);
}, },
_sync: function() { _sync: function() {

View File

@ -56,7 +56,10 @@ const AltSwitcher = new Lang.Class({
} }
if (this.actor.get_child() != childToShow) { if (this.actor.get_child() != childToShow) {
let hasFocus = this.actor.contains(global.stage.get_key_focus());
this.actor.set_child(childToShow); this.actor.set_child(childToShow);
if (hasFocus)
childToShow.grab_key_focus();
// The actors might respond to hover, so // The actors might respond to hover, so
// sync the pointer to make sure they update. // sync the pointer to make sure they update.

View File

@ -190,10 +190,11 @@ const SwitcherPopup = new Lang.Class({
this._disableHover(); this._disableHover();
if (this._keyPressHandler(keysym, backwards, action) != Clutter.EVENT_PROPAGATE)
return Clutter.EVENT_STOP;
if (keysym == Clutter.Escape) if (keysym == Clutter.Escape)
this.destroy(); this.destroy();
else
this._keyPressHandler(keysym, backwards, action);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, },

View File

@ -282,7 +282,7 @@ const ViewSelector = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (this._shouldTriggerSearch(symbol)) { } else if (this._shouldTriggerSearch(symbol)) {
this.startSearch(event); this.startSearch(event);
} else if (!this._searchActive) { } else if (!this._searchActive && !global.stage.key_focus) {
if (symbol == Clutter.Tab || symbol == Clutter.Down) { if (symbol == Clutter.Tab || symbol == Clutter.Down) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
return true; return true;

View File

@ -15,6 +15,7 @@ const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
const Main = imports.ui.main; const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const WindowMenu = imports.ui.windowMenu;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings'; const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
const WINDOW_ANIMATION_TIME = 0.25; const WINDOW_ANIMATION_TIME = 0.25;
@ -463,8 +464,6 @@ const WindowManager = new Lang.Class({
this._dimmedWindows = []; this._dimmedWindows = [];
this._animationBlockCount = 0;
this._allowedKeybindings = {}; this._allowedKeybindings = {};
this._switchData = null; this._switchData = null;
@ -480,6 +479,7 @@ const WindowManager = new Lang.Class({
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace)); this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
this._shellwm.connect('show-tile-preview', Lang.bind(this, this._showTilePreview)); this._shellwm.connect('show-tile-preview', Lang.bind(this, this._showTilePreview));
this._shellwm.connect('hide-tile-preview', Lang.bind(this, this._hideTilePreview)); this._shellwm.connect('hide-tile-preview', Lang.bind(this, this._hideTilePreview));
this._shellwm.connect('show-window-menu', Lang.bind(this, this._showWindowMenu));
this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow)); this._shellwm.connect('minimize', Lang.bind(this, this._minimizeWindow));
this._shellwm.connect('maximize', Lang.bind(this, this._maximizeWindow)); this._shellwm.connect('maximize', Lang.bind(this, this._maximizeWindow));
this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow)); this._shellwm.connect('unmaximize', Lang.bind(this, this._unmaximizeWindow));
@ -669,6 +669,8 @@ const WindowManager = new Lang.Class({
this._dimWindow(this._dimmedWindows[i]); this._dimWindow(this._dimmedWindows[i]);
})); }));
this._windowMenuManager = new WindowMenu.WindowMenuManager();
if (Main.sessionMode.hasWorkspaces) if (Main.sessionMode.hasWorkspaces)
this._workspaceTracker = new WorkspaceTracker(this); this._workspaceTracker = new WorkspaceTracker(this);
@ -704,16 +706,8 @@ const WindowManager = new Lang.Class({
this._allowedKeybindings[name] = modes; this._allowedKeybindings[name] = modes;
}, },
blockAnimations: function() {
this._animationBlockCount++;
},
unblockAnimations: function() {
this._animationBlockCount = Math.max(0, this._animationBlockCount - 1);
},
_shouldAnimate: function() { _shouldAnimate: function() {
return !(Main.overview.visible || this._animationBlockCount > 0); return !Main.overview.visible;
}, },
_shouldAnimateActor: function(actor) { _shouldAnimateActor: function(actor) {
@ -1159,6 +1153,10 @@ const WindowManager = new Lang.Class({
this._tilePreview.hide(); this._tilePreview.hide();
}, },
_showWindowMenu: function(shellwm, window, menu, rect) {
this._windowMenuManager.showWindowMenuForWindow(window, menu, rect);
},
_startAppSwitcher : function(display, screen, window, binding) { _startAppSwitcher : function(display, screen, window, binding) {
/* prevent a corner case where both popups show up at once */ /* prevent a corner case where both popups show up at once */
if (this._workspaceSwitcherPopup != null) if (this._workspaceSwitcherPopup != null)

185
js/ui/windowMenu.js Normal file
View File

@ -0,0 +1,185 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const RemoteMenu = imports.ui.remoteMenu;
const WindowMenu = new Lang.Class({
Name: 'WindowMenu',
Extends: PopupMenu.PopupMenu,
_init: function(window, sourceActor) {
this.parent(sourceActor, 0, St.Side.TOP);
this.actor.add_style_class_name('window-menu');
Main.layoutManager.uiGroup.add_actor(this.actor);
this.actor.hide();
this._buildMenu(window);
},
_buildMenu: function(window) {
let type = window.get_window_type();
let item;
item = this.addAction(_("Minimize"), Lang.bind(this, function(event) {
window.minimize();
}));
if (!window.can_minimize())
item.setSensitive(false);
if (window.get_maximized()) {
item = this.addAction(_("Unmaximize"), Lang.bind(this, function() {
window.unmaximize(Meta.MaximizeFlags.BOTH);
}));
} else {
item = this.addAction(_("Maximize"), Lang.bind(this, function() {
window.maximize(Meta.MaximizeFlags.BOTH);
}));
}
if (!window.can_maximize())
item.setSensitive(false);
item = this.addAction(_("Move"), Lang.bind(this, function(event) {
window.begin_grab_op(Meta.GrabOp.KEYBOARD_MOVING, true, event.get_time());
}));
if (!window.allows_move())
item.setSensitive(false);
item = this.addAction(_("Resize"), Lang.bind(this, function(event) {
window.begin_grab_op(Meta.GrabOp.KEYBOARD_RESIZING_UNKNOWN, true, event.get_time());
}));
if (!window.allows_resize())
item.setSensitive(false);
if (!window.titlebar_is_onscreen() && type != Meta.WindowType.DOCK && type != Meta.WindowType.DESKTOP) {
this.addAction(_("Move Titlebar Onscreen"), Lang.bind(this, function(event) {
window.shove_titlebar_onscreen();
}));
}
item = this.addAction(_("Always on Top"), Lang.bind(this, function() {
if (window.is_above())
window.unmake_above();
else
window.make_above();
}));
if (window.is_above())
item.setOrnament(PopupMenu.Ornament.DOT);
if (window.get_maximized() ||
type == Meta.WindowType.DOCK ||
type == Meta.WindowType.DESKTOP ||
type == Meta.WindowType.SPLASHSCREEN)
item.setSensitive(false);
if (Main.sessionMode.hasWorkspaces &&
(!Meta.prefs_get_workspaces_only_on_primary() ||
window.is_on_primary_monitor())) {
let isSticky = window.is_on_all_workspaces();
item = this.addAction(_("Always on Visible Workspace"), Lang.bind(this, function() {
if (isSticky)
window.unstick();
else
window.stick();
}));
if (isSticky)
item.setOrnament(PopupMenu.Ornament.DOT);
if (window.is_always_on_all_workspaces())
item.setSensitive(false);
let nWorkspaces = global.screen.n_workspaces;
if (!isSticky) {
let workspace = window.get_workspace();
let idx = workspace.index();
if (idx > 0) {
this.addAction(_("Move to Workspace Up"), Lang.bind(this, function(event) {
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.UP));
}));
}
if (idx < nWorkspaces) {
this.addAction(_("Move to Workspace Down"), Lang.bind(this, function(event) {
window.change_workspace(workspace.get_neighbor(Meta.MotionDirection.DOWN));
}));
}
}
}
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
item = this.addAction(_("Close"), Lang.bind(this, function(event) {
window.delete(event.get_time());
}));
if (!window.can_close())
item.setSensitive(false);
}
});
const AppMenu = new Lang.Class({
Name: 'AppMenu',
Extends: RemoteMenu.RemoteMenu,
_init: function(window, sourceActor) {
let app = Shell.WindowTracker.get_default().get_window_app(window);
this.parent(sourceActor, app.menu, app.action_group);
this.actor.add_style_class_name('fallback-app-menu');
let variant = window.get_gtk_theme_variant();
if (variant)
this.actor.add_style_class_name(variant);
Main.layoutManager.uiGroup.add_actor(this.actor);
this.actor.hide();
}
});
const WindowMenuManager = new Lang.Class({
Name: 'WindowMenuManager',
_init: function() {
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
this._sourceActor = new St.Widget({ reactive: true, visible: false });
this._sourceActor.connect('button-press-event', Lang.bind(this,
function() {
this._manager.activeMenu.toggle();
}));
Main.uiGroup.add_actor(this._sourceActor);
},
showWindowMenuForWindow: function(window, type, rect) {
let menuType = (type == Meta.WindowMenuType.WM) ? WindowMenu : AppMenu;
let menu = new menuType(window, this._sourceActor);
this._manager.addMenu(menu);
menu.connect('activate', function() {
window.check_alive(global.get_current_time());
});
this._sourceActor.set_size(rect.width, rect.height);
this._sourceActor.set_position(rect.x, rect.y);
this._sourceActor.show();
menu.open(BoxPointer.PopupAnimation.NONE);
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
menu.connect('open-state-changed', Lang.bind(this, function(menu_, isOpen) {
if (isOpen)
return;
this._sourceActor.hide();
menu.destroy();
}));
}
});

View File

@ -200,6 +200,10 @@ const WindowClone = new Lang.Class({
this.emit('size-changed'); this.emit('size-changed');
}, },
hasAttachedDialogs: function() {
return this.actor.get_n_children() > 1;
},
_doAddAttachedDialog: function(metaWin, realWin) { _doAddAttachedDialog: function(metaWin, realWin) {
let clone = new Clutter.Clone({ source: realWin }); let clone = new Clutter.Clone({ source: realWin });
clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() { clone._updateId = metaWin.connect('size-changed', Lang.bind(this, function() {
@ -582,7 +586,8 @@ const WindowOverlay = new Lang.Class({
}, },
_windowCanClose: function() { _windowCanClose: function() {
return this._windowClone.metaWindow.can_close(); return this._windowClone.metaWindow.can_close() &&
!this._windowClone.hasAttachedDialogs();
}, },
_onWindowAdded: function(workspace, win) { _onWindowAdded: function(workspace, win) {

View File

@ -826,10 +826,14 @@ const ThumbnailsBox = new Lang.Class({
window.change_workspace_by_index(window.get_workspace().index() + 1, true); window.change_workspace_by_index(window.get_workspace().index() + 1, true);
}); });
if (isWindow) if (isWindow) {
// ... and bam, a workspace, good as new. // ... and bam, a workspace, good as new.
// Move the window to our monitor first if necessary.
let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex;
if (source.metaWindow.get_monitor() != thumbMonitor)
source.metaWindow.move_to_monitor(thumbMonitor);
source.metaWindow.change_workspace_by_index(newWorkspaceIndex, true); source.metaWindow.change_workspace_by_index(newWorkspaceIndex, true);
else if (source.shellWorkspaceLaunch) { } else if (source.shellWorkspaceLaunch) {
source.shellWorkspaceLaunch({ workspace: newWorkspaceIndex, source.shellWorkspaceLaunch({ workspace: newWorkspaceIndex,
timestamp: time }); timestamp: time });
// This new workspace will be automatically removed if the application fails // This new workspace will be automatically removed if the application fails

View File

@ -55,6 +55,7 @@ js/ui/unlockDialog.js
js/ui/viewSelector.js js/ui/viewSelector.js
js/ui/windowAttentionHandler.js js/ui/windowAttentionHandler.js
js/ui/windowManager.js js/ui/windowManager.js
js/ui/windowMenu.js
src/calendar-server/evolution-calendar.desktop.in.in src/calendar-server/evolution-calendar.desktop.in.in
# Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it. # Please do not remove this file from POTFILES.in. Run "git submodule init && git submodule update" to get it.
src/gvc/gvc-mixer-control.c src/gvc/gvc-mixer-control.c

316
po/be.po
View File

@ -5,7 +5,7 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-02-22 08:29+0000\n" "POT-Creation-Date: 2014-04-30 19:59+0000\n"
"PO-Revision-Date: 2012-10-16 12:05+0300\n" "PO-Revision-Date: 2012-10-16 12:05+0300\n"
"Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n" "Last-Translator: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
@ -107,8 +107,8 @@ msgid ""
msgstr "" msgstr ""
"Абалонка GNOME запусціць толькі тыя пашырэнні, аўтары якіх сцвярджаюць, што " "Абалонка GNOME запусціць толькі тыя пашырэнні, аўтары якіх сцвярджаюць, што "
"яны працуюць з бягучай версіяй абалонкі. Уключэнне гэтай настройкі выключыць " "яны працуюць з бягучай версіяй абалонкі. Уключэнне гэтай настройкі выключыць "
"гэту праверку, і для ўсіх пашырэнняў будзе ажыццёўлена спроба загрузкі незалежна ад " "гэту праверку, і для ўсіх пашырэнняў будзе ажыццёўлена спроба загрузкі "
"сцвярджэнняў іх аўтараў." "незалежна ад сцвярджэнняў іх аўтараў."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7 #: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications" msgid "List of desktop file IDs for favorite applications"
@ -228,10 +228,17 @@ msgid ""
"Configures the maximum level of location accuracy applications are allowed " "Configures the maximum level of location accuracy applications are allowed "
"to see. Valid options are 'off' (disable location tracking), 'country', " "to see. Valid options are 'off' (disable location tracking), 'country', "
"'city', 'neighborhood', 'street', and 'exact' (typically requires GPS " "'city', 'neighborhood', 'street', and 'exact' (typically requires GPS "
"receiver). Please keep in mind that this only controls what Geoclue will " "receiver). Please keep in mind that this only controls what GeoClue will "
"allow applications to see and they can find user's location on their own " "allow applications to see and they can find user's location on their own "
"using network resources (albeit with street-level accuracy at best)." "using network resources (albeit with street-level accuracy at best)."
msgstr "" msgstr ""
"Настройка максімальнай дакладнасці вызначэння месцапалажэння, даступнай праграмам. "
"Магчымыя значэнні: \"off\" (выключыць вызначэнне месцапалажэння), \"country\" (краіна), "
"\"city\" (горад), \"neighborhood\" (раён), \"street\" (вуліца) і \"exact\" (дэталёва, "
"звычайна патрабуе GPS-прыёмнік). Увага: гэта настройка вызначае толькі тое, што "
"даступна праграмам з дапамогай службы GeoClue, але яны могуць самастойна вызначаць "
"месцапалажэнне з дапамогай спецыяльных сеціўных рэсурсаў (праўда, максімальная дакладнасць "
"такіх рэсурсаў - назва вуліцы)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "The application icon mode." msgid "The application icon mode."
@ -288,7 +295,8 @@ msgstr ""
#: ../js/extensionPrefs/main.js:127 #: ../js/extensionPrefs/main.js:127
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "Падчас спробы загрузкі дыялогавага акенца настроек для %s адбылася памылка:" msgstr ""
"Падчас спробы загрузкі дыялогавага акенца настроек для %s адбылася памылка:"
#: ../js/extensionPrefs/main.js:167 #: ../js/extensionPrefs/main.js:167
msgid "Extension" msgid "Extension"
@ -303,7 +311,7 @@ msgstr ""
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:883 #: ../js/ui/status/network.js:878
msgid "Cancel" msgid "Cancel"
msgstr "Скасаваць" msgstr "Скасаваць"
@ -321,25 +329,25 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Увайсці" msgstr "Увайсці"
#: ../js/gdm/loginDialog.js:270 #: ../js/gdm/loginDialog.js:271
msgid "Choose Session" msgid "Choose Session"
msgstr "Выбар сеанса" msgstr "Выбар сеанса"
#: ../js/gdm/loginDialog.js:430 #: ../js/gdm/loginDialog.js:431
msgid "Not listed?" msgid "Not listed?"
msgstr "Няма ў спісе?" msgstr "Няма ў спісе?"
#: ../js/gdm/loginDialog.js:598 #: ../js/gdm/loginDialog.js:614
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(напр., карыстальнік ці %s)" msgstr "(напр., карыстальнік ці %s)"
#: ../js/gdm/loginDialog.js:603 ../js/ui/components/networkAgent.js:262 #: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280 #: ../js/ui/components/networkAgent.js:280
msgid "Username: " msgid "Username: "
msgstr "Імя карыстальніка: " msgstr "Імя карыстальніка: "
#: ../js/gdm/loginDialog.js:868 #: ../js/gdm/loginDialog.js:920
msgid "Login Window" msgid "Login Window"
msgstr "Акно ўваходу" msgstr "Акно ўваходу"
@ -364,27 +372,27 @@ msgstr "Не ўдалося разабраць загад:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "Не ўдалося выканаць \"%s\":" msgstr "Не ўдалося выканаць \"%s\":"
#: ../js/ui/appDisplay.js:629 #: ../js/ui/appDisplay.js:636
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Тут размешчаныя часта ўжываныя праграмы" msgstr "Тут размешчаныя часта ўжываныя праграмы"
#: ../js/ui/appDisplay.js:740 #: ../js/ui/appDisplay.js:747
msgid "Frequent" msgid "Frequent"
msgstr "Часта" msgstr "Часта"
#: ../js/ui/appDisplay.js:747 #: ../js/ui/appDisplay.js:754
msgid "All" msgid "All"
msgstr "Усе" msgstr "Усе"
#: ../js/ui/appDisplay.js:1552 #: ../js/ui/appDisplay.js:1566
msgid "New Window" msgid "New Window"
msgstr "Новае акно" msgstr "Новае акно"
#: ../js/ui/appDisplay.js:1574 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1588 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Выдаліць са спіса ўпадабанага" msgstr "Выдаліць са спіса ўпадабанага"
#: ../js/ui/appDisplay.js:1580 #: ../js/ui/appDisplay.js:1594
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Дадаць у спіс упадабанага" msgstr "Дадаць у спіс упадабанага"
@ -527,44 +535,44 @@ msgstr "Сб"
msgid "calendar:MY" msgid "calendar:MY"
msgstr "calendar:MY" msgstr "calendar:MY"
#: ../js/ui/calendar.js:446 #: ../js/ui/calendar.js:450
msgid "Previous month" msgid "Previous month"
msgstr "Папярэдні месяц" msgstr "Папярэдні месяц"
#: ../js/ui/calendar.js:456 #: ../js/ui/calendar.js:460
msgid "Next month" msgid "Next month"
msgstr "Наступны месяц" msgstr "Наступны месяц"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:762 #: ../js/ui/calendar.js:772
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Нічога не прымеркавана" msgstr "Нічога не прымеркавана"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:780 #: ../js/ui/calendar.js:790
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:783 #: ../js/ui/calendar.js:793
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d %B, %Y" msgstr "%A, %d %B, %Y"
#: ../js/ui/calendar.js:794 #: ../js/ui/calendar.js:804
msgid "Today" msgid "Today"
msgstr "Сёння" msgstr "Сёння"
#: ../js/ui/calendar.js:798 #: ../js/ui/calendar.js:808
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Заўтра" msgstr "Заўтра"
#: ../js/ui/calendar.js:809 #: ../js/ui/calendar.js:819
msgid "This week" msgid "This week"
msgstr "На гэтым тыдні" msgstr "На гэтым тыдні"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:827
msgid "Next week" msgid "Next week"
msgstr "На наступным тыдні" msgstr "На наступным тыдні"
@ -597,8 +605,8 @@ msgstr "Пароль:"
msgid "Type again:" msgid "Type again:"
msgstr "Паўтарыце пароль:" msgstr "Паўтарыце пароль:"
#: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:250 #: ../js/ui/components/networkAgent.js:131 ../js/ui/status/network.js:240
#: ../js/ui/status/network.js:327 ../js/ui/status/network.js:886 #: ../js/ui/status/network.js:322 ../js/ui/status/network.js:881
msgid "Connect" msgid "Connect"
msgstr "Злучыць" msgstr "Злучыць"
@ -805,13 +813,13 @@ msgstr "Удзельнік %s запрашае вас далучыцца да %s
#: ../js/ui/components/telepathyClient.js:1164 #: ../js/ui/components/telepathyClient.js:1164
#: ../js/ui/components/telepathyClient.js:1199 #: ../js/ui/components/telepathyClient.js:1199
#: ../js/ui/components/telepathyClient.js:1233 #: ../js/ui/components/telepathyClient.js:1233
#: ../js/ui/components/telepathyClient.js:1290 #: ../js/ui/components/telepathyClient.js:1291
msgid "Decline" msgid "Decline"
msgstr "Адмовіцца" msgstr "Адмовіцца"
#: ../js/ui/components/telepathyClient.js:1170 #: ../js/ui/components/telepathyClient.js:1170
#: ../js/ui/components/telepathyClient.js:1239 #: ../js/ui/components/telepathyClient.js:1239
#: ../js/ui/components/telepathyClient.js:1295 #: ../js/ui/components/telepathyClient.js:1296
msgid "Accept" msgid "Accept"
msgstr "Прыняць" msgstr "Прыняць"
@ -848,97 +856,97 @@ msgstr "%s пасылае вам %s"
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану" msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Network error" msgid "Network error"
msgstr "Сеткавая памылка" msgstr "Сеткавая памылка"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Няўдалая ідэнтыфікацыя" msgstr "Няўдалая ідэнтыфікацыя"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Encryption error" msgid "Encryption error"
msgstr "Памылка шыфравання" msgstr "Памылка шыфравання"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Сертыфікат не пададзены" msgstr "Сертыфікат не пададзены"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Сертыфікат не заслугоўвае даверу" msgstr "Сертыфікат не заслугоўвае даверу"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Сертыфікат састарэў" msgstr "Сертыфікат састарэў"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Сертыфікат не актывізаваны" msgstr "Сертыфікат не актывізаваны"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай" msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму" msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Сертыфікат уласнаручна падпісаны" msgstr "Сертыфікат уласнаручна падпісаны"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Уключаны рэжым па-за сеткай" msgstr "Уключаны рэжым па-за сеткай"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Шыфраванне недаступнае" msgstr "Шыфраванне недаступнае"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Хібны сертыфікат" msgstr "Хібны сертыфікат"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Адмоўлена ў злучэнні" msgstr "Адмоўлена ў злучэнні"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Не ўдалося ўсталяваць злучэнне" msgstr "Не ўдалося ўсталяваць злучэнне"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Злучэнне страчана" msgstr "Злучэнне страчана"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Гэты конт ужо злучаны з серверам" msgstr "Гэты конт ужо злучаны з серверам"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу" msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Такі конт ужо існуе на серверы" msgstr "Такі конт ужо існуе на серверы"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне" msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Сертыфікат быў адкліканы" msgstr "Сертыфікат быў адкліканы"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання" msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
#: ../js/ui/components/telepathyClient.js:1385 #: ../js/ui/components/telepathyClient.js:1386
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -946,22 +954,22 @@ msgstr ""
"Даўжыня сертыфіката сервера або глыбіня яго ланцуга перавышае абмежаванне, " "Даўжыня сертыфіката сервера або глыбіня яго ланцуга перавышае абмежаванне, "
"выстаўленае крыптаграфічнай бібліятэкай" "выстаўленае крыптаграфічнай бібліятэкай"
#: ../js/ui/components/telepathyClient.js:1387 #: ../js/ui/components/telepathyClient.js:1388
msgid "Internal error" msgid "Internal error"
msgstr "Унутраная памылка" msgstr "Унутраная памылка"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1397 #: ../js/ui/components/telepathyClient.js:1398
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Не ўдалося злучыцца з %s" msgstr "Не ўдалося злучыцца з %s"
#: ../js/ui/components/telepathyClient.js:1402 #: ../js/ui/components/telepathyClient.js:1403
msgid "View account" msgid "View account"
msgstr "Праглядзець конт" msgstr "Праглядзець конт"
#: ../js/ui/components/telepathyClient.js:1434 #: ../js/ui/components/telepathyClient.js:1440
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Невядомая прычына" msgstr "Невядомая прычына"
@ -977,22 +985,22 @@ msgstr "Паказаць праграмы"
msgid "Dash" msgid "Dash"
msgstr "Прыборная дошка" msgstr "Прыборная дошка"
#: ../js/ui/dateMenu.js:86 #: ../js/ui/dateMenu.js:91
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Адкрыць каляндар" msgstr "Адкрыць каляндар"
#: ../js/ui/dateMenu.js:90 #: ../js/ui/dateMenu.js:95
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Адкрыць гадзіннікі" msgstr "Адкрыць гадзіннікі"
#: ../js/ui/dateMenu.js:97 #: ../js/ui/dateMenu.js:102
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Настройкі даты і часу" msgstr "Настройкі даты і часу"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:187 #: ../js/ui/dateMenu.js:192
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e %B, %Y" msgstr "%A, %e %B, %Y"
@ -1108,7 +1116,9 @@ msgstr "Выключыць камп'ютар пасля ўсталявання
#: ../js/ui/endSessionDialog.js:315 #: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates." msgid "Running on battery power: please plug in before installing updates."
msgstr "Камп'ютар сілкуецца ад акумулятара: падлучыце да знешняй крыніцы энергіі перад усталяваннем абновак." msgstr ""
"Камп'ютар сілкуецца ад акумулятара: падлучыце да знешняй крыніцы энергіі "
"перад усталяваннем абновак."
#: ../js/ui/endSessionDialog.js:332 #: ../js/ui/endSessionDialog.js:332
msgid "Some applications are busy or have unsaved work." msgid "Some applications are busy or have unsaved work."
@ -1143,25 +1153,26 @@ msgstr "Сцягнуць і ўсталяваць \"%s\" з extensions.gnome.org?
msgid "Keyboard" msgid "Keyboard"
msgstr "Клавіятура" msgstr "Клавіятура"
#: ../js/ui/lookingGlass.js:641 #: ../js/ui/lookingGlass.js:643
msgid "No extensions installed" msgid "No extensions installed"
msgstr "Няма ўсталяваных пашырэнняў" msgstr "Няма ўсталяваных пашырэнняў"
#. Translators: argument is an extension UUID. */ #. Translators: argument is an extension UUID. */
#: ../js/ui/lookingGlass.js:695 #: ../js/ui/lookingGlass.js:697
#, javascript-format #, javascript-format
msgid "%s has not emitted any errors." msgid "%s has not emitted any errors."
msgstr "%s не зрабіў ніякіх памылак." msgstr "%s не зрабіў ніякіх памылак."
#: ../js/ui/lookingGlass.js:701 #: ../js/ui/lookingGlass.js:703
msgid "Hide Errors" msgid "Hide Errors"
msgstr "Хаваць памылкі" msgstr "Хаваць памылкі"
#: ../js/ui/lookingGlass.js:705 ../js/ui/lookingGlass.js:765 #: ../js/ui/lookingGlass.js:707 ../js/ui/lookingGlass.js:767
msgid "Show Errors" msgid "Show Errors"
msgstr "Паказваць памылкі" msgstr "Паказваць памылкі"
#: ../js/ui/lookingGlass.js:714 #: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:59
#: ../js/ui/status/location.js:167
msgid "Enabled" msgid "Enabled"
msgstr "Уключана" msgstr "Уключана"
@ -1169,64 +1180,64 @@ msgstr "Уключана"
#. because it's disabled by rfkill (airplane mode) */ #. because it's disabled by rfkill (airplane mode) */
#. translators: #. translators:
#. * The device has been disabled #. * The device has been disabled
#: ../js/ui/lookingGlass.js:717 ../js/ui/status/network.js:560 #: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:164
#: ../src/gvc/gvc-mixer-control.c:1830 #: ../js/ui/status/network.js:555 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Выключана" msgstr "Выключана"
#: ../js/ui/lookingGlass.js:719 #: ../js/ui/lookingGlass.js:721
msgid "Error" msgid "Error"
msgstr "Памылка" msgstr "Памылка"
#: ../js/ui/lookingGlass.js:721 #: ../js/ui/lookingGlass.js:723
msgid "Out of date" msgid "Out of date"
msgstr "Састарэла" msgstr "Састарэла"
#: ../js/ui/lookingGlass.js:723 #: ../js/ui/lookingGlass.js:725
msgid "Downloading" msgid "Downloading"
msgstr "Сцягванне" msgstr "Сцягванне"
#: ../js/ui/lookingGlass.js:747 #: ../js/ui/lookingGlass.js:749
msgid "View Source" msgid "View Source"
msgstr "Паглядзець выточны код" msgstr "Паглядзець выточны код"
#: ../js/ui/lookingGlass.js:756 #: ../js/ui/lookingGlass.js:758
msgid "Web Page" msgid "Web Page"
msgstr "Сеціўная старонка" msgstr "Сеціўная старонка"
#: ../js/ui/messageTray.js:1324 #: ../js/ui/messageTray.js:1326
msgid "Open" msgid "Open"
msgstr "Адкрыць" msgstr "Адкрыць"
#: ../js/ui/messageTray.js:1331 #: ../js/ui/messageTray.js:1333
msgid "Remove" msgid "Remove"
msgstr "Выдаліць" msgstr "Выдаліць"
#: ../js/ui/messageTray.js:1628 #: ../js/ui/messageTray.js:1630
msgid "Notifications" msgid "Notifications"
msgstr "Апавяшчэнні" msgstr "Апавяшчэнні"
#: ../js/ui/messageTray.js:1635 #: ../js/ui/messageTray.js:1637
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Ачысціць спіс апавяшчэнняў" msgstr "Ачысціць спіс апавяшчэнняў"
#: ../js/ui/messageTray.js:1654 #: ../js/ui/messageTray.js:1656
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Настройкі апавяшчэння" msgstr "Настройкі апавяшчэння"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Меню трэя" msgstr "Меню трэя"
#: ../js/ui/messageTray.js:1924 #: ../js/ui/messageTray.js:1926
msgid "No Messages" msgid "No Messages"
msgstr "Апавяшчэнні адсутнічаюць" msgstr "Апавяшчэнні адсутнічаюць"
#: ../js/ui/messageTray.js:1962 #: ../js/ui/messageTray.js:1964
msgid "Message Tray" msgid "Message Tray"
msgstr "Абшар апавяшчэнняў" msgstr "Абшар апавяшчэнняў"
#: ../js/ui/messageTray.js:2946 #: ../js/ui/messageTray.js:2962
msgid "System Information" msgid "System Information"
msgstr "Сістэмная інфармацыя" msgstr "Сістэмная інфармацыя"
@ -1243,11 +1254,11 @@ msgstr[0] "%d новае паведамленне"
msgstr[1] "%d новыя паведамленні" msgstr[1] "%d новыя паведамленні"
msgstr[2] "%d новых паведамленняў" msgstr[2] "%d новых паведамленняў"
#: ../js/ui/overview.js:83 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Адрабіць" msgstr "Адрабіць"
#: ../js/ui/overview.js:123 #: ../js/ui/overview.js:124
msgid "Overview" msgid "Overview"
msgstr "Агляд" msgstr "Агляд"
@ -1255,7 +1266,7 @@ msgstr "Агляд"
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. */ #. characters. */
#: ../js/ui/overview.js:257 #: ../js/ui/overview.js:250
msgid "Type to search…" msgid "Type to search…"
msgstr "Увядзіце тэкст для пошуку..." msgstr "Увядзіце тэкст для пошуку..."
@ -1299,27 +1310,27 @@ msgstr[0] "%d новае апавяшчэнне"
msgstr[1] "%d новыя апавяшчэнні" msgstr[1] "%d новыя апавяшчэнні"
msgstr[2] "%d новых апавяшчэнняў" msgstr[2] "%d новых апавяшчэнняў"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:342 #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
msgid "Lock" msgid "Lock"
msgstr "Заблакіраваць" msgstr "Заблакіраваць"
#: ../js/ui/screenShield.js:707 #: ../js/ui/screenShield.js:708
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME патрабуе блакіравання экрана" msgstr "GNOME патрабуе блакіравання экрана"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1301 #: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1309
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Не ўдалося заблакіраваць" msgstr "Не ўдалося заблакіраваць"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1302 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1310
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Блакіраванне стрымана праграмай" msgstr "Блакіраванне стрымана праграмай"
#: ../js/ui/search.js:589 #: ../js/ui/search.js:603
msgid "Searching…" msgid "Searching…"
msgstr "Пошук..." msgstr "Пошук..."
#: ../js/ui/search.js:632 #: ../js/ui/search.js:649
msgid "No results." msgid "No results."
msgstr "Нічога не знойдзена." msgstr "Нічога не знойдзена."
@ -1391,23 +1402,22 @@ msgstr "Высокая кантраснасць"
msgid "Large Text" msgid "Large Text"
msgstr "Буйны тэкст" msgstr "Буйны тэкст"
#: ../js/ui/status/bluetooth.js:48 #: ../js/ui/status/bluetooth.js:49
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:50 ../js/ui/status/location.js:62 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
#: ../js/ui/status/location.js:162 ../js/ui/status/network.js:151 #: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
#: ../js/ui/status/network.js:328 ../js/ui/status/network.js:1235 #: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/network.js:1346 ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:114
#: ../js/ui/status/rfkill.js:105
msgid "Turn Off" msgid "Turn Off"
msgstr "Выключыць" msgstr "Выключыць"
#: ../js/ui/status/bluetooth.js:53 #: ../js/ui/status/bluetooth.js:54
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Настройкі Bluetooth" msgstr "Настройкі Bluetooth"
#: ../js/ui/status/bluetooth.js:100 #: ../js/ui/status/bluetooth.js:104
#, javascript-format #, javascript-format
msgid "%d Connected Device" msgid "%d Connected Device"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected Devices"
@ -1415,7 +1425,7 @@ msgstr[0] "%d злучанае прыстасаванне"
msgstr[1] "%d злучаныя прыстасаванні" msgstr[1] "%d злучаныя прыстасаванні"
msgstr[2] "%d злучаных прыстасаванняў" msgstr[2] "%d злучаных прыстасаванняў"
#: ../js/ui/status/bluetooth.js:102 ../js/ui/status/network.js:1263 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1262
msgid "Not Connected" msgid "Not Connected"
msgstr "Няма злучэння" msgstr "Няма злучэння"
@ -1427,156 +1437,167 @@ msgstr "Яркасць"
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Паказаць клавіятурную раскладку" msgstr "Паказаць клавіятурную раскладку"
#: ../js/ui/status/location.js:52 #: ../js/ui/status/location.js:53
msgid "Location" msgid "Location"
msgstr "Месцапалажэнне" msgstr "Месцапалажэнне"
#: ../js/ui/status/location.js:61 ../js/ui/status/location.js:161 #: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
#: ../js/ui/status/rfkill.js:84 msgid "Disable"
msgid "On" msgstr "Выключыць"
msgstr "Укл."
#: ../js/ui/status/location.js:158 ../js/ui/status/network.js:246 #: ../js/ui/status/location.js:165
#: ../js/ui/status/network.js:425 ../js/ui/status/network.js:1261 msgid "Enable"
msgid "Off"
msgstr "Выключана"
#: ../js/ui/status/location.js:159 ../js/ui/status/network.js:1235
msgid "Turn On"
msgstr "Уключыць" msgstr "Уключыць"
#: ../js/ui/status/location.js:167
msgid "In Use"
msgstr "Ужыта"
#: ../js/ui/status/network.js:74 #: ../js/ui/status/network.js:74
msgid "<unknown>" msgid "<unknown>"
msgstr "<невядома>" msgstr "<невядома>"
#: ../js/ui/status/network.js:420 ../js/ui/status/network.js:1260
#: ../js/ui/status/network.js:1464
msgid "Off"
msgstr "Выключана"
#: ../js/ui/status/network.js:422
msgid "Connected"
msgstr "Злучана"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */ #. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:431 #: ../js/ui/status/network.js:426
msgid "unmanaged" msgid "unmanaged"
msgstr "непадкантрольна" msgstr "непадкантрольна"
#: ../js/ui/status/network.js:433 #: ../js/ui/status/network.js:428
msgid "disconnecting..." msgid "disconnecting..."
msgstr "адлучэнне..." msgstr "адлучэнне..."
#: ../js/ui/status/network.js:439 ../js/ui/status/network.js:1363 #: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1362
msgid "connecting..." msgid "connecting..."
msgstr "усталяванне злучэння..." msgstr "усталяванне злучэння..."
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:442 ../js/ui/status/network.js:1366 #: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1365
msgid "authentication required" msgid "authentication required"
msgstr "патрэбная ідэнтыфікацыя" msgstr "патрэбная ідэнтыфікацыя"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */ #. module, which is missing */
#: ../js/ui/status/network.js:450 #: ../js/ui/status/network.js:445
msgid "firmware missing" msgid "firmware missing"
msgstr "няма апаратнага апраграмавання" msgstr "няма апаратнага апраграмавання"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */ #. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:454 #: ../js/ui/status/network.js:449
msgid "unavailable" msgid "unavailable"
msgstr "недаступна" msgstr "недаступна"
#: ../js/ui/status/network.js:456 ../js/ui/status/network.js:1368 #: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1367
msgid "connection failed" msgid "connection failed"
msgstr "не ўдалося злучыцца" msgstr "не ўдалося злучыцца"
#: ../js/ui/status/network.js:472 #: ../js/ui/status/network.js:467
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Настройкі праваднога злучэння" msgstr "Настройкі праваднога злучэння"
#: ../js/ui/status/network.js:514 ../js/ui/status/network.js:592 #: ../js/ui/status/network.js:509 ../js/ui/status/network.js:587
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Настройкі мабільнага злучэння" msgstr "Настройкі мабільнага злучэння"
#: ../js/ui/status/network.js:556 ../js/ui/status/network.js:1259 #: ../js/ui/status/network.js:551 ../js/ui/status/network.js:1258
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Прыстасаванне выключана" msgstr "Прыстасаванне выключана"
#: ../js/ui/status/network.js:600 #: ../js/ui/status/network.js:595
msgid "Use as Internet connection" msgid "Use as Internet connection"
msgstr "Ужыць для злучэння з Інтэрнэтам" msgstr "Ужыць для злучэння з Інтэрнэтам"
#: ../js/ui/status/network.js:781 #: ../js/ui/status/network.js:776
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "Рэжым самалёта ўключаны" msgstr "Рэжым самалёта ўключаны"
#: ../js/ui/status/network.js:782 #: ../js/ui/status/network.js:777
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "У рэжыме самалёта выключаецца Wi-Fi." msgstr "У рэжыме самалёта выключаецца Wi-Fi."
#: ../js/ui/status/network.js:783 #: ../js/ui/status/network.js:778
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Выключыць рэжым самалёта" msgstr "Выключыць рэжым самалёта"
#: ../js/ui/status/network.js:792 #: ../js/ui/status/network.js:787
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
msgstr "Wi-Fi выключаны" msgstr "Wi-Fi выключаны"
#: ../js/ui/status/network.js:793 #: ../js/ui/status/network.js:788
msgid "Wi-Fi needs to be turned on in order to connect to a network." msgid "Wi-Fi needs to be turned on in order to connect to a network."
msgstr "Каб злучыцца з сеткай, спачатку трэба ўключыць Wi-Fi." msgstr "Каб злучыцца з сеткай, спачатку трэба ўключыць Wi-Fi."
#: ../js/ui/status/network.js:794 #: ../js/ui/status/network.js:789
msgid "Turn On Wi-Fi" msgid "Turn On Wi-Fi"
msgstr "Уключыць Wi-Fi" msgstr "Уключыць Wi-Fi"
#: ../js/ui/status/network.js:819 #: ../js/ui/status/network.js:814
msgid "Wi-Fi Networks" msgid "Wi-Fi Networks"
msgstr "Сеткі Wi-Fi" msgstr "Сеткі Wi-Fi"
#: ../js/ui/status/network.js:821 #: ../js/ui/status/network.js:816
msgid "Select a network" msgid "Select a network"
msgstr "Выберыце сетку" msgstr "Выберыце сетку"
#: ../js/ui/status/network.js:850 #: ../js/ui/status/network.js:845
msgid "No Networks" msgid "No Networks"
msgstr "Няма сетак" msgstr "Няма сетак"
#: ../js/ui/status/network.js:871 ../js/ui/status/rfkill.js:103 #: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Задзейнічаць апаратны выключальнік" msgstr "Задзейнічаць апаратны выключальнік"
#: ../js/ui/status/network.js:1141 #: ../js/ui/status/network.js:1136
msgid "Select Network" msgid "Select Network"
msgstr "Выбраць сетку" msgstr "Выбраць сетку"
#: ../js/ui/status/network.js:1147 #: ../js/ui/status/network.js:1142
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Настройкі Wi-Fi" msgstr "Настройкі Wi-Fi"
#: ../js/ui/status/network.js:1252 #: ../js/ui/status/network.js:1234
msgid "Turn On"
msgstr "Уключыць"
#: ../js/ui/status/network.js:1251
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Хотспот уключаны" msgstr "Хотспот уключаны"
#: ../js/ui/status/network.js:1255 #: ../js/ui/status/network.js:1254
msgid "Connecting" msgid "Connecting"
msgstr "Злучэнне" msgstr "Злучэнне"
#: ../js/ui/status/network.js:1434 ../js/ui/status/rfkill.js:88 #: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
msgid "Network Settings" msgid "Network Settings"
msgstr "Сеткавыя настройкі" msgstr "Сеткавыя настройкі"
#: ../js/ui/status/network.js:1436 #: ../js/ui/status/network.js:1435
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Настройкі VPN" msgstr "Настройкі VPN"
#: ../js/ui/status/network.js:1455 #: ../js/ui/status/network.js:1454
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1598 #: ../js/ui/status/network.js:1607
msgid "Network Manager" msgid "Network Manager"
msgstr "Сеткавы кіраўнік" msgstr "Сеткавы кіраўнік"
#: ../js/ui/status/network.js:1637 #: ../js/ui/status/network.js:1646
msgid "Connection failed" msgid "Connection failed"
msgstr "Не ўдалося злучыцца" msgstr "Не ўдалося злучыцца"
#: ../js/ui/status/network.js:1638 #: ../js/ui/status/network.js:1647
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Не ўдалося ўключыць сеткавае злучэнне" msgstr "Не ўдалося ўключыць сеткавае злучэнне"
@ -1610,10 +1631,14 @@ msgstr "UPS"
msgid "Battery" msgid "Battery"
msgstr "Батарэя" msgstr "Батарэя"
#: ../js/ui/status/rfkill.js:82 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Рэжым самалёта" msgstr "Рэжым самалёта"
#: ../js/ui/status/rfkill.js:85
msgid "On"
msgstr "Укл."
#: ../js/ui/status/system.js:314 #: ../js/ui/status/system.js:314
msgid "Switch User" msgid "Switch User"
msgstr "Перамяніць карыстальніка" msgstr "Перамяніць карыстальніка"
@ -1750,4 +1775,3 @@ msgstr "Пароль не можа быць пустым"
#: ../src/shell-polkit-authentication-agent.c:343 #: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі" msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"

File diff suppressed because it is too large Load Diff

162
po/cs.po
View File

@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-04-23 07:44+0000\n" "POT-Creation-Date: 2014-05-18 07:27+0000\n"
"PO-Revision-Date: 2014-04-23 17:03+0100\n" "PO-Revision-Date: 2014-05-18 15:23+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n" "Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n" "Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n" "Language: cs\n"
@ -371,30 +371,34 @@ msgstr "Nelze analyzovat příkaz:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "Vykonání „%s“ selhalo:" msgstr "Vykonání „%s“ selhalo:"
#: ../js/ui/appDisplay.js:636 #: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Zde se objeví často používané aplikace" msgstr "Zde se objeví často používané aplikace"
#: ../js/ui/appDisplay.js:747 #: ../js/ui/appDisplay.js:751
msgid "Frequent" msgid "Frequent"
msgstr "Časté" msgstr "Časté"
#: ../js/ui/appDisplay.js:754 #: ../js/ui/appDisplay.js:758
msgid "All" msgid "All"
msgstr "Všechny" msgstr "Všechny"
#: ../js/ui/appDisplay.js:1567 #: ../js/ui/appDisplay.js:1571
msgid "New Window" msgid "New Window"
msgstr "Nové okno" msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1589 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených" msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1595 #: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené" msgstr "Přidat mezi oblíbené"
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "Zobrazit podrobnosti"
#: ../js/ui/appFavorites.js:87 #: ../js/ui/appFavorites.js:87
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
@ -406,7 +410,7 @@ msgid "%s has been removed from your favorites."
msgstr "%s byl odstraněn z oblíbených." msgstr "%s byl odstraněn z oblíbených."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
#: ../js/ui/status/system.js:334 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Nastavení" msgstr "Nastavení"
@ -417,14 +421,14 @@ msgstr "Změnit pozadí…"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:64 #: ../js/ui/calendar.js:67
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Celý den" msgstr "Celý den"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:70 #: ../js/ui/calendar.js:73
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%k%M" msgstr "%k%M"
@ -432,7 +436,7 @@ msgstr "%k%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:79 #: ../js/ui/calendar.js:82
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -442,43 +446,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:110 #: ../js/ui/calendar.js:113
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "Ne" msgstr "Ne"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:112 #: ../js/ui/calendar.js:115
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "Po" msgstr "Po"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:114 #: ../js/ui/calendar.js:117
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "Út" msgstr "Út"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:116 #: ../js/ui/calendar.js:119
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "St" msgstr "St"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:118 #: ../js/ui/calendar.js:121
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "Čt" msgstr "Čt"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:120 #: ../js/ui/calendar.js:123
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "Pá" msgstr "Pá"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:122 #: ../js/ui/calendar.js:125
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "So" msgstr "So"
@ -489,89 +493,85 @@ msgstr "So"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:135 #: ../js/ui/calendar.js:138
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Ne" msgstr "Ne"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:137 #: ../js/ui/calendar.js:140
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Po" msgstr "Po"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:139 #: ../js/ui/calendar.js:142
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "Út" msgstr "Út"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:141 #: ../js/ui/calendar.js:144
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "St" msgstr "St"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:143 #: ../js/ui/calendar.js:146
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "Čt" msgstr "Čt"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:145 #: ../js/ui/calendar.js:148
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "Pá" msgstr "Pá"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:147 #: ../js/ui/calendar.js:150
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "So" msgstr "So"
#: ../js/ui/calendar.js:390 #: ../js/ui/calendar.js:453
msgid "calendar:MY"
msgstr "calendar:MY"
#: ../js/ui/calendar.js:450
msgid "Previous month" msgid "Previous month"
msgstr "Předchozí měsíc" msgstr "Předchozí měsíc"
#: ../js/ui/calendar.js:460 #: ../js/ui/calendar.js:463
msgid "Next month" msgid "Next month"
msgstr "Následující měsíc" msgstr "Následující měsíc"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:772 #: ../js/ui/calendar.js:775
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Nic nenaplánováno" msgstr "Nic nenaplánováno"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:790 #: ../js/ui/calendar.js:793
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %e. %B" msgstr "%A, %e. %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:793 #: ../js/ui/calendar.js:796
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %e. %B %Y" msgstr "%A, %e. %B %Y"
#: ../js/ui/calendar.js:804 #: ../js/ui/calendar.js:807
msgid "Today" msgid "Today"
msgstr "Dnes" msgstr "Dnes"
#: ../js/ui/calendar.js:808 #: ../js/ui/calendar.js:811
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Zítra" msgstr "Zítra"
#: ../js/ui/calendar.js:819 #: ../js/ui/calendar.js:822
msgid "This week" msgid "This week"
msgstr "Tento týden" msgstr "Tento týden"
#: ../js/ui/calendar.js:827 #: ../js/ui/calendar.js:830
msgid "Next week" msgid "Next week"
msgstr "Následující týden" msgstr "Následující týden"
@ -984,15 +984,15 @@ msgstr "Zobrazit aplikace"
msgid "Dash" msgid "Dash"
msgstr "Oblíbené" msgstr "Oblíbené"
#: ../js/ui/dateMenu.js:91 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Otevřít kalendář" msgstr "Otevřít kalendář"
#: ../js/ui/dateMenu.js:95 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Otevřít Hodiny" msgstr "Otevřít Hodiny"
#: ../js/ui/dateMenu.js:102 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Nastavení data a času" msgstr "Nastavení data a času"
@ -1000,7 +1000,7 @@ msgstr "Nastavení data a času"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:192 #: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e. %B, %Y" msgstr "%A, %e. %B, %Y"
@ -1248,7 +1248,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Neznámé" msgstr "Neznámé"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151 #: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
#, javascript-format #, javascript-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1294,7 +1294,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Zadejte příkaz:" msgstr "Zadejte příkaz:"
#: ../js/ui/runDialog.js:114 #: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
msgid "Close" msgid "Close"
msgstr "Zavřít" msgstr "Zavřít"
@ -1312,7 +1312,7 @@ msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění" msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění" msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342 #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Uzamknout" msgstr "Uzamknout"
@ -1410,8 +1410,8 @@ msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234 #: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85 #: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:105 #: ../js/ui/status/rfkill.js:114
msgid "Turn Off" msgid "Turn Off"
msgstr "Vypnout" msgstr "Vypnout"
@ -1555,7 +1555,7 @@ msgstr "Vyberte síť"
msgid "No Networks" msgid "No Networks"
msgstr "Žádné sítě" msgstr "Žádné sítě"
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103 #: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "K vypnutí použijte fyzický vypínač" msgstr "K vypnutí použijte fyzický vypínač"
@ -1588,7 +1588,7 @@ msgstr "je vyžadováno ověření"
msgid "connection failed" msgid "connection failed"
msgstr "připojení selhalo" msgstr "připojení selhalo"
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88 #: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
msgid "Network Settings" msgid "Network Settings"
msgstr "Nastavení sítě" msgstr "Nastavení sítě"
@ -1638,31 +1638,31 @@ msgstr "Záložní zdroj"
msgid "Battery" msgid "Battery"
msgstr "Baterie" msgstr "Baterie"
#: ../js/ui/status/rfkill.js:82 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Režim „letadlo“" msgstr "Režim „letadlo“"
#: ../js/ui/status/rfkill.js:84 #: ../js/ui/status/rfkill.js:85
msgid "On" msgid "On"
msgstr "Zapnuto" msgstr "Zapnuto"
#: ../js/ui/status/system.js:314 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Přepnout uživatele" msgstr "Přepnout uživatele"
#: ../js/ui/status/system.js:319 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Odhlásit se" msgstr "Odhlásit se"
#: ../js/ui/status/system.js:338 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Zámek otočení" msgstr "Zámek otočení"
#: ../js/ui/status/system.js:346 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Uspat do paměti" msgstr "Uspat do paměti"
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Vypnout" msgstr "Vypnout"
@ -1699,22 +1699,22 @@ msgstr "Hledat"
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "Připraveno „%s“" msgstr "Připraveno „%s“"
#: ../js/ui/windowManager.js:56 #: ../js/ui/windowManager.js:57
msgid "Do you want to keep these display settings?" msgid "Do you want to keep these display settings?"
msgstr "Chcete zachovat nastavení displeje?" msgstr "Chcete zachovat nastavení displeje?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. */ #. */
#: ../js/ui/windowManager.js:75 #: ../js/ui/windowManager.js:76
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Obnovit původní" msgstr "Obnovit původní"
#: ../js/ui/windowManager.js:79 #: ../js/ui/windowManager.js:80
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Zachovat" msgstr "Zachovat"
#: ../js/ui/windowManager.js:98 #: ../js/ui/windowManager.js:99
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -1722,6 +1722,46 @@ msgstr[0] "Nastavení se obnoví na původní za %d sekundu"
msgstr[1] "Nastavení se obnoví na původní za %d sekundy" msgstr[1] "Nastavení se obnoví na původní za %d sekundy"
msgstr[2] "Nastavení se obnoví na původní za %d sekund" msgstr[2] "Nastavení se obnoví na původní za %d sekund"
#: ../js/ui/windowMenu.js:33
msgid "Minimize"
msgstr "Minimalizovat"
#: ../js/ui/windowMenu.js:40
msgid "Unmaximize"
msgstr "Zrušit maximalizaci"
#: ../js/ui/windowMenu.js:44
msgid "Maximize"
msgstr "Maximalizovat"
#: ../js/ui/windowMenu.js:51
msgid "Move"
msgstr "Přesunout"
#: ../js/ui/windowMenu.js:57
msgid "Resize"
msgstr "Změnit velikost"
#: ../js/ui/windowMenu.js:64
msgid "Move Titlebar Onscreen"
msgstr ""
#: ../js/ui/windowMenu.js:69
msgid "Always on Top"
msgstr "Vždy nahoře"
#: ../js/ui/windowMenu.js:86
msgid "Always on Visible Workspace"
msgstr "Vždy na viditelné ploše"
#: ../js/ui/windowMenu.js:103
msgid "Move to Workspace Up"
msgstr "Přesunout o plochu výš"
#: ../js/ui/windowMenu.js:108
msgid "Move to Workspace Down"
msgstr "Přesunout o plochu níž"
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Kalendář Evolution" msgstr "Kalendář Evolution"

File diff suppressed because it is too large Load Diff

422
po/es.po

File diff suppressed because it is too large Load Diff

375
po/he.po
View File

@ -3,14 +3,15 @@
# This file is distributed under the same license as the gnome-shell package. # This file is distributed under the same license as the gnome-shell package.
# liel <lielft@gmail.com>, 2009. # liel <lielft@gmail.com>, 2009.
# Yaron Shahrabani <sh.yaron@gmail.com>, 2010. # Yaron Shahrabani <sh.yaron@gmail.com>, 2010.
# Yosef Or Boczko <yoseforb@gnome.org>, 2013, 2014. #
# Yosef Or Boczko <yoseforb@gnome.org>, 2013, 2014.
, 2014. , 2014.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"POT-Creation-Date: 2014-03-27 20:22+0200\n" "Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2014-03-27 20:24+0200\n" "POT-Creation-Date: 2014-05-22 23:44+0300\n"
"PO-Revision-Date: 2014-05-22 23:45+0300\n" "PO-Revision-Date: 2014-05-22 23:45+0300\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n" "Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n" "Language-Team: עברית <>\n"
@ -331,25 +332,25 @@ msgstr "בחירת הפעלה"
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:431
msgid "Not listed?" msgid "Not listed?"
msgstr "לא רשום?" msgstr "לא רשום?"
#: ../js/gdm/loginDialog.js:611
#: ../js/gdm/loginDialog.js:616 #: ../js/gdm/loginDialog.js:616
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(משתמש או %s לדוגמה)" msgstr "(משתמש או %s לדוגמה)"
#: ../js/gdm/loginDialog.js:616 ../js/ui/components/networkAgent.js:262
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262 #: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280 #: ../js/ui/components/networkAgent.js:280
msgid "Username: " msgid "Username: "
msgstr "שם משתמש:" msgstr "שם משתמש:"
#: ../js/gdm/loginDialog.js:917
#: ../js/gdm/loginDialog.js:924 #: ../js/gdm/loginDialog.js:924
msgid "Login Window" msgid "Login Window"
msgstr "חלון כניסה" msgstr "חלון כניסה"
#: ../js/gdm/util.js:322
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:323
msgid "Authentication error" msgid "Authentication error"
msgstr "שגיאת אימות" msgstr "שגיאת אימות"
#: ../js/gdm/util.js:452
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:453
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(או להעביר אצבע)" msgstr "(או להעביר אצבע)"
@ -366,30 +367,34 @@ msgstr "לא ניתן לפענח את הפקודה:"
#, javascript-format #, javascript-format
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "ההרצה של „%s” נכשלה:" msgstr "ההרצה של „%s” נכשלה:"
#: ../js/ui/appDisplay.js:636
#: ../js/ui/appDisplay.js:640 #: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "יישומים בשימוש תדיר יופיעו כאן" msgstr "יישומים בשימוש תדיר יופיעו כאן"
#: ../js/ui/appDisplay.js:747
#: ../js/ui/appDisplay.js:751 #: ../js/ui/appDisplay.js:751
msgid "Frequent" msgid "Frequent"
msgstr "תדיר" msgstr "תדיר"
#: ../js/ui/appDisplay.js:754
#: ../js/ui/appDisplay.js:758 #: ../js/ui/appDisplay.js:758
msgid "All" msgid "All"
msgstr "הכול" msgstr "הכול"
#: ../js/ui/appDisplay.js:1566
#: ../js/ui/appDisplay.js:1571 #: ../js/ui/appDisplay.js:1571
msgid "New Window" msgid "New Window"
msgstr "חלון חדש" msgstr "חלון חדש"
#: ../js/ui/appDisplay.js:1588 ../js/ui/dash.js:285
#: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים" msgstr "הסרה מהמועדפים"
#: ../js/ui/appDisplay.js:1594
#: ../js/ui/appDisplay.js:1599 #: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "הוספה למועדפים" msgstr "הוספה למועדפים"
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "הצגת פרטים"
#: ../js/ui/appFavorites.js:87 #: ../js/ui/appFavorites.js:87
#, javascript-format #, javascript-format
@ -400,8 +405,8 @@ msgstr "%s נוסף למועדפים שלך."
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s הוסר מהמועדפים שלך." msgstr "%s הוסר מהמועדפים שלך."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809
#: ../js/ui/status/system.js:334 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "הגדרות" msgstr "הגדרות"
@ -412,22 +417,22 @@ msgstr "החלפת הרקע…"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#: ../js/ui/calendar.js:64 #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:67
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "יום שלם" msgstr "יום שלם"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#: ../js/ui/calendar.js:70 #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:73
msgctxt "event list time" msgctxt "event list time"
msgstr "%H\\u2236%M" msgid "%H%M"
msgstr "%H:%M" msgstr "%H:%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#: ../js/ui/calendar.js:79 #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:82
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
@ -437,43 +442,43 @@ msgstr "%l\\u2236%M%p"
#. * #. *
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#: ../js/ui/calendar.js:110 #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:113
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "א" msgstr "א"
#: ../js/ui/calendar.js:112 #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:115
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "ב" msgstr "ב"
#: ../js/ui/calendar.js:114 #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:117
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "ג" msgstr "ג"
#: ../js/ui/calendar.js:116 #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:119
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "ד" msgstr "ד"
#: ../js/ui/calendar.js:118 #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:121
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "ה" msgstr "ה"
#: ../js/ui/calendar.js:120 #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:123
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "ו" msgstr "ו"
#: ../js/ui/calendar.js:122 #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:125
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
@ -484,97 +489,93 @@ msgstr "ש"
#. * NOTE: These list abbreviations are normally not shown together #. * NOTE: These list abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#: ../js/ui/calendar.js:135 #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:138
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "א׳" msgstr "א׳"
#: ../js/ui/calendar.js:137 #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:140
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "ב׳" msgstr "ב׳"
#: ../js/ui/calendar.js:139 #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:142
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "ג׳" msgstr "ג׳"
#: ../js/ui/calendar.js:141 #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:144
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "ד׳" msgstr "ד׳"
#: ../js/ui/calendar.js:143 #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:146
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "ה" msgstr "ה"
#: ../js/ui/calendar.js:145 #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:148
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "ו׳" msgstr "ו׳"
#: ../js/ui/calendar.js:147 #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:150
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "ש׳" msgstr "ש׳"
#: ../js/ui/calendar.js:390
msgid "calendar:MY"
msgstr "calendar:YM"
#: ../js/ui/calendar.js:450
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:453
msgid "Previous month" msgid "Previous month"
msgstr "חודש קודם" msgstr "חודש קודם"
#: ../js/ui/calendar.js:460
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:463
msgid "Next month" msgid "Next month"
msgstr "חודש הבא" msgstr "חודש הבא"
#: ../js/ui/calendar.js:772 #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:775 #: ../js/ui/calendar.js:775
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "היומן ריק" msgstr "היומן ריק"
#: ../js/ui/calendar.js:790 #. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:793 #: ../js/ui/calendar.js:793
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, ה־%e ב%B" msgstr "%A, ה־%e ב%B"
#: ../js/ui/calendar.js:793 #. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:796 #: ../js/ui/calendar.js:796
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, ה־%e ב%B, %Y" msgstr "%A, ה־%e ב%B, %Y"
#: ../js/ui/calendar.js:804
#: ../js/ui/calendar.js:807 #: ../js/ui/calendar.js:807
msgid "Today" msgid "Today"
msgstr "היום" msgstr "היום"
#: ../js/ui/calendar.js:808
#: ../js/ui/calendar.js:811 #: ../js/ui/calendar.js:811
msgid "Tomorrow" msgid "Tomorrow"
msgstr "מחר" msgstr "מחר"
#: ../js/ui/calendar.js:819
#: ../js/ui/calendar.js:822 #: ../js/ui/calendar.js:822
msgid "This week" msgid "This week"
msgstr "השבוע" msgstr "השבוע"
#: ../js/ui/calendar.js:827
#: ../js/ui/calendar.js:830 #: ../js/ui/calendar.js:830
msgid "Next week" msgid "Next week"
msgstr "בשבוע הבא" msgstr "בשבוע הבא"
#: ../js/ui/components/automountManager.js:90
#: ../js/ui/components/automountManager.js:91 #: ../js/ui/components/automountManager.js:91
msgid "External drive connected" msgid "External drive connected"
msgstr "חובר כונן חיצוני" msgstr "חובר כונן חיצוני"
#: ../js/ui/components/automountManager.js:101
#: ../js/ui/components/automountManager.js:102 #: ../js/ui/components/automountManager.js:102
msgid "External drive disconnected" msgid "External drive disconnected"
msgstr "נותק כונן חיצוני" msgstr "נותק כונן חיצוני"
@ -717,77 +718,77 @@ msgid "Mute"
msgid "Mute" msgid "Mute"
msgstr "השתקה" msgstr "השתקה"
#: ../js/ui/components/telepathyClient.js:955 #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:958 #: ../js/ui/components/telepathyClient.js:958
msgid "%H%M" msgid "%H%M"
msgstr "%H:%M" msgstr "%H:%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#: ../js/ui/components/telepathyClient.js:962 #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:965 #: ../js/ui/components/telepathyClient.js:965
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "אתמול, %H\\u2236%M" msgstr "אתמול, %H\\u2236%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#: ../js/ui/components/telepathyClient.js:969 #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:972 #: ../js/ui/components/telepathyClient.js:972
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H:%M" msgstr "%A, %H:%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#: ../js/ui/components/telepathyClient.js:976 #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:979 #: ../js/ui/components/telepathyClient.js:979
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d ב%B, %H:%M" msgstr "%d ב%B, %H:%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#: ../js/ui/components/telepathyClient.js:982 #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:985 #: ../js/ui/components/telepathyClient.js:985
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d ב%B, %H:%M" msgstr "%d ב%B, %H:%M"
#: ../js/ui/components/telepathyClient.js:991 #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:994 #: ../js/ui/components/telepathyClient.js:994
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l:%M %p" msgstr "%l:%M %p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#: ../js/ui/components/telepathyClient.js:998 #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1001 #: ../js/ui/components/telepathyClient.js:1001
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "אתמול, %l\\u2236%M %p" msgstr "אתמול, %l\\u2236%M %p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#: ../js/ui/components/telepathyClient.js:1005 #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1008 #: ../js/ui/components/telepathyClient.js:1008
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%l:%M %p" msgstr "%l:%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#: ../js/ui/components/telepathyClient.js:1012 #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1015 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d ב%B, %H:%M" msgstr "%d ב%B, %H:%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#: ../js/ui/components/telepathyClient.js:1018 #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1021 #: ../js/ui/components/telepathyClient.js:1021
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d ב%B %Y, %l\\u2236%M %p" msgstr "%d ב%B %Y, %l\\u2236%M %p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#: ../js/ui/components/telepathyClient.js:1051 #. IM name. */
#: ../js/ui/components/telepathyClient.js:1054 #: ../js/ui/components/telepathyClient.js:1054
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "השם של %s הוחלף ל־%s" msgstr "השם של %s הוחלף ל־%s"
#. translators: argument is a room name like #. translators: argument is a room name like
#: ../js/ui/components/telepathyClient.js:1154 #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1158 #: ../js/ui/components/telepathyClient.js:1158
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
@ -795,38 +796,38 @@ msgstr "הזמנה ל־%s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#: ../js/ui/components/telepathyClient.js:1162 #. * for example. */
#: ../js/ui/components/telepathyClient.js:1166 #: ../js/ui/components/telepathyClient.js:1166
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "הוזמנת על ידי %s להצטרף אל %s" msgstr "הוזמנת על ידי %s להצטרף אל %s"
#: ../js/ui/components/telepathyClient.js:1164
#: ../js/ui/components/telepathyClient.js:1199 #: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1233 #: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1290 #: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1295 #: ../js/ui/components/telepathyClient.js:1295
msgid "Decline" msgid "Decline"
msgstr "דחייה" msgstr "דחייה"
#: ../js/ui/components/telepathyClient.js:1170
#: ../js/ui/components/telepathyClient.js:1239 #: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1295 #: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1300 #: ../js/ui/components/telepathyClient.js:1300
msgid "Accept" msgid "Accept"
msgstr "אישור" msgstr "אישור"
#: ../js/ui/components/telepathyClient.js:1189 #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1193 #: ../js/ui/components/telepathyClient.js:1193
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "שיחת וידאו מאת %s" msgstr "שיחת וידאו מאת %s"
#: ../js/ui/components/telepathyClient.js:1192 #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1196 #: ../js/ui/components/telepathyClient.js:1196
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "שיחה מאת %s" msgstr "שיחה מאת %s"
#: ../js/ui/components/telepathyClient.js:1206 #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1210 #: ../js/ui/components/telepathyClient.js:1210
msgid "Answer" msgid "Answer"
msgstr "מענה" msgstr "מענה"
@ -835,108 +836,108 @@ msgstr "מענה"
#. * the contact's alias and the second one is the #. * the contact's alias and the second one is the
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#: ../js/ui/components/telepathyClient.js:1227 #. */
#: ../js/ui/components/telepathyClient.js:1231 #: ../js/ui/components/telepathyClient.js:1231
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s שולח/ת אליך %s" msgstr "%s שולח/ת אליך %s"
#: ../js/ui/components/telepathyClient.js:1256 #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1260 #: ../js/ui/components/telepathyClient.js:1260
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון" msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון"
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1346 #: ../js/ui/components/telepathyClient.js:1346
msgid "Network error" msgid "Network error"
msgstr "שגיאת רשת" msgstr "שגיאת רשת"
#: ../js/ui/components/telepathyClient.js:1343
#: ../js/ui/components/telepathyClient.js:1348 #: ../js/ui/components/telepathyClient.js:1348
msgid "Authentication failed" msgid "Authentication failed"
msgstr "האימות נכשל" msgstr "האימות נכשל"
#: ../js/ui/components/telepathyClient.js:1345
#: ../js/ui/components/telepathyClient.js:1350 #: ../js/ui/components/telepathyClient.js:1350
msgid "Encryption error" msgid "Encryption error"
msgstr "שגיאת הצפנה" msgstr "שגיאת הצפנה"
#: ../js/ui/components/telepathyClient.js:1347
#: ../js/ui/components/telepathyClient.js:1352 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "לא סופק אישור" msgstr "לא סופק אישור"
#: ../js/ui/components/telepathyClient.js:1349
#: ../js/ui/components/telepathyClient.js:1354 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "האישור אינו מהימן" msgstr "האישור אינו מהימן"
#: ../js/ui/components/telepathyClient.js:1351
#: ../js/ui/components/telepathyClient.js:1356 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate expired" msgid "Certificate expired"
msgstr "האישור פג" msgstr "האישור פג"
#: ../js/ui/components/telepathyClient.js:1353
#: ../js/ui/components/telepathyClient.js:1358 #: ../js/ui/components/telepathyClient.js:1358
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "האישור לא מופעל" msgstr "האישור לא מופעל"
#: ../js/ui/components/telepathyClient.js:1355
#: ../js/ui/components/telepathyClient.js:1360 #: ../js/ui/components/telepathyClient.js:1360
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "שם המארח באישור אינו תואם" msgstr "שם המארח באישור אינו תואם"
#: ../js/ui/components/telepathyClient.js:1357
#: ../js/ui/components/telepathyClient.js:1362 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "חוסר התאמה בטביעת האצבע של האישור" msgstr "חוסר התאמה בטביעת האצבע של האישור"
#: ../js/ui/components/telepathyClient.js:1359
#: ../js/ui/components/telepathyClient.js:1364 #: ../js/ui/components/telepathyClient.js:1364
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "אישור בחתימה עצמית" msgstr "אישור בחתימה עצמית"
#: ../js/ui/components/telepathyClient.js:1361
#: ../js/ui/components/telepathyClient.js:1366 #: ../js/ui/components/telepathyClient.js:1366
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "המצב הוגדר ל'מנותק'" msgstr "המצב הוגדר ל'מנותק'"
#: ../js/ui/components/telepathyClient.js:1363
#: ../js/ui/components/telepathyClient.js:1368 #: ../js/ui/components/telepathyClient.js:1368
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "ההצפנה אינה זמינה" msgstr "ההצפנה אינה זמינה"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1370 #: ../js/ui/components/telepathyClient.js:1370
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "האישור אינו תקף" msgstr "האישור אינו תקף"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1372 #: ../js/ui/components/telepathyClient.js:1372
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "ההתחברות נשללה" msgstr "ההתחברות נשללה"
#: ../js/ui/components/telepathyClient.js:1369
#: ../js/ui/components/telepathyClient.js:1374 #: ../js/ui/components/telepathyClient.js:1374
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "לא ניתן להפעיל את החיבור" msgstr "לא ניתן להפעיל את החיבור"
#: ../js/ui/components/telepathyClient.js:1371
#: ../js/ui/components/telepathyClient.js:1376 #: ../js/ui/components/telepathyClient.js:1376
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "החיבור אבד" msgstr "החיבור אבד"
#: ../js/ui/components/telepathyClient.js:1373
#: ../js/ui/components/telepathyClient.js:1378 #: ../js/ui/components/telepathyClient.js:1378
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "חשבון זה כבר מחובר לשרת" msgstr "חשבון זה כבר מחובר לשרת"
#: ../js/ui/components/telepathyClient.js:1375
#: ../js/ui/components/telepathyClient.js:1380 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב" msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב"
#: ../js/ui/components/telepathyClient.js:1377
#: ../js/ui/components/telepathyClient.js:1382 #: ../js/ui/components/telepathyClient.js:1382
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "החשבון כבר קיים בשרת" msgstr "החשבון כבר קיים בשרת"
#: ../js/ui/components/telepathyClient.js:1379
#: ../js/ui/components/telepathyClient.js:1384 #: ../js/ui/components/telepathyClient.js:1384
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור" msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור"
#: ../js/ui/components/telepathyClient.js:1381
#: ../js/ui/components/telepathyClient.js:1386 #: ../js/ui/components/telepathyClient.js:1386
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "האישור נשלל" msgstr "האישור נשלל"
#: ../js/ui/components/telepathyClient.js:1383
#: ../js/ui/components/telepathyClient.js:1388 #: ../js/ui/components/telepathyClient.js:1388
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה" msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה"
#: ../js/ui/components/telepathyClient.js:1385
#: ../js/ui/components/telepathyClient.js:1390 #: ../js/ui/components/telepathyClient.js:1390
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
@ -944,22 +945,22 @@ msgstr ""
msgstr "" msgstr ""
"אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי " "אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי "
"ספריית ההצפנה" "ספריית ההצפנה"
#: ../js/ui/components/telepathyClient.js:1387
#: ../js/ui/components/telepathyClient.js:1392 #: ../js/ui/components/telepathyClient.js:1392
msgid "Internal error" msgid "Internal error"
msgstr "שגיאה פנימית" msgstr "שגיאה פנימית"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#: ../js/ui/components/telepathyClient.js:1397 #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1402 #: ../js/ui/components/telepathyClient.js:1402
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "לא ניתן להתחבר אל %s" msgstr "לא ניתן להתחבר אל %s"
#: ../js/ui/components/telepathyClient.js:1402
#: ../js/ui/components/telepathyClient.js:1407 #: ../js/ui/components/telepathyClient.js:1407
msgid "View account" msgid "View account"
msgstr "צפייה בחשבון" msgstr "צפייה בחשבון"
#: ../js/ui/components/telepathyClient.js:1439
#: ../js/ui/components/telepathyClient.js:1444 #: ../js/ui/components/telepathyClient.js:1444
msgid "Unknown reason" msgid "Unknown reason"
msgstr "סיבה לא ידועה" msgstr "סיבה לא ידועה"
@ -975,22 +976,22 @@ msgstr "הצגת יישומים"
#: ../js/ui/dash.js:445 #: ../js/ui/dash.js:445
msgid "Dash" msgid "Dash"
msgstr "חלונית" msgstr "חלונית"
#: ../js/ui/dateMenu.js:91
#: ../js/ui/dateMenu.js:97 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "פתיחת היומן" msgstr "פתיחת היומן"
#: ../js/ui/dateMenu.js:95
#: ../js/ui/dateMenu.js:101 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "פתיחת השעונים" msgstr "פתיחת השעונים"
#: ../js/ui/dateMenu.js:102
#: ../js/ui/dateMenu.js:108 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "הגדרות תאריך ושעה" msgstr "הגדרות תאריך ושעה"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#: ../js/ui/dateMenu.js:192 #. */
#: ../js/ui/dateMenu.js:205 #: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A ה־%e ב%B, %Y" msgstr "%A ה־%e ב%B, %Y"
@ -1109,13 +1110,13 @@ msgid "Other users are logged in."
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "משתמשים נוספים מחוברים." msgstr "משתמשים נוספים מחוברים."
#: ../js/ui/endSessionDialog.js:618 #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:619 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (מרוחק)" msgstr "%s (מרוחק)"
#: ../js/ui/endSessionDialog.js:621 #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:622 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
@ -1129,7 +1130,7 @@ msgstr "התקנה"
#, javascript-format #, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?" msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335 #: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
msgid "Keyboard" msgid "Keyboard"
msgstr "מקלדת" msgstr "מקלדת"
@ -1217,17 +1218,17 @@ msgstr "אין הודעות"
#: ../js/ui/messageTray.js:1964 #: ../js/ui/messageTray.js:1964
msgid "Message Tray" msgid "Message Tray"
msgstr "אזור דיווח ההודעות" msgstr "אזור דיווח ההודעות"
#: ../js/ui/messageTray.js:2962
#: ../js/ui/messageTray.js:2967 #: ../js/ui/messageTray.js:2967
msgid "System Information" msgid "System Information"
msgstr "פרטי המערכת" msgstr "פרטי המערכת"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:425
#: ../js/ui/notificationDaemon.js:516 ../src/shell-app.c:425 #: ../js/ui/notificationDaemon.js:516 ../src/shell-app.c:425
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "לא ידוע" msgstr "לא ידוע"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151 # javascript-format
#: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151 #: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
@ -1260,7 +1261,7 @@ msgstr "יציאה"
#: ../js/ui/panel.js:568 #: ../js/ui/panel.js:568
msgid "Activities" msgid "Activities"
msgstr "פעילויות" msgstr "פעילויות"
#: ../js/ui/panel.js:914
#: ../js/ui/panel.js:915 #: ../js/ui/panel.js:915
msgid "Top Bar" msgid "Top Bar"
msgstr "הסרגל העליון" msgstr "הסרגל העליון"
@ -1272,7 +1273,7 @@ msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:74 #: ../js/ui/runDialog.js:74
msgid "Enter a Command" msgid "Enter a Command"
msgstr "נא להזין פקודה" msgstr "נא להזין פקודה"
#: ../js/ui/runDialog.js:114
#: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117 #: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
msgid "Close" msgid "Close"
msgstr "סגירה" msgstr "סגירה"
@ -1290,7 +1291,7 @@ msgid_plural "%d new notifications"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "התרעה חדשה אחת" msgstr[0] "התרעה חדשה אחת"
msgstr[1] "%d התרעות חדשות" msgstr[1] "%d התרעות חדשות"
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "נעילה" msgstr "נעילה"
@ -1298,19 +1299,19 @@ msgstr "נעילה"
#: ../js/ui/screenShield.js:708 #: ../js/ui/screenShield.js:708
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "על GNOME לנעול את המסך" msgstr "על GNOME לנעול את המסך"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1309
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1312 #: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "לא ניתן לנעול" msgstr "לא ניתן לנעול"
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1310
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1313 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "הנעילה נחסמה ע״י היישום" msgstr "הנעילה נחסמה ע״י היישום"
#: ../js/ui/search.js:603
#: ../js/ui/search.js:606 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "בחיפוש…" msgstr "בחיפוש…"
#: ../js/ui/search.js:649
#: ../js/ui/search.js:652 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "אין תוצאות." msgstr "אין תוצאות."
@ -1374,11 +1375,11 @@ msgstr "מקשים קופצים"
#: ../js/ui/status/accessibility.js:84 #: ../js/ui/status/accessibility.js:84
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "מקשי עכבר" msgstr "מקשי עכבר"
#: ../js/ui/status/accessibility.js:143
#: ../js/ui/status/accessibility.js:144 #: ../js/ui/status/accessibility.js:144
msgid "High Contrast" msgid "High Contrast"
msgstr "ניגודיות גבוהה" msgstr "ניגודיות גבוהה"
#: ../js/ui/status/accessibility.js:192
#: ../js/ui/status/accessibility.js:193 #: ../js/ui/status/accessibility.js:193
msgid "Large Text" msgid "Large Text"
msgstr "טקסט גדול" msgstr "טקסט גדול"
@ -1388,8 +1389,8 @@ msgstr "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85 #: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
#: ../js/ui/status/rfkill.js:105 #: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:114
msgid "Turn Off" msgid "Turn Off"
msgstr "כיבוי" msgstr "כיבוי"
@ -1449,37 +1450,37 @@ msgstr "מחובר"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */ #. under NetworkManager's control (and thus cannot be used in the menu) */
msgid "unmanaged" #: ../js/ui/status/network.js:426
msgid "Unmanaged" msgid "Unmanaged"
msgstr "לא מנוהל" msgstr "לא מנוהל"
msgid "disconnecting..." #: ../js/ui/status/network.js:428
msgstr "בהליכי ניתוק..." msgid "Disconnecting"
msgstr "בהליכי ניתוק" msgstr "בהליכי ניתוק"
#: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1362
msgid "connecting..." #: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1254
msgstr "בהתחברות..." msgid "Connecting"
msgstr "בהתחברות" msgstr "בהתחברות"
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1365 #. Translators: this is for network connections that require some kind of key or password */
msgid "authentication required" #: ../js/ui/status/network.js:437
msgid "Authentication required" msgid "Authentication required"
msgstr "נדרש אימות" msgstr "נדרש אימות"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */ #. module, which is missing */
msgid "firmware missing" #: ../js/ui/status/network.js:445
msgid "Firmware missing" msgid "Firmware missing"
msgstr "הקושחה חסרה" msgstr "הקושחה חסרה"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */ #. is disabled by rfkill, or it has no coverage */
msgid "unavailable" #: ../js/ui/status/network.js:449
msgid "Unavailable" msgid "Unavailable"
msgstr "לא זמין" msgstr "לא זמין"
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1367
msgid "connection failed" #: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1646
msgstr "החיבור נכשל" msgid "Connection failed"
msgstr "ההתחברות נכשלה" msgstr "ההתחברות נכשלה"
#: ../js/ui/status/network.js:467 #: ../js/ui/status/network.js:467
@ -1533,7 +1534,7 @@ msgstr "בחירת רשת"
#: ../js/ui/status/network.js:845 #: ../js/ui/status/network.js:845
msgid "No Networks" msgid "No Networks"
msgstr "אין רשתות" msgstr "אין רשתות"
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "שימוש במתג של החומרה לכיבוי" msgstr "שימוש במתג של החומרה לכיבוי"
@ -1553,11 +1554,20 @@ msgstr "הפעלה"
#: ../js/ui/status/network.js:1251 #: ../js/ui/status/network.js:1251
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "נקודה חמה פעילה" msgstr "נקודה חמה פעילה"
#: ../js/ui/status/network.js:1254
msgid "Connecting" #: ../js/ui/status/network.js:1362
msgstr "מתחבר" msgid "connecting..."
msgstr "בהתחברות..." msgstr "בהתחברות..."
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88
#. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1365
msgid "authentication required"
msgstr "נדרש אימות"
#: ../js/ui/status/network.js:1367
msgid "connection failed"
msgstr "ההתחברות נכשלה"
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
msgid "Network Settings" msgid "Network Settings"
msgstr "הגדרות הרשת" msgstr "הגדרות הרשת"
@ -1573,10 +1583,6 @@ msgstr "VPN"
#: ../js/ui/status/network.js:1607 #: ../js/ui/status/network.js:1607
msgid "Network Manager" msgid "Network Manager"
msgstr "מנהל הרשתות" msgstr "מנהל הרשתות"
#: ../js/ui/status/network.js:1646
msgid "Connection failed"
msgstr "ההתחברות נכשל"
#: ../js/ui/status/network.js:1647 #: ../js/ui/status/network.js:1647
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
@ -1594,14 +1600,14 @@ msgid "Estimating…"
msgid "Estimating…" msgid "Estimating…"
msgstr "מתבצע שערוך…" msgstr "מתבצע שערוך…"
#, c-format #: ../js/ui/status/power.js:86
#, javascript-format #, javascript-format
msgstr "%d\\u2236%02d נותרו (%d%%)" msgid "%d%02d Remaining (%d%%)"
msgstr "%d%02d נותרו (%d%%)" msgstr "%d%02d נותרו (%d%%)"
#, c-format #: ../js/ui/status/power.js:91
#, javascript-format #, javascript-format
msgstr "%d\\u2236%02d עד לטעינה מלאה (%d%%)" msgid "%d%02d Until Full (%d%%)"
msgstr "%d:%02d עד לטעינה מלאה (%d%%)" msgstr "%d:%02d עד לטעינה מלאה (%d%%)"
#: ../js/ui/status/power.js:119 #: ../js/ui/status/power.js:119
@ -1611,31 +1617,31 @@ msgstr "אל־פסק"
#: ../js/ui/status/power.js:121 #: ../js/ui/status/power.js:121
msgid "Battery" msgid "Battery"
msgstr "סוללה" msgstr "סוללה"
#: ../js/ui/status/rfkill.js:82
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "מצב טיסה" msgstr "מצב טיסה"
#: ../js/ui/status/rfkill.js:84
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:85
msgid "On" msgid "On"
msgstr "פועל" msgstr "פועל"
#: ../js/ui/status/system.js:314
#: ../js/ui/status/system.js:317 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "החלפת משתמש" msgstr "החלפת משתמש"
#: ../js/ui/status/system.js:319
#: ../js/ui/status/system.js:322 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "יציאה" msgstr "יציאה"
#: ../js/ui/status/system.js:338
#: ../js/ui/status/system.js:341 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "נעילת כיוון" msgstr "נעילת כיוון"
#: ../js/ui/status/system.js:346
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "השהיה" msgstr "השהיה"
#: ../js/ui/status/system.js:349
#: ../js/ui/status/system.js:352 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "כיבוי" msgstr "כיבוי"
@ -1672,29 +1678,69 @@ msgstr "חיפוש"
#, javascript-format #, javascript-format
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "‏„%s” מוכן" msgstr "‏„%s” מוכן"
#: ../js/ui/windowManager.js:56
#: ../js/ui/windowManager.js:57 #: ../js/ui/windowManager.js:57
msgid "Do you want to keep these display settings?" msgid "Do you want to keep these display settings?"
msgstr "האם ברצונך לשמור הגדרות תצוגה אלה?" msgstr "האם ברצונך לשמור הגדרות תצוגה אלה?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#: ../js/ui/windowManager.js:75 #. */
#: ../js/ui/windowManager.js:76 #: ../js/ui/windowManager.js:76
msgid "Revert Settings" msgid "Revert Settings"
msgstr "שחזור הגדרות" msgstr "שחזור הגדרות"
#: ../js/ui/windowManager.js:79
#: ../js/ui/windowManager.js:80 #: ../js/ui/windowManager.js:80
msgid "Keep Changes" msgid "Keep Changes"
msgstr "שמירת שינויים" msgstr "שמירת שינויים"
#: ../js/ui/windowManager.js:97 # javascript-format
#: ../js/ui/windowManager.js:99 #: ../js/ui/windowManager.js:99
#, c-format #, c-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "שינויי הגדרות ישוחזרו בעוד שנייה" msgstr[0] "שינויי הגדרות ישוחזרו בעוד שנייה"
msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות" msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות"
#: ../js/ui/windowMenu.js:33
msgid "Minimize"
msgstr "מזעור"
#: ../js/ui/windowMenu.js:40
msgid "Unmaximize"
msgstr "ביטול הגדלה"
#: ../js/ui/windowMenu.js:44
msgid "Maximize"
msgstr "הגדלה"
#: ../js/ui/windowMenu.js:51
msgid "Move"
msgstr "הזזה"
#: ../js/ui/windowMenu.js:57
msgid "Resize"
msgstr "שינוי גודל"
#: ../js/ui/windowMenu.js:64
msgid "Move Titlebar Onscreen"
msgstr "הזזת שורת הכותרת על המסך"
#: ../js/ui/windowMenu.js:69
msgid "Always on Top"
msgstr "תמיד עליון"
#: ../js/ui/windowMenu.js:86
msgid "Always on Visible Workspace"
msgstr "הצגה בכל מרחבי העבודה"
#: ../js/ui/windowMenu.js:103
msgid "Move to Workspace Up"
msgstr "הזזה למרחב העבודה שמלמעלה"
#: ../js/ui/windowMenu.js:108
msgid "Move to Workspace Down"
msgstr "הזזה למרחב העבודה שמלמטה"
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
@ -1750,10 +1796,16 @@ msgstr "הססמאות אינן תואמות."
#: ../src/shell-keyring-prompt.c:722 #: ../src/shell-keyring-prompt.c:722
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "הססמה לא יכולה להישאר ריקה" msgstr "הססמה לא יכולה להישאר ריקה"
#: ../src/shell-polkit-authentication-agent.c:343
#: ../src/shell-polkit-authentication-agent.c:346 #: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות" msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "calendar:MY"
#~ msgstr "calendar:YM"
#~ msgid "unavailable"
#~ msgstr "לא זמין"
#~ msgctxt "event list time" #~ msgctxt "event list time"
#~ msgid "%H\\u2236%M" #~ msgid "%H\\u2236%M"
@ -2207,9 +2259,6 @@ msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "VPN Connections" #~ msgid "VPN Connections"
#~ msgstr "חיבורי VPN" #~ msgstr "חיבורי VPN"
#~ msgid "Unavailable"
#~ msgstr "לא זמין"
#~ msgid "System Settings" #~ msgid "System Settings"
#~ msgstr "הגדרות המערכת" #~ msgstr "הגדרות המערכת"

367
po/id.po
View File

@ -10,9 +10,9 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-04-05 19:59+0000\n" "POT-Creation-Date: 2014-05-22 07:28+0000\n"
"PO-Revision-Date: 2014-04-09 05:35+0700\n" "PO-Revision-Date: 2014-05-22 16:21+0700\n"
"Last-Translator: Dirgita <dirgitadevina@yahoo.co.id>\n" "Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" "Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n" "Language: id\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Lokalize 1.5\n" "X-Generator: Poedit 1.5.7\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@ -341,25 +341,25 @@ msgstr "Pilih Sesi"
msgid "Not listed?" msgid "Not listed?"
msgstr "Tak masuk daftar?" msgstr "Tak masuk daftar?"
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:616
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(cth., pengguna dari %s)" msgstr "(cth., pengguna dari %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262 #: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280 #: ../js/ui/components/networkAgent.js:280
msgid "Username: " msgid "Username: "
msgstr "Nama pengguna: " msgstr "Nama pengguna: "
#: ../js/gdm/loginDialog.js:920 #: ../js/gdm/loginDialog.js:924
msgid "Login Window" msgid "Login Window"
msgstr "Jendela Log Masuk" msgstr "Jendela Log Masuk"
#: ../js/gdm/util.js:322 #: ../js/gdm/util.js:323
msgid "Authentication error" msgid "Authentication error"
msgstr "Galat otentikasi" msgstr "Galat otentikasi"
#: ../js/gdm/util.js:452 #: ../js/gdm/util.js:453
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(atau gesekkan jari)" msgstr "(atau gesekkan jari)"
@ -376,30 +376,34 @@ msgstr "Tak dapat mengurai perintah:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "Eksekusi \"%s\" gagal:" msgstr "Eksekusi \"%s\" gagal:"
#: ../js/ui/appDisplay.js:636 #: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Aplikasi yang sering dipakai akan muncul di sini" msgstr "Aplikasi yang sering dipakai akan muncul di sini"
#: ../js/ui/appDisplay.js:747 #: ../js/ui/appDisplay.js:751
msgid "Frequent" msgid "Frequent"
msgstr "Sering" msgstr "Sering"
#: ../js/ui/appDisplay.js:754 #: ../js/ui/appDisplay.js:758
msgid "All" msgid "All"
msgstr "Semua" msgstr "Semua"
#: ../js/ui/appDisplay.js:1566 #: ../js/ui/appDisplay.js:1571
msgid "New Window" msgid "New Window"
msgstr "Jendela Baru" msgstr "Jendela Baru"
#: ../js/ui/appDisplay.js:1588 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Hapus dari Favorit" msgstr "Hapus dari Favorit"
#: ../js/ui/appDisplay.js:1594 #: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Tambah ke Favorit" msgstr "Tambah ke Favorit"
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "Tampilkan Rincian"
#: ../js/ui/appFavorites.js:87 #: ../js/ui/appFavorites.js:87
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
@ -410,8 +414,8 @@ msgstr "%s telah ditambahkan ke favorit Anda."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s telah dihapus dari favorit Anda." msgstr "%s telah dihapus dari favorit Anda."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
#: ../js/ui/status/system.js:334 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Pengaturan" msgstr "Pengaturan"
@ -422,14 +426,14 @@ msgstr "Ubah Latar…"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:64 #: ../js/ui/calendar.js:67
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Sepanjang Hari" msgstr "Sepanjang Hari"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:70 #: ../js/ui/calendar.js:73
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
@ -437,7 +441,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:79 #: ../js/ui/calendar.js:82
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -447,43 +451,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:110 #: ../js/ui/calendar.js:113
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "M" msgstr "M"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:112 #: ../js/ui/calendar.js:115
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:114 #: ../js/ui/calendar.js:117
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:116 #: ../js/ui/calendar.js:119
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "R" msgstr "R"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:118 #: ../js/ui/calendar.js:121
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "K" msgstr "K"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:120 #: ../js/ui/calendar.js:123
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "J" msgstr "J"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:122 #: ../js/ui/calendar.js:125
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
@ -494,97 +498,93 @@ msgstr "S"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:135 #: ../js/ui/calendar.js:138
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Min" msgstr "Min"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:137 #: ../js/ui/calendar.js:140
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Sen" msgstr "Sen"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:139 #: ../js/ui/calendar.js:142
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "Sel" msgstr "Sel"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:141 #: ../js/ui/calendar.js:144
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "Rab" msgstr "Rab"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:143 #: ../js/ui/calendar.js:146
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "Kam" msgstr "Kam"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:145 #: ../js/ui/calendar.js:148
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "Jum" msgstr "Jum"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:147 #: ../js/ui/calendar.js:150
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "Sab" msgstr "Sab"
#: ../js/ui/calendar.js:390 #: ../js/ui/calendar.js:453
msgid "calendar:MY"
msgstr "calendar:MY"
#: ../js/ui/calendar.js:450
msgid "Previous month" msgid "Previous month"
msgstr "Bulan sebelumnya" msgstr "Bulan sebelumnya"
#: ../js/ui/calendar.js:460 #: ../js/ui/calendar.js:463
msgid "Next month" msgid "Next month"
msgstr "Bulan selanjutnya" msgstr "Bulan selanjutnya"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:772 #: ../js/ui/calendar.js:775
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Tak Ada Jadwal" msgstr "Tak Ada Jadwal"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:790 #: ../js/ui/calendar.js:793
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:793 #: ../js/ui/calendar.js:796
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d %B %Y" msgstr "%A, %d %B %Y"
#: ../js/ui/calendar.js:804 #: ../js/ui/calendar.js:807
msgid "Today" msgid "Today"
msgstr "Hari ini" msgstr "Hari ini"
#: ../js/ui/calendar.js:808 #: ../js/ui/calendar.js:811
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Besok" msgstr "Besok"
#: ../js/ui/calendar.js:819 #: ../js/ui/calendar.js:822
msgid "This week" msgid "This week"
msgstr "Minggu ini" msgstr "Minggu ini"
#: ../js/ui/calendar.js:827 #: ../js/ui/calendar.js:830
msgid "Next week" msgid "Next week"
msgstr "Minggu depan" msgstr "Minggu depan"
#: ../js/ui/components/automountManager.js:90 #: ../js/ui/components/automountManager.js:91
msgid "External drive connected" msgid "External drive connected"
msgstr "Drive eksternal tersambung" msgstr "Drive eksternal tersambung"
#: ../js/ui/components/automountManager.js:101 #: ../js/ui/components/automountManager.js:102
msgid "External drive disconnected" msgid "External drive disconnected"
msgstr "Drive eksternal terputus" msgstr "Drive eksternal terputus"
@ -729,77 +729,77 @@ msgid "Mute"
msgstr "Bisu" msgstr "Bisu"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:955 #: ../js/ui/components/telepathyClient.js:958
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:962 #: ../js/ui/components/telepathyClient.js:965
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Kemarin, %H:%M" msgstr "Kemarin, %H:%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:969 #: ../js/ui/components/telepathyClient.js:972
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:976 #: ../js/ui/components/telepathyClient.js:979
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d %B, %H%M" msgstr "%d %B, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:982 #: ../js/ui/components/telepathyClient.js:985
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H%M" msgstr "%d %B %Y, %H%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:991 #: ../js/ui/components/telepathyClient.js:994
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:998 #: ../js/ui/components/telepathyClient.js:1001
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Kemarin, %l%M %p" msgstr "Kemarin, %l%M %p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1005 #: ../js/ui/components/telepathyClient.js:1008
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1012 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d %B, %l%M %p" msgstr "%d %B, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1018 #: ../js/ui/components/telepathyClient.js:1021
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %l%M %p" msgstr "%d %B %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1051 #: ../js/ui/components/telepathyClient.js:1054
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s sekarang dikenal sebagai %s" msgstr "%s sekarang dikenal sebagai %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1154 #: ../js/ui/components/telepathyClient.js:1158
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Undangan ke %s" msgstr "Undangan ke %s"
@ -807,38 +807,38 @@ msgstr "Undangan ke %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1162 #: ../js/ui/components/telepathyClient.js:1166
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s mengundang Anda untuk bergabung dengan %s" msgstr "%s mengundang Anda untuk bergabung dengan %s"
#: ../js/ui/components/telepathyClient.js:1164 #: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1199 #: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1233 #: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1295
msgid "Decline" msgid "Decline"
msgstr "Tolak" msgstr "Tolak"
#: ../js/ui/components/telepathyClient.js:1170 #: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1239 #: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1296 #: ../js/ui/components/telepathyClient.js:1300
msgid "Accept" msgid "Accept"
msgstr "Terima" msgstr "Terima"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1189 #: ../js/ui/components/telepathyClient.js:1193
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Panggilan video dari %s" msgstr "Panggilan video dari %s"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1192 #: ../js/ui/components/telepathyClient.js:1196
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Panggilan dari %s" msgstr "Panggilan dari %s"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1206 #: ../js/ui/components/telepathyClient.js:1210
msgid "Answer" msgid "Answer"
msgstr "Jawab" msgstr "Jawab"
@ -847,111 +847,111 @@ msgstr "Jawab"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1227 #: ../js/ui/components/telepathyClient.js:1231
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s sedang mengirimi Anda %s" msgstr "%s sedang mengirimi Anda %s"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1256 #: ../js/ui/components/telepathyClient.js:1260
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s ingin minta izin melihat Anda ketika Anda daring" msgstr "%s ingin minta izin melihat Anda ketika Anda daring"
#: ../js/ui/components/telepathyClient.js:1342 #: ../js/ui/components/telepathyClient.js:1346
msgid "Network error" msgid "Network error"
msgstr "Galat jaringan" msgstr "Galat jaringan"
#: ../js/ui/components/telepathyClient.js:1344 #: ../js/ui/components/telepathyClient.js:1348
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Otentikasi gagal" msgstr "Otentikasi gagal"
#: ../js/ui/components/telepathyClient.js:1346 #: ../js/ui/components/telepathyClient.js:1350
msgid "Encryption error" msgid "Encryption error"
msgstr "Galat enkripsi" msgstr "Galat enkripsi"
#: ../js/ui/components/telepathyClient.js:1348 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Sertifikat tidak disediakan" msgstr "Sertifikat tidak disediakan"
#: ../js/ui/components/telepathyClient.js:1350 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Sertifikat tidak dipercaya" msgstr "Sertifikat tidak dipercaya"
#: ../js/ui/components/telepathyClient.js:1352 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Sertifikat kadaluarsa" msgstr "Sertifikat kadaluarsa"
#: ../js/ui/components/telepathyClient.js:1354 #: ../js/ui/components/telepathyClient.js:1358
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Sertifikat tidak diaktifkan" msgstr "Sertifikat tidak diaktifkan"
#: ../js/ui/components/telepathyClient.js:1356 #: ../js/ui/components/telepathyClient.js:1360
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Nama host sertifikat tidak cocok" msgstr "Nama host sertifikat tidak cocok"
#: ../js/ui/components/telepathyClient.js:1358 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Sidik jari sertifikat tidak cocok" msgstr "Sidik jari sertifikat tidak cocok"
#: ../js/ui/components/telepathyClient.js:1360 #: ../js/ui/components/telepathyClient.js:1364
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Sertifikat ditandatangani sendiri" msgstr "Sertifikat ditandatangani sendiri"
#: ../js/ui/components/telepathyClient.js:1362 #: ../js/ui/components/telepathyClient.js:1366
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Status diatur ke luring" msgstr "Status diatur ke luring"
#: ../js/ui/components/telepathyClient.js:1364 #: ../js/ui/components/telepathyClient.js:1368
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Enkripsi tidak tersedia" msgstr "Enkripsi tidak tersedia"
#: ../js/ui/components/telepathyClient.js:1366 #: ../js/ui/components/telepathyClient.js:1370
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Sertifikat tidak valid" msgstr "Sertifikat tidak valid"
#: ../js/ui/components/telepathyClient.js:1368 #: ../js/ui/components/telepathyClient.js:1372
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Koneksi telah ditolak" msgstr "Koneksi telah ditolak"
#: ../js/ui/components/telepathyClient.js:1370 #: ../js/ui/components/telepathyClient.js:1374
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Koneksi tak dapat dijalin" msgstr "Koneksi tak dapat dijalin"
#: ../js/ui/components/telepathyClient.js:1372 #: ../js/ui/components/telepathyClient.js:1376
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Koneksi telah terputus" msgstr "Koneksi telah terputus"
#: ../js/ui/components/telepathyClient.js:1374 #: ../js/ui/components/telepathyClient.js:1378
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Akun ini telah tersambung pada server" msgstr "Akun ini telah tersambung pada server"
#: ../js/ui/components/telepathyClient.js:1376 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "" msgstr ""
"Koneksi telah digantikan oleh koneksi baru memakai sumberdaya yang sama" "Koneksi telah digantikan oleh koneksi baru memakai sumberdaya yang sama"
#: ../js/ui/components/telepathyClient.js:1378 #: ../js/ui/components/telepathyClient.js:1382
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Akun ini sudah ada di server" msgstr "Akun ini sudah ada di server"
#: ../js/ui/components/telepathyClient.js:1380 #: ../js/ui/components/telepathyClient.js:1384
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Server kini terlalu sibuk untuk menangani koneksi" msgstr "Server kini terlalu sibuk untuk menangani koneksi"
#: ../js/ui/components/telepathyClient.js:1382 #: ../js/ui/components/telepathyClient.js:1386
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Sertifikat telah dicabut" msgstr "Sertifikat telah dicabut"
#: ../js/ui/components/telepathyClient.js:1384 #: ../js/ui/components/telepathyClient.js:1388
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"Sertifikat memakai algorima cipher yang tak aman atau lemah secara " "Sertifikat memakai algorima cipher yang tak aman atau lemah secara "
"kriptografi" "kriptografi"
#: ../js/ui/components/telepathyClient.js:1386 #: ../js/ui/components/telepathyClient.js:1390
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -959,22 +959,22 @@ msgstr ""
"Panjang sertifikat server, atau kedalaman rantai sertifikat server, " "Panjang sertifikat server, atau kedalaman rantai sertifikat server, "
"melampaui batas yang diberlakukan oleh pustaka kriptografi" "melampaui batas yang diberlakukan oleh pustaka kriptografi"
#: ../js/ui/components/telepathyClient.js:1388 #: ../js/ui/components/telepathyClient.js:1392
msgid "Internal error" msgid "Internal error"
msgstr "Galat internal" msgstr "Galat internal"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1402
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Tak bisa menyambung ke %s" msgstr "Tak bisa menyambung ke %s"
#: ../js/ui/components/telepathyClient.js:1403 #: ../js/ui/components/telepathyClient.js:1407
msgid "View account" msgid "View account"
msgstr "Tilik akun" msgstr "Tilik akun"
#: ../js/ui/components/telepathyClient.js:1440 #: ../js/ui/components/telepathyClient.js:1444
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Alasan yang tidak diketahui" msgstr "Alasan yang tidak diketahui"
@ -990,22 +990,22 @@ msgstr "Tampilkan Aplikasi"
msgid "Dash" msgid "Dash"
msgstr "Dash" msgstr "Dash"
#: ../js/ui/dateMenu.js:91 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Buka Kalender" msgstr "Buka Kalender"
#: ../js/ui/dateMenu.js:95 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Buka Jam" msgstr "Buka Jam"
#: ../js/ui/dateMenu.js:102 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Pengaturan Waktu & Tanggal" msgstr "Pengaturan Waktu & Tanggal"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:192 #: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y" msgstr "%A, %e %B %Y"
@ -1122,13 +1122,13 @@ msgid "Other users are logged in."
msgstr "Pengguna lain sedang log masuk." msgstr "Pengguna lain sedang log masuk."
#. Translators: Remote here refers to a remote session, like a ssh login */ #. Translators: Remote here refers to a remote session, like a ssh login */
#: ../js/ui/endSessionDialog.js:618 #: ../js/ui/endSessionDialog.js:619
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (jarak jauh)" msgstr "%s (jarak jauh)"
#. Translators: Console here refers to a tty like a VT console */ #. Translators: Console here refers to a tty like a VT console */
#: ../js/ui/endSessionDialog.js:621 #: ../js/ui/endSessionDialog.js:622
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (konsol)" msgstr "%s (konsol)"
@ -1142,7 +1142,7 @@ msgstr "Pasang"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?" msgstr "Unduh dan pasang \"%s\" dari extensions.gnome.org?"
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335 #: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335
msgid "Keyboard" msgid "Keyboard"
msgstr "Papan Ketik" msgstr "Papan Ketik"
@ -1230,16 +1230,16 @@ msgstr "Tiada Pesan"
msgid "Message Tray" msgid "Message Tray"
msgstr "Baki Pesan" msgstr "Baki Pesan"
#: ../js/ui/messageTray.js:2962 #: ../js/ui/messageTray.js:2967
msgid "System Information" msgid "System Information"
msgstr "Informasi Sistem" msgstr "Informasi Sistem"
#: ../js/ui/notificationDaemon.js:515 ../src/shell-app.c:425 #: ../js/ui/notificationDaemon.js:516 ../src/shell-app.c:425
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Tak dikenal" msgstr "Tak dikenal"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151 #: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
#, javascript-format #, javascript-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1271,7 +1271,7 @@ msgstr "Keluar"
msgid "Activities" msgid "Activities"
msgstr "Aktivitas" msgstr "Aktivitas"
#: ../js/ui/panel.js:914 #: ../js/ui/panel.js:915
msgid "Top Bar" msgid "Top Bar"
msgstr "Bar Atas" msgstr "Bar Atas"
@ -1284,7 +1284,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Ketikkan Perintah" msgstr "Ketikkan Perintah"
#: ../js/ui/runDialog.js:114 #: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:117
msgid "Close" msgid "Close"
msgstr "Tutup" msgstr "Tutup"
@ -1300,7 +1300,7 @@ msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d pemberitahuan baru" msgstr[0] "%d pemberitahuan baru"
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342 #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Kunci" msgstr "Kunci"
@ -1308,19 +1308,19 @@ msgstr "Kunci"
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME perlu mengunci layar" msgstr "GNOME perlu mengunci layar"
#: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1309 #: ../js/ui/screenShield.js:835 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Tak bisa mengunci" msgstr "Tak bisa mengunci"
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1310 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi" msgstr "Kunci diblokir oleh suatu aplikasi"
#: ../js/ui/search.js:603 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "Mencari…" msgstr "Mencari…"
#: ../js/ui/search.js:649 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "Tak ada yang cocok." msgstr "Tak ada yang cocok."
@ -1384,11 +1384,11 @@ msgstr "Tombol Pantul"
msgid "Mouse Keys" msgid "Mouse Keys"
msgstr "Tombol Tetikus" msgstr "Tombol Tetikus"
#: ../js/ui/status/accessibility.js:143 #: ../js/ui/status/accessibility.js:144
msgid "High Contrast" msgid "High Contrast"
msgstr "Kontras Tinggi" msgstr "Kontras Tinggi"
#: ../js/ui/status/accessibility.js:192 #: ../js/ui/status/accessibility.js:193
msgid "Large Text" msgid "Large Text"
msgstr "Teks Besar" msgstr "Teks Besar"
@ -1398,8 +1398,8 @@ msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234 #: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85 #: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:105 #: ../js/ui/status/rfkill.js:114
msgid "Turn Off" msgid "Turn Off"
msgstr "Matikan" msgstr "Matikan"
@ -1457,37 +1457,37 @@ msgstr "Tersambung"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */ #. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:426 #: ../js/ui/status/network.js:426
msgid "unmanaged" msgid "Unmanaged"
msgstr "tak dikelola" msgstr "Tak Dikelola"
#: ../js/ui/status/network.js:428 #: ../js/ui/status/network.js:428
msgid "disconnecting..." msgid "Disconnecting"
msgstr "memutus..." msgstr "Memutus"
#: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1362 #: ../js/ui/status/network.js:434 ../js/ui/status/network.js:1254
msgid "connecting..." msgid "Connecting"
msgstr "menghubungi..." msgstr "Menyambung"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:437 ../js/ui/status/network.js:1365 #: ../js/ui/status/network.js:437
msgid "authentication required" msgid "Authentication required"
msgstr "diperlukan otentikasi" msgstr "Diperlukan otentikasi"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */ #. module, which is missing */
#: ../js/ui/status/network.js:445 #: ../js/ui/status/network.js:445
msgid "firmware missing" msgid "Firmware missing"
msgstr "firmware hilang" msgstr "Firmware hilang"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */ #. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:449 #: ../js/ui/status/network.js:449
msgid "unavailable" msgid "Unavailable"
msgstr "tidak tersedia" msgstr "Tak tersedia"
#: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1367 #: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1646
msgid "connection failed" msgid "Connection failed"
msgstr "koneksi gagal" msgstr "Koneksi gagal"
#: ../js/ui/status/network.js:467 #: ../js/ui/status/network.js:467
msgid "Wired Settings" msgid "Wired Settings"
@ -1541,7 +1541,7 @@ msgstr "Pilih jaringan"
msgid "No Networks" msgid "No Networks"
msgstr "Tiada Jaringan" msgstr "Tiada Jaringan"
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103 #: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Pakai saklar perangkat keras untuk mematikan" msgstr "Pakai saklar perangkat keras untuk mematikan"
@ -1561,11 +1561,20 @@ msgstr "Nyalakan"
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Hotspot Aktif" msgstr "Hotspot Aktif"
#: ../js/ui/status/network.js:1254 #: ../js/ui/status/network.js:1362
msgid "Connecting" msgid "connecting..."
msgstr "Menyambung" msgstr "menghubungi..."
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88 #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1365
msgid "authentication required"
msgstr "diperlukan otentikasi"
#: ../js/ui/status/network.js:1367
msgid "connection failed"
msgstr "koneksi gagal"
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
msgid "Network Settings" msgid "Network Settings"
msgstr "Pengaturan Jaringan" msgstr "Pengaturan Jaringan"
@ -1581,10 +1590,6 @@ msgstr "VPN"
msgid "Network Manager" msgid "Network Manager"
msgstr "Manajer Jaringan" msgstr "Manajer Jaringan"
#: ../js/ui/status/network.js:1646
msgid "Connection failed"
msgstr "Koneksi gagal"
#: ../js/ui/status/network.js:1647 #: ../js/ui/status/network.js:1647
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivasi koneksi jaringan gagal" msgstr "Aktivasi koneksi jaringan gagal"
@ -1619,31 +1624,31 @@ msgstr "UPS"
msgid "Battery" msgid "Battery"
msgstr "Baterai" msgstr "Baterai"
#: ../js/ui/status/rfkill.js:82 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Mode Pesawat Terbang" msgstr "Mode Pesawat Terbang"
#: ../js/ui/status/rfkill.js:84 #: ../js/ui/status/rfkill.js:85
msgid "On" msgid "On"
msgstr "Nyala" msgstr "Nyala"
#: ../js/ui/status/system.js:314 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Ganti Pengguna" msgstr "Ganti Pengguna"
#: ../js/ui/status/system.js:319 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Keluar" msgstr "Keluar"
#: ../js/ui/status/system.js:338 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Kunci Orientasi" msgstr "Kunci Orientasi"
#: ../js/ui/status/system.js:346 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Suspensi" msgstr "Suspensi"
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Matikan" msgstr "Matikan"
@ -1680,27 +1685,67 @@ msgstr "Cari"
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "'%s' siap" msgstr "'%s' siap"
#: ../js/ui/windowManager.js:56 #: ../js/ui/windowManager.js:57
msgid "Do you want to keep these display settings?" msgid "Do you want to keep these display settings?"
msgstr "Apakah Anda ingin mempertahankan pengaturan tampilan ini?" msgstr "Apakah Anda ingin mempertahankan pengaturan tampilan ini?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. */ #. */
#: ../js/ui/windowManager.js:75 #: ../js/ui/windowManager.js:76
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Balikkan Tatanan" msgstr "Balikkan Tatanan"
#: ../js/ui/windowManager.js:79 #: ../js/ui/windowManager.js:80
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Simpan Perubahan" msgstr "Simpan Perubahan"
#: ../js/ui/windowManager.js:97 #: ../js/ui/windowManager.js:99
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "Perubahan tatanan akan dikembalikan dalam %d detik" msgstr[0] "Perubahan tatanan akan dikembalikan dalam %d detik"
#: ../js/ui/windowMenu.js:33
msgid "Minimize"
msgstr "Minimalkan"
#: ../js/ui/windowMenu.js:40
msgid "Unmaximize"
msgstr "Tak Maksimalkan"
#: ../js/ui/windowMenu.js:44
msgid "Maximize"
msgstr "Maksimalkan"
#: ../js/ui/windowMenu.js:51
msgid "Move"
msgstr "Pindah"
#: ../js/ui/windowMenu.js:57
msgid "Resize"
msgstr "Ubah Ukuran"
#: ../js/ui/windowMenu.js:64
msgid "Move Titlebar Onscreen"
msgstr "Pindahkan Bilah Judul Pada Layar"
#: ../js/ui/windowMenu.js:69
msgid "Always on Top"
msgstr "Selalu di Puncak"
#: ../js/ui/windowMenu.js:86
msgid "Always on Visible Workspace"
msgstr "Selalu pada Ruang Kerja yang Tampak"
#: ../js/ui/windowMenu.js:103
msgid "Move to Workspace Up"
msgstr "Pindah ke Ruang Kerja Atas"
#: ../js/ui/windowMenu.js:108
msgid "Move to Workspace Down"
msgstr "Pindah ke Ruang Kerja Bawah"
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Evolution Kalender" msgstr "Evolution Kalender"
@ -1754,8 +1799,6 @@ msgstr "Sandi tidak cocok."
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "Sandi tidak boleh kosong" msgstr "Sandi tidak boleh kosong"
#: ../src/shell-polkit-authentication-agent.c:343 #: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "Dialog otentikasi ditolak oleh pengguna" msgstr "Dialog otentikasi ditolak oleh pengguna"

View File

@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-04-06 07:54+0000\n" "POT-Creation-Date: 2014-05-27 19:20+0000\n"
"PO-Revision-Date: 2014-04-06 14:15+0100\n" "PO-Revision-Date: 2014-05-31 14:54+0100\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n" "Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italiano <tp@lists.linux.it>\n" "Language-Team: Italiano <tp@lists.linux.it>\n"
"Language: it\n" "Language: it\n"
@ -421,7 +421,7 @@ msgid "%s has been removed from your favorites."
msgstr "%s è stato rimosso dai preferiti." msgstr "%s è stato rimosso dai preferiti."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:809
#: ../js/ui/status/system.js:334 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Impostazioni" msgstr "Impostazioni"
@ -1076,7 +1076,7 @@ msgstr[1] "Il sistema verrà spento automaticamente tra %d secondi."
#: ../js/ui/endSessionDialog.js:93 #: ../js/ui/endSessionDialog.js:93
msgctxt "checkbox" msgctxt "checkbox"
msgid "Install pending software updates" msgid "Install pending software updates"
msgstr "Installa gli aggiornamenti software in sospeso" msgstr "Installare gli aggiornamenti software in sospeso"
#: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113 #: ../js/ui/endSessionDialog.js:96 ../js/ui/endSessionDialog.js:113
msgctxt "button" msgctxt "button"
@ -1130,7 +1130,7 @@ msgstr "Installa e spegni"
#: ../js/ui/endSessionDialog.js:131 #: ../js/ui/endSessionDialog.js:131
msgctxt "checkbox" msgctxt "checkbox"
msgid "Power off after updates are installed" msgid "Power off after updates are installed"
msgstr "Spegne dopo aver installato gli aggiornamenti" msgstr "Spegnere dopo aver installato gli aggiornamenti"
#: ../js/ui/endSessionDialog.js:315 #: ../js/ui/endSessionDialog.js:315
msgid "Running on battery power: please plug in before installing updates." msgid "Running on battery power: please plug in before installing updates."
@ -1167,7 +1167,7 @@ msgstr "Installa"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Scaricare e installare «%s» da extensions.gnome.org?" msgstr "Scaricare e installare «%s» da extensions.gnome.org?"
#: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:335 #: ../js/ui/keyboard.js:641 ../js/ui/status/keyboard.js:339
msgid "Keyboard" msgid "Keyboard"
msgstr "Tastiera" msgstr "Tastiera"
@ -1328,7 +1328,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d nuova notifica" msgstr[0] "%d nuova notifica"
msgstr[1] "%d nuove notifiche" msgstr[1] "%d nuove notifiche"
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342 #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Blocca" msgstr "Blocca"
@ -1344,11 +1344,11 @@ msgstr "Impossibile bloccare"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Il blocco è stato impedito da un'applicazione." msgstr "Il blocco è stato impedito da un'applicazione."
#: ../js/ui/search.js:603 #: ../js/ui/search.js:606
msgid "Searching…" msgid "Searching…"
msgstr "Ricerca…" msgstr "Ricerca…"
#: ../js/ui/search.js:649 #: ../js/ui/search.js:652
msgid "No results." msgid "No results."
msgstr "Nessun risultato." msgstr "Nessun risultato."
@ -1427,8 +1427,8 @@ msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234 #: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85 #: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:105 #: ../js/ui/status/rfkill.js:114
msgid "Turn Off" msgid "Turn Off"
msgstr "Spegni" msgstr "Spegni"
@ -1451,7 +1451,7 @@ msgstr "Non collegato"
msgid "Brightness" msgid "Brightness"
msgstr "Luminosità" msgstr "Luminosità"
#: ../js/ui/status/keyboard.js:403 #: ../js/ui/status/keyboard.js:407
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Mostra disposizione tastiera" msgstr "Mostra disposizione tastiera"
@ -1461,15 +1461,13 @@ msgstr "Posizione"
# (ndt) o disabilitata? # (ndt) o disabilitata?
#: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168 #: ../js/ui/status/location.js:60 ../js/ui/status/location.js:168
#| msgid "Disabled"
msgid "Disable" msgid "Disable"
msgstr "Disabilitato" msgstr "Disabilitato"
# (ndt) o abilitata? # (ndt) o abilitata?
#: ../js/ui/status/location.js:165 #: ../js/ui/status/location.js:165
#| msgid "Enabled"
msgid "Enable" msgid "Enable"
msgstr "Abilitato" msgstr "Abilita"
#: ../js/ui/status/location.js:167 #: ../js/ui/status/location.js:167
msgid "In Use" msgid "In Use"
@ -1543,15 +1541,15 @@ msgstr "Usa come connessione a Internet"
#: ../js/ui/status/network.js:776 #: ../js/ui/status/network.js:776
msgid "Airplane Mode is On" msgid "Airplane Mode is On"
msgstr "La modalità aero è attiva" msgstr "La modalità aereo è attiva"
#: ../js/ui/status/network.js:777 #: ../js/ui/status/network.js:777
msgid "Wi-Fi is disabled when airplane mode is on." msgid "Wi-Fi is disabled when airplane mode is on."
msgstr "Il Wi-Fi è disabilitato quando la modalità aero è attiva" msgstr "Il Wi-Fi è disabilitato quando la modalità aereo è attiva"
#: ../js/ui/status/network.js:778 #: ../js/ui/status/network.js:778
msgid "Turn Off Airplane Mode" msgid "Turn Off Airplane Mode"
msgstr "Disattiva modalità aero" msgstr "Disattiva modalità aereo"
#: ../js/ui/status/network.js:787 #: ../js/ui/status/network.js:787
msgid "Wi-Fi is Off" msgid "Wi-Fi is Off"
@ -1577,7 +1575,7 @@ msgstr "Seleziona una rete"
msgid "No Networks" msgid "No Networks"
msgstr "Nessuna rete" msgstr "Nessuna rete"
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103 #: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Usare l'interruttore hardware per disattivare" msgstr "Usare l'interruttore hardware per disattivare"
@ -1601,7 +1599,7 @@ msgstr "Hotspot attivo"
msgid "Connecting" msgid "Connecting"
msgstr "Connessione" msgstr "Connessione"
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88 #: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
msgid "Network Settings" msgid "Network Settings"
msgstr "Impostazioni rete" msgstr "Impostazioni rete"
@ -1656,31 +1654,31 @@ msgstr "UPS"
msgid "Battery" msgid "Battery"
msgstr "Batteria" msgstr "Batteria"
#: ../js/ui/status/rfkill.js:82 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Modalità aero" msgstr "Modalità aereo"
#: ../js/ui/status/rfkill.js:84 #: ../js/ui/status/rfkill.js:85
msgid "On" msgid "On"
msgstr "On" msgstr "On"
#: ../js/ui/status/system.js:314 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Cambia utente" msgstr "Cambia utente"
#: ../js/ui/status/system.js:319 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Termina sessione" msgstr "Termina sessione"
#: ../js/ui/status/system.js:338 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Blocco orientazione" msgstr "Blocco orientazione"
#: ../js/ui/status/system.js:346 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Sospendi" msgstr "Sospendi"
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Spegni" msgstr "Spegni"

398
po/lt.po

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,7 @@
# Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013. # Juan Diego Martins da Costa Cruz <juan.martins@ifrn.edu.br>, 2013.
# Fábio Nogueira <fnogueira@gnome.org>, 2014. # Fábio Nogueira <fnogueira@gnome.org>, 2014.
# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014. # Rafael Ferreira <rafael.f.f1@gmail.com>, 2013, 2014.
# Georges Basile Stavracas Neto <georges.stavracas@gmail.com>, 2014.
# Enrico Nicoletto <liverig@gmail.com>, 2013, 2014. # Enrico Nicoletto <liverig@gmail.com>, 2013, 2014.
# #
msgid "" msgid ""
@ -20,8 +21,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-04-26 19:26+0000\n" "POT-Creation-Date: 2014-06-03 07:28+0000\n"
"PO-Revision-Date: 2014-04-26 19:12-0300\n" "PO-Revision-Date: 2014-06-03 10:26-0300\n"
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n" "Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@ -29,7 +30,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 1.6.3\n" "X-Generator: Poedit 1.6.5\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
@ -66,13 +67,12 @@ msgid "Window management and application launching"
msgstr "Gerenciamento de janelas e lançador de aplicativos" msgstr "Gerenciamento de janelas e lançador de aplicativos"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1 #: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:155
msgid "GNOME Shell Extension Preferences" msgid "GNOME Shell Extension Preferences"
msgstr "Preferências de extensões do GNOME Shell" msgstr "Preferências de extensões do Shell do GNOME"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2 #: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Configurar extensões do GNOME Shell" msgstr "Configurar extensões do Shell do GNOME"
# Traduções do Xfce e da Microsoft usam compositor --Enrico # Traduções do Xfce e da Microsoft usam compositor --Enrico
#: ../data/gnome-shell-wayland.desktop.in.in.h:1 #: ../data/gnome-shell-wayland.desktop.in.in.h:1
@ -285,47 +285,31 @@ msgstr ""
"GNOME." "GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Arrangement of buttons on the titlebar"
msgstr "Organização dos botões na barra de título"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
"executar o Shell do GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela" "Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "Espaços de trabalho são gerenciados dinamicamente" msgstr "Espaços de trabalho são gerenciados dinamicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Espaços de trabalho apenas no monitor primário" msgstr "Espaços de trabalho apenas no monitor primário"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40 #: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover" msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
#: ../js/extensionPrefs/main.js:127 #: ../js/extensionPrefs/main.js:125
#, javascript-format #, javascript-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:" msgstr "Ocorreu um erro ao carregar o dialogo de preferências para %s:"
#: ../js/extensionPrefs/main.js:167 #: ../js/extensionPrefs/main.js:157
msgid "Extension" #| msgid "Configure GNOME Shell Extensions"
msgstr "Extensão" msgid "GNOME Shell Extensions"
msgstr "Extensões do Shell do GNOME"
#: ../js/extensionPrefs/main.js:191
msgid "Select an extension to configure using the combobox above."
msgstr ""
"Selecione uma extensão para configurar usando a caixa de seleção abaixo."
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:136
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:429
@ -348,25 +332,25 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Entrar" msgstr "Entrar"
#: ../js/gdm/loginDialog.js:271 #: ../js/gdm/loginDialog.js:269
msgid "Choose Session" msgid "Choose Session"
msgstr "Escolher sessão" msgstr "Escolher sessão"
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:429
msgid "Not listed?" msgid "Not listed?"
msgstr "Não está listado?" msgstr "Não está listado?"
#: ../js/gdm/loginDialog.js:616 #: ../js/gdm/loginDialog.js:614
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(ex.: usuário ou %s)" msgstr "(ex.: usuário ou %s)"
#: ../js/gdm/loginDialog.js:621 ../js/ui/components/networkAgent.js:262 #: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:280 #: ../js/ui/components/networkAgent.js:280
msgid "Username: " msgid "Username: "
msgstr "Nome de usuário: " msgstr "Nome de usuário: "
#: ../js/gdm/loginDialog.js:924 #: ../js/gdm/loginDialog.js:922
msgid "Login Window" msgid "Login Window"
msgstr "Janela de sessão" msgstr "Janela de sessão"
@ -391,30 +375,34 @@ msgstr "Não foi possível analisar comando:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "A execução de \"%s\" falhou:" msgstr "A execução de \"%s\" falhou:"
#: ../js/ui/appDisplay.js:636 #: ../js/ui/appDisplay.js:640
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Aplicativos usados frequentemente vão aparecer aqui" msgstr "Aplicativos usados frequentemente vão aparecer aqui"
#: ../js/ui/appDisplay.js:747 #: ../js/ui/appDisplay.js:751
msgid "Frequent" msgid "Frequent"
msgstr "Frequente" msgstr "Frequente"
#: ../js/ui/appDisplay.js:754 #: ../js/ui/appDisplay.js:758
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
#: ../js/ui/appDisplay.js:1567 #: ../js/ui/appDisplay.js:1571
msgid "New Window" msgid "New Window"
msgstr "Nova janela" msgstr "Nova janela"
#: ../js/ui/appDisplay.js:1589 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1593 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Remover dos favoritos" msgstr "Remover dos favoritos"
#: ../js/ui/appDisplay.js:1595 #: ../js/ui/appDisplay.js:1599
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Adicionar aos favoritos" msgstr "Adicionar aos favoritos"
#: ../js/ui/appDisplay.js:1608
msgid "Show Details"
msgstr "Mostrar detalhes"
#: ../js/ui/appFavorites.js:87 #: ../js/ui/appFavorites.js:87
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
@ -426,7 +414,7 @@ msgid "%s has been removed from your favorites."
msgstr "%s foi removido dos seus favoritos." msgstr "%s foi removido dos seus favoritos."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:810
#: ../js/ui/status/system.js:334 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Configurações" msgstr "Configurações"
@ -437,14 +425,14 @@ msgstr "Alterar plano de fundo…"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:64 #: ../js/ui/calendar.js:67
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Dia todo" msgstr "Dia todo"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:70 #: ../js/ui/calendar.js:73
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
@ -452,7 +440,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:79 #: ../js/ui/calendar.js:82
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -462,43 +450,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:110 #: ../js/ui/calendar.js:113
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "D" msgstr "D"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:112 #: ../js/ui/calendar.js:115
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:114 #: ../js/ui/calendar.js:117
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "T" msgstr "T"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:116 #: ../js/ui/calendar.js:119
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "Q" msgstr "Q"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:118 #: ../js/ui/calendar.js:121
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "Q" msgstr "Q"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:120 #: ../js/ui/calendar.js:123
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:122 #: ../js/ui/calendar.js:125
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
@ -509,89 +497,85 @@ msgstr "S"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:135 #: ../js/ui/calendar.js:138
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Dom" msgstr "Dom"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:137 #: ../js/ui/calendar.js:140
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Seg" msgstr "Seg"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:139 #: ../js/ui/calendar.js:142
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "Ter" msgstr "Ter"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:141 #: ../js/ui/calendar.js:144
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "Qua" msgstr "Qua"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:143 #: ../js/ui/calendar.js:146
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "Qui" msgstr "Qui"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:145 #: ../js/ui/calendar.js:148
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "Sex" msgstr "Sex"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:147 #: ../js/ui/calendar.js:150
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "Sab" msgstr "Sab"
#: ../js/ui/calendar.js:390 #: ../js/ui/calendar.js:454
msgid "calendar:MY"
msgstr "calendar:MY"
#: ../js/ui/calendar.js:450
msgid "Previous month" msgid "Previous month"
msgstr "Mês anterior" msgstr "Mês anterior"
#: ../js/ui/calendar.js:460 #: ../js/ui/calendar.js:464
msgid "Next month" msgid "Next month"
msgstr "Próximo mês" msgstr "Próximo mês"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:772 #: ../js/ui/calendar.js:775
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Nada agendado" msgstr "Nada agendado"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #. Translators: Shown on calendar heading when selected day occurs on current year */
#: ../js/ui/calendar.js:790 #: ../js/ui/calendar.js:793
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d de %B" msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #. Translators: Shown on calendar heading when selected day occurs on different year */
#: ../js/ui/calendar.js:793 #: ../js/ui/calendar.js:796
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y" msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:804 #: ../js/ui/calendar.js:807
msgid "Today" msgid "Today"
msgstr "Hoje" msgstr "Hoje"
#: ../js/ui/calendar.js:808 #: ../js/ui/calendar.js:811
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Amanhã" msgstr "Amanhã"
#: ../js/ui/calendar.js:819 #: ../js/ui/calendar.js:822
msgid "This week" msgid "This week"
msgstr "Esta semana" msgstr "Esta semana"
#: ../js/ui/calendar.js:827 #: ../js/ui/calendar.js:830
msgid "Next week" msgid "Next week"
msgstr "Próxima semana" msgstr "Próxima semana"
@ -744,77 +728,77 @@ msgid "Mute"
msgstr "Sem áudio" msgstr "Sem áudio"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:958 #: ../js/ui/components/telepathyClient.js:957
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:965 #: ../js/ui/components/telepathyClient.js:964
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Ontem, %H%M" msgstr "Ontem, %H%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:972 #: ../js/ui/components/telepathyClient.js:971
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:979 #: ../js/ui/components/telepathyClient.js:978
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d de %B, %H%M" msgstr "%d de %B, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:985 #: ../js/ui/components/telepathyClient.js:984
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M" msgstr "%d de %B de %Y, %H%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:994 #: ../js/ui/components/telepathyClient.js:990
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l%M %p" msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1001 #: ../js/ui/components/telepathyClient.js:997
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Ontem, %l%M %p" msgstr "Ontem, %l%M %p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1008 #: ../js/ui/components/telepathyClient.js:1004
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1015 #: ../js/ui/components/telepathyClient.js:1011
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d de %B, %l%M %p" msgstr "%d de %B, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1021 #: ../js/ui/components/telepathyClient.js:1017
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d de %B de %Y, %l%M %p" msgstr "%d de %B de %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1054 #: ../js/ui/components/telepathyClient.js:1049
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s agora é conhecido como %s" msgstr "%s agora é conhecido como %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1158 #: ../js/ui/components/telepathyClient.js:1153
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Convite para %s" msgstr "Convite para %s"
@ -822,38 +806,38 @@ msgstr "Convite para %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1166 #: ../js/ui/components/telepathyClient.js:1161
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s está convidando você para participar de %s" msgstr "%s está convidando você para participar de %s"
#: ../js/ui/components/telepathyClient.js:1168 #: ../js/ui/components/telepathyClient.js:1163
#: ../js/ui/components/telepathyClient.js:1203 #: ../js/ui/components/telepathyClient.js:1198
#: ../js/ui/components/telepathyClient.js:1237 #: ../js/ui/components/telepathyClient.js:1232
#: ../js/ui/components/telepathyClient.js:1295 #: ../js/ui/components/telepathyClient.js:1290
msgid "Decline" msgid "Decline"
msgstr "Recusar" msgstr "Recusar"
#: ../js/ui/components/telepathyClient.js:1174 #: ../js/ui/components/telepathyClient.js:1169
#: ../js/ui/components/telepathyClient.js:1243 #: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1300 #: ../js/ui/components/telepathyClient.js:1295
msgid "Accept" msgid "Accept"
msgstr "Aceitar" msgstr "Aceitar"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1193 #: ../js/ui/components/telepathyClient.js:1188
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Chamada de vídeo para %s" msgstr "Chamada de vídeo para %s"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1196 #: ../js/ui/components/telepathyClient.js:1191
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Chamada de %s" msgstr "Chamada de %s"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1210 #: ../js/ui/components/telepathyClient.js:1205
msgid "Answer" msgid "Answer"
msgstr "Atender" msgstr "Atender"
@ -862,110 +846,110 @@ msgstr "Atender"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1231 #: ../js/ui/components/telepathyClient.js:1226
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s está enviando %s" msgstr "%s está enviando %s"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1260 #: ../js/ui/components/telepathyClient.js:1255
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s quer permissão para vê-lo quando conectado" msgstr "%s quer permissão para vê-lo quando conectado"
#: ../js/ui/components/telepathyClient.js:1346 #: ../js/ui/components/telepathyClient.js:1341
msgid "Network error" msgid "Network error"
msgstr "Erro de rede" msgstr "Erro de rede"
#: ../js/ui/components/telepathyClient.js:1348 #: ../js/ui/components/telepathyClient.js:1343
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Falha de autenticação" msgstr "Falha de autenticação"
#: ../js/ui/components/telepathyClient.js:1350 #: ../js/ui/components/telepathyClient.js:1345
msgid "Encryption error" msgid "Encryption error"
msgstr "Erro de criptografia" msgstr "Erro de criptografia"
#: ../js/ui/components/telepathyClient.js:1352 #: ../js/ui/components/telepathyClient.js:1347
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Certificado não fornecido" msgstr "Certificado não fornecido"
#: ../js/ui/components/telepathyClient.js:1354 #: ../js/ui/components/telepathyClient.js:1349
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Certificado não confiável" msgstr "Certificado não confiável"
#: ../js/ui/components/telepathyClient.js:1356 #: ../js/ui/components/telepathyClient.js:1351
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Certificado expirado" msgstr "Certificado expirado"
#: ../js/ui/components/telepathyClient.js:1358 #: ../js/ui/components/telepathyClient.js:1353
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Certificado não ativado" msgstr "Certificado não ativado"
#: ../js/ui/components/telepathyClient.js:1360 #: ../js/ui/components/telepathyClient.js:1355
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Máquina do certificado não confere" msgstr "Máquina do certificado não confere"
#: ../js/ui/components/telepathyClient.js:1362 #: ../js/ui/components/telepathyClient.js:1357
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Impressão digital do certificado não confere" msgstr "Impressão digital do certificado não confere"
#: ../js/ui/components/telepathyClient.js:1364 #: ../js/ui/components/telepathyClient.js:1359
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Certificado auto-assinado" msgstr "Certificado auto-assinado"
#: ../js/ui/components/telepathyClient.js:1366 #: ../js/ui/components/telepathyClient.js:1361
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "O status está definido como desconectado." msgstr "O status está definido como desconectado."
#: ../js/ui/components/telepathyClient.js:1368 #: ../js/ui/components/telepathyClient.js:1363
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Criptografia não disponível" msgstr "Criptografia não disponível"
#: ../js/ui/components/telepathyClient.js:1370 #: ../js/ui/components/telepathyClient.js:1365
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "O certificado é inválido" msgstr "O certificado é inválido"
#: ../js/ui/components/telepathyClient.js:1372 #: ../js/ui/components/telepathyClient.js:1367
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "A conexão foi recusada" msgstr "A conexão foi recusada"
#: ../js/ui/components/telepathyClient.js:1374 #: ../js/ui/components/telepathyClient.js:1369
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "A conexão não pode ser estabelecida" msgstr "A conexão não pode ser estabelecida"
#: ../js/ui/components/telepathyClient.js:1376 #: ../js/ui/components/telepathyClient.js:1371
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Conexão perdida" msgstr "Conexão perdida"
#: ../js/ui/components/telepathyClient.js:1378 #: ../js/ui/components/telepathyClient.js:1373
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Esta conta já está conectada ao servidor" msgstr "Esta conta já está conectada ao servidor"
#: ../js/ui/components/telepathyClient.js:1380 #: ../js/ui/components/telepathyClient.js:1375
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "A conexão foi substituída por uma nova conexão usando o mesmo recurso" msgstr "A conexão foi substituída por uma nova conexão usando o mesmo recurso"
#: ../js/ui/components/telepathyClient.js:1382 #: ../js/ui/components/telepathyClient.js:1377
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "A conta já existe no servidor" msgstr "A conta já existe no servidor"
#: ../js/ui/components/telepathyClient.js:1384 #: ../js/ui/components/telepathyClient.js:1379
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "O servidor está atualmente muito ocupado para controlar a conexão" msgstr "O servidor está atualmente muito ocupado para controlar a conexão"
#: ../js/ui/components/telepathyClient.js:1386 #: ../js/ui/components/telepathyClient.js:1381
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "O certificado foi revogado" msgstr "O certificado foi revogado"
#: ../js/ui/components/telepathyClient.js:1388 #: ../js/ui/components/telepathyClient.js:1383
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"O certificado usa um algoritmo de cifragem inseguro ou é criptograficamente " "O certificado usa um algoritmo de cifragem inseguro ou é criptograficamente "
"fraco" "fraco"
#: ../js/ui/components/telepathyClient.js:1390 #: ../js/ui/components/telepathyClient.js:1385
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -973,22 +957,22 @@ msgstr ""
"O comprimento do certificado do servidor, ou a profundidade da cadeia do " "O comprimento do certificado do servidor, ou a profundidade da cadeia do "
"certificado excedeu os limites impostos pela biblioteca de criptografia" "certificado excedeu os limites impostos pela biblioteca de criptografia"
#: ../js/ui/components/telepathyClient.js:1392 #: ../js/ui/components/telepathyClient.js:1387
msgid "Internal error" msgid "Internal error"
msgstr "Erro interno" msgstr "Erro interno"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1402 #: ../js/ui/components/telepathyClient.js:1397
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Não foi possível conectar-se a %s" msgstr "Não foi possível conectar-se a %s"
#: ../js/ui/components/telepathyClient.js:1407 #: ../js/ui/components/telepathyClient.js:1402
msgid "View account" msgid "View account"
msgstr "Visualizar conta" msgstr "Visualizar conta"
#: ../js/ui/components/telepathyClient.js:1444 #: ../js/ui/components/telepathyClient.js:1439
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Razão desconhecida" msgstr "Razão desconhecida"
@ -1004,23 +988,23 @@ msgstr "Mostrar aplicativos"
msgid "Dash" msgid "Dash"
msgstr "Dash" msgstr "Dash"
#: ../js/ui/dateMenu.js:91 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Abrir agenda" msgstr "Abrir agenda"
#: ../js/ui/dateMenu.js:95 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Abrir relógios" msgstr "Abrir relógios"
# O "&" foi inserido como "e" para versão 3.8.0 no gnome-control-center # O "&" foi inserido como "e" para versão 3.8.0 no gnome-control-center
#: ../js/ui/dateMenu.js:102 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Configurações de data & hora" msgstr "Configurações de data & hora"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:192 #: ../js/ui/dateMenu.js:205
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y" msgstr "%A, %e de %B de %Y"
@ -1165,7 +1149,7 @@ msgstr "Instalar"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?" msgstr "Baixar e instalar \"%s\" de extensions.gnome.org?"
#: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:335 #: ../js/ui/keyboard.js:645 ../js/ui/status/keyboard.js:339
msgid "Keyboard" msgid "Keyboard"
msgstr "Teclado" msgstr "Teclado"
@ -1262,7 +1246,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Desconhecido" msgstr "Desconhecido"
#: ../js/ui/overviewControls.js:483 ../js/ui/screenShield.js:151 #: ../js/ui/overviewControls.js:488 ../js/ui/screenShield.js:151
#, javascript-format #, javascript-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1299,7 +1283,7 @@ msgstr "Atividades"
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
#: ../js/ui/popupMenu.js:271 #: ../js/ui/popupMenu.js:279
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
@ -1307,7 +1291,7 @@ msgstr "toggle-switch-intl"
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Digite um comando" msgstr "Digite um comando"
#: ../js/ui/runDialog.js:114 #: ../js/ui/runDialog.js:114 ../js/ui/windowMenu.js:120
msgid "Close" msgid "Close"
msgstr "Fechar" msgstr "Fechar"
@ -1324,7 +1308,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d nova notificação" msgstr[0] "%d nova notificação"
msgstr[1] "%d novas notificações" msgstr[1] "%d novas notificações"
#: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:342 #: ../js/ui/screenShield.js:474 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Bloquear" msgstr "Bloquear"
@ -1422,8 +1406,8 @@ msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:151
#: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234 #: ../js/ui/status/network.js:323 ../js/ui/status/network.js:1234
#: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:85 #: ../js/ui/status/network.js:1345 ../js/ui/status/rfkill.js:86
#: ../js/ui/status/rfkill.js:105 #: ../js/ui/status/rfkill.js:114
msgid "Turn Off" msgid "Turn Off"
msgstr "Desligar" msgstr "Desligar"
@ -1446,7 +1430,7 @@ msgstr "Não conectado"
msgid "Brightness" msgid "Brightness"
msgstr "Brilho" msgstr "Brilho"
#: ../js/ui/status/keyboard.js:403 #: ../js/ui/status/keyboard.js:407
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Exibir disposição de teclado" msgstr "Exibir disposição de teclado"
@ -1483,12 +1467,10 @@ msgstr "Conectado"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */ #. under NetworkManager's control (and thus cannot be used in the menu) */
#: ../js/ui/status/network.js:426 #: ../js/ui/status/network.js:426
#| msgid "unmanaged"
msgid "Unmanaged" msgid "Unmanaged"
msgstr "Não gerenciável" msgstr "Não gerenciável"
#: ../js/ui/status/network.js:428 #: ../js/ui/status/network.js:428
#| msgid "disconnecting..."
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Desconectando" msgstr "Desconectando"
@ -1498,21 +1480,18 @@ msgstr "Conectando"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:437 #: ../js/ui/status/network.js:437
#| msgid "authentication required"
msgid "Authentication required" msgid "Authentication required"
msgstr "Autenticação necessária" msgstr "Autenticação necessária"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */ #. module, which is missing */
#: ../js/ui/status/network.js:445 #: ../js/ui/status/network.js:445
#| msgid "firmware missing"
msgid "Firmware missing" msgid "Firmware missing"
msgstr "Firmware em falta" msgstr "Firmware em falta"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */ #. is disabled by rfkill, or it has no coverage */
#: ../js/ui/status/network.js:449 #: ../js/ui/status/network.js:449
#| msgid "unavailable"
msgid "Unavailable" msgid "Unavailable"
msgstr "Indisponível" msgstr "Indisponível"
@ -1572,7 +1551,7 @@ msgstr "Selecione uma rede"
msgid "No Networks" msgid "No Networks"
msgstr "Nenhuma rede" msgstr "Nenhuma rede"
#: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:103 #: ../js/ui/status/network.js:866 ../js/ui/status/rfkill.js:112
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Usar alternador de hardware para desligar" msgstr "Usar alternador de hardware para desligar"
@ -1605,7 +1584,7 @@ msgstr "autenticação necessária"
msgid "connection failed" msgid "connection failed"
msgstr "conexão falhou" msgstr "conexão falhou"
#: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:88 #: ../js/ui/status/network.js:1433 ../js/ui/status/rfkill.js:89
msgid "Network Settings" msgid "Network Settings"
msgstr "Configurações de rede" msgstr "Configurações de rede"
@ -1657,31 +1636,31 @@ msgstr "No-break"
msgid "Battery" msgid "Battery"
msgstr "Bateria" msgstr "Bateria"
#: ../js/ui/status/rfkill.js:82 #: ../js/ui/status/rfkill.js:83
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Modo avião" msgstr "Modo avião"
#: ../js/ui/status/rfkill.js:84 #: ../js/ui/status/rfkill.js:85
msgid "On" msgid "On"
msgstr "On" msgstr "On"
#: ../js/ui/status/system.js:314 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"
msgstr "Alternar usuário" msgstr "Alternar usuário"
#: ../js/ui/status/system.js:319 #: ../js/ui/status/system.js:322
msgid "Log Out" msgid "Log Out"
msgstr "Encerrar sessão" msgstr "Encerrar sessão"
#: ../js/ui/status/system.js:338 #: ../js/ui/status/system.js:341
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Bloqueio da orientação" msgstr "Bloqueio da orientação"
#: ../js/ui/status/system.js:346 #: ../js/ui/status/system.js:349
msgid "Suspend" msgid "Suspend"
msgstr "Suspender" msgstr "Suspender"
#: ../js/ui/status/system.js:349 #: ../js/ui/status/system.js:352
msgid "Power Off" msgid "Power Off"
msgstr "Desligar" msgstr "Desligar"
@ -1718,28 +1697,68 @@ msgstr "Pesquisar"
msgid "“%s” is ready" msgid "“%s” is ready"
msgstr "\"%s\" está pronto" msgstr "\"%s\" está pronto"
#: ../js/ui/windowManager.js:56 #: ../js/ui/windowManager.js:57
msgid "Do you want to keep these display settings?" msgid "Do you want to keep these display settings?"
msgstr "Você deseja manter essas configurações de exibição?" msgstr "Você deseja manter essas configurações de exibição?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. */ #. */
#: ../js/ui/windowManager.js:75 #: ../js/ui/windowManager.js:76
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Reverter configurações" msgstr "Reverter configurações"
#: ../js/ui/windowManager.js:79 #: ../js/ui/windowManager.js:80
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Manter alterações" msgstr "Manter alterações"
#: ../js/ui/windowManager.js:98 #: ../js/ui/windowManager.js:99
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "Alterações nas configurações serão revertidas em %d segundo" msgstr[0] "Alterações nas configurações serão revertidas em %d segundo"
msgstr[1] "Alterações nas configurações serão revertidas em %d segundos" msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
#: ../js/ui/windowMenu.js:34
msgid "Minimize"
msgstr "Minimizar"
#: ../js/ui/windowMenu.js:41
msgid "Unmaximize"
msgstr "Restaurar"
#: ../js/ui/windowMenu.js:45
msgid "Maximize"
msgstr "Maximizar"
#: ../js/ui/windowMenu.js:52
msgid "Move"
msgstr "Mover"
#: ../js/ui/windowMenu.js:58
msgid "Resize"
msgstr "Redimensionar"
#: ../js/ui/windowMenu.js:65
msgid "Move Titlebar Onscreen"
msgstr "Mover barra de título na tela"
#: ../js/ui/windowMenu.js:70
msgid "Always on Top"
msgstr "Sempre no topo"
#: ../js/ui/windowMenu.js:89
msgid "Always on Visible Workspace"
msgstr "Sempre na área de trabalho visível"
#: ../js/ui/windowMenu.js:106
msgid "Move to Workspace Up"
msgstr "Mover para a área de trabalho acima"
#: ../js/ui/windowMenu.js:111
msgid "Move to Workspace Down"
msgstr "Mover para a área de trabalho abaixo"
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1 #: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Agenda do Evolution" msgstr "Agenda do Evolution"
@ -1799,6 +1818,26 @@ msgstr "A senha não pode estar em branco"
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "O diálogo de autenticação foi descartado pelo usuário" msgstr "O diálogo de autenticação foi descartado pelo usuário"
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Organização dos botões na barra de título"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
#~ "executar o Shell do GNOME."
#~ msgid "Extension"
#~ msgstr "Extensão"
#~ msgid "Select an extension to configure using the combobox above."
#~ msgstr ""
#~ "Selecione uma extensão para configurar usando a caixa de seleção abaixo."
#~ msgid "calendar:MY"
#~ msgstr "calendar:MY"
#~ msgid "<b>%A</b>, <b>%H:%M</b>" #~ msgid "<b>%A</b>, <b>%H:%M</b>"
#~ msgstr "<b>%A</b>, <b>%H:%M</b>" #~ msgstr "<b>%A</b>, <b>%H:%M</b>"

926
po/tr.po

File diff suppressed because it is too large Load Diff

View File

@ -320,7 +320,7 @@ INTROSPECTION_GIRS += ShellMenu-0.1.gir
CLEANFILES += ShellMenu-0.1.gir CLEANFILES += ShellMenu-0.1.gir
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4 GMenu-3.0 Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4
if HAVE_NETWORKMANAGER if HAVE_NETWORKMANAGER
Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0 Shell_0_1_gir_INCLUDES += NetworkManager-1.0 NMClient-1.0
endif endif

View File

@ -73,7 +73,15 @@ static void gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
MetaRectangle *tile_rect, MetaRectangle *tile_rect,
int tile_monitor); int tile_monitor);
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin); static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
MetaWindow *window,
MetaWindowMenuType menu,
int x,
int y);
static void gnome_shell_plugin_show_window_menu_for_rect (MetaPlugin *plugin,
MetaWindow *window,
MetaWindowMenuType menu,
MetaRectangle *rect);
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin, static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *event); XEvent *event);
@ -140,6 +148,8 @@ gnome_shell_plugin_class_init (GnomeShellPluginClass *klass)
plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview; plugin_class->show_tile_preview = gnome_shell_plugin_show_tile_preview;
plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview; plugin_class->hide_tile_preview = gnome_shell_plugin_hide_tile_preview;
plugin_class->show_window_menu = gnome_shell_plugin_show_window_menu;
plugin_class->show_window_menu_for_rect = gnome_shell_plugin_show_window_menu_for_rect;
plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter; plugin_class->xevent_filter = gnome_shell_plugin_xevent_filter;
plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter; plugin_class->keybinding_filter = gnome_shell_plugin_keybinding_filter;
@ -303,6 +313,25 @@ gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin)
_shell_wm_hide_tile_preview (get_shell_wm ()); _shell_wm_hide_tile_preview (get_shell_wm ());
} }
static void
gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
MetaWindow *window,
MetaWindowMenuType menu,
int x,
int y)
{
_shell_wm_show_window_menu (get_shell_wm (), window, menu, x, y);
}
static void
gnome_shell_plugin_show_window_menu_for_rect (MetaPlugin *plugin,
MetaWindow *window,
MetaWindowMenuType menu,
MetaRectangle *rect)
{
_shell_wm_show_window_menu_for_rect (get_shell_wm (), window, menu, rect);
}
static gboolean static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin, gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev) XEvent *xev)

View File

@ -778,7 +778,7 @@ emit_changed_accels (GtkActionMuxer *muxer,
/** /**
* gtk_action_muxer_set_parent: * gtk_action_muxer_set_parent:
* @muxer: a #GtkActionMuxer * @muxer: a #GtkActionMuxer
* @parent: (allow-none): the new parent #GtkActionMuxer * @parent: (nullable): the new parent #GtkActionMuxer
* *
* Sets the parent of @muxer to @parent. * Sets the parent of @muxer to @parent.
*/ */

View File

@ -252,7 +252,7 @@ shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
/** /**
* shell_app_system_lookup_desktop_wmclass: * shell_app_system_lookup_desktop_wmclass:
* @system: a #ShellAppSystem * @system: a #ShellAppSystem
* @wmclass: (allow-none): A WM_CLASS value * @wmclass: (nullable): A WM_CLASS value
* *
* Find a valid application whose .desktop file, without the extension * Find a valid application whose .desktop file, without the extension
* and properly canonicalized, matches @wmclass. * and properly canonicalized, matches @wmclass.
@ -303,7 +303,7 @@ shell_app_system_lookup_desktop_wmclass (ShellAppSystem *system,
/** /**
* shell_app_system_lookup_startup_wmclass: * shell_app_system_lookup_startup_wmclass:
* @system: a #ShellAppSystem * @system: a #ShellAppSystem
* @wmclass: (allow-none): A WM_CLASS value * @wmclass: (nullable): A WM_CLASS value
* *
* Find a valid application whose .desktop file contains a * Find a valid application whose .desktop file contains a
* StartupWMClass entry matching @wmclass. * StartupWMClass entry matching @wmclass.

View File

@ -516,7 +516,7 @@ find_most_recent_transient_on_same_workspace (MetaDisplay *display,
/** /**
* shell_app_activate_window: * shell_app_activate_window:
* @app: a #ShellApp * @app: a #ShellApp
* @window: (allow-none): Window to be focused * @window: (nullable): Window to be focused
* @timestamp: Event timestamp * @timestamp: Event timestamp
* *
* Bring all windows for the given app to the foreground, * Bring all windows for the given app to the foreground,

View File

@ -34,7 +34,6 @@
#endif #endif
#ifdef __OpenBSD__ #ifdef __OpenBSD__
#include <sys/param.h>
#include <sys/sysctl.h> #include <sys/sysctl.h>
#endif #endif
@ -286,7 +285,33 @@ shell_global_init (ShellGlobal *global)
if (shell_js) if (shell_js)
{ {
int i, j;
search_path = g_strsplit (shell_js, ":", -1); search_path = g_strsplit (shell_js, ":", -1);
/* The naive g_strsplit above will split 'resource:///foo/bar' into 'resource',
* '///foo/bar'. Combine these back together by looking for a literal 'resource'
* in the array. */
for (i = 0, j = 0; search_path[i];)
{
char *out;
if (strcmp (search_path[i], "resource") == 0 && search_path[i + 1] != NULL)
{
out = g_strconcat (search_path[i], ":", search_path[i + 1], NULL);
g_free (search_path[i]);
g_free (search_path[i + 1]);
i += 2;
}
else
{
out = search_path[i];
i += 1;
}
search_path[j++] = out;
}
search_path[j] = NULL; /* NULL-terminate the now possibly shorter array */
} }
else else
{ {
@ -1130,27 +1155,18 @@ shell_global_reexec_self (ShellGlobal *global)
{ {
GPtrArray *arr; GPtrArray *arr;
gsize len; gsize len;
#if defined __linux__
char *buf; char *buf;
char *buf_p; char *buf_p;
char *buf_end; char *buf_end;
GError *error = NULL; GError *error = NULL;
#if defined __linux__
if (!g_file_get_contents ("/proc/self/cmdline", &buf, &len, &error)) if (!g_file_get_contents ("/proc/self/cmdline", &buf, &len, &error))
{ {
g_warning ("failed to get /proc/self/cmdline: %s", error->message); g_warning ("failed to get /proc/self/cmdline: %s", error->message);
return; return;
} }
#elif defined __OpenBSD__
int pid = getpid();
int mib[] = { CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_ARGV };
if (sysctl(mib, G_N_ELEMENTS (mib), &buf, &len, NULL, 0) == -1) {
g_warning ("failed to get command line args: %d", errno);
return;
}
#else
return;
#endif
buf_end = buf+len; buf_end = buf+len;
arr = g_ptr_array_new (); arr = g_ptr_array_new ();
@ -1159,6 +1175,30 @@ shell_global_reexec_self (ShellGlobal *global)
g_ptr_array_add (arr, buf_p); g_ptr_array_add (arr, buf_p);
g_ptr_array_add (arr, NULL); g_ptr_array_add (arr, NULL);
#elif defined __OpenBSD__
gchar **args, **args_p;
gint mib[] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV };
if (sysctl (mib, G_N_ELEMENTS (mib), NULL, &len, NULL, 0) == -1)
return;
args = g_malloc0 (len);
if (sysctl (mib, G_N_ELEMENTS (mib), args, &len, NULL, 0) == -1) {
g_warning ("failed to get command line args: %d", errno);
g_free (args);
return;
}
arr = g_ptr_array_new ();
for (args_p = args; *args_p != NULL; args_p++) {
g_ptr_array_add (arr, *args_p);
}
g_ptr_array_add (arr, NULL);
#else
return;
#endif
/* Close all file descriptors other than stdin/stdout/stderr, otherwise /* Close all file descriptors other than stdin/stdout/stderr, otherwise
* they will leak and stay open after the exec. In particular, this is * they will leak and stay open after the exec. In particular, this is
@ -1174,6 +1214,11 @@ shell_global_reexec_self (ShellGlobal *global)
execvp (arr->pdata[0], (char**)arr->pdata); execvp (arr->pdata[0], (char**)arr->pdata);
g_warning ("failed to reexec: %s", g_strerror (errno)); g_warning ("failed to reexec: %s", g_strerror (errno));
g_ptr_array_free (arr, TRUE); g_ptr_array_free (arr, TRUE);
#if defined __linux__
g_free (buf);
#elif defined __OpenBSD__
g_free (args);
#endif
} }
/** /**
@ -1557,7 +1602,7 @@ build_ca_proplist_for_event (ca_proplist *props,
* @global: the #ShellGlobal * @global: the #ShellGlobal
* @id: an id, used to cancel later (0 if not needed) * @id: an id, used to cancel later (0 if not needed)
* @name: the sound name * @name: the sound name
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played * @for_event: (nullable): a #ClutterEvent in response to which the sound is played
* *
* Plays a simple sound picked according to Freedesktop sound theme. * Plays a simple sound picked according to Freedesktop sound theme.
* Really just a workaround for libcanberra not being introspected. * Really just a workaround for libcanberra not being introspected.
@ -1585,7 +1630,7 @@ shell_global_play_theme_sound (ShellGlobal *global,
* @id: an id, used to cancel later (0 if not needed) * @id: an id, used to cancel later (0 if not needed)
* @name: the sound name * @name: the sound name
* @description: the localized description of the event that triggered this alert * @description: the localized description of the event that triggered this alert
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played * @for_event: (nullable): a #ClutterEvent in response to which the sound is played
* @application_id: application on behalf of which the sound is played * @application_id: application on behalf of which the sound is played
* @application_name: * @application_name:
* *
@ -1619,7 +1664,7 @@ shell_global_play_theme_sound_full (ShellGlobal *global,
* @id: an id, used to cancel later (0 if not needed) * @id: an id, used to cancel later (0 if not needed)
* @file_name: the file name to play * @file_name: the file name to play
* @description: the localized description of the event that triggered this alert * @description: the localized description of the event that triggered this alert
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played * @for_event: (nullable): a #ClutterEvent in response to which the sound is played
* @application_id: application on behalf of which the sound is played * @application_id: application on behalf of which the sound is played
* @application_name: * @application_name:
* *
@ -1653,7 +1698,7 @@ shell_global_play_sound_file_full (ShellGlobal *global,
* @id: an id, used to cancel later (0 if not needed) * @id: an id, used to cancel later (0 if not needed)
* @file_name: the file name to play * @file_name: the file name to play
* @description: the localized description of the event that triggered this alert * @description: the localized description of the event that triggered this alert
* @for_event: (allow-none): a #ClutterEvent in response to which the sound is played * @for_event: (nullable): a #ClutterEvent in response to which the sound is played
* *
* Like shell_global_play_theme_sound(), but with an explicit path * Like shell_global_play_theme_sound(), but with an explicit path
* instead of a themed sound. * instead of a themed sound.
@ -1814,7 +1859,7 @@ load_variant (GFile *dir,
* shell_global_set_runtime_state: * shell_global_set_runtime_state:
* @global: a #ShellGlobal * @global: a #ShellGlobal
* @property_name: Name of the property * @property_name: Name of the property
* @variant: (allow-none): A #GVariant, or %NULL to unset * @variant: (nullable): A #GVariant, or %NULL to unset
* *
* Change the value of serialized runtime state. * Change the value of serialized runtime state.
*/ */
@ -1849,7 +1894,7 @@ shell_global_get_runtime_state (ShellGlobal *global,
* shell_global_set_persistent_state: * shell_global_set_persistent_state:
* @global: a #ShellGlobal * @global: a #ShellGlobal
* @property_name: Name of the property * @property_name: Name of the property
* @variant: (allow-none): A #GVariant, or %NULL to unset * @variant: (nullable): A #GVariant, or %NULL to unset
* *
* Change the value of serialized persistent state. * Change the value of serialized persistent state.
*/ */

View File

@ -516,7 +516,7 @@ shell_keyring_prompt_new (void)
* *
* Get the prompt password text actor * Get the prompt password text actor
* *
* Returns: (transfer none) (allow-none): the password actor * Returns: (transfer none) (nullable): the password actor
*/ */
ClutterText * ClutterText *
shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self) shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
@ -531,7 +531,7 @@ shell_keyring_prompt_get_password_actor (ShellKeyringPrompt *self)
* *
* Get the prompt password text actor * Get the prompt password text actor
* *
* Returns: (transfer none) (allow-none): the password actor * Returns: (transfer none) (nullable): the password actor
*/ */
ClutterText * ClutterText *
shell_keyring_prompt_get_confirm_actor (ShellKeyringPrompt *self) shell_keyring_prompt_get_confirm_actor (ShellKeyringPrompt *self)
@ -616,7 +616,7 @@ on_password_changed (ClutterText *text,
/** /**
* shell_keyring_prompt_set_password_actor: * shell_keyring_prompt_set_password_actor:
* @self: the internal prompt * @self: the internal prompt
* @password_actor: (allow-none): the password actor * @password_actor: (nullable): the password actor
* *
* Set the prompt password text actor * Set the prompt password text actor
*/ */
@ -651,7 +651,7 @@ shell_keyring_prompt_set_password_actor (ShellKeyringPrompt *self,
/** /**
* shell_keyring_prompt_set_confirm_actor: * shell_keyring_prompt_set_confirm_actor:
* @self: the internal prompt * @self: the internal prompt
* @confirm_actor: (allow-none): the confirm password actor * @confirm_actor: (nullable): the confirm password actor
* *
* Set the prompt password confirmation text actor * Set the prompt password confirmation text actor
*/ */

View File

@ -64,7 +64,7 @@ shell_menu_tracker_remove_func (gint position,
* shell_menu_tracker_new: * shell_menu_tracker_new:
* @observable: * @observable:
* @model: * @model:
* @action_namespace: (allow-none): * @action_namespace: (nullable):
* @insert_func: * @insert_func:
* @insert_user_data: * @insert_user_data:
* @insert_notify: * @insert_notify:

View File

@ -75,7 +75,7 @@ on_timeout (gpointer data)
} }
static void static void
establish_timeout () establish_timeout (void)
{ {
if (timeout_id != 0) if (timeout_id != 0)
g_source_remove (timeout_id); g_source_remove (timeout_id);

View File

@ -1629,7 +1629,7 @@ shell_recorder_set_draw_cursor (ShellRecorder *recorder,
/** /**
* shell_recorder_set_pipeline: * shell_recorder_set_pipeline:
* @recorder: the #ShellRecorder * @recorder: the #ShellRecorder
* @pipeline: (allow-none): the GStreamer pipeline used to encode recordings * @pipeline: (nullable): the GStreamer pipeline used to encode recordings
* or %NULL for the default value. * or %NULL for the default value.
* *
* Sets the GStreamer pipeline used to encode recordings. * Sets the GStreamer pipeline used to encode recordings.
@ -1681,7 +1681,7 @@ shell_recorder_set_area (ShellRecorder *recorder,
/** /**
* shell_recorder_record: * shell_recorder_record:
* @recorder: the #ShellRecorder * @recorder: the #ShellRecorder
* @filename_used: (out) (allow-none): actual filename used for recording * @filename_used: (out) (optional): actual filename used for recording
* *
* Starts recording, Starting the recording may fail if the output file * Starts recording, Starting the recording may fail if the output file
* cannot be opened, or if the output stream cannot be created * cannot be opened, or if the output stream cannot be created

View File

@ -530,26 +530,15 @@ shell_screenshot_screenshot_window (ShellScreenshot *screenshot,
window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window)); window_actor = CLUTTER_ACTOR (meta_window_get_compositor_private (window));
clutter_actor_get_position (window_actor, &actor_x, &actor_y); clutter_actor_get_position (window_actor, &actor_x, &actor_y);
if (include_frame || !meta_window_get_frame (window)) meta_window_get_frame_rect (window, &rect);
{
meta_window_get_outer_rect (window, &rect); if (!include_frame)
meta_window_frame_rect_to_client_rect (window, &rect, &rect);
screenshot_data->screenshot_area.x = rect.x; screenshot_data->screenshot_area.x = rect.x;
screenshot_data->screenshot_area.y = rect.y; screenshot_data->screenshot_area.y = rect.y;
clip.x = rect.x - (gint) actor_x; clip.x = rect.x - (gint) actor_x;
clip.y = rect.y - (gint) actor_y; clip.y = rect.y - (gint) actor_y;
}
else
{
rect = *meta_window_get_rect (window);
screenshot_data->screenshot_area.x = (gint) actor_x + rect.x;
screenshot_data->screenshot_area.y = (gint) actor_y + rect.y;
clip.x = rect.x;
clip.y = rect.y;
}
clip.width = screenshot_data->screenshot_area.width = rect.width; clip.width = screenshot_data->screenshot_area.width = rect.width;
clip.height = screenshot_data->screenshot_area.height = rect.height; clip.height = screenshot_data->screenshot_area.height = rect.height;

View File

@ -21,10 +21,6 @@ struct _ShellTpClientPrivate
ShellTpClientHandleChannelsImpl handle_channels_impl; ShellTpClientHandleChannelsImpl handle_channels_impl;
gpointer user_data_handle_channels; gpointer user_data_handle_channels;
GDestroyNotify destroy_handle_channels; GDestroyNotify destroy_handle_channels;
ShellTpClientContactListChangedImpl contact_list_changed_impl;
gpointer user_data_contact_list_changed;
GDestroyNotify destroy_contact_list_changed;
}; };
/** /**
@ -35,7 +31,7 @@ struct _ShellTpClientPrivate
* if possible * if possible
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel, * @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible * all having %TP_CHANNEL_FEATURE_CORE prepared if possible
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL; * @dispatch_operation: (nullable): a #TpChannelDispatchOperation or %NULL;
* the dispatch_operation is not guaranteed to be prepared * the dispatch_operation is not guaranteed to be prepared
* @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of * @requests: (element-type TelepathyGLib.ChannelRequest): a #GList of
* #TpChannelRequest, all having their object-path defined but are not * #TpChannelRequest, all having their object-path defined but are not
@ -54,7 +50,7 @@ struct _ShellTpClientPrivate
* if possible * if possible
* @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel, * @channels: (element-type TelepathyGLib.Channel): a #GList of #TpChannel,
* all having %TP_CHANNEL_FEATURE_CORE prepared if possible * all having %TP_CHANNEL_FEATURE_CORE prepared if possible
* @dispatch_operation: (allow-none): a #TpChannelDispatchOperation or %NULL; * @dispatch_operation: (nullable): a #TpChannelDispatchOperation or %NULL;
* the dispatch_operation is not guaranteed to be prepared * the dispatch_operation is not guaranteed to be prepared
* @context: a #TpAddDispatchOperationContext representing the context of this * @context: a #TpAddDispatchOperationContext representing the context of this
* D-Bus call * D-Bus call
@ -83,16 +79,6 @@ struct _ShellTpClientPrivate
* Signature of the implementation of the HandleChannels method. * Signature of the implementation of the HandleChannels method.
*/ */
/**
* ShellTpClientContactListChangedImpl:
* @connection: a #TpConnection having %TP_CONNECTION_FEATURE_CORE prepared
* if possible
* @added: (element-type TelepathyGLib.Contact): a #GPtrArray of added #TpContact
* @removed: (element-type TelepathyGLib.Contact): a #GPtrArray of removed #TpContact
*
* Signature of the implementation of the ContactListChanged method.
*/
static void static void
shell_tp_client_init (ShellTpClient *self) shell_tp_client_init (ShellTpClient *self)
{ {
@ -226,13 +212,6 @@ shell_tp_client_dispose (GObject *object)
self->priv->user_data_handle_channels = NULL; self->priv->user_data_handle_channels = NULL;
} }
if (self->priv->destroy_contact_list_changed != NULL)
{
self->priv->destroy_contact_list_changed (self->priv->user_data_contact_list_changed);
self->priv->destroy_contact_list_changed = NULL;
self->priv->user_data_contact_list_changed = NULL;
}
if (dispose != NULL) if (dispose != NULL)
dispose (object); dispose (object);
} }
@ -290,40 +269,3 @@ shell_tp_client_set_handle_channels_func (ShellTpClient *self,
self->priv->user_data_handle_channels = user_data; self->priv->user_data_handle_channels = user_data;
self->priv->destroy_handle_channels = destroy; self->priv->destroy_handle_channels = destroy;
} }
void
shell_tp_client_set_contact_list_changed_func (ShellTpClient *self,
ShellTpClientContactListChangedImpl contact_list_changed_impl,
gpointer user_data,
GDestroyNotify destroy)
{
g_assert (self->priv->contact_list_changed_impl == NULL);
self->priv->contact_list_changed_impl = contact_list_changed_impl;
self->priv->user_data_handle_channels = user_data;
self->priv->destroy_handle_channels = destroy;
}
static void
on_contact_list_changed (TpConnection *conn,
GPtrArray *added,
GPtrArray *removed,
gpointer user_data)
{
ShellTpClient *self = (ShellTpClient *) user_data;
g_assert (self->priv->contact_list_changed_impl != NULL);
self->priv->contact_list_changed_impl (conn,
added, removed,
self->priv->user_data_contact_list_changed);
}
void
shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
TpConnection *conn)
{
g_signal_connect (conn, "contact-list-changed",
G_CALLBACK (on_contact_list_changed),
self);
}

View File

@ -86,19 +86,5 @@ void shell_tp_client_set_handle_channels_func (ShellTpClient *self,
gpointer user_data, gpointer user_data,
GDestroyNotify destroy); GDestroyNotify destroy);
typedef void (*ShellTpClientContactListChangedImpl) (
TpConnection *connection,
GPtrArray *added,
GPtrArray *removed,
gpointer user_data);
void shell_tp_client_set_contact_list_changed_func (ShellTpClient *self,
ShellTpClientContactListChangedImpl contact_list_changed_impl,
gpointer user_data,
GDestroyNotify destroy);
void shell_tp_client_grab_contact_list_changed (ShellTpClient *self,
TpConnection *conn);
G_END_DECLS G_END_DECLS
#endif /* __SHELL_TP_CLIENT_H__ */ #endif /* __SHELL_TP_CLIENT_H__ */

View File

@ -40,6 +40,15 @@ void _shell_wm_show_tile_preview (ShellWM *wm,
MetaRectangle *tile_rect, MetaRectangle *tile_rect,
int tile_monitor); int tile_monitor);
void _shell_wm_hide_tile_preview (ShellWM *wm); void _shell_wm_hide_tile_preview (ShellWM *wm);
void _shell_wm_show_window_menu (ShellWM *wm,
MetaWindow *window,
MetaWindowMenuType menu,
int x,
int y);
void _shell_wm_show_window_menu_for_rect (ShellWM *wm,
MetaWindow *window,
MetaWindowMenuType menu,
MetaRectangle *rect);
gboolean _shell_wm_filter_keybinding (ShellWM *wm, gboolean _shell_wm_filter_keybinding (ShellWM *wm,
MetaKeyBinding *binding); MetaKeyBinding *binding);

View File

@ -28,6 +28,7 @@ enum
KILL_WINDOW_EFFECTS, KILL_WINDOW_EFFECTS,
SHOW_TILE_PREVIEW, SHOW_TILE_PREVIEW,
HIDE_TILE_PREVIEW, HIDE_TILE_PREVIEW,
SHOW_WINDOW_MENU,
FILTER_KEYBINDING, FILTER_KEYBINDING,
CONFIRM_DISPLAY_CHANGE, CONFIRM_DISPLAY_CHANGE,
@ -135,6 +136,13 @@ shell_wm_class_init (ShellWMClass *klass)
0, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
shell_wm_signals[SHOW_WINDOW_MENU] =
g_signal_new ("show-window-menu",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE, 3,
META_TYPE_WINDOW, G_TYPE_INT, META_TYPE_RECTANGLE);
shell_wm_signals[FILTER_KEYBINDING] = shell_wm_signals[FILTER_KEYBINDING] =
g_signal_new ("filter-keybinding", g_signal_new ("filter-keybinding",
G_TYPE_FROM_CLASS (klass), G_TYPE_FROM_CLASS (klass),
@ -288,6 +296,30 @@ _shell_wm_hide_tile_preview (ShellWM *wm)
g_signal_emit (wm, shell_wm_signals[HIDE_TILE_PREVIEW], 0); g_signal_emit (wm, shell_wm_signals[HIDE_TILE_PREVIEW], 0);
} }
void
_shell_wm_show_window_menu (ShellWM *wm,
MetaWindow *window,
MetaWindowMenuType menu,
int x,
int y)
{
MetaRectangle rect;
rect.x = x;
rect.y = y;
rect.width = rect.height = 0;
_shell_wm_show_window_menu_for_rect (wm, window, menu, &rect);
}
void
_shell_wm_show_window_menu_for_rect (ShellWM *wm,
MetaWindow *window,
MetaWindowMenuType menu,
MetaRectangle *rect)
{
g_signal_emit (wm, shell_wm_signals[SHOW_WINDOW_MENU], 0, window, menu, rect);
}
void void
_shell_wm_minimize (ShellWM *wm, _shell_wm_minimize (ShellWM *wm,

View File

@ -414,7 +414,7 @@ st_bin_new (void)
/** /**
* st_bin_set_child: * st_bin_set_child:
* @bin: a #StBin * @bin: a #StBin
* @child: (allow-none): a #ClutterActor, or %NULL * @child: (nullable): a #ClutterActor, or %NULL
* *
* Sets @child as the child of @bin. * Sets @child as the child of @bin.
* *

View File

@ -94,6 +94,9 @@ st_box_layout_child_get_property (GObject *object,
break; break;
case CLUTTER_BOX_ALIGNMENT_END: case CLUTTER_BOX_ALIGNMENT_END:
align = ST_ALIGN_END; align = ST_ALIGN_END;
break;
default:
g_assert_not_reached ();
} }
g_value_set_enum (value, align); g_value_set_enum (value, align);
break; break;
@ -138,6 +141,9 @@ st_box_layout_child_set_property (GObject *object,
break; break;
case ST_ALIGN_END: case ST_ALIGN_END:
align = CLUTTER_BOX_ALIGNMENT_END; align = CLUTTER_BOX_ALIGNMENT_END;
break;
default:
g_assert_not_reached ();
} }
g_object_set (meta, g_param_spec_get_name (pspec), align, NULL); g_object_set (meta, g_param_spec_get_name (pspec), align, NULL);
break; break;

View File

@ -908,7 +908,7 @@ st_entry_get_text (StEntry *entry)
/** /**
* st_entry_set_text: * st_entry_set_text:
* @entry: a #StEntry * @entry: a #StEntry
* @text: (allow-none): text to set the entry to * @text: (nullable): text to set the entry to
* *
* Sets the text displayed on the entry * Sets the text displayed on the entry
*/ */
@ -963,7 +963,7 @@ st_entry_get_clutter_text (StEntry *entry)
/** /**
* st_entry_set_hint_text: * st_entry_set_hint_text:
* @entry: a #StEntry * @entry: a #StEntry
* @text: (allow-none): text to set as the entry hint * @text: (nullable): text to set as the entry hint
* *
* Sets the text to display when the entry is empty and unfocused. When the * Sets the text to display when the entry is empty and unfocused. When the
* entry is displaying the hint, it has a pseudo class of "indeterminate". * entry is displaying the hint, it has a pseudo class of "indeterminate".
@ -1136,7 +1136,7 @@ _st_entry_set_icon (StEntry *entry,
/** /**
* st_entry_set_primary_icon: * st_entry_set_primary_icon:
* @entry: a #StEntry * @entry: a #StEntry
* @icon: (allow-none): a #ClutterActor * @icon: (nullable): a #ClutterActor
* *
* Set the primary icon of the entry to @icon * Set the primary icon of the entry to @icon
*/ */
@ -1156,7 +1156,7 @@ st_entry_set_primary_icon (StEntry *entry,
/** /**
* st_entry_set_secondary_icon: * st_entry_set_secondary_icon:
* @entry: a #StEntry * @entry: a #StEntry
* @icon: (allow-none): an #ClutterActor * @icon: (nullable): an #ClutterActor
* *
* Set the secondary icon of the entry to @icon * Set the secondary icon of the entry to @icon
*/ */

View File

@ -532,7 +532,7 @@ st_icon_get_gicon (StIcon *icon)
/** /**
* st_icon_set_gicon: * st_icon_set_gicon:
* @icon: an icon * @icon: an icon
* @gicon: (allow-none): a #GIcon to override :icon-name * @gicon: (nullable): a #GIcon to override :icon-name
*/ */
void void
st_icon_set_gicon (StIcon *icon, GIcon *gicon) st_icon_set_gicon (StIcon *icon, GIcon *gicon)

View File

@ -131,8 +131,8 @@ st_scrollable_set_adjustments (StScrollable *scrollable,
/** /**
* st_scroll_bar_get_adjustments: * st_scroll_bar_get_adjustments:
* @hadjustment: (transfer none) (out) (allow-none): location to store the horizontal adjustment, or %NULL * @hadjustment: (transfer none) (out) (optional) (nullable): location to store the horizontal adjustment, or %NULL
* @vadjustment: (transfer none) (out) (allow-none): location to store the vertical adjustment, or %NULL * @vadjustment: (transfer none) (out) (optional) (nullable): location to store the vertical adjustment, or %NULL
* *
* Gets the adjustment objects that store the offsets of the scrollable widget * Gets the adjustment objects that store the offsets of the scrollable widget
* into its possible scrolling area. * into its possible scrolling area.

View File

@ -21,6 +21,8 @@
#include "config.h" #include "config.h"
#define COGL_ENABLE_EXPERIMENTAL_API /* for cogl_framebuffer_allocate */
#include "st-texture-cache.h" #include "st-texture-cache.h"
#include "st-private.h" #include "st-private.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@ -1020,7 +1022,7 @@ load_gicon_with_colors (StTextureCache *cache,
/** /**
* st_texture_cache_load_gicon: * st_texture_cache_load_gicon:
* @cache: The texture cache instance * @cache: The texture cache instance
* @theme_node: (allow-none): The #StThemeNode to use for colors, or NULL * @theme_node: (nullable): The #StThemeNode to use for colors, or NULL
* if the icon must not be recolored * if the icon must not be recolored
* @icon: the #GIcon to load * @icon: the #GIcon to load
* @size: Size of themed * @size: Size of themed
@ -1233,7 +1235,7 @@ load_sliced_image (GSimpleAsyncResult *result,
* @grid_width: Width in pixels * @grid_width: Width in pixels
* @grid_height: Height in pixels * @grid_height: Height in pixels
* @scale: Scale factor of the display * @scale: Scale factor of the display
* @load_callback: (scope async) (allow-none): Function called when the image is loaded, or %NULL * @load_callback: (scope async) (nullable): Function called when the image is loaded, or %NULL
* @user_data: Data to pass to the load callback * @user_data: Data to pass to the load callback
* *
* This function reads a single image file which contains multiple images internally. * This function reads a single image file which contains multiple images internally.

View File

@ -204,17 +204,17 @@ split_on_whitespace (const gchar *s)
/** /**
* st_theme_node_new: * st_theme_node_new:
* @context: the context representing global state for this themed tree * @context: the context representing global state for this themed tree
* @parent_node: (allow-none): the parent node of this node * @parent_node: (nullable): the parent node of this node
* @theme: (allow-none): a theme (stylesheet set) that overrides the * @theme: (nullable): a theme (stylesheet set) that overrides the
* theme inherited from the parent node * theme inherited from the parent node
* @element_type: the type of the GObject represented by this node * @element_type: the type of the GObject represented by this node
* in the tree (corresponding to an element if we were theming an XML * in the tree (corresponding to an element if we were theming an XML
* document. %G_TYPE_NONE means this style was created for the stage * document. %G_TYPE_NONE means this style was created for the stage
* actor and matches a selector element name of 'stage'. * actor and matches a selector element name of 'stage'.
* @element_id: (allow-none): the ID to match CSS rules against * @element_id: (nullable): the ID to match CSS rules against
* @element_class: (allow-none): a whitespace-separated list of classes * @element_class: (nullable): a whitespace-separated list of classes
* to match CSS rules against * to match CSS rules against
* @pseudo_class: (allow-none): a whitespace-separated list of pseudo-classes * @pseudo_class: (nullable): a whitespace-separated list of pseudo-classes
* (like 'hover' or 'visited') to match CSS rules against * (like 'hover' or 'visited') to match CSS rules against
* *
* Creates a new #StThemeNode. Once created, a node is immutable. Of any * Creates a new #StThemeNode. Once created, a node is immutable. Of any
@ -3536,7 +3536,7 @@ st_theme_node_adjust_for_height (StThemeNode *node,
/** /**
* st_theme_node_adjust_preferred_width: * st_theme_node_adjust_preferred_width:
* @node: a #StThemeNode * @node: a #StThemeNode
* @min_width_p: (inout) (allow-none): the minimum width to adjust * @min_width_p: (inout) (nullable): the minimum width to adjust
* @natural_width_p: (inout): the natural width to adjust * @natural_width_p: (inout): the natural width to adjust
* *
* Adjusts the minimum and natural width computed for an actor by * Adjusts the minimum and natural width computed for an actor by
@ -3603,7 +3603,7 @@ st_theme_node_adjust_for_width (StThemeNode *node,
/** /**
* st_theme_node_adjust_preferred_height: * st_theme_node_adjust_preferred_height:
* @node: a #StThemeNode * @node: a #StThemeNode
* @min_height_p: (inout) (allow-none): the minimum height to adjust * @min_height_p: (inout) (nullable): the minimum height to adjust
* @natural_height_p: (inout): the natural height to adjust * @natural_height_p: (inout): the natural height to adjust
* *
* Adjusts the minimum and natural height computed for an actor by * Adjusts the minimum and natural height computed for an actor by
@ -3815,8 +3815,8 @@ st_theme_node_geometry_equal (StThemeNode *node,
/** /**
* st_theme_node_paint_equal: * st_theme_node_paint_equal:
* @node: (allow-none): a #StThemeNode * @node: (nullable): a #StThemeNode
* @other: (allow-none): a different #StThemeNode * @other: (nullable): a different #StThemeNode
* *
* Check if st_theme_node_paint() will paint identically for @node as it does * Check if st_theme_node_paint() will paint identically for @node as it does
* for @other. Note that in some cases this function may return %TRUE even * for @other. Note that in some cases this function may return %TRUE even

View File

@ -1173,7 +1173,7 @@ remove_class_name (gchar **class_list,
/** /**
* st_widget_set_style_class_name: * st_widget_set_style_class_name:
* @actor: a #StWidget * @actor: a #StWidget
* @style_class_list: (allow-none): a new style class list string * @style_class_list: (nullable): a new style class list string
* *
* Set the style class name list. @style_class_list can either be * Set the style class name list. @style_class_list can either be
* %NULL, for no classes, or a space-separated list of style class * %NULL, for no classes, or a space-separated list of style class
@ -1316,7 +1316,7 @@ st_widget_has_style_pseudo_class (StWidget *actor,
/** /**
* st_widget_set_style_pseudo_class: * st_widget_set_style_pseudo_class:
* @actor: a #StWidget * @actor: a #StWidget
* @pseudo_class_list: (allow-none): a new pseudo class list string * @pseudo_class_list: (nullable): a new pseudo class list string
* *
* Set the style pseudo class list. @pseudo_class_list can either be * Set the style pseudo class list. @pseudo_class_list can either be
* %NULL, for no classes, or a space-separated list of pseudo class * %NULL, for no classes, or a space-separated list of pseudo class
@ -1382,7 +1382,7 @@ st_widget_remove_style_pseudo_class (StWidget *actor,
/** /**
* st_widget_set_style: * st_widget_set_style:
* @actor: a #StWidget * @actor: a #StWidget
* @style: (allow-none): a inline style string, or %NULL * @style: (nullable): a inline style string, or %NULL
* *
* Set the inline style string for this widget. The inline style string is an * Set the inline style string for this widget. The inline style string is an
* optional ';'-separated list of CSS properties that override the style as * optional ';'-separated list of CSS properties that override the style as
@ -2051,7 +2051,7 @@ st_widget_real_navigate_focus (StWidget *widget,
/** /**
* st_widget_navigate_focus: * st_widget_navigate_focus:
* @widget: the "top level" container * @widget: the "top level" container
* @from: (allow-none): the actor that the focus is coming from * @from: (nullable): the actor that the focus is coming from
* @direction: the direction focus is moving in * @direction: the direction focus is moving in
* @wrap_around: whether focus should wrap around * @wrap_around: whether focus should wrap around
* *
@ -2270,7 +2270,7 @@ st_widget_set_label_actor (StWidget *widget,
/** /**
* st_widget_set_accessible_name: * st_widget_set_accessible_name:
* @widget: widget to set the accessible name for * @widget: widget to set the accessible name for
* @name: (allow-none): a character string to be set as the accessible name * @name: (nullable): a character string to be set as the accessible name
* *
* This method sets @name as the accessible name for @widget. * This method sets @name as the accessible name for @widget.
* *
@ -2845,8 +2845,8 @@ st_widget_get_focus_chain (StWidget *widget)
* st_get_align_factors: * st_get_align_factors:
* @x_align: an #StAlign * @x_align: an #StAlign
* @y_align: an #StAlign * @y_align: an #StAlign
* @x_align_out: (out) (allow-none): @x_align as a #gdouble * @x_align_out: (out) (optional): @x_align as a #gdouble
* @y_align_out: (out) (allow-none): @y_align as a #gdouble * @y_align_out: (out) (optional): @y_align as a #gdouble
* *
* Converts @x_align and @y_align to #gdouble values. * Converts @x_align and @y_align to #gdouble values.
*/ */

View File

@ -80,7 +80,7 @@ struct _StWidgetClass
/** /**
* StWidgetClass::navigate_focus: * StWidgetClass::navigate_focus:
* @self: the "top level" container * @self: the "top level" container
* @from: (allow-none): the actor that the focus is coming from * @from: (nullable): the actor that the focus is coming from
* @direction: the direction focus is moving in * @direction: the direction focus is moving in
*/ */
gboolean (* navigate_focus) (StWidget *self, gboolean (* navigate_focus) (StWidget *self,

View File

@ -230,7 +230,11 @@ if test "x$system" = xFedora ; then
if test ! "x$missing" = x; then if test ! "x$missing" = x; then
echo -n "Installing packages ... " echo -n "Installing packages ... "
gpk-install-package-name $missing missing_str=
for pkg in $missing ; do
missing_str="$missing_str${missing_str:+,}\"$pkg\""
done
gdbus call -e -d org.freedesktop.PackageKit -o /org/freedesktop/PackageKit -m org.freedesktop.PackageKit.Modify.InstallPackageNames 0 "[$missing_str]" "hide-finished,show-warnings"
echo "done" echo "done"
fi fi
fi fi

View File

@ -18,7 +18,7 @@
# Only rebuild modules that have changed # Only rebuild modules that have changed
build_policy = 'updated' build_policy = 'updated'
moduleset = 'gnome-apps-3.12' moduleset = 'gnome-apps-3.14'
modules = [ 'meta-gnome-core-shell' ] modules = [ 'meta-gnome-core-shell' ]