Compare commits

...

140 Commits

Author SHA1 Message Date
fab02ae82f Bump version to 3.8.2
Update NEWS.
2013-05-14 01:33:19 +02:00
d43c5ec27a shellEntry: Set the input-purpose property for password entries
This way input methods can disable themselves automatically for
entries holding passwords.

https://bugzilla.gnome.org/show_bug.cgi?id=700043
2013-05-14 00:40:27 +02:00
f7de35b852 st-entry: add input purpose and hints
Add input-purpose and input-hints properties to StEntry,
and pass these on to StIMText.

https://bugzilla.gnome.org/show_bug.cgi?id=691392
2013-05-14 00:40:18 +02:00
cde0045851 st-im-text: add input purpose and hints
Add input-purpose and input-hints properties to StIMText,
and pass these on to GtkIMContext.

https://bugzilla.gnome.org/show_bug.cgi?id=691392
2013-05-14 00:40:15 +02:00
f844613292 st-im-text: remove undefined st_im_text_set_autoshow_im decl
https://bugzilla.gnome.org/show_bug.cgi?id=691392
2013-05-14 00:40:11 +02:00
ff2e44de53 status/keyboard: Stop destroying the IBusBus object
This is a singleton object inside libibus which means that if we
destroy it (e.g. because ibus-daemon got restarted) then, other
library users, like the ibus gtk+ IM module that we also use
in-process, will break.

https://bugzilla.gnome.org/show_bug.cgi?id=699189
2013-05-14 00:34:55 +02:00
17aa8e0488 polkitAgent: Allow retrying mistyped passwords
Don't hide the polkit agent window when someone mistypes their password.
Allow them to try again. The user can cancel at any point.

https://bugzilla.gnome.org/show_bug.cgi?id=684431
2013-05-13 20:08:34 +02:00
a33df9b046 appDisplay: Implement folder keynav and shortcuts
When opening an application folder, it should take key focus to
allow for keynav; also, Escape closing both folder and app picker
is unexpected, it should only close the popup.

https://bugzilla.gnome.org/show_bug.cgi?id=695314
2013-05-13 19:46:16 +02:00
c25f399f7c Updated Norwegian bokmål translation 2013-05-13 09:48:12 +02:00
bd47d07fbc ScreenShield: clear the lock screen early when deactivating
Upon popMode, MessageTray will try readding all notifications
to their rightful parent, so we must tell NotificationBox to
relinquish them before st_bin_set_child() fails (leaving a dangling
child pointer and crashing at the next allocation)

https://bugzilla.gnome.org/show_bug.cgi?id=698812
2013-05-12 20:20:36 +02:00
72282237e1 data: Fix typo in Screencast docs 2013-05-10 23:44:14 +02:00
dfb44aa51d Expose screencast functionality via DBus
Like screenshots, the screen recorder can be a useful tool in other cases
than being triggered by a keyboard shortcut. To account for that, export
a Screencast DBus API similar to the existing Screenshot interface.

https://bugzilla.gnome.org/show_bug.cgi?id=696247
2013-05-10 19:49:41 +02:00
5516cad087 sessionMode: Add 'allowScreencast' property
Our built-in screen recorder is implemented as a component, so it will
just be disabled when the session mode doesn't allow screencasting.
However we will expose screencasting functionality on DBus as well, and
while it makes sense to restrict its availablity to the same modes as
the existing recorder, exporting/unexporting the service depending on
the session mode is not very consumer friendly.
For that reason, add an additional 'allowScreencast' property that for now
mirrors the availability of the 'recorder' component.

https://bugzilla.gnome.org/show_bug.cgi?id=696247
2013-05-10 19:49:41 +02:00
ab60c31629 shell-recorder: Make drawing the cursor optional
As with screenshots, showing the cursor in a recording may not be
desirable, so add a property to control whether the cursor is drawn
or not.

https://bugzilla.gnome.org/show_bug.cgi?id=696247
2013-05-10 19:49:41 +02:00
52dd030087 shell-recorder: Support specifying the recorded area
Currently we will always record the entire screen. It has been requested
to support recording a specified area analogous to the screenshot API as
well, so add a set_area() method which allows this.

https://bugzilla.gnome.org/show_bug.cgi?id=696247
2013-05-10 19:49:41 +02:00
98240c2857 shell-recorder: Optionally return the filename of the recording
It is currently not always possible to predict the actual output filename
of a recording - the file-template does not necessarily use an absolute
path and may contain %d and %t escape sequences.
This is OK for fire-and-forget uses like the existing keyboard shortcut,
but we will soon expose the functionality on DBus and consumers of that
API might very well need to access the file after the recording. So do
the same as our screenshot API and add an optional (out) parameter to
record().

https://bugzilla.gnome.org/show_bug.cgi?id=696247
2013-05-10 19:49:41 +02:00
65bfd6c6d2 Don't put non-Shell windows in Ctrl+Alt+Tab if they wouldn't be visible
Metacity's Ctrl+Alt+Tab would include X11 windows
with hints like GDK_WINDOW_TYPE_HINT_DOCK and
GDK_WINDOW_TYPE_HINT_DESKTOP (there are more conditions, but that's a
good start). If we're in normal mode, those are visible and it's OK
to display those in the Ctrl+Alt+Tab order, but if we're in the lock
screen or the unlock dialog, they're not visible and it doesn't make
sense to focus them.

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=699862
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Florian Müllner <fmuellner@gnome.org>
2013-05-09 19:31:08 +01:00
1034e33c35 modalDialog: Show spinner when working
Use the same UI concept from the login screen to show spinners when
the polkit or keyring dialogs are working

https://bugzilla.gnome.org/show_bug.cgi?id=684438
2013-05-09 06:41:07 +02:00
d7528b878c components: Allow cancelling of dialog between prompts
Some callers of the keyring prompt keep the dialog up while
processing the prompt. Allow the user to cancel the prompt
while in this state.

This is propagated to the caller, who can cancel the operation
in question when this occurs.

https://bugzilla.gnome.org/show_bug.cgi?id=682830
2013-05-09 05:55:15 +02:00
eb2e66c539 network: don't use active connections that are in invalid states
Only ACTIVE or ACTIVATING connections are important when deciding
what icon to show, don't fallback on any, possibly invalid or deactivating,
active connection object.

https://bugzilla.gnome.org/show_bug.cgi?id=676285
2013-05-09 00:05:36 +02:00
30e9a2a7d0 keyring: Fix button disabled when prompting for confirmation
https://bugzilla.gnome.org/show_bug.cgi?id=696304
2013-05-08 22:13:56 +02:00
e842694316 st-shadow: Fix offset shadow offscreen rendering
The shadows are currently rendered by painting the actor we want to
apply shadow on, in an offscreen buffer. The problem is that when this
actor has an allocation padding (ie allocation that isn't at 0x0
relatively to its parent), this padding is added within the offscreen
buffer and as a result the shadow rendering is truncated because the
offscreen buffer size is the size of the allocation box, not the
allocation box + padding.

This patch reposition the actor at 0x0 with rendering it by changing
the initial transformation matrix when rendering the actor offscreen.

https://bugzilla.gnome.org/show_bug.cgi?id=698301
2013-05-08 16:16:07 +01:00
b33d87a762 loginDialog: Adjust logoBin to modalDialog changes
With modalDialogs' backgroundStack using a BinLayout now, we need
to set approriate expand flags on the iconBin.

https://bugzilla.gnome.org/show_bug.cgi?id=699877
2013-05-08 00:09:53 +02:00
0ff3599d91 modalDialog: Replace Shell.Stack with layout manager
Commit e98eb57e3e added flags to expand the dialog's background
stack, which works fine with the current clutter-1.16 branch, but
breaks on clutter-1.14 (as shipped with GNOME 3.8).
Using an St.Widget with a Clutter.BinLayout fixes this, and is more
modern Clutter usage.

https://bugzilla.gnome.org/show_bug.cgi?id=699877
2013-05-08 00:09:53 +02:00
28d79a1235 osdWindow: Allow popup to grow if necessary
The popup currently has a fixed size based on monitor size. As a result,
the popup's content may overflow if its minimum size is larger than the
popup size. To prevent this, use min-width/min-height for the popup size
so that the popup can grow if necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=696523
2013-05-07 21:35:47 +02:00
522d21154b loginDialog: Remove logo in upper left corner
With optional branding now being shown below the user list, we can
remove the unloved instance in the upper left corner ...

https://bugzilla.gnome.org/show_bug.cgi?id=694912
2013-05-07 20:52:04 +02:00
7c231916c1 loginDialog: (Optionally) show logo below user list
The optional logo on the login screen is currently shown in the
top bar, which is not only a rather unprominent position, it also
gives the wrong suggestion of a clickable element.
Newer designs call for the logo to be shown horizontally centered
at the bottom of the screen, so implement that instead.

https://bugzilla.gnome.org/show_bug.cgi?id=694912
2013-05-07 20:52:04 +02:00
a40bb67fc6 modalDialog: Always use a stack for the background
Currently a system modal dialog's actor hierarchy depends on whether
events should be blocked while the dialog is shown or not. Change
it to always contain a stack, to allow subclasses to add additional
background elements.

https://bugzilla.gnome.org/show_bug.cgi?id=694912
2013-05-07 20:52:04 +02:00
4c350b90c7 dateMenu: do not show "Open Calendar" button with no installed calendar application
https://bugzilla.gnome.org/show_bug.cgi?id=697725
2013-05-06 15:59:17 +01:00
47dee22b05 gdm: Fix regression where domain login hint not shown
Also only keep around realmd while we're actually using it, allow it
to quit if no other clients are active.

https://bugzilla.gnome.org/show_bug.cgi?id=698200
2013-05-03 21:55:45 +02:00
13c0e575f6 ctrlAltTab: Use a symbolic icon for desktop windows
The nautilus icon sticks out pretty badly among the symbolic
icons we use for other desktop components. This commit finds
windows of type DESKTOP, and uses the video-display-symbolic
icon for them.
https://bugzilla.gnome.org/show_bug.cgi?id=697914
2013-05-03 10:27:01 -04:00
ea8736b13a AppMenuButton: Improve handling of signals
If for some reason an extension needs to destroy the AppMenu object,
currently it is not possible to do this cleanly due to these signals
remaining connected.

https://bugzilla.gnome.org/show_bug.cgi?id=698531
2013-05-01 18:33:31 +10:00
303d53e7f5 StIcon: use g_signal_connect_object() for safety
Prevent a crash in case an icon is destroyed before the texture
finishes loading, and something else is keeping the texture alive
for any reason.

https://bugzilla.gnome.org/show_bug.cgi?id=696720
2013-04-29 00:26:51 +02:00
31295dfe83 Updated Lithuanian translation 2013-04-28 13:36:38 +03:00
69ea4553cb dateMenu: append .desktop to evolution strings
Since that is what the actual app_id's are.
2013-04-27 08:32:23 +10:00
0d8d77356e PopupMenuManager: Close active menu when another one opens
We already do this when navigating between menus via mouse or
keynav, but miss cases where a menu is opened by other means,
for instance via a keyboard shortcut.

https://bugzilla.gnome.org/show_bug.cgi?id=686756
2013-04-26 18:16:14 +02:00
8b78032248 panel: Change openAppMenu() to a toggle action
It makes sense to allow closing the app menu with the same shortcut
that is used to open it, so make it a toggle action and allow it
TOPBAR_POPUP mode.

https://bugzilla.gnome.org/show_bug.cgi?id=686756
2013-04-26 18:16:13 +02:00
ad277a563c panel: Add keybinding mode for top bar popups and use it
Allow some keybindings to still work while a top bar menu is open
by assigning it a keybinding mode.

https://bugzilla.gnome.org/show_bug.cgi?id=698938
2013-04-26 18:16:13 +02:00
db26fb201e popupMenu: Allow setting grabHelper params for PopupMenuManager
Currently all keybindings are disabled while some popup menu is open.
However some keybindings may still be useful in some cases, so expose
GrabHelper's modal params parameter to allow specifying a keybinding
mode for particular menus.

https://bugzilla.gnome.org/show_bug.cgi?id=698938
2013-04-26 18:16:13 +02:00
9f00be50d6 shellDBus: Fix Eval() return value when disabled
Eval() is expected to return a boolean success value and a string result.
However when the function is disabled (via the development-tools setting),
we return null for the latter which is not a valid string value.
Return an empty string instead.

https://bugzilla.gnome.org/show_bug.cgi?id=698959
2013-04-26 18:16:12 +02:00
77d21e53d0 backgroundMenu: Ignore releases when using long-press
Otherwise, a release from the long-press will be seen as a
button event that should close the menu.

https://bugzilla.gnome.org/show_bug.cgi?id=697203
2013-04-26 11:24:30 -04:00
ba0b4ba590 layout: Correct hot corner barriers in RTL layouts
https://bugzilla.gnome.org/show_bug.cgi?id=698884
2013-04-26 11:24:25 -04:00
b9fc7a3050 [l10n] Add Interlingua translation 2013-04-24 15:52:53 +02:00
aa053a906d [l10n] Updated Turkish translation 2013-04-20 00:48:22 +03:00
2cda0472bd Bump version to 3.8.1
Update NEWS.
2013-04-16 21:25:54 +02:00
4710753700 panel: Pick up spinner icon from CSS
In order to use a different spinner image in classic mode (or any
other mode specific style), get it from CSS rather than hardcoding
a particular image.

https://bugzilla.gnome.org/show_bug.cgi?id=693688
2013-04-16 19:10:40 +02:00
2b439ef209 theme-node: Add lookup_url/get_url() methods
Similar to the existing generic getter methods, add lookup functions
for URL properties like the standard background-image/border-image
properties.

https://bugzilla.gnome.org/show_bug.cgi?id=693688
2013-04-16 19:10:40 +02:00
2fc76e6d9e panel: Pass a full pathname to AnimatedIcon
For classic mode, we want to use a different styling for the spinner,
so we will pick up the image filename from CSS to make use of mode
specific styling. As the CSS will give us a full pathname, adapt the
API to take a full pathname instead of building it inside AnimatedIcon
from the passed basename.

https://bugzilla.gnome.org/show_bug.cgi?id=693688
2013-04-16 19:10:40 +02:00
ff544450a5 Revert "classic: Invert the spinner color"
This reverts commit f358bb1a96.
2013-04-15 18:40:00 -04:00
b4590da686 Revert "Add an OSD for sticky modifiers"
This reverts commit 96994721ef.
2013-04-15 18:39:52 -04:00
6c4be0311a Revert "Make it possible to always show the a11y status"
This reverts commit 6ce79c62eb.
2013-04-15 18:39:44 -04:00
4a2cdc20f0 Add networkAgent to initial-setup mode
We want to be able to set up e.g. a WEP connection on the
network page of gnome-initial-setup, so we need a network
agent in the session.
2013-04-15 18:05:57 -04:00
6ce79c62eb Make it possible to always show the a11y status
A switch for this is part of the redesign for the universal
access control-center panel.

https://bugzilla.gnome.org/show_bug.cgi?id=698001
2013-04-15 17:48:47 -04:00
96994721ef Add an OSD for sticky modifiers
This commit adds an OSD that displays which modifiers are
currently latched or locked. This is commonly used together
with sticky keys.
https://bugzilla.gnome.org/show_bug.cgi?id=647711
2013-04-15 17:48:47 -04:00
f358bb1a96 classic: Invert the spinner color
https://bugzilla.gnome.org/show_bug.cgi?id=693688
2013-04-15 17:48:47 -04:00
1bce210c51 messageTray: Don't show the context-menu when the tray isn't open
https://bugzilla.gnome.org/show_bug.cgi?id=697709
2013-04-15 12:49:30 -04:00
8a3c8d1b1c Add a note to POTFILES.in about the gvc submodule 2013-04-14 21:59:03 +02:00
08b224de1f Updated Vietnamese translation 2013-04-13 17:53:05 +10:00
86c92c37d2 st-im-text: Override ClutterText's cursor_event to set cursor position
This is both more efficient and accurate than doing it from the paint
vfunc.

https://bugzilla.gnome.org/show_bug.cgi?id=697722
2013-04-10 17:27:28 +02:00
07053c3df7 shellEntry: Remove close method
GrabHelper already takes care of putting the key focus back on the
widget that had it when the grab was established.

ShellEntry's close() has recently become harmful since it's now called
from the menu's destroy() method and that is called in the entry's
destroy handler which means that this._entry might no longer be valid
at close() time.

https://bugzilla.gnome.org/show_bug.cgi?id=697560
2013-04-08 21:02:03 +02:00
4fb33c9b09 dnd: Set the position and scale on the drag actor before it's reparented
We need to do this to ensure that it gets the correct scale, as otherwise
the transform that we retrieve will be incorrect.

https://bugzilla.gnome.org/show_bug.cgi?id=697504
2013-04-08 14:57:49 -04:00
5e6a25c3c2 dnd: Set the scale on the drag actor
The actor is the same as the drag actor in this case, but we tend to
set properties on the drag actor and get them from the actor elsewhere
in this codepath. Make this consistent.

https://bugzilla.gnome.org/show_bug.cgi?id=697504
2013-04-08 14:57:49 -04:00
e14ef4a294 theme: remove excessive padding from notification buttons
Set the button width manually and remove the huge horizontal
padding we had. This means that long button labels don't get cut
off.

https://bugzilla.gnome.org/show_bug.cgi?id=664411
2013-04-08 19:25:46 +02:00
8b659f0f4c St: support -st-natural-width/height CSS properties
It is sometimes desirable to specify the size of a box from CSS without
changing the minimum-width too.
This property implements that.

https://bugzilla.gnome.org/show_bug.cgi?id=664411
2013-04-08 19:25:45 +02:00
a6395c95d4 Small fix in Serbian translation 2013-04-08 15:29:57 +02:00
98e74dfd38 screenshield: Remove box-shadow
This causes very low performance in some situations (like multiscreen). Proper
fixes are too invasive at this point (3.8.1) so lets just remove the shadow
for now and add it back later once he have fixed it.

https://bugzilla.gnome.org/show_bug.cgi?id=697274
2013-04-07 22:06:46 +02:00
1d728186db recorder: Enable the keybinding for all modes
There's not really a good reason to restrict the screen recorder
to normal mode and overview, so allow it for all keybinding modes.

https://bugzilla.gnome.org/show_bug.cgi?id=696200
2013-04-07 21:13:30 +02:00
2499f2ed80 AppSwitcherPopup: Activate only the selected window if any
If there's an explicitly selected window thumbnail we should bring up
only that particular window instead of all the application's windows.

https://bugzilla.gnome.org/show_bug.cgi?id=697480
2013-04-07 21:05:38 +02:00
963905adcd runDialog: don't destroy on close
It's a singleton like the endSessionDialog

https://bugzilla.gnome.org/show_bug.cgi?id=697435
2013-04-06 11:10:30 -04:00
7c21ab0985 Revert "Revert "modalDialog: Destroy dialogs on close""
This reverts commit 007820b7c1.

(I only meant to revert that in my local branch)
2013-04-06 10:53:11 -04:00
77d3712261 popupMenu: close menu on destroy
This fixes a crash if a background menu is open
and the background changes.

https://bugzilla.gnome.org/show_bug.cgi?id=697432
2013-04-06 10:47:16 -04:00
0376f22d41 background: stop monitoring file after removing from cache
https://bugzilla.gnome.org/show_bug.cgi?id=697395
2013-04-06 10:45:53 -04:00
007820b7c1 Revert "modalDialog: Destroy dialogs on close"
This reverts commit 3dd6113a0a.
2013-04-06 10:28:47 -04:00
dc98711477 backgroundMenu: drop cursor object with rest of menu actors
https://bugzilla.gnome.org/show_bug.cgi?id=697395
2013-04-06 09:45:45 -04:00
e98c6ff31b background: when updating image remove old one from cache
We're removing the new content from the cache instead of the
old content.

This commit fixes that.

https://bugzilla.gnome.org/show_bug.cgi?id=697395
2013-04-06 09:44:51 -04:00
9eae74357a background: don't leak background objects during quick changes
We currently let some backgrounds "fall through the cracks" if
a bunch of change notifications come in at once.

This commit fixes that.

https://bugzilla.gnome.org/show_bug.cgi?id=697395
2013-04-06 09:44:50 -04:00
1ee88a2878 screenShield: Ensure we destroy background container widgets
We may accidentally leak a widget when monitors change while
locked otherwise. This is especially bad because we put a
box-shadow on this widget.

https://bugzilla.gnome.org/show_bug.cgi?id=697300
2013-04-04 19:16:49 -04:00
14189e6827 shellEntry: Destroy entry menus when the entry actors are destroyed
This ensures that a menu and manager aren't sticking around.

https://bugzilla.gnome.org/show_bug.cgi?id=697295
2013-04-04 15:04:14 -04:00
3dd6113a0a modalDialog: Destroy dialogs on close
It turns out that we never destroyed modal dialogs when closing
them, causing them to still linger in the scene graph even when
there were no references to them in the JS. The one case where
we don't want to destroy modal dialogs after being closed is
endSessionDialog, so provide a parameter that allows classes
to override this behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=697295
2013-04-04 15:04:14 -04:00
ae5cdea5af Updated Norwegian bokmål translation 2013-04-03 13:31:44 +02:00
3c1f389e25 backgroundMenu: destroy menu when actor is destroyed
This fixes a leak.

https://bugzilla.gnome.org/show_bug.cgi?id=697119
2013-04-02 23:20:15 -04:00
284d821233 Updated Basque language 2013-04-02 21:59:27 +02:00
78272e5592 RemoteSearch: don't sort the last explicitly sorted provider last
It's a confusing semantic, and keeping it causes bugs in the control
center panels.

https://bugzilla.gnome.org/show_bug.cgi?id=694974
2013-04-02 21:49:57 +02:00
098bc41083 Updated Polish translation 2013-04-02 15:58:59 +02:00
c837090282 Update Simplified Chinese translation 2013-04-02 00:55:01 +08:00
cdc1678e6f Updated Belarusian translation. 2013-04-01 15:22:56 +03:00
2a3d76b0cc Update Arabic translation 2013-03-31 23:08:29 +02:00
29e89491de Updated British English translation 2013-03-29 16:07:45 +00:00
d63947aec4 Silly typo in calendar.js
https://bugzilla.gnome.org/show_bug.cgi?id=696436
2013-03-29 16:15:19 +01:00
512f0a67fb shellDBus: Fix SetActive(false) for ScreenSaver DBus API
Someone changed .unlock() to deactivate() for the obvious symmetry
with activate(), but forgot to update it here.

https://bugzilla.gnome.org/show_bug.cgi?id=696585
2013-03-29 10:13:24 -04:00
a7cd4657f5 loginManager.js: Check for logind, not for systemd
It is possible to build systemd without logind, in which case
/sys/fs/cgroup/systemd would still exist. Check for /run/systemd/seats instead,
as recommended by systemd upstream.

For details, see:
<https://mail.gnome.org/archives/desktop-devel-list/2013-March/msg00092.html>

https://bugzilla.gnome.org/show_bug.cgi?id=696252
2013-03-29 11:00:52 +01:00
bf02cde598 altTab: Move input focus to target window before dropping the grab
We chain up on _finish() to drop the grab and destroy the switcher
popup but we should activate the target window first because dropping
the grab results in the previously focused windows getting a focus in
event immediately followed by the focus out event from the target
window activation which we can easily avoid.

https://bugzilla.gnome.org/show_bug.cgi?id=696259
2013-03-28 16:17:07 +01:00
b7dbb35546 Updated Aragonese translation 2013-03-28 11:11:10 +01:00
6fd5f0e3de popupMenu: Fix another child popup regression
When switching menus, we need to make sure we close all existing
grabs, not just the first one.

https://bugzilla.gnome.org/show_bug.cgi?id=695859
2013-03-27 16:32:42 -04:00
e6469df065 popupMenu: Fix a missed rename
this._activeMenu was changed to this.activeMenu, but this wasn't
updated by accident.

https://bugzilla.gnome.org/show_bug.cgi?id=695859
2013-03-27 16:32:42 -04:00
d61fe357f6 layout: Clip the window group when doing the startup animation
This ensures that when we have windows that are already visible,
like desktop icons, they don't fly across the screen from what
seems to be hyperspace to get into view.

https://bugzilla.gnome.org/show_bug.cgi?id=696323
2013-03-27 16:30:00 -04:00
965dd2ab67 Bump version to 3.8.0.1
Update NEWS.
2013-03-27 12:28:56 -04:00
78e011d558 background: fix multimonitor background placement in overview
This is like the previous commit but for monitor index, instead
of effects.

https://bugzilla.gnome.org/show_bug.cgi?id=696712
2013-03-27 12:13:47 -04:00
76590d6c69 background: fix vignette in overview
We no longer apply background effects when loading backgrounds.

This commit fixes that.

https://bugzilla.gnome.org/show_bug.cgi?id=696712
2013-03-27 12:09:02 -04:00
16dc6ce41a Bump version to 3.8.0
Update NEWS.
2013-03-26 22:29:57 +01:00
1dadcee5c9 background: don't choke on huge slide show durations
if a slideshow file has a really large duration we'll currently
throw an exception.

This bug is aggravated by the fact that some versions of
gnome-desktop use UINT_MAX as a sentinel value to mean,
"don't ever update slide".

This commit treats durations that would overflow as infinitely
long.

https://bugzilla.gnome.org/show_bug.cgi?id=696157
2013-03-26 17:02:05 -04:00
bed3bb45f7 background: don't load the same image more than once concurrently
If a background gets requested from the cache while it's still
being loaded from an earlier call, then there will be two concurrent
loads of the same file.

That concurrency is mitigates the effectiveness of the cache and
also causes leaks.

This commit consolidates file loads so that concurrency doesn't
happen.

https://bugzilla.gnome.org/show_bug.cgi?id=696157
2013-03-26 17:02:05 -04:00
18d850d7d6 workspaceThumbnail: always destroy bgManager when destroyed
Right now we only destroy the bgManager object when the
workspaceThumbnail is explicitly destroy with its destroy()
method.

This commit makes sure bgManager gets destroyed when the
workspaceThumbnail actor is destroyed without calling
destroy().

https://bugzilla.gnome.org/show_bug.cgi?id=696157
2013-03-26 17:02:05 -04:00
f920fd8b6f background: properly disconnect background signals
BackgroundManager connects to the changed signal in
the backgrounds it manages.

The signal ids for the changed signal connectionss are stored
as state on the background manager object.

If the background being managed changes while the manager
is still loading the old background, then the signal id
variable can get out of sync with the background object being
managed.

This commit ties the signal id to the background objects themselves,
so there is no opportunity for them to desynchronize.

https://bugzilla.gnome.org/show_bug.cgi?id=696157
2013-03-26 17:02:05 -04:00
b9da6d9ef6 background: When updating actor content, evict old content from cache
Normally backgrounds get evicted from the cache when their actor is
destroyed.  If the actor changes content without destroying itself,
though, we should evict the old content from the cache, too.

https://bugzilla.gnome.org/show_bug.cgi?id=696157
2013-03-26 17:02:04 -04:00
3be489c69e background: always add content to cache
We currently only add the first instance of a background
to the cache.  This means if the actor associated with that
background is destroyed, the content will be evicted and
it will need to get reloaded, even if it's already loaded
on another actor.

This commit ensures every content gets added to the cache.

https://bugzilla.gnome.org/show_bug.cgi?id=696157
2013-03-26 17:02:04 -04:00
cab092aad7 Updated Telugu Translation 2013-03-26 18:53:24 +05:30
0451cba343 Updated LT translation 2013-03-26 12:40:32 +01:00
12334cd9ad Updated Odia Language along with FUEL implementation 2013-03-26 16:09:27 +05:30
9d18a2dff4 screenShield: Go back to a shorter animation when locking manually
Increasing it was mostly to paper over animation jerkiness which
shouldn't be a problem anymore since we removed the desaturate and
blur effects.

https://bugzilla.gnome.org/show_bug.cgi?id=696380
2013-03-26 09:27:24 +01:00
869e1dc241 loginManager: listen to the correct object path
Use GetSession() to get the valid object path for the current
XDG_SESSION_ID.

https://bugzilla.gnome.org/show_bug.cgi?id=696287
2013-03-25 20:53:13 -04:00
b878f3fc4a Restore visibility of windows in initial-setup mode
gnome-initial-setup runs a regular X window, so we need to show it.

https://bugzilla.gnome.org/show_bug.cgi?id=696235
2013-03-25 18:22:48 -04:00
2aeabcc38b Updated Telugu Translations 2013-03-25 21:53:19 +05:30
94778c0dac layout: Fix opening the overview for xdnd
In the (no barriers) fallback case handleDragOver has somehow
ended up being turned into a nop and thus breaking xdnd
overview opening.

Fix that by calling _toggleOverview() when a xdnd source triggers
it.

https://bugzilla.gnome.org/show_bug.cgi?id=696447
2013-03-25 14:43:22 +01:00
390491b37a dateMenu: Re-add special-casing of evolution-calendar
When commit 724a2bd7 changed the way to determine the default
calendar app, it dropped all special handling of evolution.
Unfortunately we still need it to not end up with the default
mail component, so add it back.

https://bugzilla.gnome.org/show_bug.cgi?id=696432
2013-03-25 10:43:30 +01:00
f8ea825577 grabHelper: Consider events that release the grab handled
Currently, if a button-press event results in releasing the last modal
grab (e.g. clicks outside the grabbed actors), we don't consider the
event handled and allow its emission to continue. If we consider
dismissing a grab as an action of its own, any additional action
triggered by the same event becomes an unexpected side effect.
Tweak the capture handler accordingly.

https://bugzilla.gnome.org/show_bug.cgi?id=696422
2013-03-25 10:43:29 +01:00
f77ad7d184 Completed for Malayalam 2013-03-25 14:58:55 +05:30
e467a53def Uploaded Ukranian 2013-03-25 08:00:49 +02:00
9cd2e12915 l10n: Update Japanese translation 2013-03-25 12:10:39 +09:00
627a6587b4 Update Danish translation 2013-03-24 14:57:24 +01:00
9b3b419f7a initial-setup: Add battery icon
There is no reason why there shouldn't be a battery icon in initial-setup,
knowing how much battery you have left is useful in during setup as well.

This also fixes an exception in the lock screen caused by the combined icon
not finding the battery one.

https://bugzilla.gnome.org/show_bug.cgi?id=696212
2013-03-24 09:39:34 +01:00
f37ed44837 Updated Dutch translation 2013-03-23 23:35:30 +01:00
dddc333407 Updated Belarusian translation. 2013-03-23 23:04:07 +03:00
75714fb784 Added slovak translation 2013-03-23 21:01:35 +01:00
5a6342a5fe Updated kn translations 2013-03-23 19:00:18 +05:30
e07379b406 Revert "Remove non-existing file to make intltool happy"
This reverts commit 54bfe34273.

see 8f1df14ae7
-> It very much exists. Do a 'git submodule init && git submodule update'.
2013-03-23 13:35:47 +01:00
54bfe34273 Remove non-existing file to make intltool happy 2013-03-23 12:49:36 +01:00
bef876e4b4 Updated kn translations 2013-03-23 14:44:25 +05:30
6ef9ab6a0b st-scroll-view-fade: Don't fade out gradient
The changes from commit b4f5f1e461 and b394d184cc increased the
instructions required for the fade fragment shader. This is over the limit
for some hardware (like intel gen3), which causes the driver to fallback
to software rendering for the shader. The result is that painting a scrollview
that has a fade effect takes around 30 (!!) seconds.

So lets go back to the old effect for 3.8 until we find a solution.

https://bugzilla.gnome.org/show_bug.cgi?id=696404
2013-03-22 19:56:13 +01:00
53ffdd8d68 Updated Russian translation 2013-03-22 21:03:27 +04:00
ba198034cb screenShield: Remove blur and desaturation from lock screen
There's large performance issues with both the blur and desaturation
that make the screen shield hard to use on slower computers, and this
has always been a temporary stopgap until the user can pick a different
image for the lock screen.

https://bugzilla.gnome.org/show_bug.cgi?id=696322
2013-03-22 12:36:43 -04:00
58e66b9e1b autorunManager: Mark the Removable Devices source as resident
This ensures that it can't be removed when we clear the message
tray.

https://bugzilla.gnome.org/show_bug.cgi?id=696199
2013-03-22 12:36:43 -04:00
ac7efcb43a hindi translation 2013-03-22 18:00:09 +05:30
b514b9ec7c Tamil Translations Updated 2013-03-22 17:23:06 +05:30
f69942eb35 Updated Odia Translation. 2013-03-21 18:18:27 +05:30
f28827f625 Updated Marathi Translations 2013-03-21 09:27:22 +05:30
f20a6b3635 Updated Hungarian translation 2013-03-20 16:40:57 +01:00
7f7ff3ce3e L10N: Updated Persian Translation 2013-03-20 09:22:41 +03:30
0abb0756ba [l10n] Added Tadjik translation 2013-03-19 20:43:49 +01:00
070ed9396c Update French translation 2013-03-19 11:43:32 +01:00
91 changed files with 20380 additions and 10831 deletions

87
NEWS
View File

@ -1,3 +1,90 @@
3.8.2
=====
* Fix hotcorner regression in RTL locales [Jasper; #698884]
* Allow some keybindings to work while a top bar menu is open [Florian; #698938]
* Make open-app-menu keybinding a toggle action [Florian; #686756]
* ctrlAltTab: Use symbolic icons for desktop windows [Matthias; #697914]
* gdm: Fix regression where domain login hint not shown [Stef; #698200]
* Hide "Open Calendar" item when no calendar app is installed [Lionel; #697725]
* Update how branding appears on login screen [Florian; #694912, #699877]
* Allow OSD popups to grow if necessary [Marta; #696523]
* Fix offset of shadow offscreen rendering [Lionel; #698301]
* Fix insensitive button preventing empty keyring password [Stef; #696304]
* Allow cancelling keyring dialog between prompts [Stef; #682830]
* modalDialog: Show spinner while working [Stef; #684438]
* Provide a DBus API for screencasting [Florian; #696247]
* Implement app folder keynav and shortcuts [Florian; #695314]
* polkitAgent: Allow retrying after mistyped passwords [Stef; #684431]
* Add input purpose and hints to StEntry and StIMText [Daiki; #691392]
* Set input-purpose property for password entries [Rui; #700043]
* Misc fixes and cleanups [Jasper, Florian, Giovanni, Tim, Rui; #697203,
#698959, #696720, #698531, #676285, #698812, #699189]
Contributors:
Giovanni Campagna, Matthias Clasen, Lionel Landwerlin, Tim Lunn, Rui Matos,
Simon McVittie, Marta Milakovic, Florian Müllner, Jasper St. Pierre,
Daiki Ueno, Stef Walter
Translations:
Muhammet Kara [tr], Nik Kalach [ia], Žygimantas Beručka [lt],
Kjartan Maraas [nb]
3.8.1
=====
* Clip window group during startup animation [Jasper; #696323]
* Check for logind rather than systemd [Martin; #696252]
* Don't special-case last remote search provider position [Giovanni; #694974]
* Fix memory leaks [Ray, Jasper; ##697119, #697295, #697300, #697395]
* AppSwitcherPopup: Activate only the selected window if any [Rui; #697480]
* Enable screen recorder keybinding in all modes [Florian; #696200]
* Remove box-shadow from screen shield for performance reasons [Adel; #697274]
* Add support for -st-natural-width/height CSS properties [Giovanni; #664411]
* Remove excessive padding from notification buttons [Allan; #664411]
* Fix thumbnail dragging in overview [Jasper; #697504]
* theme-node: Add get_url()/lookup_url() methods [Florian; #693688]
* Misc bug fixes and cleanups [Jasper, Rui, Colin, David, Ray, Matthias:
#695859, #696259, #696585, #696436, #697432, #697435, #697560, #697722,
#697709]
Contributors:
Giovanni Campagna, Matthias Clasen, Allan Day, Adel Gadllah, David Gumberg,
Rui Matos, Florian Müllner, Martin Pitt, Jasper St. Pierre, Ray Strode,
Colin Walters
Translations:
Daniel Martinez [an], Bruce Cowan [en_GB], Khaled Hosny [ar],
Ihar Hrachyshka [be], Aron Xu [zh_CN], Wojciech Szczęsny [pl],
Inaki Larranaga Murgoitio [eu], Kjartan Maraas [nb],
Милош Поповић [sr, sr@latin], Trần Ngọc Quân [vi]
3.8.0.1
=======
* Background bug fixes [Ray; #696712]
3.8.0
=====
* Remove blur and desaturation from lock screen [Jasper; #696322]
* Remove scroll view fade near edges [Adel; #696404]
* dateMenu: Open calendar component when using Evolution [Florian; #696432]
* Fix unlocking on fast user switch [Cosimo; #696287]
* Tweak screen shield animation [Rui; #696380]
* Fix major memory leak when changing backgrounds [Ray; #696157]
* Miscellaneous bug fixes [Jasper, Adel, Florian; #696199, #696212, #696422,
#696447, #696235]
Contributors:
Giovanni Campagna, Cosimo Cecchi, Adel Gadllah, Rui Matos, Florian Müllner,
Jasper St. Pierre, Ray Strode
Translations:
Alexandre Franke [fr], Victor Ibragimov [tg], Arash Mousavi [fa],
Gabor Kelemen [hu], Sandeep Sheshrao Shedmake [mr], ManojKumar Giri [or],
Shantha kumar [ta], Rajesh Ranjan [hi], Stas Solovey [ru],
Shankar Prasad [kn], Dušan Kazik [sk], Ihar Hrachyshka [be],
Wouter Bolsterlee [nl], Kris Thomsen [da], Jiro Matsuzawa [ja],
Daniel Korostil [uk], Ani Peter [ml], Krishnababu Krothapalli [te],
Mantas Kriaučiūnas [lt], Praveen Illa [te]
3.7.92 3.7.92
====== ======
* Drop fallback lock implementation [Florian; #693403] * Drop fallback lock implementation [Florian; #693403]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.7.92],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.8.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@ -63,7 +63,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.13.4 CLUTTER_MIN_VERSION=1.13.4
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.35.4 GJS_MIN_VERSION=1.35.4
MUTTER_MIN_VERSION=3.7.92 MUTTER_MIN_VERSION=3.8.2
GTK_MIN_VERSION=3.7.9 GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.35.0 GIO_MIN_VERSION=2.35.0
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3

View File

@ -15,6 +15,7 @@ desktop_DATA = gnome-shell.desktop gnome-shell-extension-prefs.desktop
introspectiondir = $(datadir)/dbus-1/interfaces introspectiondir = $(datadir)/dbus-1/interfaces
introspection_DATA = \ introspection_DATA = \
org.gnome.Shell.Screencast.xml \
org.gnome.Shell.Screenshot.xml \ org.gnome.Shell.Screenshot.xml \
org.gnome.ShellSearchProvider.xml \ org.gnome.ShellSearchProvider.xml \
org.gnome.ShellSearchProvider2.xml org.gnome.ShellSearchProvider2.xml

View File

@ -0,0 +1,96 @@
<!DOCTYPE node PUBLIC
'-//freedesktop//DTD D-BUS Object Introspection 1.0//EN'
'http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd'>
<node>
<!--
org.gnome.Shell.Screencast:
@short_description: Screencast interface
The interface used to record screen contents.
-->
<interface name="org.gnome.Shell.Screencast">
<!--
Screencast:
@file_template: the template for the filename to use
@options: a dictionary of optional parameters
@success: whether the screencast was started successfully
@filename_used: the file where the screencast is being saved
Records a screencast of the whole screen and saves it
(by default) as webm video under a filename derived from
@file_template. The template is either a relative or absolute
filename which may contain some escape sequences - %d and %t
will be replaced by the start date and time of the recording.
If a relative name is used, the screencast will be saved in the
$XDG_VIDEOS_DIR if it exists, or the home directory otherwise.
The actual filename of the saved video is returned in @filename_used.
The set of optional parameters in @options currently consists of:
'draw-cursor'(b): whether the cursor should be included in the
recording (true)
'framerate'(i): the number of frames per second that should be
recorded if possible (30)
'pipeline'(s): the GStreamer pipeline used to encode recordings
in gst-launch format; if not specified, the
recorder will produce vp8 (webm) video (unset)
-->
<method name="Screencast">
<arg type="s" direction="in" name="file_template"/>
<arg type="a{sv}" direction="in" name="options"/>
<arg type="b" direction="in" name="flash"/>
<arg type="b" direction="out" name="success"/>
<arg type="s" direction="out" name="filename_used"/>
</method>
<!--
ScreencastArea:
@x: the X coordinate of the area to capture
@y: the Y coordinate of the area to capture
@width: the width of the area to capture
@height: the height of the area to capture
@file_template: the template for the filename to use
@options: a dictionary of optional parameters
@success: whether the screencast was started successfully
@filename_used: the file where the screencast is being saved
Records a screencast of the passed in area and saves it
(by default) as webm video under a filename derived from
@file_template. The template is either a relative or absolute
filename which may contain some escape sequences - %d and %t
will be replaced by the start date and time of the recording.
If a relative name is used, the screencast will be saved in the
$XDG_VIDEOS_DIR if it exists, or the home directory otherwise.
The actual filename of the saved video is returned in @filename_used.
The set of optional parameters in @options currently consists of:
'draw-cursor'(b): whether the cursor should be included in the
recording (true)
'framerate'(i): the number of frames per second that should be
recorded if possible (30)
'pipeline'(s): the GStreamer pipeline used to encode recordings
in gst-launch format; if not specified, the
recorder will produce vp8 (webm) video (unset)
-->
<method name="ScreencastArea">
<arg type="i" direction="in" name="x"/>
<arg type="i" direction="in" name="y"/>
<arg type="i" direction="in" name="width"/>
<arg type="i" direction="in" name="height"/>
<arg type="s" direction="in" name="file_template"/>
<arg type="a{sv}" direction="in" name="options"/>
<arg type="b" direction="out" name="success"/>
<arg type="s" direction="out" name="filename_used"/>
</method>
<!--
StopScreencast:
@success: whether stopping the recording was successful
Stop the recording started by either Screencast or ScreencastArea.
-->
<method name="StopScreencast">
<arg type="b" direction="out" name="success"/>
</method>
</interface>
</node>

View File

@ -512,6 +512,7 @@ StScrollBar StButton#vhandle:active {
} }
#appMenu { #appMenu {
spinner-image: url("process-working.svg");
spacing: 4px; spacing: 4px;
} }
@ -1453,11 +1454,13 @@ StScrollBar StButton#vhandle:active {
} }
.notification-button { .notification-button {
padding: 4px 42px 5px; -st-natural-width: 140px;
padding: 4px 4px 5px;
} }
.notification-button:focus { .notification-button:focus {
padding: 3px 41px 4px; -st-natural-width: 138px;
padding: 3px 4px 4px;
} }
.notification-icon-button { .notification-icon-button {
@ -2383,6 +2386,10 @@ StScrollBar StButton#vhandle:active {
height: .75em; height: .75em;
} }
.login-dialog-logo-bin {
padding: 24px 0px;
}
.login-dialog .modal-dialog-button-box { .login-dialog .modal-dialog-button-box {
spacing: 3px; spacing: 3px;
} }
@ -2445,7 +2452,6 @@ StScrollBar StButton#vhandle:active {
.screen-shield-background { .screen-shield-background {
background: black; background: black;
box-shadow: 0px 4px 8px rgba(0,0,0,0.9);
} }
#lockDialogGroup { #lockDialogGroup {

View File

@ -78,6 +78,7 @@ nobase_dist_js_DATA = \
ui/popupMenu.js \ ui/popupMenu.js \
ui/remoteSearch.js \ ui/remoteSearch.js \
ui/runDialog.js \ ui/runDialog.js \
ui/screencast.js \
ui/screenshot.js \ ui/screenshot.js \
ui/screenShield.js \ ui/screenShield.js \
ui/scripting.js \ ui/scripting.js \

View File

@ -28,6 +28,7 @@ const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Lang = imports.lang; const Lang = imports.lang;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const Realmd = imports.gdm.realmd;
const Signals = imports.signals; const Signals = imports.signals;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
@ -39,7 +40,6 @@ const GdmUtil = imports.gdm.util;
const Lightbox = imports.ui.lightbox; const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main; const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const Panel = imports.ui.panel;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const UserMenu = imports.ui.userMenu; const UserMenu = imports.ui.userMenu;
@ -48,44 +48,10 @@ const UserWidget = imports.ui.userWidget;
const _FADE_ANIMATION_TIME = 0.25; const _FADE_ANIMATION_TIME = 0.25;
const _SCROLL_ANIMATION_TIME = 0.5; const _SCROLL_ANIMATION_TIME = 0.5;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0; const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_HEIGHT = 16; const _LOGO_ICON_HEIGHT = 48;
const WORK_SPINNER_ICON_SIZE = 24;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
let _loginDialog = null; let _loginDialog = null;
const LogoMenuButton = new Lang.Class({
Name: 'LogoMenuButton',
Extends: PanelMenu.Button,
_init: function() {
this.parent(0.0, null, true);
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
Lang.bind(this, this._updateLogo));
this._iconBin = new St.Bin();
this.actor.add_actor(this._iconBin);
this._updateLogo();
},
_updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
let icon = null;
if (path) {
let file = Gio.file_new_for_path(path);
let cache = St.TextureCache.get_default();
icon = cache.load_uri_async(file.get_uri(), -1, _LOGO_ICON_HEIGHT);
}
this._iconBin.set_child(icon);
}
});
const UserListItem = new Lang.Class({ const UserListItem = new Lang.Class({
Name: 'UserListItem', Name: 'UserListItem',
@ -552,6 +518,12 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._updateBanner)); Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY, this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY,
Lang.bind(this, this._updateDisableUserList)); Lang.bind(this, this._updateDisableUserList));
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
Lang.bind(this, this._updateLogo));
this._textureCache = St.TextureCache.get_default();
this._textureCache.connect('texture-file-changed',
Lang.bind(this, this._updateLogoTexture));
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box', this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
vertical: true }); vertical: true });
@ -609,7 +581,6 @@ const LoginDialog = new Lang.Class({
this._promptBox.add(this._promptLoginHint); this._promptBox.add(this._promptLoginHint);
this._signInButton = null; this._signInButton = null;
this._workSpinner = null;
this._sessionList = new SessionList(); this._sessionList = new SessionList();
this._sessionList.connect('session-activated', this._sessionList.connect('session-activated',
@ -644,6 +615,11 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START, x_align: St.Align.START,
x_fill: true }); x_fill: true });
this._logoBin = new St.Bin({ style_class: 'login-dialog-logo-bin', y_expand: true });
this._logoBin.set_y_align(Clutter.ActorAlign.END);
this.backgroundStack.add_actor(this._logoBin);
this._updateLogo();
if (!this._userManager.is_loaded) if (!this._userManager.is_loaded)
this._userManagerLoadedId = this._userManager.connect('notify::is-loaded', this._userManagerLoadedId = this._userManager.connect('notify::is-loaded',
Lang.bind(this, function() { Lang.bind(this, function() {
@ -690,6 +666,24 @@ const LoginDialog = new Lang.Class({
} }
}, },
_updateLogoTexture: function(cache, uri) {
if (this._logoFileUri != uri)
return;
let icon = null;
if (this._logoFileUri)
icon = this._textureCache.load_uri_async(this._logoFileUri,
-1, _LOGO_ICON_HEIGHT);
this._logoBin.set_child(icon);
},
_updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null;
this._updateLogoTexture(this._textureCache, this._logoFileUri);
},
_reset: function() { _reset: function() {
this._userVerifier.clear(); this._userVerifier.clear();
@ -708,7 +702,7 @@ const LoginDialog = new Lang.Class({
this._promptEntry.text = ''; this._promptEntry.text = '';
this._updateSensitivity(true); this._updateSensitivity(true);
this._setWorking(false); this.setWorking(false);
}, },
_onDefaultSessionChanged: function(client, sessionId) { _onDefaultSessionChanged: function(client, sessionId) {
@ -774,10 +768,6 @@ const LoginDialog = new Lang.Class({
}, },
_prepareDialog: function(forSecret, hold) { _prepareDialog: function(forSecret, hold) {
this._workSpinner = new Panel.AnimatedIcon('process-working.svg', WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();
this.buttonLayout.visible = true; this.buttonLayout.visible = true;
this.clearButtons(); this.clearButtons();
@ -790,12 +780,11 @@ const LoginDialog = new Lang.Class({
y_fill: false, y_fill: false,
x_align: St.Align.START, x_align: St.Align.START,
y_align: St.Align.MIDDLE }); y_align: St.Align.MIDDLE });
this.buttonLayout.add(this._workSpinner.actor, this.placeSpinner({ expand: false,
{ expand: false, x_fill: false,
x_fill: false, y_fill: false,
y_fill: false, x_align: St.Align.END,
x_align: St.Align.END, y_align: St.Align.MIDDLE });
y_align: St.Align.MIDDLE });
this._signInButton = this.addButton({ action: Lang.bind(this, function() { this._signInButton = this.addButton({ action: Lang.bind(this, function() {
hold.release(); hold.release();
}), }),
@ -848,7 +837,7 @@ const LoginDialog = new Lang.Class({
this._promptEntryActivateId = 0; this._promptEntryActivateId = 0;
} }
this._setWorking(false); this.setWorking(false);
this._promptBox.hide(); this._promptBox.hide();
this._promptLoginHint.hide(); this._promptLoginHint.hide();
@ -861,36 +850,9 @@ const LoginDialog = new Lang.Class({
this._promptLoginHint.hide(); this._promptLoginHint.hide();
this.clearButtons(); this.clearButtons();
this._workSpinner = null;
this._signInButton = null; this._signInButton = null;
}, },
_setWorking: function(working) {
if (!this._workSpinner)
return;
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
_askQuestion: function(verifier, serviceName, question, passwordChar) { _askQuestion: function(verifier, serviceName, question, passwordChar) {
this._promptLabel.set_text(question); this._promptLabel.set_text(question);
@ -905,7 +867,7 @@ const LoginDialog = new Lang.Class({
function() { function() {
let text = this._promptEntry.get_text(); let text = this._promptEntry.get_text();
this._updateSensitivity(false); this._updateSensitivity(false);
this._setWorking(true); this.setWorking(true);
this._userVerifier.answerQuery(serviceName, text); this._userVerifier.answerQuery(serviceName, text);
}]; }];
@ -913,17 +875,40 @@ const LoginDialog = new Lang.Class({
return batch.run(); return batch.run();
}, },
_showRealmLoginHint: function(realmManager, hint) {
if (!hint)
return;
hint = hint.replace(/%U/g, 'user');
hint = hint.replace(/%D/g, 'DOMAIN');
hint = hint.replace(/%[^UD]/g, '');
// Translators: this message is shown below the username entry field
// to clue the user in on how to login to the local network realm
this._showLoginHint(null, _("(e.g., user or %s)").format(hint));
},
_askForUsernameAndLogIn: function() { _askForUsernameAndLogIn: function() {
this._promptLabel.set_text(_("Username: ")); this._promptLabel.set_text(_("Username: "));
this._promptEntry.set_text(''); this._promptEntry.set_text('');
this._promptEntry.clutter_text.set_password_char(''); this._promptEntry.clutter_text.set_password_char('');
let realmManager = new Realmd.Manager();
let signalId = realmManager.connect('login-format-changed',
Lang.bind(this, this._showRealmLoginHint));
this._showRealmLoginHint(realmManager.loginFormat);
let tasks = [this._showPrompt, let tasks = [this._showPrompt,
function() { function() {
let userName = this._promptEntry.get_text(); let userName = this._promptEntry.get_text();
this._promptEntry.reactive = false; this._promptEntry.reactive = false;
return this._beginVerificationForUser(userName); return this._beginVerificationForUser(userName);
},
function() {
realmManager.disconnect(signalId)
realmManager.release();
}]; }];
let batch = new Batch.ConsecutiveBatch(this, tasks); let batch = new Batch.ConsecutiveBatch(this, tasks);

View File

@ -63,7 +63,7 @@ const Manager = new Lang.Class({
Lang.bind(this, this._reloadRealms)) Lang.bind(this, this._reloadRealms))
this._realms = {}; this._realms = {};
this._aggregateProvider.connect('g-properties-changed', this._signalId = this._aggregateProvider.connect('g-properties-changed',
Lang.bind(this, function(proxy, properties) { Lang.bind(this, function(proxy, properties) {
if ('Realms' in properties.deep_unpack()) if ('Realms' in properties.deep_unpack())
this._reloadRealms(); this._reloadRealms();
@ -106,7 +106,7 @@ const Manager = new Lang.Class({
realm.connect('g-properties-changed', realm.connect('g-properties-changed',
Lang.bind(this, function(proxy, properties) { Lang.bind(this, function(proxy, properties) {
if ('Configured' in properties.deep_unpack()) if ('Configured' in properties.deep_unpack())
this._reloadRealm(); this._reloadRealm(realm);
})); }));
}, },
@ -134,6 +134,18 @@ const Manager = new Lang.Class({
this._updateLoginFormat(); this._updateLoginFormat();
return this._loginFormat; return this._loginFormat;
},
release: function() {
Service(Gio.DBus.system,
'org.freedesktop.realmd',
'/org/freedesktop/realmd',
function(service) {
service.ReleaseRemote();
});
this._aggregateProvider.disconnect(this._signalId);
this._realms = { };
this._updateLoginFormat();
} }
}); });
Signals.addSignalMethods(Manager.prototype) Signals.addSignalMethods(Manager.prototype)

View File

@ -9,7 +9,6 @@ const Signals = imports.signals;
const Batch = imports.gdm.batch; const Batch = imports.gdm.batch;
const Fprint = imports.gdm.fingerprint; const Fprint = imports.gdm.fingerprint;
const Realmd = imports.gdm.realmd;
const Main = imports.ui.main; const Main = imports.ui.main;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
@ -117,7 +116,6 @@ const ShellUserVerifier = new Lang.Class({
this._settings = new Gio.Settings({ schema: LOGIN_SCREEN_SCHEMA }); this._settings = new Gio.Settings({ schema: LOGIN_SCREEN_SCHEMA });
this._fprintManager = new Fprint.FprintManager(); this._fprintManager = new Fprint.FprintManager();
this._realmManager = new Realmd.Manager();
this._messageQueue = []; this._messageQueue = [];
this._messageQueueTimeoutId = 0; this._messageQueueTimeoutId = 0;
this.hasPendingMessages = false; this.hasPendingMessages = false;
@ -377,30 +375,11 @@ const ShellUserVerifier = new Lang.Class({
this._queueMessage(problem, 'login-dialog-message-warning'); this._queueMessage(problem, 'login-dialog-message-warning');
}, },
_showRealmLoginHint: function() {
if (this._realmManager.loginFormat) {
let hint = this._realmManager.loginFormat;
hint = hint.replace(/%U/g, 'user');
hint = hint.replace(/%D/g, 'DOMAIN');
hint = hint.replace(/%[^UD]/g, '');
// Translators: this message is shown below the username entry field
// to clue the user in on how to login to the local network realm
this.emit('show-login-hint',
_("(e.g., user or %s)").format(hint));
}
},
_onInfoQuery: function(client, serviceName, question) { _onInfoQuery: function(client, serviceName, question) {
// We only expect questions to come from the main auth service // We only expect questions to come from the main auth service
if (serviceName != PASSWORD_SERVICE_NAME) if (serviceName != PASSWORD_SERVICE_NAME)
return; return;
this._showRealmLoginHint();
this._realmLoginHintSignalId = this._realmManager.connect('login-format-changed',
Lang.bind(this, this._showRealmLoginHint));
this.emit('ask-question', serviceName, question, ''); this.emit('ask-question', serviceName, question, '');
}, },
@ -476,11 +455,6 @@ const ShellUserVerifier = new Lang.Class({
} }
this.emit('hide-login-hint'); this.emit('hide-login-hint');
if (this._realmLoginHintSignalId) {
this._realmManager.disconnect(this._realmLoginHintSignalId);
this._realmLoginHintSignalId = 0;
}
}, },
}); });
Signals.addSignalMethods(ShellUserVerifier.prototype); Signals.addSignalMethods(ShellUserVerifier.prototype);

View File

@ -33,6 +33,10 @@ const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager
<arg type='s' direction='in'/> <arg type='s' direction='in'/>
<arg type='h' direction='out'/> <arg type='h' direction='out'/>
</method> </method>
<method name='GetSession'>
<arg type='s' direction='in'/>
<arg type='o' direction='out'/>
</method>
<method name='ListSessions'> <method name='ListSessions'>
<arg name='sessions' type='a(susso)' direction='out'/> <arg name='sessions' type='a(susso)' direction='out'/>
</method> </method>
@ -72,7 +76,7 @@ const ConsoleKitSession = Gio.DBusProxy.makeProxyWrapper(ConsoleKitSessionIface)
const ConsoleKitManager = Gio.DBusProxy.makeProxyWrapper(ConsoleKitManagerIface); const ConsoleKitManager = Gio.DBusProxy.makeProxyWrapper(ConsoleKitManagerIface);
function haveSystemd() { function haveSystemd() {
return GLib.access("/sys/fs/cgroup/systemd", 0) >= 0; return GLib.access("/run/systemd/seats", 0) >= 0;
} }
function versionCompare(required, reference) { function versionCompare(required, reference) {
@ -136,15 +140,23 @@ const LoginManagerSystemd = new Lang.Class({
// Having this function is a bit of a hack since the Systemd and ConsoleKit // Having this function is a bit of a hack since the Systemd and ConsoleKit
// session objects have different interfaces - but in both cases there are // session objects have different interfaces - but in both cases there are
// Lock/Unlock signals, and that's all we count upon at the moment. // Lock/Unlock signals, and that's all we count upon at the moment.
getCurrentSessionProxy: function() { getCurrentSessionProxy: function(callback) {
if (!this._currentSession) { if (this._currentSession) {
this._currentSession = new SystemdLoginSession(Gio.DBus.system, callback (this._currentSession);
'org.freedesktop.login1', return;
'/org/freedesktop/login1/session/' +
GLib.getenv('XDG_SESSION_ID'));
} }
return this._currentSession; this._proxy.GetSessionRemote(GLib.getenv('XDG_SESSION_ID'), Lang.bind(this,
function(result, error) {
if (error) {
logError(error, 'Could not get a proxy for the current session');
} else {
this._currentSession = new SystemdLoginSession(Gio.DBus.system,
'org.freedesktop.login1',
result[0]);
callback(this._currentSession);
}
}));
}, },
canPowerOff: function(asyncCallback) { canPowerOff: function(asyncCallback) {
@ -233,15 +245,23 @@ const LoginManagerConsoleKit = new Lang.Class({
// Having this function is a bit of a hack since the Systemd and ConsoleKit // Having this function is a bit of a hack since the Systemd and ConsoleKit
// session objects have different interfaces - but in both cases there are // session objects have different interfaces - but in both cases there are
// Lock/Unlock signals, and that's all we count upon at the moment. // Lock/Unlock signals, and that's all we count upon at the moment.
getCurrentSessionProxy: function() { getCurrentSessionProxy: function(callback) {
if (!this._currentSession) { if (this._currentSession) {
let [currentSessionId] = this._proxy.GetCurrentSessionSync(); callback (this._currentSession);
this._currentSession = new ConsoleKitSession(Gio.DBus.system, return;
'org.freedesktop.ConsoleKit',
currentSessionId);
} }
return this._currentSession; this._proxy.GetCurrentSessionRemote(Lang.bind(this,
function(result, error) {
if (error) {
logError(error, 'Could not get a proxy for the current session');
} else {
this._currentSession = new ConsoleKitSession(Gio.DBus.system,
'org.freedesktop.ConsoleKit',
result[0]);
callback(this._currentSession);
}
}));
}, },
canPowerOff: function(asyncCallback) { canPowerOff: function(asyncCallback) {

View File

@ -232,11 +232,13 @@ const AppSwitcherPopup = new Lang.Class({
}, },
_finish : function(timestamp) { _finish : function(timestamp) {
this.parent();
let appIcon = this._items[this._selectedIndex]; let appIcon = this._items[this._selectedIndex];
let window = this._currentWindow > 0 ? this._currentWindow : 0; if (this._currentWindow < 0)
appIcon.app.activate_window(appIcon.cachedWindows[window], timestamp); appIcon.app.activate_full(-1, timestamp);
else
Main.activateWindow(appIcon.cachedWindows[this._currentWindow], timestamp);
this.parent();
}, },
_onDestroy : function() { _onDestroy : function() {
@ -395,9 +397,9 @@ const WindowSwitcherPopup = new Lang.Class({
}, },
_finish: function() { _finish: function() {
this.parent();
Main.activateWindow(this._items[this._selectedIndex].window); Main.activateWindow(this._items[this._selectedIndex].window);
this.parent();
} }
}); });

View File

@ -625,10 +625,24 @@ const AppFolderPopup = new Lang.Class({
this._boxPointer.actor.bind_property('opacity', closeButton, 'opacity', this._boxPointer.actor.bind_property('opacity', closeButton, 'opacity',
GObject.BindingFlags.SYNC_CREATE); GObject.BindingFlags.SYNC_CREATE);
global.focus_manager.add_group(this.actor);
source.actor.connect('destroy', Lang.bind(this, source.actor.connect('destroy', Lang.bind(this,
function() { function() {
this.actor.destroy(); this.actor.destroy();
})); }));
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
},
_onKeyPress: function(actor, event) {
if (!this._isOpen)
return false;
if (event.get_key_symbol() != Clutter.KEY_Escape)
return false;
this.popdown();
return true;
}, },
toggle: function() { toggle: function() {
@ -643,6 +657,7 @@ const AppFolderPopup = new Lang.Class({
return; return;
this.actor.show(); this.actor.show();
this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
this._boxPointer.setArrowActor(this._source.actor); this._boxPointer.setArrowActor(this._source.actor);
this._boxPointer.show(BoxPointer.PopupAnimation.FADE | this._boxPointer.show(BoxPointer.PopupAnimation.FADE |

View File

@ -38,6 +38,7 @@ const BackgroundCache = new Lang.Class({
_init: function() { _init: function() {
this._patterns = []; this._patterns = [];
this._images = []; this._images = [];
this._pendingFileLoads = [];
this._fileMonitors = {}; this._fileMonitors = {};
}, },
@ -84,10 +85,10 @@ const BackgroundCache = new Lang.Class({
} else { } else {
content.load_gradient(params.shadingType, params.color, params.secondColor); content.load_gradient(params.shadingType, params.color, params.secondColor);
} }
this._patterns.push(content);
} }
this._patterns.push(content);
return content; return content;
}, },
@ -125,9 +126,81 @@ const BackgroundCache = new Lang.Class({
}, },
removeImageContent: function(content) { removeImageContent: function(content) {
let filename = content.get_filename();
if (filename && this._fileMonitors[filename])
delete this._fileMonitors[filename];
this._removeContent(this._images, content); this._removeContent(this._images, content);
}, },
_loadImageContent: function(params) {
params = Params.parse(params, { monitorIndex: 0,
style: null,
filename: null,
effects: Meta.BackgroundEffects.NONE,
cancellable: null,
onFinished: null });
for (let i = 0; i < this._pendingFileLoads.length; i++) {
if (this._pendingFileLoads[i].filename == params.filename &&
this._pendingFileLoads[i].style == params.style) {
this._pendingFileLoads[i].callers.push({ shouldCopy: true,
monitorIndex: params.monitorIndex,
effects: params.effects,
onFinished: params.onFinished });
return;
}
}
this._pendingFileLoads.push({ filename: params.filename,
style: params.style,
callers: [{ shouldCopy: false,
monitorIndex: params.monitorIndex,
effects: params.effects,
onFinished: params.onFinished }] });
let content = new Meta.Background({ meta_screen: global.screen,
monitor: params.monitorIndex,
effects: params.effects });
content.load_file_async(params.filename,
params.style,
params.cancellable,
Lang.bind(this,
function(object, result) {
try {
content.load_file_finish(result);
this._monitorFile(params.filename);
this._images.push(content);
} catch(e) {
content = null;
}
for (let i = 0; i < this._pendingFileLoads.length; i++) {
let pendingLoad = this._pendingFileLoads[i];
if (pendingLoad.filename != params.filename ||
pendingLoad.style != params.style)
continue;
for (let j = 0; j < pendingLoad.callers.length; j++) {
if (pendingLoad.callers[j].onFinished) {
if (content && pendingLoad.callers[j].shouldCopy) {
content = object.copy(pendingLoad.callers[j].monitorIndex,
pendingLoad.callers[j].effects);
}
pendingLoad.callers[j].onFinished(content);
}
}
this._pendingFileLoads.splice(i, 1);
}
}));
},
getImageContent: function(params) { getImageContent: function(params) {
params = Params.parse(params, { monitorIndex: 0, params = Params.parse(params, { monitorIndex: 0,
style: null, style: null,
@ -165,31 +238,19 @@ const BackgroundCache = new Lang.Class({
if (params.cancellable && params.cancellable.is_cancelled()) if (params.cancellable && params.cancellable.is_cancelled())
content = null; content = null;
else
this._images.push(content);
if (params.onFinished) if (params.onFinished)
params.onFinished(content); params.onFinished(content);
} else { } else {
content = new Meta.Background({ meta_screen: global.screen, this._loadImageContent({ filename: params.filename,
monitor: params.monitorIndex, style: params.style,
effects: params.effects }); effects: params.effects,
monitorIndex: params.monitorIndex,
cancellable: params.cancellable,
onFinished: params.onFinished });
content.load_file_async(params.filename,
params.style,
params.cancellable,
Lang.bind(this,
function(object, result) {
try {
content.load_file_finish(result);
this._monitorFile(params.filename);
this._images.push(content);
} catch(e) {
content = null;
}
if (params.onFinished)
params.onFinished(content);
}));
} }
}, },
@ -370,6 +431,7 @@ const Background = new Lang.Class({
content.brightness = this._brightness; content.brightness = this._brightness;
content.vignette_sharpness = this._vignetteSharpness; content.vignette_sharpness = this._vignetteSharpness;
this._cache.removeImageContent(this._images[index].content);
this._images[index].content = content; this._images[index].content = content;
this._watchCacheFile(filename); this._watchCacheFile(filename);
}, },
@ -448,6 +510,10 @@ const Background = new Lang.Class({
let interval = Math.max(ANIMATION_MIN_WAKEUP_INTERVAL * 1000, let interval = Math.max(ANIMATION_MIN_WAKEUP_INTERVAL * 1000,
timePerStep); timePerStep);
if (interval > GLib.MAXUINT32)
return;
this._updateAnimationTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, this._updateAnimationTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
interval, interval,
Lang.bind(this, function() { Lang.bind(this, function() {
@ -651,17 +717,9 @@ const BackgroundManager = new Lang.Class({
this.background = this._createBackground(); this.background = this._createBackground();
this._newBackground = null; this._newBackground = null;
this._loadedSignalId = 0;
this._changedSignalId = 0;
}, },
destroy: function() { destroy: function() {
if (this._loadedSignalId)
this._newBackground.disconnect(this._loadedSignalId);
if (this._changedSignalId)
this.background.disconnect(this._changedSignalId);
if (this._newBackground) { if (this._newBackground) {
this._newBackground.actor.destroy(); this._newBackground.actor.destroy();
this._newBackground = null; this._newBackground = null;
@ -680,22 +738,28 @@ const BackgroundManager = new Lang.Class({
newBackground.saturation = background.saturation; newBackground.saturation = background.saturation;
newBackground.visible = background.visible; newBackground.visible = background.visible;
let signalId = newBackground.connect('loaded', newBackground.loadedSignalId = newBackground.connect('loaded',
Lang.bind(this, function() { Lang.bind(this, function() {
newBackground.disconnect(signalId); newBackground.disconnect(newBackground.loadedSignalId);
newBackground.loadedSignalId = 0;
Tweener.addTween(background.actor, Tweener.addTween(background.actor,
{ opacity: 0, { opacity: 0,
time: FADE_ANIMATION_TIME, time: FADE_ANIMATION_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() { onComplete: Lang.bind(this, function() {
this.background = newBackground; if (this._newBackground == newBackground) {
this._newBackground = null; this.background = newBackground;
this._newBackground = null;
} else {
newBackground.actor.destroy();
}
background.actor.destroy(); background.actor.destroy();
this.emit('changed'); this.emit('changed');
}) })
}); });
})); }));
this._loadedSignalId = signalId;
this._newBackground = newBackground; this._newBackground = newBackground;
}, },
@ -714,12 +778,19 @@ const BackgroundManager = new Lang.Class({
background.actor.lower_bottom(); background.actor.lower_bottom();
} }
let signalId = background.connect('changed', Lang.bind(this, function() { background.changeSignalId = background.connect('changed', Lang.bind(this, function() {
background.disconnect(signalId); background.disconnect(background.changeSignalId);
background.changeSignalId = 0;
this._updateBackground(background, this._monitorIndex); this._updateBackground(background, this._monitorIndex);
})); }));
this._changedSignalId = signalId; background.actor.connect('destroy', Lang.bind(this, function() {
if (background.changeSignalId)
background.disconnect(background.changeSignalId);
if (background.loadedSignalId)
background.disconnect(background.loadedSignalId);
}));
return background; return background;
}, },

View File

@ -46,8 +46,10 @@ function addBackgroundMenu(actor) {
clickAction.connect('long-press', function(action, actor, state) { clickAction.connect('long-press', function(action, actor, state) {
if (state == Clutter.LongPressState.QUERY) if (state == Clutter.LongPressState.QUERY)
return action.get_button() == 1 && !actor._backgroundMenu.isOpen; return action.get_button() == 1 && !actor._backgroundMenu.isOpen;
if (state == Clutter.LongPressState.ACTIVATE) if (state == Clutter.LongPressState.ACTIVATE) {
openMenu(); openMenu();
actor._backgroundManager.ignoreRelease();
}
return true; return true;
}); });
clickAction.connect('clicked', function(action) { clickAction.connect('clicked', function(action) {
@ -55,4 +57,12 @@ function addBackgroundMenu(actor) {
openMenu(); openMenu();
}); });
actor.add_action(clickAction); actor.add_action(clickAction);
actor.connect('destroy', function() {
actor._backgroundMenu.destroy();
actor._backgroundMenu = null;
actor._backgroundManager = null;
cursor.destroy();
});
} }

View File

@ -71,7 +71,7 @@ function _formatEventTime(event, clockFormat) {
default: default:
/* explicit fall-through */ /* explicit fall-through */
case '12h': case '12h':
/* Transators: 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 */
ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p")); ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));

View File

@ -292,6 +292,7 @@ const AutorunResidentSource = new Lang.Class({
_init: function(manager) { _init: function(manager) {
this.parent(_("Removable Devices"), 'media-removable'); this.parent(_("Removable Devices"), 'media-removable');
this.resident = true;
this._mounts = []; this._mounts = [];

View File

@ -25,7 +25,7 @@ const KeyringDialog = new Lang.Class({
this.prompt = new Shell.KeyringPrompt(); this.prompt = new Shell.KeyringPrompt();
this.prompt.connect('show-password', Lang.bind(this, this._onShowPassword)); this.prompt.connect('show-password', Lang.bind(this, this._onShowPassword));
this.prompt.connect('show-confirm', Lang.bind(this, this._onShowConfirm)); this.prompt.connect('show-confirm', Lang.bind(this, this._onShowConfirm));
this.prompt.connect('hide-prompt', Lang.bind(this, this._onHidePrompt)); this.prompt.connect('prompt-close', Lang.bind(this, this._onHidePrompt));
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout', let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false }); vertical: false });
@ -63,11 +63,17 @@ const KeyringDialog = new Lang.Class({
this._cancelButton = this.addButton({ label: '', this._cancelButton = this.addButton({ label: '',
action: Lang.bind(this, this._onCancelButton), action: Lang.bind(this, this._onCancelButton),
key: Clutter.Escape }); key: Clutter.Escape },
{ expand: true, x_fill: false, x_align: St.Align.START });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._continueButton = this.addButton({ label: '', this._continueButton = this.addButton({ label: '',
action: Lang.bind(this, this._onContinueButton), action: Lang.bind(this, this._onContinueButton),
default: true }, default: true },
{ expand: true, x_fill: false, x_align: St.Align.END }); { expand: false, x_fill: false, x_align: St.Align.END });
this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
@ -143,11 +149,19 @@ const KeyringDialog = new Lang.Class({
}, },
_updateSensitivity: function(sensitive) { _updateSensitivity: function(sensitive) {
this._passwordEntry.reactive = sensitive; if (this._passwordEntry) {
this._passwordEntry.clutter_text.editable = sensitive; this._passwordEntry.reactive = sensitive;
this._passwordEntry.clutter_text.editable = sensitive;
}
if (this._confirmEntry) {
this._confirmEntry.reactive = sensitive;
this._confirmEntry.clutter_text.editable = sensitive;
}
this._continueButton.can_focus = sensitive; this._continueButton.can_focus = sensitive;
this._continueButton.reactive = sensitive; this._continueButton.reactive = sensitive;
this.setWorking(!sensitive);
}, },
_ensureOpen: function() { _ensureOpen: function() {

View File

@ -31,7 +31,6 @@ const AuthenticationDialog = new Lang.Class({
this.message = message; this.message = message;
this.userNames = userNames; this.userNames = userNames;
this._wasDismissed = false; this._wasDismissed = false;
this._completed = false;
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout', let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false }); vertical: false });
@ -161,26 +160,32 @@ const AuthenticationDialog = new Lang.Class({
this._cancelButton = this.addButton({ label: _("Cancel"), this._cancelButton = this.addButton({ label: _("Cancel"),
action: Lang.bind(this, this.cancel), action: Lang.bind(this, this.cancel),
key: Clutter.Escape }); key: Clutter.Escape },
{ expand: true, x_fill: false, x_align: St.Align.START });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._okButton = this.addButton({ label: _("Authenticate"), this._okButton = this.addButton({ label: _("Authenticate"),
action: Lang.bind(this, this._onAuthenticateButtonPressed), action: Lang.bind(this, this._onAuthenticateButtonPressed),
default: true }, default: true },
{ expand: true, x_fill: false, x_align: St.Align.END }); { expand: false, x_fill: false, x_align: St.Align.END });
this._doneEmitted = false; this._doneEmitted = false;
this._identityToAuth = Polkit.UnixUser.new_for_name(userName); this._identityToAuth = Polkit.UnixUser.new_for_name(userName);
this._cookie = cookie; this._cookie = cookie;
},
performAuthentication: function() {
this.destroySession();
this._session = new PolkitAgent.Session({ identity: this._identityToAuth, this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
cookie: this._cookie }); cookie: this._cookie });
this._session.connect('completed', Lang.bind(this, this._onSessionCompleted)); this._session.connect('completed', Lang.bind(this, this._onSessionCompleted));
this._session.connect('request', Lang.bind(this, this._onSessionRequest)); this._session.connect('request', Lang.bind(this, this._onSessionRequest));
this._session.connect('show-error', Lang.bind(this, this._onSessionShowError)); this._session.connect('show-error', Lang.bind(this, this._onSessionShowError));
this._session.connect('show-info', Lang.bind(this, this._onSessionShowInfo)); this._session.connect('show-info', Lang.bind(this, this._onSessionShowInfo));
},
startAuthentication: function() {
this._session.initiate(); this._session.initiate();
}, },
@ -202,14 +207,14 @@ const AuthenticationDialog = new Lang.Class({
log('polkitAuthenticationAgent: Failed to show modal dialog.' + log('polkitAuthenticationAgent: Failed to show modal dialog.' +
' Dismissing authentication request for action-id ' + this.actionId + ' Dismissing authentication request for action-id ' + this.actionId +
' cookie ' + this._cookie); ' cookie ' + this._cookie);
this._emitDone(false, true); this._emitDone(true);
} }
}, },
_emitDone: function(keepVisible, dismissed) { _emitDone: function(dismissed) {
if (!this._doneEmitted) { if (!this._doneEmitted) {
this._doneEmitted = true; this._doneEmitted = true;
this.emit('done', keepVisible, dismissed); this.emit('done', dismissed);
} }
}, },
@ -219,6 +224,7 @@ const AuthenticationDialog = new Lang.Class({
this._okButton.can_focus = sensitive; this._okButton.can_focus = sensitive;
this._okButton.reactive = sensitive; this._okButton.reactive = sensitive;
this.setWorking(!sensitive);
}, },
_onEntryActivate: function() { _onEntryActivate: function() {
@ -237,12 +243,16 @@ const AuthenticationDialog = new Lang.Class({
}, },
_onSessionCompleted: function(session, gainedAuthorization) { _onSessionCompleted: function(session, gainedAuthorization) {
if (this._completed) if (this._completed || this._doneEmitted)
return; return;
this._completed = true; this._completed = true;
if (!gainedAuthorization) { /* Yay, all done */
if (gainedAuthorization) {
this._emitDone(false);
} else {
/* Unless we are showing an existing error message from the PAM /* Unless we are showing an existing error message from the PAM
* module (the PAM module could be reporting the authentication * module (the PAM module could be reporting the authentication
* error providing authentication-method specific information), * error providing authentication-method specific information),
@ -258,8 +268,10 @@ const AuthenticationDialog = new Lang.Class({
this._infoMessageLabel.hide(); this._infoMessageLabel.hide();
this._nullMessageLabel.hide(); this._nullMessageLabel.hide();
} }
/* Try and authenticate again */
this.performAuthentication();
} }
this._emitDone(!gainedAuthorization, false);
}, },
_onSessionRequest: function(session, request, echo_on) { _onSessionRequest: function(session, request, echo_on) {
@ -303,6 +315,7 @@ const AuthenticationDialog = new Lang.Class({
if (this._session) { if (this._session) {
if (!this._completed) if (!this._completed)
this._session.cancel(); this._session.cancel();
this._completed = false;
this._session = null; this._session = null;
} }
}, },
@ -317,7 +330,7 @@ const AuthenticationDialog = new Lang.Class({
cancel: function() { cancel: function() {
this._wasDismissed = true; this._wasDismissed = true;
this.close(global.get_current_time()); this.close(global.get_current_time());
this._emitDone(false, true); this._emitDone(true);
}, },
}); });
Signals.addSignalMethods(AuthenticationDialog.prototype); Signals.addSignalMethods(AuthenticationDialog.prototype);
@ -327,7 +340,6 @@ const AuthenticationAgent = new Lang.Class({
_init: function() { _init: function() {
this._currentDialog = null; this._currentDialog = null;
this._isCompleting = false;
this._handle = null; this._handle = null;
this._native = new Shell.PolkitAuthenticationAgent(); this._native = new Shell.PolkitAuthenticationAgent();
this._native.connect('initiate', Lang.bind(this, this._onInitiate)); this._native.connect('initiate', Lang.bind(this, this._onInitiate));
@ -364,45 +376,24 @@ const AuthenticationAgent = new Lang.Class({
// discussion. // discussion.
this._currentDialog.connect('done', Lang.bind(this, this._onDialogDone)); this._currentDialog.connect('done', Lang.bind(this, this._onDialogDone));
this._currentDialog.startAuthentication(); this._currentDialog.performAuthentication();
}, },
_onCancel: function(nativeAgent) { _onCancel: function(nativeAgent) {
this._completeRequest(false, false); this._completeRequest(false);
}, },
_onDialogDone: function(dialog, keepVisible, dismissed) { _onDialogDone: function(dialog, dismissed) {
this._completeRequest(keepVisible, dismissed); this._completeRequest(dismissed);
}, },
_reallyCompleteRequest: function(dismissed) { _completeRequest: function(dismissed) {
this._currentDialog.close(); this._currentDialog.close();
this._currentDialog.destroySession(); this._currentDialog.destroySession();
this._currentDialog = null; this._currentDialog = null;
this._isCompleting = false;
this._native.complete(dismissed) this._native.complete(dismissed);
}, },
_completeRequest: function(keepVisible, wasDismissed) {
if (this._isCompleting)
return;
this._isCompleting = true;
if (keepVisible) {
// Give the user 2 seconds to read 'Authentication Failure' before
// dismissing the dialog
Mainloop.timeout_add(2000,
Lang.bind(this,
function() {
this._reallyCompleteRequest(wasDismissed);
return false;
}));
} else {
this._reallyCompleteRequest(wasDismissed);
}
}
}); });
const Component = AuthenticationAgent; const Component = AuthenticationAgent;

View File

@ -20,8 +20,7 @@ const Recorder = new Lang.Class({
Main.wm.addKeybinding('toggle-recording', Main.wm.addKeybinding('toggle-recording',
this._bindingSettings, this._bindingSettings,
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.ALL,
Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._toggleRecorder)); Lang.bind(this, this._toggleRecorder));
}, },

View File

@ -89,19 +89,25 @@ const CtrlAltTabManager = new Lang.Class({
let items = this._items.filter(function (item) { return item.proxy.mapped; }); let items = this._items.filter(function (item) { return item.proxy.mapped; });
// And add the windows metacity would show in its Ctrl-Alt-Tab list // And add the windows metacity would show in its Ctrl-Alt-Tab list
if (!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, 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++) {
let icon; let icon = null;
let app = windowTracker.get_window_app(windows[i]); let iconName = null;
if (app) if (windows[i].get_window_type () == Meta.WindowType.DESKTOP) {
icon = app.create_icon_texture(POPUP_APPICON_SIZE); iconName = 'video-display-symbolic';
else } else {
icon = textureCache.bind_pixbuf_property(windows[i], 'icon'); let app = windowTracker.get_window_app(windows[i]);
if (app)
icon = app.create_icon_texture(POPUP_APPICON_SIZE);
else
icon = textureCache.bind_pixbuf_property(windows[i], 'icon');
}
items.push({ name: windows[i].title, items.push({ name: windows[i].title,
proxy: windows[i].get_compositor_private(), proxy: windows[i].get_compositor_private(),
focusCallback: Lang.bind(windows[i], focusCallback: Lang.bind(windows[i],
@ -109,6 +115,7 @@ const CtrlAltTabManager = new Lang.Class({
Main.activateWindow(this, timestamp); Main.activateWindow(this, timestamp);
}), }),
iconActor: icon, iconActor: icon,
iconName: iconName,
sortGroup: SortGroup.MIDDLE }); sortGroup: SortGroup.MIDDLE });
} }
} }

View File

@ -100,7 +100,6 @@ const DateMenuButton = new Lang.Class({
Shell.AppSystem.get_default().connect('installed-changed', Shell.AppSystem.get_default().connect('installed-changed',
Lang.bind(this, this._appInstalledChanged)); Lang.bind(this, this._appInstalledChanged));
this._appInstalledChanged();
item = this.menu.addSettingsAction(_("Date & Time Settings"), 'gnome-datetime-panel.desktop'); item = this.menu.addSettingsAction(_("Date & Time Settings"), 'gnome-datetime-panel.desktop');
if (item) { if (item) {
@ -157,14 +156,16 @@ const DateMenuButton = new Lang.Class({
}, },
_appInstalledChanged: function() { _appInstalledChanged: function() {
let app = Shell.AppSystem.get_default().lookup_app('gnome-clocks.desktop'); this._calendarApp = undefined;
this._openClocksItem.actor.visible = app !== null; this._updateEventsVisibility();
}, },
_updateEventsVisibility: function() { _updateEventsVisibility: function() {
let visible = this._eventSource.hasCalendars; let visible = this._eventSource.hasCalendars;
this._openCalendarItem.actor.visible = visible; this._openCalendarItem.actor.visible = visible &&
this._openClocksItem.actor.visible = visible; (this._getCalendarApp() != null);
this._openClocksItem.actor.visible = visible &&
(this._getClockApp() != null);
this._separator.visible = visible; this._separator.visible = visible;
if (visible) { if (visible) {
let alignment = 0.25; let alignment = 0.25;
@ -217,16 +218,34 @@ const DateMenuButton = new Lang.Class({
this._date.set_text(displayDate.toLocaleFormat(dateFormat)); this._date.set_text(displayDate.toLocaleFormat(dateFormat));
}, },
_getCalendarApp: function() {
if (this._calendarApp !== undefined)
return this._calendarApp;
let apps = Gio.AppInfo.get_recommended_for_type('text/calendar');
if (apps && (apps.length > 0))
this._calendarApp = apps[0];
else
this._calendarApp = null;
return this._calendarApp;
},
_getClockApp: function() {
return Shell.AppSystem.get_default().lookup_app('gnome-clocks.desktop');
},
_onOpenCalendarActivate: function() { _onOpenCalendarActivate: function() {
this.menu.close(); this.menu.close();
let app = Gio.AppInfo.get_default_for_type('text/calendar', false); let app = this._getCalendarApp();
if (app.get_id() == 'evolution.desktop')
app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
app.launch([], global.create_app_launch_context()); app.launch([], global.create_app_launch_context());
}, },
_onOpenClocksActivate: function() { _onOpenClocksActivate: function() {
this.menu.close(); this.menu.close();
let app = Shell.AppSystem.get_default().lookup_app('gnome-clocks.desktop'); let app = this._getClockApp();
app.activate(); app.activate();
} }
}); });

View File

@ -291,19 +291,19 @@ const _Draggable = new Lang.Class({
this._dragOrigY = this._dragActor.y; this._dragOrigY = this._dragActor.y;
this._dragOrigScale = this._dragActor.scale_x; this._dragOrigScale = this._dragActor.scale_x;
this._dragActor.reparent(Main.uiGroup); // Set the actor's scale such that it will keep the same
this._dragActor.raise_top(); // transformed size when it's reparented to the uiGroup
Shell.util_set_hidden_from_pick(this._dragActor, true); let [scaledWidth, scaledHeight] = this.actor.get_transformed_size();
this._dragActor.set_scale(scaledWidth / this.actor.width,
scaledHeight / this.actor.height);
let [actorStageX, actorStageY] = this.actor.get_transformed_position(); let [actorStageX, actorStageY] = this.actor.get_transformed_position();
this._dragOffsetX = actorStageX - this._dragStartX; this._dragOffsetX = actorStageX - this._dragStartX;
this._dragOffsetY = actorStageY - this._dragStartY; this._dragOffsetY = actorStageY - this._dragStartY;
// Set the actor's scale such that it will keep the same this._dragActor.reparent(Main.uiGroup);
// transformed size when it's reparented to the uiGroup this._dragActor.raise_top();
let [scaledWidth, scaledHeight] = this.actor.get_transformed_size(); Shell.util_set_hidden_from_pick(this._dragActor, true);
this.actor.set_scale(scaledWidth / this.actor.width,
scaledHeight / this.actor.height);
} }
this._dragOrigOpacity = this._dragActor.opacity; this._dragOrigOpacity = this._dragActor.opacity;

View File

@ -225,7 +225,8 @@ const EndSessionDialog = new Lang.Class({
Extends: ModalDialog.ModalDialog, Extends: ModalDialog.ModalDialog,
_init: function() { _init: function() {
this.parent({ styleClass: 'end-session-dialog' }); this.parent({ styleClass: 'end-session-dialog',
destroyOnClose: false });
this._user = AccountsService.UserManager.get_default().get_user(GLib.get_user_name()); this._user = AccountsService.UserManager.get_default().get_user(GLib.get_user_name());

View File

@ -355,6 +355,7 @@ const GrabHelper = new Lang.Class({
this._ignoreRelease = true; this._ignoreRelease = true;
let i = this._actorInGrabStack(event.get_source()) + 1; let i = this._actorInGrabStack(event.get_source()) + 1;
this.ungrab({ actor: this._grabStack[i].actor, isUser: true }); this.ungrab({ actor: this._grabStack[i].actor, isUser: true });
return true;
} }
return this._modalCount > 0; return this._modalCount > 0;

View File

@ -578,6 +578,7 @@ const LayoutManager = new Lang.Class({
y / global.screen_height); y / global.screen_height);
this.uiGroup.scale_x = this.uiGroup.scale_y = 0.5; this.uiGroup.scale_x = this.uiGroup.scale_y = 0.5;
this.uiGroup.opacity = 0; this.uiGroup.opacity = 0;
global.window_group.set_clip(monitor.x, monitor.y, monitor.width, monitor.height);
} }
this._systemBackground = new Background.SystemBackground(); this._systemBackground = new Background.SystemBackground();
@ -654,8 +655,10 @@ const LayoutManager = new Lang.Class({
this.trayBox.show(); this.trayBox.show();
this.keyboardBox.show(); this.keyboardBox.show();
if (!Main.sessionMode.isGreeter) if (!Main.sessionMode.isGreeter) {
this._createSecondaryBackgrounds(); this._createSecondaryBackgrounds();
global.window_group.remove_clip();
}
this._queueUpdateRegions(); this._queueUpdateRegions();
@ -1089,12 +1092,21 @@ const HotCorner = new Lang.Class({
} }
if (size > 0) { if (size > 0) {
this._verticalBarrier = new Meta.Barrier({ display: global.display, if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
x1: this._x, x2: this._x, y1: this._y, y2: this._y + size, this._verticalBarrier = new Meta.Barrier({ display: global.display,
directions: Meta.BarrierDirection.POSITIVE_X }); x1: this._x, x2: this._x, y1: this._y, y2: this._y + size,
this._horizontalBarrier = new Meta.Barrier({ display: global.display, directions: Meta.BarrierDirection.NEGATIVE_X });
x1: this._x, x2: this._x + size, y1: this._y, y2: this._y, this._horizontalBarrier = new Meta.Barrier({ display: global.display,
directions: Meta.BarrierDirection.POSITIVE_Y }); x1: this._x - size, x2: this._x, y1: this._y, y2: this._y,
directions: Meta.BarrierDirection.POSITIVE_Y });
} else {
this._verticalBarrier = new Meta.Barrier({ display: global.display,
x1: this._x, x2: this._x, y1: this._y, y2: this._y + size,
directions: Meta.BarrierDirection.POSITIVE_X });
this._horizontalBarrier = new Meta.Barrier({ display: global.display,
x1: this._x, x2: this._x + size, y1: this._y, y2: this._y,
directions: Meta.BarrierDirection.POSITIVE_Y });
}
this._pressureBarrier.addBarrier(this._verticalBarrier); this._pressureBarrier.addBarrier(this._verticalBarrier);
this._pressureBarrier.addBarrier(this._horizontalBarrier); this._pressureBarrier.addBarrier(this._horizontalBarrier);
@ -1200,6 +1212,8 @@ const HotCorner = new Lang.Class({
if (source != Main.xdndHandler) if (source != Main.xdndHandler)
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
this._toggleOverview();
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
}, },

View File

@ -1721,6 +1721,9 @@ const MessageTray = new Lang.Class({
this.actor.add_action(clickAction); this.actor.add_action(clickAction);
clickAction.connect('clicked', Lang.bind(this, function(action) { clickAction.connect('clicked', Lang.bind(this, function(action) {
if (this._trayState != State.SHOWN)
return;
let button = action.get_button(); let button = action.get_button();
if (button == 3) if (button == 3)
this._openContextMenu(); this._openContextMenu();
@ -1731,7 +1734,7 @@ const MessageTray = new Lang.Class({
clickAction.connect('long-press', Lang.bind(this, function(action, actor, state) { clickAction.connect('long-press', Lang.bind(this, function(action, actor, state) {
switch (state) { switch (state) {
case Clutter.LongPressState.QUERY: case Clutter.LongPressState.QUERY:
return true; return this._trayState == State.SHOWN;
case Clutter.LongPressState.ACTIVATE: case Clutter.LongPressState.ACTIVATE:
this._openContextMenu(); this._openContextMenu();
} }

View File

@ -22,6 +22,10 @@ const Tweener = imports.ui.tweener;
const OPEN_AND_CLOSE_TIME = 0.1; const OPEN_AND_CLOSE_TIME = 0.1;
const FADE_OUT_DIALOG_TIME = 1.0; const FADE_OUT_DIALOG_TIME = 1.0;
const WORK_SPINNER_ICON_SIZE = 24;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const State = { const State = {
OPENED: 0, OPENED: 0,
CLOSED: 1, CLOSED: 1,
@ -38,13 +42,15 @@ const ModalDialog = new Lang.Class({
styleClass: null, styleClass: null,
parentActor: Main.uiGroup, parentActor: Main.uiGroup,
keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL, keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL,
shouldFadeIn: true }); shouldFadeIn: true,
destroyOnClose: true });
this.state = State.CLOSED; this.state = State.CLOSED;
this._hasModal = false; this._hasModal = false;
this._keybindingMode = params.keybindingMode; this._keybindingMode = params.keybindingMode;
this._shellReactive = params.shellReactive; this._shellReactive = params.shellReactive;
this._shouldFadeIn = params.shouldFadeIn; this._shouldFadeIn = params.shouldFadeIn;
this._destroyOnClose = params.destroyOnClose;
this._group = new St.Widget({ visible: false, this._group = new St.Widget({ visible: false,
x: 0, x: 0,
@ -63,7 +69,9 @@ const ModalDialog = new Lang.Class({
this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent)); this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
this._group.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent)); this._group.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent));
this._backgroundBin = new St.Bin(); this.backgroundStack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._backgroundBin = new St.Bin({ child: this.backgroundStack,
x_fill: true, y_fill: true });
this._monitorConstraint = new Layout.MonitorConstraint(); this._monitorConstraint = new Layout.MonitorConstraint();
this._backgroundBin.add_constraint(this._monitorConstraint); this._backgroundBin.add_constraint(this._monitorConstraint);
this._group.add_actor(this._backgroundBin); this._group.add_actor(this._backgroundBin);
@ -79,15 +87,10 @@ const ModalDialog = new Lang.Class({
{ inhibitEvents: true }); { inhibitEvents: true });
this._lightbox.highlight(this._backgroundBin); this._lightbox.highlight(this._backgroundBin);
let stack = new Shell.Stack();
this._backgroundBin.child = stack;
this._eventBlocker = new Clutter.Actor({ reactive: true }); this._eventBlocker = new Clutter.Actor({ reactive: true });
stack.add_actor(this._eventBlocker); this.backgroundStack.add_actor(this._eventBlocker);
stack.add_actor(this.dialogLayout);
} else {
this._backgroundBin.child = this.dialogLayout;
} }
this.backgroundStack.add_actor(this.dialogLayout);
this.contentLayout = new St.BoxLayout({ vertical: true }); this.contentLayout = new St.BoxLayout({ vertical: true });
@ -108,6 +111,8 @@ const ModalDialog = new Lang.Class({
this._initialKeyFocus = this.dialogLayout; this._initialKeyFocus = this.dialogLayout;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
this._savedKeyFocus = null; this._savedKeyFocus = null;
this._workSpinner = null;
}, },
destroy: function() { destroy: function() {
@ -181,6 +186,44 @@ const ModalDialog = new Lang.Class({
return button; return button;
}, },
placeSpinner: function(layoutInfo) {
/* This is here because of recursive imports */
const Panel = imports.ui.panel;
let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Panel.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show();
this.buttonLayout.add(this._workSpinner.actor, layoutInfo);
},
setWorking: function(working) {
if (!this._workSpinner)
return;
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
_onKeyPressEvent: function(object, event) { _onKeyPressEvent: function(object, event) {
this._pressedKey = event.get_key_symbol(); this._pressedKey = event.get_key_symbol();
}, },
@ -277,6 +320,9 @@ const ModalDialog = new Lang.Class({
this.state = State.CLOSED; this.state = State.CLOSED;
this._group.hide(); this._group.hide();
this.emit('closed'); this.emit('closed');
if (this._destroyOnClose)
this.destroy();
}) })
}); });
}, },

View File

@ -8,6 +8,7 @@ const Layout = imports.ui.layout;
const Main = imports.ui.main; const Main = imports.ui.main;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Meta = imports.gi.Meta;
const HIDE_TIMEOUT = 1500; const HIDE_TIMEOUT = 1500;
const FADE_TIME = 0.1; const FADE_TIME = 0.1;
@ -71,6 +72,7 @@ const OsdWindow = new Lang.Class({
Name: 'OsdWindow', Name: 'OsdWindow',
_init: function() { _init: function() {
this._popupSize = 0;
this.actor = new St.Widget({ x_expand: true, this.actor = new St.Widget({ x_expand: true,
y_expand: true, y_expand: true,
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
@ -80,6 +82,15 @@ const OsdWindow = new Lang.Class({
vertical: true }); vertical: true });
this.actor.add_actor(this._box); this.actor.add_actor(this._box);
this._box.connect('style-changed', Lang.bind(this, this._onStyleChanged));
this._box.connect('notify::height', Lang.bind(this,
function() {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this,
function() {
this._box.width = this._box.height;
}));
}));
this._icon = new St.Icon(); this._icon = new St.Icon();
this._box.add(this._icon, { expand: true }); this._box.add(this._icon, { expand: true });
@ -169,11 +180,25 @@ const OsdWindow = new Lang.Class({
let scalew = monitor.width / 640.0; let scalew = monitor.width / 640.0;
let scaleh = monitor.height / 480.0; let scaleh = monitor.height / 480.0;
let scale = Math.min(scalew, scaleh); let scale = Math.min(scalew, scaleh);
let size = 110 * Math.max(1, scale); this._popupSize = 110 * Math.max(1, scale);
this._box.set_size(size, size);
this._box.translation_y = monitor.height / 4; this._box.translation_y = monitor.height / 4;
this._icon.icon_size = this._popupSize / 2;
this._box.style_changed();
},
this._icon.icon_size = size / 2; _onStyleChanged: function() {
let themeNode = this._box.get_theme_node();
let horizontalPadding = themeNode.get_horizontal_padding();
let verticalPadding = themeNode.get_vertical_padding();
let topBorder = themeNode.get_border_width(St.Side.TOP);
let bottomBorder = themeNode.get_border_width(St.Side.BOTTOM);
let leftBorder = themeNode.get_border_width(St.Side.LEFT);
let rightBorder = themeNode.get_border_width(St.Side.RIGHT);
let minWidth = this._popupSize - verticalPadding - leftBorder - rightBorder;
let minHeight = this._popupSize - horizontalPadding - topBorder - bottomBorder;
this._box.style = 'min-height: %dpx;'.format(Math.max(minWidth, minHeight));
} }
}); });

View File

@ -144,8 +144,8 @@ const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon', Name: 'AnimatedIcon',
Extends: Animation, Extends: Animation,
_init: function(name, size) { _init: function(filename, size) {
this.parent(global.datadir + '/theme/' + name, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
} }
}); });
@ -258,6 +258,7 @@ const AppMenuButton = new Lang.Class({
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
let bin = new St.Bin({ name: 'appMenu' }); let bin = new St.Bin({ name: 'appMenu' });
bin.connect('style-changed', Lang.bind(this, this._onStyleChanged));
this.actor.add_actor(bin); this.actor.add_actor(bin);
this.actor.bind_property("reactive", this.actor, "can-focus", 0); this.actor.bind_property("reactive", this.actor, "can-focus", 0);
@ -288,27 +289,25 @@ const AppMenuButton = new Lang.Class({
this._visible = !Main.overview.visible; this._visible = !Main.overview.visible;
if (!this._visible) if (!this._visible)
this.actor.hide(); this.actor.hide();
Main.overview.connect('hiding', Lang.bind(this, function () { this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, function () {
this.show(); this.show();
})); }));
Main.overview.connect('showing', Lang.bind(this, function () { this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, function () {
this.hide(); this.hide();
})); }));
this._stop = true; this._stop = true;
this._spinner = new AnimatedIcon('process-working.svg', this._spinner = null;
PANEL_ICON_SIZE);
this._container.add_actor(this._spinner.actor);
this._spinner.actor.hide();
this._spinner.actor.lower_bottom();
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
let appSys = Shell.AppSystem.get_default(); let appSys = Shell.AppSystem.get_default();
tracker.connect('notify::focus-app', Lang.bind(this, this._focusAppChanged)); this._focusAppNotifyId =
appSys.connect('app-state-changed', Lang.bind(this, this._onAppStateChanged)); tracker.connect('notify::focus-app', Lang.bind(this, this._focusAppChanged));
this._appStateChangedSignalId =
global.window_manager.connect('switch-workspace', Lang.bind(this, this._sync)); appSys.connect('app-state-changed', Lang.bind(this, this._onAppStateChanged));
this._switchWorkspaceNotifyId =
global.window_manager.connect('switch-workspace', Lang.bind(this, this._sync));
this._sync(); this._sync();
}, },
@ -354,6 +353,18 @@ const AppMenuButton = new Lang.Class({
onCompleteScope: this }); onCompleteScope: this });
}, },
_onStyleChanged: function(actor) {
let node = actor.get_theme_node();
let [success, icon] = node.lookup_url('spinner-image', false);
if (!success || this._spinnerIcon == icon)
return;
this._spinnerIcon = icon;
this._spinner = new AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
this._container.add_actor(this._spinner.actor);
this._spinner.actor.hide();
this._spinner.actor.lower_bottom();
},
_onIconBoxStyleChanged: function() { _onIconBoxStyleChanged: function() {
let node = this._iconBox.get_theme_node(); let node = this._iconBox.get_theme_node();
this._iconBottomClip = node.get_length('app-icon-bottom-clip'); this._iconBottomClip = node.get_length('app-icon-bottom-clip');
@ -385,6 +396,10 @@ const AppMenuButton = new Lang.Class({
this._stop = true; this._stop = true;
this.actor.reactive = true; this.actor.reactive = true;
if (this._spinner == null)
return;
Tweener.addTween(this._spinner.actor, Tweener.addTween(this._spinner.actor,
{ opacity: 0, { opacity: 0,
time: SPINNER_ANIMATION_TIME, time: SPINNER_ANIMATION_TIME,
@ -401,6 +416,10 @@ const AppMenuButton = new Lang.Class({
startAnimation: function() { startAnimation: function() {
this._stop = false; this._stop = false;
this.actor.reactive = false; this.actor.reactive = false;
if (this._spinner == null)
return;
this._spinner.play(); this._spinner.play();
this._spinner.actor.show(); this._spinner.actor.show();
}, },
@ -463,6 +482,9 @@ const AppMenuButton = new Lang.Class({
} }
this._label.actor.allocate(childBox, flags); this._label.actor.allocate(childBox, flags);
if (this._spinner == null)
return;
if (direction == Clutter.TextDirection.LTR) { if (direction == Clutter.TextDirection.LTR) {
childBox.x1 = Math.floor(iconWidth / 2) + this._label.actor.width; childBox.x1 = Math.floor(iconWidth / 2) + this._label.actor.width;
childBox.x2 = childBox.x1 + this._spinner.actor.width; childBox.x2 = childBox.x1 + this._spinner.actor.width;
@ -553,7 +575,8 @@ const AppMenuButton = new Lang.Class({
return; return;
} }
this._spinner.actor.hide(); if (this._spinner)
this._spinner.actor.hide();
if (this._iconBox.child != null) if (this._iconBox.child != null)
this._iconBox.child.destroy(); this._iconBox.child.destroy();
this._iconBox.hide(); this._iconBox.hide();
@ -616,6 +639,33 @@ const AppMenuButton = new Lang.Class({
this.setMenu(menu); this.setMenu(menu);
this._menuManager.addMenu(menu); this._menuManager.addMenu(menu);
},
destroy: function() {
if (this._appStateChangedSignalId > 0) {
let appSys = Shell.AppSystem.get_default();
appSys.disconnect(this._appStateChangedSignalId);
this._appStateChangedSignalId = 0;
}
if (this._focusAppNotifyId > 0) {
let tracker = Shell.WindowTracker.get_default();
tracker.disconnect(this._focusAppNotifyId);
this._focusAppNotifyId = 0;
}
if (this._overviewHidingId > 0) {
Main.overview.disconnect(this._overviewHidingId);
this._overviewHidingId = 0;
}
if (this._overviewShowingId > 0) {
Main.overview.disconnect(this._overviewShowingId);
this._overviewShowingId = 0;
}
if (this._switchWorkspaceNotifyId > 0) {
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
this._switchWorkspaceNotifyId = 0;
}
this.parent();
} }
}); });
@ -873,7 +923,6 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
'volume': imports.ui.status.volume.Indicator, 'volume': imports.ui.status.volume.Indicator,
'battery': imports.ui.status.power.Indicator, 'battery': imports.ui.status.power.Indicator,
'lockScreen': imports.ui.status.lockScreenMenu.Indicator, 'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
'logo': imports.gdm.loginDialog.LogoMenuButton,
'keyboard': imports.ui.status.keyboard.InputSourceIndicator, 'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
'powerMenu': imports.gdm.powerMenu.PowerMenuButton, 'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
'userMenu': imports.ui.userMenu.UserMenuButton 'userMenu': imports.ui.userMenu.UserMenuButton
@ -902,7 +951,7 @@ const Panel = new Lang.Class({
this.statusArea = {}; this.statusArea = {};
this.menuManager = new PopupMenu.PopupMenuManager(this); this.menuManager = new PopupMenu.PopupMenuManager(this, { keybindingMode: Shell.KeyBindingMode.TOPBAR_POPUP });
this._leftBox = new St.BoxLayout({ name: 'panelLeft' }); this._leftBox = new St.BoxLayout({ name: 'panelLeft' });
this.actor.add_actor(this._leftBox); this.actor.add_actor(this._leftBox);
@ -1056,17 +1105,18 @@ const Panel = new Lang.Class({
return true; return true;
}, },
openAppMenu: function() { toggleAppMenu: function() {
let indicator = this.statusArea.appMenu; let indicator = this.statusArea.appMenu;
if (!indicator) // appMenu not supported by current session mode if (!indicator) // appMenu not supported by current session mode
return; return;
let menu = indicator.menu; let menu = indicator.menu;
if (!indicator.actor.reactive || menu.isOpen) if (!indicator.actor.reactive)
return; return;
menu.open(); menu.toggle();
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); if (menu.isOpen)
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}, },
set boxOpacity(value) { set boxOpacity(value) {

View File

@ -1157,6 +1157,7 @@ const PopupMenuBase = new Lang.Class({
}, },
destroy: function() { destroy: function() {
this.close();
this.removeAll(); this.removeAll();
this.actor.destroy(); this.actor.destroy();
@ -2051,9 +2052,9 @@ const RemoteMenu = new Lang.Class({
const PopupMenuManager = new Lang.Class({ const PopupMenuManager = new Lang.Class({
Name: 'PopupMenuManager', Name: 'PopupMenuManager',
_init: function(owner) { _init: function(owner, grabParams) {
this._owner = owner; this._owner = owner;
this._grabHelper = new GrabHelper.GrabHelper(owner.actor); this._grabHelper = new GrabHelper.GrabHelper(owner.actor, grabParams);
this._menus = []; this._menus = [];
}, },
@ -2086,7 +2087,7 @@ const PopupMenuManager = new Lang.Class({
}, },
removeMenu: function(menu) { removeMenu: function(menu) {
if (menu == this._activeMenu) if (menu == this.activeMenu)
this._closeMenu(menu); this._closeMenu(menu);
let position = this._findMenu(menu); let position = this._findMenu(menu);
@ -2110,9 +2111,9 @@ const PopupMenuManager = new Lang.Class({
}, },
get activeMenu() { get activeMenu() {
let actor = this._grabHelper.currentGrab.actor; let firstGrab = this._grabHelper.grabStack[0];
if (actor) if (firstGrab)
return actor._delegate; return firstGrab.actor._delegate;
else else
return null; return null;
}, },
@ -2123,6 +2124,8 @@ const PopupMenuManager = new Lang.Class({
_onMenuOpenState: function(menu, open) { _onMenuOpenState: function(menu, open) {
if (open) { if (open) {
if (this.activeMenu)
this.activeMenu.close(BoxPointer.PopupAnimation.FADE);
this._grabHelper.grab({ actor: menu.actor, modal: true, focus: menu.sourceActor, this._grabHelper.grab({ actor: menu.actor, modal: true, focus: menu.sourceActor,
onUngrab: Lang.bind(this, this._closeMenu, menu) }); onUngrab: Lang.bind(this, this._closeMenu, menu) });
} else { } else {
@ -2139,13 +2142,8 @@ const PopupMenuManager = new Lang.Class({
}, },
_changeMenu: function(newMenu) { _changeMenu: function(newMenu) {
let oldMenu = this.activeMenu; newMenu.open(this.activeMenu ? BoxPointer.PopupAnimation.FADE
if (oldMenu) { : BoxPointer.PopupAnimation.FULL);
oldMenu.close(BoxPointer.PopupAnimation.FADE);
newMenu.open(BoxPointer.PopupAnimation.FADE);
} else {
newMenu.open(BoxPointer.PopupAnimation.FULL);
}
}, },
_onMenuSourceEnter: function(menu) { _onMenuSourceEnter: function(menu) {

View File

@ -127,8 +127,6 @@ function remoteProvidersLoaded(loadState) {
// Special case gnome-control-center to be always active and always first // Special case gnome-control-center to be always active and always first
sortOrder.unshift('gnome-control-center.desktop'); sortOrder.unshift('gnome-control-center.desktop');
let numSorted = sortOrder.length;
loadState.loadedProviders.sort( loadState.loadedProviders.sort(
function(providerA, providerB) { function(providerA, providerB) {
let idxA, idxB; let idxA, idxB;
@ -148,15 +146,6 @@ function remoteProvidersLoaded(loadState) {
return GLib.utf8_collate(nameA, nameB); return GLib.utf8_collate(nameA, nameB);
} }
if (numSorted > 1) {
// if providerA is the last, it goes after everything
if ((idxA + 1) == numSorted)
return 1;
// if providerB is the last, it goes after everything
else if ((idxB + 1) == numSorted)
return -1;
}
// if providerA isn't found, it's sorted after providerB // if providerA isn't found, it's sorted after providerB
if (idxA == -1) if (idxA == -1)
return 1; return 1;

View File

@ -35,7 +35,8 @@ const RunDialog = new Lang.Class({
Extends: ModalDialog.ModalDialog, Extends: ModalDialog.ModalDialog,
_init : function() { _init : function() {
this.parent({ styleClass: 'run-dialog' }); this.parent({ styleClass: 'run-dialog',
destroyOnClose: false });
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA }); this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
this._terminalSettings = new Gio.Settings({ schema: TERMINAL_SCHEMA }); this._terminalSettings = new Gio.Settings({ schema: TERMINAL_SCHEMA });

View File

@ -50,7 +50,7 @@ const SUMMARY_ICON_SIZE = 48;
// - CURTAIN_SLIDE_TIME is used when raising the shield before unlocking // - CURTAIN_SLIDE_TIME is used when raising the shield before unlocking
// - INITIAL_FADE_IN_TIME is used for the initial fade in at startup // - INITIAL_FADE_IN_TIME is used for the initial fade in at startup
const STANDARD_FADE_TIME = 10; const STANDARD_FADE_TIME = 10;
const MANUAL_FADE_TIME = 0.8; const MANUAL_FADE_TIME = 0.3;
const BACKGROUND_FADE_TIME = 1.0; const BACKGROUND_FADE_TIME = 1.0;
const CURTAIN_SLIDE_TIME = 0.3; const CURTAIN_SLIDE_TIME = 0.3;
const INITIAL_FADE_IN_TIME = 0.25; const INITIAL_FADE_IN_TIME = 0.25;
@ -512,9 +512,12 @@ const ScreenShield = new Lang.Class({
Lang.bind(this, this._prepareForSleep)); Lang.bind(this, this._prepareForSleep));
this._inhibitSuspend(); this._inhibitSuspend();
this._loginSession = this._loginManager.getCurrentSessionProxy(); this._loginManager.getCurrentSessionProxy(Lang.bind(this,
this._loginSession.connectSignal('Lock', Lang.bind(this, function() { this.lock(false); })); function(sessionProxy) {
this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); })); this._loginSession = sessionProxy;
this._loginSession.connectSignal('Lock', Lang.bind(this, function() { this.lock(false); }));
this._loginSession.connectSignal('Unlock', Lang.bind(this, function() { this.deactivate(false); }));
}));
this._settings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA }); this._settings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
@ -547,9 +550,7 @@ const ScreenShield = new Lang.Class({
let bgManager = new Background.BackgroundManager({ container: widget, let bgManager = new Background.BackgroundManager({ container: widget,
monitorIndex: monitorIndex, monitorIndex: monitorIndex,
effects: Meta.BackgroundEffects.BLUR | Meta.BackgroundEffects.DESATURATE,
controlPosition: false }); controlPosition: false });
bgManager.background.saturation = 0.6;
this._bgManagers.push(bgManager); this._bgManagers.push(bgManager);
@ -561,6 +562,7 @@ const ScreenShield = new Lang.Class({
this._bgManagers[i].destroy(); this._bgManagers[i].destroy();
this._bgManagers = []; this._bgManagers = [];
this._backgroundGroup.destroy_all_children();
for (let i = 0; i < Main.layoutManager.monitors.length; i++) for (let i = 0; i < Main.layoutManager.monitors.length; i++)
this._createBackground(i); this._createBackground(i);
@ -1113,6 +1115,9 @@ const ScreenShield = new Lang.Class({
deactivate: function(animate) { deactivate: function(animate) {
this._hideLockScreen(animate, 0); this._hideLockScreen(animate, 0);
if (this._hasLockScreen)
this._clearLockScreen();
if (Main.sessionMode.currentMode == 'lock-screen') if (Main.sessionMode.currentMode == 'lock-screen')
Main.sessionMode.popMode('lock-screen'); Main.sessionMode.popMode('lock-screen');
if (Main.sessionMode.currentMode == 'unlock-dialog') if (Main.sessionMode.currentMode == 'unlock-dialog')
@ -1129,9 +1134,6 @@ const ScreenShield = new Lang.Class({
}, },
_completeDeactivate: function() { _completeDeactivate: function() {
if (this._hasLockScreen)
this._clearLockScreen();
if (this._dialog && !this._isGreeter) { if (this._dialog && !this._isGreeter) {
this._dialog.destroy(); this._dialog.destroy();
this._dialog = null; this._dialog = null;

138
js/ui/screencast.js Normal file
View File

@ -0,0 +1,138 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const Hash = imports.misc.hash;
const Main = imports.ui.main;
const ScreencastIface = <interface name="org.gnome.Shell.Screencast">
<method name="Screencast">
<arg type="s" direction="in" name="file_template"/>
<arg type="a{sv}" direction="in" name="options"/>
<arg type="b" direction="out" name="success"/>
<arg type="s" direction="out" name="filename_used"/>
</method>
<method name="ScreencastArea">
<arg type="i" direction="in" name="x"/>
<arg type="i" direction="in" name="y"/>
<arg type="i" direction="in" name="width"/>
<arg type="i" direction="in" name="height"/>
<arg type="s" direction="in" name="file_template"/>
<arg type="a{sv}" direction="in" name="options"/>
<arg type="b" direction="out" name="success"/>
<arg type="s" direction="out" name="filename_used"/>
</method>
<method name="StopScreencast">
<arg type="b" direction="out" name="success"/>
</method>
</interface>;
const ScreencastService = new Lang.Class({
Name: 'ScreencastService',
_init: function() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreencastIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screencast');
Gio.DBus.session.own_name('org.gnome.Shell.Screencast', Gio.BusNameOwnerFlags.REPLACE, null, null);
this._recorders = new Hash.Map();
Main.sessionMode.connect('updated',
Lang.bind(this, this._sessionModeChanged));
},
_ensureRecorderForSender: function(sender) {
let recorder = this._recorders.get(sender);
if (!recorder) {
recorder = new Shell.Recorder({ stage: global.stage });
recorder._watchNameId =
Gio.bus_watch_name(Gio.BusType.SESSION, sender, 0, null,
Lang.bind(this, this._onNameVanished));
this._recorders.set(sender, recorder);
}
return recorder;
},
_sessionModeChanged: function() {
if (Main.sessionMode.allowScreencast)
return;
for (let sender in this._recorders.keys())
this._recorders.delete(sender);
},
_onNameVanished: function(connection, name) {
this._stopRecordingForSender(name);
},
_stopRecordingForSender: function(sender) {
let recorder = this._recorders.get(sender);
if (!recorder)
return false;
Gio.bus_unwatch_name(recorder._watchNameId);
recorder.close();
this._recorders.delete(sender);
return true;
},
_applyOptionalParameters: function(recorder, options) {
for (let option in options)
options[option] = options[option].deep_unpack();
if (options['pipeline'])
recorder.set_pipeline(options['pipeline']);
if (options['framerate'])
recorder.set_framerate(options['framerate']);
if (options['draw-cursor'])
recorder.set_draw_cursor(options['draw-cursor']);
},
ScreencastAsync: function(params, invocation) {
let returnValue = [false, ''];
if (!Main.sessionMode.allowScreencast)
invocation.return_value(GLib.Variant.new('(bs)', returnValue));
let sender = invocation.get_sender();
let recorder = this._ensureRecorderForSender(sender);
if (!recorder.is_recording()) {
let [fileTemplate, options] = params;
recorder.set_file_template(fileTemplate);
this._applyOptionalParameters(recorder, options);
returnValue = recorder.record();
}
invocation.return_value(GLib.Variant.new('(bs)', returnValue));
},
ScreencastAreaAsync: function(params, invocation) {
let returnValue = [false, ''];
if (!Main.sessionMode.allowScreencast)
invocation.return_value(GLib.Variant.new('(bs)', returnValue));
let sender = invocation.get_sender();
let recorder = this._ensureRecorderForSender(sender);
if (!recorder.is_recording()) {
let [x, y, width, height, fileTemplate, options] = params;
recorder.set_file_template(fileTemplate);
recorder.set_area(x, y, width, height);
this._applyOptionalParameters(recorder, options);
returnValue = recorder.record();
}
invocation.return_value(GLib.Variant.new('(bs)', returnValue));
},
StopScreencastAsync: function(params, invocation) {
let success = this._stopRecordingForSender(invocation.get_sender());
invocation.return_value(GLib.Variant.new('(b)', [success]));
}
});

View File

@ -45,7 +45,7 @@ const _modes = {
unlockDialog: imports.gdm.loginDialog.LoginDialog, unlockDialog: imports.gdm.loginDialog.LoginDialog,
components: ['polkitAgent'], components: ['polkitAgent'],
panel: { panel: {
left: ['logo'], left: [],
center: ['dateMenu'], center: ['dateMenu'],
right: ['a11yGreeter', 'display', 'keyboard', right: ['a11yGreeter', 'display', 'keyboard',
'volume', 'battery', 'powerMenu'] 'volume', 'battery', 'powerMenu']
@ -79,12 +79,13 @@ const _modes = {
}, },
'initial-setup': { 'initial-setup': {
hasWindows: true,
isPrimary: true, isPrimary: true,
components: ['keyring'], components: ['networkAgent', 'keyring'],
panel: { panel: {
left: [], left: [],
center: ['dateMenu'], center: ['dateMenu'],
right: ['a11yGreeter', 'keyboard', 'volume'] right: ['a11yGreeter', 'keyboard', 'volume', 'battery']
} }
}, },
@ -194,6 +195,10 @@ const SessionMode = new Lang.Class({
return this._modeStack[this._modeStack.length - 1]; return this._modeStack[this._modeStack.length - 1];
}, },
get allowScreencast() {
return this.components.indexOf('recorder') != -1;
},
_sync: function() { _sync: function() {
let params = this._modes[this.currentMode]; let params = this._modes[this.currentMode];
let defaults; let defaults;

View File

@ -12,6 +12,7 @@ const ExtensionDownloader = imports.ui.extensionDownloader;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Hash = imports.misc.hash; const Hash = imports.misc.hash;
const Main = imports.ui.main; const Main = imports.ui.main;
const Screencast = imports.ui.screencast;
const Screenshot = imports.ui.screenshot; const Screenshot = imports.ui.screenshot;
const GnomeShellIface = <interface name="org.gnome.Shell"> const GnomeShellIface = <interface name="org.gnome.Shell">
@ -70,6 +71,7 @@ const GnomeShell = new Lang.Class({
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell');
this._extensionsService = new GnomeShellExtensions(); this._extensionsService = new GnomeShellExtensions();
this._screencastService = new Screencast.ScreencastService();
this._screenshotService = new Screenshot.ScreenshotService(); this._screenshotService = new Screenshot.ScreenshotService();
this._grabbedAccelerators = new Hash.Map(); this._grabbedAccelerators = new Hash.Map();
@ -97,7 +99,7 @@ const GnomeShell = new Lang.Class({
*/ */
Eval: function(code) { Eval: function(code) {
if (!global.settings.get_boolean('development-tools')) if (!global.settings.get_boolean('development-tools'))
return [false, null]; return [false, ''];
let returnValue; let returnValue;
let success; let success;
@ -397,7 +399,7 @@ const ScreenSaverDBus = new Lang.Class({
if (active) if (active)
this._screenShield.activate(true); this._screenShield.activate(true);
else else
this._screenShield.unlock(false); this._screenShield.deactivate(false);
}, },
GetActive: function() { GetActive: function() {

View File

@ -14,9 +14,7 @@ const EntryMenu = new Lang.Class({
Name: 'ShellEntryMenu', Name: 'ShellEntryMenu',
Extends: PopupMenu.PopupMenu, Extends: PopupMenu.PopupMenu,
_init: function(entry, params) { _init: function(entry) {
params = Params.parse (params, { isPassword: false });
this.parent(entry, 0, St.Side.TOP); this.parent(entry, 0, St.Side.TOP);
this.actor.add_style_class_name('entry-context-menu'); this.actor.add_style_class_name('entry-context-menu');
@ -37,8 +35,6 @@ const EntryMenu = new Lang.Class({
this._pasteItem = item; this._pasteItem = item;
this._passwordItem = null; this._passwordItem = null;
if (params.isPassword)
this._makePasswordItem();
Main.uiGroup.add_actor(this.actor); Main.uiGroup.add_actor(this.actor);
this.actor.hide(); this.actor.hide();
@ -53,19 +49,21 @@ const EntryMenu = new Lang.Class({
}, },
get isPassword() { get isPassword() {
return this._passwordItem != null; return this._passwordItem != null;
}, },
set isPassword(v) { set isPassword(v) {
if (v == this.isPassword) if (v == this.isPassword)
return; return;
if (v) if (v) {
this._makePasswordItem(); this._makePasswordItem();
else { this._entry.input_purpose = Gtk.InputPurpose.PASSWORD;
this._passwordItem.destroy(); } else {
this._passwordItem = null; this._passwordItem.destroy();
} this._passwordItem = null;
this._entry.input_purpose = Gtk.InputPurpose.FREE_FORM;
}
}, },
open: function(animate) { open: function(animate) {
@ -82,11 +80,6 @@ const EntryMenu = new Lang.Class({
this.actor.grab_key_focus(); this.actor.grab_key_focus();
}, },
close: function(animate) {
this._entry.grab_key_focus();
this.parent(animate);
},
_updateCopyItem: function() { _updateCopyItem: function() {
let selection = this._entry.clutter_text.get_selection(); let selection = this._entry.clutter_text.get_selection();
this._copyItem.setSensitive(!this._entry.clutter_text.password_char && this._copyItem.setSensitive(!this._entry.clutter_text.password_char &&
@ -160,7 +153,10 @@ function addContextMenu(entry, params) {
if (entry.menu) if (entry.menu)
return; return;
entry.menu = new EntryMenu(entry, params); params = Params.parse (params, { isPassword: false });
entry.menu = new EntryMenu(entry);
entry.menu.isPassword = params.isPassword;
entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry }); entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
entry._menuManager.addMenu(entry.menu); entry._menuManager.addMenu(entry.menu);
@ -171,4 +167,10 @@ function addContextMenu(entry, params) {
entry.connect('button-press-event', Lang.bind(null, _onButtonPressEvent, entry)); entry.connect('button-press-event', Lang.bind(null, _onButtonPressEvent, entry));
entry.connect('popup-menu', Lang.bind(null, _onPopup, entry)); entry.connect('popup-menu', Lang.bind(null, _onPopup, entry));
entry.connect('destroy', function() {
entry.menu.destroy();
entry.menu = null;
entry._menuManager = null;
});
} }

View File

@ -45,26 +45,24 @@ const IBusManager = new Lang.Class({
this._readyCallback = readyCallback; this._readyCallback = readyCallback;
this._candidatePopup = new IBusCandidatePopup.CandidatePopup(); this._candidatePopup = new IBusCandidatePopup.CandidatePopup();
this._ibus = null;
this._panelService = null; this._panelService = null;
this._engines = {}; this._engines = {};
this._ready = false; this._ready = false;
this._registerPropertiesId = 0; this._registerPropertiesId = 0;
this._currentEngineName = null; this._currentEngineName = null;
this._nameWatcherId = Gio.DBus.session.watch_name(IBus.SERVICE_IBUS, this._ibus = IBus.Bus.new_async();
Gio.BusNameWatcherFlags.NONE, this._ibus.connect('connected', Lang.bind(this, this._onConnected));
Lang.bind(this, this._onNameAppeared), this._ibus.connect('disconnected', Lang.bind(this, this._clear));
Lang.bind(this, this._clear)); // Need to set this to get 'global-engine-changed' emitions
this._ibus.set_watch_ibus_signal(true);
this._ibus.connect('global-engine-changed', Lang.bind(this, this._engineChanged));
}, },
_clear: function() { _clear: function() {
if (this._panelService) if (this._panelService)
this._panelService.destroy(); this._panelService.destroy();
if (this._ibus)
this._ibus.destroy();
this._ibus = null;
this._panelService = null; this._panelService = null;
this._candidatePopup.setPanelService(null); this._candidatePopup.setPanelService(null);
this._engines = {}; this._engines = {};
@ -76,18 +74,12 @@ const IBusManager = new Lang.Class({
this._readyCallback(false); this._readyCallback(false);
}, },
_onNameAppeared: function() {
this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', Lang.bind(this, this._onConnected));
},
_onConnected: function() { _onConnected: function() {
this._ibus.list_engines_async(-1, null, Lang.bind(this, this._initEngines)); this._ibus.list_engines_async(-1, null, Lang.bind(this, this._initEngines));
this._ibus.request_name_async(IBus.SERVICE_PANEL, this._ibus.request_name_async(IBus.SERVICE_PANEL,
IBus.BusNameFlag.REPLACE_EXISTING, IBus.BusNameFlag.REPLACE_EXISTING,
-1, null, -1, null,
Lang.bind(this, this._initPanelService)); Lang.bind(this, this._initPanelService));
this._ibus.connect('disconnected', Lang.bind(this, this._clear));
}, },
_initEngines: function(ibus, result) { _initEngines: function(ibus, result) {
@ -109,9 +101,6 @@ const IBusManager = new Lang.Class({
this._panelService = new IBus.PanelService({ connection: this._ibus.get_connection(), this._panelService = new IBus.PanelService({ connection: this._ibus.get_connection(),
object_path: IBus.PATH_PANEL }); object_path: IBus.PATH_PANEL });
this._candidatePopup.setPanelService(this._panelService); this._candidatePopup.setPanelService(this._panelService);
// Need to set this to get 'global-engine-changed' emitions
this._ibus.set_watch_ibus_signal(true);
this._ibus.connect('global-engine-changed', Lang.bind(this, this._engineChanged));
this._panelService.connect('update-property', Lang.bind(this, this._updateProperty)); this._panelService.connect('update-property', Lang.bind(this, this._updateProperty));
// If an engine is already active we need to get its properties // If an engine is already active we need to get its properties
this._ibus.get_global_engine_async(-1, null, Lang.bind(this, function(i, result) { this._ibus.get_global_engine_async(-1, null, Lang.bind(this, function(i, result) {
@ -140,6 +129,9 @@ const IBusManager = new Lang.Class({
}, },
_engineChanged: function(bus, engineName) { _engineChanged: function(bus, engineName) {
if (!this._ready)
return;
this._currentEngineName = engineName; this._currentEngineName = engineName;
if (this._registerPropertiesId != 0) if (this._registerPropertiesId != 0)

View File

@ -2047,6 +2047,7 @@ const NMApplet = new Lang.Class({
let default_ip4 = null; let default_ip4 = null;
let default_ip6 = null; let default_ip6 = null;
let active_vpn = null; let active_vpn = null;
let active_any = null;
for (let i = 0; i < this._activeConnections.length; i++) { for (let i = 0; i < this._activeConnections.length; i++) {
let a = this._activeConnections[i]; let a = this._activeConnections[i];
@ -2077,10 +2078,15 @@ const NMApplet = new Lang.Class({
if (a.default6) if (a.default6)
default_ip6 = a; default_ip6 = a;
if (a._type == 'vpn') if (a.state == NetworkManager.ActiveConnectionState.ACTIVATING)
active_vpn = a;
else if (a.state == NetworkManager.ActiveConnectionState.ACTIVATING)
activating = a; activating = a;
else if (a.state == NetworkManager.ActiveConnectionState.ACTIVE)
active_any = a;
if (a._type == 'vpn' &&
(a.state == NetworkManager.ActiveConnectionState.ACTIVATING ||
a.state == NetworkManager.ActiveConnectionState.ACTIVE))
active_vpn = a;
if (!a._primaryDevice) { if (!a._primaryDevice) {
if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) { if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) {
@ -2108,7 +2114,7 @@ const NMApplet = new Lang.Class({
} }
} }
this._mainConnection = activating || default_ip4 || default_ip6 || this._activeConnections[0] || null; this._mainConnection = activating || default_ip4 || default_ip6 || active_any || null;
this._vpnConnection = active_vpn; this._vpnConnection = active_vpn;
}, },

View File

@ -91,9 +91,6 @@ const UnlockDialog = new Lang.Class({
this._promptLoginHint.hide(); this._promptLoginHint.hide();
this.contentLayout.add_actor(this._promptLoginHint); this.contentLayout.add_actor(this._promptLoginHint);
this._workSpinner = new Panel.AnimatedIcon('process-working.svg', LoginDialog.WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0;
this.allowCancel = false; this.allowCancel = false;
this.buttonLayout.visible = true; this.buttonLayout.visible = true;
this.addButton({ label: _("Cancel"), this.addButton({ label: _("Cancel"),
@ -104,12 +101,11 @@ const UnlockDialog = new Lang.Class({
y_fill: false, y_fill: false,
x_align: St.Align.START, x_align: St.Align.START,
y_align: St.Align.MIDDLE }); y_align: St.Align.MIDDLE });
this.buttonLayout.add(this._workSpinner.actor, this.placeSpinner({ expand: false,
{ expand: false, x_fill: false,
x_fill: false, y_fill: false,
y_fill: false, x_align: St.Align.END,
x_align: St.Align.END, y_align: St.Align.MIDDLE });
y_align: St.Align.MIDDLE });
this._okButton = this.addButton({ label: _("Unlock"), this._okButton = this.addButton({ label: _("Unlock"),
action: Lang.bind(this, this._doUnlock), action: Lang.bind(this, this._doUnlock),
default: true }, default: true },
@ -163,28 +159,6 @@ const UnlockDialog = new Lang.Class({
this._okButton.can_focus = sensitive; this._okButton.can_focus = sensitive;
}, },
_setWorking: function(working) {
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: LoginDialog.WORK_SPINNER_ANIMATION_DELAY,
time: LoginDialog.WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: LoginDialog.WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
this._workSpinner.stop();
}
});
}
},
_showMessage: function(userVerifier, message, styleClass) { _showMessage: function(userVerifier, message, styleClass) {
if (message) { if (message) {
this._promptMessage.text = message; this._promptMessage.text = message;
@ -215,7 +189,7 @@ const UnlockDialog = new Lang.Class({
this._currentQuery = serviceName; this._currentQuery = serviceName;
this._updateSensitivity(true); this._updateSensitivity(true);
this._setWorking(false); this.setWorking(false);
}, },
_showLoginHint: function(verifier, message) { _showLoginHint: function(verifier, message) {
@ -234,7 +208,7 @@ const UnlockDialog = new Lang.Class({
// the actual reply to GDM will be sent as soon as asked // the actual reply to GDM will be sent as soon as asked
this._firstQuestionAnswer = this._promptEntry.text; this._firstQuestionAnswer = this._promptEntry.text;
this._updateSensitivity(false); this._updateSensitivity(false);
this._setWorking(true); this.setWorking(true);
return; return;
} }
@ -245,7 +219,7 @@ const UnlockDialog = new Lang.Class({
this._currentQuery = null; this._currentQuery = null;
this._updateSensitivity(false); this._updateSensitivity(false);
this._setWorking(true); this.setWorking(true);
this._userVerifier.answerQuery(query, this._promptEntry.text); this._userVerifier.answerQuery(query, this._promptEntry.text);
}, },
@ -285,7 +259,7 @@ const UnlockDialog = new Lang.Class({
this._promptEntry.menu.isPassword = true; this._promptEntry.menu.isPassword = true;
this._updateSensitivity(false); this._updateSensitivity(false);
this._setWorking(false); this.setWorking(false);
}, },
_escape: function() { _escape: function() {

View File

@ -172,8 +172,9 @@ const WindowManager = new Lang.Class({
this.addKeybinding('open-application-menu', this.addKeybinding('open-application-menu',
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL, Shell.KeyBindingMode.NORMAL |
Lang.bind(this, this._openAppMenu)); Shell.KeyBindingMode.TOPBAR_POPUP,
Lang.bind(this, this._toggleAppMenu));
Main.overview.connect('showing', Lang.bind(this, function() { Main.overview.connect('showing', Lang.bind(this, function() {
for (let i = 0; i < this._dimmedWindows.length; i++) for (let i = 0; i < this._dimmedWindows.length; i++)
@ -679,8 +680,8 @@ const WindowManager = new Lang.Class({
Main.ctrlAltTabManager.popup(backwards, binding.get_name(), binding.get_mask()); Main.ctrlAltTabManager.popup(backwards, binding.get_name(), binding.get_mask());
}, },
_openAppMenu : function(display, screen, window, event, binding) { _toggleAppMenu : function(display, screen, window, event, binding) {
Main.panel.openAppMenu(); Main.panel.toggleAppMenu();
}, },
_showWorkspaceSwitcher : function(display, screen, window, binding) { _showWorkspaceSwitcher : function(display, screen, window, binding) {

View File

@ -384,9 +384,8 @@ const WorkspaceThumbnail = new Lang.Class({
}, },
destroy : function() { destroy : function() {
this.actor.destroy(); if (this.actor)
this._bgManager.destroy(); this.actor.destroy();
this._bgManager = null;
}, },
workspaceRemoved : function() { workspaceRemoved : function() {
@ -407,6 +406,11 @@ const WorkspaceThumbnail = new Lang.Class({
_onDestroy: function(actor) { _onDestroy: function(actor) {
this.workspaceRemoved(); this.workspaceRemoved();
if (this._bgManager) {
this._bgManager.destroy();
this._bgManager = null;
}
this._windows = []; this._windows = [];
this.actor = null; this.actor = null;
}, },

View File

@ -28,6 +28,7 @@ gu
he he
hi hi
hu hu
ia
id id
it it
ja ja
@ -60,6 +61,7 @@ sr@latin
sv sv
ta ta
te te
tg
th th
tr tr
ug ug

View File

@ -55,6 +55,7 @@ js/ui/viewSelector.js
js/ui/wanda.js js/ui/wanda.js
js/ui/windowAttentionHandler.js js/ui/windowAttentionHandler.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.
src/gvc/gvc-mixer-control.c src/gvc/gvc-mixer-control.c
src/main.c src/main.c
src/shell-app.c src/shell-app.c

2226
po/an.po

File diff suppressed because it is too large Load Diff

895
po/ar.po

File diff suppressed because it is too large Load Diff

104
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: 2013-03-14 18:11+0000\n" "POT-Creation-Date: 2013-03-31 01:48+0000\n"
"PO-Revision-Date: 2012-10-16 12:05+0300\n" "PO-Revision-Date: 2012-10-16 12:05+0300\n"
"Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n" "Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n" "Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
@ -124,13 +124,15 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9 #: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "List of categories that should be displayed as folders" msgid "List of categories that should be displayed as folders"
msgstr "" msgstr "Спіс катэгорый, якія трэба паказваць як папкі"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10 #: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "" msgid ""
"Each category name in this list will be represented as folder in the " "Each category name in this list will be represented as folder in the "
"application view, rather than being displayed inline in the main view." "application view, rather than being displayed inline in the main view."
msgstr "" msgstr ""
"Кожная катэгорыя ў спісе будзе выяўлена як папка ў рэжыме праграм, а не "
"ўкарэнена ў галоўны від акна."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11 #: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
@ -159,18 +161,22 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15 #: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Always show the 'Log out' menuitem in the user menu." msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "" msgstr "Заўсёды паказваць элемент \"Выйсці з сеанса\" ў меню карыстальніка."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16 #: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "" msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-" "This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations." "user, single-session situations."
msgstr "" msgstr ""
"Гэты ключ падмяняе аўтаматычнае хаванне элемента меню \"Выйсці з сеанса\" ў "
"выпадку аднаго карыстальніка з адным сеансам."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17 #: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "" msgid ""
"Whether to remember password for mounting encrypted or remote filesystems" "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "" msgstr ""
"Ці трэба запамінаць пароль для прымацавання зашыфраваных і аддаленых "
"файлавых сістэм"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18 #: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "" msgid ""
@ -179,6 +185,10 @@ msgid ""
"'Remember Password' checkbox will be present. This key sets the default " "'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox." "state of the checkbox."
msgstr "" msgstr ""
"Абалонка запатрабуе пароль пры прымацавані зашыфраванага прыстасавання або "
"аддаленай файлавай сістэмы. Калі пароль можна будзе захаваць на будучыню, "
"будзе паказаны пераключальнік \"Запомніць пароль\". Гэты ключ вызначае "
"прадвызначанае становішча гэтага пераключальніка."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19 #: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Show the week date in the calendar" msgid "Show the week date in the calendar"
@ -304,37 +314,42 @@ msgid ""
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'." "only' (shows only the application icon) or 'both'."
msgstr "" msgstr ""
"Настройка паказу вокнаў у пераключальніку. Магчымыя значэнні: \"thumbnail-"
"only\" (паказваць мініяцюры вокнаў), \"app-icon-only\" (паказваць толькі "
"значкі праграм) і \"both\" (адразу ўсё)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "" msgstr "Чапляць мадальныя дыялогавыя акенцы да бацькоўскіх вокнаў"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell." "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "" msgstr "Гэты ключ падмяняе ключ у org.gnome.mutter пры запуску Абалонкі GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
msgid "Arrangement of buttons on the titlebar" msgid "Arrangement of buttons on the titlebar"
msgstr "" msgstr "Парадак кнопак у загалоўку акна"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45 #: ../data/org.gnome.shell.gschema.xml.in.in.h:45
msgid "" msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running " "This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell." "GNOME Shell."
msgstr "" msgstr ""
"Гэты ключ падмяняе ключ у org.gnome.desktop.wm.preferences пры запуску "
"Абалонкі GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr "Уключыць парадкаванне на краі экрана пры перацягванні туды вокнаў"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47 #: ../data/org.gnome.shell.gschema.xml.in.in.h:47
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "" msgstr "Дынамічнае кіраванне прасторамі працы"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48 #: ../data/org.gnome.shell.gschema.xml.in.in.h:48
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "" msgstr "Прасторы працы толькі для асноўнага манітора"
#: ../js/extensionPrefs/main.js:125 #: ../js/extensionPrefs/main.js:125
#, c-format #, c-format
@ -362,32 +377,32 @@ msgstr "Сеанс..."
msgid "Not listed?" msgid "Not listed?"
msgstr "Няма ў спісе?" msgstr "Няма ў спісе?"
#: ../js/gdm/loginDialog.js:784 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:98 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:99
#: ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Скасаваць" msgstr "Скасаваць"
#: ../js/gdm/loginDialog.js:800 #: ../js/gdm/loginDialog.js:802
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Увайсці" msgstr "Увайсці"
#: ../js/gdm/loginDialog.js:800 #: ../js/gdm/loginDialog.js:802
msgid "Next" msgid "Next"
msgstr "Далей" msgstr "Далей"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:915 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:917 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Імя карыстальніка: " msgstr "Імя карыстальніка: "
#: ../js/gdm/loginDialog.js:1159 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Акно ўваходу" msgstr "Акно ўваходу"
@ -410,17 +425,17 @@ msgstr "Перазапусціць сістэму"
msgid "Power Off" msgid "Power Off"
msgstr "Выключыць камп'ютар" msgstr "Выключыць камп'ютар"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Памылка ідэнтыфікацыі" msgstr "Памылка ідэнтыфікацыі"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(або правядзіце пальцам)" msgstr "(або правядзіце пальцам)"
#: ../js/gdm/util.js:324 #: ../js/gdm/util.js:391
#, c-format #, c-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(напр., карыстальнік ці %s)" msgstr "(напр., карыстальнік ці %s)"
@ -440,23 +455,23 @@ msgstr "Не ўдалося разабраць загад:"
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Не ўдалося выканаць \"%s\":" msgstr "Не ўдалося выканаць \"%s\":"
#: ../js/ui/appDisplay.js:325 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Часта" msgstr "Часта"
#: ../js/ui/appDisplay.js:332 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Усе" msgstr "Усе"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Новае акно" msgstr "Новае акно"
#: ../js/ui/appDisplay.js:893 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Выдаліць са спіса ўпадабанага" msgstr "Выдаліць са спіса ўпадабанага"
#: ../js/ui/appDisplay.js:894 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Дадаць у спіс упадабанага" msgstr "Дадаць у спіс упадабанага"
@ -493,7 +508,7 @@ msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%H\\u2236%M" msgstr "%H\\u2236%M"
#. Transators: 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:77 #: ../js/ui/calendar.js:77
@ -639,12 +654,12 @@ msgstr "Адлучаны знешні прывод"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Зменныя прыстасаванні" msgstr "Зменныя прыстасаванні"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Адкрыць у %s" msgstr "Адкрыць у %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Выняць" msgstr "Выняць"
@ -1206,15 +1221,15 @@ msgstr "Ачысціць спіс апавяшчэнняў"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Настройкі апавяшчэння" msgstr "Настройкі апавяшчэння"
#: ../js/ui/messageTray.js:1711 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Апавяшчэнні адсутнічаюць" msgstr "Апавяшчэнні адсутнічаюць"
#: ../js/ui/messageTray.js:1784 #: ../js/ui/messageTray.js:1782
msgid "Message Tray" msgid "Message Tray"
msgstr "Абшар апавяшчэнняў" msgstr "Абшар апавяшчэнняў"
#: ../js/ui/messageTray.js:2816 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Сістэмная інфармацыя" msgstr "Сістэмная інфармацыя"
@ -1223,7 +1238,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Невядомая" msgstr "Невядомая"
#: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:148 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1280,11 +1295,11 @@ msgstr "Закрыць"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:85 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:150 #: ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
@ -1292,11 +1307,11 @@ msgstr[0] "%d новае апавяшчэнне"
msgstr[1] "%d новыя апавяшчэнні" msgstr[1] "%d новыя апавяшчэнні"
msgstr[2] "%d новых апавяшчэнняў" msgstr[2] "%d новых апавяшчэнняў"
#: ../js/ui/screenShield.js:437 ../js/ui/userMenu.js:807 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Заблакіраваць" msgstr "Заблакіраваць"
#: ../js/ui/screenShield.js:635 #: ../js/ui/screenShield.js:640
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME патрабуе блакіравання экрана" msgstr "GNOME патрабуе блакіравання экрана"
@ -1307,19 +1322,19 @@ msgstr "GNOME патрабуе блакіравання экрана"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:756 ../js/ui/screenShield.js:1151 #: ../js/ui/screenShield.js:761 ../js/ui/screenShield.js:1197
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Не ўдалося заблакіраваць" msgstr "Не ўдалося заблакіраваць"
#: ../js/ui/screenShield.js:757 ../js/ui/screenShield.js:1152 #: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Блакіраванне стрымана праграмай" msgstr "Блакіраванне стрымана праграмай"
#: ../js/ui/searchDisplay.js:451 #: ../js/ui/searchDisplay.js:453
msgid "Searching…" msgid "Searching…"
msgstr "Пошук..." msgstr "Пошук..."
#: ../js/ui/searchDisplay.js:495 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Нічога не знойдзена." msgstr "Нічога не знойдзена."
@ -1347,7 +1362,7 @@ msgstr "Пароль"
msgid "Remember Password" msgid "Remember Password"
msgstr "Запомніць пароль" msgstr "Запомніць пароль"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:112 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113
msgid "Unlock" msgid "Unlock"
msgstr "Разблакіраваць" msgstr "Разблакіраваць"
@ -1756,11 +1771,11 @@ msgstr "Гучнасць"
msgid "Microphone" msgid "Microphone"
msgstr "Мікрафон" msgstr "Мікрафон"
#: ../js/ui/unlockDialog.js:123 #: ../js/ui/unlockDialog.js:124
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Увайсці іншым карыстальнікам" msgstr "Увайсці іншым карыстальнікам"
#: ../js/ui/unlockDialog.js:144 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Акно блакіравання" msgstr "Акно блакіравання"
@ -1874,9 +1889,9 @@ msgstr "Каляндар Evolution"
#, c-format #, c-format
msgid "%u Output" msgid "%u Output"
msgid_plural "%u Outputs" msgid_plural "%u Outputs"
msgstr[0] "" msgstr[0] "%u выхад"
msgstr[1] "" msgstr[1] "%u выхады"
msgstr[2] "" msgstr[2] "%u выхадаў"
#. translators: #. translators:
#. * The number of sound inputs on a particular device #. * The number of sound inputs on a particular device
@ -1924,4 +1939,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 "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"

1091
po/da.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

611
po/eu.po

File diff suppressed because it is too large Load Diff

1102
po/fa.po

File diff suppressed because it is too large Load Diff

1095
po/fr.po

File diff suppressed because it is too large Load Diff

1125
po/hi.po

File diff suppressed because it is too large Load Diff

900
po/hu.po

File diff suppressed because it is too large Load Diff

1938
po/ia.po Normal file

File diff suppressed because it is too large Load Diff

763
po/ja.po

File diff suppressed because it is too large Load Diff

1193
po/kn.po

File diff suppressed because it is too large Load Diff

228
po/lt.po
View File

@ -3,7 +3,7 @@
# This file is distributed under the same license as the gnome-shell package. # This file is distributed under the same license as the gnome-shell package.
# Žygimantas Beručka <zygis@gnome.org>, 2010, 2011, 2012. # Žygimantas Beručka <zygis@gnome.org>, 2010, 2011, 2012.
# Algimantas Margevičius <gymka@mail.ru>, 2011. # Algimantas Margevičius <gymka@mail.ru>, 2011.
# Mantas Kriaučiūnas <mantas@akl.lt>, 2012. # Mantas Kriaučiūnas <mantas@akl.lt>, 2012, 2013.
# Aurimas Černius <aurisc4@gmail.com>, 2013. # Aurimas Černius <aurisc4@gmail.com>, 2013.
# #
msgid "" msgid ""
@ -11,9 +11,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: 2013-03-04 08:38+0000\n" "POT-Creation-Date: 2013-03-23 11:49+0000\n"
"PO-Revision-Date: 2013-03-04 22:43+0200\n" "PO-Revision-Date: 2013-03-26 22:43+0200\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n" "Last-Translator: Mantas Kriaučiūnas <mantas@akl.lt>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n" "Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n" "Language: lt\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -213,13 +213,14 @@ msgstr "Klavišų susiejimas, kuriuo atveriamas programų meniu."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23 #: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to open the \"Show Applications\" view" msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Klavišų susiejimas, kuriuo atveriamas programų rodinys" msgstr "Klavišų susiejimas, kuriuo atveriamas programų paleidimo vaizdas"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24 #: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "" msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview." "Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "" msgstr ""
"Klavišų susiejimas, kuriuo atveriamas programų rodinys veiklų apžvalgoje." "Klavišų susiejimas, kuriuo atveriamas „Programų paleidimas“ veiklų "
"apžvalgoje."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to toggle the visibility of the message tray" msgid "Keybinding to toggle the visibility of the message tray"
@ -370,43 +371,42 @@ msgid "Select an extension to configure using the combobox above."
msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį." msgstr "Išskleidžiamajame sąraše pasirinkite konfigūruotiną plėtinį."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
#| msgid "Session..."
msgid "Session…" msgid "Session…"
msgstr "Seansas…" msgstr "Seansas…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Nėra sąraše?" msgstr "Nėra sąraše?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:99
#: ../js/ui/userMenu.js:934 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Atsisakyti" msgstr "Atsisakyti"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Prisijungti" msgstr "Prisijungti"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgid "Next" msgid "Next"
msgstr "Kitas" msgstr "Kitas"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:917 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Naudotojo vardas: " msgstr "Naudotojo vardas: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Prisijungimo langas" msgstr "Prisijungimo langas"
@ -415,8 +415,8 @@ msgstr "Prisijungimo langas"
msgid "Power" msgid "Power"
msgstr "Energija" msgstr "Energija"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:695 ../js/ui/userMenu.js:699 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:815 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Užmigdyti" msgstr "Užmigdyti"
@ -424,58 +424,58 @@ msgstr "Užmigdyti"
msgid "Restart" msgid "Restart"
msgstr "Paleisti iš naujo" msgstr "Paleisti iš naujo"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:697 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:699 ../js/ui/userMenu.js:814 ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Išjungti" msgstr "Išjungti"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Tapatybės patvirtinimo klaida" msgstr "Tapatybės patvirtinimo klaida"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(arba perbraukite pirštu)" msgstr "(arba perbraukite pirštu)"
#: ../js/gdm/util.js:324 #: ../js/gdm/util.js:391
#, c-format #, c-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(pvz., naudotojas arba %s)" msgstr "(pvz., naudotojas arba %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Komanda nerasta" msgstr "Komanda nerasta"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Nepavyko perskaityti komandos:" msgstr "Nepavyko perskaityti komandos:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Nepavyko paleisti „%s“:" msgstr "Nepavyko įvykdyti „%s“:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Dažna" msgstr "Dažnai naudojamos"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Visi" msgstr "Visos"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Naujas langas" msgstr "Naujas langas"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Pašalinti iš mėgstamų" msgstr "Pašalinti iš mėgstamų"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Pridėti prie mėgstamų" msgstr "Pridėti prie mėgstamų"
@ -489,7 +489,7 @@ msgstr "%s pridėta prie jūsų mėgstamų."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s pašalinta iš jūsų mėgstamų." msgstr "%s pašalinta iš jūsų mėgstamų."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:788 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Nustatymai" msgstr "Nustatymai"
@ -614,35 +614,35 @@ msgid "S"
msgstr "Št" msgstr "Št"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Nieko nesuplanuota" msgstr "Nieko nesuplanuota"
#. 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:708 #: ../js/ui/calendar.js:736
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d d." msgstr "%A, %B %d d."
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:711 #: ../js/ui/calendar.js:739
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %Y m. %B %d d." msgstr "%A, %Y m. %B %d d."
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Šiandien" msgstr "Šiandien"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Rytoj" msgstr "Rytoj"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Šią savaitę" msgstr "Šią savaitę"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Kitą savaitę" msgstr "Kitą savaitę"
@ -658,12 +658,12 @@ msgstr "Atjungta išorinė laikmena"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Išimami įrenginiai" msgstr "Išimami įrenginiai"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Atverti su %s" msgstr "Atverti su %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Išimti" msgstr "Išimti"
@ -1022,7 +1022,7 @@ msgstr "Langai"
#: ../js/ui/dash.js:248 ../js/ui/dash.js:286 #: ../js/ui/dash.js:248 ../js/ui/dash.js:286
msgid "Show Applications" msgid "Show Applications"
msgstr "Rodyti programos" msgstr "Paleisti programas"
#. Translators: this is the name of the dock/favorites area on #. Translators: this is the name of the dock/favorites area on
#. the left of the overview #. the left of the overview
@ -1045,7 +1045,7 @@ msgstr "Datos ir laiko nustatymai"
#. 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:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %Y m. %B %d d." msgstr "%A, %Y m. %B %d d."
@ -1063,8 +1063,8 @@ msgstr "Atsijungti"
#: ../js/ui/endSessionDialog.js:65 #: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system." msgid "Click Log Out to quit these applications and log out of the system."
msgstr "" msgstr ""
"Spustelėkite „Išeiti“, jei norite užverti šias programas ir atsijungti nuo " "Spustelėkite „Atsijungti“, jei norite užverti šias programas ir atsijungti "
"sistemos." "nuo sistemos."
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:67
#, c-format #, c-format
@ -1183,9 +1183,7 @@ msgstr "Rodyti klaidas"
msgid "Enabled" msgid "Enabled"
msgstr "Įjungta" msgstr "Įjungta"
#. translators: #: ../js/ui/lookingGlass.js:769
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Išjungta" msgstr "Išjungta"
@ -1218,7 +1216,6 @@ msgid "Remove"
msgstr "Pašalinti" msgstr "Pašalinti"
#: ../js/ui/messageTray.js:1501 #: ../js/ui/messageTray.js:1501
#| msgid "No Messages"
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Išvalyti pranešimus" msgstr "Išvalyti pranešimus"
@ -1226,15 +1223,15 @@ msgstr "Išvalyti pranešimus"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Pranešimų nustatymai" msgstr "Pranešimų nustatymai"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Nėra pranešimų" msgstr "Nėra pranešimų"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1782
msgid "Message Tray" msgid "Message Tray"
msgstr "Pranešimų juosta" msgstr "Pranešimų juosta"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Sistemos informacija" msgstr "Sistemos informacija"
@ -1243,7 +1240,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Nežinoma" msgstr "Nežinoma"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1251,7 +1248,7 @@ msgstr[0] "%d naujas pranešimas"
msgstr[1] "%d nauji pranešimai" msgstr[1] "%d nauji pranešimai"
msgstr[2] "%d naujų pranešimų" msgstr[2] "%d naujų pranešimų"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Atšaukti" msgstr "Atšaukti"
@ -1263,22 +1260,21 @@ msgstr "Apžvalga"
#. 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:284 #: ../js/ui/overview.js:271
#| msgid "Type to search..."
msgid "Type to search…" msgid "Type to search…"
msgstr "Rašykite paieškoti…" msgstr "Rašykite, ko ieškote…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
msgstr "Užverti" msgstr "Užverti"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:636
msgid "Activities" msgid "Activities"
msgstr "Apžvalga" msgstr "Apžvalga"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Viršutinė juosta" msgstr "Viršutinė juosta"
@ -1291,21 +1287,21 @@ msgstr "Viršutinė juosta"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:73
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Įveskite komandą" msgstr "Įveskite komandą"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:109
msgid "Close" msgid "Close"
msgstr "Užverti" msgstr "Užverti"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d d."
#: ../js/ui/screenShield.js:155 #: ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
@ -1313,13 +1309,13 @@ msgstr[0] "%d naujas pranešimas"
msgstr[1] "%d nauji pranešimai" msgstr[1] "%d nauji pranešimai"
msgstr[2] "%d naujų pranešimų" msgstr[2] "%d naujų pranešimų"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:806 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Užrakinti" msgstr "Užrakinti"
#: ../js/ui/screenShield.js:639 #: ../js/ui/screenShield.js:637
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME reikia užrakinti ekraną" msgstr "GNOME aplinkai reikia užrakinti ekraną"
#. We could not become modal, so we can't activate the #. We could not become modal, so we can't activate the
#. screenshield. The user is probably very upset at this #. screenshield. The user is probably very upset at this
@ -1328,21 +1324,19 @@ msgstr "GNOME reikia užrakinti ekraną"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1194
#| msgid "Unable to connect to %s"
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Nepavyksta užrakinti" msgstr "Nepavyksta užrakinti"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1195
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Programa užblokavo užrakinimą" msgstr "Programa užblokavo užrakinimą"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
#| msgid "Searching..."
msgid "Searching…" msgid "Searching…"
msgstr "Ieškoma…" msgstr "Ieškoma…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Nerasta atitikmenų." msgstr "Nerasta atitikmenų."
@ -1354,11 +1348,11 @@ msgstr "Kopijuoti"
msgid "Paste" msgid "Paste"
msgstr "Įdėti" msgstr "Įdėti"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Rodyti tekstą" msgstr "Rodyti tekstą"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Slėpti tekstą" msgstr "Slėpti tekstą"
@ -1370,7 +1364,7 @@ msgstr "Slaptažodis"
msgid "Remember Password" msgid "Remember Password"
msgstr "Atsiminti slaptažodį" msgstr "Atsiminti slaptažodį"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113
msgid "Unlock" msgid "Unlock"
msgstr "Atrakinti" msgstr "Atrakinti"
@ -1434,12 +1428,10 @@ msgid "Visibility"
msgstr "Matomumas" msgstr "Matomumas"
#: ../js/ui/status/bluetooth.js:59 #: ../js/ui/status/bluetooth.js:59
#| msgid "Send Files to Device..."
msgid "Send Files to Device…" msgid "Send Files to Device…"
msgstr "Siųsti failus į įrenginį…" msgstr "Siųsti failus į įrenginį…"
#: ../js/ui/status/bluetooth.js:60 #: ../js/ui/status/bluetooth.js:60
#| msgid "Set Up a New Device..."
msgid "Set Up a New Device…" msgid "Set Up a New Device…"
msgstr "Nustatyti naują įrenginį…" msgstr "Nustatyti naują įrenginį…"
@ -1466,7 +1458,6 @@ msgid "connecting..."
msgstr "jungiamasi..." msgstr "jungiamasi..."
#: ../js/ui/status/bluetooth.js:239 #: ../js/ui/status/bluetooth.js:239
#| msgid "Send Files..."
msgid "Send Files…" msgid "Send Files…"
msgstr "Siųsti failus…" msgstr "Siųsti failus…"
@ -1679,7 +1670,6 @@ msgstr "Energijos valdymo nustatymai"
#. 0 is reported when UPower does not have enough data #. 0 is reported when UPower does not have enough data
#. to estimate battery life #. to estimate battery life
#: ../js/ui/status/power.js:99 #: ../js/ui/status/power.js:99
#| msgid "Estimating..."
msgid "Estimating…" msgid "Estimating…"
msgstr "Įvertinama…" msgstr "Įvertinama…"
@ -1768,7 +1758,7 @@ msgstr "Kompiuteris"
#: ../js/ui/status/power.js:223 #: ../js/ui/status/power.js:223
msgctxt "device" msgctxt "device"
msgid "Unknown" msgid "Unknown"
msgstr "Nežinoma" msgstr "Nežinomas"
#: ../js/ui/status/volume.js:124 #: ../js/ui/status/volume.js:124
msgid "Volume changed" msgid "Volume changed"
@ -1783,11 +1773,11 @@ msgstr "Garsumas"
msgid "Microphone" msgid "Microphone"
msgstr "Mikrofonas" msgstr "Mikrofonas"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:124
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Prisijungti kaip kitas naudotojas" msgstr "Prisijungti kitu naudotoju"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Atrakinimo langas" msgstr "Atrakinimo langas"
@ -1815,27 +1805,27 @@ msgstr "Neužimtas"
msgid "Offline" msgid "Offline"
msgstr "Atsijungta" msgstr "Atsijungta"
#: ../js/ui/userMenu.js:780 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Pranešimai" msgstr "Pranešimai"
#: ../js/ui/userMenu.js:796 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Keisti naudotoją" msgstr "Keisti naudotoją"
#: ../js/ui/userMenu.js:801 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Atsijungti" msgstr "Atsijungti"
#: ../js/ui/userMenu.js:821 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Įdiegti atnaujinimus ir įkelti iš naujo" msgstr "Įdiegti atnaujinimus ir įkelti iš naujo"
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Jūsų pokalbio būsena bus nustatyta į užimta" msgstr "Jūsų pokalbio būsena bus nustatyta į užimta"
#: ../js/ui/userMenu.js:840 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1844,20 +1834,22 @@ msgstr ""
"būsena internete atitinkamai pakoreguota, kad kiti galėtų žinoti, jog jūs " "būsena internete atitinkamai pakoreguota, kad kiti galėtų žinoti, jog jūs "
"galite nepamatyti jų pranešimų." "galite nepamatyti jų pranešimų."
#: ../js/ui/userMenu.js:886 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Yra prisijungusių kitų naudotojų" msgstr "Yra prisijungusių kitų naudotojų"
#: ../js/ui/userMenu.js:891 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "Išjungus jie gali prarasti neįrašytą darbą." msgstr "Išjungus jie gali prarasti neįrašytą darbą."
#: ../js/ui/userMenu.js:918 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (nutolęs)" msgstr "%s (nutolęs)"
#: ../js/ui/userMenu.js:920 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (komandų eilutė)" msgstr "%s (komandų eilutė)"
@ -1870,7 +1862,7 @@ msgstr "Programos"
msgid "Search" msgid "Search"
msgstr "Ieškoti" msgstr "Ieškoti"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1879,7 +1871,7 @@ msgstr ""
"Atleiskite, šiandien išminties nebus:\n" "Atleiskite, šiandien išminties nebus:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Orakulė %s sako" msgstr "Orakulė %s sako"
@ -1893,30 +1885,6 @@ msgstr "„%s“ yra pasirengusi"
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Evolution kalendorius" msgstr "Evolution kalendorius"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1837
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
msgstr[0] "%u išvestis"
msgstr[1] "%u išvestys"
msgstr[2] "%u išvesčių"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1847
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u įvestis"
msgstr[1] "%u įvestys"
msgstr[2] "%u įvesčių"
#: ../src/gvc/gvc-mixer-control.c:2371
msgid "System Sounds"
msgstr "Sistemos garsai"
#: ../src/main.c:347 #: ../src/main.c:347
msgid "Print version" msgid "Print version"
msgstr "Išvesti versijos numerį" msgstr "Išvesti versijos numerį"
@ -1950,3 +1918,17 @@ msgstr "Slaptažodis negali būti tuščias"
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą" msgstr "Naudotojas užvėrė tapatybės patvirtinimo dialogą"
#~ msgid "%u Output"
#~ msgid_plural "%u Outputs"
#~ msgstr[0] "%u išvestis"
#~ msgstr[1] "%u išvestys"
#~ msgstr[2] "%u išvesčių"
#~ msgid "%u Input"
#~ msgid_plural "%u Inputs"
#~ msgstr[0] "%u įvestis"
#~ msgstr[1] "%u įvestys"
#~ msgstr[2] "%u įvesčių"
#~ msgid "System Sounds"
#~ msgstr "Sistemos garsai"

784
po/ml.po

File diff suppressed because it is too large Load Diff

1133
po/mr.po

File diff suppressed because it is too large Load Diff

189
po/nb.po
View File

@ -6,10 +6,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010. # Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell 3.7.x\n" "Project-Id-Version: gnome-shell 3.8.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-04 14:14+0100\n" "POT-Creation-Date: 2013-05-13 09:47+0200\n"
"PO-Revision-Date: 2013-03-04 14:15+0100\n" "PO-Revision-Date: 2013-04-03 13:31+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n" "Language: \n"
@ -295,7 +295,8 @@ msgstr "Fest modal dialog til opphavsvinduet"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell." "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "Denne nøkkelen overstyrer nøkkelen i org.gnome.mutter når GNOME Shell kjøres." msgstr ""
"Denne nøkkelen overstyrer nøkkelen i org.gnome.mutter når GNOME Shell kjøres."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
msgid "Arrangement of buttons on the titlebar" msgid "Arrangement of buttons on the titlebar"
@ -305,7 +306,9 @@ msgstr "Plassering av knappene på tittellinjen"
msgid "" msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running " "This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell." "GNOME Shell."
msgstr "Denne nøkkelen overstyrer nøkkelen i org.gnome.desktop.wm.preferences når GNOME Shell kjøres." msgstr ""
"Denne nøkkelen overstyrer nøkkelen i org.gnome.desktop.wm.preferences når "
"GNOME Shell kjøres."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
@ -332,43 +335,50 @@ msgstr "Utvidelse"
msgid "Select an extension to configure using the combobox above." msgid "Select an extension to configure using the combobox above."
msgstr "Velg en utvidelse som skal konfigureres med komboboksen over." msgstr "Velg en utvidelse som skal konfigureres med komboboksen over."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:371
msgid "Session…" msgid "Session…"
msgstr "Økt …" msgstr "Økt …"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:601
msgid "Not listed?" msgid "Not listed?"
msgstr "Ikke listet?" msgstr "Ikke listet?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:776 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:376
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:96
#: ../js/ui/userMenu.js:934 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:791
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Logg inn" msgstr "Logg inn"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:791
msgid "Next" msgid "Next"
msgstr "Neste" msgstr "Neste"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:888
#, c-format
msgid "(e.g., user or %s)"
msgstr "(f.eks. bruker eller %s)"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:892 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Brukernavn: " msgstr "Brukernavn: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1158
msgid "Login Window" msgid "Login Window"
msgstr "Innloggingsvindu" msgstr "Innloggingsvindu"
@ -377,8 +387,8 @@ msgstr "Innloggingsvindu"
msgid "Power" msgid "Power"
msgstr "Strøm" msgstr "Strøm"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:695 ../js/ui/userMenu.js:699 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:815 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Hvilemodus" msgstr "Hvilemodus"
@ -386,58 +396,53 @@ msgstr "Hvilemodus"
msgid "Restart" msgid "Restart"
msgstr "Start på nytt" msgstr "Start på nytt"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:697 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:699 ../js/ui/userMenu.js:814 ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Slå av" msgstr "Slå av"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:247
msgid "Authentication error" msgid "Authentication error"
msgstr "Autentiseringsfeil" msgstr "Autentiseringsfeil"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:364
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(eller dra finger)" msgstr "(eller dra finger)"
#: ../js/gdm/util.js:324 #: ../js/misc/util.js:97
#, c-format
msgid "(e.g., user or %s)"
msgstr "(f.eks. bruker eller %s)"
#: ../js/misc/util.js:94
msgid "Command not found" msgid "Command not found"
msgstr "Kommando ikke funnet" msgstr "Kommando ikke funnet"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Klarte ikke å lese kommando:" msgstr "Klarte ikke å lese kommando:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Kjøring av «%s» feilet:" msgstr "Kjøring av «%s» feilet:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Ofte" msgstr "Ofte"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Nytt vindu" msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Fjern fra favoritter" msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Legg til i favoritter" msgstr "Legg til i favoritter"
@ -451,7 +456,7 @@ msgstr "%s ble lagt til i dine favoritter."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s ble fjernet fra dine favoritter." msgstr "%s ble fjernet fra dine favoritter."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:788 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Innstillinger" msgstr "Innstillinger"
@ -474,7 +479,7 @@ msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%H\\u2336%M" msgstr "%H\\u2336%M"
#. Transators: 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:77 #: ../js/ui/calendar.js:77
@ -576,35 +581,35 @@ msgid "S"
msgstr "Lø" msgstr "Lø"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Ingenting planlagt" msgstr "Ingenting planlagt"
#. Translators: Shown on calendar heading when selected day occurs on current year #. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:708 #: ../js/ui/calendar.js:736
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A %B %d" msgstr "%A %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:711 #: ../js/ui/calendar.js:739
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A %B %d, %Y" msgstr "%A %B %d, %Y"
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "I dag" msgstr "I dag"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "I morgen" msgstr "I morgen"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Denne uken" msgstr "Denne uken"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Neste uke" msgstr "Neste uke"
@ -620,20 +625,20 @@ msgstr "Ekstern stasjon koblet fra"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Avtagbare enheter" msgstr "Avtagbare enheter"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Åpne med %s" msgstr "Åpne med %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Løs ut" msgstr "Løs ut"
#: ../js/ui/components/keyring.js:82 ../js/ui/components/polkitAgent.js:268 #: ../js/ui/components/keyring.js:88 ../js/ui/components/polkitAgent.js:275
msgid "Password:" msgid "Password:"
msgstr "Passord:" msgstr "Passord:"
#: ../js/ui/components/keyring.js:101 #: ../js/ui/components/keyring.js:107
msgid "Type again:" msgid "Type again:"
msgstr "Skriv på nytt:" msgstr "Skriv på nytt:"
@ -721,7 +726,7 @@ msgstr "Autentisering kreves"
msgid "Administrator" msgid "Administrator"
msgstr "Administrator" msgstr "Administrator"
#: ../js/ui/components/polkitAgent.js:165 #: ../js/ui/components/polkitAgent.js:171
msgid "Authenticate" msgid "Authenticate"
msgstr "Autentiser" msgstr "Autentiser"
@ -729,12 +734,12 @@ msgstr "Autentiser"
#. * requested authentication was not gained; this can happen #. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password), #. * because of an authentication error (like invalid password),
#. * for instance. #. * for instance.
#: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383 #: ../js/ui/components/polkitAgent.js:263 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Beklager, det virket ikke. Vennligst prøv igjen." msgstr "Beklager, det virket ikke. Vennligst prøv igjen."
#. Translators: this is a filename used for screencast recording #. Translators: this is a filename used for screencast recording
#: ../js/ui/components/recorder.js:48 #: ../js/ui/components/recorder.js:47
#, no-c-format #, no-c-format
msgid "Screencast from %d %t" msgid "Screencast from %d %t"
msgstr "Skjermvideo fra %d %t" msgstr "Skjermvideo fra %d %t"
@ -1000,14 +1005,14 @@ msgstr "Åpne kalender"
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Åpne Klokker" msgstr "Åpne Klokker"
#: ../js/ui/dateMenu.js:105 #: ../js/ui/dateMenu.js:104
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Innstillinger for dato og klokkeslett" msgstr "Innstillinger for dato og klokkeslett"
#. 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:205 #: ../js/ui/dateMenu.js:216
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y" msgstr "%a %e %B, %Y"
@ -1181,15 +1186,15 @@ msgstr "Tøm meldinger"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Innstillinger for varsling" msgstr "Innstillinger for varsling"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Ingen meldinger" msgstr "Ingen meldinger"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1785
msgid "Message Tray" msgid "Message Tray"
msgstr "Meldingstrau" msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2813
msgid "System Information" msgid "System Information"
msgstr "Systeminformasjon" msgstr "Systeminformasjon"
@ -1198,14 +1203,14 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Ukjent" msgstr "Ukjent"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
msgstr[0] "%d ny melding" msgstr[0] "%d ny melding"
msgstr[1] "%d nye meldinger" msgstr[1] "%d nye meldinger"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Angre" msgstr "Angre"
@ -1217,21 +1222,21 @@ msgstr "Oversikt"
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. #. characters.
#: ../js/ui/overview.js:284 #: ../js/ui/overview.js:271
msgid "Type to search…" msgid "Type to search…"
msgstr "Skriv for å søke …" msgstr "Skriv for å søke …"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:635
msgid "Quit" msgid "Quit"
msgstr "Avslutt" msgstr "Avslutt"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:686
msgid "Activities" msgid "Activities"
msgstr "Aktiviteter" msgstr "Aktiviteter"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:982
msgid "Top Bar" msgid "Top Bar"
msgstr "Topp-panel" msgstr "Topp-panel"
@ -1244,32 +1249,32 @@ msgstr "Topp-panel"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:74
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Oppgi en kommando" msgstr "Oppgi en kommando"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:110
msgid "Close" msgid "Close"
msgstr "Lukk" msgstr "Lukk"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:155 #: ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d ny varsling" msgstr[0] "%d ny varsling"
msgstr[1] "%d nye varslinger" msgstr[1] "%d nye varslinger"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:806 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Lås" msgstr "Lås"
#: ../js/ui/screenShield.js:639 #: ../js/ui/screenShield.js:641
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME må låse skjermen" msgstr "GNOME må låse skjermen"
@ -1280,19 +1285,19 @@ msgstr "GNOME må låse skjermen"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Kan ikke låse" msgstr "Kan ikke låse"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:763 ../js/ui/screenShield.js:1199
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Låsing ble stoppet av et program" msgstr "Låsing ble stoppet av et program"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
msgid "Searching…" msgid "Searching…"
msgstr "Søker …" msgstr "Søker …"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Ingen resultater." msgstr "Ingen resultater."
@ -1304,11 +1309,11 @@ msgstr "Kopier"
msgid "Paste" msgid "Paste"
msgstr "Lim inn" msgstr "Lim inn"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:101
msgid "Show Text" msgid "Show Text"
msgstr "Vis tekst" msgstr "Vis tekst"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:103
msgid "Hide Text" msgid "Hide Text"
msgstr "Skjul tekst" msgstr "Skjul tekst"
@ -1320,7 +1325,7 @@ msgstr "Passord"
msgid "Remember Password" msgid "Remember Password"
msgstr "Husk passord" msgstr "Husk passord"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:109
msgid "Unlock" msgid "Unlock"
msgstr "Lås opp" msgstr "Lås opp"
@ -1611,7 +1616,7 @@ msgstr "Tilkobling feilet"
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivering av nettverkstilkobling feilet" msgstr "Aktivering av nettverkstilkobling feilet"
#: ../js/ui/status/network.js:2276 #: ../js/ui/status/network.js:2282
msgid "Networking is disabled" msgid "Networking is disabled"
msgstr "Nettverk er slått av" msgstr "Nettverk er slått av"
@ -1725,11 +1730,11 @@ msgstr "Volum"
msgid "Microphone" msgid "Microphone"
msgstr "Mikrofon" msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:120
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Logg inn som en annen bruker" msgstr "Logg inn som en annen bruker"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:141
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Lås opp vindu" msgstr "Lås opp vindu"
@ -1757,27 +1762,27 @@ msgstr "Ledig"
msgid "Offline" msgid "Offline"
msgstr "Frakoblet" msgstr "Frakoblet"
#: ../js/ui/userMenu.js:780 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Varslinger" msgstr "Varslinger"
#: ../js/ui/userMenu.js:796 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Bytt bruker" msgstr "Bytt bruker"
#: ../js/ui/userMenu.js:801 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Logg ut" msgstr "Logg ut"
#: ../js/ui/userMenu.js:821 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Installer oppdateringer og start på nytt" msgstr "Installer oppdateringer og start på nytt"
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Din pratestatus vil bli satt til opptatt" msgstr "Din pratestatus vil bli satt til opptatt"
#: ../js/ui/userMenu.js:840 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1786,22 +1791,24 @@ msgstr ""
"tilkoblingsstatus er justert for å la andre vite at du kanskje ikke ser " "tilkoblingsstatus er justert for å la andre vite at du kanskje ikke ser "
"deres meldinger." "deres meldinger."
#: ../js/ui/userMenu.js:886 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Andre brukere er logget inn." msgstr "Andre brukere er logget inn."
#: ../js/ui/userMenu.js:891 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "" msgstr ""
"Hvis du slår av vil dette kunne medføre at de mister arbeid som ikke er " "Hvis du slår av vil dette kunne medføre at de mister arbeid som ikke er "
"lagret." "lagret."
#: ../js/ui/userMenu.js:918 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (ekstern)" msgstr "%s (ekstern)"
#: ../js/ui/userMenu.js:920 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (konsoll)" msgstr "%s (konsoll)"
@ -1814,7 +1821,7 @@ msgstr "Programmer"
msgid "Search" msgid "Search"
msgstr "Søk" msgstr "Søk"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1823,7 +1830,7 @@ msgstr ""
"Beklager, ingen visdom til deg i dag:\n" "Beklager, ingen visdom til deg i dag:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Orakelet sier %s" msgstr "Orakelet sier %s"
@ -1880,11 +1887,11 @@ msgstr "Vis mulige modi"
msgid "Failed to launch '%s'" msgid "Failed to launch '%s'"
msgstr "Klarte ikke å starte «%s»" msgstr "Klarte ikke å starte «%s»"
#: ../src/shell-keyring-prompt.c:708 #: ../src/shell-keyring-prompt.c:714
msgid "Passwords do not match." msgid "Passwords do not match."
msgstr "Passordene er ikke like." msgstr "Passordene er ikke like."
#: ../src/shell-keyring-prompt.c:716 #: ../src/shell-keyring-prompt.c:722
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "Passordet kan ikke være tomt" msgstr "Passordet kan ikke være tomt"

625
po/nl.po

File diff suppressed because it is too large Load Diff

1202
po/or.po

File diff suppressed because it is too large Load Diff

307
po/pl.po
View File

@ -6,14 +6,15 @@
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Piotr Drąg <piotrdrag@gmail.com>, 2009-2013. # Piotr Drąg <piotrdrag@gmail.com>, 2009-2013.
# Tomasz Dominikowski <dominikowski@gmail.com>, 2009. # Tomasz Dominikowski <dominikowski@gmail.com>, 2009.
# Wojciech Szczęsny <wszczesny@aviary.pl>, 2013.
# Aviary.pl <gnomepl@aviary.pl>, 2009-2013. # Aviary.pl <gnomepl@aviary.pl>, 2009-2013.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-24 01:52+0100\n" "POT-Creation-Date: 2013-04-02 15:54+0200\n"
"PO-Revision-Date: 2013-02-24 01:53+0100\n" "PO-Revision-Date: 2013-04-02 15:55+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" "Last-Translator: Wojciech Szczęsny <wszczesny@aviary.pl>\n"
"Language-Team: Polish <gnomepl@aviary.pl>\n" "Language-Team: Polish <gnomepl@aviary.pl>\n"
"Language: pl\n" "Language: pl\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -61,7 +62,7 @@ msgid "Window management and application launching"
msgstr "Zarządzanie oknami i uruchamianiem programów" msgstr "Zarządzanie oknami i uruchamianiem programów"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1 #: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:152 #: ../js/extensionPrefs/main.js:153
msgid "GNOME Shell Extension Preferences" msgid "GNOME Shell Extension Preferences"
msgstr "Preferencje rozszerzenia powłoki GNOME" msgstr "Preferencje rozszerzenia powłoki GNOME"
@ -80,7 +81,7 @@ msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 " "Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog." "dialog."
msgstr "" msgstr ""
"Umożliwia dostęp do wewnętrznych narzędzi debugowania i monitorowania " "Umożliwia dostęp do wewnętrznych narzędzi debugowania i monitorowania, "
"używając okna dialogowego Alt-F2." "używając okna dialogowego Alt-F2."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3 #: ../data/org.gnome.shell.gschema.xml.in.in.h:3
@ -96,9 +97,9 @@ msgid ""
msgstr "" msgstr ""
"Rozszerzenia powłoki GNOME posiadają własność UUID; ten klucz zawiera " "Rozszerzenia powłoki GNOME posiadają własność UUID; ten klucz zawiera "
"rozszerzenia, które powinny zostać wczytane. Każde rozszerzenie, które ma " "rozszerzenia, które powinny zostać wczytane. Każde rozszerzenie, które ma "
"zostać wczytane musi znajdować się na tej liście. Można także manipulować " "zostać wczytane, musi znajdować się na tej liście. Można także manipulować "
"listą za pomocą metod EnableExtension i DisableExtension usługi D-Bus na org." "listą za pomocą metod EnableExtension i DisableExtension usługi D-Bus na "
"gnome.Shell." "org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5 #: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Whether to collect stats about applications usage" msgid "Whether to collect stats about applications usage"
@ -112,7 +113,7 @@ msgid ""
"remove already saved data." "remove already saved data."
msgstr "" msgstr ""
"Powłoka zwykle monitoruje aktywne programy, aby przedstawiać najczęściej " "Powłoka zwykle monitoruje aktywne programy, aby przedstawiać najczęściej "
"używane (np. aktywatory programów). Mimo, że te dane nie są publiczne, można " "używane (np. aktywatory programów). Mimo że te dane nie są publiczne, można "
"wyłączyć je z powodu prywatności. Proszę zauważyć, że wyłączenie nie " "wyłączyć je z powodu prywatności. Proszę zauważyć, że wyłączenie nie "
"spowoduje usunięcia już zapisanych danych." "spowoduje usunięcia już zapisanych danych."
@ -138,7 +139,7 @@ msgid ""
"application view, rather than being displayed inline in the main view." "application view, rather than being displayed inline in the main view."
msgstr "" msgstr ""
"Każda nazwa kategorii na tej liście będzie przedstawiana jako katalog w " "Każda nazwa kategorii na tej liście będzie przedstawiana jako katalog w "
"widoku programów, zamiast wyświetlać ją bezpośrednio w głównym widoku." "widoku programów, zamiast wyświetlania jej bezpośrednio w głównym widoku."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11 #: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
@ -286,7 +287,7 @@ msgstr ""
"Ustawia potok biblioteki GStreamer używany do zakodowania nagrań. Używa " "Ustawia potok biblioteki GStreamer używany do zakodowania nagrań. Używa "
"składni programu gst-launch. Potok powinien posiadać niepołączony odpływ, " "składni programu gst-launch. Potok powinien posiadać niepołączony odpływ, "
"gdzie jest nagrywane. Zwykle taki posiada, a wyjście będzie zapisywane do " "gdzie jest nagrywane. Zwykle taki posiada, a wyjście będzie zapisywane do "
"pliku wyjściowego. Mimo, że potok może sam zająć się swoim wyjściem, można " "pliku wyjściowego. Mimo że potok może sam zająć się swoim wyjściem, można "
"także wysłać wyjście do serwera icecast przez polecenie shout2send lub " "także wysłać wyjście do serwera icecast przez polecenie shout2send lub "
"podobne. Jeśli nie zostanie ustawione lub ustawione na pustą wartość, to " "podobne. Jeśli nie zostanie ustawione lub ustawione na pustą wartość, to "
"zostanie użyty domyślny potok. Jest nim obecnie \"vp8enc min_quantizer=13 " "zostanie użyty domyślny potok. Jest nim obecnie \"vp8enc min_quantizer=13 "
@ -359,20 +360,20 @@ msgstr "Dynamiczne zarządzanie obszarami roboczymi"
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Obszary robocze tylko na pierwszym monitorze" msgstr "Obszary robocze tylko na pierwszym monitorze"
#: ../js/extensionPrefs/main.js:124 #: ../js/extensionPrefs/main.js:125
#, c-format #, c-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "" msgstr ""
"Wystąpił błąd podczas wczytywania okna preferencji dla rozszerzenia %s:" "Wystąpił błąd podczas wczytywania okna preferencji dla rozszerzenia %s:"
#: ../js/extensionPrefs/main.js:164 #: ../js/extensionPrefs/main.js:165
msgid "Extension" msgid "Extension"
msgstr "Rozszerzenie" msgstr "Rozszerzenie"
#: ../js/extensionPrefs/main.js:188 #: ../js/extensionPrefs/main.js:189
msgid "Select an extension to configure using the combobox above." msgid "Select an extension to configure using the combobox above."
msgstr "" msgstr ""
"Proszę wybrać rozszerzenie do skonfigurowania używając powyższego pola " "Proszę wybrać rozszerzenie do skonfigurowania, używając powyższego pola "
"wyboru." "wyboru."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
@ -382,36 +383,36 @@ msgstr "Sesja…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Inny użytkownik?" msgstr "Inny użytkownik?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:99
#: ../js/ui/userMenu.js:932 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Anuluj" msgstr "Anuluj"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Zaloguj" msgstr "Zaloguj"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgid "Next" msgid "Next"
msgstr "Dalej" msgstr "Dalej"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:917 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Nazwa użytkownika: " msgstr "Nazwa użytkownika: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Okno logowania" msgstr "Okno logowania"
@ -420,8 +421,8 @@ msgstr "Okno logowania"
msgid "Power" msgid "Power"
msgstr "Zasilanie" msgstr "Zasilanie"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:694 ../js/ui/userMenu.js:698 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:814 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Uśpij" msgstr "Uśpij"
@ -429,58 +430,58 @@ msgstr "Uśpij"
msgid "Restart" msgid "Restart"
msgstr "Uruchom ponownie" msgstr "Uruchom ponownie"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:696 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:698 ../js/ui/userMenu.js:813 ../js/ui/userMenu.js:936 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Wyłącz komputer" msgstr "Wyłącz komputer"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Błąd uwierzytelniania" msgstr "Błąd uwierzytelniania"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(lub przeciągnięcie palca)" msgstr "(lub przeciągnięcie palca)"
#: ../js/gdm/util.js:324 #: ../js/gdm/util.js:391
#, c-format #, c-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(np. użytkownik lub %s)" msgstr "(np. użytkownik lub %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Nie odnaleziono polecenia" msgstr "Nie odnaleziono polecenia"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Nie można przetworzyć polecenia:" msgstr "Nie można przetworzyć polecenia:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Wykonanie polecenia \"%s\" się nie powiodło:" msgstr "Wykonanie polecenia \"%s\" się nie powiodło:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Często używane" msgstr "Często używane"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Wszystkie" msgstr "Wszystkie"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Nowe okno" msgstr "Nowe okno"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Usuń z ulubionych" msgstr "Usuń z ulubionych"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Dodaj do ulubionych" msgstr "Dodaj do ulubionych"
@ -494,7 +495,7 @@ msgstr "Program %s został dodany do ulubionych."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "Program %s został usunięty z ulubionych." msgstr "Program %s został usunięty z ulubionych."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:787 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Ustawienia" msgstr "Ustawienia"
@ -517,7 +518,7 @@ msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%H\\u2236%M" msgstr "%H\\u2236%M"
#. Transators: 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:77 #: ../js/ui/calendar.js:77
@ -619,35 +620,35 @@ msgid "S"
msgstr "S" msgstr "S"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Nic nie zaplanowano" msgstr "Nic nie zaplanowano"
#. 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:708 #: ../js/ui/calendar.js:736
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:711 #: ../js/ui/calendar.js:739
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:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Dzisiaj" msgstr "Dzisiaj"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Jutro" msgstr "Jutro"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Ten tydzień" msgstr "Ten tydzień"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Następny tydzień" msgstr "Następny tydzień"
@ -663,12 +664,12 @@ msgstr "Odłączono dysk zewnętrzny"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Urządzenia wymienne" msgstr "Urządzenia wymienne"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Otwórz za pomocą %s" msgstr "Otwórz za pomocą %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Wysuń" msgstr "Wysuń"
@ -811,39 +812,39 @@ msgid "Mute"
msgstr "Wycisz" msgstr "Wycisz"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30" #. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:938 #: ../js/ui/components/telepathyClient.js:942
#, no-c-format #, no-c-format
msgid "<b>Yesterday</b>, <b>%H:%M</b>" msgid "<b>Yesterday</b>, <b>%H:%M</b>"
msgstr "<b>Wczoraj</b> o <b>%H:%M</b>" msgstr "<b>Wczoraj</b> o <b>%H:%M</b>"
#. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30 #. Translators: this is the week day name followed by a time string. i.e. "Monday, 14:30
#: ../js/ui/components/telepathyClient.js:944 #: ../js/ui/components/telepathyClient.js:948
#, no-c-format #, no-c-format
msgid "<b>%A</b>, <b>%H:%M</b>" msgid "<b>%A</b>, <b>%H:%M</b>"
msgstr "<b>%A</b> o <b>%H:%M</b>" msgstr "<b>%A</b> o <b>%H:%M</b>"
#. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30" #. Translators: this is the month name and day number followed by a time string. i.e. "May 25, 14:30"
#: ../js/ui/components/telepathyClient.js:949 #: ../js/ui/components/telepathyClient.js:953
#, no-c-format #, no-c-format
msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>" msgid "<b>%B</b> <b>%d</b>, <b>%H:%M</b>"
msgstr "<b>%d</b> <b>%B</b>, <b>%H:%M</b>" msgstr "<b>%d</b> <b>%B</b>, <b>%H:%M</b>"
#. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30" #. Translators: this is the month name, day number, year number followed by a time string. i.e. "May 25 2012, 14:30"
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:957
#, no-c-format #, no-c-format
msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> " msgid "<b>%B</b> <b>%d</b> <b>%Y</b>, <b>%H:%M</b> "
msgstr "<b>%d</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> " msgstr "<b>%d</b> <b>%B</b> <b>%Y</b>, <b>%H:%M</b> "
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. #. IM name.
#: ../js/ui/components/telepathyClient.js:981 #: ../js/ui/components/telepathyClient.js:985
#, c-format #, c-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "Użytkownik %s jest teraz znany jako %s" msgstr "Użytkownik %s jest teraz znany jako %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. #. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1084 #: ../js/ui/components/telepathyClient.js:1088
#, c-format #, c-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Zaproszenie do pokoju %s" msgstr "Zaproszenie do pokoju %s"
@ -851,38 +852,38 @@ msgstr "Zaproszenie do pokoju %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. #. * for example.
#: ../js/ui/components/telepathyClient.js:1092 #: ../js/ui/components/telepathyClient.js:1096
#, c-format #, c-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "Użytkownik %s zaprasza do dołączenia do pokoju %s" msgstr "Użytkownik %s zaprasza do dołączenia do pokoju %s"
#: ../js/ui/components/telepathyClient.js:1094 #: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1133 #: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/components/telepathyClient.js:1173 #: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1236 #: ../js/ui/components/telepathyClient.js:1240
msgid "Decline" msgid "Decline"
msgstr "Odmów" msgstr "Odmów"
#: ../js/ui/components/telepathyClient.js:1095 #: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1174 #: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1237 #: ../js/ui/components/telepathyClient.js:1241
msgid "Accept" msgid "Accept"
msgstr "Zaakceptuj" msgstr "Zaakceptuj"
#. translators: argument is a contact name like Alice for example. #. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1125 #: ../js/ui/components/telepathyClient.js:1129
#, c-format #, c-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Wideorozmowa z użytkownikiem %s" msgstr "Wideorozmowa z użytkownikiem %s"
#. translators: argument is a contact name like Alice for example. #. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1128 #: ../js/ui/components/telepathyClient.js:1132
#, c-format #, c-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Rozmowa z użytkownikiem %s" msgstr "Rozmowa z użytkownikiem %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:1135 #: ../js/ui/components/telepathyClient.js:1139
msgid "Answer" msgid "Answer"
msgstr "Odbierz" msgstr "Odbierz"
@ -891,111 +892,111 @@ msgstr "Odbierz"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. #.
#: ../js/ui/components/telepathyClient.js:1167 #: ../js/ui/components/telepathyClient.js:1171
#, c-format #, c-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "Użytkownik %s przysyła plik %s" msgstr "Użytkownik %s przysyła plik %s"
#. To translators: The parameter is the contact's alias #. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1202 #: ../js/ui/components/telepathyClient.js:1206
#, c-format #, c-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "Użytkownik %s prosi o uprawnienie do wyświetlania stanu" msgstr "Użytkownik %s prosi o uprawnienie do wyświetlania stanu"
#: ../js/ui/components/telepathyClient.js:1294 #: ../js/ui/components/telepathyClient.js:1298
msgid "Network error" msgid "Network error"
msgstr "Błąd sieci" msgstr "Błąd sieci"
#: ../js/ui/components/telepathyClient.js:1296 #: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Uwierzytelnienie się nie powiodło" msgstr "Uwierzytelnienie się nie powiodło"
#: ../js/ui/components/telepathyClient.js:1298 #: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error" msgid "Encryption error"
msgstr "Błąd szyfrowania" msgstr "Błąd szyfrowania"
#: ../js/ui/components/telepathyClient.js:1300 #: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Nie podano certyfikatu" msgstr "Nie podano certyfikatu"
#: ../js/ui/components/telepathyClient.js:1302 #: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Certyfikat jest niezaufany" msgstr "Certyfikat jest niezaufany"
#: ../js/ui/components/telepathyClient.js:1304 #: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Certyfikat wygasł" msgstr "Certyfikat wygasł"
#: ../js/ui/components/telepathyClient.js:1306 #: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Certyfikat nie został aktywowany" msgstr "Certyfikat nie został aktywowany"
#: ../js/ui/components/telepathyClient.js:1308 #: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Nazwa komputera certyfikatu się nie zgadza" msgstr "Nazwa komputera certyfikatu się nie zgadza"
#: ../js/ui/components/telepathyClient.js:1310 #: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Odcisk palca certyfikatu się nie zgadza" msgstr "Odcisk palca certyfikatu się nie zgadza"
#: ../js/ui/components/telepathyClient.js:1312 #: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Certyfikat został samodzielnie podpisany" msgstr "Certyfikat został samodzielnie podpisany"
#: ../js/ui/components/telepathyClient.js:1314 #: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Stan jest ustawiony na offline" msgstr "Stan jest ustawiony na offline"
#: ../js/ui/components/telepathyClient.js:1316 #: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Szyfrowanie jest niedostępne" msgstr "Szyfrowanie jest niedostępne"
#: ../js/ui/components/telepathyClient.js:1318 #: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Certyfikat jest nieprawidłowy" msgstr "Certyfikat jest nieprawidłowy"
#: ../js/ui/components/telepathyClient.js:1320 #: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Odrzucono połączenie" msgstr "Odrzucono połączenie"
#: ../js/ui/components/telepathyClient.js:1322 #: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Nie można nawiązać połączenia" msgstr "Nie można nawiązać połączenia"
#: ../js/ui/components/telepathyClient.js:1324 #: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Utracono połączenie" msgstr "Utracono połączenie"
#: ../js/ui/components/telepathyClient.js:1326 #: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "To konto jest już połączone z serwerem" msgstr "To konto jest już połączone z serwerem"
#: ../js/ui/components/telepathyClient.js:1328 #: ../js/ui/components/telepathyClient.js:1332
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "" msgstr ""
"Połączenie zostało zastąpione nowym z wykorzystaniem tego samego zasobu" "Połączenie zostało zastąpione nowym z wykorzystaniem tego samego zasobu"
#: ../js/ui/components/telepathyClient.js:1330 #: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Konto już istnieje na serwerze" msgstr "Konto już istnieje na serwerze"
#: ../js/ui/components/telepathyClient.js:1332 #: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Serwer jest obecnie zbyt zajęty, aby obsłużyć połączenie" msgstr "Serwer jest obecnie zbyt zajęty, aby obsłużyć połączenie"
#: ../js/ui/components/telepathyClient.js:1334 #: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Certyfikat został unieważniony" msgstr "Certyfikat został unieważniony"
#: ../js/ui/components/telepathyClient.js:1336 #: ../js/ui/components/telepathyClient.js:1340
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"Certyfikat używa niezabezpieczonego algorytmu szyfrowania lub jest " "Certyfikat używa niezabezpieczonego algorytmu szyfrowania lub jest "
"kryptograficznie słaby" "kryptograficznie słaby"
#: ../js/ui/components/telepathyClient.js:1338 #: ../js/ui/components/telepathyClient.js:1342
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"
@ -1003,26 +1004,26 @@ msgstr ""
"Długość certyfikatu serwera lub głębokość jego łańcucha przekracza " "Długość certyfikatu serwera lub głębokość jego łańcucha przekracza "
"ograniczenia nałożone przez bibliotekę kryptograficzną" "ograniczenia nałożone przez bibliotekę kryptograficzną"
#: ../js/ui/components/telepathyClient.js:1340 #: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error" msgid "Internal error"
msgstr "Błąd wewnętrzny" msgstr "Błąd wewnętrzny"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. #. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1350 #: ../js/ui/components/telepathyClient.js:1354
#, c-format #, c-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Nie można połączyć się z kontem %s" msgstr "Nie można połączyć się z kontem %s"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1359
msgid "View account" msgid "View account"
msgstr "Wyświetl konto" msgstr "Wyświetl konto"
#: ../js/ui/components/telepathyClient.js:1394 #: ../js/ui/components/telepathyClient.js:1398
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Nieznana przyczyna" msgstr "Nieznana przyczyna"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:97 #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows" msgid "Windows"
msgstr "Okna" msgstr "Okna"
@ -1051,7 +1052,7 @@ msgstr "Ustawienia daty i czasu"
#. 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:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y" msgstr "%A, %e %B %Y"
@ -1212,23 +1213,23 @@ msgstr "Wyświetl źródło"
msgid "Web Page" msgid "Web Page"
msgstr "Strona WWW" msgstr "Strona WWW"
#: ../js/ui/messageTray.js:1177 #: ../js/ui/messageTray.js:1182
msgid "Open" msgid "Open"
msgstr "Otwórz" msgstr "Otwórz"
#: ../js/ui/messageTray.js:1184 #: ../js/ui/messageTray.js:1189
msgid "Remove" msgid "Remove"
msgstr "Usuń" msgstr "Usuń"
#: ../js/ui/messageTray.js:1496 #: ../js/ui/messageTray.js:1501
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Wyczyść wiadomości" msgstr "Wyczyść wiadomości"
#: ../js/ui/messageTray.js:1523 #: ../js/ui/messageTray.js:1528
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Ustawienia powiadomień" msgstr "Ustawienia powiadomień"
#: ../js/ui/messageTray.js:1702 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Brak wiadomości" msgstr "Brak wiadomości"
@ -1236,7 +1237,7 @@ msgstr "Brak wiadomości"
msgid "Message Tray" msgid "Message Tray"
msgstr "Obszar powiadamiania" msgstr "Obszar powiadamiania"
#: ../js/ui/messageTray.js:2857 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Informacje systemowe" msgstr "Informacje systemowe"
@ -1245,11 +1246,19 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Nieznany" msgstr "Nieznany"
#: ../js/ui/overview.js:81 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nowa wiadomość"
msgstr[1] "%d nowe wiadomości"
msgstr[2] "%d nowych wiadomości"
#: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Cofnij" msgstr "Cofnij"
#: ../js/ui/overview.js:124 #: ../js/ui/overview.js:129
msgid "Overview" msgid "Overview"
msgstr "Podgląd" msgstr "Podgląd"
@ -1257,21 +1266,21 @@ msgstr "Podgląd"
#. 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:272 #: ../js/ui/overview.js:271
msgid "Type to search…" msgid "Type to search…"
msgstr "Wyszukiwanie…" msgstr "Wyszukiwanie…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
msgstr "Zakończ" msgstr "Zakończ"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:636
msgid "Activities" msgid "Activities"
msgstr "Podgląd" msgstr "Podgląd"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Górny pasek" msgstr "Górny pasek"
@ -1284,29 +1293,21 @@ msgstr "Górny pasek"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:73
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Proszę wprowadzić polecenie" msgstr "Proszę wprowadzić polecenie"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:109
msgid "Close" msgid "Close"
msgstr "Zamknij" msgstr "Zamknij"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %e %B" msgstr "%A, %e %B"
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:151
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nowa wiadomość"
msgstr[1] "%d nowe wiadomości"
msgstr[2] "%d nowych wiadomości"
#: ../js/ui/screenShield.js:155
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
@ -1314,11 +1315,11 @@ msgstr[0] "%d nowe powiadomienie"
msgstr[1] "%d nowe powiadomienia" msgstr[1] "%d nowe powiadomienia"
msgstr[2] "%d nowych powiadomień" msgstr[2] "%d nowych powiadomień"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:805 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Zablokuj ekran" msgstr "Zablokuj ekran"
#: ../js/ui/screenShield.js:638 #: ../js/ui/screenShield.js:640
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "Środowisko GNOME musi zablokować ekran" msgstr "Środowisko GNOME musi zablokować ekran"
@ -1329,19 +1330,19 @@ msgstr "Środowisko GNOME musi zablokować ekran"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:757 ../js/ui/screenShield.js:1168 #: ../js/ui/screenShield.js:761 ../js/ui/screenShield.js:1197
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Nie można zablokować" msgstr "Nie można zablokować"
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Blokowanie zostało zablokowane przez program" msgstr "Blokowanie zostało zablokowane przez program"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
msgid "Searching…" msgid "Searching…"
msgstr "Wyszukiwanie…" msgstr "Wyszukiwanie…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Brak wyników." msgstr "Brak wyników."
@ -1353,11 +1354,11 @@ msgstr "Skopiuj"
msgid "Paste" msgid "Paste"
msgstr "Wklej" msgstr "Wklej"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Wyświetl tekst" msgstr "Wyświetl tekst"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Ukryj tekst" msgstr "Ukryj tekst"
@ -1369,7 +1370,7 @@ msgstr "Hasło"
msgid "Remember Password" msgid "Remember Password"
msgstr "Zapamiętanie hasła" msgstr "Zapamiętanie hasła"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113
msgid "Unlock" msgid "Unlock"
msgstr "Odblokuj" msgstr "Odblokuj"
@ -1778,59 +1779,59 @@ msgstr "Głośność"
msgid "Microphone" msgid "Microphone"
msgstr "Mikrofon" msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:124
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Zaloguj jako inny użytkownik" msgstr "Zaloguj jako inny użytkownik"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Okno odblokowania" msgstr "Okno odblokowania"
#: ../js/ui/userMenu.js:192 #: ../js/ui/userMenu.js:193
msgid "Available" msgid "Available"
msgstr "Dostępny" msgstr "Dostępny"
#: ../js/ui/userMenu.js:195 #: ../js/ui/userMenu.js:196
msgid "Busy" msgid "Busy"
msgstr "Zajęty" msgstr "Zajęty"
#: ../js/ui/userMenu.js:198 #: ../js/ui/userMenu.js:199
msgid "Invisible" msgid "Invisible"
msgstr "Niewidoczny" msgstr "Niewidoczny"
#: ../js/ui/userMenu.js:201 #: ../js/ui/userMenu.js:202
msgid "Away" msgid "Away"
msgstr "Nieobecny" msgstr "Nieobecny"
#: ../js/ui/userMenu.js:204 #: ../js/ui/userMenu.js:205
msgid "Idle" msgid "Idle"
msgstr "Bezczynny" msgstr "Bezczynny"
#: ../js/ui/userMenu.js:207 #: ../js/ui/userMenu.js:208
msgid "Offline" msgid "Offline"
msgstr "Offline" msgstr "Offline"
#: ../js/ui/userMenu.js:779 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Powiadomienia" msgstr "Powiadomienia"
#: ../js/ui/userMenu.js:795 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Przełącz użytkownika" msgstr "Przełącz użytkownika"
#: ../js/ui/userMenu.js:800 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Wyloguj się" msgstr "Wyloguj się"
#: ../js/ui/userMenu.js:820 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Zaktualizuj i uruchom ponownie" msgstr "Zaktualizuj i uruchom ponownie"
#: ../js/ui/userMenu.js:838 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Stan komunikatora zostanie ustawiony na \"zajęty\"" msgstr "Stan komunikatora zostanie ustawiony na \"zajęty\""
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1840,33 +1841,35 @@ msgstr ""
"użytkownik tego komputera może nie zobaczyć przychodzących od nich " "użytkownik tego komputera może nie zobaczyć przychodzących od nich "
"wiadomości." "wiadomości."
#: ../js/ui/userMenu.js:885 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Inni użytkownicy są zalogowani." msgstr "Inni użytkownicy są zalogowani."
#: ../js/ui/userMenu.js:890 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "Wyłączenie komputera może spowodować utratę danych." msgstr "Wyłączenie komputera może spowodować utratę danych."
#: ../js/ui/userMenu.js:916 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (zdalnie)" msgstr "%s (zdalnie)"
#: ../js/ui/userMenu.js:918 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (konsola)" msgstr "%s (konsola)"
#: ../js/ui/viewSelector.js:101 #: ../js/ui/viewSelector.js:100
msgid "Applications" msgid "Applications"
msgstr "Programy" msgstr "Programy"
#: ../js/ui/viewSelector.js:105 #: ../js/ui/viewSelector.js:104
msgid "Search" msgid "Search"
msgstr "Wyszukiwanie" msgstr "Wyszukiwanie"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1875,7 +1878,7 @@ msgstr ""
"Nic mądrego na dzisiaj:\n" "Nic mądrego na dzisiaj:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Wyrocznia %s przemawia" msgstr "Wyrocznia %s przemawia"

191
po/ru.po
View File

@ -15,8 +15,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-03-03 12:52+0000\n" "POT-Creation-Date: 2013-03-14 18:11+0000\n"
"PO-Revision-Date: 2013-03-07 09:35+0400\n" "PO-Revision-Date: 2013-03-22 21:02+0400\n"
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n" "Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
"Language-Team: русский <gnome-cyr@gnome.org>\n" "Language-Team: русский <gnome-cyr@gnome.org>\n"
"Language: ru\n" "Language: ru\n"
@ -142,11 +142,11 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11 #: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
msgstr "История команд диалога (Alt-F2)" msgstr "История команд диалогового окна (Alt-F2)"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12 #: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid "History for the looking glass dialog" msgid "History for the looking glass dialog"
msgstr "История просмотра прозрачного диалога" msgstr "История просмотра прозрачного диалогового окна"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13 #: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "" msgid ""
@ -223,11 +223,11 @@ msgstr "Комбинация клавиш для перехода в режим
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to toggle the visibility of the message tray" msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Комбинация клавиш для показа и скрытия панели сообщений" msgstr "Комбинация клавиш для отображения или скрытия панели сообщений"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26 #: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to toggle the visibility of the message tray." msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Комбинация клавиш для показа и скрытия панели сообщений." msgstr "Комбинация клавиш для отображения или скрытия панели сообщений."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27 #: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
@ -239,12 +239,13 @@ msgstr "Комбинация клавиш для перевода фокуса
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29 #: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "Keybinding to toggle the screen recorder" msgid "Keybinding to toggle the screen recorder"
msgstr "Комбинация клавиш для включения и выключения средства записи экрана" msgstr "Комбинация клавиш для включения или выключения средства записи экрана"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Keybinding to start/stop the builtin screen recorder." msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "" msgstr ""
"Комбинация клавиш для запуска и останова встроенного средства записи экрана." "Комбинация клавиш для запуска или остановки встроенного средства записи "
"экрана."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Which keyboard to use" msgid "Which keyboard to use"
@ -263,8 +264,8 @@ msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's " "The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second." "screencast recorder in frames-per-second."
msgstr "" msgstr ""
"Частота смены кадров в скринкасте, записанном с помощью GNOME Shell (кадров/" "Частота смены кадров (кадров/сек) скринкаста, записанного с помощью GNOME "
"сек)." "Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
@ -299,7 +300,7 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "File extension used for storing the screencast" msgid "File extension used for storing the screencast"
msgstr "Расширение файла, использующееся для хранения скринкастов" msgstr "Расширение файла, используемое при сохранении скринкастов"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39 #: ../data/org.gnome.shell.gschema.xml.in.in.h:39
msgid "" msgid ""
@ -307,9 +308,9 @@ msgid ""
"current date, and use this extension. It should be changed when recording to " "current date, and use this extension. It should be changed when recording to "
"a different container format." "a different container format."
msgstr "" msgstr ""
"Имя файла записанного скринкаста будет уникальным именем, основанным на " "Имя файла записанного скринкаста будет уникальным, основанным на текущей "
"текущей дате, и использует это расширение. Оно должно быть изменено, если " "дате и используемом расширении. Оно должно быть изменено, если запись "
"запись выполняется в другой контейнерный формат." "выполняется в другой формат контейнера."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40 #: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "The application icon mode." msgid "The application icon mode."
@ -364,7 +365,7 @@ msgstr "Рабочие места только на основном монит
#: ../js/extensionPrefs/main.js:125 #: ../js/extensionPrefs/main.js:125
#, c-format #, c-format
msgid "There was an error loading the preferences dialog for %s:" msgid "There was an error loading the preferences dialog for %s:"
msgstr "При загрузке диалога параметров для %s произошла ошибка:" msgstr "При загрузке диалогового окна параметров для %s произошла ошибка:"
#: ../js/extensionPrefs/main.js:165 #: ../js/extensionPrefs/main.js:165
msgid "Extension" msgid "Extension"
@ -381,46 +382,46 @@ msgstr "Сеанс…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Нет в списке?" msgstr "Нет в списке?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:784 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:98
#: ../js/ui/userMenu.js:934 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Отмена" msgstr "Отмена"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:800
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Войти" msgstr "Войти"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:800
msgid "Next" msgid "Next"
msgstr "Далее" msgstr "Далее"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:915 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Имя пользователя: " msgstr "Имя пользователя: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1159
msgid "Login Window" msgid "Login Window"
msgstr "Окно входа в систему" msgstr "Окно входа в систему"
#. Translators: accessible name of the power menu in the login screen #. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:36 #: ../js/gdm/powerMenu.js:36
msgid "Power" msgid "Power"
msgstr "Питание" msgstr "Электропитание"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:695 ../js/ui/userMenu.js:699 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:815 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Ждущий режим" msgstr "Ждущий режим"
@ -428,14 +429,14 @@ msgstr "Ждущий режим"
msgid "Restart" msgid "Restart"
msgstr "Перезапустить" msgstr "Перезапустить"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:697 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:699 ../js/ui/userMenu.js:814 ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Выключить" msgstr "Выключить"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:182
msgid "Authentication error" msgid "Authentication error"
msgstr "Ошибка подтверждения подлинности" msgstr "Ошибка проверки подлинности"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
@ -448,38 +449,38 @@ msgstr "(или проведите пальцем по считывающему
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(например, пользователь или %s)" msgstr "(например, пользователь или %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Команда не найдена" msgstr "Команда не найдена"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Не удалось разобрать команду:" msgstr "Не удалось разобрать команду:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Не удалось выполнить «%s»:" msgstr "Не удалось выполнить «%s»:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:325
msgid "Frequent" msgid "Frequent"
msgstr "Часто используемые" msgstr "Популярные"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:332
msgid "All" msgid "All"
msgstr "Все" msgstr "Все"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:890
msgid "New Window" msgid "New Window"
msgstr "Новое окно" msgstr "Новое окно"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:893 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Удалить из избранного" msgstr "Удалить из избранного"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:894
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Добавить в избранное" msgstr "Добавить в избранное"
@ -493,7 +494,7 @@ msgstr "Приложение %s добавлено в избранное."
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/userMenu.js:788 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Параметры" msgstr "Параметры"
@ -618,35 +619,35 @@ msgid "S"
msgstr "Сб" msgstr "Сб"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
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:708 #: ../js/ui/calendar.js:736
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:711 #: ../js/ui/calendar.js:739
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y" msgstr "%A, %B %d, %Y"
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Сегодня" msgstr "Сегодня"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Завтра" msgstr "Завтра"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Эта неделя" msgstr "Эта неделя"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Следующая неделя" msgstr "Следующая неделя"
@ -743,7 +744,7 @@ msgstr "Для широкополосного мобильного устрой
#: ../js/ui/components/networkAgent.js:330 #: ../js/ui/components/networkAgent.js:330
msgid "PIN: " msgid "PIN: "
msgstr "PIN: " msgstr "PIN-код: "
#: ../js/ui/components/networkAgent.js:336 #: ../js/ui/components/networkAgent.js:336
msgid "Mobile broadband network password" msgid "Mobile broadband network password"
@ -772,7 +773,7 @@ msgstr "Подтвердить"
#. * for instance. #. * for instance.
#: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383 #: ../js/ui/components/polkitAgent.js:256 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Извините, это не сработало. Попробуйте снова." msgstr "Не удалось подтвердить подлинность. Попробуйте снова."
#. Translators: this is a filename used for screencast recording #. Translators: this is a filename used for screencast recording
#: ../js/ui/components/recorder.js:48 #: ../js/ui/components/recorder.js:48
@ -1020,7 +1021,7 @@ msgstr "Показать учётную запись"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Неизвестная причина" msgstr "Неизвестная причина"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:97 #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows" msgid "Windows"
msgstr "Окна" msgstr "Окна"
@ -1049,7 +1050,7 @@ 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:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e %B, %Y" msgstr "%A, %e %B, %Y"
@ -1057,7 +1058,7 @@ msgstr "%A, %e %B, %Y"
#, c-format #, c-format
msgctxt "title" msgctxt "title"
msgid "Log Out %s" msgid "Log Out %s"
msgstr "Завершить сеанс пользователя %s" msgstr "Завершение сеанса пользователя %s"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:64
msgctxt "title" msgctxt "title"
@ -1228,15 +1229,15 @@ msgstr "Очистить список сообщений"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Параметры уведомлений" msgstr "Параметры уведомлений"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1711
msgid "No Messages" msgid "No Messages"
msgstr "Нет сообщений" msgstr "Нет сообщений"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1784
msgid "Message Tray" msgid "Message Tray"
msgstr "Панель сообщений" msgstr "Панель сообщений"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2816
msgid "System Information" msgid "System Information"
msgstr "Системная информация" msgstr "Системная информация"
@ -1245,7 +1246,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Неизвестно" msgstr "Неизвестно"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:148
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1253,7 +1254,7 @@ msgstr[0] "%d новое сообщение"
msgstr[1] "%d новых сообщения" msgstr[1] "%d новых сообщения"
msgstr[2] "%d новых сообщений" msgstr[2] "%d новых сообщений"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Отменить" msgstr "Отменить"
@ -1265,21 +1266,21 @@ 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:284 #: ../js/ui/overview.js:271
msgid "Type to search…" msgid "Type to search…"
msgstr "Найти…" msgstr "Найти…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
msgstr "Закрыть" msgstr "Закрыть"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:636
msgid "Activities" msgid "Activities"
msgstr "Обзор" msgstr "Обзор"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Верхняя панель" msgstr "Верхняя панель"
@ -1292,33 +1293,33 @@ msgstr "Верхняя панель"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:73
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Введите команду" msgstr "Введите команду"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:109
msgid "Close" msgid "Close"
msgstr "Закрыть" msgstr "Закрыть"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:85
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%d %B, %A" msgstr "%d %B, %A"
#: ../js/ui/screenShield.js:155 #: ../js/ui/screenShield.js:150
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d новые уведомление" msgstr[0] "%d новое уведомление"
msgstr[1] "%d новых уведомленя" msgstr[1] "%d новых уведомления"
msgstr[2] "%d новых уведомлений" msgstr[2] "%d новых уведомлений"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:806 #: ../js/ui/screenShield.js:437 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Заблокировать" msgstr "Заблокировать"
#: ../js/ui/screenShield.js:639 #: ../js/ui/screenShield.js:635
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME необходимо заблокировать экран" msgstr "GNOME необходимо заблокировать экран"
@ -1329,19 +1330,19 @@ msgstr "GNOME необходимо заблокировать экран"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:756 ../js/ui/screenShield.js:1151
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Не удалось заблокировать" msgstr "Не удалось заблокировать"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:757 ../js/ui/screenShield.js:1152
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Блокировано помешало приложение" msgstr "Блокировке помешало приложение"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:451
msgid "Searching…" msgid "Searching…"
msgstr "Поиск…" msgstr "Поиск…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:495
msgid "No results." msgid "No results."
msgstr "Нет результатов." msgstr "Нет результатов."
@ -1353,11 +1354,11 @@ msgstr "Копировать"
msgid "Paste" msgid "Paste"
msgstr "Вставить" msgstr "Вставить"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Показать текст" msgstr "Показать текст"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Скрыть текст" msgstr "Скрыть текст"
@ -1369,7 +1370,7 @@ msgstr "Пароль"
msgid "Remember Password" msgid "Remember Password"
msgstr "Запомнить пароль" msgstr "Запомнить пароль"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:112
msgid "Unlock" msgid "Unlock"
msgstr "Разблокировать" msgstr "Разблокировать"
@ -1670,7 +1671,7 @@ msgstr "Батарея"
#: ../js/ui/status/power.js:81 #: ../js/ui/status/power.js:81
msgid "Power Settings" msgid "Power Settings"
msgstr "Параметры питания" msgstr "Параметры электропитания"
#. 0 is reported when UPower does not have enough data #. 0 is reported when UPower does not have enough data
#. to estimate battery life #. to estimate battery life
@ -1778,11 +1779,11 @@ msgstr "Громкость"
msgid "Microphone" msgid "Microphone"
msgstr "Микрофон" msgstr "Микрофон"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:123
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Войти от имени другого пользователя" msgstr "Войти от имени другого пользователя"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:144
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Разблокировать окно" msgstr "Разблокировать окно"
@ -1810,27 +1811,27 @@ msgstr "Бездействует"
msgid "Offline" msgid "Offline"
msgstr "Не в сети" msgstr "Не в сети"
#: ../js/ui/userMenu.js:780 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Уведомления" msgstr "Уведомления"
#: ../js/ui/userMenu.js:796 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Сменить пользователя" msgstr "Сменить пользователя"
#: ../js/ui/userMenu.js:801 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Выйти из системы" msgstr "Выйти из системы"
#: ../js/ui/userMenu.js:821 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Установить обновления и выполнить перезагрузку" msgstr "Установить обновления и выполнить перезагрузку"
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Будет установлен статус «не беспокоить»" msgstr "Будет установлен статус «не беспокоить»"
#: ../js/ui/userMenu.js:840 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1838,33 +1839,35 @@ msgstr ""
"Уведомления отключены, включая сообщения в чате. Ваш статус доступности " "Уведомления отключены, включая сообщения в чате. Ваш статус доступности "
"изменён, чтобы другие знали, что вы возможно не видите их сообщения." "изменён, чтобы другие знали, что вы возможно не видите их сообщения."
#: ../js/ui/userMenu.js:886 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "В системе имеются сеансы других пользователей." msgstr "В системе имеются открытые сеансы других пользователей."
#: ../js/ui/userMenu.js:891 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "Завершение работы может привести к потере несохранённых изменений." msgstr "Завершение работы может привести к потере несохранённых изменений."
#: ../js/ui/userMenu.js:918 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (удалённый)" msgstr "%s (удалённый)"
#: ../js/ui/userMenu.js:920 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (консоль)" msgstr "%s (консоль)"
#: ../js/ui/viewSelector.js:101 #: ../js/ui/viewSelector.js:100
msgid "Applications" msgid "Applications"
msgstr "Приложения" msgstr "Приложения"
#: ../js/ui/viewSelector.js:105 #: ../js/ui/viewSelector.js:104
msgid "Search" msgid "Search"
msgstr "Поиск" msgstr "Поиск"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1873,7 +1876,7 @@ msgstr ""
"Извините, на сегодня нет никаких советов:\n" "Извините, на сегодня нет никаких советов:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Оракул говорит: «%s»" msgstr "Оракул говорит: «%s»"

660
po/sk.po

File diff suppressed because it is too large Load Diff

163
po/sr.po
View File

@ -8,7 +8,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: 2013-03-04 08:38+0000\n" "POT-Creation-Date: 2013-03-31 01:48+0000\n"
"PO-Revision-Date: 2013-03-08 20:26+0200\n" "PO-Revision-Date: 2013-03-08 20:26+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n" "Language-Team: Serbian <gnom@prevod.org>\n"
@ -16,8 +16,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-screenshot.xml.in.h:1 #: ../data/50-gnome-shell-screenshot.xml.in.h:1
@ -365,53 +365,52 @@ msgid "Select an extension to configure using the combobox above."
msgstr "Изаберите проширење за подешавање користећи прозорче за избор." msgstr "Изаберите проширење за подешавање користећи прозорче за избор."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
#| msgid "Session..."
msgid "Session…" msgid "Session…"
msgstr "Сесија…" msgstr "Сесија…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Није на списку?" msgstr "Није на списку?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:99
#: ../js/ui/userMenu.js:934 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Откажи" msgstr "Откажи"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Пријави ме" msgstr "Пријави ме"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgid "Next" msgid "Next"
msgstr "Даље" msgstr "Даље"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:917 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Корисничко име: " msgstr "Корисничко име: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Прозор за пријављивање" msgstr "Прозор за пријављивање"
#. Translators: accessible name of the power menu in the login screen #. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:36 #: ../js/gdm/powerMenu.js:36
msgid "Power" msgid "Power"
msgstr "Угаси" msgstr "Напајање"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:695 ../js/ui/userMenu.js:699 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:815 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Обустави" msgstr "Обустави"
@ -419,58 +418,58 @@ msgstr "Обустави"
msgid "Restart" msgid "Restart"
msgstr "Поново покрени" msgstr "Поново покрени"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:697 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:699 ../js/ui/userMenu.js:814 ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Угаси" msgstr "Искључи"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Грешка потврђивања идентитета" msgstr "Грешка потврђивања идентитета"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(или лупите прст)" msgstr "(или лупите прст)"
#: ../js/gdm/util.js:324 #: ../js/gdm/util.js:391
#, c-format #, c-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(нпр., корисник или %s)" msgstr "(нпр., корисник или %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Наредба није нађена" msgstr "Наредба није нађена"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Не могу да обрадим наредбу:" msgstr "Не могу да обрадим наредбу:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Није успело покретање „%s“:" msgstr "Није успело покретање „%s“:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Често" msgstr "Често"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Све" msgstr "Све"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Нови прозор" msgstr "Нови прозор"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Уклони из омиљених" msgstr "Уклони из омиљених"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Додај у омиљене" msgstr "Додај у омиљене"
@ -484,7 +483,7 @@ msgstr "„%s“ је додат међу омиљене."
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/userMenu.js:788 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Подешавања" msgstr "Подешавања"
@ -507,7 +506,7 @@ msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%H\\u2236%M" msgstr "%H\\u2236%M"
#. Transators: 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:77 #: ../js/ui/calendar.js:77
@ -609,35 +608,35 @@ msgid "S"
msgstr "Суб" msgstr "Суб"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
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:708 #: ../js/ui/calendar.js:736
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:711 #: ../js/ui/calendar.js:739
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y" msgstr "%A, %B %d, %Y"
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Данас" msgstr "Данас"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Сутра" msgstr "Сутра"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Ове недеље" msgstr "Ове недеље"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Следеће недеље" msgstr "Следеће недеље"
@ -653,12 +652,12 @@ msgstr "Спољни уређај је искључен"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Уклоњиви уређаји" msgstr "Уклоњиви уређаји"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Отвори програмом %s" msgstr "Отвори програмом %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Избаци" msgstr "Избаци"
@ -1038,7 +1037,7 @@ 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:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e. %b., %R" msgstr "%A, %e. %b., %R"
@ -1213,7 +1212,6 @@ msgid "Remove"
msgstr "Уклони" msgstr "Уклони"
#: ../js/ui/messageTray.js:1501 #: ../js/ui/messageTray.js:1501
#| msgid "No Messages"
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Очисти поруке" msgstr "Очисти поруке"
@ -1221,15 +1219,15 @@ msgstr "Очисти поруке"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Поставке обавештења" msgstr "Поставке обавештења"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Нема порука" msgstr "Нема порука"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1782
msgid "Message Tray" msgid "Message Tray"
msgstr "Фиока порука" msgstr "Фиока порука"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Подаци о систему" msgstr "Подаци о систему"
@ -1238,7 +1236,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Непознат" msgstr "Непознат"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1247,7 +1245,7 @@ msgstr[1] "%d нове поруке"
msgstr[2] "%d нових порука" msgstr[2] "%d нових порука"
msgstr[3] "Једна нова порука" msgstr[3] "Једна нова порука"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Опозови" msgstr "Опозови"
@ -1259,22 +1257,21 @@ 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:284 #: ../js/ui/overview.js:271
#| msgid "Type to search..."
msgid "Type to search…" msgid "Type to search…"
msgstr "Упишите текст за претрагу…" msgstr "Упишите текст за претрагу…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
msgstr "Изађи" msgstr "Изађи"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:636
msgid "Activities" msgid "Activities"
msgstr "Активности" msgstr "Активности"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Горња трака" msgstr "Горња трака"
@ -1287,21 +1284,21 @@ msgstr "Горња трака"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:73
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Унесите наредбу" msgstr "Унесите наредбу"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:109
msgid "Close" msgid "Close"
msgstr "Затвори" msgstr "Затвори"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d. %B" msgstr "%A, %d. %B"
#: ../js/ui/screenShield.js:155 #: ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
@ -1310,11 +1307,11 @@ msgstr[1] "%d нова обавештења"
msgstr[2] "%d нових обавештења" msgstr[2] "%d нових обавештења"
msgstr[3] "Једно ново обавештење" msgstr[3] "Једно ново обавештење"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:806 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Закључај" msgstr "Закључај"
#: ../js/ui/screenShield.js:639 #: ../js/ui/screenShield.js:640
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "Гном мора да закључа екран" msgstr "Гном мора да закључа екран"
@ -1325,21 +1322,19 @@ msgstr "Гном мора да закључа екран"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:761 ../js/ui/screenShield.js:1197
#| msgid "Unable to connect to %s"
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Не могу да закључам" msgstr "Не могу да закључам"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Неки програм је блокирао закључавање" msgstr "Неки програм је блокирао закључавање"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
#| msgid "Searching..."
msgid "Searching…" msgid "Searching…"
msgstr "Тражим…" msgstr "Тражим…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Нема одговарајућих резултата." msgstr "Нема одговарајућих резултата."
@ -1351,11 +1346,11 @@ msgstr "Умножи"
msgid "Paste" msgid "Paste"
msgstr "Убаци" msgstr "Убаци"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Прикажи текст" msgstr "Прикажи текст"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Сакриј текст" msgstr "Сакриј текст"
@ -1367,7 +1362,7 @@ msgstr "Лозинка"
msgid "Remember Password" msgid "Remember Password"
msgstr "Запамти лозинку" msgstr "Запамти лозинку"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113
msgid "Unlock" msgid "Unlock"
msgstr "Откључај" msgstr "Откључај"
@ -1431,12 +1426,10 @@ msgid "Visibility"
msgstr "Видљивост" msgstr "Видљивост"
#: ../js/ui/status/bluetooth.js:59 #: ../js/ui/status/bluetooth.js:59
#| msgid "Send Files to Device..."
msgid "Send Files to Device…" msgid "Send Files to Device…"
msgstr "Пошаљи датотеке на уређај…" msgstr "Пошаљи датотеке на уређај…"
#: ../js/ui/status/bluetooth.js:60 #: ../js/ui/status/bluetooth.js:60
#| msgid "Set Up a New Device..."
msgid "Set Up a New Device…" msgid "Set Up a New Device…"
msgstr "Подеси нови уређај…" msgstr "Подеси нови уређај…"
@ -1463,7 +1456,6 @@ msgid "connecting..."
msgstr "повезујем се..." msgstr "повезујем се..."
#: ../js/ui/status/bluetooth.js:239 #: ../js/ui/status/bluetooth.js:239
#| msgid "Send Files..."
msgid "Send Files…" msgid "Send Files…"
msgstr "Пошаљи датотеке…" msgstr "Пошаљи датотеке…"
@ -1676,7 +1668,6 @@ msgstr "Подешавања напајања"
#. 0 is reported when UPower does not have enough data #. 0 is reported when UPower does not have enough data
#. to estimate battery life #. to estimate battery life
#: ../js/ui/status/power.js:99 #: ../js/ui/status/power.js:99
#| msgid "Estimating..."
msgid "Estimating…" msgid "Estimating…"
msgstr "Приближно…" msgstr "Приближно…"
@ -1784,11 +1775,11 @@ msgstr "Јачина звука"
msgid "Microphone" msgid "Microphone"
msgstr "Микрофон" msgstr "Микрофон"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:124
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Пријавите се као други корсник" msgstr "Пријавите се као други корсник"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Откључај прозор" msgstr "Откључај прозор"
@ -1816,27 +1807,27 @@ msgstr "Мирује"
msgid "Offline" msgid "Offline"
msgstr "Ван мреже" msgstr "Ван мреже"
#: ../js/ui/userMenu.js:780 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Обавештења" msgstr "Обавештења"
#: ../js/ui/userMenu.js:796 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Промени корисника" msgstr "Промени корисника"
#: ../js/ui/userMenu.js:801 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Одјави ме" msgstr "Одјави ме"
#: ../js/ui/userMenu.js:821 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Инсталирај ажурирања и поново покрени" msgstr "Инсталирај ажурирања и поново покрени"
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Ваше стање ћаскања ће бити постављено на заузето" msgstr "Ваше стање ћаскања ће бити постављено на заузето"
#: ../js/ui/userMenu.js:840 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1845,20 +1836,22 @@ msgstr ""
"мрежи је подешено тако да ће остали знати да ви не можете видети њихове " "мрежи је подешено тако да ће остали знати да ви не можете видети њихове "
"поруке." "поруке."
#: ../js/ui/userMenu.js:886 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Други корисници су пријављени." msgstr "Други корисници су пријављени."
#: ../js/ui/userMenu.js:891 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "Искључивање може да доведе до тога да изгубе несачувани рад." msgstr "Искључивање може да доведе до тога да изгубе несачувани рад."
#: ../js/ui/userMenu.js:918 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (удаљено)" msgstr "%s (удаљено)"
#: ../js/ui/userMenu.js:920 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (љуска)" msgstr "%s (љуска)"
@ -1871,7 +1864,7 @@ msgstr "Програми"
msgid "Search" msgid "Search"
msgstr "Тражи" msgstr "Тражи"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1880,7 +1873,7 @@ msgstr ""
"Извините, данас за вас нема мудрости:\n" "Извините, данас за вас нема мудрости:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Пророк је рекао %s" msgstr "Пророк је рекао %s"

View File

@ -8,7 +8,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: 2013-03-04 08:38+0000\n" "POT-Creation-Date: 2013-03-31 01:48+0000\n"
"PO-Revision-Date: 2013-03-08 20:26+0200\n" "PO-Revision-Date: 2013-03-08 20:26+0200\n"
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n" "Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n" "Language-Team: Serbian <gnom@prevod.org>\n"
@ -16,8 +16,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : " "Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
"n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-screenshot.xml.in.h:1 #: ../data/50-gnome-shell-screenshot.xml.in.h:1
@ -365,53 +365,52 @@ msgid "Select an extension to configure using the combobox above."
msgstr "Izaberite proširenje za podešavanje koristeći prozorče za izbor." msgstr "Izaberite proširenje za podešavanje koristeći prozorče za izbor."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
#| msgid "Session..."
msgid "Session…" msgid "Session…"
msgstr "Sesija…" msgstr "Sesija…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Nije na spisku?" msgstr "Nije na spisku?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:99
#: ../js/ui/userMenu.js:934 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Otkaži" msgstr "Otkaži"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Prijavi me" msgstr "Prijavi me"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgid "Next" msgid "Next"
msgstr "Dalje" msgstr "Dalje"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:917 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Korisničko ime: " msgstr "Korisničko ime: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Prozor za prijavljivanje" msgstr "Prozor za prijavljivanje"
#. Translators: accessible name of the power menu in the login screen #. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:36 #: ../js/gdm/powerMenu.js:36
msgid "Power" msgid "Power"
msgstr "Ugasi" msgstr "Napajanje"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:695 ../js/ui/userMenu.js:699 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:815 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Obustavi" msgstr "Obustavi"
@ -419,58 +418,58 @@ msgstr "Obustavi"
msgid "Restart" msgid "Restart"
msgstr "Ponovo pokreni" msgstr "Ponovo pokreni"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:697 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:699 ../js/ui/userMenu.js:814 ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Ugasi" msgstr "Isključi"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Greška potvrđivanja identiteta" msgstr "Greška potvrđivanja identiteta"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(ili lupite prst)" msgstr "(ili lupite prst)"
#: ../js/gdm/util.js:324 #: ../js/gdm/util.js:391
#, c-format #, c-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(npr., korisnik ili %s)" msgstr "(npr., korisnik ili %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Naredba nije nađena" msgstr "Naredba nije nađena"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Ne mogu da obradim naredbu:" msgstr "Ne mogu da obradim naredbu:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Nije uspelo pokretanje „%s“:" msgstr "Nije uspelo pokretanje „%s“:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Često" msgstr "Često"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Sve" msgstr "Sve"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Novi prozor" msgstr "Novi prozor"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Ukloni iz omiljenih" msgstr "Ukloni iz omiljenih"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Dodaj u omiljene" msgstr "Dodaj u omiljene"
@ -484,7 +483,7 @@ msgstr "„%s“ je dodat među omiljene."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "„%s“ je uklonjen iz omiljenih." msgstr "„%s“ je uklonjen iz omiljenih."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:788 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Podešavanja" msgstr "Podešavanja"
@ -507,7 +506,7 @@ msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%H\\u2236%M" msgstr "%H\\u2236%M"
#. Transators: 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:77 #: ../js/ui/calendar.js:77
@ -609,35 +608,35 @@ msgid "S"
msgstr "Sub" msgstr "Sub"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Ništa planirano" msgstr "Ništa planirano"
#. 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:708 #: ../js/ui/calendar.js:736
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:711 #: ../js/ui/calendar.js:739
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y" msgstr "%A, %B %d, %Y"
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Danas" msgstr "Danas"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Sutra" msgstr "Sutra"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Ove nedelje" msgstr "Ove nedelje"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Sledeće nedelje" msgstr "Sledeće nedelje"
@ -653,12 +652,12 @@ msgstr "Spoljni uređaj je isključen"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Uklonjivi uređaji" msgstr "Uklonjivi uređaji"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Otvori programom %s" msgstr "Otvori programom %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Izbaci" msgstr "Izbaci"
@ -1038,7 +1037,7 @@ msgstr "Podešavanja datuma i vremena"
#. 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:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e. %b., %R" msgstr "%A, %e. %b., %R"
@ -1213,7 +1212,6 @@ msgid "Remove"
msgstr "Ukloni" msgstr "Ukloni"
#: ../js/ui/messageTray.js:1501 #: ../js/ui/messageTray.js:1501
#| msgid "No Messages"
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Očisti poruke" msgstr "Očisti poruke"
@ -1221,15 +1219,15 @@ msgstr "Očisti poruke"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Postavke obaveštenja" msgstr "Postavke obaveštenja"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Nema poruka" msgstr "Nema poruka"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1782
msgid "Message Tray" msgid "Message Tray"
msgstr "Fioka poruka" msgstr "Fioka poruka"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Podaci o sistemu" msgstr "Podaci o sistemu"
@ -1238,7 +1236,7 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Nepoznat" msgstr "Nepoznat"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
@ -1247,7 +1245,7 @@ msgstr[1] "%d nove poruke"
msgstr[2] "%d novih poruka" msgstr[2] "%d novih poruka"
msgstr[3] "Jedna nova poruka" msgstr[3] "Jedna nova poruka"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Opozovi" msgstr "Opozovi"
@ -1259,22 +1257,21 @@ msgstr "Pregled"
#. 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:284 #: ../js/ui/overview.js:271
#| msgid "Type to search..."
msgid "Type to search…" msgid "Type to search…"
msgstr "Upišite tekst za pretragu…" msgstr "Upišite tekst za pretragu…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
msgstr "Izađi" msgstr "Izađi"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:636
msgid "Activities" msgid "Activities"
msgstr "Aktivnosti" msgstr "Aktivnosti"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Gornja traka" msgstr "Gornja traka"
@ -1287,21 +1284,21 @@ msgstr "Gornja traka"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:73
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Unesite naredbu" msgstr "Unesite naredbu"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:109
msgid "Close" msgid "Close"
msgstr "Zatvori" msgstr "Zatvori"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d. %B" msgstr "%A, %d. %B"
#: ../js/ui/screenShield.js:155 #: ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
@ -1310,11 +1307,11 @@ msgstr[1] "%d nova obaveštenja"
msgstr[2] "%d novih obaveštenja" msgstr[2] "%d novih obaveštenja"
msgstr[3] "Jedno novo obaveštenje" msgstr[3] "Jedno novo obaveštenje"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:806 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Zaključaj" msgstr "Zaključaj"
#: ../js/ui/screenShield.js:639 #: ../js/ui/screenShield.js:640
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "Gnom mora da zaključa ekran" msgstr "Gnom mora da zaključa ekran"
@ -1325,21 +1322,19 @@ msgstr "Gnom mora da zaključa ekran"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:761 ../js/ui/screenShield.js:1197
#| msgid "Unable to connect to %s"
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Ne mogu da zaključam" msgstr "Ne mogu da zaključam"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Neki program je blokirao zaključavanje" msgstr "Neki program je blokirao zaključavanje"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
#| msgid "Searching..."
msgid "Searching…" msgid "Searching…"
msgstr "Tražim…" msgstr "Tražim…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Nema odgovarajućih rezultata." msgstr "Nema odgovarajućih rezultata."
@ -1351,11 +1346,11 @@ msgstr "Umnoži"
msgid "Paste" msgid "Paste"
msgstr "Ubaci" msgstr "Ubaci"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Prikaži tekst" msgstr "Prikaži tekst"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Sakrij tekst" msgstr "Sakrij tekst"
@ -1367,7 +1362,7 @@ msgstr "Lozinka"
msgid "Remember Password" msgid "Remember Password"
msgstr "Zapamti lozinku" msgstr "Zapamti lozinku"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113
msgid "Unlock" msgid "Unlock"
msgstr "Otključaj" msgstr "Otključaj"
@ -1431,12 +1426,10 @@ msgid "Visibility"
msgstr "Vidljivost" msgstr "Vidljivost"
#: ../js/ui/status/bluetooth.js:59 #: ../js/ui/status/bluetooth.js:59
#| msgid "Send Files to Device..."
msgid "Send Files to Device…" msgid "Send Files to Device…"
msgstr "Pošalji datoteke na uređaj…" msgstr "Pošalji datoteke na uređaj…"
#: ../js/ui/status/bluetooth.js:60 #: ../js/ui/status/bluetooth.js:60
#| msgid "Set Up a New Device..."
msgid "Set Up a New Device…" msgid "Set Up a New Device…"
msgstr "Podesi novi uređaj…" msgstr "Podesi novi uređaj…"
@ -1463,7 +1456,6 @@ msgid "connecting..."
msgstr "povezujem se..." msgstr "povezujem se..."
#: ../js/ui/status/bluetooth.js:239 #: ../js/ui/status/bluetooth.js:239
#| msgid "Send Files..."
msgid "Send Files…" msgid "Send Files…"
msgstr "Pošalji datoteke…" msgstr "Pošalji datoteke…"
@ -1676,7 +1668,6 @@ msgstr "Podešavanja napajanja"
#. 0 is reported when UPower does not have enough data #. 0 is reported when UPower does not have enough data
#. to estimate battery life #. to estimate battery life
#: ../js/ui/status/power.js:99 #: ../js/ui/status/power.js:99
#| msgid "Estimating..."
msgid "Estimating…" msgid "Estimating…"
msgstr "Približno…" msgstr "Približno…"
@ -1784,11 +1775,11 @@ msgstr "Jačina zvuka"
msgid "Microphone" msgid "Microphone"
msgstr "Mikrofon" msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:124
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Prijavite se kao drugi korsnik" msgstr "Prijavite se kao drugi korsnik"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Otključaj prozor" msgstr "Otključaj prozor"
@ -1816,27 +1807,27 @@ msgstr "Miruje"
msgid "Offline" msgid "Offline"
msgstr "Van mreže" msgstr "Van mreže"
#: ../js/ui/userMenu.js:780 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Obaveštenja" msgstr "Obaveštenja"
#: ../js/ui/userMenu.js:796 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Promeni korisnika" msgstr "Promeni korisnika"
#: ../js/ui/userMenu.js:801 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Odjavi me" msgstr "Odjavi me"
#: ../js/ui/userMenu.js:821 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Instaliraj ažuriranja i ponovo pokreni" msgstr "Instaliraj ažuriranja i ponovo pokreni"
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Vaše stanje ćaskanja će biti postavljeno na zauzeto" msgstr "Vaše stanje ćaskanja će biti postavljeno na zauzeto"
#: ../js/ui/userMenu.js:840 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1845,20 +1836,22 @@ msgstr ""
"mreži je podešeno tako da će ostali znati da vi ne možete videti njihove " "mreži je podešeno tako da će ostali znati da vi ne možete videti njihove "
"poruke." "poruke."
#: ../js/ui/userMenu.js:886 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Drugi korisnici su prijavljeni." msgstr "Drugi korisnici su prijavljeni."
#: ../js/ui/userMenu.js:891 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "Isključivanje može da dovede do toga da izgube nesačuvani rad." msgstr "Isključivanje može da dovede do toga da izgube nesačuvani rad."
#: ../js/ui/userMenu.js:918 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (udaljeno)" msgstr "%s (udaljeno)"
#: ../js/ui/userMenu.js:920 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (ljuska)" msgstr "%s (ljuska)"
@ -1871,7 +1864,7 @@ msgstr "Programi"
msgid "Search" msgid "Search"
msgstr "Traži" msgstr "Traži"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1880,7 +1873,7 @@ msgstr ""
"Izvinite, danas za vas nema mudrosti:\n" "Izvinite, danas za vas nema mudrosti:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Prorok je rekao %s" msgstr "Prorok je rekao %s"

1141
po/ta.po

File diff suppressed because it is too large Load Diff

1171
po/te.po

File diff suppressed because it is too large Load Diff

1888
po/tg.po Normal file

File diff suppressed because it is too large Load Diff

2602
po/tr.po

File diff suppressed because it is too large Load Diff

1121
po/uk.po

File diff suppressed because it is too large Load Diff

442
po/vi.po
View File

@ -1,18 +1,19 @@
# Vietnamese translation for gnome-shell. # Vietnamese translation for gnome-shell.
# Copyright (C) 2010 GNOME i18n Project for Vietnamese. # Copyright (C) 2013 GNOME i18n Project for Vietnamese.
# 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.
# Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2010-2013. # Nguyễn Thái Ngọc Duy <pclouds@gmail.com>, 2010-2013.
# Ngô Chin <ndtrung4419@gmail.com>, 2011. # Ngô Chin <ndtrung4419@gmail.com>, 2011.
# Trần Ngọc Quân <vnwildman@gmail.com>, 2013.
# #
msgid "" msgid ""
msgstr "" 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: 2013-03-02 23:02+0000\n" "POT-Creation-Date: 2013-03-23 11:49+0000\n"
"PO-Revision-Date: 2013-03-03 11:13+0700\n" "PO-Revision-Date: 2013-04-13 17:51+1000\n"
"Last-Translator: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
"Language: vi\n" "Language: vi\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -49,7 +50,7 @@ msgstr "Mở trình đơn ứng dụng"
#: ../data/gnome-shell.desktop.in.in.h:1 #: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell" msgid "GNOME Shell"
msgstr "GNOME Shell" msgstr "Hệ vỏ GNOME"
#: ../data/gnome-shell.desktop.in.in.h:2 #: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching" msgid "Window management and application launching"
@ -58,11 +59,11 @@ msgstr "Quản lý cửa sổ và chạy ứng dụng"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1 #: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:153 #: ../js/extensionPrefs/main.js:153
msgid "GNOME Shell Extension Preferences" msgid "GNOME Shell Extension Preferences"
msgstr "Tuỳ thích phần mở rộng GNOME Shell" msgstr "Cá nhân hóa phần mở rộng hệ vỏ 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 "Cấu hình phần mở rộng GNOME Shell" msgstr "Cấu hình phần mở rộng Hệ vỏ GNOME"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1 #: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2" msgid "Enable internal tools useful for developers and testers from Alt-F2"
@ -87,7 +88,7 @@ msgid ""
"list. You can also manipulate this list with the EnableExtension and " "list. You can also manipulate this list with the EnableExtension and "
"DisableExtension DBus methods on org.gnome.Shell." "DisableExtension DBus methods on org.gnome.Shell."
msgstr "" msgstr ""
"Phần mở rộng GNOME Shell có thuộc tính uuid. Khoá này liệt kê danh sách phần " "Phần mở rộng Hệ vỏ GNOME có thuộc tính uuid; khóa này liệt kê danh sách phần "
"mở rộng nên nạp. Bất kỳ phần mở rộng nào muốn nạp phải nằm trong danh sách " "mở rộng nên nạp. Bất kỳ phần mở rộng nào muốn nạp phải nằm trong danh sách "
"này. Bạn có thể thao tác trên danh sách này với phương thức DBus " "này. Bạn có thể thao tác trên danh sách này với phương thức DBus "
"EnableExtension và DisableExtension trên org.gnome.Shell." "EnableExtension và DisableExtension trên org.gnome.Shell."
@ -120,13 +121,15 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9 #: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "List of categories that should be displayed as folders" msgid "List of categories that should be displayed as folders"
msgstr "" msgstr "Liệt kê các các-ta-lốc mà nó có thể hiển thị như một thư mục"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:10 #: ../data/org.gnome.shell.gschema.xml.in.in.h:10
msgid "" msgid ""
"Each category name in this list will be represented as folder in the " "Each category name in this list will be represented as folder in the "
"application view, rather than being displayed inline in the main view." "application view, rather than being displayed inline in the main view."
msgstr "" msgstr ""
"Mỗi tên các-ta-lốc trong danh sách này sẽ được xuất hiện như là một thư mục "
"trong trình bày ứng dụng, thay vì hiển thị cùng dòng trong trình bày chính. "
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11 #: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid "History for command (Alt-F2) dialog" msgid "History for command (Alt-F2) dialog"
@ -154,18 +157,22 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15 #: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Always show the 'Log out' menuitem in the user menu." msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Luôn hiện mục \"Đăng xuất\" trên trình đơn người dùng." msgstr "Luôn hiện mục Đăng xuất trên trình đơn người dùng."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16 #: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "" msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-" "This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations." "user, single-session situations."
msgstr "" msgstr ""
"Khóa này sẽ đè lên việc tự động ẩn trình đơn 'Đăng xuất' ở chế độ đơn-người-"
"dùng, đơn-phiên-làm-việc. "
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17 #: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "" msgid ""
"Whether to remember password for mounting encrypted or remote filesystems" "Whether to remember password for mounting encrypted or remote filesystems"
msgstr "" msgstr ""
"Hoặc là ghi nhớ mật khẩu dành cho việc gắn hệ thống tập tin đã mã hóa hoặc "
"hệ thống tập tin trên máy chủ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18 #: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "" msgid ""
@ -174,6 +181,10 @@ msgid ""
"'Remember Password' checkbox will be present. This key sets the default " "'Remember Password' checkbox will be present. This key sets the default "
"state of the checkbox." "state of the checkbox."
msgstr "" msgstr ""
"Hệ vỏ sẽ yêu cầu mật khẩu khi có thư mục được mã hóa hay hệ thống tập tin "
"máy mạng được gắn. Nếu mật khẩu có thể ghi lại để dùng trong lần sau, hộp "
"dấu kiểm “Nhớ mật khẩu” sẽ xuất hiện. Khóa này đặt trạng thái mặc định cho "
"hộp dấu kiểm."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19 #: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Show the week date in the calendar" msgid "Show the week date in the calendar"
@ -226,27 +237,27 @@ msgstr "Phím chạy hoặc ngừng trình thu màn hình."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Which keyboard to use" msgid "Which keyboard to use"
msgstr "Loại bàn phím cần dùng" msgstr "Bàn phím cần dùng"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid "The type of keyboard to use." msgid "The type of keyboard to use."
msgstr "Loại bàn phím cần dùng." msgstr "Kiểu bàn phím cần dùng."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Framerate used for recording screencasts." msgid "Framerate used for recording screencasts."
msgstr "Tốc độ khung dùng lưu screencast." msgstr "Tốc độ khung hình sẽ dùng khi ghi screencast."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "" msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's " "The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second." "screencast recorder in frames-per-second."
msgstr "" msgstr ""
"Tốc độ khung của screencast lưu bởi bộ thu GNOME Shell theo số khung mỗi " "Tốc độ khung hình của screencast được ghi bởi bộ thu Hệ vỏ GNOME tính theo "
"giây." "số khung mỗi giây."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Ống dẫn gstreamer để thu screencast" msgstr "Ống dẫn gstreamer dùng để thu screencast"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#, no-c-format #, no-c-format
@ -267,9 +278,9 @@ msgstr ""
"source pad không kết nối; đầu ra từ pad sẽ được ghi vào tập tin kết quả. Tuy " "source pad không kết nối; đầu ra từ pad sẽ được ghi vào tập tin kết quả. Tuy "
"nhiên ống dẫn có thể tự lưu đầu ra riêng - có thể hữu dụng để gửi kết quả " "nhiên ống dẫn có thể tự lưu đầu ra riêng - có thể hữu dụng để gửi kết quả "
"đến máy chủ icecast thông qua shout2send hoặc tương tự. Nếu bỏ chọn hoặc đặt " "đến máy chủ icecast thông qua shout2send hoặc tương tự. Nếu bỏ chọn hoặc đặt "
"giá trị rỗng, ống dẫn mặc định sẽ được dùng, hiện thời là 'vp8enc " "giá trị rỗng, ống dẫn mặc định sẽ được dùng, hiện thời là vp8enc "
"min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! " "min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! "
"queue ! webmmux' và lưu ở dạng WEBM dùng VP8 codec. %T được dùng để thế chỗ " "queue ! webmmux và lưu ở dạng WEBM dùng VP8 codec. %T được dùng để thế chỗ "
"cho số thread dự đoán tối ưu cho hệ thống." "cho số thread dự đoán tối ưu cho hệ thống."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:38
@ -296,25 +307,31 @@ msgid ""
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
"only' (shows only the application icon) or 'both'." "only' (shows only the application icon) or 'both'."
msgstr "" msgstr ""
"Cấu hình về cách hiển thị các cửa sổ ở bảng chuyển đổi. Các kiểu có thể là "
"'thumbnail-only' (hiển thị ảnh thu nhỏ của cửa sổ), 'app-icon-only' (chỉ "
"hiển thị biểu tượng của ứng dụng) hoặc 'both' (cả hai)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "" msgstr "Gắn hộp thoại dạng modal vào cửa sổ mẹ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell." "This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr "" msgstr ""
"Khóa này sẽ đè lên khóa có trong org.gnome.mutter khi chạy hệ vỏ GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
msgid "Arrangement of buttons on the titlebar" msgid "Arrangement of buttons on the titlebar"
msgstr "" msgstr "Sắp đặt các nút trên thanh tiêu đề"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45 #: ../data/org.gnome.shell.gschema.xml.in.in.h:45
msgid "" msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running " "This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell." "GNOME Shell."
msgstr "" msgstr ""
"Khóa này đè lên khóa có trong org.gnome.desktop.wm.preferences khi chạy hệ "
"vỏ GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
@ -348,46 +365,46 @@ msgstr "Phiên làm việc…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Không có trong danh sách?" msgstr "Không có trong danh sách?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375 #: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:375
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:126 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:99
#: ../js/ui/userMenu.js:932 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Thôi" msgstr "Thôi"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Đăng nhập" msgstr "Đăng nhập"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
msgid "Next" msgid "Next"
msgstr "Tới" msgstr "Kế tiếp"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:904 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:917 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Tên người dùng: " msgstr "Tài khoản: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Cửa sổ đặt nhập" msgstr "Cửa sổ đăng nhập"
#. Translators: accessible name of the power menu in the login screen #. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:36 #: ../js/gdm/powerMenu.js:36
msgid "Power" msgid "Power"
msgstr "Nguồn" msgstr "Nguồn"
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:694 ../js/ui/userMenu.js:698 #: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:696 ../js/ui/userMenu.js:700
#: ../js/ui/userMenu.js:814 #: ../js/ui/userMenu.js:816
msgid "Suspend" msgid "Suspend"
msgstr "Ngưng" msgstr "Ngưng"
@ -395,58 +412,58 @@ msgstr "Ngưng"
msgid "Restart" msgid "Restart"
msgstr "Khởi động lại" msgstr "Khởi động lại"
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:696 #: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:698
#: ../js/ui/userMenu.js:698 ../js/ui/userMenu.js:813 ../js/ui/userMenu.js:936 #: ../js/ui/userMenu.js:700 ../js/ui/userMenu.js:815 ../js/ui/userMenu.js:942
msgid "Power Off" msgid "Power Off"
msgstr "Tắt máy" msgstr "Tắt máy"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Lỗi xác thực" msgstr "Lỗi xác thực"
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:299 #: ../js/gdm/util.js:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(hoặc quẹt ngón tay)" msgstr "(hoặc quẹt ngón tay)"
#: ../js/gdm/util.js:324 #: ../js/gdm/util.js:391
#, c-format #, c-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(ví dụ người dùng hoặc %s)" msgstr "(ví dụ: tài khoản hoặc %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Không tìm thấy lệnh" msgstr "Không tìm thấy lệnh"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: ../js/misc/util.js:127 #: ../js/misc/util.js:130
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Không thể phân tích lệnh:" msgstr "Không thể phân tích lệnh:"
#: ../js/misc/util.js:135 #: ../js/misc/util.js:138
#, c-format #, c-format
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "Lỗi thực hiện '%s':" msgstr "Lỗi thực hiện %s:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Thường dùng" msgstr "Thường dùng"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Tất cả" msgstr "Tất cả"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Cửa sổ mới" msgstr "Cửa sổ mới"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Bỏ đánh dấu ưa thích" msgstr "Bỏ đánh dấu ưa thích"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Đánh dấu ưa thích" msgstr "Đánh dấu ưa thích"
@ -460,13 +477,13 @@ msgstr "Đã được đánh dấu ưa thích cho %s."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "Đã bỏ đánh dấu ưa thích cho %s" msgstr "Đã bỏ đánh dấu ưa thích cho %s"
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:787 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Thiết lập" msgstr "Cài đặt"
#: ../js/ui/backgroundMenu.js:21 #: ../js/ui/backgroundMenu.js:21
msgid "Change Background…" msgid "Change Background…"
msgstr "Thay đổi nền…" msgstr "Đổi ảnh nền…"
#. 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
@ -585,35 +602,35 @@ msgid "S"
msgstr "T7" msgstr "T7"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:692 #: ../js/ui/calendar.js:720
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Không có lịch hẹn" msgstr "Không có lịch hẹn"
#. 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:708 #: ../js/ui/calendar.js:736
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:711 #: ../js/ui/calendar.js:739
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:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Hôm nay" msgstr "Hôm nay"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Ngày mai" msgstr "Ngày mai"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Tuần này" msgstr "Tuần này"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Tuần tới" msgstr "Tuần tới"
@ -629,12 +646,12 @@ msgstr "Ổ ngoài đã ngắt kết nối"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Thiết bị di động" msgstr "Thiết bị di động"
#: ../js/ui/components/autorunManager.js:593 #: ../js/ui/components/autorunManager.js:594
#, c-format #, c-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Mở bằng %s" msgstr "Mở bằng %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Đẩy ra" msgstr "Đẩy ra"
@ -685,7 +702,7 @@ msgstr "Mạng không dây cần xác thực"
msgid "" msgid ""
"Passwords or encryption keys are required to access the wireless network " "Passwords or encryption keys are required to access the wireless network "
"'%s'." "'%s'."
msgstr "Cần mật mã hoặc khoá mã để truy cập mạng không dây '%s'" msgstr "Cần mật mã hoặc khoá mã để truy cập mạng không dây %s"
#: ../js/ui/components/networkAgent.js:314 #: ../js/ui/components/networkAgent.js:314
msgid "Wired 802.1X authentication" msgid "Wired 802.1X authentication"
@ -718,7 +735,7 @@ msgstr "Mật khẩu mạng băng thông rộng"
#: ../js/ui/components/networkAgent.js:337 #: ../js/ui/components/networkAgent.js:337
#, c-format #, c-format
msgid "A password is required to connect to '%s'." msgid "A password is required to connect to '%s'."
msgstr "Cần mật khẩu để kết nối đến '%s'." msgstr "Cần mật khẩu để kết nối đến %s."
#: ../js/ui/components/polkitAgent.js:55 #: ../js/ui/components/polkitAgent.js:55
msgid "Authentication Required" msgid "Authentication Required"
@ -772,7 +789,7 @@ msgstr "Ngừng im lặng"
#: ../js/ui/components/telepathyClient.js:480 #: ../js/ui/components/telepathyClient.js:480
msgid "Mute" msgid "Mute"
msgstr "Im lặng" msgstr "Câm"
#. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30" #. Translators: this is the word "Yesterday" followed by a time string. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:942 #: ../js/ui/components/telepathyClient.js:942
@ -983,7 +1000,7 @@ msgstr "Xem tài khoản"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Lý do không biết" msgstr "Lý do không biết"
#: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:97 #: ../js/ui/ctrlAltTab.js:29 ../js/ui/viewSelector.js:96
msgid "Windows" msgid "Windows"
msgstr "Cửa sổ" msgstr "Cửa sổ"
@ -1012,7 +1029,7 @@ msgstr "Thiết lập ngày giờ"
#. 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:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A %e %B, %Y" msgstr "%A %e %B, %Y"
@ -1108,7 +1125,7 @@ msgstr "Cài đặt"
#: ../js/ui/extensionDownloader.js:204 #: ../js/ui/extensionDownloader.js:204
#, c-format #, c-format
msgid "Download and install '%s' from extensions.gnome.org?" msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Tải và cài đặt '%s' từ extensions.gnome.org chứ?" msgstr "Tải và cài đặt %s từ extensions.gnome.org chứ?"
#: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314 #: ../js/ui/keyboard.js:619 ../js/ui/status/keyboard.js:314
#: ../js/ui/status/power.js:211 #: ../js/ui/status/power.js:211
@ -1137,9 +1154,7 @@ msgstr "Hiện lỗi"
msgid "Enabled" msgid "Enabled"
msgstr "Bật" msgstr "Bật"
#. translators: #: ../js/ui/lookingGlass.js:769
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Tắt" msgstr "Tắt"
@ -1179,15 +1194,15 @@ msgstr "Xoá thông báo"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Thiết lập thông báo" msgstr "Thiết lập thông báo"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Không có thông báo" msgstr "Không có thông báo"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1782
msgid "Message Tray" msgid "Message Tray"
msgstr "Khay thông báo" msgstr "Khay thông báo"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Thông tin hệ thống" msgstr "Thông tin hệ thống"
@ -1196,13 +1211,13 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Không biết" msgstr "Không biết"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149
#, c-format #, c-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
msgstr[0] "%d tin nhắn mới" msgstr[0] "%d tin nhắn mới"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Hoàn lại" msgstr "Hoàn lại"
@ -1214,21 +1229,21 @@ msgstr "Tổng quan"
#. 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:284 #: ../js/ui/overview.js:271
msgid "Type to search…" msgid "Type to search…"
msgstr "Nhập để tìm…" msgstr "Nhập để tìm…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
msgstr "Thoát" msgstr "Thoát"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:642 #: ../js/ui/panel.js:636
msgid "Activities" msgid "Activities"
msgstr "Hoạt động" msgstr "Hoạt động"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Thanh đỉnh" msgstr "Thanh đỉnh"
@ -1241,31 +1256,31 @@ msgstr "Thanh đỉnh"
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
#: ../js/ui/runDialog.js:205 #: ../js/ui/runDialog.js:73
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Nhập lệnh" msgstr "Nhập lệnh"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:109
msgid "Close" msgid "Close"
msgstr "Đóng" msgstr "Đóng"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format #. long format
#: ../js/ui/screenShield.js:90 #: ../js/ui/screenShield.js:86
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:155 #: ../js/ui/screenShield.js:151
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d thông báo mới" msgstr[0] "%d thông báo mới"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:805 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Khoá" msgstr "Khoá"
#: ../js/ui/screenShield.js:639 #: ../js/ui/screenShield.js:637
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME cần khoá màn hình" msgstr "GNOME cần khoá màn hình"
@ -1276,19 +1291,19 @@ msgstr "GNOME cần khoá màn hình"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1169 #: ../js/ui/screenShield.js:758 ../js/ui/screenShield.js:1194
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Không thể khoá" msgstr "Không thể khoá"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1195
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Một ứng dụng đã ngăn cản khoá" msgstr "Một ứng dụng đã ngăn cản khoá"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
msgid "Searching…" msgid "Searching…"
msgstr "Đang tìm…" msgstr "Đang tìm…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Không có kết quả." msgstr "Không có kết quả."
@ -1300,11 +1315,11 @@ msgstr "Chép"
msgid "Paste" msgid "Paste"
msgstr "Dán" msgstr "Dán"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Hiện chữ" msgstr "Hiện chữ"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Ẩn chữ" msgstr "Ẩn chữ"
@ -1316,7 +1331,7 @@ msgstr "Mật khẩu"
msgid "Remember Password" msgid "Remember Password"
msgstr "Nhớ mật khẩu" msgstr "Nhớ mật khẩu"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113
msgid "Unlock" msgid "Unlock"
msgstr "Bỏ khoá" msgstr "Bỏ khoá"
@ -1433,7 +1448,7 @@ msgstr "Yêu cầu cấp quyền từ %s"
#: ../js/ui/status/bluetooth.js:328 #: ../js/ui/status/bluetooth.js:328
#, c-format #, c-format
msgid "Device %s wants access to the service '%s'" msgid "Device %s wants access to the service '%s'"
msgstr "Thiết bị %s muốn truy cập dịch vụ '%s'" msgstr "Thiết bị %s muốn truy cập dịch vụ %s"
#: ../js/ui/status/bluetooth.js:330 #: ../js/ui/status/bluetooth.js:330
msgid "Always grant access" msgid "Always grant access"
@ -1461,7 +1476,7 @@ msgstr "Thiết bị %s muốn kết nối với máy tính này"
#: ../js/ui/status/bluetooth.js:366 #: ../js/ui/status/bluetooth.js:366
#, c-format #, c-format
msgid "Please confirm whether the PIN '%06d' matches the one on the device." msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgstr "Vui lòng xác nhận PIN '%06d' khớp với số trên thiết bị." msgstr "Vui lòng xác nhận PIN %06d khớp với số trên thiết bị."
#. Translators: this is the verb, not the noun #. Translators: this is the verb, not the noun
#: ../js/ui/status/bluetooth.js:369 #: ../js/ui/status/bluetooth.js:369
@ -1717,59 +1732,59 @@ msgstr "Âm lượng"
msgid "Microphone" msgid "Microphone"
msgstr "Micrô" msgstr "Micrô"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:124
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Đăng nhập người dùng khác" msgstr "Đăng nhập người dùng khác"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Bỏ khoá cửa sổ" msgstr "Bỏ khoá cửa sổ"
#: ../js/ui/userMenu.js:192 #: ../js/ui/userMenu.js:193
msgid "Available" msgid "Available"
msgstr "Có mặt" msgstr "Có mặt"
#: ../js/ui/userMenu.js:195 #: ../js/ui/userMenu.js:196
msgid "Busy" msgid "Busy"
msgstr "Bận" msgstr "Bận"
#: ../js/ui/userMenu.js:198 #: ../js/ui/userMenu.js:199
msgid "Invisible" msgid "Invisible"
msgstr "Giấu mặt" msgstr "Giấu mặt"
#: ../js/ui/userMenu.js:201 #: ../js/ui/userMenu.js:202
msgid "Away" msgid "Away"
msgstr "Vắng mặt" msgstr "Vắng mặt"
#: ../js/ui/userMenu.js:204 #: ../js/ui/userMenu.js:205
msgid "Idle" msgid "Idle"
msgstr "Nhàn rỗi" msgstr "Nhàn rỗi"
#: ../js/ui/userMenu.js:207 #: ../js/ui/userMenu.js:208
msgid "Offline" msgid "Offline"
msgstr "Ngoại tuyến" msgstr "Ngoại tuyến"
#: ../js/ui/userMenu.js:779 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Thông báo" msgstr "Thông báo"
#: ../js/ui/userMenu.js:795 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Chuyển người dùng" msgstr "Chuyển người dùng"
#: ../js/ui/userMenu.js:800 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Đăng xuất" msgstr "Đăng xuất"
#: ../js/ui/userMenu.js:820 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Cài đặt bản cập nhật và khởi động lại" msgstr "Cài đặt bản cập nhật và khởi động lại"
#: ../js/ui/userMenu.js:838 #: ../js/ui/userMenu.js:840
msgid "Your chat status will be set to busy" msgid "Your chat status will be set to busy"
msgstr "Trạng thái nhắn tin của bạn sẽ được đặt là bận" msgstr "Trạng thái nhắn tin của bạn sẽ được đặt là bận"
#: ../js/ui/userMenu.js:839 #: ../js/ui/userMenu.js:841
msgid "" msgid ""
"Notifications are now disabled, including chat messages. Your online status " "Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages." "has been adjusted to let others know that you might not see their messages."
@ -1777,33 +1792,35 @@ msgstr ""
"Thông báo đã bị tắt, bao gồm tin nhắn. Trạng thái trực tuyến của bạn đã được " "Thông báo đã bị tắt, bao gồm tin nhắn. Trạng thái trực tuyến của bạn đã được "
"điều chỉnh để mọi người biết bạn sẽ không xem tin nhắn họ gửi đến." "điều chỉnh để mọi người biết bạn sẽ không xem tin nhắn họ gửi đến."
#: ../js/ui/userMenu.js:885 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Người dùng khác đang đăng nhập." msgstr "Người dùng khác đang đăng nhập."
#: ../js/ui/userMenu.js:890 #: ../js/ui/userMenu.js:893
msgid "Shutting down might cause them to lose unsaved work." msgid "Shutting down might cause them to lose unsaved work."
msgstr "Tắt sẽ làm mất những kết quả chưa được lưu." msgstr "Tắt sẽ làm mất những kết quả chưa được lưu."
#: ../js/ui/userMenu.js:916 #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/userMenu.js:921
#, c-format #, c-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (ở xa)" msgstr "%s (ở xa)"
#: ../js/ui/userMenu.js:918 #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/userMenu.js:924
#, c-format #, c-format
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (console)" msgstr "%s (console)"
#: ../js/ui/viewSelector.js:101 #: ../js/ui/viewSelector.js:100
msgid "Applications" msgid "Applications"
msgstr "Ứng dụng" msgstr "Ứng dụng"
#: ../js/ui/viewSelector.js:105 #: ../js/ui/viewSelector.js:104
msgid "Search" msgid "Search"
msgstr "Tìm" msgstr "Tìm"
#: ../js/ui/wanda.js:92 #: ../js/ui/wanda.js:77
#, c-format #, c-format
msgid "" msgid ""
"Sorry, no wisdom for you today:\n" "Sorry, no wisdom for you today:\n"
@ -1812,7 +1829,7 @@ msgstr ""
"Rất tiếc, không có lời thông thái nào hôm nay:\n" "Rất tiếc, không có lời thông thái nào hôm nay:\n"
"%s" "%s"
#: ../js/ui/wanda.js:96 #: ../js/ui/wanda.js:81
#, c-format #, c-format
msgid "%s the Oracle says" msgid "%s the Oracle says"
msgstr "Nhà tiên tri %s nói" msgstr "Nhà tiên tri %s nói"
@ -1820,32 +1837,12 @@ msgstr "Nhà tiên tri %s nói"
#: ../js/ui/windowAttentionHandler.js:19 #: ../js/ui/windowAttentionHandler.js:19
#, c-format #, c-format
msgid "'%s' is ready" msgid "'%s' is ready"
msgstr "'%s' đã sẵn sàng" msgstr "%s đã sẵn sàng"
#: ../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 "Lịch Evolution" msgstr "Lịch Evolution"
#. translators:
#. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1837
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
msgstr[0] "%u đầu ra"
#. translators:
#. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1847
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u đầu vào"
#: ../src/gvc/gvc-mixer-control.c:2371
msgid "System Sounds"
msgstr "Âm thanh hệ thống"
#: ../src/main.c:347 #: ../src/main.c:347
msgid "Print version" msgid "Print version"
msgstr "In phiên bản" msgstr "In phiên bản"
@ -1856,7 +1853,7 @@ msgstr "Chể độ dùng bởi GDM cho màn hình đăng nhập"
#: ../src/main.c:359 #: ../src/main.c:359
msgid "Use a specific mode, e.g. \"gdm\" for login screen" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Dùng chế độ đặc biệt, ví dụ \"gdm\" cho màn hình đăng nhập" msgstr "Dùng chế độ đặc biệt, ví dụ gdm cho màn hình đăng nhập"
#: ../src/main.c:365 #: ../src/main.c:365
msgid "List possible modes" msgid "List possible modes"
@ -1865,7 +1862,7 @@ msgstr "Danh sách chế độ"
#: ../src/shell-app.c:622 #: ../src/shell-app.c:622
#, c-format #, c-format
msgid "Failed to launch '%s'" msgid "Failed to launch '%s'"
msgstr "Lỗi chạy '%s'" msgstr "Lỗi chạy %s"
#: ../src/shell-keyring-prompt.c:708 #: ../src/shell-keyring-prompt.c:708
msgid "Passwords do not match." msgid "Passwords do not match."
@ -1879,6 +1876,17 @@ msgstr "Mật khẩu không thể không có"
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "Hộp thoại xác thực bị người dùng bỏ qua" msgstr "Hộp thoại xác thực bị người dùng bỏ qua"
#~ msgid "%u Output"
#~ msgid_plural "%u Outputs"
#~ msgstr[0] "%u đầu ra"
#~ msgid "%u Input"
#~ msgid_plural "%u Inputs"
#~ msgstr[0] "%u đầu vào"
#~ msgid "System Sounds"
#~ msgstr "Âm thanh hệ thống"
#~ msgctxt "title" #~ msgctxt "title"
#~ msgid "Sign In" #~ msgid "Sign In"
#~ msgstr "Đăng nhập" #~ msgstr "Đăng nhập"
@ -1910,7 +1918,7 @@ msgstr "Hộp thoại xác thực bị người dùng bỏ qua"
#~ msgstr "%l:%M %p" #~ msgstr "%l:%M %p"
#~ msgid "Failed to unmount '%s'" #~ msgid "Failed to unmount '%s'"
#~ msgstr "Lỗi bỏ gắn kết '%s'" #~ msgstr "Lỗi bỏ gắn kết %s"
#~ msgid "Retry" #~ msgid "Retry"
#~ msgstr "Thử lại" #~ msgstr "Thử lại"
@ -1925,7 +1933,7 @@ msgstr "Hộp thoại xác thực bị người dùng bỏ qua"
#~ msgstr "Lỗi duyệt tập tin" #~ msgstr "Lỗi duyệt tập tin"
#~ msgid "The requested device cannot be browsed, error is '%s'" #~ msgid "The requested device cannot be browsed, error is '%s'"
#~ msgstr "Không thể duyệt thiết bị yêu cầu , lỗi là '%s'" #~ msgstr "Không thể duyệt thiết bị yêu cầu , lỗi là %s"
#~ msgid "Wireless" #~ msgid "Wireless"
#~ msgstr "Mạng không dây" #~ msgstr "Mạng không dây"
@ -2070,155 +2078,3 @@ msgstr "Hộp thoại xác thực bị người dùng bỏ qua"
#~ msgid "Show password" #~ msgid "Show password"
#~ msgstr "Hiện mật khẩu" #~ msgstr "Hiện mật khẩu"
#~| msgid "If true, display seconds in time."
#~ msgid "If true, display onscreen keyboard."
#~ msgstr "Nếu đúng (true), hiện bàn phím màn hình."
#~| msgid "Screen Keyboard"
#~ msgid "Show the onscreen keyboard"
#~ msgstr "Hiện bàn phím màn hình"
#~ msgid "%s has finished starting"
#~ msgstr "%s đã hoàn tất khởi chạy"
#~ msgid "Uuids of extensions to disable"
#~ msgstr "UUID của phần mở rộng cần tắt"
#~ msgid "You're now connected to mobile broadband connection '%s'"
#~ msgstr "Đã nối mạng '%s' (băng thông rộng)"
#~ msgid "You're now connected to wireless network '%s'"
#~ msgstr "Đã nối mạng '%s' (không dây)"
#~ msgid "You're now connected to wired network '%s'"
#~ msgstr "Đã nối mạng '%s' (dây)"
#~ msgid "You're now connected to VPN network '%s'"
#~ msgstr "Đã nối mạng VPN '%s'"
#~ msgid "Localization Settings"
#~ msgstr "Thiết lập bản địa hoá"
#~ msgid "Less than a minute ago"
#~ msgstr "Chưa đến một phút"
#~ msgid "%d minute ago"
#~ msgid_plural "%d minutes ago"
#~ msgstr[0] "%d phút trước"
#~ msgid "%d hour ago"
#~ msgid_plural "%d hours ago"
#~ msgstr[0] "%d giờ trước"
#~ msgid "%d day ago"
#~ msgid_plural "%d days ago"
#~ msgstr[0] "%d ngày trước"
#~ msgid "%d week ago"
#~ msgid_plural "%d weeks ago"
#~ msgstr[0] "%d tuần trước"
#~ msgid "Shut Down"
#~ msgstr "Tắt máy"
#~ msgid "Click Shut Down to quit these applications and shut down the system."
#~ msgstr "Nhấn Tắt máy để thoát những ứng dụng này và tắt hệ thống."
#~ msgid "The system will shut down automatically in %d seconds."
#~ msgstr "Hệ thống sẽ tự động tắt sau %d giây."
#~ msgid "Shutting down the system."
#~ msgstr "Tắt hệ thống."
#~ msgid "Confirm"
#~ msgstr "Xác nhận"
#~ msgid "Clip the crosshairs at the center"
#~ msgstr "Cắt lưới chéo ở giữa"
#~ msgid "Color of the crosshairs"
#~ msgstr "Màu lưới chéo"
#~ msgid ""
#~ "Determines the length of the vertical and horizontal lines that make up "
#~ "the crosshairs."
#~ msgstr "Xác định độ dài và rộng của những dòng tạo nên lưới chéo."
#~ msgid ""
#~ "Determines the transparency of the crosshairs, from fully opaque to fully "
#~ "transparent."
#~ msgstr "Xác định độ trong suốt của lưới chéo, từ đặc đến trong suốt."
#~ msgid "Enable lens mode"
#~ msgstr "Bật chế độ gương"
#~ msgid "Show or hide crosshairs"
#~ msgstr "Hiện hoặc ẩn lưới chéo"
#~ msgid "Show or hide the magnifier"
#~ msgstr "Hiện hoặc ẩn kính lúp"
#~ msgid "Thickness of the crosshairs"
#~ msgstr "Độ dày lưới chéo"
#~ msgid ""
#~ "Width of the vertical and horizontal lines that make up the crosshairs."
#~ msgstr "Độ rộng của đường dọc/ngang hình thành dấu gạch chéo."
#~ msgid "PREFERENCES"
#~ msgstr "TUỲ THÍCH"
#~ msgid "Shut Down..."
#~ msgstr "Tắt máy..."
#~ msgid "Search your computer"
#~ msgstr "Tìm trong máy"
#~ msgid "Customize the panel clock"
#~ msgstr "Tuỳ biến đồng hồ"
#~ msgid "Clock Format"
#~ msgstr "Dạng đồng hồ"
#~| msgid "System Preferences..."
#~ msgid "Clock Preferences"
#~ msgstr "Thiết lập đồng hồ"
#~ msgid "Panel Display"
#~ msgstr "Khung hiển thị"
#~ msgid "Show seco_nds"
#~ msgstr "Hiện _giây"
#~ msgid "_12 hour format"
#~ msgstr "Dạng _12 giờ"
#~ msgid "_24 hour format"
#~ msgstr "Dạng _24 giờ"
#~| msgid "System Preferences..."
#~ msgid "Preferences"
#~ msgstr "Thiết lập"
#~ msgid ""
#~ "Can't add a new workspace because maximum workspaces limit has been "
#~ "reached."
#~ msgstr ""
#~ "Không thể thêm vùng làm việc mới vì đã đạt giới hạn số vùng làm việc tối "
#~ "đa."
#~ msgid "Can't remove the first workspace."
#~ msgstr "Không thể bỏ vùng làm việc đầu tiên."
#~ msgid "Drag here to add favorites"
#~ msgstr "Kéo vào đây để thêm vào danh mục ưa thích"
#~ msgid "Find..."
#~ msgstr "Tìm"
#~ msgid "Sidebar"
#~ msgstr "Thanh bên"
#~ msgid "Recent Documents"
#~ msgstr "Tài liệu gần đây"

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,8 @@
* @SHELL_KEYBINDING_MODE_SYSTEM_MODAL: allow keybinding when a system modal * @SHELL_KEYBINDING_MODE_SYSTEM_MODAL: allow keybinding when a system modal
* dialog (e.g. authentification or session dialogs) is open * dialog (e.g. authentification or session dialogs) is open
* @SHELL_KEYBINDING_MODE_LOOKING_GLASS: allow keybinding in looking glass * @SHELL_KEYBINDING_MODE_LOOKING_GLASS: allow keybinding in looking glass
* @SHELL_KEYBINDING_MODE_TOPBAR_POPUP: allow keybinding while a top bar menu
* is open
* @SHELL_KEYBINDING_MODE_ALL: always allow keybinding * @SHELL_KEYBINDING_MODE_ALL: always allow keybinding
* *
* Controls in which GNOME Shell states a keybinding should be handled. * Controls in which GNOME Shell states a keybinding should be handled.
@ -29,6 +31,7 @@ typedef enum {
SHELL_KEYBINDING_MODE_MESSAGE_TRAY = 1 << 5, SHELL_KEYBINDING_MODE_MESSAGE_TRAY = 1 << 5,
SHELL_KEYBINDING_MODE_SYSTEM_MODAL = 1 << 6, SHELL_KEYBINDING_MODE_SYSTEM_MODAL = 1 << 6,
SHELL_KEYBINDING_MODE_LOOKING_GLASS = 1 << 7, SHELL_KEYBINDING_MODE_LOOKING_GLASS = 1 << 7,
SHELL_KEYBINDING_MODE_TOPBAR_POPUP = 1 << 8,
SHELL_KEYBINDING_MODE_ALL = ~0, SHELL_KEYBINDING_MODE_ALL = ~0,
} ShellKeyBindingMode; } ShellKeyBindingMode;

View File

@ -100,7 +100,6 @@ G_DEFINE_TYPE_WITH_CODE (ShellKeyringPrompt, shell_keyring_prompt, G_TYPE_OBJECT
enum { enum {
SIGNAL_SHOW_PASSWORD, SIGNAL_SHOW_PASSWORD,
SIGNAL_SHOW_CONFIRM, SIGNAL_SHOW_CONFIRM,
SIGNAL_HIDE_PROMPT,
SIGNAL_LAST SIGNAL_LAST
}; };
@ -258,10 +257,8 @@ shell_keyring_prompt_dispose (GObject *obj)
{ {
ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (obj); ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (obj);
if (self->shown) { if (self->shown)
self->shown = FALSE; gcr_prompt_close (GCR_PROMPT (self));
g_signal_emit (self, signals[SIGNAL_HIDE_PROMPT], 0);
}
if (self->async_result) if (self->async_result)
shell_keyring_prompt_cancel (self); shell_keyring_prompt_cancel (self);
@ -384,11 +381,6 @@ shell_keyring_prompt_class_init (ShellKeyringPromptClass *klass)
0, 0, NULL, NULL, 0, 0, NULL, NULL,
g_cclosure_marshal_VOID__VOID, g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
signals[SIGNAL_HIDE_PROMPT] = g_signal_new ("hide-prompt", G_TYPE_FROM_CLASS (klass),
0, 0, NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
} }
static void static void
@ -482,6 +474,19 @@ shell_keyring_prompt_confirm_finish (GcrPrompt *prompt,
return self->last_reply; return self->last_reply;
} }
static void
shell_keyring_prompt_close (GcrPrompt *prompt)
{
ShellKeyringPrompt *self = SHELL_KEYRING_PROMPT (prompt);
/*
* We expect keyring.js to connect to this signal and do the
* actual work of closing the prompt.
*/
self->shown = FALSE;
}
static void static void
shell_keyring_prompt_iface (GcrPromptIface *iface) shell_keyring_prompt_iface (GcrPromptIface *iface)
{ {
@ -489,6 +494,7 @@ shell_keyring_prompt_iface (GcrPromptIface *iface)
iface->prompt_password_finish = shell_keyring_prompt_password_finish; iface->prompt_password_finish = shell_keyring_prompt_password_finish;
iface->prompt_confirm_async = shell_keyring_prompt_confirm_async; iface->prompt_confirm_async = shell_keyring_prompt_confirm_async;
iface->prompt_confirm_finish = shell_keyring_prompt_confirm_finish; iface->prompt_confirm_finish = shell_keyring_prompt_confirm_finish;
iface->prompt_close = shell_keyring_prompt_close;
} }
/** /**
@ -746,9 +752,19 @@ shell_keyring_prompt_cancel (ShellKeyringPrompt *self)
GSimpleAsyncResult *res; GSimpleAsyncResult *res;
g_return_if_fail (SHELL_IS_KEYRING_PROMPT (self)); g_return_if_fail (SHELL_IS_KEYRING_PROMPT (self));
g_return_if_fail (self->mode != PROMPTING_NONE);
g_return_if_fail (self->async_result != NULL);
/*
* If cancelled while not prompting, we should just close the prompt,
* the user wants it to go away.
*/
if (self->mode == PROMPTING_NONE)
{
if (self->shown)
gcr_prompt_close (GCR_PROMPT (self));
return;
}
g_return_if_fail (self->async_result != NULL);
self->last_reply = GCR_PROMPT_REPLY_CANCEL; self->last_reply = GCR_PROMPT_REPLY_CANCEL;
res = self->async_result; res = self->async_result;

View File

@ -50,6 +50,8 @@ struct _ShellRecorder {
RecorderState state; RecorderState state;
ClutterStage *stage; ClutterStage *stage;
gboolean custom_area;
cairo_rectangle_int_t area;
int stage_width; int stage_width;
int stage_height; int stage_height;
@ -66,6 +68,7 @@ struct _ShellRecorder {
CoglHandle recording_icon; /* icon shown while playing */ CoglHandle recording_icon; /* icon shown while playing */
gboolean draw_cursor;
cairo_surface_t *cursor_image; cairo_surface_t *cursor_image;
int cursor_hot_x; int cursor_hot_x;
int cursor_hot_y; int cursor_hot_y;
@ -110,6 +113,8 @@ static void recorder_set_pipeline (ShellRecorder *recorder,
const char *pipeline); const char *pipeline);
static void recorder_set_file_template (ShellRecorder *recorder, static void recorder_set_file_template (ShellRecorder *recorder,
const char *file_template); const char *file_template);
static void recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor);
static void recorder_pipeline_set_caps (RecorderPipeline *pipeline); static void recorder_pipeline_set_caps (RecorderPipeline *pipeline);
static void recorder_pipeline_closed (RecorderPipeline *pipeline); static void recorder_pipeline_closed (RecorderPipeline *pipeline);
@ -119,7 +124,8 @@ enum {
PROP_STAGE, PROP_STAGE,
PROP_FRAMERATE, PROP_FRAMERATE,
PROP_PIPELINE, PROP_PIPELINE,
PROP_FILE_TEMPLATE PROP_FILE_TEMPLATE,
PROP_DRAW_CURSOR
}; };
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT); G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
@ -273,6 +279,7 @@ shell_recorder_init (ShellRecorder *recorder)
recorder->state = RECORDER_STATE_CLOSED; recorder->state = RECORDER_STATE_CLOSED;
recorder->framerate = DEFAULT_FRAMES_PER_SECOND; recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
recorder->draw_cursor = TRUE;
} }
static void static void
@ -429,10 +436,10 @@ recorder_draw_cursor (ShellRecorder *recorder,
/* We don't show a cursor unless the hot spot is in the frame; this /* We don't show a cursor unless the hot spot is in the frame; this
* means that sometimes we aren't going to draw a cursor even when * means that sometimes we aren't going to draw a cursor even when
* there is a little bit overlapping within the stage */ * there is a little bit overlapping within the stage */
if (recorder->pointer_x < 0 || if (recorder->pointer_x < recorder->area.x ||
recorder->pointer_y < 0 || recorder->pointer_y < recorder->area.y ||
recorder->pointer_x >= recorder->stage_width || recorder->pointer_x >= recorder->area.x + recorder->area.width ||
recorder->pointer_y >= recorder->stage_height) recorder->pointer_y >= recorder->area.y + recorder->area.height)
return; return;
if (!recorder->cursor_image) if (!recorder->cursor_image)
@ -444,15 +451,15 @@ recorder_draw_cursor (ShellRecorder *recorder,
gst_buffer_map (buffer, &info, GST_MAP_WRITE); gst_buffer_map (buffer, &info, GST_MAP_WRITE);
surface = cairo_image_surface_create_for_data (info.data, surface = cairo_image_surface_create_for_data (info.data,
CAIRO_FORMAT_ARGB32, CAIRO_FORMAT_ARGB32,
recorder->stage_width, recorder->area.width,
recorder->stage_height, recorder->area.height,
recorder->stage_width * 4); recorder->area.width * 4);
cr = cairo_create (surface); cr = cairo_create (surface);
cairo_set_source_surface (cr, cairo_set_source_surface (cr,
recorder->cursor_image, recorder->cursor_image,
recorder->pointer_x - recorder->cursor_hot_x, recorder->pointer_x - recorder->cursor_hot_x - recorder->area.x,
recorder->pointer_y - recorder->cursor_hot_y); recorder->pointer_y - recorder->cursor_hot_y - recorder->area.y);
cairo_paint (cr); cairo_paint (cr);
cairo_destroy (cr); cairo_destroy (cr);
@ -555,12 +562,13 @@ recorder_record_frame (ShellRecorder *recorder)
recorder->last_frame_time = now; recorder->last_frame_time = now;
size = recorder->stage_width * recorder->stage_height * 4; size = recorder->area.width * recorder->area.height * 4;
data = g_malloc (recorder->stage_width * 4 * recorder->stage_height); data = g_malloc (recorder->area.width * 4 * recorder->area.height);
cogl_read_pixels (0, 0, /* x/y */ cogl_read_pixels (recorder->area.x,
recorder->stage_width, recorder->area.y,
recorder->stage_height, recorder->area.width,
recorder->area.height,
COGL_READ_PIXELS_COLOR_BUFFER, COGL_READ_PIXELS_COLOR_BUFFER,
CLUTTER_CAIRO_FORMAT_ARGB32, CLUTTER_CAIRO_FORMAT_ARGB32,
data); data);
@ -572,7 +580,8 @@ recorder_record_frame (ShellRecorder *recorder)
GST_BUFFER_PTS(buffer) = now - recorder->start_time; GST_BUFFER_PTS(buffer) = now - recorder->start_time;
recorder_draw_cursor (recorder, buffer); if (recorder->draw_cursor)
recorder_draw_cursor (recorder, buffer);
shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer); shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer);
gst_buffer_unref (buffer); gst_buffer_unref (buffer);
@ -616,6 +625,14 @@ recorder_update_size (ShellRecorder *recorder)
clutter_actor_get_allocation_box (CLUTTER_ACTOR (recorder->stage), &allocation); clutter_actor_get_allocation_box (CLUTTER_ACTOR (recorder->stage), &allocation);
recorder->stage_width = (int)(0.5 + allocation.x2 - allocation.x1); recorder->stage_width = (int)(0.5 + allocation.x2 - allocation.x1);
recorder->stage_height = (int)(0.5 + allocation.y2 - allocation.y1); recorder->stage_height = (int)(0.5 + allocation.y2 - allocation.y1);
if (!recorder->custom_area)
{
recorder->area.x = 0;
recorder->area.y = 0;
recorder->area.width = recorder->stage_width;
recorder->area.height = recorder->stage_height;
}
} }
static void static void
@ -1006,6 +1023,18 @@ recorder_set_file_template (ShellRecorder *recorder,
g_object_notify (G_OBJECT (recorder), "file-template"); g_object_notify (G_OBJECT (recorder), "file-template");
} }
static void
recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor)
{
if (draw_cursor == recorder->draw_cursor)
return;
recorder->draw_cursor = draw_cursor;
g_object_notify (G_OBJECT (recorder), "draw-cursor");
}
static void static void
shell_recorder_set_property (GObject *object, shell_recorder_set_property (GObject *object,
guint prop_id, guint prop_id,
@ -1028,6 +1057,9 @@ shell_recorder_set_property (GObject *object,
case PROP_FILE_TEMPLATE: case PROP_FILE_TEMPLATE:
recorder_set_file_template (recorder, g_value_get_string (value)); recorder_set_file_template (recorder, g_value_get_string (value));
break; break;
case PROP_DRAW_CURSOR:
recorder_set_draw_cursor (recorder, g_value_get_boolean (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -1056,6 +1088,9 @@ shell_recorder_get_property (GObject *object,
case PROP_FILE_TEMPLATE: case PROP_FILE_TEMPLATE:
g_value_set_string (value, recorder->file_template); g_value_set_string (value, recorder->file_template);
break; break;
case PROP_DRAW_CURSOR:
g_value_set_boolean (value, recorder->draw_cursor);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -1104,6 +1139,14 @@ shell_recorder_class_init (ShellRecorderClass *klass)
"The filename template to use for output files", "The filename template to use for output files",
NULL, NULL,
G_PARAM_READWRITE)); G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_DRAW_CURSOR,
g_param_spec_boolean ("draw-cursor",
"Draw Cursor",
"Whether to record the cursor",
TRUE,
G_PARAM_READWRITE));
} }
/* Sets the GstCaps (video format, in this case) on the stream /* Sets the GstCaps (video format, in this case) on the stream
@ -1126,8 +1169,8 @@ recorder_pipeline_set_caps (RecorderPipeline *pipeline)
"bpp", G_TYPE_INT, 32, "bpp", G_TYPE_INT, 32,
"depth", G_TYPE_INT, 24, "depth", G_TYPE_INT, 24,
"framerate", GST_TYPE_FRACTION, pipeline->recorder->framerate, 1, "framerate", GST_TYPE_FRACTION, pipeline->recorder->framerate, 1,
"width", G_TYPE_INT, pipeline->recorder->stage_width, "width", G_TYPE_INT, pipeline->recorder->area.width,
"height", G_TYPE_INT, pipeline->recorder->stage_height, "height", G_TYPE_INT, pipeline->recorder->area.height,
NULL); NULL);
g_object_set (pipeline->src, "caps", caps, NULL); g_object_set (pipeline->src, "caps", caps, NULL);
gst_caps_unref (caps); gst_caps_unref (caps);
@ -1678,6 +1721,15 @@ shell_recorder_set_file_template (ShellRecorder *recorder,
} }
void
shell_recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor)
{
g_return_if_fail (SHELL_IS_RECORDER (recorder));
recorder_set_draw_cursor (recorder, draw_cursor);
}
/** /**
* shell_recorder_set_pipeline: * shell_recorder_set_pipeline:
* @recorder: the #ShellRecorder * @recorder: the #ShellRecorder
@ -1705,9 +1757,35 @@ shell_recorder_set_pipeline (ShellRecorder *recorder,
recorder_set_pipeline (recorder, pipeline); recorder_set_pipeline (recorder, pipeline);
} }
void
shell_recorder_set_area (ShellRecorder *recorder,
int x,
int y,
int width,
int height)
{
g_return_if_fail (SHELL_IS_RECORDER (recorder));
recorder->custom_area = TRUE;
recorder->area.x = CLAMP (x, 0, recorder->stage_width);
recorder->area.y = CLAMP (y, 0, recorder->stage_height);
recorder->area.width = CLAMP (width,
0, recorder->stage_width - recorder->area.x);
recorder->area.height = CLAMP (height,
0, recorder->stage_height - recorder->area.y);
/* This breaks the recording but tweaking the GStreamer pipeline a bit
* might make it work, at least if the codec can handle a stream where
* the frame size changes in the middle.
*/
if (recorder->current_pipeline)
recorder_pipeline_set_caps (recorder->current_pipeline);
}
/** /**
* shell_recorder_record: * shell_recorder_record:
* @recorder: the #ShellRecorder * @recorder: the #ShellRecorder
* @filename_used: (out) (allow-none): 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
@ -1724,7 +1802,8 @@ shell_recorder_set_pipeline (ShellRecorder *recorder,
* Return value: %TRUE if recording was succesfully started * Return value: %TRUE if recording was succesfully started
*/ */
gboolean gboolean
shell_recorder_record (ShellRecorder *recorder) shell_recorder_record (ShellRecorder *recorder,
char **filename_used)
{ {
g_return_val_if_fail (SHELL_IS_RECORDER (recorder), FALSE); g_return_val_if_fail (SHELL_IS_RECORDER (recorder), FALSE);
g_return_val_if_fail (recorder->stage != NULL, FALSE); g_return_val_if_fail (recorder->stage != NULL, FALSE);
@ -1733,6 +1812,9 @@ shell_recorder_record (ShellRecorder *recorder)
if (!recorder_open_pipeline (recorder)) if (!recorder_open_pipeline (recorder))
return FALSE; return FALSE;
if (filename_used)
*filename_used = g_strdup (recorder->current_pipeline->filename);
recorder_connect_stage_callbacks (recorder); recorder_connect_stage_callbacks (recorder);
recorder->start_time = get_wall_time(); recorder->start_time = get_wall_time();

View File

@ -36,7 +36,15 @@ void shell_recorder_set_file_template (ShellRecorder *recorder,
const char *file_template); const char *file_template);
void shell_recorder_set_pipeline (ShellRecorder *recorder, void shell_recorder_set_pipeline (ShellRecorder *recorder,
const char *pipeline); const char *pipeline);
gboolean shell_recorder_record (ShellRecorder *recorder); void shell_recorder_set_draw_cursor (ShellRecorder *recorder,
gboolean draw_cursor);
void shell_recorder_set_area (ShellRecorder *recorder,
int x,
int y,
int width,
int height);
gboolean shell_recorder_record (ShellRecorder *recorder,
char **filename_used);
void shell_recorder_close (ShellRecorder *recorder); void shell_recorder_close (ShellRecorder *recorder);
void shell_recorder_pause (ShellRecorder *recorder); void shell_recorder_pause (ShellRecorder *recorder);
gboolean shell_recorder_is_recording (ShellRecorder *recorder); gboolean shell_recorder_is_recording (ShellRecorder *recorder);

View File

@ -82,6 +82,8 @@ enum
PROP_CLUTTER_TEXT, PROP_CLUTTER_TEXT,
PROP_HINT_TEXT, PROP_HINT_TEXT,
PROP_TEXT, PROP_TEXT,
PROP_INPUT_PURPOSE,
PROP_INPUT_HINTS,
}; };
/* signals */ /* signals */
@ -136,6 +138,14 @@ st_entry_set_property (GObject *gobject,
st_entry_set_text (entry, g_value_get_string (value)); st_entry_set_text (entry, g_value_get_string (value));
break; break;
case PROP_INPUT_PURPOSE:
st_entry_set_input_purpose (entry, g_value_get_enum (value));
break;
case PROP_INPUT_HINTS:
st_entry_set_input_hints (entry, g_value_get_flags (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@ -164,6 +174,14 @@ st_entry_get_property (GObject *gobject,
g_value_set_string (value, clutter_text_get_text (CLUTTER_TEXT (priv->entry))); g_value_set_string (value, clutter_text_get_text (CLUTTER_TEXT (priv->entry)));
break; break;
case PROP_INPUT_PURPOSE:
g_value_set_enum (value, st_im_text_get_input_purpose (ST_IM_TEXT (priv->entry)));
break;
case PROP_INPUT_HINTS:
g_value_set_flags (value, st_im_text_get_input_hints (ST_IM_TEXT (priv->entry)));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break; break;
@ -759,6 +777,26 @@ st_entry_class_init (StEntryClass *klass)
NULL, G_PARAM_READWRITE); NULL, G_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_TEXT, pspec); g_object_class_install_property (gobject_class, PROP_TEXT, pspec);
pspec = g_param_spec_enum ("input-purpose",
"Purpose",
"Purpose of the text field",
GTK_TYPE_INPUT_PURPOSE,
GTK_INPUT_PURPOSE_FREE_FORM,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (gobject_class,
PROP_INPUT_PURPOSE,
pspec);
pspec = g_param_spec_flags ("input-hints",
"hints",
"Hints for the text field behaviour",
GTK_TYPE_INPUT_HINTS,
GTK_INPUT_HINT_NONE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (gobject_class,
PROP_INPUT_HINTS,
pspec);
/* signals */ /* signals */
/** /**
* StEntry::primary-icon-clicked: * StEntry::primary-icon-clicked:
@ -966,6 +1004,87 @@ st_entry_get_hint_text (StEntry *entry)
return entry->priv->hint; return entry->priv->hint;
} }
/**
* st_entry_set_input_purpose:
* @entry: a #StEntry
* @purpose: the purpose
*
* Sets the #StEntry:input-purpose property which
* can be used by on-screen keyboards and other input
* methods to adjust their behaviour.
*/
void
st_entry_set_input_purpose (StEntry *entry,
GtkInputPurpose purpose)
{
StIMText *imtext;
g_return_if_fail (ST_IS_ENTRY (entry));
imtext = ST_IM_TEXT (entry->priv->entry);
if (st_im_text_get_input_purpose (imtext) != purpose)
{
st_im_text_set_input_purpose (imtext, purpose);
g_object_notify (G_OBJECT (entry), "input-purpose");
}
}
/**
* st_entry_get_input_purpose:
* @entry: a #StEntry
*
* Gets the value of the #StEntry:input-purpose property.
*/
GtkInputPurpose
st_entry_get_input_purpose (StEntry *entry)
{
g_return_val_if_fail (ST_IS_ENTRY (entry), GTK_INPUT_PURPOSE_FREE_FORM);
return st_im_text_get_input_purpose (ST_IM_TEXT (entry->priv->entry));
}
/**
* st_entry_set_input_hints:
* @entry: a #StEntry
* @hints: the hints
*
* Sets the #StEntry:input-hints property, which
* allows input methods to fine-tune their behaviour.
*/
void
st_entry_set_input_hints (StEntry *entry,
GtkInputHints hints)
{
StIMText *imtext;
g_return_if_fail (ST_IS_ENTRY (entry));
imtext = ST_IM_TEXT (entry->priv->entry);
if (st_im_text_get_input_hints (imtext) != hints)
{
st_im_text_set_input_hints (imtext, hints);
g_object_notify (G_OBJECT (entry), "input-hints");
}
}
/**
* st_entry_get_input_hints:
* @entry: a #StEntry
*
* Gets the value of the #StEntry:input-hints property.
*/
GtkInputHints
st_entry_get_input_hints (StEntry *entry)
{
g_return_val_if_fail (ST_IS_ENTRY (entry), GTK_INPUT_HINT_NONE);
return st_im_text_get_input_hints (ST_IM_TEXT (entry->priv->entry));
}
static gboolean static gboolean
_st_entry_icon_press_cb (ClutterActor *actor, _st_entry_icon_press_cb (ClutterActor *actor,
ClutterButtonEvent *event, ClutterButtonEvent *event,

View File

@ -64,20 +64,27 @@ struct _StEntryClass
GType st_entry_get_type (void) G_GNUC_CONST; GType st_entry_get_type (void) G_GNUC_CONST;
StWidget * st_entry_new (const gchar *text); StWidget *st_entry_new (const gchar *text);
const gchar * st_entry_get_text (StEntry *entry); const gchar *st_entry_get_text (StEntry *entry);
void st_entry_set_text (StEntry *entry, void st_entry_set_text (StEntry *entry,
const gchar *text); const gchar *text);
ClutterActor* st_entry_get_clutter_text (StEntry *entry); ClutterActor *st_entry_get_clutter_text (StEntry *entry);
void st_entry_set_hint_text (StEntry *entry, void st_entry_set_hint_text (StEntry *entry,
const gchar *text); const gchar *text);
const gchar * st_entry_get_hint_text (StEntry *entry); const gchar *st_entry_get_hint_text (StEntry *entry);
void st_entry_set_primary_icon (StEntry *entry, void st_entry_set_input_purpose (StEntry *entry,
ClutterActor *icon); GtkInputPurpose purpose);
void st_entry_set_secondary_icon (StEntry *entry, GtkInputPurpose st_entry_get_input_purpose (StEntry *entry);
ClutterActor *icon); void st_entry_set_input_hints (StEntry *entry,
GtkInputHints hints);
GtkInputHints st_entry_get_input_hints (StEntry *entry);
void st_entry_set_primary_icon (StEntry *entry,
ClutterActor *icon);
void st_entry_set_secondary_icon (StEntry *entry,
ClutterActor *icon);
G_END_DECLS G_END_DECLS

View File

@ -249,11 +249,6 @@ st_icon_paint (ClutterActor *actor)
clutter_actor_get_allocation_box (priv->icon_texture, &allocation); clutter_actor_get_allocation_box (priv->icon_texture, &allocation);
clutter_actor_box_get_size (&allocation, &width, &height); clutter_actor_box_get_size (&allocation, &width, &height);
allocation.x1 = (width - priv->shadow_width) / 2;
allocation.y1 = (height - priv->shadow_height) / 2;
allocation.x2 = allocation.x1 + priv->shadow_width;
allocation.y2 = allocation.y1 + priv->shadow_height;
_st_paint_shadow_with_opacity (priv->shadow_spec, _st_paint_shadow_with_opacity (priv->shadow_spec,
priv->shadow_material, priv->shadow_material,
&allocation, &allocation,
@ -410,8 +405,8 @@ st_icon_finish_update (StIcon *icon)
st_icon_update_shadow_material (icon); st_icon_update_shadow_material (icon);
/* "pixbuf-change" is actually a misnomer for "texture-changed" */ /* "pixbuf-change" is actually a misnomer for "texture-changed" */
g_signal_connect (priv->icon_texture, "pixbuf-change", g_signal_connect_object (priv->icon_texture, "pixbuf-change",
G_CALLBACK (on_pixbuf_changed), icon); G_CALLBACK (on_pixbuf_changed), icon, 0);
} }
} }
@ -469,7 +464,7 @@ st_icon_update (StIcon *icon)
else else
{ {
/* Will be shown when fully loaded */ /* Will be shown when fully loaded */
priv->opacity_handler_id = g_signal_connect (priv->pending_texture, "notify::opacity", G_CALLBACK (opacity_changed_cb), icon); priv->opacity_handler_id = g_signal_connect_object (priv->pending_texture, "notify::opacity", G_CALLBACK (opacity_changed_cb), icon, 0);
} }
} }
else if (priv->icon_texture) else if (priv->icon_texture)

View File

@ -50,6 +50,15 @@
#include "st-im-text.h" #include "st-im-text.h"
/* properties */
enum
{
PROP_0,
PROP_INPUT_PURPOSE,
PROP_INPUT_HINTS,
};
#define ST_IM_TEXT_GET_PRIVATE(obj) \ #define ST_IM_TEXT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_IM_TEXT, StIMTextPrivate)) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_IM_TEXT, StIMTextPrivate))
@ -74,27 +83,24 @@ st_im_text_dispose (GObject *object)
} }
static void static void
update_im_cursor_location (StIMText *self) st_im_text_cursor_event (ClutterText *self,
const ClutterGeometry *geometry)
{ {
StIMTextPrivate *priv = self->priv; StIMTextPrivate *priv = ST_IM_TEXT (self)->priv;
ClutterText *clutter_text = CLUTTER_TEXT (self);
gint position;
gfloat cursor_x, cursor_y, cursor_height;
gfloat actor_x, actor_y; gfloat actor_x, actor_y;
GdkRectangle area; GdkRectangle area;
position = clutter_text_get_cursor_position (clutter_text);
clutter_text_position_to_coords (clutter_text, position,
&cursor_x, &cursor_y, &cursor_height);
clutter_actor_get_transformed_position (CLUTTER_ACTOR (self), &actor_x, &actor_y); clutter_actor_get_transformed_position (CLUTTER_ACTOR (self), &actor_x, &actor_y);
area.x = (int)(0.5 + cursor_x + actor_x); area.x = (int)(0.5 + geometry->x + actor_x);
area.y = (int)(0.5 + cursor_y + actor_y); area.y = (int)(0.5 + geometry->y + actor_y);
area.width = 0; area.width = geometry->width;
area.height = (int)(0.5 + cursor_height); area.height = geometry->height;
gtk_im_context_set_cursor_location (priv->im_context, &area); gtk_im_context_set_cursor_location (priv->im_context, &area);
if (CLUTTER_TEXT_CLASS (st_im_text_parent_class)->cursor_event)
CLUTTER_TEXT_CLASS (st_im_text_parent_class)->cursor_event (self, geometry);
} }
static void static void
@ -190,20 +196,6 @@ reset_im_context (StIMText *self)
} }
} }
static void
st_im_text_paint (ClutterActor *actor)
{
StIMText *self = ST_IM_TEXT (actor);
ClutterText *clutter_text = CLUTTER_TEXT (actor);
/* This updates the cursor position as a side-effect */
if (CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->paint)
CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->paint (actor);
if (clutter_text_get_editable (clutter_text))
update_im_cursor_location (self);
}
static gboolean static gboolean
st_im_text_get_paint_volume (ClutterActor *self, st_im_text_get_paint_volume (ClutterActor *self,
ClutterPaintVolume *volume) ClutterPaintVolume *volume)
@ -421,17 +413,68 @@ st_im_text_key_focus_out (ClutterActor *actor)
CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->key_focus_out (actor); CLUTTER_ACTOR_CLASS (st_im_text_parent_class)->key_focus_out (actor);
} }
static void
st_im_text_set_property (GObject *gobject,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
StIMText *imtext = ST_IM_TEXT (gobject);
switch (prop_id)
{
case PROP_INPUT_PURPOSE:
st_im_text_set_input_purpose (imtext, g_value_get_enum (value));
break;
case PROP_INPUT_HINTS:
st_im_text_set_input_hints (imtext, g_value_get_flags (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
}
}
static void
st_im_text_get_property (GObject *gobject,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
StIMText *imtext = ST_IM_TEXT (gobject);
switch (prop_id)
{
case PROP_INPUT_PURPOSE:
g_value_set_enum (value, st_im_text_get_input_purpose (imtext));
break;
case PROP_INPUT_HINTS:
g_value_set_flags (value, st_im_text_get_input_hints (imtext));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
}
}
static void static void
st_im_text_class_init (StIMTextClass *klass) st_im_text_class_init (StIMTextClass *klass)
{ {
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass); ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
ClutterTextClass *text_class = CLUTTER_TEXT_CLASS (klass);
GParamSpec *pspec;
g_type_class_add_private (klass, sizeof (StIMTextPrivate)); g_type_class_add_private (klass, sizeof (StIMTextPrivate));
object_class->dispose = st_im_text_dispose; object_class->dispose = st_im_text_dispose;
object_class->set_property = st_im_text_set_property;
object_class->get_property = st_im_text_get_property;
actor_class->paint = st_im_text_paint;
actor_class->get_paint_volume = st_im_text_get_paint_volume; actor_class->get_paint_volume = st_im_text_get_paint_volume;
actor_class->realize = st_im_text_realize; actor_class->realize = st_im_text_realize;
actor_class->unrealize = st_im_text_unrealize; actor_class->unrealize = st_im_text_unrealize;
@ -440,6 +483,28 @@ st_im_text_class_init (StIMTextClass *klass)
actor_class->captured_event = st_im_text_captured_event; actor_class->captured_event = st_im_text_captured_event;
actor_class->key_focus_in = st_im_text_key_focus_in; actor_class->key_focus_in = st_im_text_key_focus_in;
actor_class->key_focus_out = st_im_text_key_focus_out; actor_class->key_focus_out = st_im_text_key_focus_out;
text_class->cursor_event = st_im_text_cursor_event;
pspec = g_param_spec_enum ("input-purpose",
"Purpose",
"Purpose of the text field",
GTK_TYPE_INPUT_PURPOSE,
GTK_INPUT_PURPOSE_FREE_FORM,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (object_class,
PROP_INPUT_PURPOSE,
pspec);
pspec = g_param_spec_flags ("input-hints",
"hints",
"Hints for the text field behaviour",
GTK_TYPE_INPUT_HINTS,
GTK_INPUT_HINT_NONE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (object_class,
PROP_INPUT_HINTS,
pspec);
} }
static void static void
@ -475,3 +540,96 @@ st_im_text_new (const gchar *text)
"text", text, "text", text,
NULL); NULL);
} }
/**
* st_im_text_set_input_purpose:
* @imtext: a #StIMText
* @purpose: the purpose
*
* Sets the #StIMText:input-purpose property which
* can be used by on-screen keyboards and other input
* methods to adjust their behaviour.
*/
void
st_im_text_set_input_purpose (StIMText *imtext,
GtkInputPurpose purpose)
{
g_return_if_fail (ST_IS_IM_TEXT (imtext));
if (st_im_text_get_input_purpose (imtext) != purpose)
{
g_object_set (G_OBJECT (imtext->priv->im_context),
"input-purpose", purpose,
NULL);
g_object_get (G_OBJECT (imtext->priv->im_context),
"input-purpose", &purpose,
NULL);
g_object_notify (G_OBJECT (imtext), "input-purpose");
}
}
/**
* st_im_text_get_input_purpose:
* @imtext: a #StIMText
*
* Gets the value of the #StIMText:input-purpose property.
*/
GtkInputPurpose
st_im_text_get_input_purpose (StIMText *imtext)
{
GtkInputPurpose purpose;
g_return_val_if_fail (ST_IS_IM_TEXT (imtext), GTK_INPUT_PURPOSE_FREE_FORM);
g_object_get (G_OBJECT (imtext->priv->im_context),
"input-purpose", &purpose,
NULL);
return purpose;
}
/**
* st_im_text_set_input_hints:
* @imtext: a #StIMText
* @hints: the hints
*
* Sets the #StIMText:input-hints property, which
* allows input methods to fine-tune their behaviour.
*/
void
st_im_text_set_input_hints (StIMText *imtext,
GtkInputHints hints)
{
g_return_if_fail (ST_IS_IM_TEXT (imtext));
if (st_im_text_get_input_hints (imtext) != hints)
{
g_object_set (G_OBJECT (imtext->priv->im_context),
"input-hints", hints,
NULL);
g_object_notify (G_OBJECT (imtext), "input-hints");
}
}
/**
* st_im_text_get_input_hints:
* @imtext: a #StIMText
*
* Gets the value of the #StIMText:input-hints property.
*/
GtkInputHints
st_im_text_get_input_hints (StIMText *imtext)
{
GtkInputHints hints;
g_return_val_if_fail (ST_IS_IM_TEXT (imtext), GTK_INPUT_HINT_NONE);
g_object_get (G_OBJECT (imtext->priv->im_context),
"input-hints", &hints,
NULL);
return hints;
}

View File

@ -60,9 +60,13 @@ struct _StIMTextClass
GType st_im_text_get_type (void) G_GNUC_CONST; GType st_im_text_get_type (void) G_GNUC_CONST;
ClutterActor *st_im_text_new (const gchar *text); ClutterActor *st_im_text_new (const gchar *text);
void st_im_text_set_autoshow_im (StIMText *self, void st_im_text_set_input_purpose (StIMText *imtext,
gboolean autoshow); GtkInputPurpose purpose);
GtkInputPurpose st_im_text_get_input_purpose (StIMText *imtext);
void st_im_text_set_input_hints (StIMText *imtext,
GtkInputHints hints);
GtkInputHints st_im_text_get_input_hints (StIMText *imtext);
G_END_DECLS G_END_DECLS

View File

@ -218,10 +218,6 @@ st_label_paint (ClutterActor *actor)
clutter_actor_get_allocation_box (priv->label, &allocation); clutter_actor_get_allocation_box (priv->label, &allocation);
clutter_actor_box_get_size (&allocation, &width, &height); clutter_actor_box_get_size (&allocation, &width, &height);
allocation.x1 = allocation.y1 = 0;
allocation.x2 = width;
allocation.y2 = height;
if (priv->text_shadow_material == COGL_INVALID_HANDLE || if (priv->text_shadow_material == COGL_INVALID_HANDLE ||
width != priv->shadow_width || width != priv->shadow_width ||
height != priv->shadow_height) height != priv->shadow_height)

View File

@ -511,6 +511,7 @@ _st_create_shadow_material_from_actor (StShadow *shadow_spec,
cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0); cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
cogl_push_framebuffer (offscreen); cogl_push_framebuffer (offscreen);
cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR); cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
cogl_translate (-box.x1, -box.y1, 0);
cogl_ortho (0, width, height, 0, 0, 1.0); cogl_ortho (0, width, height, 0, 0, 1.0);
clutter_actor_paint (actor); clutter_actor_paint (actor);
cogl_pop_framebuffer (); cogl_pop_framebuffer ();

View File

@ -36,13 +36,6 @@ uniform float hvalue;
*/ */
uniform mat2 fade_area; uniform mat2 fade_area;
/*
* Scale from [0.0, 1.0] to [1.0, 1.0]. Do this by
* changing it to scaling [1.0, 0.0] to [0.0, 0.0]
* and then transforming the end result.
*/
#define FADE(gradient, factor) (1.0 - (1.0 - gradient) * factor)
void main () void main ()
{ {
cogl_color_out = cogl_color_in * texture2D (tex, vec2 (cogl_tex_coord_in[0].xy)); cogl_color_out = cogl_color_in * texture2D (tex, vec2 (cogl_tex_coord_in[0].xy));
@ -66,20 +59,20 @@ void main ()
float vfade_scale = height / vfade_offset; float vfade_scale = height / vfade_offset;
if (fade_top) { if (fade_top) {
ratio *= FADE((y / vfade_offset), min(sqrt(vvalue) * vfade_scale, 1.0)); ratio *= y / vfade_offset;
} }
if (fade_bottom) { if (fade_bottom) {
ratio *= FADE((fade_area[1][1] - y)/(fade_area[1][1] - fade_bottom_start), min(sqrt(1.0 - vvalue) * vfade_scale, 1.0)); ratio *= (fade_area[1][1] - y) / (fade_area[1][1] - fade_bottom_start);
} }
float hfade_scale = width / hfade_offset; float hfade_scale = width / hfade_offset;
if (fade_left) { if (fade_left) {
ratio *= FADE(x / hfade_offset, min(sqrt(hvalue) * hfade_scale, 1.0)); ratio *= x / hfade_offset;
} }
if (fade_right) { if (fade_right) {
ratio *= FADE((fade_area[1][0] - x)/(fade_area[1][0] - fade_right_start), min(sqrt(1.0 - hvalue) * hfade_scale, 1.0)); ratio *= (fade_area[1][0] - x) / (fade_area[1][0] - fade_right_start);
} }
cogl_color_out *= ratio; cogl_color_out *= ratio;

View File

@ -292,11 +292,6 @@ st_shadow_helper_paint (StShadowHelper *helper,
clutter_actor_box_get_size (actor_box, &width, &height); clutter_actor_box_get_size (actor_box, &width, &height);
allocation.x1 = (width - helper->width) / 2;
allocation.y1 = (height - helper->height) / 2;
allocation.x2 = allocation.x1 + helper->width;
allocation.y2 = allocation.y1 + helper->height;
_st_paint_shadow_with_opacity (helper->shadow, _st_paint_shadow_with_opacity (helper->shadow,
helper->material, helper->material,
&allocation, &allocation,

View File

@ -879,6 +879,101 @@ st_theme_node_get_double (StThemeNode *node,
} }
} }
/**
* st_theme_node_lookup_url:
* @node: a #StThemeNode
* @property_name: The name of the string property
* @inherit: if %TRUE, if a value is not found for the property on the
* node, then it will be looked up on the parent node, and then on the
* parent's parent, and so forth. Note that if the property has a
* value of 'inherit' it will be inherited even if %FALSE is passed
* in for @inherit; this only affects the default behavior for inheritance.
* @value: (out): location to store the newly allocated value that was
* determined. If the property is not found, the value in this location
* will not be changed.
*
* Looks up a property containing a single URL value.
*
* See also st_theme_node_get_url(), which provides a simpler API.
*
* Return value: %TRUE if the property was found in the properties for this
* theme node (or in the properties of parent nodes when inheriting.)
*/
gboolean
st_theme_node_lookup_url (StThemeNode *node,
const char *property_name,
gboolean inherit,
char **value)
{
gboolean result = FALSE;
int i;
ensure_properties (node);
for (i = node->n_properties - 1; i >= 0; i--)
{
CRDeclaration *decl = node->properties[i];
if (strcmp (decl->property->stryng->str, property_name) == 0)
{
CRTerm *term = decl->value;
CRStyleSheet *base_stylesheet;
GFile *file;
if (term->type != TERM_URI && term->type != TERM_STRING)
continue;
if (decl->parent_statement != NULL)
base_stylesheet = decl->parent_statement->parent_sheet;
else
base_stylesheet = NULL;
file = _st_theme_resolve_url (node->theme,
base_stylesheet,
decl->value->content.str->stryng->str);
*value = g_file_get_path (file);
g_object_unref (file);
result = TRUE;
break;
}
}
if (!result && inherit && node->parent_node)
result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, value);
return result;
}
/*
* st_theme_node_get_url:
* @node: a #StThemeNode
* @property_name: The name of the string property
*
* Looks up a property containing a single URL value.
*
* See also st_theme_node_lookup_url(), which provides more options,
* and lets you handle the case where the theme does not specify the
* indicated value.
*
* Return value: the newly allocated value if found.
* If @property_name is not found, a warning will be logged and %NULL
* will be returned.
*/
char *
st_theme_node_get_url (StThemeNode *node,
const char *property_name)
{
char *value;
if (st_theme_node_lookup_url (node, property_name, FALSE, &value))
return value;
else
{
g_warning ("Did not find string property '%s'", property_name);
return NULL;
}
}
static const PangoFontDescription * static const PangoFontDescription *
get_parent_font (StThemeNode *node) get_parent_font (StThemeNode *node)
{ {
@ -1554,6 +1649,7 @@ void
_st_theme_node_ensure_geometry (StThemeNode *node) _st_theme_node_ensure_geometry (StThemeNode *node)
{ {
int i, j; int i, j;
int width, height;
if (node->geometry_computed) if (node->geometry_computed)
return; return;
@ -1571,6 +1667,8 @@ _st_theme_node_ensure_geometry (StThemeNode *node)
node->outline_width = 0; node->outline_width = 0;
node->outline_color = TRANSPARENT_COLOR; node->outline_color = TRANSPARENT_COLOR;
width = -1;
height = -1;
node->width = -1; node->width = -1;
node->height = -1; node->height = -1;
node->min_width = -1; node->min_width = -1;
@ -1590,8 +1688,12 @@ _st_theme_node_ensure_geometry (StThemeNode *node)
else if (g_str_has_prefix (property_name, "padding")) else if (g_str_has_prefix (property_name, "padding"))
do_padding_property (node, decl); do_padding_property (node, decl);
else if (strcmp (property_name, "width") == 0) else if (strcmp (property_name, "width") == 0)
do_size_property (node, decl, &node->width); do_size_property (node, decl, &width);
else if (strcmp (property_name, "height") == 0) else if (strcmp (property_name, "height") == 0)
do_size_property (node, decl, &height);
else if (strcmp (property_name, "-st-natural-width") == 0)
do_size_property (node, decl, &node->width);
else if (strcmp (property_name, "-st-natural-height") == 0)
do_size_property (node, decl, &node->height); do_size_property (node, decl, &node->height);
else if (strcmp (property_name, "min-width") == 0) else if (strcmp (property_name, "min-width") == 0)
do_size_property (node, decl, &node->min_width); do_size_property (node, decl, &node->min_width);
@ -1603,29 +1705,43 @@ _st_theme_node_ensure_geometry (StThemeNode *node)
do_size_property (node, decl, &node->max_height); do_size_property (node, decl, &node->max_height);
} }
if (node->width != -1) /*
* Setting width sets max-width, min-width and -st-natural-width,
* unless one of them is set individually.
* Setting min-width sets natural width too, so that the minimum
* width reported by get_preferred_width() is always not greater
* than the natural width.
* The natural width in node->width is actually a lower bound, the
* actor is allowed to request something greater than that, but
* not greater than max-width.
* We don't need to clamp node->width to be less than max_width,
* that's done by adjust_preferred_width.
*/
if (width != -1)
{ {
if (node->width == -1)
node->width = width;
if (node->min_width == -1) if (node->min_width == -1)
node->min_width = node->width; node->min_width = width;
else if (node->width < node->min_width)
node->width = node->min_width;
if (node->max_width == -1) if (node->max_width == -1)
node->max_width = node->width; node->max_width = width;
else if (node->width > node->max_width)
node->width = node->max_width;
} }
if (node->height != -1) if (node->width < node->min_width)
node->width = node->min_width;
if (height != -1)
{ {
if (node->height == -1)
node->height = height;
if (node->min_height == -1) if (node->min_height == -1)
node->min_height = node->height; node->min_height = height;
else if (node->height < node->min_height)
node->height = node->min_height;
if (node->max_height == -1) if (node->max_height == -1)
node->max_height = node->height; node->max_height = height;
else if (node->height > node->max_height)
node->height = node->max_height;
} }
if (node->height < node->min_height)
node->height = node->min_height;
} }
int int
@ -3425,7 +3541,7 @@ st_theme_node_adjust_preferred_width (StThemeNode *node,
if (natural_width_p) if (natural_width_p)
{ {
if (node->width != -1) if (node->width != -1)
*natural_width_p = node->width; *natural_width_p = MAX (*natural_width_p, node->width);
if (node->max_width != -1) if (node->max_width != -1)
*natural_width_p = MIN (*natural_width_p, node->max_width); *natural_width_p = MIN (*natural_width_p, node->max_width);
*natural_width_p += width_inc; *natural_width_p += width_inc;
@ -3491,7 +3607,7 @@ st_theme_node_adjust_preferred_height (StThemeNode *node,
if (natural_height_p) if (natural_height_p)
{ {
if (node->height != -1) if (node->height != -1)
*natural_height_p = node->height; *natural_height_p = MAX (*natural_height_p, node->height);
if (node->max_height != -1) if (node->max_height != -1)
*natural_height_p = MIN (*natural_height_p, node->max_height); *natural_height_p = MIN (*natural_height_p, node->max_height);
*natural_height_p += height_inc; *natural_height_p += height_inc;

View File

@ -142,6 +142,10 @@ gboolean st_theme_node_lookup_shadow (StThemeNode *node,
const char *property_name, const char *property_name,
gboolean inherit, gboolean inherit,
StShadow **shadow); StShadow **shadow);
gboolean st_theme_node_lookup_url (StThemeNode *node,
const char *property_name,
gboolean inherit,
char **value);
/* Easier-to-use variants of the above, for application-level use */ /* Easier-to-use variants of the above, for application-level use */
void st_theme_node_get_color (StThemeNode *node, void st_theme_node_get_color (StThemeNode *node,
@ -153,6 +157,8 @@ gdouble st_theme_node_get_length (StThemeNode *node,
const char *property_name); const char *property_name);
StShadow *st_theme_node_get_shadow (StThemeNode *node, StShadow *st_theme_node_get_shadow (StThemeNode *node,
const char *property_name); const char *property_name);
char *st_theme_node_get_url (StThemeNode *node,
const char *property_name);
/* Specific getters for particular properties: cached /* Specific getters for particular properties: cached
*/ */

View File

@ -48,7 +48,7 @@ on_stage_realized (ClutterActor *stage,
{ {
recorder = shell_recorder_new (CLUTTER_STAGE (stage)); recorder = shell_recorder_new (CLUTTER_STAGE (stage));
shell_recorder_set_file_template (recorder, "test-recorder.webm"); shell_recorder_set_file_template (recorder, "test-recorder.webm");
shell_recorder_record (recorder); shell_recorder_record (recorder, NULL);
} }
int main (int argc, char **argv) int main (int argc, char **argv)