Compare commits

...

139 Commits
3.8.0 ... 3.9.1

Author SHA1 Message Date
18107d567d Bump version to 3.9.1
Update NEWS.
2013-04-30 23:58:35 +02:00
608818fa9f Only recognize common url schemes in notification messages
Before the fix, the message tray highlighted all urls containing "://", even
invalid ones. This change fixes this by have the message tray highlight only
the urls with http, https, ftp schemes.

Credit goes to: Phuong Vu, Liye Fu, Monica Chelliah, Owen Taylor

https://bugzilla.gnome.org/show_bug.cgi?id=661225
2013-04-29 11:22:44 -04:00
9ae2440ec1 Remove LayoutManager::fullscreen-changed
Since we now have global.screen::in-fullscreen-changed, remove the
duplicate signal. To prevent ordering problems in connecting to
this signal, make inFullscreen a property-function of a new Monitor
object rather than a data property we tack on to a Rectangle object.

https://bugzilla.gnome.org/show_bug.cgi?id=649748
2013-04-29 11:17:29 -04:00
ef9c50e63a 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:19:59 +02:00
5d50b08351 Updated Lithuanian translation 2013-04-28 13:37:01 +03:00
123fc19c4e configure: Bump NetworkManager requirement
Since commit 871c28aeeb, NMGtk is no longer optional, so
bump the requirement accordingly.

https://bugzilla.gnome.org/show_bug.cgi?id=699075
2013-04-27 22:51:15 +02:00
a9058e471c WorkspacesView: set the actual geometry when creating workspaces
If we created a workspace after showing the view, we would never
set the geometry on it, which would cause an exception in the
window layout code and leave the DND state tracking in an undefined
state.

https://bugzilla.gnome.org/show_bug.cgi?id=699029
2013-04-27 15:09:19 +02:00
bd1f48d9fe Updated Czech translation 2013-04-27 01:55:09 +02:00
66ab4d217d Updated Czech translation 2013-04-26 19:19:39 +02:00
7a8b392607 network: Remove some genericism in the wireless code
This was presumably originally used in multiple places, but it's
not anymore, so un-generify the code here.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:24:03 -04:00
bfdf069d2d network: Rename "apObj" to "network"
We put these "access point objects" in "this._networks" and
"this._activeNetwork", so let's rename it. This also makes
the fact that each "access point object" can contain multiple
access points a tiny bit less confusing.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:18:39 -04:00
b4b00a48d9 network: Remove explicit autoconnection code
NM is now a lot smarter about dealing with automatic connections, so just
create an empty connection and pass it to it. The only places where NM
requires connection settings is where we require explicit setup: Bluetooth
DUN, WPA-Enterprise and WWAN/VPN. These cases are already handled by
gnome-control-center, where complex configuration is handled, so remove
the automatic connection management for now and just let NM handle it.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:06 -04:00
e5f226612e network: Use activeApChanged to get the initial active network
https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:06 -04:00
20619ad3c1 network: Fix some splice mishaps
Calling splice() without a second argument removes all of the elements
after the provided index, not just one.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:06 -04:00
37dce7d4c3 network: Deduplicate some similar code
https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:06 -04:00
a67b82e730 network: Remove some dead code
We cannot possibly reach createActiveConnectionItem unless we have
an active network, so the plain unreative menu item cannot ever
be created.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:05 -04:00
e0b8ad7911 network: Remove UNKNOWN security type
It's unused.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:05 -04:00
dbb39d366e network: Properly disconnect from the state-changed signal
The destroy signal never gets emitted, so we need to properly
disconnect manually when we destroy the wrapper.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:05 -04:00
e1de36398d network: Remove some unused helpers
https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:05 -04:00
871c28aeeb network: Require NMGtk
Enough time has passed that we can safely depend on NMGtk in the new
network implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=698918
2013-04-26 12:16:05 -04:00
c84dc6254d 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 17:50:06 +02:00
60cb1ad7c5 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 17:32:54 +02:00
4a5ff5dcfb 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 17:32:53 +02:00
5c40307745 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 17:32:53 +02:00
39426f03e6 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 17:32:52 +02:00
92e5d2b8f5 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:23:37 -04:00
09aa59f98b layout: Correct hot corner barriers in RTL layouts
https://bugzilla.gnome.org/show_bug.cgi?id=698884
2013-04-26 11:23:37 -04:00
c9c1c89a27 dateMenu: append .desktop to evolution strings
Since that is what the actual app_id's are.
2013-04-26 16:54:45 +10:00
96b76709e9 session: Remove the clock from initial setup mode
If you're in the initial setup mode you're not likely to have the
correct time displayed.
2013-04-25 11:52:02 +01:00
ca3107e21b Updated Greek translation 2013-04-25 08:12:32 +03:00
2e4f223207 Updated Malayalam Translation 2013-04-25 08:26:22 +05:30
17df668186 remoteSearch: support serialized GIcons
Since [1], GIO supports generic serialization and deserialization of a
GIcon into a GVariant. This is also implemented by GdkPixbuf and could be
used instead of our homegrown code for it.

This commit adds support to another 'icon' key in the metas dictionary
returned by applications for it. The previous 'gicon' and 'icon-data'
keys are still parsed and supported as before, but are now deprecated.

[1]
https://git.gnome.org/browse/glib/commit/?id=c16f914b40c749b938490a4e10a3c54ec1855c42

https://bugzilla.gnome.org/show_bug.cgi?id=698761
2013-04-24 15:54:31 -04:00
aef70152de Keyboard: clear currentSource after destruction
StLabel doesn't like that we set its properties after destructions,
and this would happen in currentInputSourceChanged() at the end,
when setting the ornament.
2013-04-24 21:47:03 +02:00
e0252f35be workspace: Sort windows when we calculate slots
This ensures that windows don't change positions when we lay
them out again when expanding the workspace switcher.

https://bugzilla.gnome.org/show_bug.cgi?id=698776
2013-04-24 14:10:30 -04:00
0f47534766 Forgot ia.po file 2013-04-24 15:55:12 +02:00
54feaa67e8 [l10n] Add Interlingua translation 2013-04-24 15:53:43 +02:00
64ecfa49eb layout: Ensure that the hotCorners array is always indexable by monitor number
messageTray relies on indexing the hot corners array by monitor number,
so we should make this a guarantee.

https://bugzilla.gnome.org/show_bug.cgi?id=698513
2013-04-23 19:14:01 -04:00
fdae613b14 messageTray: Take modal grabs for the context menu and notification boxpointer
As the context menu and notification boxpointer can only appear if we already
take a modal grab, grabFocus will have problematic results if the focus does
somehow change.

https://bugzilla.gnome.org/show_bug.cgi?id=698483
2013-04-23 16:33:13 -04:00
c57c08b2c6 popupMenu: Fix a bad rebase
The wrong patch got pushed accidentally here
2013-04-23 16:33:13 -04:00
d2103995cb popupMenu: Remove some now-unused code
We don't have any sections with separators, so don't bother
tracking them.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
196fb0f16e popupMenu: Add and use GtkMenuTracker to build the remote menu
This simplifies the code required to build remote menus and
put all the items in the right place, and makes us share our
implementation with GTK+.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
c0afe7260a popupMenu: Create and insert menu items that don't have actions yet
Instead of recreating the entire model, which can be expensive... but
keep them insensitive for now. This also matches what GTK+ does.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
099c8703ae popupMenu: Always use a PopupMenuItem
By this point, we'll know we'll always have a PopupMenuItem.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
b03e480dbf popupMenu: Use a checkmark for boolean items
This matches GTK+'s styling, and it makes most boolean switches
look more natural, as a lot of booleans are not meant for hardware
switches.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
8430353389 popupMenu: Add a check ornament
This will be used to replace switches in the remote menu

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
a123ec94ef popupMenu: Use a unicode character for the ornament
This makes it easy to replace the dot with another label in the future.
Change the allocation logic, as text layout is more complicated than
simple icon logic.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:50:36 -04:00
4a2f54f6ff popupMenu: Define the dot next to the menu as an "ornament"
We want to remove switches in remote menus, so make way for
a checkmark ornament for the popup menu item.

https://bugzilla.gnome.org/show_bug.cgi?id=698427
2013-04-23 15:35:55 -04:00
b5c85eaeca messageTray: Fix a regression from 1b13509
It seems this rename somehow got lost in a rebase.
2013-04-22 19:22:33 -04:00
8b3b91d78d workspace: Invalidate the current layout when windows are added or removed
If windows are removed or added, we shouldn't keep the old layout, as it's
not valid anymore. If windows are removed, this is especially bad, as the
rows contain references to the removed window objects, causing crashes.

https://bugzilla.gnome.org/show_bug.cgi?id=698622
2013-04-22 18:33:34 -04:00
e1de3973fe workspace: Recalculate window positions when we have no layout
If for any reason the current layout is invalidated, queue a
reposition.

https://bugzilla.gnome.org/show_bug.cgi?id=698622
2013-04-22 18:33:34 -04:00
c1993a6ffc overview: Fix XDnD
I accidentally removed this import which some XDnD code depends upon.
2013-04-22 18:24:02 -04:00
ab26fc438a workspace: only scale a layout row when it doesn't fit
Instead of applying an additional scale factor to all the rows in the
layout, only do it for those rows that don't fit.
This avoids the visual distraction of resizing a row when there's no
need to.
2013-04-22 18:06:09 -04:00
c37259b01d workspace: Lay out windows based on the real allocation
Instead of doing an entire recalculation of window positions when
sliding the thumbnails box, simply recalculate the position and scale
with basic aspect ratio math. This also ensures that windows won't
miraculously swap positions, even if we reposition windows while the
thumbnails box is expanded.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:01:00 -04:00
bde8cc3285 workspace: Split out window repositioning logic and rename
Split out the part that moves the window clones around from
the part that calculates the window clone positions, and rename
both methods so that the overall meaning is more clear.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:01:00 -04:00
59ba5504d0 workspace: Calculate the window slots when we reposition
Repositioning will eventually be separated from recalculation
to accomodate two different geometries, so we'll need to do
the padding and area manipulation in two different areas.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:01:00 -04:00
65eb5a3d05 workspace: Separate out spacing/padding code
This will be used when we introduce the second geometry.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:01:00 -04:00
b925322e9e workspace: Make room for a second geometry to keep track of
As we want to eventually track two geometries, we need to rename
our very plain "_x, _y, _width, _height". While we could just prefix
them, I think that stuffing them in an object makes more sense.

At the same time, make the variable and method name more descriptive
by adding such a prefix, as well as a bit of documentation.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:01:00 -04:00
f0c2ad00f8 workspacesView: Calculate the workspaces geometry ourselves
To ensure that we don't recalculate window layouts when zooming
in or out, we need to always pass the full geometry. This will
break window repositioning when we zoom back in; for the purposes
of commit clarity, this breaks this feature for now. It will be
added back soon.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:00:59 -04:00
fc53a25a4c overviewControls: Add an accessor for the visible-width property
To add a geometry that's independent of the slide factor of the workspace,
we need to get this from outside the sliding control.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-22 14:00:59 -04:00
58872d162b AppDisplay/FrequentView: filter out hidden applications
Filter out all applications which have the NoDisplay, Hidden or
Not/OnlyShowIn bits, as those are not meant to be launched directly.
This also allows the user to filter apps from the frequent view
using alacarte.

https://bugzilla.gnome.org/show_bug.cgi?id=696949
2013-04-22 19:11:17 +02:00
30f1b8f02a Updated Spanish translation 2013-04-22 17:52:13 +02:00
ee4f199a9f 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-04-22 10:14:48 +10:00
e3957f3bac workspacesView: Make setGeometry take a rectangle
This cleanup will be more important in the future,
but for now, we can simply pass a monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
2506673514 workspacesView: Minor cleanup
https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
7cb12015fd workspacesView: Fix indentation
https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
caaac9b9ec workspace: Do window slot computing in three steps
This ensures that we have the correct Y value when sorting
windows.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
1dac4d00c4 workspace: Abort relayouting much earlier
This means that the code for computeAllWindowSlots is a bit
cleaner, which will help in the future.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
b41902f4df workspace: Only create one strategy
Now that we don't have any other strategies but the unaligned
one, we only need to construct it once.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
ada70dd683 workspace: Remove more dead code
By the time zoomToOverview is called, an animation will
always be in progress.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
7e5d8a8d54 workspace: Make positionWindows private
It's not used outside, and it's going to be broken up soon.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
e981cae27c workspace: Don't save the current layout
This was saved so that doing something which called relayout
but only changed the area rectangle would simply be needed to
recompute window scaling parameters. With the new overview
relayout, the flow control changed, it turns out that the
current layout is always cleared. Remove this for now, and we'll
put in a different strategy for this.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
d7c377c229 workspace: Use Workspace.WindowPositionFlags.NONE in another case
https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:26 -04:00
8772edcd33 overview: Move the group construction to the controls manager
Instead of creating a bunch of random actors and then passing
them off to the controls manager, let the controls manager
construct them. This leaves the controls manager in charge
of the ordeal.

https://bugzilla.gnome.org/show_bug.cgi?id=694469
2013-04-20 08:33:25 -04:00
254740cf68 [l10n] Updated Turkish translation 2013-04-20 00:44:55 +03:00
c3775c0f56 st-theme-node: Disable transitions if animations-enabled is off
https://bugzilla.gnome.org/show_bug.cgi?id=698391
2013-04-19 14:34:06 -04:00
5ecf40e967 panel: show spinner animation for busy applications
When the active application signals its busy state, we now will show a
spinner on the panel, next to the application name.

https://bugzilla.gnome.org/show_bug.cgi?id=697207
2013-04-19 13:54:56 -04:00
45026df4bd shell-app: track the busy state of GApplications
Watch for property changes on the org.gtk.Application interface, and
transition the state to BUSY when the corresponding property is flipped
on.

https://bugzilla.gnome.org/show_bug.cgi?id=697207
2013-04-19 13:54:56 -04:00
b8830f4a09 shell-app: don't recreate a session proxy every time
Cache the connection inside the ShellAppRunningState structure instead.

https://bugzilla.gnome.org/show_bug.cgi?id=697207
2013-04-19 13:54:56 -04:00
811ee1d989 Revert "messageTray: Don't show the context-menu when the tray isn't open"
This reverts commit 1bce210c51.
2013-04-19 13:38:41 -04:00
8c32102e99 messageTray: Move the notification actor out of the tray
Putting the notification actor in the tray actor has caused a lot
of various bugs and glitches over the years related to syncing the
two, fizzling out events, and so on. It's a much simpler model if
we consider the notification actor and tray to be separate widgets.

As a side effect, this makes the context menu not pop up when we
right-click on notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=695800
2013-04-19 13:38:41 -04:00
1b135095c7 messageTray: Move hover tracking to the notification widget
This does nothing while the tray is active, so it doesn't make sense
to track it on the tray. This also makes the code a lot easier to read,
with notification behavior being labeled "notification" rather than
"tray".

https://bugzilla.gnome.org/show_bug.cgi?id=695800
2013-04-19 13:38:41 -04:00
becf4396c9 Disable naked Super keybinding if sticky
With sticky keys, users should be able to press and release a
modifier and then press a key to activate a modifier-key combination.
Activating the overview on the Super key release keeps these
users from using keyboard shortcuts involving the Super modifier.

The solution implemented here is to simply disable the Super-release
binding if sticky keys are enabled. It is still possible to go
to the overview by using Super-S or Alt-F1.
https://bugzilla.gnome.org/show_bug.cgi?id=685974
2013-04-19 10:25:28 -04:00
929e066506 Add a toggle-overview keybinding
This is a new, regular keybinding for going to the overview.
The default binding is Super-S, which goes well with Super-A
for going to the application grid.
This is separate from the existing panel-main-menu keybinding,
so that we can keep Alt-F1 opening the main menu in classic mode.

https://bugzilla.gnome.org/show_bug.cgi?id=698251
2013-04-18 20:34:41 -04:00
355ad9ac2c Updated Galician translations 2013-04-18 03:23:16 +02: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
73 changed files with 10044 additions and 5657 deletions

59
NEWS
View File

@ -1,3 +1,62 @@
3.9.1
=====
* Add additional toggle-overview keybinding [Matthias; #698251]
* Disable <super> shortcut when sticky keys are enabled [Matthias; #685974]
* Disable tray context menu while a notification displays [Jasper; #695800]
* Watch GApplication busy state [Cosimo; #697207]
* Disable style transitions if animations are disabled [Jasper; #698391]
* Filter out hidden applications from "Frequent" view [Giovanni; #696949]
* Fix window previews swapping place randomly [Jasper; #694469, #698776]
* Add support for serialized GIcons in remote search providers [Cosimo; #698761]
* 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]
* Only recognize common URL schemes in notification messages [Monica; #661225]
* Misc fixes and cleanups [Tim, Jasper, Florian, Giovanni, Owen; #698531,
#698622, #698427, #698483, #698513, #697203, #698959, #698918, #699029,
#699075, #696720, #649748]
Contributors:
Giovanni Campagna, Cosimo Cecchi, Monica Chelliah, Matthias Clasen, Tim Lunn,
Florian Müllner, Jasper St. Pierre, Michael Wood, Owen W. Taylor
Translations:
Fran Diéguez [gl], Muhammet Kara [tr], Daniel Mustieles [es],
Gil Forcada [ia], Anish A [ml], Dimitris Spingos [el], Marek Černocký [cs],
Žygimantas Beručka [lt]
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 3.8.0
===== =====
* Remove blur and desaturation from lock screen [Jasper; #696322] * Remove blur and desaturation from lock screen [Jasper; #696322]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.8.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.9.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@ -63,9 +63,9 @@ 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.8.0 MUTTER_MIN_VERSION=3.9.1
GTK_MIN_VERSION=3.7.9 GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.35.0 GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.5.3 LIBEDATASERVER_MIN_VERSION=3.5.3
TELEPATHY_GLIB_MIN_VERSION=0.17.5 TELEPATHY_GLIB_MIN_VERSION=0.17.5
@ -74,7 +74,7 @@ STARTUP_NOTIFICATION_MIN_VERSION=0.11
GCR_MIN_VERSION=3.3.90 GCR_MIN_VERSION=3.3.90
GNOME_DESKTOP_REQUIRED_VERSION=3.7.90 GNOME_DESKTOP_REQUIRED_VERSION=3.7.90
GNOME_MENUS_REQUIRED_VERSION=3.5.3 GNOME_MENUS_REQUIRED_VERSION=3.5.3
NETWORKMANAGER_MIN_VERSION=0.9.6 NETWORKMANAGER_MIN_VERSION=0.9.8
PULSE_MIN_VERS=2.0 PULSE_MIN_VERS=2.0
# Collect more than 20 libraries for a prize! # Collect more than 20 libraries for a prize!

View File

@ -11,6 +11,9 @@
<KeyListEntry name="focus-active-notification" <KeyListEntry name="focus-active-notification"
_description="Focus the active notification"/> _description="Focus the active notification"/>
<KeyListEntry name="toggle-overview"
_description="Show the overview"/>
<KeyListEntry name="toggle-application-view" <KeyListEntry name="toggle-application-view"
_description="Show all applications"/> _description="Show all applications"/>

View File

@ -46,7 +46,7 @@
<!-- <!--
GetResultMetas: GetResultMetas:
@identifiers: An array of result identifiers as returned by GetInitialResultSet() or GetSubsearchResultSet() @identifiers: An array of result identifiers as returned by GetInitialResultSet() or GetSubsearchResultSet()
@metas: A dictionary describing the given search result, containing a human-readable 'name' (string), along with the result identifier this meta is for, 'id' (string). Optionally, either 'gicon' (a serialized GIcon) or 'icon-data' (raw image data as (iiibiiay) - width, height, rowstride, has-alpha, bits per sample, channels, data) can be specified if the result can be better served with a thumbnail of the content (such as with images). A 'description' field (string) may also be specified if more context would help the user find the desired result. @metas: A dictionary describing the given search result, containing a human-readable 'name' (string), along with the result identifier this meta is for, 'id' (string). Optionally, 'icon' (a serialized GIcon as obtained by g_icon_serialize) can be specified if the result can be better served with a thumbnail of the content (such as with images). 'gicon' (a serialized GIcon as obtained by g_icon_to_string) or 'icon-data' (raw image data as (iiibiiay) - width, height, rowstride, has-alpha, bits per sample, channels, data) are deprecated values that can also be used for that purpose. A 'description' field (string) may also be specified if more context would help the user find the desired result.
Return an array of meta data used to display each given result Return an array of meta data used to display each given result
--> -->

View File

@ -117,6 +117,13 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
Overview. Overview.
</_description> </_description>
</key> </key>
<key name="toggle-overview" type="as">
<default>["&lt;Super&gt;s"]</default>
<_summary>Keybinding to open the overview</_summary>
<_description>
Keybinding to open the Activities Overview.
</_description>
</key>
<key name="toggle-message-tray" type="as"> <key name="toggle-message-tray" type="as">
<default>["&lt;Super&gt;m"]</default> <default>["&lt;Super&gt;m"]</default>
<_summary>Keybinding to toggle the visibility of the message tray</_summary> <_summary>Keybinding to toggle the visibility of the message tray</_summary>

View File

@ -125,6 +125,10 @@ StScrollBar StButton#vhandle:active {
/* PopupMenu */ /* PopupMenu */
.popup-menu-ornament {
text-align: center;
}
.popup-menu-boxpointer, .popup-menu-boxpointer,
.candidate-popup-boxpointer { .candidate-popup-boxpointer {
-arrow-border-radius: 8px; -arrow-border-radius: 8px;
@ -512,6 +516,7 @@ StScrollBar StButton#vhandle:active {
} }
#appMenu { #appMenu {
spinner-image: url("process-working.svg");
spacing: 4px; spacing: 4px;
} }
@ -1453,11 +1458,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 {
@ -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

@ -774,7 +774,8 @@ 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); 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.opacity = 0;
this._workSpinner.actor.show(); this._workSpinner.actor.show();

View File

@ -76,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) {

View File

@ -18,7 +18,7 @@ const _urlRegexp = new RegExp(
'(^|' + _leadingJunk + ')' + '(^|' + _leadingJunk + ')' +
'(' + '(' +
'(?:' + '(?:' +
'[a-z][\\w-]+://' + // scheme:// '(?:http|https|ftp)://' + // scheme://
'|' + '|' +
'www\\d{0,3}[.]' + // www. 'www\\d{0,3}[.]' + // www.
'|' + '|' +

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

@ -316,6 +316,8 @@ const FrequentView = new Lang.Class({
loadApps: function() { loadApps: function() {
let mostUsed = this._usage.get_most_used (""); let mostUsed = this._usage.get_most_used ("");
for (let i = 0; i < mostUsed.length; i++) { for (let i = 0; i < mostUsed.length; i++) {
if (!mostUsed[i].get_app_info().should_show())
continue;
let appIcon = new AppIcon(mostUsed[i]); let appIcon = new AppIcon(mostUsed[i]);
this._grid.addItem(appIcon.actor, -1); this._grid.addItem(appIcon.actor, -1);
} }

View File

@ -126,6 +126,11 @@ 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);
}, },
@ -241,6 +246,8 @@ const BackgroundCache = new Lang.Class({
} else { } else {
this._loadImageContent({ filename: params.filename, this._loadImageContent({ filename: params.filename,
style: params.style, style: params.style,
effects: params.effects,
monitorIndex: params.monitorIndex,
cancellable: params.cancellable, cancellable: params.cancellable,
onFinished: params.onFinished }); onFinished: params.onFinished });
@ -424,7 +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(content); this._cache.removeImageContent(this._images[index].content);
this._images[index].content = content; this._images[index].content = content;
this._watchCacheFile(filename); this._watchCacheFile(filename);
}, },
@ -740,11 +747,15 @@ const BackgroundManager = new Lang.Class({
time: FADE_ANIMATION_TIME, time: FADE_ANIMATION_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() { onComplete: Lang.bind(this, function() {
if (this.background == background) { if (this._newBackground == newBackground) {
this.background = newBackground; this.background = newBackground;
this._newBackground = null; this._newBackground = null;
background.actor.destroy(); } else {
newBackground.actor.destroy();
} }
background.actor.destroy();
this.emit('changed'); this.emit('changed');
}) })
}); });

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

@ -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

@ -221,8 +221,8 @@ const DateMenuButton = new Lang.Class({
this.menu.close(); this.menu.close();
let app = Gio.AppInfo.get_default_for_type('text/calendar', false); let app = Gio.AppInfo.get_default_for_type('text/calendar', false);
if (app.get_id() == 'evolution') if (app.get_id() == 'evolution.desktop')
app = Gio.DesktopAppInfo.new('evolution-calendar'); app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
app.launch([], global.create_app_launch_context()); app.launch([], global.create_app_launch_context());
}, },

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

@ -118,6 +118,22 @@ const MonitorConstraint = new Lang.Class({
} }
}); });
const Monitor = new Lang.Class({
Name: 'Monitor',
_init: function(index, geometry) {
this.index = index;
this.x = geometry.x;
this.y = geometry.y;
this.width = geometry.width;
this.height = geometry.height;
},
get inFullscreen() {
return global.screen.get_monitor_in_fullscreen(this.index);
}
})
const defaultParams = { const defaultParams = {
trackFullscreen: false, trackFullscreen: false,
affectsStruts: false, affectsStruts: false,
@ -261,7 +277,7 @@ const LayoutManager = new Lang.Class({
this.monitors = []; this.monitors = [];
let nMonitors = screen.get_n_monitors(); let nMonitors = screen.get_n_monitors();
for (let i = 0; i < nMonitors; i++) for (let i = 0; i < nMonitors; i++)
this.monitors.push(screen.get_monitor_geometry(i)); this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i)));
if (nMonitors == 1) { if (nMonitors == 1) {
this.primaryIndex = this.bottomIndex = 0; this.primaryIndex = this.bottomIndex = 0;
@ -283,8 +299,10 @@ const LayoutManager = new Lang.Class({
_updateHotCorners: function() { _updateHotCorners: function() {
// destroy old hot corners // destroy old hot corners
for (let i = 0; i < this.hotCorners.length; i++) this.hotCorners.forEach(function(corner) {
this.hotCorners[i].destroy(); if (corner)
corner.destroy();
});
this.hotCorners = []; this.hotCorners = [];
let size = this.panelBox.height; let size = this.panelBox.height;
@ -295,9 +313,9 @@ const LayoutManager = new Lang.Class({
let cornerX = this._rtl ? monitor.x + monitor.width : monitor.x; let cornerX = this._rtl ? monitor.x + monitor.width : monitor.x;
let cornerY = monitor.y; let cornerY = monitor.y;
if (i != this.primaryIndex) { let haveTopLeftCorner = true;
let haveTopLeftCorner = true;
if (i != this.primaryIndex) {
// Check if we have a top left (right for RTL) corner. // Check if we have a top left (right for RTL) corner.
// I.e. if there is no monitor directly above or to the left(right) // I.e. if there is no monitor directly above or to the left(right)
let besideX = this._rtl ? monitor.x + 1 : cornerX - 1; let besideX = this._rtl ? monitor.x + 1 : cornerX - 1;
@ -324,14 +342,15 @@ const LayoutManager = new Lang.Class({
break; break;
} }
} }
if (!haveTopLeftCorner)
continue;
} }
let corner = new HotCorner(this, monitor, cornerX, cornerY); if (haveTopLeftCorner) {
corner.setBarrierSize(size); let corner = new HotCorner(this, monitor, cornerX, cornerY);
this.hotCorners.push(corner); corner.setBarrierSize(size);
this.hotCorners.push(corner);
} else {
this.hotCorners.push(null);
}
} }
this.emit('hot-corners-changed'); this.emit('hot-corners-changed');
@ -408,7 +427,8 @@ const LayoutManager = new Lang.Class({
let size = this.panelBox.height; let size = this.panelBox.height;
this.hotCorners.forEach(function(corner) { this.hotCorners.forEach(function(corner) {
corner.setBarrierSize(size); if (corner)
corner.setBarrierSize(size);
}); });
}, },
@ -578,6 +598,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 +675,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();
@ -897,13 +920,8 @@ const LayoutManager = new Lang.Class({
}, },
_updateFullscreen: function() { _updateFullscreen: function() {
for (let i = 0; i < this.monitors.length; i++)
this.monitors[i].inFullscreen = global.screen.get_monitor_in_fullscreen (i);
this._updateVisibility(); this._updateVisibility();
this._queueUpdateRegions(); this._queueUpdateRegions();
this.emit('fullscreen-changed');
}, },
_windowsRestacked: function() { _windowsRestacked: function() {
@ -1089,12 +1107,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);

View File

@ -41,6 +41,9 @@ const Util = imports.misc.util;
const OVERRIDES_SCHEMA = 'org.gnome.shell.overrides'; const OVERRIDES_SCHEMA = 'org.gnome.shell.overrides';
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff); const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable';
let componentManager = null; let componentManager = null;
let panel = null; let panel = null;
let overview = null; let overview = null;
@ -69,6 +72,7 @@ let _startDate;
let _defaultCssStylesheet = null; let _defaultCssStylesheet = null;
let _cssStylesheet = null; let _cssStylesheet = null;
let _overridesSettings = null; let _overridesSettings = null;
let _a11ySettings = null;
function _sessionUpdated() { function _sessionUpdated() {
_loadDefaultStylesheet(); _loadDefaultStylesheet();
@ -157,9 +161,14 @@ function _initializeUI() {
layoutManager.init(); layoutManager.init();
overview.init(); overview.init();
_a11ySettings = new Gio.Settings({ schema: A11Y_SCHEMA });
global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT, global.screen.override_workspace_layout(Meta.ScreenCorner.TOPLEFT,
false, -1, 1); false, -1, 1);
global.display.connect('overlay-key', Lang.bind(overview, overview.toggle)); global.display.connect('overlay-key', Lang.bind(overview, function () {
if (!_a11ySettings.get_boolean (STICKY_KEYS_ENABLE))
overview.toggle();
}));
// Provide the bus object for gnome-session to // Provide the bus object for gnome-session to
// initiate logouts. // initiate logouts.

View File

@ -1557,23 +1557,22 @@ const MessageTray = new Lang.Class({
this.actor = new St.Widget({ name: 'message-tray', this.actor = new St.Widget({ name: 'message-tray',
reactive: true, reactive: true,
track_hover: true,
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
x_expand: true, x_expand: true,
y_expand: true, y_expand: true,
y_align: Clutter.ActorAlign.START, y_align: Clutter.ActorAlign.START,
}); });
this.actor.connect('notify::hover', Lang.bind(this, this._onTrayHoverChanged));
this._notificationWidget = new St.Widget({ name: 'notification-container', this._notificationWidget = new St.Widget({ name: 'notification-container',
reactive: true,
track_hover: true,
y_align: Clutter.ActorAlign.START, y_align: Clutter.ActorAlign.START,
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_expand: true, y_expand: true,
x_expand: true, x_expand: true,
layout_manager: new Clutter.BinLayout() }); layout_manager: new Clutter.BinLayout() });
this._notificationWidget.connect('key-release-event', Lang.bind(this, this._onNotificationKeyRelease)); this._notificationWidget.connect('key-release-event', Lang.bind(this, this._onNotificationKeyRelease));
this._notificationWidget.connect('notify::hover', Lang.bind(this, this._onNotificationHoverChanged));
this.actor.add_actor(this._notificationWidget);
this._notificationBin = new St.Bin({ y_expand: true }); this._notificationBin = new St.Bin({ y_expand: true });
this._notificationBin.set_y_align(Clutter.ActorAlign.START); this._notificationBin.set_y_align(Clutter.ActorAlign.START);
@ -1628,24 +1627,25 @@ const MessageTray = new Lang.Class({
{ keybindingMode: Shell.KeyBindingMode.MESSAGE_TRAY }); { keybindingMode: Shell.KeyBindingMode.MESSAGE_TRAY });
this._grabHelper.addActor(this._summaryBoxPointer.actor); this._grabHelper.addActor(this._summaryBoxPointer.actor);
this._grabHelper.addActor(this.actor); this._grabHelper.addActor(this.actor);
this._grabHelper.addActor(this._notificationWidget);
Main.layoutManager.connect('keyboard-visible-changed', Lang.bind(this, this._onKeyboardVisibleChanged)); Main.layoutManager.connect('keyboard-visible-changed', Lang.bind(this, this._onKeyboardVisibleChanged));
this._trayState = State.HIDDEN; this._trayState = State.HIDDEN;
this._traySummoned = false; this._traySummoned = false;
this._useLongerTrayLeftTimeout = false; this._useLongerNotificationLeftTimeout = false;
this._trayLeftTimeoutId = 0; this._trayLeftTimeoutId = 0;
// pointerInTray is sort of a misnomer -- it tracks whether // pointerInNotification is sort of a misnomer -- it tracks whether
// a message tray notification should expand. The value is // a message tray notification should expand. The value is
// partially driven by the hover state of the tray, but has // partially driven by the hover state of the notification, but has
// a lot of complex state related to timeouts and the current // a lot of complex state related to timeouts and the current
// state of the pointer when a notification pops up. // state of the pointer when a notification pops up.
this._pointerInTray = false; this._pointerInNotification = false;
// This tracks this.actor.hover and is used to fizzle // This tracks this._notificationWidget.hover and is used to fizzle
// out non-changing hover notifications in onTrayHoverChanged. // out non-changing hover notifications in onNotificationHoverChanged.
this._trayHovered = false; this._notificationHovered = false;
this._keyboardVisible = false; this._keyboardVisible = false;
this._notificationClosed = false; this._notificationClosed = false;
@ -1657,7 +1657,6 @@ const MessageTray = new Lang.Class({
this._desktopCloneState = State.HIDDEN; this._desktopCloneState = State.HIDDEN;
this._notificationRemoved = false; this._notificationRemoved = false;
this._reNotifyAfterHideNotification = null; this._reNotifyAfterHideNotification = null;
this._inFullscreen = false;
this._desktopClone = null; this._desktopClone = null;
this._inCtrlAltTab = false; this._inCtrlAltTab = false;
@ -1669,11 +1668,12 @@ const MessageTray = new Lang.Class({
}); });
Main.layoutManager.trayBox.add_actor(this.actor); Main.layoutManager.trayBox.add_actor(this.actor);
Main.layoutManager.trayBox.add_actor(this._notificationWidget);
Main.layoutManager.trackChrome(this.actor); Main.layoutManager.trackChrome(this.actor);
Main.layoutManager.trackChrome(this._notificationWidget); Main.layoutManager.trackChrome(this._notificationWidget);
Main.layoutManager.trackChrome(this._closeButton); Main.layoutManager.trackChrome(this._closeButton);
Main.layoutManager.connect('fullscreen-changed', Lang.bind(this, this._updateState)); global.screen.connect('in-fullscreen-changed', Lang.bind(this, this._updateState));
Main.layoutManager.connect('hot-corners-changed', Lang.bind(this, this._hotCornersChanged)); Main.layoutManager.connect('hot-corners-changed', Lang.bind(this, this._hotCornersChanged));
// If the overview shows or hides while we're in // If the overview shows or hides while we're in
@ -1747,7 +1747,7 @@ const MessageTray = new Lang.Class({
let [x, y, mask] = global.get_pointer(); let [x, y, mask] = global.get_pointer();
this._contextMenu.setPosition(Math.round(x), Math.round(y)); this._contextMenu.setPosition(Math.round(x), Math.round(y));
this._grabHelper.grab({ actor: this._contextMenu.actor, this._grabHelper.grab({ actor: this._contextMenu.actor,
grabFocus: true, modal: true,
onUngrab: Lang.bind(this, function () { onUngrab: Lang.bind(this, function () {
this._contextMenu.close(BoxPointer.PopupAnimation.FULL); this._contextMenu.close(BoxPointer.PopupAnimation.FULL);
}) })
@ -1793,12 +1793,12 @@ const MessageTray = new Lang.Class({
y == monitor.y + monitor.height - 1); y == monitor.y + monitor.height - 1);
if (shouldDwell) { if (shouldDwell) {
// We only set up dwell timeout when the user is not hovering over the tray // We only set up dwell timeout when the user is not hovering over the tray
// (!this.actor.hover). This avoids bringing up the message tray after the // (!this._notificationHovered). This avoids bringing up the message tray after the
// user clicks on a notification with the pointer on the bottom pixel // user clicks on a notification with the pointer on the bottom pixel
// of the monitor. The _trayDwelling variable is used so that we only try to // of the monitor. The _trayDwelling variable is used so that we only try to
// fire off one tray dwell - if it fails (because, say, the user has the mouse down), // fire off one tray dwell - if it fails (because, say, the user has the mouse down),
// we don't try again until the user moves the mouse up and down again. // we don't try again until the user moves the mouse up and down again.
if (!this._trayDwelling && !this.actor.hover && this._trayDwellTimeoutId == 0) { if (!this._trayDwelling && !this._notificationHovered && this._trayDwellTimeoutId == 0) {
// Save the interaction timestamp so we can detect user input // Save the interaction timestamp so we can detect user input
let focusWindow = global.display.focus_window; let focusWindow = global.display.focus_window;
this._trayDwellUserTime = focusWindow ? focusWindow.user_time : 0; this._trayDwellUserTime = focusWindow ? focusWindow.user_time : 0;
@ -2021,7 +2021,6 @@ const MessageTray = new Lang.Class({
hide: function() { hide: function() {
this._traySummoned = false; this._traySummoned = false;
this.actor.set_hover(false);
this._updateState(); this._updateState();
}, },
@ -2088,25 +2087,21 @@ const MessageTray = new Lang.Class({
this._grabHelper.addActor(corner.actor); this._grabHelper.addActor(corner.actor);
}, },
_onTrayHoverChanged: function() { _onNotificationHoverChanged: function() {
if (this.actor.hover == this._trayHovered) if (this._notificationWidget.hover == this._notificationHovered)
return; return;
this._trayHovered = this.actor.hover; this._notificationHovered = this._notificationWidget.hover;
if (this._trayHovered) { if (this._notificationHovered) {
// No dwell inside notifications at the bottom of the screen // No dwell inside notifications at the bottom of the screen
this._cancelTrayDwell(); this._cancelTrayDwell();
// Don't do anything if the one pixel area at the bottom is hovered over while the tray is hidden. this._useLongerNotificationLeftTimeout = false;
if (this._trayState == State.HIDDEN && this._notificationState == State.HIDDEN) if (this._notificationLeftTimeoutId) {
return; Mainloop.source_remove(this._notificationLeftTimeoutId);
this._notificationLeftTimeoutId = 0;
this._useLongerTrayLeftTimeout = false; this._notificationLeftMouseX = -1;
if (this._trayLeftTimeoutId) { this._notificationLeftMouseY = -1;
Mainloop.source_remove(this._trayLeftTimeoutId);
this._trayLeftTimeoutId = 0;
this._trayLeftMouseX = -1;
this._trayLeftMouseY = -1;
return; return;
} }
@ -2115,32 +2110,32 @@ const MessageTray = new Lang.Class({
global.stage.get_actor_at_pos(Clutter.PickMode.ALL, this._showNotificationMouseX, this._showNotificationMouseY); global.stage.get_actor_at_pos(Clutter.PickMode.ALL, this._showNotificationMouseX, this._showNotificationMouseY);
this._showNotificationMouseX = -1; this._showNotificationMouseX = -1;
this._showNotificationMouseY = -1; this._showNotificationMouseY = -1;
// Don't set this._pointerInTray to true if the pointer was initially in the area where the notification // Don't set this._pointerInNotification to true if the pointer was initially in the area where the notification
// popped up. That way we will not be expanding notifications that happen to pop up over the pointer // popped up. That way we will not be expanding notifications that happen to pop up over the pointer
// automatically. Instead, the user is able to expand the notification by mousing away from it and then // automatically. Instead, the user is able to expand the notification by mousing away from it and then
// mousing back in. Because this is an expected action, we set the boolean flag that indicates that a longer // mousing back in. Because this is an expected action, we set the boolean flag that indicates that a longer
// timeout should be used before popping down the notification. // timeout should be used before popping down the notification.
if (this.actor.contains(actorAtShowNotificationPosition)) { if (this.actor.contains(actorAtShowNotificationPosition)) {
this._useLongerTrayLeftTimeout = true; this._useLongerNotificationLeftTimeout = true;
return; return;
} }
} }
this._pointerInTray = true; this._pointerInNotification = true;
this._updateState(); this._updateState();
} else { } else {
// We record the position of the mouse the moment it leaves the tray. These coordinates are used in // We record the position of the mouse the moment it leaves the tray. These coordinates are used in
// this._onTrayLeftTimeout() to determine if the mouse has moved far enough during the initial timeout for us // this._onNotificationLeftTimeout() to determine if the mouse has moved far enough during the initial timeout for us
// to consider that the user intended to leave the tray and therefore hide the tray. If the mouse is still // to consider that the user intended to leave the tray and therefore hide the tray. If the mouse is still
// close to its previous position, we extend the timeout once. // close to its previous position, we extend the timeout once.
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
this._trayLeftMouseX = x; this._notificationLeftMouseX = x;
this._trayLeftMouseY = y; this._notificationLeftMouseY = y;
// We wait just a little before hiding the message tray in case the user quickly moves the mouse back into it. // We wait just a little before hiding the message tray in case the user quickly moves the mouse back into it.
// We wait for a longer period if the notification popped up where the mouse pointer was already positioned. // We wait for a longer period if the notification popped up where the mouse pointer was already positioned.
// That gives the user more time to mouse away from the notification and mouse back in in order to expand it. // That gives the user more time to mouse away from the notification and mouse back in in order to expand it.
let timeout = this._useLongerTrayLeftTimeout ? LONGER_HIDE_TIMEOUT * 1000 : HIDE_TIMEOUT * 1000; let timeout = this._useLongerNotificationLeftTimeout ? LONGER_HIDE_TIMEOUT * 1000 : HIDE_TIMEOUT * 1000;
this._trayLeftTimeoutId = Mainloop.timeout_add(timeout, Lang.bind(this, this._onTrayLeftTimeout)); this._notificationLeftTimeoutId = Mainloop.timeout_add(timeout, Lang.bind(this, this._onNotificationLeftTimeout));
} }
}, },
@ -2164,22 +2159,22 @@ const MessageTray = new Lang.Class({
this._updateState(); this._updateState();
}, },
_onTrayLeftTimeout: function() { _onNotificationLeftTimeout: function() {
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
// We extend the timeout once if the mouse moved no further than MOUSE_LEFT_ACTOR_THRESHOLD to either side or up. // We extend the timeout once if the mouse moved no further than MOUSE_LEFT_ACTOR_THRESHOLD to either side or up.
// We don't check how far down the mouse moved because any point above the tray, but below the exit coordinate, // We don't check how far down the mouse moved because any point above the tray, but below the exit coordinate,
// is close to the tray. // is close to the tray.
if (this._trayLeftMouseX > -1 && if (this._notificationLeftMouseX > -1 &&
y > this._trayLeftMouseY - MOUSE_LEFT_ACTOR_THRESHOLD && y > this._notificationLeftMouseY - MOUSE_LEFT_ACTOR_THRESHOLD &&
x < this._trayLeftMouseX + MOUSE_LEFT_ACTOR_THRESHOLD && x < this._notificationLeftMouseX + MOUSE_LEFT_ACTOR_THRESHOLD &&
x > this._trayLeftMouseX - MOUSE_LEFT_ACTOR_THRESHOLD) { x > this._notificationLeftMouseX - MOUSE_LEFT_ACTOR_THRESHOLD) {
this._trayLeftMouseX = -1; this._notificationLeftMouseX = -1;
this._trayLeftTimeoutId = Mainloop.timeout_add(LONGER_HIDE_TIMEOUT * 1000, this._notificationLeftTimeoutId = Mainloop.timeout_add(LONGER_HIDE_TIMEOUT * 1000,
Lang.bind(this, this._onTrayLeftTimeout)); Lang.bind(this, this._onNotificationLeftTimeout));
} else { } else {
this._trayLeftTimeoutId = 0; this._notificationLeftTimeoutId = 0;
this._useLongerTrayLeftTimeout = false; this._useLongerNotificationLeftTimeout = false;
this._pointerInTray = false; this._pointerInNotification = false;
this._updateNotificationTimeout(0); this._updateNotificationTimeout(0);
this._updateState(); this._updateState();
} }
@ -2187,7 +2182,7 @@ const MessageTray = new Lang.Class({
}, },
_escapeTray: function() { _escapeTray: function() {
this._pointerInTray = false; this._pointerInNotification = false;
this._traySummoned = false; this._traySummoned = false;
this._setClickedSummaryItem(null); this._setClickedSummaryItem(null);
this._updateNotificationTimeout(0); this._updateNotificationTimeout(0);
@ -2196,7 +2191,7 @@ const MessageTray = new Lang.Class({
// All of the logic for what happens when occurs here; the various // All of the logic for what happens when occurs here; the various
// event handlers merely update variables such as // event handlers merely update variables such as
// 'this._pointerInTray', 'this._traySummoned', etc, and // 'this._pointerInNotification', 'this._traySummoned', etc, and
// _updateState() figures out what (if anything) needs to be done // _updateState() figures out what (if anything) needs to be done
// at the present time. // at the present time.
_updateState: function() { _updateState: function() {
@ -2207,12 +2202,12 @@ const MessageTray = new Lang.Class({
let notificationsLimited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen; let notificationsLimited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen;
let notificationsPending = notificationQueue.length > 0 && (!notificationsLimited || notificationUrgent || notificationForFeedback) && Main.sessionMode.hasNotifications; let notificationsPending = notificationQueue.length > 0 && (!notificationsLimited || notificationUrgent || notificationForFeedback) && Main.sessionMode.hasNotifications;
let nextNotification = notificationQueue.length > 0 ? notificationQueue[0] : null; let nextNotification = notificationQueue.length > 0 ? notificationQueue[0] : null;
let notificationPinned = this._pointerInTray && !this._notificationRemoved; let notificationPinned = this._pointerInNotification && !this._notificationRemoved;
let notificationExpanded = this._notification && this._notification.expanded; let notificationExpanded = this._notification && this._notification.expanded;
let notificationExpired = this._notificationTimeoutId == 0 && let notificationExpired = this._notificationTimeoutId == 0 &&
!(this._notification && this._notification.urgency == Urgency.CRITICAL) && !(this._notification && this._notification.urgency == Urgency.CRITICAL) &&
!(this._notification && this._notification.focused) && !(this._notification && this._notification.focused) &&
!this._pointerInTray; !this._pointerInNotification;
let notificationLockedOut = !Main.sessionMode.hasNotifications && this._notification; let notificationLockedOut = !Main.sessionMode.hasNotifications && this._notification;
let notificationMustClose = this._notificationRemoved || notificationLockedOut || (notificationExpired && this._userActiveWhileNotificationShown) || this._notificationClosed; let notificationMustClose = this._notificationRemoved || notificationLockedOut || (notificationExpired && this._userActiveWhileNotificationShown) || this._notificationClosed;
let canShowNotification = notificationsPending && this._trayState == State.HIDDEN; let canShowNotification = notificationsPending && this._trayState == State.HIDDEN;
@ -2425,7 +2420,7 @@ const MessageTray = new Lang.Class({
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
// We save the position of the mouse at the time when we started showing the notification // We save the position of the mouse at the time when we started showing the notification
// in order to determine if the notification popped up under it. We make that check if // in order to determine if the notification popped up under it. We make that check if
// the user starts moving the mouse and _onTrayHoverChanged() gets called. We don't // the user starts moving the mouse and _onNotificationHoverChanged() gets called. We don't
// expand the notification if it just happened to pop up under the mouse unless the user // expand the notification if it just happened to pop up under the mouse unless the user
// explicitly mouses away from it and then mouses back in. // explicitly mouses away from it and then mouses back in.
this._showNotificationMouseX = x; this._showNotificationMouseX = x;
@ -2487,13 +2482,13 @@ const MessageTray = new Lang.Class({
_notificationTimeout: function() { _notificationTimeout: function() {
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
if (y > this._lastSeenMouseY + 10 && !this.actor.hover) { if (y > this._lastSeenMouseY + 10 && !this._notificationHovered) {
// The mouse is moving towards the notification, so don't // The mouse is moving towards the notification, so don't
// hide it yet. (We just create a new timeout (and destroy // hide it yet. (We just create a new timeout (and destroy
// the old one) each time because the bookkeeping is // the old one) each time because the bookkeeping is
// simpler.) // simpler.)
this._updateNotificationTimeout(1000); this._updateNotificationTimeout(1000);
} else if (this._useLongerTrayLeftTimeout && !this._trayLeftTimeoutId && } else if (this._useLongerNotificationLeftTimeout && !this._notificationLeftTimeoutId &&
(x != this._lastSeenMouseX || y != this._lastSeenMouseY)) { (x != this._lastSeenMouseX || y != this._lastSeenMouseY)) {
// Refresh the timeout if the notification originally // Refresh the timeout if the notification originally
// popped up under the pointer, and the pointer is hovering // popped up under the pointer, and the pointer is hovering
@ -2537,12 +2532,12 @@ const MessageTray = new Lang.Class({
this._notificationUnfocusedId = 0; this._notificationUnfocusedId = 0;
} }
this._useLongerTrayLeftTimeout = false; this._useLongerNotificationLeftTimeout = false;
if (this._trayLeftTimeoutId) { if (this._notificationLeftTimeoutId) {
Mainloop.source_remove(this._trayLeftTimeoutId); Mainloop.source_remove(this._notificationLeftTimeoutId);
this._trayLeftTimeoutId = 0; this._notificationLeftTimeoutId = 0;
this._trayLeftMouseX = -1; this._notificationLeftMouseX = -1;
this._trayLeftMouseY = -1; this._notificationLeftMouseY = -1;
} }
if (this._notificationRemoved) { if (this._notificationRemoved) {
@ -2572,14 +2567,9 @@ const MessageTray = new Lang.Class({
if (notification.isTransient) if (notification.isTransient)
notification.destroy(NotificationDestroyedReason.EXPIRED); notification.destroy(NotificationDestroyedReason.EXPIRED);
this._notificationRemoved = false;
this._closeButton.hide(); this._closeButton.hide();
this._pointerInTray = false; this._pointerInNotification = false;
this._notificationRemoved = false;
// Clutter will send a leave-event the next time the mouse
// moves, but we need to set this here now to update the
// state machine.
this.actor.hover = false;
this._notificationBin.child = null; this._notificationBin.child = null;
this._notificationWidget.hide(); this._notificationWidget.hide();
}, },
@ -2670,7 +2660,7 @@ const MessageTray = new Lang.Class({
} }
this._grabHelper.grab({ actor: this._summaryBoxPointer.bin.child, this._grabHelper.grab({ actor: this._summaryBoxPointer.bin.child,
grabFocus: true, modal: true,
onUngrab: Lang.bind(this, this._onSummaryBoxPointerUngrabbed) }); onUngrab: Lang.bind(this, this._onSummaryBoxPointerUngrabbed) });
this._summaryBoxPointer.actor.opacity = 0; this._summaryBoxPointer.actor.opacity = 0;

View File

@ -38,13 +38,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,
@ -277,6 +279,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

@ -11,7 +11,6 @@ const Shell = imports.gi.Shell;
const Gdk = imports.gi.Gdk; const Gdk = imports.gi.Gdk;
const Background = imports.ui.background; const Background = imports.ui.background;
const Dash = imports.ui.dash;
const DND = imports.ui.dnd; const DND = imports.ui.dnd;
const LayoutManager = imports.ui.layout; const LayoutManager = imports.ui.layout;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -20,7 +19,6 @@ const OverviewControls = imports.ui.overviewControls;
const Panel = imports.ui.panel; const Panel = imports.ui.panel;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const ViewSelector = imports.ui.viewSelector;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail; const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
// Time for initial animation going into Overview mode // Time for initial animation going into Overview mode
@ -133,14 +131,6 @@ const Overview = new Lang.Class({
y_expand: true }); y_expand: true });
this._overview._delegate = this; this._overview._delegate = this;
this._groupStack = new St.Widget({ layout_manager: new Clutter.BinLayout(),
x_expand: true, y_expand: true,
clip_to_allocation: true });
this._group = new St.BoxLayout({ name: 'overview-group',
reactive: true,
x_expand: true, y_expand: true });
this._groupStack.add_actor(this._group);
this._backgroundGroup = new Meta.BackgroundGroup(); this._backgroundGroup = new Meta.BackgroundGroup();
global.overlay_group.add_child(this._backgroundGroup); global.overlay_group.add_child(this._backgroundGroup);
this._backgroundGroup.hide(); this._backgroundGroup.hide();
@ -177,7 +167,6 @@ const Overview = new Lang.Class({
Main.xdndHandler.connect('drag-end', Lang.bind(this, this._onDragEnd)); Main.xdndHandler.connect('drag-end', Lang.bind(this, this._onDragEnd));
global.screen.connect('restacked', Lang.bind(this, this._onRestacked)); global.screen.connect('restacked', Lang.bind(this, this._onRestacked));
this._group.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._windowSwitchTimeoutId = 0; this._windowSwitchTimeoutId = 0;
this._windowSwitchTimestamp = 0; this._windowSwitchTimestamp = 0;
@ -276,28 +265,13 @@ const Overview = new Lang.Class({
this._overview.add_actor(this._searchEntryBin); this._overview.add_actor(this._searchEntryBin);
// Create controls // Create controls
this._dash = new Dash.Dash(); this._controls = new OverviewControls.ControlsManager(this._searchEntry);
this._viewSelector = new ViewSelector.ViewSelector(this._searchEntry, this._dash = this._controls.dash;
this._dash.showAppsButton); this._viewSelector = this._controls.viewSelector;
this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
this._controls = new OverviewControls.ControlsManager(this._dash,
this._thumbnailsBox,
this._viewSelector);
this._controls.dashActor.x_align = Clutter.ActorAlign.START;
this._controls.dashActor.y_expand = true;
// Put the dash in a separate layer to allow content to be centered
this._groupStack.add_actor(this._controls.dashActor);
// Pack all the actors into the group
this._group.add_actor(this._controls.dashSpacer);
this._group.add(this._viewSelector.actor, { x_fill: true,
expand: true });
this._group.add_actor(this._controls.thumbnailsActor);
// Add our same-line elements after the search entry // Add our same-line elements after the search entry
this._overview.add(this._groupStack, { y_fill: true, expand: true }); this._overview.add(this._controls.actor, { y_fill: true, expand: true });
this._controls.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this._stack.add_actor(this._controls.indicatorActor); this._stack.add_actor(this._controls.indicatorActor);

View File

@ -6,10 +6,12 @@ const Meta = imports.gi.Meta;
const St = imports.gi.St; const St = imports.gi.St;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Dash = imports.ui.dash;
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;
const ViewSelector = imports.ui.viewSelector; const ViewSelector = imports.ui.viewSelector;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
const SIDE_CONTROLS_ANIMATION_TIME = 0.16; const SIDE_CONTROLS_ANIMATION_TIME = 0.16;
@ -269,6 +271,11 @@ const ThumbnailsSlider = new Lang.Class({
return alwaysZoomOut; return alwaysZoomOut;
}, },
getNonExpandedWidth: function() {
let child = this.actor.get_first_child();
return child.get_theme_node().get_length('visible-width');
},
getSlide: function() { getSlide: function() {
if (!this.visible) if (!this.visible)
return 0; return 0;
@ -280,18 +287,16 @@ const ThumbnailsSlider = new Lang.Class({
let child = this.actor.get_first_child(); let child = this.actor.get_first_child();
let preferredHeight = child.get_preferred_height(-1)[1]; let preferredHeight = child.get_preferred_height(-1)[1];
let expandedWidth = child.get_preferred_width(preferredHeight)[1]; let expandedWidth = child.get_preferred_width(preferredHeight)[1];
let visibleWidth = child.get_theme_node().get_length('visible-width');
return visibleWidth / expandedWidth; return this.getNonExpandedWidth() / expandedWidth;
}, },
getVisibleWidth: function() { getVisibleWidth: function() {
let alwaysZoomOut = this._getAlwaysZoomOut(); let alwaysZoomOut = this._getAlwaysZoomOut();
if (alwaysZoomOut) if (alwaysZoomOut)
return this.parent(); return this.parent();
else
let child = this.actor.get_first_child(); return this.getNonExpandedWidth();
return child.get_theme_node().get_length('visible-width');
} }
}); });
@ -309,6 +314,10 @@ const DashSlider = new Lang.Class({
// available allocation // available allocation
this._dash.actor.x_expand = true; this._dash.actor.x_expand = true;
this._dash.actor.y_expand = true; this._dash.actor.y_expand = true;
this.actor.x_align = Clutter.ActorAlign.START;
this.actor.y_expand = true;
this.actor.add_actor(this._dash.actor); this.actor.add_actor(this._dash.actor);
this._dash.connect('icon-size-changed', Lang.bind(this, this.updateSlide)); this._dash.connect('icon-size-changed', Lang.bind(this, this.updateSlide));
@ -479,39 +488,77 @@ const MessagesIndicator = new Lang.Class({
const ControlsManager = new Lang.Class({ const ControlsManager = new Lang.Class({
Name: 'ControlsManager', Name: 'ControlsManager',
_init: function(dash, thumbnails, viewSelector) { _init: function(searchEntry) {
this._dashSlider = new DashSlider(dash); this.dash = new Dash.Dash();
this.dashActor = this._dashSlider.actor; this._dashSlider = new DashSlider(this.dash);
this.dashSpacer = new DashSpacer(); this._dashSpacer = new DashSpacer();
this.dashSpacer.setDashActor(this.dashActor); this._dashSpacer.setDashActor(this._dashSlider.actor);
this._thumbnailsSlider = new ThumbnailsSlider(thumbnails); this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
this.thumbnailsActor = this._thumbnailsSlider.actor; this._thumbnailsSlider = new ThumbnailsSlider(this._thumbnailsBox);
this._indicator = new MessagesIndicator(viewSelector); this.viewSelector = new ViewSelector.ViewSelector(searchEntry,
this.dash.showAppsButton);
this.viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility));
this.viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty));
this._indicator = new MessagesIndicator(this.viewSelector);
this.indicatorActor = this._indicator.actor; this.indicatorActor = this._indicator.actor;
this._viewSelector = viewSelector; this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout(),
this._viewSelector.connect('page-changed', Lang.bind(this, this._setVisibility)); x_expand: true, y_expand: true,
this._viewSelector.connect('page-empty', Lang.bind(this, this._onPageEmpty)); clip_to_allocation: true });
this._group = new St.BoxLayout({ name: 'overview-group',
reactive: true,
x_expand: true, y_expand: true });
this.actor.add_actor(this._group);
this.actor.add_actor(this._dashSlider.actor);
this._group.add_actor(this._dashSpacer);
this._group.add(this.viewSelector.actor, { x_fill: true,
expand: true });
this._group.add_actor(this._thumbnailsSlider.actor);
this._group.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesGeometry));
Main.overview.connect('showing', Lang.bind(this, this._updateSpacerVisibility)); Main.overview.connect('showing', Lang.bind(this, this._updateSpacerVisibility));
Main.overview.connect('item-drag-begin', Lang.bind(this, Main.overview.connect('item-drag-begin', Lang.bind(this,
function() { function() {
let activePage = this._viewSelector.getActivePage(); let activePage = this.viewSelector.getActivePage();
if (activePage != ViewSelector.ViewPage.WINDOWS) if (activePage != ViewSelector.ViewPage.WINDOWS)
this._viewSelector.fadeHalf(); this.viewSelector.fadeHalf();
})); }));
Main.overview.connect('item-drag-end', Lang.bind(this, Main.overview.connect('item-drag-end', Lang.bind(this,
function() { function() {
this._viewSelector.fadeIn(); this.viewSelector.fadeIn();
})); }));
Main.overview.connect('item-drag-cancelled', Lang.bind(this, Main.overview.connect('item-drag-cancelled', Lang.bind(this,
function() { function() {
this._viewSelector.fadeIn(); this.viewSelector.fadeIn();
})); }));
}, },
_updateWorkspacesGeometry: function() {
let [x, y] = this.actor.get_transformed_position();
let [width, height] = this.actor.get_transformed_size();
let geometry = { x: x, y: y, width: width, height: height };
let spacing = this.actor.get_theme_node().get_length('spacing');
let dashWidth = this._dashSlider.getVisibleWidth() + spacing;
let thumbnailsWidth = this._thumbnailsSlider.getNonExpandedWidth() + spacing;
geometry.width -= dashWidth;
geometry.width -= thumbnailsWidth;
if (this.actor.get_text_direction() == Clutter.TextDirection.LTR)
geometry.x += dashWidth;
else
geometry.x += thumbnailsWidth;
this.viewSelector.setWorkspacesFullGeometry(geometry);
},
_setVisibility: function() { _setVisibility: function() {
// Ignore the case when we're leaving the overview, since // Ignore the case when we're leaving the overview, since
// actors will be made visible again when entering the overview // actors will be made visible again when entering the overview
@ -521,7 +568,7 @@ const ControlsManager = new Lang.Class({
(Main.overview.animationInProgress && !Main.overview.visibleTarget)) (Main.overview.animationInProgress && !Main.overview.visibleTarget))
return; return;
let activePage = this._viewSelector.getActivePage(); let activePage = this.viewSelector.getActivePage();
let dashVisible = (activePage == ViewSelector.ViewPage.WINDOWS || let dashVisible = (activePage == ViewSelector.ViewPage.WINDOWS ||
activePage == ViewSelector.ViewPage.APPS); activePage == ViewSelector.ViewPage.APPS);
let thumbnailsVisible = (activePage == ViewSelector.ViewPage.WINDOWS); let thumbnailsVisible = (activePage == ViewSelector.ViewPage.WINDOWS);
@ -541,8 +588,8 @@ const ControlsManager = new Lang.Class({
if (Main.overview.animationInProgress && !Main.overview.visibleTarget) if (Main.overview.animationInProgress && !Main.overview.visibleTarget)
return; return;
let activePage = this._viewSelector.getActivePage(); let activePage = this.viewSelector.getActivePage();
this.dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS); this._dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS);
}, },
_onPageEmpty: function() { _onPageEmpty: function() {

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;
@ -546,14 +568,20 @@ const AppMenuButton = new Lang.Class({
} }
if (targetApp == this._targetApp) { if (targetApp == this._targetApp) {
if (targetApp && targetApp.get_state() != Shell.AppState.STARTING) { if (targetApp &&
targetApp.get_state() != Shell.AppState.STARTING &&
targetApp.get_state() != Shell.AppState.BUSY) {
this.stopAnimation(); this.stopAnimation();
this._maybeSetMenu(); this._maybeSetMenu();
} else if (targetApp &&
targetApp.get_state() == Shell.AppState.BUSY) {
this.startAnimation();
} }
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();
@ -580,7 +608,8 @@ const AppMenuButton = new Lang.Class({
this._iconBox.set_child(icon); this._iconBox.set_child(icon);
this._iconBox.show(); this._iconBox.show();
if (targetApp.get_state() == Shell.AppState.STARTING) if (targetApp.get_state() == Shell.AppState.STARTING ||
targetApp.get_state() == Shell.AppState.BUSY)
this.startAnimation(); this.startAnimation();
else else
this._maybeSetMenu(); this._maybeSetMenu();
@ -616,6 +645,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();
} }
}); });
@ -902,7 +958,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 +1112,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

@ -19,6 +19,12 @@ const Tweener = imports.ui.tweener;
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */ const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
const Ornament = {
NONE: 0,
DOT: 1,
CHECK: 2,
};
function _ensureStyle(actor) { function _ensureStyle(actor) {
if (actor.get_children) { if (actor.get_children) {
let children = actor.get_children(); let children = actor.get_children();
@ -53,7 +59,9 @@ const PopupBaseMenuItem = new Lang.Class({
this.actor._delegate = this; this.actor._delegate = this;
this._children = []; this._children = [];
this._dot = null; this._ornament = Ornament.NONE;
this._ornamentLabel = new St.Label({ style_class: 'popup-menu-ornament' });
this.actor.add_actor(this._ornamentLabel);
this._columnWidths = null; this._columnWidths = null;
this._spacing = 0; this._spacing = 0;
this.active = false; this.active = false;
@ -176,40 +184,24 @@ const PopupBaseMenuItem = new Lang.Class({
this._removeChild(child); this._removeChild(child);
}, },
setShowDot: function(show) { setOrnament: function(ornament) {
if (show) { if (ornament == this._ornament)
if (this._dot) return;
return;
this._dot = new St.DrawingArea({ style_class: 'popup-menu-item-dot' }); this._ornament = ornament;
this._dot.connect('repaint', Lang.bind(this, this._onRepaintDot));
this.actor.add_actor(this._dot);
this.actor.add_accessible_state (Atk.StateType.CHECKED);
} else {
if (!this._dot)
return;
this._dot.destroy(); if (ornament == Ornament.DOT) {
this._dot = null; this._ornamentLabel.text = '\u2022';
this.actor.remove_accessible_state (Atk.StateType.CHECKED); this.actor.add_accessible_state(Atk.StateType.CHECKED);
} else if (ornament == Ornament.CHECK) {
this._ornamentLabel.text = '\u2713';
this.actor.add_accessible_state(Atk.StateType.CHECKED);
} else if (ornament == Ornament.NONE) {
this._ornamentLabel.text = '';
this.actor.remove_accessible_state(Atk.StateType.CHECKED);
} }
}, },
_onRepaintDot: function(area) {
let cr = area.get_context();
let [width, height] = area.get_surface_size();
let color = area.get_theme_node().get_foreground_color();
cr.setSourceRGBA (
color.red / 255,
color.green / 255,
color.blue / 255,
color.alpha / 255);
cr.arc(width / 2, height / 2, width / 3, 0, 2 * Math.PI);
cr.fill();
cr.$dispose();
},
// This returns column widths in logical order (i.e. from the dot // This returns column widths in logical order (i.e. from the dot
// to the image), not in visual order (left to right) // to the image), not in visual order (left to right)
getColumnWidths: function() { getColumnWidths: function() {
@ -280,26 +272,25 @@ const PopupBaseMenuItem = new Lang.Class({
let height = box.y2 - box.y1; let height = box.y2 - box.y1;
let direction = this.actor.get_text_direction(); let direction = this.actor.get_text_direction();
if (this._dot) { // The ornament is placed outside box
// The dot is placed outside box // one quarter of padding from the border of the container
// one quarter of padding from the border of the container // (so 3/4 from the inner border)
// (so 3/4 from the inner border) // (padding is box.x1)
// (padding is box.x1) let ornamentBox = new Clutter.ActorBox();
let dotBox = new Clutter.ActorBox(); let ornamentWidth = box.x1;
let dotWidth = Math.round(box.x1 / 2);
if (direction == Clutter.TextDirection.LTR) { ornamentBox.x1 = 0;
dotBox.x1 = Math.round(box.x1 / 4); ornamentBox.x2 = ornamentWidth;
dotBox.x2 = dotBox.x1 + dotWidth; ornamentBox.y1 = box.y1;
} else { ornamentBox.y2 = box.y2;
dotBox.x2 = box.x2 + 3 * Math.round(box.x1 / 4);
dotBox.x1 = dotBox.x2 - dotWidth; if (direction == Clutter.TextDirection.RTL) {
} ornamentBox.x1 += box.x2;
dotBox.y1 = Math.round(box.y1 + (height - dotWidth) / 2); ornamentBox.x2 += box.x2;
dotBox.y2 = dotBox.y1 + dotWidth;
this._dot.allocate(dotBox, flags);
} }
this._ornamentLabel.allocate(ornamentBox, flags);
let x; let x;
if (direction == Clutter.TextDirection.LTR) if (direction == Clutter.TextDirection.LTR)
x = box.x1; x = box.x1;
@ -1157,6 +1148,7 @@ const PopupMenuBase = new Lang.Class({
}, },
destroy: function() { destroy: function() {
this.close();
this.removeAll(); this.removeAll();
this.actor.destroy(); this.actor.destroy();
@ -1474,23 +1466,12 @@ const PopupMenuSection = new Lang.Class({
this.actor = this.box; this.actor = this.box;
this.actor._delegate = this; this.actor._delegate = this;
this.isOpen = true; this.isOpen = true;
// an array of externally managed separators
this.separators = [];
}, },
// deliberately ignore any attempt to open() or close(), but emit the // deliberately ignore any attempt to open() or close(), but emit the
// corresponding signal so children can still pick it up // corresponding signal so children can still pick it up
open: function() { this.emit('open-state-changed', true); }, open: function() { this.emit('open-state-changed', true); },
close: function() { this.emit('open-state-changed', false); }, close: function() { this.emit('open-state-changed', false); },
destroy: function() {
for (let i = 0; i < this.separators.length; i++)
this.separators[i].destroy();
this.separators = [];
this.parent();
}
}); });
const PopupSubMenuMenuItem = new Lang.Class({ const PopupSubMenuMenuItem = new Lang.Class({
@ -1807,8 +1788,8 @@ const RemoteMenu = new Lang.Class({
this.model = model; this.model = model;
this.actionGroup = actionGroup; this.actionGroup = actionGroup;
this._actions = { }; this._actions = {};
this._modelChanged(this.model, 0, 0, this.model.get_n_items(), this); this._trackMenu(model, this);
this._actionStateChangeId = this.actionGroup.connect('action-state-changed', Lang.bind(this, this._actionStateChanged)); this._actionStateChangeId = this.actionGroup.connect('action-state-changed', Lang.bind(this, this._actionStateChanged));
this._actionEnableChangeId = this.actionGroup.connect('action-enabled-changed', Lang.bind(this, this._actionEnabledChanged)); this._actionEnableChangeId = this.actionGroup.connect('action-enabled-changed', Lang.bind(this, this._actionEnabledChanged));
@ -1828,39 +1809,8 @@ const RemoteMenu = new Lang.Class({
this.parent(); this.parent();
}, },
_createMenuItem: function(model, index) { _actionAdded: function(model, item, index) {
let labelValue = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_LABEL, null); let action_id = item.action_id;
let label = labelValue ? labelValue.deep_unpack() : '';
// remove all underscores that are not followed by another underscore
label = label.replace(/_([^_])/, '$1');
let section_link = model.get_item_link(index, Gio.MENU_LINK_SECTION);
if (section_link) {
let item = new PopupMenuSection();
if (label) {
let title = new PopupMenuItem(label, { reactive: false,
style_class: 'popup-subtitle-menu-item' });
item._titleMenuItem = title;
title._ignored = true;
item.addMenuItem(title);
}
this._modelChanged(section_link, 0, 0, section_link.get_n_items(), item);
return [item, true, ''];
}
let submenu_link = model.get_item_link(index, Gio.MENU_LINK_SUBMENU);
if (submenu_link) {
let item = new PopupSubMenuMenuItem(label);
this._modelChanged(submenu_link, 0, 0, submenu_link.get_n_items(), item.menu);
return [item, false, ''];
}
let action_id = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_ACTION, null).deep_unpack();
if (!this.actionGroup.has_action(action_id)) {
// the action may not be there yet, wait for action-added
return [null, false, 'action-added'];
}
if (!this._actions[action_id]) if (!this._actions[action_id])
this._actions[action_id] = { enabled: this.actionGroup.get_action_enabled(action_id), this._actions[action_id] = { enabled: this.actionGroup.get_action_enabled(action_id),
@ -1868,7 +1818,7 @@ const RemoteMenu = new Lang.Class({
items: [ ], items: [ ],
}; };
let action = this._actions[action_id]; let action = this._actions[action_id];
let item, target, destroyId, specificSignalId; let target, destroyId, specificSignalId;
if (action.state) { if (action.state) {
// Docs have get_state_hint(), except that the DBus protocol // Docs have get_state_hint(), except that the DBus protocol
@ -1879,28 +1829,28 @@ const RemoteMenu = new Lang.Class({
switch (String.fromCharCode(action.state.classify())) { switch (String.fromCharCode(action.state.classify())) {
case 'b': case 'b':
item = new PopupSwitchMenuItem(label, action.state.get_boolean());
action.items.push(item); action.items.push(item);
specificSignalId = item.connect('toggled', Lang.bind(this, function(item) { item.setOrnament(action.state.get_boolean() ?
Ornament.CHECK : Ornament.NONE);
specificSignalId = item.connect('activate', Lang.bind(this, function(item) {
this.actionGroup.activate_action(action_id, null); this.actionGroup.activate_action(action_id, null);
})); }));
break; break;
case 's': case 's':
item = new PopupMenuItem(label);
item._remoteTarget = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_TARGET, null).deep_unpack();
action.items.push(item); action.items.push(item);
item.setShowDot(action.state.deep_unpack() == item._remoteTarget); item._remoteTarget = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_TARGET, null).deep_unpack();
item.setOrnament(action.state.deep_unpack() == item._remoteTarget ?
Ornament.DOT : Ornament.NONE);
specificSignalId = item.connect('activate', Lang.bind(this, function(item) { specificSignalId = item.connect('activate', Lang.bind(this, function(item) {
this.actionGroup.activate_action(action_id, GLib.Variant.new_string(item._remoteTarget)); this.actionGroup.activate_action(action_id, GLib.Variant.new_string(item._remoteTarget));
})); }));
break; break;
default: default:
log('Action "%s" has state of type %s, which is not supported'.format(action_id, action.state.get_type_string())); log('Action "%s" has state of type %s, which is not supported'.format(action_id, action.state.get_type_string()));
return [null, false, 'action-state-changed']; return;
} }
} else { } else {
target = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_TARGET, null); target = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_TARGET, null);
item = new PopupMenuItem(label);
action.items.push(item); action.items.push(item);
specificSignalId = item.connect('activate', Lang.bind(this, function() { specificSignalId = item.connect('activate', Lang.bind(this, function() {
this.actionGroup.activate_action(action_id, target); this.actionGroup.activate_action(action_id, target);
@ -1917,94 +1867,52 @@ const RemoteMenu = new Lang.Class({
if (pos != -1) if (pos != -1)
action.items.splice(pos, 1); action.items.splice(pos, 1);
})); }));
},
return [item, false, '']; _trackMenu: function(model, item) {
}, item._tracker = Shell.MenuTracker.new(model,
null, /* action namespace */
Lang.bind(this, this._insertItem, item),
Lang.bind(this, this._removeItem, item));
_modelChanged: function(model, position, removed, added, target) { item.connect('destroy', function() {
let j, k; item._tracker.destroy();
let j0, k0; item._tracker = null;
});
},
let currentItems = target._getMenuItems(); _createMenuItem: function(model, index) {
let labelValue = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_LABEL, null);
let label = labelValue ? labelValue.deep_unpack() : '';
// remove all underscores that are not followed by another underscore
label = label.replace(/_([^_])/, '$1');
k0 = 0; let submenuModel = model.get_item_link(index, Gio.MENU_LINK_SUBMENU);
// skip ignored items at the beginning if (submenuModel) {
while (k0 < currentItems.length && currentItems[k0]._ignored) let item = new PopupSubMenuMenuItem(label);
k0++; this._trackMenu(submenuModel, item.menu);
// find the right menu item matching the model item return item;
for (j0 = 0; k0 < currentItems.length && j0 < position; j0++, k0++) {
if (currentItems[k0]._ignored)
k0++;
} }
if (removed == -1) { let item = new PopupMenuItem(label);
// special flag to indicate we should destroy everything let action_id = model.get_item_attribute_value(index, Gio.MENU_ATTRIBUTE_ACTION, null).deep_unpack();
for (k = k0; k < currentItems.length; k++) item.actor.can_focus = item.actor.reactive = false;
currentItems[k].destroy();
} else {
for (j = j0, k = k0; k < currentItems.length && j < j0 + removed; j++, k++) {
currentItems[k].destroy();
if (currentItems[k]._ignored) item.action_id = action_id;
j--;
} if (this.actionGroup.has_action(action_id)) {
this._actionAdded(model, item, index);
return item;
} }
for (j = j0, k = k0; j < j0 + added; j++, k++) { let signalId = this.actionGroup.connect('action-added', Lang.bind(this, function(actionGroup, actionName) {
let [item, addSeparator, changeSignal] = this._createMenuItem(model, j); actionGroup.disconnect(signalId);
if (this._actions[actionName]) return;
if (item) { this._actionAdded(model, item, index);
// separators must be added in the parent to make autohiding work }));
if (addSeparator) {
let separator = new PopupSeparatorMenuItem();
item.separators.push(separator);
separator._ignored = true;
target.addMenuItem(separator, k+1);
k++;
}
target.addMenuItem(item, k); return item;
if (addSeparator) {
let separator = new PopupSeparatorMenuItem();
item.separators.push(separator);
separator._ignored = true;
target.addMenuItem(separator, k+1);
k++;
}
} else if (changeSignal) {
let signalId = this.actionGroup.connect(changeSignal, Lang.bind(this, function(actionGroup, actionName) {
actionGroup.disconnect(signalId);
if (this._actions[actionName]) return;
// force a full update
this._modelChanged(model, 0, -1, model.get_n_items(), target);
}));
}
}
if (!model._changedId) {
model._changedId = model.connect('items-changed', Lang.bind(this, this._modelChanged, target));
model._destroyId = target.connect('destroy', function() {
if (model._changedId)
model.disconnect(model._changedId);
if (model._destroyId)
target.disconnect(model._destroyId);
model._changedId = 0;
model._destroyId = 0;
});
}
if (target instanceof PopupMenuSection) {
if (target._titleMenuItem)
target.actor.visible = target.numMenuItems != 1;
else
target.actor.visible = target.numMenuItems != 0;
} else {
let sourceItem = target.sourceActor._delegate;
if (sourceItem instanceof PopupSubMenuMenuItem)
sourceItem.actor.visible = target.numMenuItems != 0;
}
}, },
_actionStateChanged: function(actionGroup, action_id) { _actionStateChanged: function(actionGroup, action_id) {
@ -2017,7 +1925,8 @@ const RemoteMenu = new Lang.Class({
switch (String.fromCharCode(action.state.classify())) { switch (String.fromCharCode(action.state.classify())) {
case 'b': case 'b':
for (let i = 0; i < action.items.length; i++) for (let i = 0; i < action.items.length; i++)
action.items[i].setToggleState(action.state.get_boolean()); action.items[i].setOrnament(action.state.get_boolean() ?
Ornament.CHECK : Ornament.NONE);
break; break;
case 'd': case 'd':
for (let i = 0; i < action.items.length; i++) for (let i = 0; i < action.items.length; i++)
@ -2025,7 +1934,8 @@ const RemoteMenu = new Lang.Class({
break; break;
case 's': case 's':
for (let i = 0; i < action.items.length; i++) for (let i = 0; i < action.items.length; i++)
action.items[i].setShowDot(action.items[i]._remoteTarget == action.state.deep_unpack()); action.items[i].setOrnament(action.items[i]._remoteTarget == action.state.deep_unpack() ?
Ornament.DOT : Ornament.NONE);
} }
} }
}, },
@ -2042,7 +1952,23 @@ const RemoteMenu = new Lang.Class({
item.actor.reactive = item.actor.can_focus = action.enabled; item.actor.reactive = item.actor.can_focus = action.enabled;
} }
} }
} },
_insertItem: function(position, model, item_index, action_namespace, is_separator, target) {
let item;
if (is_separator)
item = new PopupSeparatorMenuItem();
else
item = this._createMenuItem(model, item_index);
target.addMenuItem(item, position);
},
_removeItem: function(position, target) {
let items = target._getMenuItems();
items[position].destroy();
},
}); });
/* Basic implementation of a menu manager. /* Basic implementation of a menu manager.
@ -2051,9 +1977,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 +2012,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 +2036,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 +2049,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 +2067,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;
@ -198,7 +187,9 @@ const RemoteSearchProvider = new Lang.Class({
createIcon: function(size, meta) { createIcon: function(size, meta) {
let gicon; let gicon;
if (meta['gicon']) { if (meta['icon']) {
gicon = Gio.icon_deserialize(meta['icon']);
} else if (meta['gicon']) {
gicon = Gio.icon_new_for_string(meta['gicon']); gicon = Gio.icon_new_for_string(meta['gicon']);
} else if (meta['icon-data']) { } else if (meta['icon-data']) {
let [width, height, rowStride, hasAlpha, let [width, height, rowStride, hasAlpha,
@ -251,8 +242,12 @@ const RemoteSearchProvider = new Lang.Class({
let metas = results[0]; let metas = results[0];
let resultMetas = []; let resultMetas = [];
for (let i = 0; i < metas.length; i++) { for (let i = 0; i < metas.length; i++) {
for (let prop in metas[i]) for (let prop in metas[i]) {
metas[i][prop] = metas[i][prop].deep_unpack(); // we can use the serialized icon variant directly
if (prop != 'icon')
metas[i][prop] = metas[i][prop].deep_unpack();
}
resultMetas.push({ id: metas[i]['id'], resultMetas.push({ id: metas[i]['id'],
name: metas[i]['name'], name: metas[i]['name'],
description: metas[i]['description'], description: metas[i]['description'],

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

@ -562,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);

View File

@ -81,10 +81,10 @@ const _modes = {
'initial-setup': { 'initial-setup': {
hasWindows: true, hasWindows: true,
isPrimary: true, isPrimary: true,
components: ['keyring'], components: ['networkAgent', 'keyring'],
panel: { panel: {
left: [], left: [],
center: ['dateMenu'], center: [],
right: ['a11yGreeter', 'keyboard', 'volume', 'battery'] right: ['a11yGreeter', 'keyboard', 'volume', 'battery']
} }
}, },

View File

@ -97,7 +97,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 +397,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

@ -82,11 +82,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 &&
@ -171,4 +166,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

@ -417,7 +417,7 @@ const InputSourceIndicator = new Lang.Class({
[oldSource, this._currentSource] = [this._currentSource, newSource]; [oldSource, this._currentSource] = [this._currentSource, newSource];
if (oldSource) { if (oldSource) {
oldSource.menuItem.setShowDot(false); oldSource.menuItem.setOrnament(PopupMenu.Ornament.NONE);
oldSource.indicatorLabel.hide(); oldSource.indicatorLabel.hide();
} }
@ -435,7 +435,7 @@ const InputSourceIndicator = new Lang.Class({
this.actor.show(); this.actor.show();
newSource.menuItem.setShowDot(true); newSource.menuItem.setOrnament(PopupMenu.Ornament.DOT);
newSource.indicatorLabel.show(); newSource.indicatorLabel.show();
this._buildPropSection(newSource.properties); this._buildPropSection(newSource.properties);
@ -459,6 +459,7 @@ const InputSourceIndicator = new Lang.Class({
this._inputSources = {}; this._inputSources = {};
this._ibusSources = {}; this._ibusSources = {};
this._currentSource = null;
let inputSourcesByShortName = {}; let inputSourcesByShortName = {};
@ -660,7 +661,8 @@ const InputSourceIndicator = new Lang.Class({
item.prop = prop; item.prop = prop;
radioGroup.push(item); radioGroup.push(item);
item.radioGroup = radioGroup; item.radioGroup = radioGroup;
item.setShowDot(prop.get_state() == IBus.PropState.CHECKED); item.setOrnament(prop.get_state() == IBus.PropState.CHECKED ?
PopupMenu.Ornament.DOT : PopupMenu.Ornament.NONE);
item.connect('activate', Lang.bind(this, function() { item.connect('activate', Lang.bind(this, function() {
if (item.prop.get_state() == IBus.PropState.CHECKED) if (item.prop.get_state() == IBus.PropState.CHECKED)
return; return;
@ -668,12 +670,12 @@ const InputSourceIndicator = new Lang.Class({
let group = item.radioGroup; let group = item.radioGroup;
for (let i = 0; i < group.length; ++i) { for (let i = 0; i < group.length; ++i) {
if (group[i] == item) { if (group[i] == item) {
item.setShowDot(true); item.setOrnament(PopupMenu.Ornament.DOT);
item.prop.set_state(IBus.PropState.CHECKED); item.prop.set_state(IBus.PropState.CHECKED);
this._ibusManager.activateProperty(item.prop.get_key(), this._ibusManager.activateProperty(item.prop.get_key(),
IBus.PropState.CHECKED); IBus.PropState.CHECKED);
} else { } else {
group[i].setShowDot(false); group[i].setOrnament(PopupMenu.Ornament.NONE);
group[i].prop.set_state(IBus.PropState.UNCHECKED); group[i].prop.set_state(IBus.PropState.UNCHECKED);
this._ibusManager.activateProperty(group[i].prop.get_key(), this._ibusManager.activateProperty(group[i].prop.get_key(),
IBus.PropState.UNCHECKED); IBus.PropState.UNCHECKED);

View File

@ -5,17 +5,10 @@ const Gio = imports.gi.Gio;
const Lang = imports.lang; const Lang = imports.lang;
const NetworkManager = imports.gi.NetworkManager; const NetworkManager = imports.gi.NetworkManager;
const NMClient = imports.gi.NMClient; const NMClient = imports.gi.NMClient;
const NMGtk = imports.gi.NMGtk;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
// Some of the new code depends on as-yet-unreleased NM
var NMGtk;
try {
NMGtk = imports.gi.NMGtk;
} catch(e) {
NMGtk = null;
}
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
@ -34,7 +27,6 @@ const NMConnectionCategory = {
}; };
const NMAccessPointSecurity = { const NMAccessPointSecurity = {
UNKNOWN: 0,
NONE: 1, NONE: 1,
WEP: 2, WEP: 2,
WPA_PSK: 3, WPA_PSK: 3,
@ -52,20 +44,6 @@ const NM80211ApSecurityFlags = NetworkManager['80211ApSecurityFlags'];
// (the remaining are placed into More…) // (the remaining are placed into More…)
const NUM_VISIBLE_NETWORKS = 5; const NUM_VISIBLE_NETWORKS = 5;
function macToArray(string) {
return string.split(':').map(function(el) {
return parseInt(el, 16);
});
}
function macCompare(one, two) {
for (let i = 0; i < 6; i++) {
if (one[i] != two[i])
return false;
}
return true;
}
function ssidCompare(one, two) { function ssidCompare(one, two) {
if (!one || !two) if (!one || !two)
return false; return false;
@ -130,8 +108,7 @@ const NMNetworkMenuItem = new Lang.Class({
this._icons.add_actor(this._signalIcon); this._icons.add_actor(this._signalIcon);
this._secureIcon = new St.Icon({ style_class: 'popup-menu-icon' }); this._secureIcon = new St.Icon({ style_class: 'popup-menu-icon' });
if (this.bestAP._secType != NMAccessPointSecurity.UNKNOWN && if (this.bestAP._secType != NMAccessPointSecurity.NONE)
this.bestAP._secType != NMAccessPointSecurity.NONE)
this._secureIcon.icon_name = 'network-wireless-encrypted-symbolic'; this._secureIcon.icon_name = 'network-wireless-encrypted-symbolic';
this._icons.add_actor(this._secureIcon); this._icons.add_actor(this._secureIcon);
}, },
@ -153,18 +130,12 @@ const NMWirelessSectionTitleMenuItem = new Lang.Class({
Name: 'NMWirelessSectionTitleMenuItem', Name: 'NMWirelessSectionTitleMenuItem',
Extends: PopupMenu.PopupSwitchMenuItem, Extends: PopupMenu.PopupSwitchMenuItem,
_init: function(client, property, title, params) { _init: function(client) {
params = params || { }; this.parent(_("Wi-Fi"), false, { style_class: 'popup-subtitle-menu-item' });
params.style_class = 'popup-subtitle-menu-item';
this.parent(title, false, params);
this._client = client; this._client = client;
this._property = property + '_enabled'; this._client.connect('notify::wireless-enabled', Lang.bind(this, this._propertyChanged));
this._propertyHardware = property + '_hardware_enabled'; this._client.connect('notify::wireless-hardware-enabled', Lang.bind(this, this._propertyChanged));
this._setEnabledFunc = property + '_set_enabled';
this._client.connect('notify::' + property + '-enabled', Lang.bind(this, this._propertyChanged));
this._client.connect('notify::' + property + '-hardware-enabled', Lang.bind(this, this._propertyChanged));
this._propertyChanged(); this._propertyChanged();
}, },
@ -186,12 +157,12 @@ const NMWirelessSectionTitleMenuItem = new Lang.Class({
activate: function(event) { activate: function(event) {
this.parent(event); this.parent(event);
this._client[this._setEnabledFunc](this._switch.state); this._client.wireless_set_enabled(this._switch.state);
}, },
_propertyChanged: function() { _propertyChanged: function() {
this._softwareEnabled = this._client[this._property]; this._softwareEnabled = this._client.wireless_enabled;
this._hardwareEnabled = this._client[this._propertyHardware]; this._hardwareEnabled = this._client.wireless_hardware_enabled;
let enabled = this._softwareEnabled && this._hardwareEnabled; let enabled = this._softwareEnabled && this._hardwareEnabled;
this.setToggleState(enabled); this.setToggleState(enabled);
@ -315,7 +286,6 @@ const NMDevice = new Lang.Class({
this._activeConnection = null; this._activeConnection = null;
this._activeConnectionItem = null; this._activeConnectionItem = null;
this._autoConnectionItem = null;
this._overflowItem = null; this._overflowItem = null;
this.statusItem = new PopupMenu.PopupSwitchMenuItem('', this.connected, { style_class: 'popup-subtitle-menu-item' }); this.statusItem = new PopupMenu.PopupSwitchMenuItem('', this.connected, { style_class: 'popup-subtitle-menu-item' });
@ -402,13 +372,9 @@ const NMDevice = new Lang.Class({
}, },
_activateAutomaticConnection: function() { _activateAutomaticConnection: function() {
let connection = this._createAutomaticConnection(); let connection = new NetworkManager.Connection();
if (connection) { this._client.add_and_activate_connection(connection, this.device, null, null);
this._client.add_and_activate_connection(connection, this.device, null, null); return true;
return true;
}
return false;
}, },
get connected() { get connected() {
@ -502,11 +468,6 @@ const NMDevice = new Lang.Class({
this.statusItem.label.text = this.device._description; this.statusItem.label.text = this.device._description;
}, },
// protected
_createAutomaticConnection: function() {
throw new TypeError('Invoking pure virtual function NMDevice.createAutomaticConnection');
},
_queueCreateSection: function() { _queueCreateSection: function() {
if (this._deferredWorkId) { if (this._deferredWorkId) {
this._clearSection(); this._clearSection();
@ -517,7 +478,6 @@ const NMDevice = new Lang.Class({
_clearSection: function() { _clearSection: function() {
// Clear everything // Clear everything
this.section.removeAll(); this.section.removeAll();
this._autoConnectionItem = null;
this._activeConnectionItem = null; this._activeConnectionItem = null;
this._overflowItem = null; this._overflowItem = null;
for (let i = 0; i < this._connections.length; i++) { for (let i = 0; i < this._connections.length; i++) {
@ -556,14 +516,6 @@ const NMDevice = new Lang.Class({
} else } else
this.section.addMenuItem(obj.item); this.section.addMenuItem(obj.item);
} }
} else if (this._autoConnectionName) {
this._autoConnectionItem = new PopupMenu.PopupMenuItem(this._autoConnectionName);
this._autoConnectionItem.connect('activate', Lang.bind(this, function() {
let connection = this._createAutomaticConnection();
if (connection)
this._client.add_and_activate_connection(connection, this.device, null, null);
}));
this.section.addMenuItem(this._autoConnectionItem);
} }
}, },
@ -588,7 +540,7 @@ const NMDevice = new Lang.Class({
title = _("Connected (private)"); title = _("Connected (private)");
} }
this._activeConnectionItem = new PopupMenu.PopupMenuItem(title, { reactive: false }); this._activeConnectionItem = new PopupMenu.PopupMenuItem(title, { reactive: false });
this._activeConnectionItem.setShowDot(true); this._activeConnectionItem.setOrnament(PopupMenu.Ornament.DOT);
}, },
_deviceStateChanged: function(device, newstate, oldstate, reason) { _deviceStateChanged: function(device, newstate, oldstate, reason) {
@ -665,24 +617,10 @@ const NMDeviceWired = new Lang.Class({
_init: function(client, device, connections) { _init: function(client, device, connections) {
device._description = _("Wired"); device._description = _("Wired");
this._autoConnectionName = _("Auto Ethernet");
this.category = NMConnectionCategory.WIRED; this.category = NMConnectionCategory.WIRED;
this.parent(client, device, connections); this.parent(client, device, connections);
}, },
_createAutomaticConnection: function() {
let connection = new NetworkManager.Connection();
let uuid = NetworkManager.utils_uuid_generate();
connection.add_setting(new NetworkManager.SettingWired());
connection.add_setting(new NetworkManager.SettingConnection({
uuid: uuid,
id: this._autoConnectionName,
type: NetworkManager.SETTING_WIRED_SETTING_NAME,
autoconnect: true
}));
return connection;
}
}); });
const NMDeviceModem = new Lang.Class({ const NMDeviceModem = new Lang.Class({
@ -723,13 +661,10 @@ const NMDeviceModem = new Lang.Class({
this._connectionType = NetworkManager.SETTING_GSM_SETTING_NAME; this._connectionType = NetworkManager.SETTING_GSM_SETTING_NAME;
} }
if (is_wwan) { if (is_wwan)
this.category = NMConnectionCategory.WWAN; this.category = NMConnectionCategory.WWAN;
this._autoConnectionName = _("Auto broadband"); else
} else {
this.category = NMConnectionCategory.WIRED; this.category = NMConnectionCategory.WIRED;
this._autoConnectionName = _("Auto dial-up");
}
if (this.mobileDevice) { if (this.mobileDevice) {
this._operatorNameId = this.mobileDevice.connect('notify::operator-name', Lang.bind(this, function() { this._operatorNameId = this.mobileDevice.connect('notify::operator-name', Lang.bind(this, function() {
@ -824,50 +759,20 @@ const NMDeviceBluetooth = new Lang.Class({
_init: function(client, device, connections) { _init: function(client, device, connections) {
device._description = _("Bluetooth"); device._description = _("Bluetooth");
this._autoConnectionName = this._makeConnectionName(device);
device.connect('notify::name', Lang.bind(this, this._updateAutoConnectionName));
this.category = NMConnectionCategory.WWAN; this.category = NMConnectionCategory.WWAN;
this.parent(client, device, connections); this.parent(client, device, connections);
}, },
_createAutomaticConnection: function() {
let connection = new NetworkManager.Connection;
let uuid = NetworkManager.utils_uuid_generate();
connection.add_setting(new NetworkManager.SettingBluetooth);
connection.add_setting(new NetworkManager.SettingConnection({
uuid: uuid,
id: this._autoConnectionName,
type: NetworkManager.SETTING_BLUETOOTH_SETTING_NAME,
autoconnect: false
}));
return connection;
},
_activateAutomaticConnection: function() { _activateAutomaticConnection: function() {
// FIXME: DUN devices are configured like modems, so // FIXME: DUN devices are configured like modems, so
// we need to spawn the mobile wizard // We need to spawn the mobile wizard
// but the network panel doesn't support bluetooth at the moment // but the network panel doesn't support bluetooth at the moment
// so we just create an empty connection and hope // so we just create an empty connection and hope
// that this phone supports PAN // that this phone supports PAN
return this.parent(); return this.parent();
},
_makeConnectionName: function(device) {
let name = device.name;
if (name)
return _("Auto %s").format(name);
else
return _("Auto bluetooth");
},
_updateAutoConnectionName: function() {
this._autoConnectionName = this._makeConnectionName(this.device);
this._queueCreateSection();
this._updateStatusItem();
} }
}); });
@ -903,20 +808,20 @@ const NMDeviceWireless = new Lang.Class({
} }
let pos = this._findNetwork(ap); let pos = this._findNetwork(ap);
let obj; let network;
if (pos != -1) { if (pos != -1) {
obj = this._networks[pos]; network = this._networks[pos];
obj.accessPoints.push(ap); network.accessPoints.push(ap);
} else { } else {
obj = { ssid: ap.get_ssid(), network = { ssid: ap.get_ssid(),
mode: ap.mode, mode: ap.mode,
security: this._getApSecurityType(ap), security: this._getApSecurityType(ap),
connections: [ ], connections: [ ],
item: null, item: null,
accessPoints: [ ap ] accessPoints: [ ap ]
}; };
obj.ssidText = ssidToLabel(obj.ssid); network.ssidText = ssidToLabel(network.ssid);
this._networks.push(obj); this._networks.push(network);
} }
ap._updateId = ap.connect('notify::strength', Lang.bind(this, this._onApStrengthChanged)); ap._updateId = ap.connect('notify::strength', Lang.bind(this, this._onApStrengthChanged));
@ -924,8 +829,8 @@ const NMDeviceWireless = new Lang.Class({
for (let j = 0; j < validConnections.length; j++) { for (let j = 0; j < validConnections.length; j++) {
let connection = validConnections[j]; let connection = validConnections[j];
if (ap.connection_valid(connection) && if (ap.connection_valid(connection) &&
obj.connections.indexOf(connection) == -1) { network.connections.indexOf(connection) == -1) {
obj.connections.push(connection); network.connections.push(connection);
} }
} }
} }
@ -934,16 +839,7 @@ const NMDeviceWireless = new Lang.Class({
for (let i = 0; i < this._networks.length; i++) for (let i = 0; i < this._networks.length; i++)
sortAccessPoints(this._networks[i].accessPoints); sortAccessPoints(this._networks[i].accessPoints);
if (this.device.active_access_point) { this._activeApChanged();
let networkPos = this._findNetwork(this.device.active_access_point);
if (networkPos == -1) // the connected access point is invisible
this._activeNetwork = null;
else
this._activeNetwork = this._networks[networkPos];
} else {
this._activeNetwork = null;
}
this._networks.sort(this._networkSortFunction); this._networks.sort(this._networkSortFunction);
this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged)); this._apChangedId = device.connect('notify::active-access-point', Lang.bind(this, this._activeApChanged));
@ -1090,9 +986,9 @@ const NMDeviceWireless = new Lang.Class({
_findExistingNetwork: function(accessPoint) { _findExistingNetwork: function(accessPoint) {
for (let i = 0; i < this._networks.length; i++) { for (let i = 0; i < this._networks.length; i++) {
let apObj = this._networks[i]; let network = this._networks[i];
for (let j = 0; j < apObj.accessPoints.length; j++) { for (let j = 0; j < network.accessPoints.length; j++) {
if (apObj.accessPoints[j] == accessPoint) if (network.accessPoints[j] == accessPoint)
return { network: i, ap: j }; return { network: i, ap: j };
} }
} }
@ -1140,30 +1036,30 @@ const NMDeviceWireless = new Lang.Class({
} }
let pos = this._findNetwork(accessPoint); let pos = this._findNetwork(accessPoint);
let apObj; let network;
let needsupdate = false; let needsupdate = false;
if (pos != -1) { if (pos != -1) {
apObj = this._networks[pos]; network = this._networks[pos];
if (apObj.accessPoints.indexOf(accessPoint) != -1) { if (network.accessPoints.indexOf(accessPoint) != -1) {
log('Access point was already seen, not adding again'); log('Access point was already seen, not adding again');
return; return;
} }
Util.insertSorted(apObj.accessPoints, accessPoint, function(one, two) { Util.insertSorted(network.accessPoints, accessPoint, function(one, two) {
return two.strength - one.strength; return two.strength - one.strength;
}); });
if (apObj.item) if (network.item)
apObj.item.updateBestAP(apObj.accessPoints[0]); network.item.updateBestAP(network.accessPoints[0]);
} else { } else {
apObj = { ssid: accessPoint.get_ssid(), network = { ssid: accessPoint.get_ssid(),
mode: accessPoint.mode, mode: accessPoint.mode,
security: this._getApSecurityType(accessPoint), security: this._getApSecurityType(accessPoint),
connections: [ ], connections: [ ],
item: null, item: null,
accessPoints: [ accessPoint ] accessPoints: [ accessPoint ]
}; };
apObj.ssidText = ssidToLabel(apObj.ssid); network.ssidText = ssidToLabel(network.ssid);
} }
accessPoint._updateId = accessPoint.connect('notify::strength', Lang.bind(this, this._onApStrengthChanged)); accessPoint._updateId = accessPoint.connect('notify::strength', Lang.bind(this, this._onApStrengthChanged));
@ -1171,14 +1067,14 @@ const NMDeviceWireless = new Lang.Class({
for (let i = 0; i < this._connections.length; i++) { for (let i = 0; i < this._connections.length; i++) {
let connection = this._connections[i].connection; let connection = this._connections[i].connection;
if (accessPoint.connection_valid(connection) && if (accessPoint.connection_valid(connection) &&
apObj.connections.indexOf(connection) == -1) { network.connections.indexOf(connection) == -1) {
apObj.connections.push(connection); network.connections.push(connection);
} }
} }
if (pos != -1) if (pos != -1)
this._networks.splice(pos, 1); this._networks.splice(pos, 1);
let newPos = Util.insertSorted(this._networks, apObj, this._networkSortFunction); let newPos = Util.insertSorted(this._networks, network, this._networkSortFunction);
// Queue an update of the UI if we changed the order // Queue an update of the UI if we changed the order
if (newPos != pos) if (newPos != pos)
@ -1198,28 +1094,28 @@ const NMDeviceWireless = new Lang.Class({
return; return;
} }
let apObj = this._networks[res.network]; let network = this._networks[res.network];
apObj.accessPoints.splice(res.ap, 1); network.accessPoints.splice(res.ap, 1);
if (apObj.accessPoints.length == 0) { if (network.accessPoints.length == 0) {
if (this._activeNetwork == apObj) if (this._activeNetwork == network)
this._activeNetwork = null; this._activeNetwork = null;
if (apObj.item) if (network.item)
apObj.item.destroy(); network.item.destroy();
if (this._overflowItem) { if (this._overflowItem) {
if (!apObj.isMore) { if (!network.isMore) {
// we removed an item in the main menu, and we have a more submenu // we removed an item in the main menu, and we have a more submenu
// we need to extract the first item in more and move it to the submenu // we need to extract the first item in more and move it to the submenu
let item = this._overflowItem.menu.firstMenuItem; let item = this._overflowItem.menu.firstMenuItem;
if (item && item._apObj) { if (item && item._network) {
item.destroy(); item.destroy();
// clear the cycle, and allow the construction of the new item // clear the cycle, and allow the construction of the new item
item._apObj.item = null; item._network.item = null;
this._createNetworkItem(item._apObj, NUM_VISIBLE_NETWORKS-1); this._createNetworkItem(item._network, NUM_VISIBLE_NETWORKS-1);
} else { } else {
log('The more... menu was existing and empty! This should not happen'); log('The more... menu was existing and empty! This should not happen');
} }
@ -1238,14 +1134,14 @@ const NMDeviceWireless = new Lang.Class({
let okPrev = true, okNext = true; let okPrev = true, okNext = true;
if (res.network > 0) if (res.network > 0)
okPrev = this._networkSortFunction(this._networks[res.network - 1], apObj) >= 0; okPrev = this._networkSortFunction(this._networks[res.network - 1], network) >= 0;
if (res.network < this._networks.length-1) if (res.network < this._networks.length-1)
okNext = this._networkSortFunction(this._networks[res.network + 1], apObj) <= 0; okNext = this._networkSortFunction(this._networks[res.network + 1], network) <= 0;
if (!okPrev || !okNext) if (!okPrev || !okNext)
this._queueCreateSection(); this._queueCreateSection();
else if (apObj.item) else if (network.item)
apObj.item.updateBestAP(apObj.accessPoints[0]); network.item.updateBestAP(network.accessPoints[0]);
} }
}, },
@ -1284,20 +1180,20 @@ const NMDeviceWireless = new Lang.Class({
let forceupdate = false; let forceupdate = false;
for (let i = 0; i < this._networks.length; i++) { for (let i = 0; i < this._networks.length; i++) {
let apObj = this._networks[i]; let network = this._networks[i];
let connections = apObj.connections; let connections = network.connections;
for (let k = 0; k < connections.length; k++) { for (let k = 0; k < connections.length; k++) {
if (connections[k].get_uuid() == connection.get_uuid()) { if (connections[k].get_uuid() == connection.get_uuid()) {
// remove the connection from the access point group // remove the connection from the access point group
connections.splice(k); connections.splice(k, 1);
forceupdate = forceupdate || connections.length == 0; forceupdate = forceupdate || connections.length == 0;
if (forceupdate) if (forceupdate)
break; break;
if (apObj.item) { if (network.item) {
if (apObj.item instanceof PopupMenu.PopupSubMenuMenuItem) { if (network.item instanceof PopupMenu.PopupSubMenuMenuItem) {
let items = apObj.item.menu._getMenuItems(); let items = network.item.menu._getMenuItems();
if (items.length == 2) { if (items.length == 2) {
// we need to update the connection list to convert this to a normal item // we need to update the connection list to convert this to a normal item
forceupdate = true; forceupdate = true;
@ -1310,8 +1206,8 @@ const NMDeviceWireless = new Lang.Class({
} }
} }
} else { } else {
apObj.item.destroy(); network.item.destroy();
apObj.item = null; network.item = null;
} }
} }
break; break;
@ -1337,13 +1233,13 @@ const NMDeviceWireless = new Lang.Class({
// find an appropriate access point // find an appropriate access point
let forceupdate = false; let forceupdate = false;
for (let i = 0; i < this._networks.length; i++) { for (let i = 0; i < this._networks.length; i++) {
let apObj = this._networks[i]; let network = this._networks[i];
// Check if connection is valid for any of these access points // Check if connection is valid for any of these access points
for (let k = 0; k < apObj.accessPoints.length; k++) { for (let k = 0; k < network.accessPoints.length; k++) {
let ap = apObj.accessPoints[k]; let ap = network.accessPoints[k];
if (ap.connection_valid(connection)) { if (ap.connection_valid(connection)) {
apObj.connections.push(connection); network.connections.push(connection);
// this potentially changes the sorting order // this potentially changes the sorting order
forceupdate = true; forceupdate = true;
break; break;
@ -1364,55 +1260,30 @@ const NMDeviceWireless = new Lang.Class({
else else
title = _("Connected (private)"); title = _("Connected (private)");
if (this._activeNetwork) this._activeConnectionItem = new NMNetworkMenuItem(this.device.active_access_point, undefined,
this._activeConnectionItem = new NMNetworkMenuItem(this.device.active_access_point, undefined, { reactive: false });
{ reactive: false }); this._activeConnectionItem.setOrnament(PopupMenu.Ornament.DOT);
else
this._activeConnectionItem = new PopupMenu.PopupImageMenuItem(title,
'network-wireless-connected-symbolic',
{ reactive: false });
this._activeConnectionItem.setShowDot(true);
}, },
_createAutomaticConnection: function(apObj) { _createNetworkItem: function(network, position) {
let name; if(!network.accessPoints || network.accessPoints.length == 0) {
let ssid = NetworkManager.utils_ssid_to_utf8(apObj.ssid);
if (ssid) {
/* TRANSLATORS: this the automatic wireless connection name (including the network name) */
name = _("Auto %s").format(ssid);
} else
name = _("Auto wireless");
let connection = new NetworkManager.Connection();
connection.add_setting(new NetworkManager.SettingWireless());
connection.add_setting(new NetworkManager.SettingConnection({
id: name,
autoconnect: true, // NetworkManager will know to ignore this if appropriate
uuid: NetworkManager.utils_uuid_generate(),
type: NetworkManager.SETTING_WIRELESS_SETTING_NAME
}));
return connection;
},
_createNetworkItem: function(apObj, position) {
if(!apObj.accessPoints || apObj.accessPoints.length == 0) {
// this should not happen, but I have no idea why it happens // this should not happen, but I have no idea why it happens
return; return;
} }
if(apObj.connections.length > 0) { if(network.connections.length > 0) {
if (apObj.connections.length == 1) { if (network.connections.length == 1) {
apObj.item = this._createAPItem(apObj.connections[0], apObj, false); network.item = this._createAPItem(network.connections[0], network, false);
} else { } else {
let title = apObj.ssidText; let title = network.ssidText;
apObj.item = new PopupMenu.PopupSubMenuMenuItem(title); network.item = new PopupMenu.PopupSubMenuMenuItem(title);
for (let i = 0; i < apObj.connections.length; i++) for (let i = 0; i < network.connections.length; i++)
apObj.item.menu.addMenuItem(this._createAPItem(apObj.connections[i], apObj, true)); network.item.menu.addMenuItem(this._createAPItem(network.connections[i], network, true));
} }
} else { } else {
apObj.item = new NMNetworkMenuItem(apObj.accessPoints[0]); network.item = new NMNetworkMenuItem(network.accessPoints[0]);
apObj.item.connect('activate', Lang.bind(this, function() { network.item.connect('activate', Lang.bind(this, function() {
let accessPoints = apObj.accessPoints; let accessPoints = network.accessPoints;
if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT) if ( (accessPoints[0]._secType == NMAccessPointSecurity.WPA2_ENT)
|| (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) { || (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) {
// 802.1x-enabled APs require further configuration, so they're // 802.1x-enabled APs require further configuration, so they're
@ -1420,23 +1291,23 @@ const NMDeviceWireless = new Lang.Class({
Util.spawn(['gnome-control-center', 'network', 'connect-8021x-wifi', Util.spawn(['gnome-control-center', 'network', 'connect-8021x-wifi',
this.device.get_path(), accessPoints[0].dbus_path]); this.device.get_path(), accessPoints[0].dbus_path]);
} else { } else {
let connection = this._createAutomaticConnection(apObj); let connection = new NetworkManager.Connection();
this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null) this._client.add_and_activate_connection(connection, this.device, accessPoints[0].dbus_path, null)
} }
})); }));
} }
apObj.item._apObj = apObj; network.item._network = network;
if (position < NUM_VISIBLE_NETWORKS) { if (position < NUM_VISIBLE_NETWORKS) {
apObj.isMore = false; network.isMore = false;
this.section.addMenuItem(apObj.item, position); this.section.addMenuItem(network.item, position);
} else { } else {
if (!this._overflowItem) { if (!this._overflowItem) {
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More…")); this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More…"));
this.section.addMenuItem(this._overflowItem); this.section.addMenuItem(this._overflowItem);
} }
this._overflowItem.menu.addMenuItem(apObj.item, position - NUM_VISIBLE_NETWORKS); this._overflowItem.menu.addMenuItem(network.item, position - NUM_VISIBLE_NETWORKS);
apObj.isMore = true; network.isMore = true;
} }
}, },
@ -1452,13 +1323,13 @@ const NMDeviceWireless = new Lang.Class({
let activeOffset = this._activeConnectionItem ? 1 : 0; let activeOffset = this._activeConnectionItem ? 1 : 0;
for(let j = 0; j < this._networks.length; j++) { for(let j = 0; j < this._networks.length; j++) {
let apObj = this._networks[j]; let network = this._networks[j];
if (apObj == this._activeNetwork) { if (network == this._activeNetwork) {
activeOffset--; activeOffset--;
continue; continue;
} }
this._createNetworkItem(apObj, j + activeOffset); this._createNetworkItem(network, j + activeOffset);
} }
}, },
}); });
@ -1680,11 +1551,9 @@ const NMApplet = new Lang.Class({
// Virtual device types // Virtual device types
this._vtypes = { }; this._vtypes = { };
if (NMGtk) { this._vtypes[NetworkManager.SETTING_VLAN_SETTING_NAME] = NMDeviceVirtual;
this._vtypes[NetworkManager.SETTING_VLAN_SETTING_NAME] = NMDeviceVirtual; this._vtypes[NetworkManager.SETTING_BOND_SETTING_NAME] = NMDeviceVirtual;
this._vtypes[NetworkManager.SETTING_BOND_SETTING_NAME] = NMDeviceVirtual; this._vtypes[NetworkManager.SETTING_BRIDGE_SETTING_NAME] = NMDeviceVirtual;
this._vtypes[NetworkManager.SETTING_BRIDGE_SETTING_NAME] = NMDeviceVirtual;
}
// Connection types // Connection types
this._ctypes = { }; this._ctypes = { };
@ -1696,11 +1565,9 @@ const NMApplet = new Lang.Class({
this._ctypes[NetworkManager.SETTING_CDMA_SETTING_NAME] = NMConnectionCategory.WWAN; this._ctypes[NetworkManager.SETTING_CDMA_SETTING_NAME] = NMConnectionCategory.WWAN;
this._ctypes[NetworkManager.SETTING_GSM_SETTING_NAME] = NMConnectionCategory.WWAN; this._ctypes[NetworkManager.SETTING_GSM_SETTING_NAME] = NMConnectionCategory.WWAN;
this._ctypes[NetworkManager.SETTING_INFINIBAND_SETTING_NAME] = NMConnectionCategory.WIRED; this._ctypes[NetworkManager.SETTING_INFINIBAND_SETTING_NAME] = NMConnectionCategory.WIRED;
if (NMGtk) { this._ctypes[NetworkManager.SETTING_VLAN_SETTING_NAME] = NMConnectionCategory.VIRTUAL;
this._ctypes[NetworkManager.SETTING_VLAN_SETTING_NAME] = NMConnectionCategory.VIRTUAL; this._ctypes[NetworkManager.SETTING_BOND_SETTING_NAME] = NMConnectionCategory.VIRTUAL;
this._ctypes[NetworkManager.SETTING_BOND_SETTING_NAME] = NMConnectionCategory.VIRTUAL; this._ctypes[NetworkManager.SETTING_BRIDGE_SETTING_NAME] = NMConnectionCategory.VIRTUAL;
this._ctypes[NetworkManager.SETTING_BRIDGE_SETTING_NAME] = NMConnectionCategory.VIRTUAL;
}
this._ctypes[NetworkManager.SETTING_VPN_SETTING_NAME] = NMConnectionCategory.VPN; this._ctypes[NetworkManager.SETTING_VPN_SETTING_NAME] = NMConnectionCategory.VPN;
NMClient.Client.new_async(null, Lang.bind(this, this._clientGot)); NMClient.Client.new_async(null, Lang.bind(this, this._clientGot));
@ -1768,7 +1635,7 @@ const NMApplet = new Lang.Class({
this._devices.wireless = { this._devices.wireless = {
section: new PopupMenu.PopupMenuSection(), section: new PopupMenu.PopupMenuSection(),
devices: [ ], devices: [ ],
item: this._makeToggleItem('wireless', _("Wi-Fi")) item: this._makeWirelessToggle()
}; };
this._devices.wireless.section.addMenuItem(this._devices.wireless.item); this._devices.wireless.section.addMenuItem(this._devices.wireless.item);
this._devices.wireless.section.actor.hide(); this._devices.wireless.section.actor.hide();
@ -1815,14 +1682,14 @@ const NMApplet = new Lang.Class({
} }
}, },
_makeToggleItem: function(type, title) { _makeWirelessToggle: function() {
let item = new NMWirelessSectionTitleMenuItem(this._client, type, title); let item = new NMWirelessSectionTitleMenuItem(this._client);
item.connect('enabled-changed', Lang.bind(this, function(item, enabled) { item.connect('enabled-changed', Lang.bind(this, function(item, enabled) {
let devices = this._devices[type].devices; let devices = this._devices.wireless.devices;
devices.forEach(function(dev) { devices.forEach(function(dev) {
dev.setEnabled(enabled); dev.setEnabled(enabled);
}); });
this._syncSectionTitle(type); this._syncSectionTitle('wireless');
})); }));
return item; return item;
}, },
@ -1900,19 +1767,12 @@ const NMApplet = new Lang.Class({
}, },
_syncDeviceNames: function() { _syncDeviceNames: function() {
if (NMGtk) { let names = NMGtk.utils_disambiguate_device_names(this._nmDevices);
let names = NMGtk.utils_disambiguate_device_names(this._nmDevices); for (let i = 0; i < this._nmDevices.length; i++) {
for (let i = 0; i < this._nmDevices.length; i++) { let device = this._nmDevices[i];
let device = this._nmDevices[i]; device._description = names[i];
device._description = names[i]; if (device._delegate)
if (device._delegate)
device._delegate.syncDescription();
}
} else {
for (let i = 0; i < this._nmDevices.length; i++) {
let device = this._nmDevices[i];
device._delegate.syncDescription(); device._delegate.syncDescription();
}
} }
}, },
@ -1948,11 +1808,6 @@ const NMApplet = new Lang.Class({
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) { wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
this._syncSectionTitle(dev.category); this._syncSectionTitle(dev.category);
})); }));
wrapper._destroyId = wrapper.connect('destroy', function(wrapper) {
wrapper.disconnect(wrapper._activationFailedId);
wrapper.disconnect(wrapper._deviceStateChangedId);
wrapper.disconnect(wrapper._destroyId);
});
let section = this._devices[wrapper.category].section; let section = this._devices[wrapper.category].section;
section.addMenuItem(wrapper.statusItem); section.addMenuItem(wrapper.statusItem);
@ -1984,6 +1839,8 @@ const NMApplet = new Lang.Class({
}, },
_removeDeviceWrapper: function(wrapper) { _removeDeviceWrapper: function(wrapper) {
wrapper.disconnect(wrapper._activationFailedId);
wrapper.disconnect(wrapper._deviceStateChangedId);
wrapper.destroy(); wrapper.destroy();
let devices = this._devices[wrapper.category].devices; let devices = this._devices[wrapper.category].devices;
@ -2134,25 +1991,7 @@ const NMApplet = new Lang.Class({
return false; return false;
}, },
_readConnections: function() { _addConnection: function(connection) {
let connections = this._settings.list_connections();
for (let i = 0; i < connections.length; i++) {
let connection = connections[i];
if (this._ignoreConnection(connection))
continue;
if (connection._updatedId) {
// connection was already seen (for example because NetworkManager was restarted)
continue;
}
connection._removedId = connection.connect('removed', Lang.bind(this, this._connectionRemoved));
connection._updatedId = connection.connect('updated', Lang.bind(this, this._updateConnection));
this._updateConnection(connection);
this._connections.push(connection);
}
},
_newConnection: function(settings, connection) {
if (this._ignoreConnection(connection)) if (this._ignoreConnection(connection))
return; return;
if (connection._updatedId) { if (connection._updatedId) {
@ -2165,14 +2004,22 @@ const NMApplet = new Lang.Class({
this._updateConnection(connection); this._updateConnection(connection);
this._connections.push(connection); this._connections.push(connection);
},
_readConnections: function() {
let connections = this._settings.list_connections();
connections.forEach(Lang.bind(this, this._addConnection));
},
_newConnection: function(settings, connection) {
this._addConnection(connection);
this._updateIcon(); this._updateIcon();
}, },
_connectionRemoved: function(connection) { _connectionRemoved: function(connection) {
let pos = this._connections.indexOf(connection); let pos = this._connections.indexOf(connection);
if (pos != -1) if (pos != -1)
this._connections.splice(connection); this._connections.splice(connection, 1);
let section = connection._section; let section = connection._section;

View File

@ -91,7 +91,8 @@ 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); let spinnerIcon = global.datadir + '/theme/process-working.svg';
this._workSpinner = new Panel.AnimatedIcon(spinnerIcon, LoginDialog.WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0; this._workSpinner.actor.opacity = 0;
this.allowCancel = false; this.allowCancel = false;

View File

@ -150,6 +150,14 @@ const ViewSelector = new Lang.Class({
Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.KeyBindingMode.OVERVIEW,
Lang.bind(this, this._toggleAppsPage)); Lang.bind(this, this._toggleAppsPage));
Main.wm.addKeybinding('toggle-overview',
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW,
Lang.bind(Main.overview, Main.overview.toggle));
}, },
_toggleAppsPage: function() { _toggleAppsPage: function() {
@ -178,6 +186,10 @@ const ViewSelector = new Lang.Class({
Main.overview.fadeInDesktop(); Main.overview.fadeInDesktop();
}, },
setWorkspacesFullGeometry: function(geom) {
this._workspacesDisplay.setWorkspacesFullGeometry(geom);
},
hide: function() { hide: function() {
this._workspacesDisplay.hide(); this._workspacesDisplay.hide();
}, },

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

@ -753,13 +753,6 @@ const LayoutStrategy = new Lang.Class({
layout.space = space; layout.space = space;
}, },
_getDistance: function (row, actor) {
let dist_x = actor.x - row.x;
let dist_y = actor.y - row.y;
return Math.sqrt(Math.pow(dist_x, 2) + Math.pow(dist_y, 2));
},
computeWindowSlots: function(layout, area) { computeWindowSlots: function(layout, area) {
this._computeRowSizes(layout); this._computeRowSizes(layout);
@ -767,28 +760,36 @@ const LayoutStrategy = new Lang.Class({
let slots = []; let slots = [];
let y = 0; // Do this in three parts.
let height = 0;
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
let row = rows[i]; let row = rows[i];
row.x = area.x + (area.width - row.width) / 2; height += row.height + this._rowSpacing;
row.y = area.y + y;
y += row.height + this._rowSpacing;
row.windows.sort(Lang.bind(this, function(a, b) {
return this._getDistance(row, a.realWindow) - this._getDistance(row, b.realWindow);
}));
} }
let height = y - this._rowSpacing; height -= this._rowSpacing;
let baseY = (area.height - height) / 2;
let y = 0;
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
// If this window layout row doesn't fit in the actual
// geometry, then apply an additional scale to it.
row.additionalScale = Math.min(1, area.width / row.width, area.height / height);
row.x = area.x + (Math.max(area.width - row.width, 0) / 2) * row.additionalScale;
row.y = area.y + (y + Math.max(area.height - height, 0) / 2) * row.additionalScale;
y += row.height + this._rowSpacing;
}
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
let row = rows[i]; let row = rows[i];
row.y += baseY;
let x = row.x; let x = row.x;
for (let j = 0; j < row.windows.length; j++) { for (let j = 0; j < row.windows.length; j++) {
let window = row.windows[j]; let window = row.windows[j];
let s = scale * this._computeWindowScale(window); let s = scale * this._computeWindowScale(window) * row.additionalScale;
let cellWidth = window.actor.width * s; let cellWidth = window.actor.width * s;
let cellHeight = window.actor.height * s; let cellHeight = window.actor.height * s;
@ -832,6 +833,13 @@ const UnalignedLayoutStrategy = new Lang.Class({
return false; return false;
}, },
_sortRow: function(row) {
// Sort windows horizontally to minimize travel distance
row.windows.sort(function(a, b) {
return a.realWindow.x - b.realWindow.x;
});
},
computeLayout: function(windows, layout) { computeLayout: function(windows, layout) {
let numRows = layout.numRows; let numRows = layout.numRows;
@ -862,6 +870,7 @@ const UnalignedLayoutStrategy = new Lang.Class({
row.windows.push(window); row.windows.push(window);
row.fullWidth += width; row.fullWidth += width;
} else { } else {
this._sortRow(row);
break; break;
} }
} }
@ -883,6 +892,14 @@ const UnalignedLayoutStrategy = new Lang.Class({
} }
}); });
function padArea(area, padding) {
return {
x: area.x + padding.left,
y: area.y + padding.top,
width: area.width - padding.left - padding.right,
height: area.height - padding.top - padding.bottom,
};
}
/** /**
* @metaWorkspace: a #Meta.Workspace, or null * @metaWorkspace: a #Meta.Workspace, or null
@ -894,10 +911,19 @@ const Workspace = new Lang.Class({
// When dragging a window, we use this slot for reserve space. // When dragging a window, we use this slot for reserve space.
this._reservedSlot = null; this._reservedSlot = null;
this.metaWorkspace = metaWorkspace; this.metaWorkspace = metaWorkspace;
this._x = 0;
this._y = 0; // The full geometry is the geometry we should try and position
this._width = 0; // windows for. The actual geometry we allocate may be less than
this._height = 0; // this, like if the workspace switcher is slid out.
this._fullGeometry = null;
// The actual geometry is the geometry we need to arrange windows
// in. If this is a smaller area than the full geometry, we'll
// do some simple aspect ratio like math to fit the layout calculated
// for the full geometry into this area.
this._actualGeometry = null;
this._currentLayout = null;
this.monitorIndex = monitorIndex; this.monitorIndex = monitorIndex;
this._monitor = Main.layoutManager.monitors[this.monitorIndex]; this._monitor = Main.layoutManager.monitors[this.monitorIndex];
@ -947,23 +973,22 @@ const Workspace = new Lang.Class({
this._positionWindowsFlags = 0; this._positionWindowsFlags = 0;
this._positionWindowsId = 0; this._positionWindowsId = 0;
this._currentLayout = null;
}, },
setGeometry: function(x, y, width, height) { setFullGeometry: function(geom) {
this._x = x; this._fullGeometry = geom;
this._y = y; this._recalculateWindowPositions(WindowPositionFlags.NONE);
this._width = width; },
this._height = height;
setActualGeometry: function(geom) {
this._actualGeometry = geom;
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
this._dropRect.set_position(x, y); this._dropRect.set_position(geom.x, geom.y);
this._dropRect.set_size(width, height); this._dropRect.set_size(geom.width, geom.height);
this._updateWindowPositions(WindowPositionFlags.NONE);
return false; return false;
})); }));
this.positionWindows(WindowPositionFlags.NONE);
}, },
_lookupIndex: function (metaWindow) { _lookupIndex: function (metaWindow) {
@ -991,37 +1016,32 @@ const Workspace = new Lang.Class({
clone = null; clone = null;
this._reservedSlot = clone; this._reservedSlot = clone;
this._currentLayout = null; this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
this.positionWindows(WindowPositionFlags.ANIMATE);
}, },
/** _recalculateWindowPositions: function(flags) {
* positionWindows:
* @flags:
* INITIAL - this is the initial positioning of the windows.
* ANIMATE - Indicates that we need animate changing position.
*/
positionWindows: function(flags) {
this._positionWindowsFlags |= flags; this._positionWindowsFlags |= flags;
if (this._positionWindowsId > 0) if (this._positionWindowsId > 0)
return; return;
this._positionWindowsId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { this._positionWindowsId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
this._realPositionWindows(this._positionWindowsFlags); this._realRecalculateWindowPositions(this._positionWindowsFlags);
this._positionWindowsFlags = 0; this._positionWindowsFlags = 0;
this._positionWindowsId = 0; this._positionWindowsId = 0;
return false; return false;
})); }));
}, },
_realPositionWindows : function(flags) { _realRecalculateWindowPositions: function(flags) {
if (this._repositionWindowsId > 0) { if (this._repositionWindowsId > 0) {
Mainloop.source_remove(this._repositionWindowsId); Mainloop.source_remove(this._repositionWindowsId);
this._repositionWindowsId = 0; this._repositionWindowsId = 0;
} }
let clones = this._windows.slice(); let clones = this._windows.slice();
if (clones.length == 0)
return;
clones.sort(function(a, b) { clones.sort(function(a, b) {
return a.metaWindow.get_stable_sequence() - b.metaWindow.get_stable_sequence(); return a.metaWindow.get_stable_sequence() - b.metaWindow.get_stable_sequence();
@ -1030,11 +1050,25 @@ const Workspace = new Lang.Class({
if (this._reservedSlot) if (this._reservedSlot)
clones.push(this._reservedSlot); clones.push(this._reservedSlot);
this._currentLayout = this._computeLayout(clones);
this._updateWindowPositions(flags);
},
_updateWindowPositions: function(flags) {
if (this._currentLayout == null) {
this._recalculateWindowPositions(flags);
return;
}
let initialPositioning = flags & WindowPositionFlags.INITIAL; let initialPositioning = flags & WindowPositionFlags.INITIAL;
let animate = flags & WindowPositionFlags.ANIMATE; let animate = flags & WindowPositionFlags.ANIMATE;
// Start the animations let layout = this._currentLayout;
let slots = this._computeAllWindowSlots(clones); let strategy = layout.strategy;
let [, , padding] = this._getSpacingAndPadding();
let area = padArea(this._actualGeometry, padding);
let slots = strategy.computeWindowSlots(layout, area);
let currentWorkspace = global.screen.get_active_workspace(); let currentWorkspace = global.screen.get_active_workspace();
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace; let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
@ -1148,8 +1182,8 @@ const Workspace = new Lang.Class({
let [x, y, mask] = global.get_pointer(); let [x, y, mask] = global.get_pointer();
let pointerHasMoved = (this._cursorX != x && this._cursorY != y); let pointerHasMoved = (this._cursorX != x && this._cursorY != y);
let inWorkspace = (this._x < x && x < this._x + this._width && let inWorkspace = (this._fullGeometry.x < x && x < this._fullGeometry.x + this._fullGeometry.width &&
this._y < y && y < this._y + this._height); this._fullGeometry.y < y && y < this._fullGeometry.y + this._fullGeometry.height);
if (pointerHasMoved && inWorkspace) { if (pointerHasMoved && inWorkspace) {
// store current cursor position // store current cursor position
@ -1164,7 +1198,7 @@ const Workspace = new Lang.Class({
return true; return true;
} }
this.positionWindows(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
return false; return false;
}, },
@ -1269,7 +1303,7 @@ const Workspace = new Lang.Class({
} }
this._currentLayout = null; this._currentLayout = null;
this.positionWindows(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
}, },
_windowAdded : function(metaWorkspace, metaWin) { _windowAdded : function(metaWorkspace, metaWin) {
@ -1306,13 +1340,8 @@ const Workspace = new Lang.Class({
// Animate the full-screen to Overview transition. // Animate the full-screen to Overview transition.
zoomToOverview : function() { zoomToOverview : function() {
this._currentLayout = null;
// Position and scale the windows. // Position and scale the windows.
if (Main.overview.animationInProgress) this._recalculateWindowPositions(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
else
this.positionWindows(WindowPositionFlags.INITIAL);
}, },
// Animates the return from Overview mode // Animates the return from Overview mode
@ -1436,7 +1465,7 @@ const Workspace = new Lang.Class({
})); }));
clone.connect('size-changed', clone.connect('size-changed',
Lang.bind(this, function() { Lang.bind(this, function() {
this.positionWindows(0); this._recalculateWindowPositions(WindowPositionFlags.NONE);
})); }));
this.actor.add_actor(clone.actor); this.actor.add_actor(clone.actor);
@ -1485,12 +1514,14 @@ const Workspace = new Lang.Class({
} }
}, },
_computeLayout: function(windows, area, rowSpacing, columnSpacing) { _getBestLayout: function(windows, area, rowSpacing, columnSpacing) {
// We look for the largest scale that allows us to fit the // We look for the largest scale that allows us to fit the
// largest row/tallest column on the workspace. // largest row/tallest column on the workspace.
let lastLayout = {}; let lastLayout = {};
let strategy = new UnalignedLayoutStrategy(this._monitor, rowSpacing, columnSpacing);
for (let numRows = 1; ; numRows++) { for (let numRows = 1; ; numRows++) {
let numColumns = Math.ceil(windows.length / numRows); let numColumns = Math.ceil(windows.length / numRows);
@ -1500,8 +1531,6 @@ const Workspace = new Lang.Class({
if (numColumns == lastLayout.numColumns) if (numColumns == lastLayout.numColumns)
break; break;
let strategy = new UnalignedLayoutStrategy(this._monitor, rowSpacing, columnSpacing);
let layout = { area: area, strategy: strategy, numRows: numRows, numColumns: numColumns }; let layout = { area: area, strategy: strategy, numRows: numRows, numColumns: numColumns };
strategy.computeLayout(windows, layout); strategy.computeLayout(windows, layout);
strategy.computeScaleAndSpace(layout); strategy.computeScaleAndSpace(layout);
@ -1515,18 +1544,7 @@ const Workspace = new Lang.Class({
return lastLayout; return lastLayout;
}, },
_rectEqual: function(one, two) { _getSpacingAndPadding: function() {
if (one == two)
return true;
return (one.x == two.x &&
one.y == two.y &&
one.width == two.width &&
one.height == two.height);
},
_computeAllWindowSlots: function(windows) {
let totalWindows = windows.length;
let node = this.actor.get_theme_node(); let node = this.actor.get_theme_node();
// Window grid spacing // Window grid spacing
@ -1539,21 +1557,14 @@ const Workspace = new Lang.Class({
right: node.get_padding(St.Side.RIGHT), right: node.get_padding(St.Side.RIGHT),
}; };
if (!totalWindows)
return [];
let closeButtonHeight, captionHeight; let closeButtonHeight, captionHeight;
let leftBorder, rightBorder; let leftBorder, rightBorder;
if (this._windowOverlays.length) {
// All of the overlays have the same chrome sizes, // All of the overlays have the same chrome sizes,
// so just pick the first one. // so just pick the first one.
let overlay = this._windowOverlays[0]; let overlay = this._windowOverlays[0];
[closeButtonHeight, captionHeight] = overlay.chromeHeights(); [closeButtonHeight, captionHeight] = overlay.chromeHeights();
[leftBorder, rightBorder] = overlay.chromeWidths(); [leftBorder, rightBorder] = overlay.chromeWidths();
} else {
[closeButtonHeight, captionHeight] = [0, 0];
[leftBorder, rightBorder] = [0, 0];
}
rowSpacing += captionHeight; rowSpacing += captionHeight;
columnSpacing += (rightBorder + leftBorder) / 2; columnSpacing += (rightBorder + leftBorder) / 2;
@ -1562,25 +1573,13 @@ const Workspace = new Lang.Class({
padding.left += leftBorder; padding.left += leftBorder;
padding.right += rightBorder; padding.right += rightBorder;
let area = { return [rowSpacing, columnSpacing, padding];
x: this._x + padding.left, },
y: this._y + padding.top,
width: this._width - padding.left - padding.right,
height: this._height - padding.top - padding.bottom,
};
if (!this._currentLayout) _computeLayout: function(windows) {
this._currentLayout = this._computeLayout(windows, area, rowSpacing, columnSpacing); let [rowSpacing, columnSpacing, padding] = this._getSpacingAndPadding();
let area = padArea(this._fullGeometry, padding);
let layout = this._currentLayout; return this._getBestLayout(windows, area, rowSpacing, columnSpacing);
let strategy = layout.strategy;
if (!this._rectEqual(area, layout.area)) {
layout.area = area;
strategy.computeScaleAndSpace(layout);
}
return strategy.computeWindowSlots(layout, area);
}, },
_onCloneSelected : function (clone, time) { _onCloneSelected : function (clone, time) {

View File

@ -23,6 +23,18 @@ const MAX_WORKSPACES = 16;
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides'; const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
function rectEqual(one, two) {
if (one == two)
return true;
if (!one || !two)
return false;
return (one.x == two.x &&
one.y == two.y &&
one.width == two.width &&
one.height == two.height);
}
const WorkspacesView = new Lang.Class({ const WorkspacesView = new Lang.Class({
Name: 'WorkspacesView', Name: 'WorkspacesView',
@ -43,10 +55,9 @@ const WorkspacesView = new Lang.Class({
this._updateWorkspaceActors(false); this._updateWorkspaceActors(false);
})); }));
this._width = 0; this._fullGeometry = null;
this._height = 0; this._actualGeometry = null;
this._x = 0;
this._y = 0;
this._spacing = 0; this._spacing = 0;
this._animating = false; // tweening this._animating = false; // tweening
this._scrolling = false; // swipe-scrolling this._scrolling = false; // swipe-scrolling
@ -85,8 +96,8 @@ const WorkspacesView = new Lang.Class({
this._overviewShownId = this._overviewShownId =
Main.overview.connect('shown', Main.overview.connect('shown',
Lang.bind(this, function() { Lang.bind(this, function() {
this.actor.set_clip(this._x, this._y, this.actor.set_clip(this._fullGeometry.x, this._fullGeometry.y,
this._width, this._height); this._fullGeometry.width, this._fullGeometry.height);
})); }));
this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex, this.scrollAdjustment = new St.Adjustment({ value: activeWorkspaceIndex,
@ -124,10 +135,8 @@ const WorkspacesView = new Lang.Class({
continue; continue;
let ws = new Workspace.Workspace(null, i); let ws = new Workspace.Workspace(null, i);
ws.setGeometry(monitors[i].x, ws.setFullGeometry(monitors[i]);
monitors[i].y, ws.setActualGeometry(monitors[i]);
monitors[i].width,
monitors[i].height);
global.overlay_group.add_actor(ws.actor); global.overlay_group.add_actor(ws.actor);
this._extraWorkspaces.push(ws); this._extraWorkspaces.push(ws);
} }
@ -139,18 +148,24 @@ const WorkspacesView = new Lang.Class({
this._extraWorkspaces = []; this._extraWorkspaces = [];
}, },
setGeometry: function(x, y, width, height) { setFullGeometry: function(geom) {
if (this._x == x && this._y == y && if (rectEqual(this._fullGeometry, geom))
this._width == width && this._height == height) return;
return;
this._width = width; this._fullGeometry = geom;
this._height = height;
this._x = x;
this._y = y;
for (let i = 0; i < this._workspaces.length; i++) for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setGeometry(x, y, width, height); this._workspaces[i].setFullGeometry(geom);
},
setActualGeometry: function(geom) {
if (rectEqual(this._actualGeometry, geom))
return;
this._actualGeometry = geom;
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setActualGeometry(geom);
}, },
_lookupWorkspaceForMetaWindow: function (metaWindow) { _lookupWorkspaceForMetaWindow: function (metaWindow) {
@ -210,7 +225,7 @@ const WorkspacesView = new Lang.Class({
Tweener.removeTweens(workspace.actor); Tweener.removeTweens(workspace.actor);
let y = (w - active) * (this._height + this._spacing); let y = (w - active) * (this._fullGeometry.height + this._spacing);
if (showAnimation) { if (showAnimation) {
let params = { y: y, let params = { y: y,
@ -281,8 +296,9 @@ const WorkspacesView = new Lang.Class({
if (newNumWorkspaces > oldNumWorkspaces) { if (newNumWorkspaces > oldNumWorkspaces) {
for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) { for (let w = oldNumWorkspaces; w < newNumWorkspaces; w++) {
this._workspaces[w].setGeometry(this._x, this._y, this._workspaces[w].setFullGeometry(this._fullGeometry);
this._width, this._height); if (this._actualGeometry)
this._workspaces[w].setActualGeometry(this._actualGeometry);
this.actor.add_actor(this._workspaces[w].actor); this.actor.add_actor(this._workspaces[w].actor);
} }
@ -430,7 +446,7 @@ const WorkspacesDisplay = new Lang.Class({
_init: function() { _init: function() {
this.actor = new St.Widget({ clip_to_allocation: true }); this.actor = new St.Widget({ clip_to_allocation: true });
this.actor.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesGeometry)); this.actor.connect('notify::allocation', Lang.bind(this, this._updateWorkspacesActualGeometry));
this.actor.connect('parent-set', Lang.bind(this, this._parentSet)); this.actor.connect('parent-set', Lang.bind(this, this._parentSet));
let clickAction = new Clutter.ClickAction() let clickAction = new Clutter.ClickAction()
@ -484,6 +500,8 @@ const WorkspacesDisplay = new Lang.Class({
this._notifyOpacityId = 0; this._notifyOpacityId = 0;
this._scrollEventId = 0; this._scrollEventId = 0;
this._fullGeometry = null;
}, },
_onPan: function(action) { _onPan: function(action) {
@ -572,7 +590,8 @@ const WorkspacesDisplay = new Lang.Class({
this._workspacesViews.push(view); this._workspacesViews.push(view);
} }
this._updateWorkspacesGeometry(); this._updateWorkspacesFullGeometry();
this._updateWorkspacesActualGeometry();
for (let i = 0; i < this._workspacesViews.length; i++) for (let i = 0; i < this._workspacesViews.length; i++)
global.overlay_group.add_actor(this._workspacesViews[i].actor); global.overlay_group.add_actor(this._workspacesViews[i].actor);
@ -632,31 +651,48 @@ const WorkspacesDisplay = new Lang.Class({
})); }));
}, },
_updateWorkspacesGeometry: function() { // This geometry should always be the fullest geometry
// the workspaces switcher can ever be allocated, as if
// the sliding controls were never slid in at all.
setWorkspacesFullGeometry: function(geom) {
this._fullGeometry = geom;
this._updateWorkspacesFullGeometry();
},
_updateWorkspacesFullGeometry: function() {
if (!this._workspacesViews.length) if (!this._workspacesViews.length)
return; return;
let fullWidth = this.actor.allocation.x2 - this.actor.allocation.x1;
let fullHeight = this.actor.allocation.y2 - this.actor.allocation.y1;
let width = fullWidth;
let height = fullHeight;
let [x, y] = this.actor.get_transformed_position();
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
let monitors = Main.layoutManager.monitors; let monitors = Main.layoutManager.monitors;
let m = 0; let m = 0;
for (let i = 0; i < monitors.length; i++) { for (let i = 0; i < monitors.length; i++) {
if (i == this._primaryIndex) { if (i == this._primaryIndex) {
this._workspacesViews[m].setGeometry(x, y, width, height); this._workspacesViews[m].setFullGeometry(this._fullGeometry);
m++; m++;
} else if (!this._workspacesOnlyOnPrimary) { } else if (!this._workspacesOnlyOnPrimary) {
this._workspacesViews[m].setGeometry(monitors[i].x, this._workspacesViews[m].setFullGeometry(monitors[i]);
monitors[i].y, m++;
monitors[i].width, }
monitors[i].height); }
},
_updateWorkspacesActualGeometry: function() {
if (!this._workspacesViews.length)
return;
let [x, y] = this.actor.get_transformed_position();
let width = this.actor.allocation.x2 - this.actor.allocation.x1;
let height = this.actor.allocation.y2 - this.actor.allocation.y1;
let geometry = { x: x, y: y, width: width, height: height };
let monitors = Main.layoutManager.monitors;
let m = 0;
for (let i = 0; i < monitors.length; i++) {
if (i == this._primaryIndex) {
this._workspacesViews[m].setActualGeometry(geometry);
m++;
} else if (!this._workspacesOnlyOnPrimary) {
this._workspacesViews[m].setActualGeometry(monitors[i]);
m++; m++;
} }
} }

View File

@ -28,6 +28,7 @@ gu
he he
hi hi
hu hu
ia
id id
it it
ja ja

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

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-23 11:49+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"
@ -131,8 +131,8 @@ 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"
@ -168,8 +168,8 @@ 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 ""
@ -314,9 +314,9 @@ 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\" " "Настройка паказу вокнаў у пераключальніку. Магчымыя значэнні: \"thumbnail-"
"(паказваць мініяцюры вокнаў), \"app-icon-only\" (паказваць толькі значкі праграм) " "only\" (паказваць мініяцюры вокнаў), \"app-icon-only\" (паказваць толькі "
"і \"both\" (адразу ўсё)." "значкі праграм) і \"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"
@ -325,8 +325,7 @@ 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."
"Гэты ключ падмяняе ключ у 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"
@ -337,7 +336,8 @@ 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." "Гэты ключ падмяняе ключ у 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"
@ -508,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
@ -1179,7 +1179,9 @@ msgstr "Паказваць памылкі"
msgid "Enabled" msgid "Enabled"
msgstr "Уключана" msgstr "Уключана"
#: ../js/ui/lookingGlass.js:769 #. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Выключана" msgstr "Выключана"
@ -1309,7 +1311,7 @@ msgstr[2] "%d новых апавяшчэнняў"
msgid "Lock" msgid "Lock"
msgstr "Заблакіраваць" msgstr "Заблакіраваць"
#: ../js/ui/screenShield.js:637 #: ../js/ui/screenShield.js:640
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME патрабуе блакіравання экрана" msgstr "GNOME патрабуе блакіравання экрана"
@ -1320,11 +1322,11 @@ 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:1194 #: ../js/ui/screenShield.js:761 ../js/ui/screenShield.js:1197
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Не ўдалося заблакіраваць" msgstr "Не ўдалося заблакіраваць"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1195 #: ../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 "Блакіраванне стрымана праграмай"
@ -1881,6 +1883,30 @@ msgstr "\"%s\" гатова"
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "Каляндар Evolution" msgstr "Каляндар 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 выхад"
msgstr[1] "%u выхады"
msgstr[2] "%u выхадаў"
#. 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 уваход"
msgstr[1] "%u уваходы"
msgstr[2] "%u уваходаў"
#: ../src/gvc/gvc-mixer-control.c:2371
msgid "System Sounds"
msgstr "Сістэмныя гукі"
#: ../src/main.c:347 #: ../src/main.c:347
msgid "Print version" msgid "Print version"
msgstr "Вывесці нумар версіі праграмы" msgstr "Вывесці нумар версіі праграмы"
@ -1913,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 "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"

312
po/cs.po
View File

@ -5,23 +5,23 @@
# Andre Klapper <ak-47@gmx.net>, 2009. # Andre Klapper <ak-47@gmx.net>, 2009.
# Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012. # Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012.
# Adam Matoušek <adydas95@gmail.com>, 2012, 2013. # Adam Matoušek <adydas95@gmail.com>, 2012, 2013.
# Marek Černocký <marek@manet.cz>, 2012. # Marek Černocký <marek@manet.cz>, 2012, 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-04 08:38+0000\n" "POT-Creation-Date: 2013-04-26 16:24+0000\n"
"PO-Revision-Date: 2013-03-08 19:47+0100\n" "PO-Revision-Date: 2013-04-26 19:18+0200\n"
"Last-Translator: Adam Matoušek <adamatousek@gmail.com>\n" "Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n" "Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n" "Language: cs\n"
"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=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Poedit 1.5.4\n" "X-Generator: Gtranslator 2.91.6\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
@ -45,10 +45,14 @@ msgid "Focus the active notification"
msgstr "Zaměřovat aktivní upozornění" msgstr "Zaměřovat aktivní upozornění"
#: ../data/50-gnome-shell-system.xml.in.h:4 #: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Show the overview"
msgstr "Zobrazit přehled"
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Show all applications" msgid "Show all applications"
msgstr "Zobrazit všechny aplikace" msgstr "Zobrazit všechny aplikace"
#: ../data/50-gnome-shell-system.xml.in.h:5 #: ../data/50-gnome-shell-system.xml.in.h:6
msgid "Open the application menu" msgid "Open the application menu"
msgstr "Otevřít nabídku aplikací" msgstr "Otevřít nabídku aplikací"
@ -134,8 +138,8 @@ 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 ""
"Každá kategorie v tomto seznamu bude zobrazena jako složka, místo toho " "Každá kategorie v tomto seznamu bude zobrazena jako složka, místo toho aby "
"aby byla zobrazena v hlavním pohledu." "byla zobrazena v hlavním pohledu."
#: ../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"
@ -219,42 +223,50 @@ msgid ""
msgstr "Klávesová zkratka k otevření nabídky aplikací v Přehledu aktivit" msgstr "Klávesová zkratka k otevření nabídky aplikací v Přehledu aktivit"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to open the overview"
msgstr "Klávesová zkratka k otevření přehledu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to open the Activities Overview."
msgstr "Klávesová zkratka k otevření přehledu činností"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Keybinding to toggle the visibility of the message tray" msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv" msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26 #: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "Keybinding to toggle the visibility of the message tray." msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv." msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27 #: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
msgstr "Klávesová zkratka k zaměření aktivního upozornění" msgstr "Klávesová zkratka k zaměření aktivního upozornění"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Keybinding to focus the active notification." msgid "Keybinding to focus the active notification."
msgstr "Klávesová zkratka k zaměření aktivního upozornění." msgstr "Klávesová zkratka k zaměření aktivního upozornění."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Keybinding to toggle the screen recorder" msgid "Keybinding to toggle the screen recorder"
msgstr "Klávesová zkratka k záznamu obrazovky" msgstr "Klávesová zkratka k záznamu obrazovky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30 #: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid "Keybinding to start/stop the builtin screen recorder." msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Klávesová zkratka k započnutí nebo ukončení záznamu dění na obrazovce." msgstr "Klávesová zkratka k započnutí nebo ukončení záznamu dění na obrazovce."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31 #: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Which keyboard to use" msgid "Which keyboard to use"
msgstr "Která klávesnice se má používat" msgstr "Která klávesnice se má používat"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The type of keyboard to use." msgid "The type of keyboard to use."
msgstr "Typ klávesnice, který se má používat." msgstr "Typ klávesnice, který se má používat."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Framerate used for recording screencasts." msgid "Framerate used for recording screencasts."
msgstr "Frekvence snímků při nahrávání dění na obrazovce." msgstr "Frekvence snímků při nahrávání dění na obrazovce."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:36
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."
@ -262,11 +274,11 @@ msgstr ""
"Frekvence snímků za sekundu výsledné nahrávky dění na obrazovce, která byla " "Frekvence snímků za sekundu výsledné nahrávky dění na obrazovce, která byla "
"nahrána záznamovým programem GNOME Shell." "nahrána záznamovým programem GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Roura systému gstreamer určená ke kódování nahrávky dění na obrazovce" msgstr "Roura systému gstreamer určená ke kódování nahrávky dění na obrazovce"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#, no-c-format #, no-c-format
msgid "" msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax " "Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -291,11 +303,11 @@ msgstr ""
"nahráváním do WEBM s kodekem VP8. %T je použito jako zástupný symbol odhadu " "nahráváním do WEBM s kodekem VP8. %T je použito jako zástupný symbol odhadu "
"nejvhodnějšího počtu vláken na systému." "nejvhodnějšího počtu vláken na systému."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "File extension used for storing the screencast" msgid "File extension used for storing the screencast"
msgstr "Přípona souboru s nahrávkou dění na obrazovce" msgstr "Přípona souboru s nahrávkou dění na obrazovce"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39 #: ../data/org.gnome.shell.gschema.xml.in.in.h:41
msgid "" msgid ""
"The filename for recorded screencasts will be a unique filename based on the " "The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to " "current date, and use this extension. It should be changed when recording to "
@ -305,11 +317,11 @@ msgstr ""
"názvu vycházejícího z aktuálního data a bude používat tuto příponu. Při " "názvu vycházejícího z aktuálního data a bude používat tuto příponu. Při "
"nahrávání do jiného formátu kontejneru by měla být provedena úprava pravidel." "nahrávání do jiného formátu kontejneru by měla být provedena úprava pravidel."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "The application icon mode." msgid "The application icon mode."
msgstr "Režim ikon aplikací" msgstr "Režim ikon aplikací"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities " "Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -319,20 +331,20 @@ msgstr ""
"only“ (zobrazí náhled okna), „app-icon-only“ (zobrazí pouze ikonu aplikace) " "only“ (zobrazí náhled okna), „app-icon-only“ (zobrazí pouze ikonu aplikace) "
"a „both“ (zobrazí náhled i ikonu)." "a „both“ (zobrazí náhled i ikonu)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "Připojovat modální dialogová okna k rodičovským oknům" msgstr "Připojovat modální dialogová okna k rodičovským oknům"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43 #: ../data/org.gnome.shell.gschema.xml.in.in.h:45
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 "Tento kíč přepisuje klíč v org.gnome.mutter, když běží GNOME Shell." msgstr "Tento kíč přepisuje klíč v org.gnome.mutter, když běží GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Arrangement of buttons on the titlebar" msgid "Arrangement of buttons on the titlebar"
msgstr "Uspořádání tlačítek v záhlaví" msgstr "Uspořádání tlačítek v záhlaví"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45 #: ../data/org.gnome.shell.gschema.xml.in.in.h:47
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."
@ -340,15 +352,15 @@ msgstr ""
"Tento kíč přepisuje klíč v org.gnome.desktop.wm.preferences, když běží GNOME " "Tento kíč přepisuje klíč v org.gnome.desktop.wm.preferences, když běží GNOME "
"Shell." "Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:48
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Nechat okna upuštěná při okraji obrazovky vytvářet dlaždice" msgstr "Nechat okna upuštěná při okraji obrazovky vytvářet dlaždice"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47 #: ../data/org.gnome.shell.gschema.xml.in.in.h:49
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "Pracovní plochy jsou spravovány dynamicky" msgstr "Pracovní plochy jsou spravovány dynamicky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48 #: ../data/org.gnome.shell.gschema.xml.in.in.h:50
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Pracovní plochy pouze na hlavním monitoru" msgstr "Pracovní plochy pouze na hlavním monitoru"
@ -374,36 +386,36 @@ msgstr "Sezení…"
#. 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 "Nejste na seznamu?" msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:787 ../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:100
#: ../js/ui/userMenu.js:934 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Zrušit" msgstr "Zrušit"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Přihlásit se" msgstr "Přihlásit se"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgid "Next" msgid "Next"
msgstr "Následující" msgstr "Následující"
#. 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:918 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Uživatelské jméno: " msgstr "Uživatelské jméno: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1174
msgid "Login Window" msgid "Login Window"
msgstr "Přihlašovací okno" msgstr "Přihlašovací okno"
@ -412,8 +424,8 @@ msgstr "Přihlašovací okno"
msgid "Power" msgid "Power"
msgstr "Vypnout" msgstr "Vypnout"
#: ../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 "Uspat do paměti" msgstr "Uspat do paměti"
@ -421,58 +433,58 @@ msgstr "Uspat do paměti"
msgid "Restart" msgid "Restart"
msgstr "Restartovat" msgstr "Restartovat"
#: ../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 "Vypnout" msgstr "Vypnout"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Chyba ověření" msgstr "Chyba ověření"
#. 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 "(nebo otiskněte prst)" msgstr "(nebo otiskněte 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 "(např. uživatel nebo %s)" msgstr "(např. uživatel nebo %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Příkaz nenalezen" msgstr "Příkaz nenalezen"
#. 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 "Nelze analyzovat příkaz:" msgstr "Nelze analyzovat příkaz:"
#: ../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 "Vykonání „%s“ selhalo:" msgstr "Vykonání „%s“ selhalo:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:351
msgid "Frequent" msgid "Frequent"
msgstr "Časté" msgstr "Časté"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:358
msgid "All" msgid "All"
msgstr "Všechny" msgstr "Všechny"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:916
msgid "New Window" msgid "New Window"
msgstr "Nové okno" msgstr "Nové okno"
#: ../js/ui/appDisplay.js:916 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:919 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených" msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:920
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené" msgstr "Přidat mezi oblíbené"
@ -486,7 +498,7 @@ msgstr "%s byl přidán mezi oblíbené."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s byl odstraněn z oblíbených." msgstr "%s byl odstraněn z oblíbených."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:788 #: ../js/ui/backgroundMenu.js:19 ../js/ui/userMenu.js:789
msgid "Settings" msgid "Settings"
msgstr "Nastavení" msgstr "Nastavení"
@ -507,15 +519,15 @@ msgstr "Celý den"
#: ../js/ui/calendar.js:68 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%H.%M" msgstr "%H:%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
msgctxt "event list time" msgctxt "event list time"
msgid "%l\\u2236%M\\u2009%p" msgid "%l\\u2236%M\\u2009%p"
msgstr "%l.%M\\u2009%p" msgstr "%l:%M\\u2009%p"
#. Translators: Calendar grid abbreviation for Sunday. #. Translators: Calendar grid abbreviation for Sunday.
#. * #. *
@ -611,35 +623,35 @@ msgid "S"
msgstr "So" msgstr "So"
#. 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 nenaplánováno" msgstr "Nic nenaplánováno"
#. Translators: Shown on calendar heading when selected day occurs on current year #. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js: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 "Dnes" msgstr "Dnes"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Zítra" msgstr "Zítra"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Tento týden" msgstr "Tento týden"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "Následující týden" msgstr "Následující týden"
@ -655,12 +667,12 @@ msgstr "Externí svazek odpojen"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Výměnná zařízení" msgstr "Výměnná zařízení"
#: ../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 "Otevřít s %s" msgstr "Otevřít s %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Vysunout" msgstr "Vysunout"
@ -769,7 +781,7 @@ msgid "Sorry, that didn't work. Please try again."
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu." msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
#. 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 "Záznam obrazovky z %d %t" msgstr "Záznam obrazovky z %d %t"
@ -1043,7 +1055,7 @@ msgstr "Nastavení data a času"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: ../js/ui/dateMenu.js: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"
@ -1218,24 +1230,24 @@ msgstr "Vymazat zprávy"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Nastavení upozornění" msgstr "Nastavení upozornění"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1710
msgid "No Messages" msgid "No Messages"
msgstr "Žádné zprávy" msgstr "Žádné zprávy"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1783
msgid "Message Tray" msgid "Message Tray"
msgstr "Lišta zpráv" msgstr "Lišta zpráv"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2801
msgid "System Information" msgid "System Information"
msgstr "Informace o systému" msgstr "Informace o systému"
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:374 #: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:378
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Neznámé" msgstr "Neznámé"
#: ../js/ui/overviewControls.js:460 ../js/ui/screenShield.js:153 #: ../js/ui/overviewControls.js:472 ../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 +1259,7 @@ msgstr[2] "%d nových zpráv"
msgid "Undo" msgid "Undo"
msgstr "Zpět" msgstr "Zpět"
#: ../js/ui/overview.js:129 #: ../js/ui/overview.js:127
msgid "Overview" msgid "Overview"
msgstr "Přehled" msgstr "Přehled"
@ -1255,21 +1267,21 @@ msgstr "Přehled"
#. 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:260
msgid "Type to search…" msgid "Type to search…"
msgstr "Vyhledávejte psaním…" msgstr "Vyhledávejte psaním…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:641
msgid "Quit" msgid "Quit"
msgstr "Ukončit" msgstr "Ukončit"
#. 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:692
msgid "Activities" msgid "Activities"
msgstr "Činnosti" msgstr "Činnosti"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:989
msgid "Top Bar" msgid "Top Bar"
msgstr "Horní lišta" msgstr "Horní lišta"
@ -1278,25 +1290,25 @@ msgstr "Horní lišta"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle #. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will #. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches. #. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:727 #: ../js/ui/popupMenu.js:718
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 "Zadejte příkaz:" msgstr "Zadejte příkaz:"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:110
msgid "Close" msgid "Close"
msgstr "Zavřít" msgstr "Zavřít"
#. 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: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"
@ -1304,11 +1316,11 @@ msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění" msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění" msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:442 ../js/ui/userMenu.js:806 #: ../js/ui/screenShield.js:438 ../js/ui/userMenu.js:807
msgid "Lock" msgid "Lock"
msgstr "Uzamknout" msgstr "Uzamknout"
#: ../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 potřebuje uzamknout obrazovku" msgstr "GNOME potřebuje uzamknout obrazovku"
@ -1319,19 +1331,19 @@ msgstr "GNOME potřebuje uzamknout obrazovku"
#. #.
#. 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 "Nelze uzamknout obrazovku" msgstr "Nelze uzamknout obrazovku"
#: ../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 "Zamknutí bylo zablokováno některou z aplikací" msgstr "Zamknutí bylo zablokováno některou z aplikací"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
msgid "Searching…" msgid "Searching…"
msgstr "Hledá se…" msgstr "Hledá se…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Žádné výsledky." msgstr "Žádné výsledky."
@ -1343,11 +1355,11 @@ msgstr "Kopírovat"
msgid "Paste" msgid "Paste"
msgstr "Vložit" msgstr "Vložit"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:101
msgid "Show Text" msgid "Show Text"
msgstr "Zobrazit text" msgstr "Zobrazit text"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:103
msgid "Hide Text" msgid "Hide Text"
msgstr "Skrýt text" msgstr "Skrýt text"
@ -1359,7 +1371,7 @@ msgstr "Heslo"
msgid "Remember Password" msgid "Remember Password"
msgstr "Pamatovat si heslo" msgstr "Pamatovat si heslo"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:114
msgid "Unlock" msgid "Unlock"
msgstr "Odemknout" msgstr "Odemknout"
@ -1414,7 +1426,7 @@ msgstr "Styl velkého textu"
#: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32 #: ../js/ui/status/bluetooth.js:28 ../js/ui/status/bluetooth.js:32
#: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321 #: ../js/ui/status/bluetooth.js:289 ../js/ui/status/bluetooth.js:321
#: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388 #: ../js/ui/status/bluetooth.js:357 ../js/ui/status/bluetooth.js:388
#: ../js/ui/status/network.js:826 #: ../js/ui/status/network.js:761
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
@ -1435,7 +1447,7 @@ msgid "Bluetooth Settings"
msgstr "Nastavit Bluetooth" msgstr "Nastavit Bluetooth"
#. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill #. TRANSLATORS: this means that bluetooth was disabled by hardware rfkill
#: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:104 ../js/ui/status/network.js:149
msgid "hardware disabled" msgid "hardware disabled"
msgstr "zařízení zakázáno" msgstr "zařízení zakázáno"
@ -1443,12 +1455,12 @@ msgstr "zařízení zakázáno"
msgid "Connection" msgid "Connection"
msgstr "Připojení" msgstr "Připojení"
#: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:460 #: ../js/ui/status/bluetooth.js:208 ../js/ui/status/network.js:426
msgid "disconnecting..." msgid "disconnecting..."
msgstr "odpojování…" msgstr "odpojování…"
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:466 #: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:432
#: ../js/ui/status/network.js:1546 #: ../js/ui/status/network.js:1417
msgid "connecting..." msgid "connecting..."
msgstr "připojování…" msgstr "připojování…"
@ -1540,117 +1552,91 @@ msgstr "Místní a jazyková nastavení"
msgid "Volume, network, battery" msgid "Volume, network, battery"
msgstr "Hlasitost, síť, baterie" msgstr "Hlasitost, síť, baterie"
#: ../js/ui/status/network.js:104 #: ../js/ui/status/network.js:82
msgid "<unknown>" msgid "<unknown>"
msgstr "<neznámé>" msgstr "<neznámé>"
#: ../js/ui/status/network.js:134
msgid "Wi-Fi"
msgstr "Wi-Fi"
#. Translators: this indicates that wireless or wwan is disabled by hardware killswitch #. Translators: this indicates that wireless or wwan is disabled by hardware killswitch
#: ../js/ui/status/network.js:200 #: ../js/ui/status/network.js:171
msgid "disabled" msgid "disabled"
msgstr "zakázáno" msgstr "zakázáno"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) #. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:458 #: ../js/ui/status/network.js:424
msgid "unmanaged" msgid "unmanaged"
msgstr "nespravováno" msgstr "nespravováno"
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1549 #: ../js/ui/status/network.js:435 ../js/ui/status/network.js:1420
msgid "authentication required" msgid "authentication required"
msgstr "je vyžadováno ověření" msgstr "je vyžadováno ověření"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing #. module, which is missing
#: ../js/ui/status/network.js:479 #: ../js/ui/status/network.js:445
msgid "firmware missing" msgid "firmware missing"
msgstr "nedostupný firmware" msgstr "nedostupný firmware"
#. Translators: this is for wired network devices that are physically disconnected #. Translators: this is for wired network devices that are physically disconnected
#: ../js/ui/status/network.js:486 #: ../js/ui/status/network.js:452
msgid "cable unplugged" msgid "cable unplugged"
msgstr "kabel byl odpojen" msgstr "kabel byl odpojen"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage #. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:491 #: ../js/ui/status/network.js:457
msgid "unavailable" msgid "unavailable"
msgstr "nedostupné" msgstr "nedostupné"
#: ../js/ui/status/network.js:493 ../js/ui/status/network.js:1551 #: ../js/ui/status/network.js:459 ../js/ui/status/network.js:1422
msgid "connection failed" msgid "connection failed"
msgstr "připojení selhalo" msgstr "připojení selhalo"
#: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1435 #: ../js/ui/status/network.js:512 ../js/ui/status/network.js:1306
#: ../js/ui/status/network.js:1627 #: ../js/ui/status/network.js:1498
msgid "More…" msgid "More…"
msgstr "Další…" msgstr "Další…"
#. TRANSLATORS: this is the indication that a connection for another logged in user is active, #. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name) #. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1365 #: ../js/ui/status/network.js:540 ../js/ui/status/network.js:1261
msgid "Connected (private)" msgid "Connected (private)"
msgstr "Připojení (soukromé)" msgstr "Připojení (soukromé)"
#: ../js/ui/status/network.js:667 #: ../js/ui/status/network.js:619
msgid "Wired" msgid "Wired"
msgstr "Drátová" msgstr "Drátová"
#: ../js/ui/status/network.js:668 #: ../js/ui/status/network.js:633
msgid "Auto Ethernet"
msgstr "Automatické Ethernet"
#: ../js/ui/status/network.js:695
msgid "Mobile broadband" msgid "Mobile broadband"
msgstr "Mobilní širokopásmová" msgstr "Mobilní širokopásmová"
#: ../js/ui/status/network.js:728 #: ../js/ui/status/network.js:1596
msgid "Auto broadband"
msgstr "Automatické širokopásmové"
#: ../js/ui/status/network.js:731
msgid "Auto dial-up"
msgstr "Automatické vytáčené"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:861 ../js/ui/status/network.js:1382
#, c-format
msgid "Auto %s"
msgstr "Automatické %s"
#: ../js/ui/status/network.js:863
msgid "Auto bluetooth"
msgstr "Automatické Bluetooth"
#: ../js/ui/status/network.js:1384
msgid "Auto wireless"
msgstr "Automatické bezdrátové"
#: ../js/ui/status/network.js:1729
msgid "Enable networking" msgid "Enable networking"
msgstr "Povolit síť" msgstr "Povolit síť"
#: ../js/ui/status/network.js:1771 #: ../js/ui/status/network.js:1657
msgid "Wi-Fi"
msgstr "Wi-Fi"
#: ../js/ui/status/network.js:1790
msgid "Network Settings" msgid "Network Settings"
msgstr "Nastavení sítě" msgstr "Nastavení sítě"
#: ../js/ui/status/network.js:1807 #: ../js/ui/status/network.js:1674
msgid "Network Manager" msgid "Network Manager"
msgstr "Network Manager" msgstr "Network Manager"
#: ../js/ui/status/network.js:1897 #: ../js/ui/status/network.js:1764
msgid "Connection failed" msgid "Connection failed"
msgstr "Připojení selhalo" msgstr "Připojení selhalo"
#: ../js/ui/status/network.js:1898 #: ../js/ui/status/network.js:1765
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivace síťového připojení selhala" msgstr "Aktivace síťového připojení selhala"
#: ../js/ui/status/network.js:2276 #: ../js/ui/status/network.js:2123
msgid "Networking is disabled" msgid "Networking is disabled"
msgstr "Síť je zakázána" msgstr "Síť je zakázána"
@ -1768,11 +1754,11 @@ msgstr "Hlasitost"
msgid "Microphone" msgid "Microphone"
msgstr "Mikrofon" msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:125
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Přihlásit se jako jiný uživatel" msgstr "Přihlásit se jako jiný uživatel"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:146
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Odemykací okno" msgstr "Odemykací okno"
@ -1800,27 +1786,27 @@ msgstr "Nečinný"
msgid "Offline" msgid "Offline"
msgstr "Odpojen" msgstr "Odpojen"
#: ../js/ui/userMenu.js:780 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Upozornění" msgstr "Upozornění"
#: ../js/ui/userMenu.js:796 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Přepnout uživatele" msgstr "Přepnout uživatele"
#: ../js/ui/userMenu.js:801 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Odhlásit se" msgstr "Odhlásit se"
#: ../js/ui/userMenu.js:821 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Nainstalovat aktualizace a restartovat" msgstr "Nainstalovat aktualizace a restartovat"
#: ../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 "Váš stav v konverzacích byl nastaven na „Zaneprázdněn“" msgstr "Váš stav v konverzacích byl nastaven na „Zaneprázdněn“"
#: ../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."
@ -1828,20 +1814,22 @@ msgstr ""
"Upozornění jsou nyní vypnuta, včetně zpráv v konverzacích. Váš stav on-line " "Upozornění jsou nyní vypnuta, včetně zpráv v konverzacích. Váš stav on-line "
"byl změněn tak, aby ostatní věděli, že si jejich zprávy nemusíte přečíst." "byl změněn tak, aby ostatní věděli, že si jejich zprávy nemusíte přečíst."
#: ../js/ui/userMenu.js:886 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Jsou přihlášeni jiní uživatelé." msgstr "Jsou přihlášeni jiní uživatelé."
#: ../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 "Vypnutí by mohlo způsobit ztrátu jejich neuložené práce." msgstr "Vypnutí by mohlo způsobit ztrátu jejich neuložené práce."
#: ../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 (vzdálený)" msgstr "%s (vzdálený)"
#: ../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 (konzole)" msgstr "%s (konzole)"
@ -1854,7 +1842,7 @@ msgstr "Aplikace"
msgid "Search" msgid "Search"
msgstr "Hledat" msgstr "Hledat"
#: ../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"
@ -1863,7 +1851,7 @@ msgstr ""
"Promiňte, dnes žádné moudro:\n" "Promiňte, dnes žádné moudro:\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 říká Prorok" msgstr "%s říká Prorok"
@ -1917,7 +1905,7 @@ msgstr "Použít pro přihlašovací obrazovku určitý mód, např. „gdm“."
msgid "List possible modes" msgid "List possible modes"
msgstr "Vypsat možné režimy" msgstr "Vypsat možné režimy"
#: ../src/shell-app.c:622 #: ../src/shell-app.c:626
#, c-format #, c-format
msgid "Failed to launch '%s'" msgid "Failed to launch '%s'"
msgstr "Nelze spustit „%s“" msgstr "Nelze spustit „%s“"

239
po/el.po
View File

@ -5,8 +5,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.po.master\n" "Project-Id-Version: gnome-shell.po.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-03-02 23:02+0000\n" "POT-Creation-Date: 2013-04-19 02:48+0000\n"
"PO-Revision-Date: 2013-03-03 13:22+0300\n" "PO-Revision-Date: 2013-04-25 08:11+0300\n"
"Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n" "Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n"
"Language-Team: team@gnome.gr\n" "Language-Team: team@gnome.gr\n"
"Language: el\n" "Language: el\n"
@ -40,10 +40,14 @@ msgid "Focus the active notification"
msgstr "Εστίαση στην ενεργή ειδοποίηση" msgstr "Εστίαση στην ενεργή ειδοποίηση"
#: ../data/50-gnome-shell-system.xml.in.h:4 #: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Show the overview"
msgstr "Εμφάνιση της επισκόπησης"
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Show all applications" msgid "Show all applications"
msgstr "Προβολή όλων των εφαρμογών" msgstr "Προβολή όλων των εφαρμογών"
#: ../data/50-gnome-shell-system.xml.in.h:5 #: ../data/50-gnome-shell-system.xml.in.h:6
msgid "Open the application menu" msgid "Open the application menu"
msgstr "Άνοιγμα του μενού εφαρμογών" msgstr "Άνοιγμα του μενού εφαρμογών"
@ -223,45 +227,55 @@ msgstr ""
"επισκόπησης ενεργειών." "επισκόπησης ενεργειών."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the overview"
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα της επισκόπησης"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the Activities Overview."
msgstr "Συνδυασμός πλήκτρων για το άνοιγμα της προβολής ενέργειες."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
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:28
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:29
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
msgstr "Ο συνδυασμός πλήκτρων για εστίαση της ενεργής ειδοποίησης" msgstr "Ο συνδυασμός πλήκτρων για εστίαση της ενεργής ειδοποίησης"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Keybinding to focus the active notification." msgid "Keybinding to focus the active notification."
msgstr "Ο συνδυασμός πλήκτρων για εστίαση της ενεργής ειδοποίησης." msgstr "Ο συνδυασμός πλήκτρων για εστίαση της ενεργής ειδοποίησης."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
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:32
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:33
msgid "Which keyboard to use" msgid "Which keyboard to use"
msgstr "Ποιο πληκτρολόγιο θα χρησιμοποιηθεί" msgstr "Ποιο πληκτρολόγιο θα χρησιμοποιηθεί"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The type of keyboard to use." msgid "The type of keyboard to use."
msgstr "Ο τύπος του πληκτρολογίου που θα χρησιμοποιηθεί." msgstr "Ο τύπος του πληκτρολογίου που θα χρησιμοποιηθεί."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Framerate used for recording screencasts." msgid "Framerate used for recording screencasts."
msgstr "" msgstr ""
"Ο ρυθμός καρέ που θα χρησιμοποιηθεί για την καταγραφή του βίντεο οθόνης." "Ο ρυθμός καρέ που θα χρησιμοποιηθεί για την καταγραφή του βίντεο οθόνης."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:36
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."
@ -269,13 +283,13 @@ msgstr ""
"Ο ρυθμός καρέ του στιγμιότυπου που παράγεται από τον εγγραφέα βίντεο οθόνης " "Ο ρυθμός καρέ του στιγμιότυπου που παράγεται από τον εγγραφέα βίντεο οθόνης "
"του GNOME Shell σε καρέ ανά δευτερόλεπτο." "του GNOME Shell σε καρέ ανά δευτερόλεπτο."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "" msgstr ""
"Ο δίαυλος του gstreamer που χρησιμοποιήθηκε για την κωδικοποίηση του βίντεο " "Ο δίαυλος του gstreamer που χρησιμοποιήθηκε για την κωδικοποίηση του βίντεο "
"οθόνης" "οθόνης"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#, no-c-format #, no-c-format
msgid "" msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax " "Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -303,12 +317,12 @@ msgstr ""
"χρησιμοποιείται ως παράδειγμα για το πιθανό βέλτιστο αριθμό πυρήνων του " "χρησιμοποιείται ως παράδειγμα για το πιθανό βέλτιστο αριθμό πυρήνων του "
"συστήματος." "συστήματος."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:40
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:41
msgid "" msgid ""
"The filename for recorded screencasts will be a unique filename based on the " "The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to " "current date, and use this extension. It should be changed when recording to "
@ -318,11 +332,11 @@ msgstr ""
"βασισμένο στην τρέχουσα ημερομηνία και θα χρησιμοποιεί αυτή την επέκταση. Θα " "βασισμένο στην τρέχουσα ημερομηνία και θα χρησιμοποιεί αυτή την επέκταση. Θα "
"πρέπει να αλλάζει όταν γίνεται εγγραφή σε διαφορετικό πρότυπο περιέκτη." "πρέπει να αλλάζει όταν γίνεται εγγραφή σε διαφορετικό πρότυπο περιέκτη."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "The application icon mode." msgid "The application icon mode."
msgstr "Η κατάσταση εικονιδίου εφαρμογής." msgstr "Η κατάσταση εικονιδίου εφαρμογής."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities " "Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -333,22 +347,22 @@ msgstr ""
"παραθύρου), 'app-icon-only' (εμφανίζει μόνο το εικονίδιο της εφαρμογής) ή " "παραθύρου), 'app-icon-only' (εμφανίζει μόνο το εικονίδιο της εφαρμογής) ή "
"'both' - και τα δύο." "'both' - και τα δύο."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
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:45
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 όταν εκτελείται " "Αυτό το κλειδί υπερισχύει του κλειδιού στο org.gnome.mutter όταν εκτελείται "
"το κέλυφος GNOME." "το κέλυφος GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
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:47
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."
@ -356,17 +370,17 @@ msgstr ""
"Αυτό το κλειδί υπερισχύει του κλειδιού στο org.gnome.desktop.wm.preferences " "Αυτό το κλειδί υπερισχύει του κλειδιού στο org.gnome.desktop.wm.preferences "
"όταν εκτελείται το κέλυφος GNOME." "όταν εκτελείται το κέλυφος GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:48
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:49
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:50
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Χώροι εργασίας μόνο στην κύρια οθόνη" msgstr "Χώροι εργασίας μόνο στην κύρια οθόνη"
@ -388,43 +402,42 @@ 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:787 ../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:100
#: ../js/ui/userMenu.js:932 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Ακύρωση" msgstr "Ακύρωση"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Σύνδεση" msgstr "Σύνδεση"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
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:918 ../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:1174
msgid "Login Window" msgid "Login Window"
msgstr "Παράθυρο σύνδεσης" msgstr "Παράθυρο σύνδεσης"
@ -433,8 +446,8 @@ msgstr "Παράθυρο σύνδεσης"
msgid "Power" msgid "Power"
msgstr "Ενέργεια" msgstr "Ενέργεια"
#: ../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 "Αναστολή" msgstr "Αναστολή"
@ -442,58 +455,58 @@ msgstr "Αναστολή"
msgid "Restart" msgid "Restart"
msgstr "Επανεκκίνηση" msgstr "Επανεκκίνηση"
#: ../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 "Απενεργοποίηση" 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 "Προσθήκη στα αγαπημένα"
@ -507,7 +520,7 @@ msgstr "Tο %s προστέθηκε στα αγαπημένα σας."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "Tο %s αφαιρέθηκε από τα αγαπημένα σας." msgstr "Tο %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 "Ρυθμίσεις" msgstr "Ρυθμίσεις"
@ -530,7 +543,7 @@ msgctxt "event list time"
msgid "%H\\u2236%M" msgid "%H\\u2236%M"
msgstr "%Ω\\u2236%Λ" msgstr "%Ω\\u2236%Λ"
#. 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
@ -632,35 +645,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 "Επόμενη εβδομάδα"
@ -676,12 +689,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 "Εξαγωγή"
@ -790,7 +803,7 @@ 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:47
#, no-c-format #, no-c-format
msgid "Screencast from %d %t" msgid "Screencast from %d %t"
msgstr "Βίντεο οθόνης από %d %t" msgstr "Βίντεο οθόνης από %d %t"
@ -1037,7 +1050,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 "Παράθυρα"
@ -1066,7 +1079,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 %B %e, %Y" msgstr "%A %B %e, %Y"
@ -1235,7 +1248,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 "Καθαρισμός μηνυμάτων"
@ -1243,15 +1255,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:1785
msgid "Message Tray" msgid "Message Tray"
msgstr "Περιοχή ειδοποιήσεων" msgstr "Περιοχή ειδοποιήσεων"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2813
msgid "System Information" msgid "System Information"
msgstr "Πληροφορίες συστήματος" msgstr "Πληροφορίες συστήματος"
@ -1260,14 +1272,14 @@ 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"
msgstr[0] "%d νέο μήνυμα" msgstr[0] "%d νέο μήνυμα"
msgstr[1] "%d νέα μηνύματα" msgstr[1] "%d νέα μηνύματα"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Αναίρεση" msgstr "Αναίρεση"
@ -1279,22 +1291,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:633
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:657
msgid "Activities" msgid "Activities"
msgstr "Δραστηριότητες" msgstr "Δραστηριότητες"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:954
msgid "Top Bar" msgid "Top Bar"
msgstr "Πάνω μπάρα" msgstr "Πάνω μπάρα"
@ -1307,32 +1318,32 @@ 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:74
msgid "Enter a Command" msgid "Enter a Command"
msgstr "Εισαγωγή εντολής" msgstr "Εισαγωγή εντολής"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:110
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, %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 νέα ειδοποίηση" msgstr[0] "%d νέα ειδοποίηση"
msgstr[1] "%d νέες ειδοποιήσεις" msgstr[1] "%d νέες ειδοποιήσεις"
#: ../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 "Κλείδωμα" msgstr "Κλείδωμα"
#: ../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 χρειάζεται να κλειδώσει την οθόνη" msgstr "Το GNOME χρειάζεται να κλειδώσει την οθόνη"
@ -1343,21 +1354,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:762 ../js/ui/screenShield.js:1198
#| 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:763 ../js/ui/screenShield.js:1199
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 "Δε βρέθηκαν αποτελέσματα."
@ -1369,11 +1378,11 @@ msgstr "Αντιγραφή"
msgid "Paste" msgid "Paste"
msgstr "Επικόλληση" msgstr "Επικόλληση"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:101
msgid "Show Text" msgid "Show Text"
msgstr "Εμφάνιση κειμένου" msgstr "Εμφάνιση κειμένου"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:103
msgid "Hide Text" msgid "Hide Text"
msgstr "Απόκρυψη κειμένου" msgstr "Απόκρυψη κειμένου"
@ -1385,7 +1394,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:114
msgid "Unlock" msgid "Unlock"
msgstr "Ξεκλείδωμα" msgstr "Ξεκλείδωμα"
@ -1449,12 +1458,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 "Ρύθμιση νέας συσκευής…"
@ -1481,7 +1488,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 "Αποστολή αρχείων…"
@ -1694,7 +1700,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 "Υπολογισμός…"
@ -1794,59 +1799,59 @@ msgstr "Ένταση ήχου"
msgid "Microphone" msgid "Microphone"
msgstr "Μικρόφωνο" msgstr "Μικρόφωνο"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:125
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Είσοδος ως άλλος χρήστης" msgstr "Είσοδος ως άλλος χρήστης"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:146
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Ξεκλείδωμα παραθύρου" msgstr "Ξεκλείδωμα παραθύρου"
#: ../js/ui/userMenu.js:192 #: ../js/ui/userMenu.js:193
msgid "Available" msgid "Available"
msgstr "Διαθέσιμος-η" msgstr "Διαθέσιμος-η"
#: ../js/ui/userMenu.js:195 #: ../js/ui/userMenu.js:196
msgid "Busy" msgid "Busy"
msgstr "Απασχολημένος-η" msgstr "Απασχολημένος-η"
#: ../js/ui/userMenu.js:198 #: ../js/ui/userMenu.js:199
msgid "Invisible" msgid "Invisible"
msgstr "Αόρατος-η" msgstr "Αόρατος-η"
#: ../js/ui/userMenu.js:201 #: ../js/ui/userMenu.js:202
msgid "Away" msgid "Away"
msgstr "Απουσιάζει" msgstr "Απουσιάζει"
#: ../js/ui/userMenu.js:204 #: ../js/ui/userMenu.js:205
msgid "Idle" msgid "Idle"
msgstr "Αδρανής" msgstr "Αδρανής"
#: ../js/ui/userMenu.js:207 #: ../js/ui/userMenu.js:208
msgid "Offline" msgid "Offline"
msgstr "Εκτός σύνδεσης" msgstr "Εκτός σύνδεσης"
#: ../js/ui/userMenu.js:779 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Ειδοποιήσεις" msgstr "Ειδοποιήσεις"
#: ../js/ui/userMenu.js:795 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Αλλαγή χρήστη" msgstr "Αλλαγή χρήστη"
#: ../js/ui/userMenu.js:800 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Αποσύνδεση" msgstr "Αποσύνδεση"
#: ../js/ui/userMenu.js:820 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Εγκατάσταση ενημερώσεων & επανεκκίνηση" msgstr "Εγκατάσταση ενημερώσεων & επανεκκίνηση"
#: ../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 "Η κατάσταση συνομιλίας σας θα ορισθεί σε απασχολημένος" msgstr "Η κατάσταση συνομιλίας σας θα ορισθεί σε απασχολημένος"
#: ../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."
@ -1855,34 +1860,36 @@ msgstr ""
"κατάσταση σας έχει ορισθεί έτσι ώστε να γίνεται γνωστό ότι πιθανόν να μην " "κατάσταση σας έχει ορισθεί έτσι ώστε να γίνεται γνωστό ότι πιθανόν να μην "
"δείτε τα μηνύματα τους." "δείτε τα μηνύματα τους."
#: ../js/ui/userMenu.js:885 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Και άλλοι χρήστες είναι συνδεμένοι." msgstr "Και άλλοι χρήστες είναι συνδεμένοι."
#: ../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 "" msgstr ""
"Κλείνοντας μπορεί να τους προκαλέσετε την απώλεια αναποθήκευτης εργασίας." "Κλείνοντας μπορεί να τους προκαλέσετε την απώλεια αναποθήκευτης εργασίας."
#: ../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 (απομακρυσμένο)" msgstr "%s (απομακρυσμένο)"
#: ../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 (κονσόλα)" 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"
@ -1891,7 +1898,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 ο Προφήτης λέει"

File diff suppressed because it is too large Load Diff

240
po/es.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-03-02 23:02+0000\n" "POT-Creation-Date: 2013-04-19 02:48+0000\n"
"PO-Revision-Date: 2013-03-04 13:44+0100\n" "PO-Revision-Date: 2013-04-22 17:40+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n" "Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \n" "Language: \n"
@ -42,10 +42,14 @@ msgid "Focus the active notification"
msgstr "Dar el foco a la notificación activa" msgstr "Dar el foco a la notificación activa"
#: ../data/50-gnome-shell-system.xml.in.h:4 #: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Show the overview"
msgstr "Mostrar la vista general"
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Show all applications" msgid "Show all applications"
msgstr "Mostrar todas las aplicaciones" msgstr "Mostrar todas las aplicaciones"
#: ../data/50-gnome-shell-system.xml.in.h:5 #: ../data/50-gnome-shell-system.xml.in.h:6
msgid "Open the application menu" msgid "Open the application menu"
msgstr "Abrir el menú de la aplicación" msgstr "Abrir el menú de la aplicación"
@ -223,42 +227,52 @@ msgstr ""
"de actividades." "de actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the overview"
msgstr "Asociación de teclas para la vista general"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#| msgid "Keybinding to open the \"Show Applications\" view"
msgid "Keybinding to open the Activities Overview."
msgstr "Asociación de teclas para abrir la Vista de actividades"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Keybinding to toggle the visibility of the message tray" msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes" msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26 #: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "Keybinding to toggle the visibility of the message tray." msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes." msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27 #: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
msgstr "Asociación de teclas para dar el foco a la notificación activa" msgstr "Asociación de teclas para dar el foco a la notificación activa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Keybinding to focus the active notification." msgid "Keybinding to focus the active notification."
msgstr "Asociación de teclas para dar el foco a la notificación activa." msgstr "Asociación de teclas para dar el foco a la notificación activa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Keybinding to toggle the screen recorder" msgid "Keybinding to toggle the screen recorder"
msgstr "Asociación de teclas cambiar el grabador de pantalla" msgstr "Asociación de teclas cambiar el grabador de pantalla"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30 #: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid "Keybinding to start/stop the builtin screen recorder." msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Asociación de teclas para iniciar/detener el grabador de pantalla." msgstr "Asociación de teclas para iniciar/detener el grabador de pantalla."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31 #: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Which keyboard to use" msgid "Which keyboard to use"
msgstr "Qué teclado usar" msgstr "Qué teclado usar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The type of keyboard to use." msgid "The type of keyboard to use."
msgstr "El tipo de teclado que usar." msgstr "El tipo de teclado que usar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Framerate used for recording screencasts." msgid "Framerate used for recording screencasts."
msgstr "Tasa de fotogramas usada para grabar «screencast»." msgstr "Tasa de fotogramas usada para grabar «screencast»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:36
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."
@ -266,11 +280,11 @@ msgstr ""
"La tasa de fotogramas de la grabación resultante grabada por el grabador de " "La tasa de fotogramas de la grabación resultante grabada por el grabador de "
"«screencast» de GNOME Shell, en fotogramas por segundo." "«screencast» de GNOME Shell, en fotogramas por segundo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "La tubería de gstreamer usada para codificar el «screencast»" msgstr "La tubería de gstreamer usada para codificar el «screencast»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#, no-c-format #, no-c-format
msgid "" msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax " "Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -296,11 +310,11 @@ msgstr ""
"threads=%T ! queue ! webmmux» y graba en WEBM usando el códec VP8. Se usa %T " "threads=%T ! queue ! webmmux» y graba en WEBM usando el códec VP8. Se usa %T "
"como marcador de posición para el número de hilos óptimos en el sistema." "como marcador de posición para el número de hilos óptimos en el sistema."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:40
msgid "File extension used for storing the screencast" msgid "File extension used for storing the screencast"
msgstr "Extensión de archivo que usar para almacenar los «screencast»" msgstr "Extensión de archivo que usar para almacenar los «screencast»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39 #: ../data/org.gnome.shell.gschema.xml.in.in.h:41
msgid "" msgid ""
"The filename for recorded screencasts will be a unique filename based on the " "The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to " "current date, and use this extension. It should be changed when recording to "
@ -310,11 +324,11 @@ msgstr ""
"basado en la fecha actual y usará esta extensión. Se debería cambiar al " "basado en la fecha actual y usará esta extensión. Se debería cambiar al "
"grabar en otro formato contenedor diferente." "grabar en otro formato contenedor diferente."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:40 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
msgid "The application icon mode." msgid "The application icon mode."
msgstr "El modo de icono de la aplicación." msgstr "El modo de icono de la aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities " "Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-" "are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@ -324,21 +338,21 @@ msgstr ""
"son «thumbnail-only» (muestra una miniatura de la ventana), «app-icon-" "son «thumbnail-only» (muestra una miniatura de la ventana), «app-icon-"
"only» (sólo muestra el icono de la aplicación) «both»." "only» (sólo muestra el icono de la aplicación) «both»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
msgid "Attach modal dialog to the parent window" msgid "Attach modal dialog to the parent window"
msgstr "Acoplar un diálogo modal a la ventana padre" msgstr "Acoplar un diálogo modal a la ventana padre"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:43 #: ../data/org.gnome.shell.gschema.xml.in.in.h:45
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 ""
"Esta clave sobreescribe la clave en org.gnome.mutter al ejecutar GNOME Shell." "Esta clave sobreescribe la clave en org.gnome.mutter al ejecutar GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
msgid "Arrangement of buttons on the titlebar" msgid "Arrangement of buttons on the titlebar"
msgstr "Orden de los botones en la barra de título" msgstr "Orden de los botones en la barra de título"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:45 #: ../data/org.gnome.shell.gschema.xml.in.in.h:47
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."
@ -346,17 +360,17 @@ msgstr ""
"Esta clave sobreescribe la clave en org.gnome.desktop.wm.preferences al " "Esta clave sobreescribe la clave en org.gnome.desktop.wm.preferences al "
"ejecutar GNOME Shell." "ejecutar GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:48
msgid "Enable edge tiling when dropping windows on screen edges" msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "" msgstr ""
"Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la " "Activar el mosaico en los bordes al arrastrar ventanas a los bordes de la "
"ventana" "ventana"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:47 #: ../data/org.gnome.shell.gschema.xml.in.in.h:49
msgid "Workspaces are managed dynamically" msgid "Workspaces are managed dynamically"
msgstr "Las áreas de trabajo se gestionan dinámicamente" msgstr "Las áreas de trabajo se gestionan dinámicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:48 #: ../data/org.gnome.shell.gschema.xml.in.in.h:50
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "Áreas de trabajo solo en la pantalla principal" msgstr "Áreas de trabajo solo en la pantalla principal"
@ -375,43 +389,42 @@ msgstr ""
"Seleccione una extensión que configurar usando la caja combinada de arriba." "Seleccione una extensión que configurar usando la caja combinada de arriba."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
#| msgid "Session..."
msgid "Session…" msgid "Session…"
msgstr "Sesión…" msgstr "Sesión…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "¿No está en la lista?" msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:787 ../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:100
#: ../js/ui/userMenu.js:932 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgid "Next" msgid "Next"
msgstr "Siguiente" msgstr "Siguiente"
#. 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:918 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Nombre de usuario:" msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1174
msgid "Login Window" msgid "Login Window"
msgstr "Ventana de inicio de sesión" msgstr "Ventana de inicio de sesión"
@ -420,8 +433,8 @@ msgstr "Ventana de inicio de sesión"
msgid "Power" msgid "Power"
msgstr "Energía" msgstr "Energía"
#: ../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 "Suspender" msgstr "Suspender"
@ -429,58 +442,58 @@ msgstr "Suspender"
msgid "Restart" msgid "Restart"
msgstr "Reiniciar" msgstr "Reiniciar"
#: ../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 "Apagar" msgstr "Apagar"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Error de autenticación" msgstr "Error de autenticación"
#. 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 "(o pase el dedo)" msgstr "(o pase el dedo)"
#: ../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 "(ej., usuario o %s)" msgstr "(ej., usuario o %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Comando no encontrado" msgstr "Comando no encontrado"
#. 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 "No se pudo analizar el comando:" msgstr "No se pudo analizar el comando:"
#: ../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 "Falló la ejecución de «%s»:" msgstr "Falló la ejecución de «%s»:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Frecuentes" msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Todas" msgstr "Todas"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Ventana nueva" msgstr "Ventana nueva"
#: ../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 "Quitar de los favoritos" msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Añadir a los favoritos" msgstr "Añadir a los favoritos"
@ -494,7 +507,7 @@ msgstr "Se ha añadido %s a sus favoritos."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "Se ha quitado %s de sus favoritos." msgstr "Se ha quitado %s de sus favoritos."
#: ../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 "Configuración" msgstr "Configuración"
@ -517,7 +530,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 +632,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 "Nada programado" msgstr "Nada programado"
#. 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 de %B" msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js: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 de %B de %Y" msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Hoy" msgstr "Hoy"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Mañana" msgstr "Mañana"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Esta semana" msgstr "Esta semana"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "La semana que viene" msgstr "La semana que viene"
@ -663,12 +676,12 @@ msgstr "Dispositivo externo desconectado"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Dispositivos extraíbles" msgstr "Dispositivos extraíbles"
#: ../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 "Abrir con %s" msgstr "Abrir con %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Expulsar" msgstr "Expulsar"
@ -777,7 +790,7 @@ msgid "Sorry, that didn't work. Please try again."
msgstr "Inténtelo de nuevo," msgstr "Inténtelo de nuevo,"
#. 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 "Screencast desde %d %t" msgstr "Screencast desde %d %t"
@ -1024,7 +1037,7 @@ msgstr "Ver cuenta"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Razón desconocida" msgstr "Razón desconocida"
#: ../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 "Ventanas" msgstr "Ventanas"
@ -1053,7 +1066,7 @@ msgstr "Configuración de hora y fecha"
#. 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 de %B de %Y" msgstr "%A, %e de %B de %Y"
@ -1219,7 +1232,6 @@ msgid "Remove"
msgstr "Quitar" msgstr "Quitar"
#: ../js/ui/messageTray.js:1501 #: ../js/ui/messageTray.js:1501
#| msgid "No Messages"
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Limpiar mensajes" msgstr "Limpiar mensajes"
@ -1227,15 +1239,15 @@ msgstr "Limpiar mensajes"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Configuración de las notificaciones" msgstr "Configuración de las notificaciones"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "No hay mensajes" msgstr "No hay mensajes"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1785
msgid "Message Tray" msgid "Message Tray"
msgstr "Bandeja de mensajes" msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2813
msgid "System Information" msgid "System Information"
msgstr "Información del sistema" msgstr "Información del sistema"
@ -1244,14 +1256,14 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Desconocido" msgstr "Desconocido"
#: ../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 mensaje nuevo" msgstr[0] "%d mensaje nuevo"
msgstr[1] "%d mensajes nuevos" msgstr[1] "%d mensajes nuevos"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Deshacer" msgstr "Deshacer"
@ -1263,22 +1275,21 @@ msgstr "Vista general"
#. 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 "Escribir para buscar…" msgstr "Escribir para buscar…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:633
msgid "Quit" msgid "Quit"
msgstr "Salir" msgstr "Salir"
#. 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:657
msgid "Activities" msgid "Activities"
msgstr "Actividades" msgstr "Actividades"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:954
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
@ -1291,32 +1302,32 @@ msgstr "Barra superior"
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 "Introducir un comando" msgstr "Introducir un comando"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:110
msgid "Close" msgid "Close"
msgstr "Cerrar" msgstr "Cerrar"
#. 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 de %B" msgstr "%A, %d de %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 notificación nueva" msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificaciones nuevas" msgstr[1] "%d notificaciones nuevas"
#: ../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 "Bloquear" msgstr "Bloquear"
#: ../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 necesita bloquear la pantalla" msgstr "GNOME necesita bloquear la pantalla"
@ -1327,22 +1338,19 @@ msgstr "GNOME necesita bloquear la pantalla"
#. #.
#. 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 connect to %s"
msgid "Unable to lock" msgid "Unable to lock"
msgstr "No se pudo bloquear" msgstr "No se pudo bloquear"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:763 ../js/ui/screenShield.js:1199
#| msgid "No such application"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo" msgstr "Una aplicación impidió el bloqueo"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
#| msgid "Searching..."
msgid "Searching…" msgid "Searching…"
msgstr "Buscando…" msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "No se encontraron resultados." msgstr "No se encontraron resultados."
@ -1354,11 +1362,11 @@ msgstr "Copiar"
msgid "Paste" msgid "Paste"
msgstr "Pegar" msgstr "Pegar"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:101
msgid "Show Text" msgid "Show Text"
msgstr "Mostrar texto" msgstr "Mostrar texto"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:103
msgid "Hide Text" msgid "Hide Text"
msgstr "Ocultar texto" msgstr "Ocultar texto"
@ -1370,7 +1378,7 @@ msgstr "Contraseña"
msgid "Remember Password" msgid "Remember Password"
msgstr "Recordar contraseña" msgstr "Recordar contraseña"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:114
msgid "Unlock" msgid "Unlock"
msgstr "Desbloquear" msgstr "Desbloquear"
@ -1434,12 +1442,10 @@ msgid "Visibility"
msgstr "Visibilidad" msgstr "Visibilidad"
#: ../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 "Enviar archivos al dispositivo…" msgstr "Enviar archivos al dispositivo…"
#: ../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 "Configurar un dispositivo nuevo…" msgstr "Configurar un dispositivo nuevo…"
@ -1466,7 +1472,6 @@ msgid "connecting..."
msgstr "conectando…" msgstr "conectando…"
#: ../js/ui/status/bluetooth.js:239 #: ../js/ui/status/bluetooth.js:239
#| msgid "Send Files..."
msgid "Send Files…" msgid "Send Files…"
msgstr "Enviar archivos…" msgstr "Enviar archivos…"
@ -1679,7 +1684,6 @@ msgstr "Configuración de energía"
#. 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 "Estimando…" msgstr "Estimando…"
@ -1779,59 +1783,59 @@ msgstr "Volumen"
msgid "Microphone" msgid "Microphone"
msgstr "Micrófono" msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:125
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Iniciar sesión como otro usuario" msgstr "Iniciar sesión como otro usuario"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:146
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Desbloquear ventana" msgstr "Desbloquear ventana"
#: ../js/ui/userMenu.js:192 #: ../js/ui/userMenu.js:193
msgid "Available" msgid "Available"
msgstr "Disponible" msgstr "Disponible"
#: ../js/ui/userMenu.js:195 #: ../js/ui/userMenu.js:196
msgid "Busy" msgid "Busy"
msgstr "Ocupado" msgstr "Ocupado"
#: ../js/ui/userMenu.js:198 #: ../js/ui/userMenu.js:199
msgid "Invisible" msgid "Invisible"
msgstr "Invisible" msgstr "Invisible"
#: ../js/ui/userMenu.js:201 #: ../js/ui/userMenu.js:202
msgid "Away" msgid "Away"
msgstr "Ausente" msgstr "Ausente"
#: ../js/ui/userMenu.js:204 #: ../js/ui/userMenu.js:205
msgid "Idle" msgid "Idle"
msgstr "Inactivo" msgstr "Inactivo"
#: ../js/ui/userMenu.js:207 #: ../js/ui/userMenu.js:208
msgid "Offline" msgid "Offline"
msgstr "Desconectado" msgstr "Desconectado"
#: ../js/ui/userMenu.js:779 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Notificaciones" msgstr "Notificaciones"
#: ../js/ui/userMenu.js:795 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Cambiar de usuario" msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:800 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Cerrar la sesión" msgstr "Cerrar la sesión"
#: ../js/ui/userMenu.js:820 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Instalar actualizaciones y reiniciar" msgstr "Instalar actualizaciones y reiniciar"
#: ../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 "Su estado del chat se establecerá a «ocupado»" msgstr "Su estado del chat se establecerá a «ocupado»"
#: ../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 +1844,35 @@ msgstr ""
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no " "chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
"leer sus mensajes." "leer sus mensajes."
#: ../js/ui/userMenu.js:885 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Hay otros usuarios con la sesión iniciada" msgstr "Hay otros usuarios con la sesión iniciada"
#: ../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 "Apagar puede hacer que pierdan el trabajo que no hayan guardado." msgstr "Apagar puede hacer que pierdan el trabajo que no hayan guardado."
#: ../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 (remoto)" msgstr "%s (remoto)"
#: ../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 (consola)" msgstr "%s (consola)"
#: ../js/ui/viewSelector.js:101 #: ../js/ui/viewSelector.js:100
msgid "Applications" msgid "Applications"
msgstr "Aplicaciones" msgstr "Aplicaciones"
#: ../js/ui/viewSelector.js:105 #: ../js/ui/viewSelector.js:104
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
#: ../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 +1881,7 @@ msgstr ""
"Hoy no tiene ningún mensaje:\n" "Hoy no tiene ningún mensaje:\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 el oráculo dice" msgstr "%s el oráculo dice"

611
po/eu.po

File diff suppressed because it is too large Load Diff

219
po/gl.po
View File

@ -10,10 +10,9 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: \n"
"shell&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2013-04-18 01:27+0200\n"
"POT-Creation-Date: 2013-03-02 23:02+0000\n" "PO-Revision-Date: 2013-04-18 01:42+0200\n"
"PO-Revision-Date: 2013-03-04 12:40+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n" "Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n" "Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n" "Language: gl\n"
@ -30,7 +29,7 @@ msgstr "Capturas de pantalla"
#: ../data/50-gnome-shell-screenshot.xml.in.h:2 #: ../data/50-gnome-shell-screenshot.xml.in.h:2
msgid "Record a screencast" msgid "Record a screencast"
msgstr "Gravar unha gravación de pantalla" msgstr "Facer unha gravación da pantalla"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@ -63,16 +62,16 @@ msgstr "Xestor de xanelas e inicio de aplicativos"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1 #: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:153 #: ../js/extensionPrefs/main.js:153
msgid "GNOME Shell Extension Preferences" msgid "GNOME Shell Extension Preferences"
msgstr "Preferencias de extensións de GNOME Shell" msgstr "Preferencias das extensións de GNOME Shell"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2 #: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Configurar as extensións de GNOME Shell" msgstr "Configure as extensións de GNOME Shell"
#: ../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"
msgstr "" msgstr ""
"Activar as ferramentas internas útiles para os desenvolvedores e probadores, " "Activar as ferramentas internas útiles para os desenvolvedores e probadores "
"usando Alt-F2" "usando Alt-F2"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:2 #: ../data/org.gnome.shell.gschema.xml.in.in.h:2
@ -85,7 +84,7 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3 #: ../data/org.gnome.shell.gschema.xml.in.in.h:3
msgid "Uuids of extensions to enable" msgid "Uuids of extensions to enable"
msgstr "Uuid das extensións que activar" msgstr "UUIDs das extensións a activar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4 #: ../data/org.gnome.shell.gschema.xml.in.in.h:4
msgid "" msgid ""
@ -375,43 +374,42 @@ msgstr ""
"Seleccione unha extensión que configurar usando a caixa combinada de arriba." "Seleccione unha extensión que configurar usando a caixa combinada de arriba."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
#| msgid "Session..."
msgid "Session…" msgid "Session…"
msgstr "Sesión…" msgstr "Sesión…"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:629 #: ../js/gdm/loginDialog.js:630
msgid "Not listed?" msgid "Not listed?"
msgstr "Non está na lista?" msgstr "Non está na lista?"
#: ../js/gdm/loginDialog.js:783 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:787 ../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:100
#: ../js/ui/userMenu.js:932 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:803
msgid "Next" msgid "Next"
msgstr "Seguinte" msgstr "Seguinte"
#. 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:918 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278 #: ../js/ui/components/networkAgent.js:278
msgid "Username: " msgid "Username: "
msgstr "Nome de usuario: " msgstr "Nome de usuario: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1174
msgid "Login Window" msgid "Login Window"
msgstr "Xanela de inicio de sesión" msgstr "Xanela de inicio de sesión"
@ -420,8 +418,8 @@ msgstr "Xanela de inicio de sesión"
msgid "Power" msgid "Power"
msgstr "Apagar" msgstr "Apagar"
#: ../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 "Suspender" msgstr "Suspender"
@ -429,58 +427,58 @@ msgstr "Suspender"
msgid "Restart" msgid "Restart"
msgstr "Reiniciar" msgstr "Reiniciar"
#: ../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 "Apagar" msgstr "Apagar"
#: ../js/gdm/util.js:182 #: ../js/gdm/util.js:249
msgid "Authentication error" msgid "Authentication error"
msgstr "Erro de autenticación" msgstr "Erro de autenticación"
#. 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 "(ou pase o dedo)" msgstr "(ou pase o dedo)"
#: ../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 "(p.ex., usuario ou %s)" msgstr "(p.ex., usuario ou %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
msgid "Command not found" msgid "Command not found"
msgstr "Orde non atopada" msgstr "Orde non atopada"
#. 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 "Non foi posíbel analizar a orde:" msgstr "Non foi posíbel analizar a orde:"
#: ../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 "Produciuse un fallo na execución de «%s»:" msgstr "Produciuse un fallo na execución de «%s»:"
#: ../js/ui/appDisplay.js:348 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Frecuentes" msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:355 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
#: ../js/ui/appDisplay.js:913 #: ../js/ui/appDisplay.js:914
msgid "New Window" msgid "New Window"
msgstr "Xanela nova" msgstr "Xanela nova"
#: ../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 "Retirar dos marcadores" msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:917 #: ../js/ui/appDisplay.js:918
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Engadir aos favoritos" msgstr "Engadir aos favoritos"
@ -494,7 +492,7 @@ msgstr "%s foi engadido aos seus favoritos."
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s retirouse dos seus marcadores." msgstr "%s retirouse dos seus marcadores."
#: ../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 "Preferencias" msgstr "Preferencias"
@ -517,7 +515,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 +617,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 "Nada programado" msgstr "Nada programado"
#. 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 de %B" msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year #. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js: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 de %B de %Y" msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:721 #: ../js/ui/calendar.js:749
msgid "Today" msgid "Today"
msgstr "Hoxe" msgstr "Hoxe"
#: ../js/ui/calendar.js:725 #: ../js/ui/calendar.js:753
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Mañá" msgstr "Mañá"
#: ../js/ui/calendar.js:736 #: ../js/ui/calendar.js:764
msgid "This week" msgid "This week"
msgstr "Esta semana" msgstr "Esta semana"
#: ../js/ui/calendar.js:744 #: ../js/ui/calendar.js:772
msgid "Next week" msgid "Next week"
msgstr "A vindeira semana" msgstr "A vindeira semana"
@ -663,12 +661,12 @@ msgstr "Unidade externa desconectada"
msgid "Removable Devices" msgid "Removable Devices"
msgstr "Dispositivos extraíbeis" msgstr "Dispositivos extraíbeis"
#: ../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 "Abrir con %s" msgstr "Abrir con %s"
#: ../js/ui/components/autorunManager.js:619 #: ../js/ui/components/autorunManager.js:620
msgid "Eject" msgid "Eject"
msgstr "Expulsar" msgstr "Expulsar"
@ -777,7 +775,7 @@ msgid "Sorry, that didn't work. Please try again."
msgstr "Desculpe, iso non funcionou. Ténteo de novo." msgstr "Desculpe, iso non funcionou. Ténteo de novo."
#. 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 "Screencast desde %d %t" msgstr "Screencast desde %d %t"
@ -1024,7 +1022,7 @@ msgstr "Ver conta"
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Razón descoñecida" msgstr "Razón descoñecida"
#: ../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 "Xanelas" msgstr "Xanelas"
@ -1040,7 +1038,7 @@ msgstr "Taboleiro"
#: ../js/ui/dateMenu.js:91 #: ../js/ui/dateMenu.js:91
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Abrir o calendario" msgstr "Abrir Calendario"
#: ../js/ui/dateMenu.js:96 #: ../js/ui/dateMenu.js:96
msgid "Open Clocks" msgid "Open Clocks"
@ -1053,7 +1051,7 @@ msgstr "Preferencias de data e hora"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: ../js/ui/dateMenu.js:205 #: ../js/ui/dateMenu.js:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%a, %e de %B, %Y" msgstr "%a, %e de %B, %Y"
@ -1071,7 +1069,7 @@ msgstr "Saír da sesión"
#: ../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 ""
"Prema sobre «Saír da sesión» para saír deses aplicativos e saír da sesión do " "Prema en «Saír da sesión» para pechar estes aplicativos e saír da sesión do "
"sistema." "sistema."
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:67
@ -1090,7 +1088,7 @@ msgstr[1] "A súa sesión pecharase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:76 #: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system." msgid "Logging out of the system."
msgstr "Saíndo da sesión." msgstr "Saíndo da sesión do sistema."
#: ../js/ui/endSessionDialog.js:78 #: ../js/ui/endSessionDialog.js:78
msgctxt "button" msgctxt "button"
@ -1104,7 +1102,7 @@ msgstr "Apagar"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system." msgid "Click Power Off to quit these applications and power off the system."
msgstr "Prema sobre «Apagar» para saír deses aplicativos e apagar o sistema." msgstr "Prema sobre «Apagar» para pechar estes aplicativos e apagar o sistema."
#: ../js/ui/endSessionDialog.js:86 #: ../js/ui/endSessionDialog.js:86
#, c-format #, c-format
@ -1134,7 +1132,7 @@ msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:101 #: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system." msgid "Click Restart to quit these applications and restart the system."
msgstr "Prema «Reiniciar» para saír deses aplicativos e reiniciar o sistema." msgstr "Prema «Reiniciar» para pechar estes aplicativos e reiniciar o sistema."
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:103
#, c-format #, c-format
@ -1169,7 +1167,7 @@ msgstr "Non hai ningunha extensión instalada"
#: ../js/ui/lookingGlass.js:747 #: ../js/ui/lookingGlass.js:747
#, c-format #, c-format
msgid "%s has not emitted any errors." msgid "%s has not emitted any errors."
msgstr "%s non xerou ningún erro." msgstr "%s non emitiu ningún erro."
#: ../js/ui/lookingGlass.js:753 #: ../js/ui/lookingGlass.js:753
msgid "Hide Errors" msgid "Hide Errors"
@ -1195,7 +1193,7 @@ msgstr "Erro"
#: ../js/ui/lookingGlass.js:773 #: ../js/ui/lookingGlass.js:773
msgid "Out of date" msgid "Out of date"
msgstr "Caducado" msgstr "Obsoleto"
#: ../js/ui/lookingGlass.js:775 #: ../js/ui/lookingGlass.js:775
msgid "Downloading" msgid "Downloading"
@ -1218,7 +1216,6 @@ msgid "Remove"
msgstr "Retirar" msgstr "Retirar"
#: ../js/ui/messageTray.js:1501 #: ../js/ui/messageTray.js:1501
#| msgid "No Messages"
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Limpar mensaxes" msgstr "Limpar mensaxes"
@ -1226,15 +1223,15 @@ msgstr "Limpar mensaxes"
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Preferencias das notificacións" msgstr "Preferencias das notificacións"
#: ../js/ui/messageTray.js:1707 #: ../js/ui/messageTray.js:1709
msgid "No Messages" msgid "No Messages"
msgstr "Non hai mensaxes" msgstr "Non hai mensaxes"
#: ../js/ui/messageTray.js:1787 #: ../js/ui/messageTray.js:1785
msgid "Message Tray" msgid "Message Tray"
msgstr "Bandexa de mensaxes" msgstr "Bandexa de mensaxes"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2813
msgid "System Information" msgid "System Information"
msgstr "Información do sistema" msgstr "Información do sistema"
@ -1243,14 +1240,14 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Descoñecido" msgstr "Descoñecido"
#: ../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 mensaxe nova" msgstr[0] "%d mensaxe nova"
msgstr[1] "%d mensaxes novas" msgstr[1] "%d mensaxes novas"
#: ../js/ui/overview.js:82 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Desfacer" msgstr "Desfacer"
@ -1262,22 +1259,21 @@ msgstr "Vista xeral"
#. 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 "Escriba para buscar…" msgstr "Escriba para buscar…"
#: ../js/ui/panel.js:613 #: ../js/ui/panel.js:633
msgid "Quit" msgid "Quit"
msgstr "Saír" msgstr "Saír"
#. 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:657
msgid "Activities" msgid "Activities"
msgstr "Actividades" msgstr "Actividades"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:954
msgid "Top Bar" msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
@ -1290,34 +1286,34 @@ msgstr "Barra superior"
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 "Escriba unha orde" msgstr "Escriba unha orde"
#: ../js/ui/runDialog.js:241 #: ../js/ui/runDialog.js:110
msgid "Close" msgid "Close"
msgstr "Pechar" msgstr "Pechar"
#. 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 de %B" msgstr "%A, %d de %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 notificación nova" msgstr[0] "%d notificación nova"
msgstr[1] "%d notificacións novas" msgstr[1] "%d notificacións novas"
#: ../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 "Bloquear" msgstr "Bloquear"
#: ../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 debe bloquear a pantalla" msgstr "GNOME precisa bloquear a pantalla"
#. 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
@ -1326,22 +1322,19 @@ msgstr "GNOME debe bloquear a pantalla"
#. #.
#. 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 connect to %s"
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Non foi posíbel bloquear" msgstr "Non foi posíbel bloquear"
#: ../js/ui/screenShield.js:759 ../js/ui/screenShield.js:1170 #: ../js/ui/screenShield.js:763 ../js/ui/screenShield.js:1199
#| msgid "No such application"
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "O bloqueo foi impedido por un aplicativo" msgstr "Un aplicativo impediu o bloqueo"
#: ../js/ui/searchDisplay.js:431 #: ../js/ui/searchDisplay.js:453
#| msgid "Searching..."
msgid "Searching…" msgid "Searching…"
msgstr "Buscando…" msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:475 #: ../js/ui/searchDisplay.js:497
msgid "No results." msgid "No results."
msgstr "Sen resultados." msgstr "Sen resultados."
@ -1353,11 +1346,11 @@ msgstr "Copiar"
msgid "Paste" msgid "Paste"
msgstr "Pegar" msgstr "Pegar"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:101
msgid "Show Text" msgid "Show Text"
msgstr "Mostrar texto" msgstr "Mostrar texto"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:103
msgid "Hide Text" msgid "Hide Text"
msgstr "Ocultar texto" msgstr "Ocultar texto"
@ -1367,9 +1360,9 @@ msgstr "Contrasinal"
#: ../js/ui/shellMountOperation.js:391 #: ../js/ui/shellMountOperation.js:391
msgid "Remember Password" msgid "Remember Password"
msgstr "Lembrar o contrasinal" msgstr "Lembrar contrasinal"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:140 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:114
msgid "Unlock" msgid "Unlock"
msgstr "Desbloquear" msgstr "Desbloquear"
@ -1433,12 +1426,10 @@ msgid "Visibility"
msgstr "Visibilidade" msgstr "Visibilidade"
#: ../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 "Enviar ficheiros ao dispositivo…" msgstr "Enviar ficheiros ao dispositivo…"
#: ../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 "Configurar un dispositivo novo…" msgstr "Configurar un dispositivo novo…"
@ -1465,7 +1456,6 @@ msgid "connecting..."
msgstr "conectando…" msgstr "conectando…"
#: ../js/ui/status/bluetooth.js:239 #: ../js/ui/status/bluetooth.js:239
#| msgid "Send Files..."
msgid "Send Files…" msgid "Send Files…"
msgstr "Enviar ficheiros…" msgstr "Enviar ficheiros…"
@ -1547,7 +1537,7 @@ msgstr "Mostrar a distribución do teclado"
#: ../js/ui/status/keyboard.js:373 #: ../js/ui/status/keyboard.js:373
msgid "Region & Language Settings" msgid "Region & Language Settings"
msgstr "Configuración rexional e de idioma" msgstr "Preferencias de rexión e idioma"
#: ../js/ui/status/lockScreenMenu.js:43 #: ../js/ui/status/lockScreenMenu.js:43
msgid "Volume, network, battery" msgid "Volume, network, battery"
@ -1592,7 +1582,7 @@ msgstr "non dispoñíbel"
#: ../js/ui/status/network.js:493 ../js/ui/status/network.js:1551 #: ../js/ui/status/network.js:493 ../js/ui/status/network.js:1551
msgid "connection failed" msgid "connection failed"
msgstr "conexión fallida" msgstr "conexión fallada"
#: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1435 #: ../js/ui/status/network.js:552 ../js/ui/status/network.js:1435
#: ../js/ui/status/network.js:1627 #: ../js/ui/status/network.js:1627
@ -1678,7 +1668,6 @@ msgstr "Preferencias de enerxía"
#. 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 "Estimando…" msgstr "Estimando…"
@ -1778,59 +1767,59 @@ msgstr "Volume"
msgid "Microphone" msgid "Microphone"
msgstr "Micrófono" msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:151 #: ../js/ui/unlockDialog.js:125
msgid "Log in as another user" msgid "Log in as another user"
msgstr "Iniciar sesión como outro usuario" msgstr "Iniciar sesión como outro usuario"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:146
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Desbloquear xanela" msgstr "Desbloquear xanela"
#: ../js/ui/userMenu.js:192 #: ../js/ui/userMenu.js:193
msgid "Available" msgid "Available"
msgstr "Dispoñíbel" msgstr "Dispoñíbel"
#: ../js/ui/userMenu.js:195 #: ../js/ui/userMenu.js:196
msgid "Busy" msgid "Busy"
msgstr "Ocupado" msgstr "Ocupado"
#: ../js/ui/userMenu.js:198 #: ../js/ui/userMenu.js:199
msgid "Invisible" msgid "Invisible"
msgstr "Invisíbel" msgstr "Invisíbel"
#: ../js/ui/userMenu.js:201 #: ../js/ui/userMenu.js:202
msgid "Away" msgid "Away"
msgstr "Ausente" msgstr "Ausente"
#: ../js/ui/userMenu.js:204 #: ../js/ui/userMenu.js:205
msgid "Idle" msgid "Idle"
msgstr "Inactivo" msgstr "Inactivo"
#: ../js/ui/userMenu.js:207 #: ../js/ui/userMenu.js:208
msgid "Offline" msgid "Offline"
msgstr "Desconectado" msgstr "Desconectado"
#: ../js/ui/userMenu.js:779 #: ../js/ui/userMenu.js:781
msgid "Notifications" msgid "Notifications"
msgstr "Notificacións" msgstr "Notificacións"
#: ../js/ui/userMenu.js:795 #: ../js/ui/userMenu.js:797
msgid "Switch User" msgid "Switch User"
msgstr "Cambiar de usuario" msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:800 #: ../js/ui/userMenu.js:802
msgid "Log Out" msgid "Log Out"
msgstr "Saír da sesión" msgstr "Saír da sesión"
#: ../js/ui/userMenu.js:820 #: ../js/ui/userMenu.js:822
msgid "Install Updates & Restart" msgid "Install Updates & Restart"
msgstr "Instalar actualizacións e reiniciar" msgstr "Instalar actualizacións e reiniciar"
#: ../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 "O seu estado de conversa definirase como «ocupado»" msgstr "O seu estado de conversa estabelecerase a «ocupado»"
#: ../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."
@ -1839,33 +1828,35 @@ msgstr ""
"conversa. O seu estado de conexión axustouse para que outros saiban que non " "conversa. O seu estado de conexión axustouse para que outros saiban que non "
"quere ver as súas mensaxes." "quere ver as súas mensaxes."
#: ../js/ui/userMenu.js:885 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Hai outros usuarios conectados." msgstr "Hai outros usuarios conectados."
#: ../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 "Se apaga o computador pode perder o traballo que non gardou." msgstr "Se apaga o computador pode perder o traballo que non gardou."
#: ../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 (remoto)" msgstr "%s (remoto)"
#: ../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 (consola)" msgstr "%s (consola)"
#: ../js/ui/viewSelector.js:101 #: ../js/ui/viewSelector.js:100
msgid "Applications" msgid "Applications"
msgstr "Aplicativos" msgstr "Aplicativos"
#: ../js/ui/viewSelector.js:105 #: ../js/ui/viewSelector.js:104
msgid "Search" msgid "Search"
msgstr "Buscar" msgstr "Buscar"
#: ../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"
@ -1874,7 +1865,7 @@ msgstr ""
"Hoxe non ten ningunha mensaxe:\n" "Hoxe non ten ningunha mensaxe:\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 o oráculo dí" msgstr "%s o oráculo dí"

1950
po/ia.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -461,7 +461,7 @@ msgstr "Nepavyko įvykdyti „%s“:"
#: ../js/ui/appDisplay.js:349 #: ../js/ui/appDisplay.js:349
msgid "Frequent" msgid "Frequent"
msgstr "Dažniausios" msgstr "Dažnai naudojamos"
#: ../js/ui/appDisplay.js:356 #: ../js/ui/appDisplay.js:356
msgid "All" msgid "All"
@ -1262,7 +1262,7 @@ msgstr "Apžvalga"
#. characters. #. characters.
#: ../js/ui/overview.js:271 #: ../js/ui/overview.js:271
msgid "Type to search…" msgid "Type to search…"
msgstr "Rašykite ko ieškote…" msgstr "Rašykite, ko ieškote…"
#: ../js/ui/panel.js:612 #: ../js/ui/panel.js:612
msgid "Quit" msgid "Quit"
@ -1299,7 +1299,7 @@ msgstr "Užverti"
#. long format #. long format
#: ../js/ui/screenShield.js:86 #: ../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:151 #: ../js/ui/screenShield.js:151
#, c-format #, c-format

320
po/ml.po
View File

@ -10,9 +10,9 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-03-23 11:49+0000\n" "POT-Creation-Date: 2013-04-24 18:23+0000\n"
"PO-Revision-Date: 2013-03-25 14:57+0530\n" "PO-Revision-Date: 2013-04-25 00:32+0530\n"
"Last-Translator: Ani Peter <peter.ani@gmail.com>\n" "Last-Translator: Balasankar C <c.balasankar@gmail.com>\n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n" "Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: ml\n" "Language: ml\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -44,10 +44,14 @@ msgid "Focus the active notification"
msgstr "സജീവമായ അറിയിപ്പിനെ കേന്ദ്രീകരിക്കുക" msgstr "സജീവമായ അറിയിപ്പിനെ കേന്ദ്രീകരിക്കുക"
#: ../data/50-gnome-shell-system.xml.in.h:4 #: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Show the overview"
msgstr "പൊതുവായ അവലോകനം കാണിക്കുക"
#: ../data/50-gnome-shell-system.xml.in.h:5
msgid "Show all applications" msgid "Show all applications"
msgstr "എല്ലാ പ്രയോഗങ്ങളും കാണിയ്ക്കുക" msgstr "എല്ലാ പ്രയോഗങ്ങളും കാണിയ്ക്കുക"
#: ../data/50-gnome-shell-system.xml.in.h:5 #: ../data/50-gnome-shell-system.xml.in.h:6
msgid "Open the application menu" msgid "Open the application menu"
msgstr "പ്രയോഗത്തിന്റെ മെനു തുറക്കുക" msgstr "പ്രയോഗത്തിന്റെ മെനു തുറക്കുക"
@ -71,8 +75,7 @@ msgstr "ഗ്നോം ഷെല്‍ എക്സ്റ്റെന്‍ഷ
#: ../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"
msgstr "" msgstr ""
"Alt-F2-ല്‍ ഡവലപ്പര്‍മാര്‍ക്കും ടെസ്റ്റേര്‍സിനും പ്രയോജനകരമായ ആന്തരിക " "Alt-F2-ല്‍ ഡവലപ്പര്‍മാര്‍ക്കും ടെസ്റ്റേര്‍സിനും പ്രയോജനകരമായ ആന്തരിക പ്രയോഗങ്ങള്‍ പ്രവര്‍ത്തന "
"പ്രയോഗങ്ങള്‍ പ്രവര്‍ത്തന "
"സജ്ജമാക്കുന്നു" "സജ്ജമാക്കുന്നു"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:2 #: ../data/org.gnome.shell.gschema.xml.in.in.h:2
@ -80,8 +83,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 ""
"Alt-F2 ഡയലോഗ് ഉപയോഗിച്ചു് ആന്തരിക ഡീബഗ്ഗിലേക്കും നീരീക്ഷണ പ്രയോഗങ്ങളിലേക്കും " "Alt-F2 ഡയലോഗ് ഉപയോഗിച്ചു് ആന്തരിക ഡീബഗ്ഗിലേക്കും നീരീക്ഷണ പ്രയോഗങ്ങളിലേക്കും പ്രവേശനം "
"പ്രവേശനം "
"അനുവദിയ്ക്കുക." "അനുവദിയ്ക്കുക."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3 #: ../data/org.gnome.shell.gschema.xml.in.in.h:3
@ -95,19 +97,14 @@ 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 ""
"ഗ്നോം ഷെല്‍ എക്സ്റ്റെന്‍ഷനുകള്‍ക്കു് ഒരു യുയുഐഡി വിശേഷതയുണ്ടു്; ലഭ്യമാക്കേണ്ട " "ഗ്നോം ഷെല്‍ എക്സ്റ്റെന്‍ഷനുകള്‍ക്കു് ഒരു യുയുഐഡി വിശേഷതയുണ്ടു്; ലഭ്യമാക്കേണ്ട എക്സ്റ്റെന്‍ഷനുകള്‍ ഈ കീ പട്ടിക "
"എക്സ്റ്റെന്‍ഷനുകള്‍ ഈ കീ പട്ടിക " "ലഭ്യമാക്കുന്നു. ലഭ്യമാക്കേണ്ട ഏതു് എക്സ്റ്റെന്‍ഷനും ഈ പട്ടികയിലുണ്ടാവണം. org.gnome.Shell-ല്‍ "
"ലഭ്യമാക്കുന്നു. ലഭ്യമാക്കേണ്ട ഏതു് എക്സ്റ്റെന്‍ഷനും ഈ പട്ടികയിലുണ്ടാവണം. " "നിങ്ങള്‍ക്കു് EnableExtension, DisableExtension എന്നീ ഡീബസ് രീതികളിലൂടെ ഈ പട്ടിക "
"org.gnome.Shell-ല്‍ "
"നിങ്ങള്‍ക്കു് EnableExtension, DisableExtension എന്നീ ഡീബസ് രീതികളിലൂടെ ഈ "
"പട്ടിക "
"കൈകാര്യം ചെയ്യുവാനും സാധിയ്ക്കുന്നു." "കൈകാര്യം ചെയ്യുവാനും സാധിയ്ക്കുന്നു."
#: ../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"
msgstr "" msgstr "പ്രയോഗങ്ങളുടെ ഉപയോഗത്തെപ്പറ്റിയുള്ള സ്ഥിതിവിവരക്കണക്കുകള്‍ ശേഖരിയ്ക്കണമോ എന്നു്"
"പ്രയോഗങ്ങളുടെ ഉപയോഗത്തെപ്പറ്റിയുള്ള സ്ഥിതിവിവരക്കണക്കുകള്‍ ശേഖരിയ്ക്കണമോ "
"എന്നു്"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6 #: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid "" msgid ""
@ -116,12 +113,9 @@ msgid ""
"want to disable this for privacy reasons. Please note that doing so won't " "want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data." "remove already saved data."
msgstr "" msgstr ""
"ഏറ്റവും കൂടുതല്‍ തവണ ഉപയോഗിയ്ക്കുന്ന പ്രയോഗങ്ങള്‍ ലഭ്യമാക്കുന്നതിനായി ഷെല്‍ " "ഏറ്റവും കൂടുതല്‍ തവണ ഉപയോഗിയ്ക്കുന്ന പ്രയോഗങ്ങള്‍ ലഭ്യമാക്കുന്നതിനായി ഷെല്‍ സാധാരണയായി സജീവമായ "
"സാധാരണയായി സജീവമായ " "പ്രയോഗങ്ങളെ നിരീക്ഷിയ്ക്കുന്നു. (ഉദാഹരണത്തിനു്, ലോഞ്ചേര്‍സ്). ഈ ഡേറ്റാ സ്വകാര്യമായി "
"പ്രയോഗങ്ങളെ നിരീക്ഷിയ്ക്കുന്നു. (ഉദാഹരണത്തിനു്, ലോഞ്ചേര്‍സ്). ഈ ഡേറ്റാ " "സൂക്ഷിയ്ക്കുന്നെങ്കിലും, ചില കാരണങ്ങളാല്‍ ഇതു് പ്രവര്‍ത്തന രഹിതമാക്കേണ്ടതുണ്ടു്. ഇങ്ങനെ ചെയ്യുന്നതു് "
"സ്വകാര്യമായി "
"സൂക്ഷിയ്ക്കുന്നെങ്കിലും, ചില കാരണങ്ങളാല്‍ ഇതു് പ്രവര്‍ത്തന "
"രഹിതമാക്കേണ്ടതുണ്ടു്. ഇങ്ങനെ ചെയ്യുന്നതു് "
"നിങ്ങള്‍ സൂക്ഷിച്ച ഡേറ്റയെ ബാധിയ്ക്കുന്നതല്ല." "നിങ്ങള്‍ സൂക്ഷിച്ച ഡേറ്റയെ ബാധിയ്ക്കുന്നതല്ല."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7 #: ../data/org.gnome.shell.gschema.xml.in.in.h:7
@ -132,8 +126,7 @@ msgstr "ഇഷ്ടമുള്ള പ്രയോഗങ്ങള്‍ക്
msgid "" msgid ""
"The applications corresponding to these identifiers will be displayed in the " "The applications corresponding to these identifiers will be displayed in the "
"favorites area." "favorites area."
msgstr "" 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"
@ -144,8 +137,8 @@ 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"
@ -160,8 +153,7 @@ msgid ""
"Internally used to store the last IM presence explicitly set by the user. " "Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration." "The value here is from the TpConnectionPresenceType enumeration."
msgstr "" msgstr ""
"ഉപയോക്താവു് സജ്ജമാക്കിയ അവസാന ഐഎം ആന്തരികമായി സൂക്ഷിയ്ക്കുന്നതിനു് " "ഉപയോക്താവു് സജ്ജമാക്കിയ അവസാന ഐഎം ആന്തരികമായി സൂക്ഷിയ്ക്കുന്നതിനു് ഉപയോഗിയ്ക്കുന്നു. മൂല്യം "
"ഉപയോഗിയ്ക്കുന്നു. മൂല്യം "
"TpConnectionPresenceType തരത്തിലുള്ളതാകുന്നു." "TpConnectionPresenceType തരത്തിലുള്ളതാകുന്നു."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14 #: ../data/org.gnome.shell.gschema.xml.in.in.h:14
@ -169,8 +161,7 @@ msgid ""
"Internally used to store the last session presence status for the user. The " "Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration." "value here is from the GsmPresenceStatus enumeration."
msgstr "" msgstr ""
"ഉപയോക്താവിനുള്ള അവസാന സെഷന്‍ അവസ്ഥ ആന്തരികമായി സൂക്ഷിയ്ക്കുന്നതിനു് " "ഉപയോക്താവിനുള്ള അവസാന സെഷന്‍ അവസ്ഥ ആന്തരികമായി സൂക്ഷിയ്ക്കുന്നതിനു് ഉപയോഗിയ്ക്കുന്നു. മൂല്യം "
"ഉപയോഗിയ്ക്കുന്നു. മൂല്യം "
"GsmPresenceStatus തരത്തിലുള്ളതാകുന്നു." "GsmPresenceStatus തരത്തിലുള്ളതാകുന്നു."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15 #: ../data/org.gnome.shell.gschema.xml.in.in.h:15
@ -182,15 +173,13 @@ 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 ""
@ -199,10 +188,9 @@ 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"
@ -228,61 +216,65 @@ msgstr "\"പ്രയോഗങ്ങള്‍ കാണിയ്ക്കുക
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 ""
"പ്രവര്‍ത്തികളുടെ അവലോകനത്തിന്റെ \"പ്രയോഗങ്ങള്‍ കാണിയ്ക്കുക\" എന്ന കാഴ്ച " "പ്രവര്‍ത്തികളുടെ അവലോകനത്തിന്റെ \"പ്രയോഗങ്ങള്‍ കാണിയ്ക്കുക\" എന്ന കാഴ്ച തുറക്കുന്നതിനുള്ള കീബൈന്‍ഡിങ്"
"തുറക്കുന്നതിനുള്ള കീബൈന്‍ഡിങ്"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25 #: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to open the overview"
msgstr "പൊതുവായ അവലോകനം തുറക്കുന്നതിനുള്ള കീബൈന്‍ഡിങ്"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to open the Activities Overview."
msgstr "പ്രയോഗങ്ങളുടെ പൊതുവായ അവലോകനം എന്ന കാഴ്ച തുറക്കുന്നതിനുള്ള കീബൈന്‍ഡിങ്"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
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:28
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:29
msgid "Keybinding to focus the active notification" msgid "Keybinding to focus the active notification"
msgstr "സജീവമായ അറിയിപ്പിനുള്ള കീബൈന്‍ഡിങ്" msgstr "സജീവമായ അറിയിപ്പിനുള്ള കീബൈന്‍ഡിങ്"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28 #: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "Keybinding to focus the active notification." msgid "Keybinding to focus the active notification."
msgstr "സജീവമായ അറിയിപ്പിനുള്ള കീബൈന്‍ഡിങ്." msgstr "സജീവമായ അറിയിപ്പിനുള്ള കീബൈന്‍ഡിങ്."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29 #: ../data/org.gnome.shell.gschema.xml.in.in.h:31
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:32
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:33
msgid "Which keyboard to use" msgid "Which keyboard to use"
msgstr "ഏതു് കീബോര്‍ഡ് ഉപയോഗിയ്ക്കണം" msgstr "ഏതു് കീബോര്‍ഡ് ഉപയോഗിയ്ക്കണം"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32 #: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "The type of keyboard to use." msgid "The type of keyboard to use."
msgstr "ഏതു് തരം കീബോര്‍ഡ് ഉപയോഗിയ്ക്കണം." msgstr "ഏതു് തരം കീബോര്‍ഡ് ഉപയോഗിയ്ക്കണം."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33 #: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Framerate used for recording screencasts." msgid "Framerate used for recording screencasts."
msgstr "സ്ക്രീന്‍കാസ്റ്റുകള്‍ റിക്കോര്‍ഡ് ചെയ്യുന്നതിനുള്ള ഫ്രെയിം റേറ്റ്." msgstr "സ്ക്രീന്‍കാസ്റ്റുകള്‍ റിക്കോര്‍ഡ് ചെയ്യുന്നതിനുള്ള ഫ്രെയിം റേറ്റ്."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34 #: ../data/org.gnome.shell.gschema.xml.in.in.h:36
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 ""
"ഗ്നോം ഷെല്ലിന്റെ സ്ക്രീന്‍കാസ്റ്റ് റിക്കോര്‍ഡര്‍ റീക്കോര്‍ഡ് ചെയ്തിട്ടുള്ള " "ഗ്നോം ഷെല്ലിന്റെ സ്ക്രീന്‍കാസ്റ്റ് റിക്കോര്‍ഡര്‍ റീക്കോര്‍ഡ് ചെയ്തിട്ടുള്ള സ്ക്രീന്‍കാസ്റ്റിന്റെ "
"സ്ക്രീന്‍കാസ്റ്റിന്റെ "
"ഫ്രെയിംറേറ്റ്, ഒരു സെക്കന്‍ഡില്‍ ഒരു ഫ്രെയിം." "ഫ്രെയിംറേറ്റ്, ഒരു സെക്കന്‍ഡില്‍ ഒരു ഫ്രെയിം."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35 #: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "The gstreamer pipeline used to encode the screencast" msgid "The gstreamer pipeline used to encode the screencast"
msgstr "സ്ക്രീന്‍കാസ്റ്റ് എന്‍കോഡ് ചെയ്യുന്നതിനുള്ള gstreamer പൈപ്പ്‌ലൈന്‍" msgstr "സ്ക്രീന്‍കാസ്റ്റ് എന്‍കോഡ് ചെയ്യുന്നതിനുള്ള gstreamer പൈപ്പ്‌ലൈന്‍"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37 #: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#, no-c-format #, no-c-format
msgid "" msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax " "Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -296,78 +288,68 @@ msgid ""
"threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is " "threads=%T ! queue ! webmmux' and records to WEBM using the VP8 codec. %T is "
"used as a placeholder for a guess at the optimal thread count on the system." "used as a placeholder for a guess at the optimal thread count on the system."
msgstr "" msgstr ""
"റിക്കോര്‍ഡിങുകള്‍ എന്‍കോഡ് ചെയ്യുന്നതിനായി GStreamer പൈപ്പ് ലൈന്‍ " "റിക്കോര്‍ഡിങുകള്‍ എന്‍കോഡ് ചെയ്യുന്നതിനായി GStreamer പൈപ്പ് ലൈന്‍ ഉപയോഗിയ്ക്കുന്നു. gst-launch-"
"ഉപയോഗിയ്ക്കുന്നു. gst-launch-" "നുള്ള സിന്റാക്സ് ഉപയോഗിയ്ക്കുന്നു. കാലിയായി സജ്ജമാക്കുമ്പോള്‍ കാലിയാകുന്നു.ഇതു് നിലവില്‍ 'vp8enc "
"നുള്ള സിന്റാക്സ് ഉപയോഗിയ്ക്കുന്നു. കാലിയായി സജ്ജമാക്കുമ്പോള്‍ "
"കാലിയാകുന്നു.ഇതു് നിലവില്‍ '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' ആകുന്നുസ WEBM VP8 കോഡ് ഉപയോഗിച്ചു് റിക്കോര്‍ഡ് ചെയ്യുന്നു." "queue ! webmmux' ആകുന്നുസ WEBM VP8 കോഡ് ഉപയോഗിച്ചു് റിക്കോര്‍ഡ് ചെയ്യുന്നു."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38 #: ../data/org.gnome.shell.gschema.xml.in.in.h:40
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:41
msgid "" msgid ""
"The filename for recorded screencasts will be a unique filename based on the " "The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to " "current date, and use this extension. It should be changed when recording to "
"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:42
msgid "The application icon mode." msgid "The application icon mode."
msgstr "പ്രയോഗത്തിന്റെ ഐക്കണ്‍ മോഡ്." msgstr "പ്രയോഗത്തിന്റെ ഐക്കണ്‍ മോഡ്."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:41 #: ../data/org.gnome.shell.gschema.xml.in.in.h:43
msgid "" msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities " "Configures how the windows are shown in the switcher. Valid possibilities "
"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-"
"സാധ്യതകള്‍: 'thumbnail-only' (ജാലകത്തിന്റെ പ്രതിരൂപം കാണിയ്ക്കുന്നു), "
"'app-icon-"
"only' (പ്രയോഗത്തിന്റെ പ്രതിരൂപം കാണിയ്ക്കുന്നു) അല്ലെങ്കില്‍ 'both'." "only' (പ്രയോഗത്തിന്റെ പ്രതിരൂപം കാണിയ്ക്കുന്നു) അല്ലെങ്കില്‍ 'both'."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:42 #: ../data/org.gnome.shell.gschema.xml.in.in.h:44
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:45
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-ലുള്ള കീ ഈ കീ തിരുത്തിയെഴുതുന്നു."
"ഗ്നോം ഷെല്‍ പ്രവര്‍ത്തിയ്ക്കുമ്പോള്‍ org.gnome.mutter-ലുള്ള കീ ഈ കീ "
"തിരുത്തിയെഴുതുന്നു."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:44 #: ../data/org.gnome.shell.gschema.xml.in.in.h:46
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:47
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-ലുള്ള " "ഗ്നോം ഷെല്‍ പ്രവര്‍ത്തിയ്ക്കുമ്പോള്‍ org.gnome.desktop.wm.preferences-ലുള്ള കീ ഈ കീ "
"കീ ഈ കീ തിരുത്തിയെഴുതുന്നു." "തിരുത്തിയെഴുതുന്നു."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:46 #: ../data/org.gnome.shell.gschema.xml.in.in.h:48
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:49
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:50
msgid "Workspaces only on primary monitor" msgid "Workspaces only on primary monitor"
msgstr "പ്രധാന മോണിറ്ററില്‍ മാത്രം പണിയിടങ്ങള്‍" msgstr "പ്രധാന മോണിറ്ററില്‍ മാത്രം പണിയിടങ്ങള്‍"
@ -382,12 +364,9 @@ msgstr "എക്സ്റ്റെന്‍ഷന്‍"
#: ../js/extensionPrefs/main.js:189 #: ../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 "മുകളിലുള്ള കോമ്പോ ബോക്സ് ഉപയോഗിച്ചു് ക്രമീകരിയ്ക്കുന്നതിനുള്ളൊരു എക്സ്റ്റെന്‍ഷന്‍ തെര‍ഞ്ഞെടുക്കുക."
"മുകളിലുള്ള കോമ്പോ ബോക്സ് ഉപയോഗിച്ചു് ക്രമീകരിയ്ക്കുന്നതിനുള്ളൊരു "
"എക്സ്റ്റെന്‍ഷന്‍ തെര‍ഞ്ഞെടുക്കുക."
#: ../js/gdm/loginDialog.js:405 #: ../js/gdm/loginDialog.js:405
#| msgid "Session..."
msgid "Session…" msgid "Session…"
msgstr "പ്രവര്‍ത്തനവേള..." msgstr "പ്രവര്‍ത്തനവേള..."
@ -398,32 +377,32 @@ msgstr "പ്രവര്‍ത്തനവേള..."
msgid "Not listed?" msgid "Not listed?"
msgstr "ലഭ്യമല്ലേ?" msgstr "ലഭ്യമല്ലേ?"
#: ../js/gdm/loginDialog.js:786 ../js/ui/components/networkAgent.js:137 #: ../js/gdm/loginDialog.js:787 ../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:99 #: ../js/ui/status/bluetooth.js:415 ../js/ui/unlockDialog.js:100
#: ../js/ui/userMenu.js:938 #: ../js/ui/userMenu.js:938
msgid "Cancel" msgid "Cancel"
msgstr "വേണ്ട" msgstr "വേണ്ട"
#: ../js/gdm/loginDialog.js:802 #: ../js/gdm/loginDialog.js:803
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "അകത്തുകയറുക" msgstr "അകത്തുകയറുക"
#: ../js/gdm/loginDialog.js:802 #: ../js/gdm/loginDialog.js:803
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:917 ../js/ui/components/networkAgent.js:260 #: ../js/gdm/loginDialog.js:918 ../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:1173 #: ../js/gdm/loginDialog.js:1174
msgid "Login Window" msgid "Login Window"
msgstr "പ്രവേശന ജാലകം" msgstr "പ്രവേശന ജാലകം"
@ -476,23 +455,23 @@ msgstr "ആജ്ഞ പ്രാവര്‍ത്തികമാക്കാ
msgid "Execution of '%s' failed:" msgid "Execution of '%s' failed:"
msgstr "'%s' നടപ്പിലാക്കുന്നതില്‍ പരാജയപ്പെട്ടു:" msgstr "'%s' നടപ്പിലാക്കുന്നതില്‍ പരാജയപ്പെട്ടു:"
#: ../js/ui/appDisplay.js:349 #: ../js/ui/appDisplay.js:351
msgid "Frequent" msgid "Frequent"
msgstr "ഇടയ്ക്കിടെ" msgstr "ഇടയ്ക്കിടെ"
#: ../js/ui/appDisplay.js:356 #: ../js/ui/appDisplay.js:358
msgid "All" msgid "All"
msgstr "എല്ലാം" msgstr "എല്ലാം"
#: ../js/ui/appDisplay.js:914 #: ../js/ui/appDisplay.js:916
msgid "New Window" msgid "New Window"
msgstr "പുതിയ വിന്‍ഡോ" msgstr "പുതിയ വിന്‍ഡോ"
#: ../js/ui/appDisplay.js:917 ../js/ui/dash.js:284 #: ../js/ui/appDisplay.js:919 ../js/ui/dash.js:284
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "ഇഷ്ടപ്പെട്ടവയില്‍ നിന്നും നീക്കം ചെയ്യുക" msgstr "ഇഷ്ടപ്പെട്ടവയില്‍ നിന്നും നീക്കം ചെയ്യുക"
#: ../js/ui/appDisplay.js:918 #: ../js/ui/appDisplay.js:920
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "ഇഷ്ടപ്പെട്ടവയിലേക്ക് ചേര്‍ക്കുക" msgstr "ഇഷ്ടപ്പെട്ടവയിലേക്ക് ചേര്‍ക്കുക"
@ -529,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
@ -732,8 +711,7 @@ 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 "" msgstr ""
"വയര്‍ലെസ് നെറ്റ്‌വര്‍ക്ക് '%s'-ലേക്ക് പ്രവേശിക്കുന്നതിനായി രഹസ്യവാക്കുകള്‍ " "വയര്‍ലെസ് നെറ്റ്‌വര്‍ക്ക് '%s'-ലേക്ക് പ്രവേശിക്കുന്നതിനായി രഹസ്യവാക്കുകള്‍ അല്ലെങ്കില്‍ എന്‍ക്രിപ്ഷന്‍ കീകള്‍ "
"അല്ലെങ്കില്‍ എന്‍ക്രിപ്ഷന്‍ കീകള്‍ "
"ആവശ്യമുണ്ടു്." "ആവശ്യമുണ്ടു്."
#: ../js/ui/components/networkAgent.js:314 #: ../js/ui/components/networkAgent.js:314
@ -790,7 +768,7 @@ 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:47
#, no-c-format #, no-c-format
msgid "Screencast from %d %t" msgid "Screencast from %d %t"
msgstr "%d-ല്‍ നിന്നുള്ള സ്ക്രീന്‍കാസ്റ്റ്, %t-ല്‍" msgstr "%d-ല്‍ നിന്നുള്ള സ്ക്രീന്‍കാസ്റ്റ്, %t-ല്‍"
@ -913,8 +891,7 @@ msgstr "%s നിങ്ങള്‍ക്കു് %s അയച്ചിരി
#: ../js/ui/components/telepathyClient.js:1206 #: ../js/ui/components/telepathyClient.js:1206
#, c-format #, c-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "" msgstr "നിങ്ങള്‍ ഓണ്‍ലൈന്‍ ആകുമ്പോള്‍ കാണുന്നതിനുള്ള അനുമതി %s-നു് ആവശ്യമുണ്ടു്"
"നിങ്ങള്‍ ഓണ്‍ലൈന്‍ ആകുമ്പോള്‍ കാണുന്നതിനുള്ള അനുമതി %s-നു് ആവശ്യമുണ്ടു്"
#: ../js/ui/components/telepathyClient.js:1298 #: ../js/ui/components/telepathyClient.js:1298
msgid "Network error" msgid "Network error"
@ -987,9 +964,7 @@ msgstr "ഈ അക്കൌണ്ട് നിലവില്‍ സര്‍വ
#: ../js/ui/components/telepathyClient.js:1332 #: ../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 "അതേ ശ്രോതസ്സ് ഉപയോഗിച്ചു് ഒരു പുതിയ കണക്ഷന്‍ ഉപയോഗിച്ചു് ഈ കണക്ഷന്‍ മാറ്റിസ്ഥാപിയ്ക്കുന്നു"
"അതേ ശ്രോതസ്സ് ഉപയോഗിച്ചു് ഒരു പുതിയ കണക്ഷന്‍ ഉപയോഗിച്ചു് ഈ കണക്ഷന്‍ "
"മാറ്റിസ്ഥാപിയ്ക്കുന്നു"
#: ../js/ui/components/telepathyClient.js:1334 #: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server" msgid "The account already exists on the server"
@ -1006,17 +981,14 @@ msgstr "സമ്മതപത്രം വീണ്ടും ആവശ്യപ
#: ../js/ui/components/telepathyClient.js:1340 #: ../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 "സമ്മതപത്രം സുരക്ഷിതമല്ലാത്തൊരു സിഫര്‍ ആല്‍ഗോരിഥം ഉപയോഗിയ്ക്കുന്നു അല്ലെങ്കില്‍ ഉചിതമല്ല"
"സമ്മതപത്രം സുരക്ഷിതമല്ലാത്തൊരു സിഫര്‍ ആല്‍ഗോരിഥം ഉപയോഗിയ്ക്കുന്നു "
"അല്ലെങ്കില്‍ ഉചിതമല്ല"
#: ../js/ui/components/telepathyClient.js:1342 #: ../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"
msgstr "" msgstr ""
"സര്‍വറിന്റെ സമ്മതപത്രത്തിന്റെ വ്യാപ്തി, അല്ലെങ്കില്‍ സര്‍വര്‍ സമ്മതപത്ര " "സര്‍വറിന്റെ സമ്മതപത്രത്തിന്റെ വ്യാപ്തി, അല്ലെങ്കില്‍ സര്‍വര്‍ സമ്മതപത്ര ചെയിന്റെ വ്യാപ്തി, എന്നിവ "
"ചെയിന്റെ വ്യാപ്തി, എന്നിവ "
"പരിധിയില്‍ കൂടുന്നു" "പരിധിയില്‍ കൂടുന്നു"
#: ../js/ui/components/telepathyClient.js:1344 #: ../js/ui/components/telepathyClient.js:1344
@ -1085,8 +1057,7 @@ msgstr "പുറത്ത് കടക്കുക"
#: ../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 ""
"ഈ പ്രയോഗങ്ങളില്‍ നിന്നും പുറത്തു് കടക്കുന്നതിനായി പുറത്തു കടക്കുക ക്ലിക്ക് " "ഈ പ്രയോഗങ്ങളില്‍ നിന്നും പുറത്തു് കടക്കുന്നതിനായി പുറത്തു കടക്കുക ക്ലിക്ക് ചെയ്തു് സിസ്റ്റത്തില്‍ നിന്നും "
"ചെയ്തു് സിസ്റ്റത്തില്‍ നിന്നും "
"പുറത്തു് കടക്കുക." "പുറത്തു് കടക്കുക."
#: ../js/ui/endSessionDialog.js:67 #: ../js/ui/endSessionDialog.js:67
@ -1120,8 +1091,7 @@ msgstr "നിര്‍ത്തുക"
#: ../js/ui/endSessionDialog.js:84 #: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system." msgid "Click Power Off to quit these applications and power off the system."
msgstr "" msgstr ""
"ഈ പ്രയോഗങ്ങളില്‍ നിന്നും പുറത്തു് കടക്കുന്നതിനായി പവര്‍ ഓഫ് ചെയ്യുക ക്ലിക്ക് " "ഈ പ്രയോഗങ്ങളില്‍ നിന്നും പുറത്തു് കടക്കുന്നതിനായി പവര്‍ ഓഫ് ചെയ്യുക ക്ലിക്ക് ചെയ്തു സിസ്റ്റിന്റെ പവര്‍ "
"ചെയ്തു സിസ്റ്റിന്റെ പവര്‍ "
"ഓഫ് ചെയ്യുക." "ഓഫ് ചെയ്യുക."
#: ../js/ui/endSessionDialog.js:86 #: ../js/ui/endSessionDialog.js:86
@ -1152,8 +1122,7 @@ msgstr "പുനരാരംഭിക്കുക"
#: ../js/ui/endSessionDialog.js:101 #: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system." msgid "Click Restart to quit these applications and restart the system."
msgstr "" msgstr "ഈ പ്രയോഗങ്ങള്‍ നിറുത്തി സിസ്റ്റം പുനരാരംഭിക്കുവാന്‍ പുനരാരംഭിക്കൂ അമര്‍ത്തുക"
"ഈ പ്രയോഗങ്ങള്‍ നിറുത്തി സിസ്റ്റം പുനരാരംഭിക്കുവാന്‍ പുനരാരംഭിക്കൂ അമര്‍ത്തുക"
#: ../js/ui/endSessionDialog.js:103 #: ../js/ui/endSessionDialog.js:103
#, c-format #, c-format
@ -1173,9 +1142,7 @@ msgstr "ഇന്‍സ്റ്റോള്‍"
#: ../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 "" msgstr "extensions.gnome.org ഇല്‍ നിന്നും '%s' ഡൗണ്‍ലോട് ചെയ്ത് ഇന്‍സ്റ്റോള്‍ ചെയ്യേണമോ?"
"extensions.gnome.org ഇല്‍ നിന്നും '%s' ഡൗണ്‍ലോട് ചെയ്ത് ഇന്‍സ്റ്റോള്‍ "
"ചെയ്യേണമോ?"
#: ../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
@ -1204,7 +1171,9 @@ msgstr "പിശകുകള്‍ കാണിക്കുക"
msgid "Enabled" msgid "Enabled"
msgstr "പ്രവര്‍ത്തനക്ഷമമാക്കി" msgstr "പ്രവര്‍ത്തനക്ഷമമാക്കി"
#: ../js/ui/lookingGlass.js:769 #. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:769 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "പ്രവര്‍ത്തനരഹിതമാക്കി" msgstr "പ്രവര്‍ത്തനരഹിതമാക്കി"
@ -1237,7 +1206,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 "സന്ദേശങ്ങള്‍ വെടിപ്പാക്കുക"
@ -1245,35 +1213,35 @@ msgstr "സന്ദേശങ്ങള്‍ വെടിപ്പാക്ക
msgid "Notification Settings" msgid "Notification Settings"
msgstr "അറിയിപ്പു് ക്രമീകരണങ്ങള്‍" msgstr "അറിയിപ്പു് ക്രമീകരണങ്ങള്‍"
#: ../js/ui/messageTray.js:1709 #: ../js/ui/messageTray.js:1710
msgid "No Messages" msgid "No Messages"
msgstr "സന്ദേശങ്ങളില്ല" msgstr "സന്ദേശങ്ങളില്ല"
#: ../js/ui/messageTray.js:1782 #: ../js/ui/messageTray.js:1783
msgid "Message Tray" msgid "Message Tray"
msgstr "സന്ദേശത്തിന്റെ ട്രേ" msgstr "സന്ദേശത്തിന്റെ ട്രേ"
#: ../js/ui/messageTray.js:2810 #: ../js/ui/messageTray.js:2801
msgid "System Information" msgid "System Information"
msgstr "സിസ്റ്റത്തെക്കുറിച്ചുള്ള വിവരം" msgstr "സിസ്റ്റത്തെക്കുറിച്ചുള്ള വിവരം"
#: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:374 #: ../js/ui/notificationDaemon.js:629 ../src/shell-app.c:378
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "അജ്ഞാതം" msgstr "അജ്ഞാതം"
#: ../js/ui/overviewControls.js:463 ../js/ui/screenShield.js:149 #: ../js/ui/overviewControls.js:472 ../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 പുതിയ സന്ദേശം" msgstr[0] "%d പുതിയ സന്ദേശം"
msgstr[1] "%d പുതിയ സന്ദേശങ്ങള്‍" msgstr[1] "%d പുതിയ സന്ദേശങ്ങള്‍"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:82
msgid "Undo" msgid "Undo"
msgstr "വേണ്ട" msgstr "വേണ്ട"
#: ../js/ui/overview.js:129 #: ../js/ui/overview.js:127
msgid "Overview" msgid "Overview"
msgstr "അവലോകനം" msgstr "അവലോകനം"
@ -1281,22 +1249,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:271 #: ../js/ui/overview.js:260
#| msgid "Type to search..."
msgid "Type to search…" msgid "Type to search…"
msgstr "തെരയുന്നതിനായി ടൈപ്പ് ചെയ്യുക..." msgstr "തെരയുന്നതിനായി ടൈപ്പ് ചെയ്യുക..."
#: ../js/ui/panel.js:612 #: ../js/ui/panel.js:641
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:636 #: ../js/ui/panel.js:692
msgid "Activities" msgid "Activities"
msgstr "പ്രവര്‍ത്തനങ്ങള്‍" msgstr "പ്രവര്‍ത്തനങ്ങള്‍"
#: ../js/ui/panel.js:933 #: ../js/ui/panel.js:989
msgid "Top Bar" msgid "Top Bar"
msgstr "മുകളിലുള്ള ബാര്‍" msgstr "മുകളിലുള്ള ബാര്‍"
@ -1305,15 +1272,15 @@ msgstr "മുകളിലുള്ള ബാര്‍"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle #. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will #. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches. #. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:727 #: ../js/ui/popupMenu.js:718
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-us" msgstr "toggle-switch-us"
#: ../js/ui/runDialog.js:73 #: ../js/ui/runDialog.js:74
msgid "Enter a Command" msgid "Enter a Command"
msgstr "ഒരു കമാന്‍ഡ് നല്‍കുക" msgstr "ഒരു കമാന്‍ഡ് നല്‍കുക"
#: ../js/ui/runDialog.js:109 #: ../js/ui/runDialog.js:110
msgid "Close" msgid "Close"
msgstr "അടക്കുക" msgstr "അടക്കുക"
@ -1334,7 +1301,7 @@ msgstr[1] "%d പുതിയ അറിയിപ്പുകള്‍"
msgid "Lock" msgid "Lock"
msgstr "പൂട്ടുക" msgstr "പൂട്ടുക"
#: ../js/ui/screenShield.js:637 #: ../js/ui/screenShield.js:641
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "ഗ്നോമിന് സ്ക്രീന്‍ പൂട്ടണം" msgstr "ഗ്നോമിന് സ്ക്രീന്‍ പൂട്ടണം"
@ -1345,17 +1312,15 @@ 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:1194 #: ../js/ui/screenShield.js:762 ../js/ui/screenShield.js:1198
#| 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:1195 #: ../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 "പൂട്ടുന്ന സംവിധാനം ഒരു പ്രയോഗം തടസ്സപ്പെടുത്തിയിരിയ്ക്കുന്നു" msgstr "പൂട്ടുന്ന സംവിധാനം ഒരു പ്രയോഗം തടസ്സപ്പെടുത്തിയിരിയ്ക്കുന്നു"
#: ../js/ui/searchDisplay.js:453 #: ../js/ui/searchDisplay.js:453
#| msgid "Searching..."
msgid "Searching…" msgid "Searching…"
msgstr "തെരയുന്നു..." msgstr "തെരയുന്നു..."
@ -1371,11 +1336,11 @@ msgstr "പകര്‍ത്തുക"
msgid "Paste" msgid "Paste"
msgstr "ഒട്ടിയ്ക്കുക" msgstr "ഒട്ടിയ്ക്കുക"
#: ../js/ui/shellEntry.js:106 #: ../js/ui/shellEntry.js:101
msgid "Show Text" msgid "Show Text"
msgstr "പദാവലി കാണിക്കുക" msgstr "പദാവലി കാണിക്കുക"
#: ../js/ui/shellEntry.js:108 #: ../js/ui/shellEntry.js:103
msgid "Hide Text" msgid "Hide Text"
msgstr "പദാവലി മറക്കുക" msgstr "പദാവലി മറക്കുക"
@ -1387,7 +1352,7 @@ msgstr "രഹസ്യവാക്ക്"
msgid "Remember Password" msgid "Remember Password"
msgstr "രഹസ്യവാക്ക് ഓര്‍ത്തു് വയ്ക്കുക" msgstr "രഹസ്യവാക്ക് ഓര്‍ത്തു് വയ്ക്കുക"
#: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:113 #: ../js/ui/shellMountOperation.js:403 ../js/ui/unlockDialog.js:114
msgid "Unlock" msgid "Unlock"
msgstr "പൂട്ട് തുറക്കുക" msgstr "പൂട്ട് തുറക്കുക"
@ -1451,12 +1416,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 "പുതിയൊരു ഡിവൈസ് സജ്ജമാക്കുക..."
@ -1483,7 +1446,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 "ഫയലുകള്‍ അയയ്ക്കുക..."
@ -1696,7 +1658,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 "കണക്കുകൂട്ടുന്നു..."
@ -1796,11 +1757,11 @@ msgstr "ഒച്ച"
msgid "Microphone" msgid "Microphone"
msgstr "മൈക്രോഫോണ്‍" msgstr "മൈക്രോഫോണ്‍"
#: ../js/ui/unlockDialog.js:124 #: ../js/ui/unlockDialog.js:125
msgid "Log in as another user" msgid "Log in as another user"
msgstr "മറ്റൊരു ഉപയോക്താവായി പ്രവേശിയ്ക്കുക" msgstr "മറ്റൊരു ഉപയോക്താവായി പ്രവേശിയ്ക്കുക"
#: ../js/ui/unlockDialog.js:145 #: ../js/ui/unlockDialog.js:146
msgid "Unlock Window" msgid "Unlock Window"
msgstr "ജാലകത്തിന്റെ പൂട്ടു തുറക്കുക" msgstr "ജാലകത്തിന്റെ പൂട്ടു തുറക്കുക"
@ -1853,10 +1814,8 @@ 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."
msgstr "" msgstr ""
"ചാറ്റ് സന്ദേശങ്ങള്‍ എന്ന പോലെ അറിയിപ്പുകള്‍ പ്രവര്‍ത്തന രഹിതമാക്കുന്നു. " "ചാറ്റ് സന്ദേശങ്ങള്‍ എന്ന പോലെ അറിയിപ്പുകള്‍ പ്രവര്‍ത്തന രഹിതമാക്കുന്നു. മറ്റുള്ളവരുടെ ചാറ്റ് സന്ദേശങ്ങള്‍ "
"മറ്റുള്ളവരുടെ ചാറ്റ് സന്ദേശങ്ങള്‍ " "നിങ്ങള്‍ക്കു് കാണുവാന്‍ സാധ്യമല്ല എന്നു് നിങ്ങളുടെ ഓണ്‍ലൈന്‍ അവസ്ഥയില്‍ വ്യക്തമാക്കുന്നു."
"നിങ്ങള്‍ക്കു് കാണുവാന്‍ സാധ്യമല്ല എന്നു് നിങ്ങളുടെ ഓണ്‍ലൈന്‍ അവസ്ഥയില്‍ "
"വ്യക്തമാക്കുന്നു."
#: ../js/ui/userMenu.js:888 #: ../js/ui/userMenu.js:888
msgid "Other users are logged in." msgid "Other users are logged in."
@ -1909,6 +1868,28 @@ msgstr "'%s' തയ്യാറാണ്"
msgid "Evolution Calendar" msgid "Evolution Calendar"
msgstr "ഇവല്യൂഷന്‍ കലണ്ടര്‍" msgstr "ഇവല്യൂഷന്‍ കലണ്ടര്‍"
#. 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 ഔട്ട്പുട്ട്"
msgstr[1] "%u ഔട്ട്പുട്ടുകള്‍"
#. 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 ഇന്‍പുട്ട്"
msgstr[1] "%u ഇന്‍പുട്ടുകള്‍"
#: ../src/gvc/gvc-mixer-control.c:2371
msgid "System Sounds"
msgstr "സിസ്റ്റം ശബ്ദങ്ങള്‍"
#: ../src/main.c:347 #: ../src/main.c:347
msgid "Print version" msgid "Print version"
msgstr "പ്രിന്റ് ചെയ്യുവാന്‍ സാധിയ്ക്കുന്ന പതിപ്പു്" msgstr "പ്രിന്റ് ചെയ്യുവാന്‍ സാധിയ്ക്കുന്ന പതിപ്പു്"
@ -1925,7 +1906,7 @@ msgstr "ഒരു പ്രത്യേക മോഡ് ഉപയോഗിയ്
msgid "List possible modes" msgid "List possible modes"
msgstr "സാധ്യമായ മോഡുകള്‍ ലഭ്യമാക്കുക" msgstr "സാധ്യമായ മോഡുകള്‍ ലഭ്യമാക്കുക"
#: ../src/shell-app.c:622 #: ../src/shell-app.c:626
#, c-format #, c-format
msgid "Failed to launch '%s'" msgid "Failed to launch '%s'"
msgstr "'%s' ലഭ്യമാക്കുന്നതില്‍ പരാജയം" msgstr "'%s' ലഭ്യമാക്കുന്നതില്‍ പരാജയം"
@ -1955,19 +1936,6 @@ msgstr "ഉപയോക്താവു് ആധികാരികത ഉറപ
#~ msgid "More..." #~ msgid "More..."
#~ msgstr "കൂടുതല്‍..." #~ msgstr "കൂടുതല്‍..."
#~ msgid "%u Output"
#~ msgid_plural "%u Outputs"
#~ msgstr[0] "%u ഔട്ട്പുട്ട്"
#~ msgstr[1] "%u ഔട്ട്പുട്ടുകള്‍"
#~ msgid "%u Input"
#~ msgid_plural "%u Inputs"
#~ msgstr[0] "%u ഇന്‍പുട്ട്"
#~ msgstr[1] "%u ഇന്‍പുട്ടുകള്‍"
#~ msgid "System Sounds"
#~ msgstr "സിസ്റ്റം ശബ്ദങ്ങള്‍"
#~ msgctxt "event list time" #~ msgctxt "event list time"
#~ msgid "%H:%M" #~ msgid "%H:%M"
#~ msgstr "%H:%M" #~ msgstr "%H:%M"

157
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-04-03 13:31+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"
@ -339,36 +342,36 @@ 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:630
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: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 "Avbryt" msgstr "Avbryt"
#: ../js/gdm/loginDialog.js:799 #: ../js/gdm/loginDialog.js:802
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:802
msgid "Next" msgid "Next"
msgstr "Neste" msgstr "Neste"
#. 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 "Brukernavn: " msgstr "Brukernavn: "
#: ../js/gdm/loginDialog.js:1157 #: ../js/gdm/loginDialog.js:1173
msgid "Login Window" msgid "Login Window"
msgstr "Innloggingsvindu" msgstr "Innloggingsvindu"
@ -377,8 +380,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 +389,58 @@ 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:249
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:366
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(eller dra finger)" msgstr "(eller dra finger)"
#: ../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 "(f.eks. bruker eller %s)" msgstr "(f.eks. bruker eller %s)"
#: ../js/misc/util.js:94 #: ../js/misc/util.js:97
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 +454,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 +477,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 +579,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,12 +623,12 @@ 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"
@ -1007,7 +1010,7 @@ 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:215
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y" msgstr "%a %e %B, %Y"
@ -1181,15 +1184,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:1782
msgid "Message Tray" msgid "Message Tray"
msgstr "Meldingstrau" msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2864 #: ../js/ui/messageTray.js:2810
msgid "System Information" msgid "System Information"
msgstr "Systeminformasjon" msgstr "Systeminformasjon"
@ -1198,14 +1201,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 +1220,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:612
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:636
msgid "Activities" msgid "Activities"
msgstr "Aktiviteter" msgstr "Aktiviteter"
#: ../js/ui/panel.js:983 #: ../js/ui/panel.js:933
msgid "Top Bar" msgid "Top Bar"
msgstr "Topp-panel" msgstr "Topp-panel"
@ -1244,32 +1247,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:73
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:109
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:640
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 +1283,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:761 ../js/ui/screenShield.js:1197
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:762 ../js/ui/screenShield.js:1198
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 +1307,11 @@ msgstr "Kopier"
msgid "Paste" msgid "Paste"
msgstr "Lim inn" msgstr "Lim inn"
#: ../js/ui/shellEntry.js:105 #: ../js/ui/shellEntry.js:106
msgid "Show Text" msgid "Show Text"
msgstr "Vis tekst" msgstr "Vis tekst"
#: ../js/ui/shellEntry.js:107 #: ../js/ui/shellEntry.js:108
msgid "Hide Text" msgid "Hide Text"
msgstr "Skjul tekst" msgstr "Skjul tekst"
@ -1320,7 +1323,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:113
msgid "Unlock" msgid "Unlock"
msgstr "Lås opp" msgstr "Lås opp"
@ -1725,11 +1728,11 @@ msgstr "Volum"
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 "Logg inn som en annen bruker" msgstr "Logg inn som en annen bruker"
#: ../js/ui/unlockDialog.js:177 #: ../js/ui/unlockDialog.js:145
msgid "Unlock Window" msgid "Unlock Window"
msgstr "Lås opp vindu" msgstr "Lås opp vindu"
@ -1757,27 +1760,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 +1789,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 +1819,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 +1828,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"

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"

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"

2602
po/tr.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

@ -135,7 +135,10 @@ shell_private_sources = \
gactionobservable.h \ gactionobservable.h \
gactionobservable.c \ gactionobservable.c \
gactionobserver.h \ gactionobserver.h \
gactionobserver.c gactionobserver.c \
gtkmenutracker.c \
gtkmenutracker.h \
$(NULL)
libgnome_shell_la_SOURCES = \ libgnome_shell_la_SOURCES = \
$(shell_built_sources) \ $(shell_built_sources) \
@ -158,6 +161,8 @@ libgnome_shell_la_SOURCES = \
shell-invert-lightness-effect.c \ shell-invert-lightness-effect.c \
shell-keyring-prompt.h \ shell-keyring-prompt.h \
shell-keyring-prompt.c \ shell-keyring-prompt.c \
shell-menu-tracker.c \
shell-menu-tracker.h \
shell-mount-operation.c \ shell-mount-operation.c \
shell-network-agent.c \ shell-network-agent.c \
shell-perf-log.c \ shell-perf-log.c \

434
src/gtkmenutracker.c Normal file
View File

@ -0,0 +1,434 @@
/*
* Copyright © 2013 Canonical Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the licence, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Author: Ryan Lortie <desrt@desrt.ca>
*/
#include "config.h"
#include "gtkmenutracker.h"
typedef struct _GtkMenuTrackerSection GtkMenuTrackerSection;
struct _GtkMenuTracker
{
GtkMenuTrackerInsertFunc insert_func;
GtkMenuTrackerRemoveFunc remove_func;
gpointer user_data;
GtkMenuTrackerSection *toplevel;
};
struct _GtkMenuTrackerSection
{
GMenuModel *model;
GSList *items;
gchar *action_namespace;
guint with_separators : 1;
guint has_separator : 1;
gulong handler;
};
static GtkMenuTrackerSection * gtk_menu_tracker_section_new (GtkMenuTracker *tracker,
GMenuModel *model,
gboolean with_separators,
gint offset,
const gchar *action_namespace);
static void gtk_menu_tracker_section_free (GtkMenuTrackerSection *section);
static GtkMenuTrackerSection *
gtk_menu_tracker_section_find_model (GtkMenuTrackerSection *section,
GMenuModel *model,
gint *offset)
{
GSList *item;
if (section->has_separator)
(*offset)++;
if (section->model == model)
return section;
for (item = section->items; item; item = item->next)
{
GtkMenuTrackerSection *subsection = item->data;
if (subsection)
{
GtkMenuTrackerSection *found_section;
found_section = gtk_menu_tracker_section_find_model (subsection, model, offset);
if (found_section)
return found_section;
}
else
(*offset)++;
}
return FALSE;
}
/* this is responsible for syncing the showing of a separator for a
* single subsection (and its children).
*
* we only ever show separators if we have _actual_ children (ie: we do
* not show a separator if the section contains only empty child
* sections). it's difficult to determine this on-the-fly, so we have
* this separate function to come back later and figure it out.
*
* 'section' is that section.
*
* 'tracker' is passed in so that we can emit callbacks when we decide
* to add/remove separators.
*
* 'offset' is passed in so we know which position to emit in our
* callbacks. ie: if we add a separator right at the top of this
* section then we would emit it with this offset. deeper inside, we
* adjust accordingly.
*
* could_have_separator is true in two situations:
*
* - our parent section had with_separators defined and we are not the
* first section (ie: we should add a separator if we have content in
* order to divide us from the items above)
*
* - if we had a 'label' attribute set for this section
*
* parent_model and parent_index are passed in so that we can give them
* to the insertion callback so that it can see the label (and anything
* else that happens to be defined on the section).
*
* we iterate each item in ourselves. for subsections, we recursively
* run ourselves to sync separators. after we are done, we notice if we
* have any items in us or if we are completely empty and sync if our
* separator is shown or not.
*/
static gint
gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
GtkMenuTracker *tracker,
gint offset,
gboolean could_have_separator,
GMenuModel *parent_model,
gint parent_index)
{
gboolean should_have_separator;
gint n_items = 0;
GSList *item;
gint i = 0;
for (item = section->items; item; item = item->next)
{
GtkMenuTrackerSection *subsection = item->data;
if (subsection)
{
gboolean could_have_separator;
could_have_separator = (section->with_separators && i > 0) ||
g_menu_model_get_item_attribute (section->model, i, "label", "s", NULL);
n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
could_have_separator, section->model, i);
}
else
n_items++;
i++;
}
should_have_separator = could_have_separator && n_items != 0;
if (should_have_separator > section->has_separator)
{
/* Add a separator */
(* tracker->insert_func) (offset, parent_model, parent_index, NULL, TRUE, tracker->user_data);
section->has_separator = TRUE;
}
else if (should_have_separator < section->has_separator)
{
/* Remove a separator */
(* tracker->remove_func) (offset, tracker->user_data);
section->has_separator = FALSE;
}
n_items += section->has_separator;
return n_items;
}
static gint
gtk_menu_tracker_section_measure (GtkMenuTrackerSection *section)
{
GSList *item;
gint n_items;
if (section == NULL)
return 1;
n_items = 0;
if (section->has_separator)
n_items++;
for (item = section->items; item; item = item->next)
n_items += gtk_menu_tracker_section_measure (item->data);
return n_items;
}
static void
gtk_menu_tracker_remove_items (GtkMenuTracker *tracker,
GSList **change_point,
gint offset,
gint n_items)
{
gint i;
for (i = 0; i < n_items; i++)
{
GtkMenuTrackerSection *subsection;
gint n;
subsection = (*change_point)->data;
*change_point = g_slist_delete_link (*change_point, *change_point);
n = gtk_menu_tracker_section_measure (subsection);
gtk_menu_tracker_section_free (subsection);
while (n--)
(* tracker->remove_func) (offset, tracker->user_data);
}
}
static void
gtk_menu_tracker_add_items (GtkMenuTracker *tracker,
GtkMenuTrackerSection *section,
GSList **change_point,
gint offset,
GMenuModel *model,
gint position,
gint n_items)
{
while (n_items--)
{
GMenuModel *submenu;
submenu = g_menu_model_get_item_link (model, position + n_items, G_MENU_LINK_SECTION);
g_assert (submenu != model);
if (submenu != NULL)
{
GtkMenuTrackerSection *subsection;
gchar *action_namespace = NULL;
g_menu_model_get_item_attribute (model, position + n_items,
G_MENU_ATTRIBUTE_ACTION_NAMESPACE, "s", &action_namespace);
if (section->action_namespace)
{
gchar *namespace;
namespace = g_strjoin (".", section->action_namespace, action_namespace, NULL);
subsection = gtk_menu_tracker_section_new (tracker, submenu, FALSE, offset, namespace);
g_free (namespace);
}
else
subsection = gtk_menu_tracker_section_new (tracker, submenu, FALSE, offset, section->action_namespace);
*change_point = g_slist_prepend (*change_point, subsection);
g_free (action_namespace);
g_object_unref (submenu);
}
else
{
(* tracker->insert_func) (offset, model, position + n_items,
section->action_namespace, FALSE, tracker->user_data);
*change_point = g_slist_prepend (*change_point, NULL);
}
}
}
static void
gtk_menu_tracker_model_changed (GMenuModel *model,
gint position,
gint removed,
gint added,
gpointer user_data)
{
GtkMenuTracker *tracker = user_data;
GtkMenuTrackerSection *section;
GSList **change_point;
gint offset = 0;
gint i;
/* First find which section the changed model corresponds to, and the
* position of that section within the overall menu.
*/
section = gtk_menu_tracker_section_find_model (tracker->toplevel, model, &offset);
/* Next, seek through that section to the change point. This gives us
* the correct GSList** to make the change to and also finds the final
* offset at which we will make the changes (by measuring the number
* of items within each item of the section before the change point).
*/
change_point = &section->items;
for (i = 0; i < position; i++)
{
offset += gtk_menu_tracker_section_measure ((*change_point)->data);
change_point = &(*change_point)->next;
}
/* We remove items in order and add items in reverse order. This
* means that the offset used for all inserts and removes caused by a
* single change will be the same.
*
* This also has a performance advantage: GtkMenuShell stores the
* menu items in a linked list. In the case where we are creating a
* menu for the first time, adding the items in reverse order means
* that we only ever insert at index zero, prepending the list. This
* means that we can populate in O(n) time instead of O(n^2) that we
* would do by appending.
*/
gtk_menu_tracker_remove_items (tracker, change_point, offset, removed);
gtk_menu_tracker_add_items (tracker, section, change_point, offset, model, position, added);
/* The offsets for insertion/removal of separators will be all over
* the place, however...
*/
gtk_menu_tracker_section_sync_separators (tracker->toplevel, tracker, 0, FALSE, NULL, 0);
}
static void
gtk_menu_tracker_section_free (GtkMenuTrackerSection *section)
{
if (section == NULL)
return;
g_signal_handler_disconnect (section->model, section->handler);
g_slist_free_full (section->items, (GDestroyNotify) gtk_menu_tracker_section_free);
g_free (section->action_namespace);
g_object_unref (section->model);
g_slice_free (GtkMenuTrackerSection, section);
}
static GtkMenuTrackerSection *
gtk_menu_tracker_section_new (GtkMenuTracker *tracker,
GMenuModel *model,
gboolean with_separators,
gint offset,
const gchar *action_namespace)
{
GtkMenuTrackerSection *section;
section = g_slice_new0 (GtkMenuTrackerSection);
section->model = g_object_ref (model);
section->with_separators = with_separators;
section->action_namespace = g_strdup (action_namespace);
gtk_menu_tracker_add_items (tracker, section, &section->items, offset, model, 0, g_menu_model_get_n_items (model));
section->handler = g_signal_connect (model, "items-changed", G_CALLBACK (gtk_menu_tracker_model_changed), tracker);
return section;
}
/*< private >
* gtk_menu_tracker_new:
* @model: the model to flatten
* @with_separators: if the toplevel should have separators (ie: TRUE
* for menus, FALSE for menubars)
* @action_namespace: the passed-in action namespace
* @insert_func: insert callback
* @remove_func: remove callback
* @user_data user data for callbacks
*
* Creates a GtkMenuTracker for @model, holding a ref on @model for as
* long as the tracker is alive.
*
* This flattens out the model, merging sections and inserting
* separators where appropriate. It monitors for changes and performs
* updates on the fly. It also handles action_namespace for subsections
* (but you will need to handle it yourself for submenus).
*
* When the tracker is first created, @insert_func will be called many
* times to populate the menu with the initial contents of @model
* (unless it is empty), before gtk_menu_tracker_new() returns. For
* this reason, the menu that is using the tracker ought to be empty
* when it creates the tracker.
*
* Future changes to @model will result in more calls to @insert_func
* and @remove_func.
*
* The position argument to both functions is the linear 0-based
* position in the menu at which the item in question should be inserted
* or removed.
*
* For @insert_func, @model and @item_index are used to get the
* information about the menu item to insert. @action_namespace is the
* action namespace that actions referred to from that item should place
* themselves in. Note that if the item is a submenu and the
* "action-namespace" attribute is defined on the item, it will _not_ be
* applied to the @action_namespace argument as it is meant for the
* items inside of the submenu, not the submenu item itself.
*
* @is_separator is set to %TRUE in case the item being added is a
* separator. @model and @item_index will still be meaningfully set in
* this case -- to the section menu item corresponding to the separator.
* This is useful if the section specifies a label, for example. If
* there is an "action-namespace" attribute on this menu item then it
* should be ignored by the consumer because #GtkMenuTracker has already
* handled it.
*
* When using #GtkMenuTracker there is no need to hold onto @model or
* monitor it for changes. The model will be unreffed when
* gtk_menu_tracker_free() is called.
*/
GtkMenuTracker *
gtk_menu_tracker_new (GMenuModel *model,
gboolean with_separators,
const gchar *action_namespace,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
gpointer user_data)
{
GtkMenuTracker *tracker;
tracker = g_slice_new (GtkMenuTracker);
tracker->insert_func = insert_func;
tracker->remove_func = remove_func;
tracker->user_data = user_data;
tracker->toplevel = gtk_menu_tracker_section_new (tracker, model, with_separators, 0, action_namespace);
gtk_menu_tracker_section_sync_separators (tracker->toplevel, tracker, 0, FALSE, NULL, 0);
return tracker;
}
/*< private >
* gtk_menu_tracker_free:
* @tracker: a #GtkMenuTracker
*
* Frees the tracker, ...
*/
void
gtk_menu_tracker_free (GtkMenuTracker *tracker)
{
gtk_menu_tracker_section_free (tracker->toplevel);
g_slice_free (GtkMenuTracker, tracker);
}

51
src/gtkmenutracker.h Normal file
View File

@ -0,0 +1,51 @@
/*
* Copyright © 2013 Canonical Limited
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the licence, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Author: Ryan Lortie <desrt@desrt.ca>
*/
#ifndef __GTK_MENU_TRACKER_H__
#define __GTK_MENU_TRACKER_H__
#include <gio/gio.h>
typedef struct _GtkMenuTracker GtkMenuTracker;
typedef void (* GtkMenuTrackerInsertFunc) (gint position,
GMenuModel *model,
gint item_index,
const gchar *action_namespace,
gboolean is_separator,
gpointer user_data);
typedef void (* GtkMenuTrackerRemoveFunc) (gint position,
gpointer user_data);
G_GNUC_INTERNAL
GtkMenuTracker * gtk_menu_tracker_new (GMenuModel *model,
gboolean with_separators,
const gchar *action_namespace,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
gpointer user_data);
G_GNUC_INTERNAL
void gtk_menu_tracker_free (GtkMenuTracker *tracker);
#endif /* __GTK_MENU_TRACKER_H__ */

View File

@ -39,10 +39,14 @@ typedef struct {
/* Whether or not we need to resort the windows; this is done on demand */ /* Whether or not we need to resort the windows; this is done on demand */
gboolean window_sort_stale : 1; gboolean window_sort_stale : 1;
/* DBus property notification subscription */
guint properties_changed_id : 1;
/* See GApplication documentation */ /* See GApplication documentation */
GDBusMenuModel *remote_menu; GDBusMenuModel *remote_menu;
GActionMuxer *muxer; GActionMuxer *muxer;
char * unique_bus_name; char *unique_bus_name;
GDBusConnection *session;
} ShellAppRunningState; } ShellAppRunningState;
/** /**
@ -554,7 +558,7 @@ shell_app_update_window_actions (ShellApp *app, MetaWindow *window)
actions = g_object_get_data (G_OBJECT (window), "actions"); actions = g_object_get_data (G_OBJECT (window), "actions");
if (actions == NULL) if (actions == NULL)
{ {
actions = G_ACTION_GROUP (g_dbus_action_group_get (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL), actions = G_ACTION_GROUP (g_dbus_action_group_get (app->running_state->session,
meta_window_get_gtk_unique_bus_name (window), meta_window_get_gtk_unique_bus_name (window),
object_path)); object_path));
g_object_set_data_full (G_OBJECT (window), "actions", actions, g_object_unref); g_object_set_data_full (G_OBJECT (window), "actions", actions, g_object_unref);
@ -958,6 +962,84 @@ shell_app_on_ws_switch (MetaScreen *screen,
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0); g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
} }
static void
application_properties_changed (GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
const gchar *interface_name,
const gchar *signal_name,
GVariant *parameters,
gpointer user_data)
{
ShellApp *app = user_data;
GVariant *changed_properties;
GVariantIter iter;
gboolean busy = FALSE;
const gchar *key, *interface_name_for_signal;
GVariant *value;
g_variant_get (parameters,
"(&s@a{sv}as)",
&interface_name_for_signal,
&changed_properties,
NULL);
if (g_strcmp0 (interface_name_for_signal, "org.gtk.Application") != 0)
return;
g_variant_iter_init (&iter, changed_properties);
while (g_variant_iter_next (&iter, "{&sv}", &key, &value))
{
if (g_strcmp0 (key, "Busy") != 0)
{
g_variant_unref (value);
continue;
}
busy = g_variant_get_boolean (value);
g_variant_unref (value);
break;
}
if (busy)
shell_app_state_transition (app, SHELL_APP_STATE_BUSY);
else
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
if (changed_properties != NULL)
g_variant_unref (changed_properties);
}
static void
shell_app_ensure_busy_watch (ShellApp *app)
{
ShellAppRunningState *running_state = app->running_state;
MetaWindow *window;
const gchar *object_path;
if (running_state->properties_changed_id != 0)
return;
if (running_state->unique_bus_name == NULL)
return;
window = g_slist_nth_data (running_state->windows, 0);
object_path = meta_window_get_gtk_application_object_path (window);
if (object_path == NULL)
return;
running_state->properties_changed_id =
g_dbus_connection_signal_subscribe (running_state->session,
running_state->unique_bus_name,
"org.freedesktop.DBus.Properties",
"PropertiesChanged",
object_path,
"org.gtk.Application",
G_DBUS_SIGNAL_FLAGS_NONE,
application_properties_changed, app, NULL);
}
void void
_shell_app_add_window (ShellApp *app, _shell_app_add_window (ShellApp *app,
MetaWindow *window) MetaWindow *window)
@ -976,6 +1058,7 @@ _shell_app_add_window (ShellApp *app,
g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app); g_signal_connect (window, "notify::user-time", G_CALLBACK(shell_app_on_user_time_changed), app);
shell_app_update_app_menu (app, window); shell_app_update_app_menu (app, window);
shell_app_ensure_busy_watch (app);
if (app->state != SHELL_APP_STATE_STARTING) if (app->state != SHELL_APP_STATE_STARTING)
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING); shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
@ -1218,6 +1301,8 @@ create_running_state (ShellApp *app)
app->running_state->workspace_switch_id = app->running_state->workspace_switch_id =
g_signal_connect (screen, "workspace-switched", G_CALLBACK(shell_app_on_ws_switch), app); g_signal_connect (screen, "workspace-switched", G_CALLBACK(shell_app_on_ws_switch), app);
app->running_state->session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
g_assert (app->running_state->session != NULL);
app->running_state->muxer = g_action_muxer_new (); app->running_state->muxer = g_action_muxer_new ();
} }
@ -1244,7 +1329,6 @@ shell_app_update_app_menu (ShellApp *app,
{ {
const gchar *application_object_path; const gchar *application_object_path;
const gchar *app_menu_object_path; const gchar *app_menu_object_path;
GDBusConnection *session;
GDBusActionGroup *actions; GDBusActionGroup *actions;
application_object_path = meta_window_get_gtk_application_object_path (window); application_object_path = meta_window_get_gtk_application_object_path (window);
@ -1253,16 +1337,13 @@ shell_app_update_app_menu (ShellApp *app,
if (application_object_path == NULL || app_menu_object_path == NULL || unique_bus_name == NULL) if (application_object_path == NULL || app_menu_object_path == NULL || unique_bus_name == NULL)
return; return;
session = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
g_assert (session != NULL);
g_clear_pointer (&app->running_state->unique_bus_name, g_free); g_clear_pointer (&app->running_state->unique_bus_name, g_free);
app->running_state->unique_bus_name = g_strdup (unique_bus_name); app->running_state->unique_bus_name = g_strdup (unique_bus_name);
g_clear_object (&app->running_state->remote_menu); g_clear_object (&app->running_state->remote_menu);
app->running_state->remote_menu = g_dbus_menu_model_get (session, unique_bus_name, app_menu_object_path); app->running_state->remote_menu = g_dbus_menu_model_get (app->running_state->session, unique_bus_name, app_menu_object_path);
actions = g_dbus_action_group_get (session, unique_bus_name, application_object_path); actions = g_dbus_action_group_get (app->running_state->session, unique_bus_name, application_object_path);
g_action_muxer_insert (app->running_state->muxer, "app", G_ACTION_GROUP (actions)); g_action_muxer_insert (app->running_state->muxer, "app", G_ACTION_GROUP (actions));
g_object_unref (actions); g_object_unref (actions);
g_object_unref (session);
} }
} }
@ -1280,8 +1361,12 @@ unref_running_state (ShellAppRunningState *state)
screen = shell_global_get_screen (shell_global_get ()); screen = shell_global_get_screen (shell_global_get ());
g_signal_handler_disconnect (screen, state->workspace_switch_id); g_signal_handler_disconnect (screen, state->workspace_switch_id);
if (state->properties_changed_id != 0)
g_dbus_connection_signal_unsubscribe (state->session, state->properties_changed_id);
g_clear_object (&state->remote_menu); g_clear_object (&state->remote_menu);
g_clear_object (&state->muxer); g_clear_object (&state->muxer);
g_clear_object (&state->session);
g_clear_pointer (&state->unique_bus_name, g_free); g_clear_pointer (&state->unique_bus_name, g_free);
g_clear_pointer (&state->remote_menu, g_free); g_clear_pointer (&state->remote_menu, g_free);

View File

@ -31,7 +31,8 @@ struct _ShellAppClass
typedef enum { typedef enum {
SHELL_APP_STATE_STOPPED, SHELL_APP_STATE_STOPPED,
SHELL_APP_STATE_STARTING, SHELL_APP_STATE_STARTING,
SHELL_APP_STATE_RUNNING SHELL_APP_STATE_RUNNING,
SHELL_APP_STATE_BUSY
} ShellAppState; } ShellAppState;
GType shell_app_get_type (void) G_GNUC_CONST; GType shell_app_get_type (void) G_GNUC_CONST;

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;

137
src/shell-menu-tracker.c Normal file
View File

@ -0,0 +1,137 @@
/*
* Copyright (C) 2013 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Jasper St. Pierre <jstpierre@mecheye.net>
*/
#include "config.h"
#include "shell-menu-tracker.h"
#include "gtkmenutracker.h"
struct _ShellMenuTracker
{
guint ref_count;
GtkMenuTracker *tracker;
ShellMenuTrackerInsertFunc insert_func;
gpointer insert_user_data;
GDestroyNotify insert_notify;
ShellMenuTrackerRemoveFunc remove_func;
gpointer remove_user_data;
GDestroyNotify remove_notify;
};
static void
shell_menu_tracker_insert_func (gint position,
GMenuModel *model,
gint item_index,
const gchar *action_namespace,
gboolean is_separator,
gpointer user_data)
{
ShellMenuTracker *tracker = (ShellMenuTracker *) user_data;
tracker->insert_func (position, model, item_index,
action_namespace, is_separator,
tracker->insert_user_data);
}
static void
shell_menu_tracker_remove_func (gint position,
gpointer user_data)
{
ShellMenuTracker *tracker = (ShellMenuTracker *) user_data;
tracker->remove_func (position, tracker->remove_user_data);
}
/**
* shell_menu_tracker_new:
* @model:
* @action_namespace: (allow-none):
* @insert_func:
* @insert_user_data:
* @insert_notify:
* @remove_func:
* @remove_user_data:
* @remove_notify:
*/
ShellMenuTracker *
shell_menu_tracker_new (GMenuModel *model,
const gchar *action_namespace,
ShellMenuTrackerInsertFunc insert_func,
gpointer insert_user_data,
GDestroyNotify insert_notify,
ShellMenuTrackerRemoveFunc remove_func,
gpointer remove_user_data,
GDestroyNotify remove_notify)
{
ShellMenuTracker *tracker = g_slice_new0 (ShellMenuTracker);
tracker->ref_count = 1;
tracker->insert_func = insert_func;
tracker->insert_user_data = insert_user_data;
tracker->insert_notify = insert_notify;
tracker->remove_func = remove_func;
tracker->remove_user_data = remove_user_data;
tracker->remove_notify = remove_notify;
tracker->tracker = gtk_menu_tracker_new (model,
TRUE, /* with separators */
action_namespace,
shell_menu_tracker_insert_func,
shell_menu_tracker_remove_func,
tracker);
return tracker;
}
ShellMenuTracker *
shell_menu_tracker_ref (ShellMenuTracker *tracker)
{
tracker->ref_count++;
return tracker;
}
void
shell_menu_tracker_unref (ShellMenuTracker *tracker)
{
if (tracker->ref_count-- <= 0)
{
shell_menu_tracker_destroy (tracker);
g_slice_free (ShellMenuTracker, tracker);
}
}
void
shell_menu_tracker_destroy (ShellMenuTracker *tracker)
{
if (tracker->tracker != NULL)
{
gtk_menu_tracker_free (tracker->tracker);
tracker->tracker = NULL;
tracker->insert_notify (tracker->insert_user_data);
tracker->remove_notify (tracker->remove_user_data);
}
}
G_DEFINE_BOXED_TYPE(ShellMenuTracker,
shell_menu_tracker,
shell_menu_tracker_ref,
shell_menu_tracker_unref)

54
src/shell-menu-tracker.h Normal file
View File

@ -0,0 +1,54 @@
/*
* Copyright (C) 2013 Red Hat
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* Written by:
* Jasper St. Pierre <jstpierre@mecheye.net>
*/
#ifndef __SHELL_MENU_TRACKER_H__
#define __SHELL_MENU_TRACKER_H__
#include <gio/gio.h>
typedef struct _ShellMenuTracker ShellMenuTracker;
GType shell_menu_tracker_get_type (void) G_GNUC_CONST;
typedef void (* ShellMenuTrackerInsertFunc) (gint position,
GMenuModel *model,
gint item_index,
const gchar *action_namespace,
gboolean is_separator,
gpointer user_data);
typedef void (* ShellMenuTrackerRemoveFunc) (gint position,
gpointer user_data);
ShellMenuTracker * shell_menu_tracker_new (GMenuModel *model,
const gchar *action_namespace,
ShellMenuTrackerInsertFunc insert_func,
gpointer insert_user_data,
GDestroyNotify insert_notify,
ShellMenuTrackerRemoveFunc remove_func,
gpointer remove_user_data,
GDestroyNotify remove_notify);
ShellMenuTracker * shell_menu_tracker_ref (ShellMenuTracker *tracker);
void shell_menu_tracker_unref (ShellMenuTracker *tracker);
void shell_menu_tracker_destroy (ShellMenuTracker *tracker);
#endif /* __SHELL_MENU_TRACKER_H__ */

View File

@ -410,8 +410,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 +469,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

@ -74,27 +74,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 +187,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)
@ -426,12 +409,12 @@ 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);
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;
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 +423,8 @@ 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;
} }
static void static void

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

@ -1533,6 +1533,7 @@ st_widget_recompute_style (StWidget *widget,
StThemeNode *new_theme_node = st_widget_get_theme_node (widget); StThemeNode *new_theme_node = st_widget_get_theme_node (widget);
int transition_duration; int transition_duration;
gboolean paint_equal; gboolean paint_equal;
gboolean animations_enabled;
if (new_theme_node == old_theme_node) if (new_theme_node == old_theme_node)
{ {
@ -1551,7 +1552,11 @@ st_widget_recompute_style (StWidget *widget,
if (paint_equal) if (paint_equal)
st_theme_node_copy_cached_paint_state (new_theme_node, old_theme_node); st_theme_node_copy_cached_paint_state (new_theme_node, old_theme_node);
if (transition_duration > 0) g_object_get (gtk_settings_get_default (),
"gtk-enable-animations", &animations_enabled,
NULL);
if (animations_enabled && transition_duration > 0)
{ {
if (widget->priv->transition_animation != NULL) if (widget->priv->transition_animation != NULL)
{ {