Compare commits

...

170 Commits

Author SHA1 Message Date
c1300ddbbc Bump version to 3.2.0
Update NEWS
2011-09-26 16:39:21 -04:00
8bd5b1e696 st: Fix crash in theme-node-transition
Setting up the framebuffers for transitions may fail, in which case
the material used for drawing is left uninitialized, so trying to
access it results in a crash.
Instead bail out in this case, which means that we won't paint
anything during the transition - still, drawing errors are better
than crashes ...

https://bugzilla.gnome.org/show_bug.cgi?id=659676
2011-09-26 19:52:36 +02:00
40c5db397d messageTray: unset this._clickedSummaryItem if we are hiding the summary box pointer and don't have a new clicked summary item
This ensures that this._clickedSummaryItem is always unset correctly.

Because we disconnect the signals that have _adjustSummaryBoxPointerPosition()
as a callback when unsetting this._clickedSummaryItem, we no longer call
setPosition() on this._summaryBoxPointer after it is hidden. Calling
setPosition() shows the box pointer again, which previously resulted in
an empty box pointer staying behind when a notification associated with
a tray icon was clicked.

https://bugzilla.gnome.org/show_bug.cgi?id=659862
2011-09-26 13:30:46 -04:00
8b52919b4d Updated Telugu Translation 2011-09-26 22:46:26 +05:30
2859f23038 Fixed some strings in Brazilian Portuguese translation 2011-09-26 10:36:54 -03:00
00384ccb47 telepathyClient: call delay on context when approving a FT or call
Not doing so is considered as a bug as we don't accept the context right away.
It leads to tp-glib returning directly from the AddDispatchOperation() D-Bus
call and so automatically approve the channel if the Shell is the only
approver running.

https://bugzilla.gnome.org/show_bug.cgi?id=660084
2011-09-26 14:49:21 +02:00
0191cc589a Updated Finnish translation 2011-09-26 15:43:09 +03:00
dae6db9b51 [l10n]Updated Catalan (Valencian) translation 2011-09-26 14:26:05 +02:00
4d912c9feb Updated Japanese translation 2011-09-26 11:59:08 +09:00
07c4b46466 Update Czech translation 2011-09-26 02:00:30 +02:00
e9cdce49a3 Updated Russian translation 2011-09-26 01:18:09 +04:00
84c3ce8778 Updated Latvian translation. 2011-09-25 21:55:16 +03:00
d5a32a7fe4 Updated Japanese translation 2011-09-26 01:04:14 +09:00
cc4dfda21b Updated Indonesian translation 2011-09-25 15:41:58 +07:00
703b37aa7b Updated Traditional Chinese translation(Hong Kong and Taiwan) 2011-09-25 14:52:31 +08:00
b433de9022 Updated Bulgarian translation 2011-09-25 08:34:54 +03:00
0c1a22ff95 Updated Slovak translation 2011-09-24 22:57:48 +02:00
4d526e40c3 [l10n] Updated German translation 2011-09-24 20:46:15 +02:00
4586c7b36b Fix display of dates in the Hungarian translation 2011-09-24 19:18:51 +02:00
3d60b73b60 Updated Lithuanian translation 2011-09-24 15:41:38 +03:00
4ef5cd8ef6 Updated Hungarian translation 2011-09-24 01:46:46 +02:00
6959bd19f1 Updated Basque language 2011-09-23 18:19:56 +02:00
17e4ce5ea8 Updated French translation 2011-09-23 18:08:57 +02:00
33094b4988 messageTray: fix notification/keyboard interaction
If the pointer moves from the notification into the keyboard, don't
treat that as moving out of the tray.

https://bugzilla.gnome.org/show_bug.cgi?id=658603
2011-09-23 07:56:45 -04:00
a8fdcffd44 messageTray: move the summary box pointer up when the keyboard shows
If the keyboard is shown when a summary boxpointer is visible (eg,
when opening a chat source), animate the boxpointer up with the tray.

https://bugzilla.gnome.org/show_bug.cgi?id=658603
2011-09-23 07:55:47 -04:00
5adb5411fa keyboard: fix D-Bus name acquisition flags to totally block Antler
We never want the antler keyboard to run if gnome-shell is running, so
grab org.gnome.Caribou.Keyboard without the "allow replacement" flag.

https://bugzilla.gnome.org/show_bug.cgi?id=659865
2011-09-23 07:53:51 -04:00
ff0d11c89c Updated Hebrew translation. 2011-09-23 08:51:57 +03:00
5f6dce2b5c popup-menu: Fix allocation in RTL locales
Commit ed7d4928e5 fixed some width-for-height cases in popup menu items,
but did not consider RTL locales. Fix this.

https://bugzilla.gnome.org/show_bug.cgi?id=659827
2011-09-22 21:52:26 +02:00
a7405e8b39 Updated translation for Afrikaans (af) not including latest strings since freeze 2011-09-22 21:20:29 +02:00
d87c520bad Updated Esperanto translation 2011-09-22 20:29:31 +02:00
24959f8d34 Updated Esperanto translation 2011-09-22 20:26:25 +02:00
6d1432e166 [l10n]Updated Catalan translation 2011-09-22 19:54:11 +02:00
2c7ba2c125 Updated Korean translation 2011-09-23 02:33:19 +09:00
a0ba664c64 messageTray: only update an icon when necessary on notification update
This avoids unnecessarily removing and resetting the icon in the notifications.

This fixes the new chat notification sliding down and up slightly when new
messages are received.

https://bugzilla.gnome.org/show_bug.cgi?id=659768
2011-09-22 13:25:35 -04:00
131da5f523 telepathyClient: update the avatar correctly when it changes
Previously, when the avatar changed, we would not update the summary icon
for the source at all and would only update the notification icon when the
next message was received. Instead, we should update both immediately upon
recieving the signal that the avatar has changed.

https://bugzilla.gnome.org/show_bug.cgi?id=659768
2011-09-22 13:25:35 -04:00
7c6144450a Updated Slovenian translation 2011-09-22 18:06:45 +02:00
4c7369db16 build: Switch to stable cogl/clutter branches for now 2011-09-22 16:35:45 +02:00
f4355de896 Updated Telugu Translation 2011-09-22 19:56:35 +05:30
4a3db9f44d Updated Danish translation 2011-09-22 16:07:11 +02:00
6c0a9ff9cc Updated Brazilian Portuguese translation. Reviewed by Djavan Fagundes <djavanf@gnome.org>. 2011-09-22 09:59:50 -03:00
57b1695fcf keyboard: don't try to move windows out of the way of the keyboard
This code was never tested very well, and has several problems
currently (windows creeping down and to the right, windows snapping to
a different location after you move them). To be fixed in 3.4.

https://bugzilla.gnome.org/show_bug.cgi?id=659643
2011-09-22 07:55:20 -04:00
045c6546cc Add Assamese translation 2011-09-22 12:19:02 +02:00
ce5bd954bf Add Assamese translation 2011-09-22 12:18:08 +02:00
6ef00a4a3b Updated Spanish translation 2011-09-22 11:47:37 +02:00
569d9718a0 Updated Norwegian bokmål translation 2011-09-22 10:10:41 +02:00
00a3a8697f [l10n] Updated German translation 2011-09-22 08:50:50 +02:00
c93444e390 Updated Swedish translation 2011-09-22 06:38:15 +02:00
5e5788ab14 update Punjabi Translation 2011-09-22 06:16:06 +05:30
abf57e6362 Updated Portuguese translation 2011-09-22 00:35:36 +01:00
74c2074d5a Updated Galician translations 2011-09-21 22:51:32 +02:00
b74606312e Updated Polish translation 2011-09-21 22:05:00 +02:00
0c849df4d5 Updated Belarusian translation. 2011-09-21 22:18:23 +03:00
38690d4a09 autorun: mark string as translatable 2011-09-21 21:10:50 +02:00
b64c237cb3 Updated Polish translation 2011-09-21 20:39:04 +02:00
3fbee8e027 configure.ac: switch to tar-ustar
tar-ustar is the GNOME standard and has some small advantages
over the default tar-v7, like support for long file names.
2011-09-21 12:33:11 -04:00
a68e6e3c63 Updated Danish translation 2011-09-21 17:57:09 +02:00
db5a72774d configure: Require gjs 1.29.18 for GC stuff 2011-09-21 10:04:36 -04:00
966f90f24a Updated Hungarian translation 2011-09-21 03:08:49 +02:00
eaa664c023 Updated Portuguese translation 2011-09-21 00:45:47 +01:00
e9282c3987 Bump version to 3.1.92
Update NEWS
2011-09-20 17:16:24 -04:00
ed1f8ed339 Add missing test to Makefile.am 2011-09-20 17:15:41 -04:00
5d0d637eb8 Updated Serbian translation 2011-09-20 22:14:58 +02:00
7e70dfdf4c messageTray: Fix line wrapping
Clutter 1.4 had a bug where it would wrap when it wasn't supposed to, and we
were unknowingly relying on it. Explicitly pass the available width/height
to get a perfect allocation.

https://bugzilla.gnome.org/show_bug.cgi?id=659633
2011-09-20 16:06:06 -04:00
3f61f39ae3 dash: Adjust placeholder size to icon size
The placeholder looks odd near small icons and causes the dash to get wider
when visible and narrower when hidden.

https://bugzilla.gnome.org/show_bug.cgi?id=659210
2011-09-20 21:01:25 +01:00
371f623a3e Updated Latvian translation. 2011-09-20 22:15:44 +03:00
566d566f26 alt-tab: Do not hardcode ALT modifier
While we allow for arbitrary modifiers in keybindings, both the
alt-tab and ctrl-alt-tab popups close when ALT is not present in
the modifier mask, resulting in ALT being de-facto hardcoded.
Instead, pass the actual modifier mask when invoking the popups.

https://bugzilla.gnome.org/show_bug.cgi?id=645200
2011-09-20 21:07:19 +02:00
fb30822860 windowManager: shade the actor, not the texture
Applying the "dim window" effect to the MetaWindowActor has two avantages:
first it avoids triggering bugs where ClutterOffscreenEffect doesn't handle
clone paint correctly. Second, it avoids showing the window as dimmed in
alt-Tab and the overview, which is weird.

The small downside of this is that the shadow becomes slightly gray when
the window dimmed, which is wrong - if we switched from blending with gray
to a combination of desaturation and darkening, this problem wouldn't
happen.

Revert out the addition of startY to the shader, since we don't need it
and fix the application of alpha, since we need to handle alpha correctly
for the shadow.

https://bugzilla.gnome.org/show_bug.cgi?id=659634
2011-09-20 14:56:25 -04:00
526a53bdd4 shell-network-agent: Do not handle VPN secrets
VPN secrets are currently unhandled by the UI code. To avoid
lengthy timeouts, bail out early with an error, so NetworkManager
falls back to the nm-applet agent directly.

https://bugzilla.gnome.org/show_bug.cgi?id=658484
2011-09-20 20:05:21 +02:00
3833124d66 apps: Uniquify application instances explicitly by id
Commit 0af108211c introduced a
regression where applications that appear in multiple categories were
duplicated in the "All Apps" list, because we switched from
uniquifying on desktop file ID to the GMenuTreeEntry.

Switch back to keeping the set of apps based on ID.  To flesh this
out, we keep the ShellApp instance for a given ID around forever, and
when we're loading new contents, we replace the GMenuTreeEntry inside
the app. That means callers still get new data.

We still keep around the running app list, though we could just
recompute it from the app list now.

https://bugzilla.gnome.org/show_bug.cgi?id=659351
2011-09-20 13:56:53 -04:00
e5e1b52abf apps: Unify code for apps/settings loading more
The apps and settings loading code duplicated the part to traverse a
GMenuTree.  Unify this by adding a new function to return a flattened
set.

This will also be useful for a future change to how we store apps -
this way we can look at both the current set of apps and the new set.

https://bugzilla.gnome.org/show_bug.cgi?id=659351
2011-09-20 13:56:53 -04:00
82fc66305d Clear the active network when removing the active access point
When the active AP disappears, it is possible to receive the
"access-point-removed" signal before the "notify::active-ap" (as
dbus-glib + libnm-glib property notifications are not reliable).
In that case, we would remove the AP from the network object, thus
an attempt to update the UI would create an item for an empty
network.

https://bugzilla.gnome.org/show_bug.cgi?id=658150
2011-09-20 19:01:23 +02:00
05e0d5066f Don't create AP items for empty networks
Current code is sometime attempting to create menu items for wifi
networks that have no visible AP. I have no idea why this is
happening, but it should fix the symptoms and avoid exceptions.

https://bugzilla.gnome.org/show_bug.cgi?id=658150
2011-09-20 19:01:01 +02:00
ce2dc84e49 Updated Slovenian translation 2011-09-20 13:08:28 +02:00
eb14ed32ea Updated Russian translation 2011-09-20 12:02:47 +04:00
f97987d0d8 Updated Norwegian bokmål translation 2011-09-20 09:16:33 +02:00
d23d9c3b05 update Punjabi Translation 2011-09-20 07:22:39 +05:30
3ebf6e3bea autorun: don't use a custom size for the hotplug icon
Instead, just use the default MessageTray.Source icon size (24px).

https://bugzilla.gnome.org/show_bug.cgi?id=658004
2011-09-19 20:53:50 -04:00
9f41f5c740 l10n: Updated Italian translation 2011-09-20 00:17:09 +02:00
ae00f86887 panel: allow padding around panel buttons to shrink
for narrow screens (eg, portrait orientation)

https://bugzilla.gnome.org/show_bug.cgi?id=651299
2011-09-19 17:43:54 -04:00
ab67c0f8b0 userMenu: fix line wrapping
The previous wrapping code hardcoded a width in pixels, making it
non-text-zoom-friendly. Specify a CSS width in pts, and fix the
userMenu code to completely opt out of the popupMenu column behavior.
Hack PopupComboBoxMenuItem slightly to deal with the fact that the
pop-up no longer gets setColumnWidth'ed.

https://bugzilla.gnome.org/show_bug.cgi?id=652837
2011-09-19 17:36:13 -04:00
ed7d4928e5 popupMenu: fix a few width-for-height cases
specifically, non-columned menus, and span==-1

https://bugzilla.gnome.org/show_bug.cgi?id=652837
2011-09-19 17:36:13 -04:00
f23239a923 status/keyboard: use correct style class name to fix menu highlight
The keyboard status item doesn't derive from SystemStatusButton, since
it doesn't use an icon. But this meant it wasn't getting the right
class name, and so was using the full-width menu title highlight
rather than the small one. Fix that.
2011-09-19 17:36:13 -04:00
d949920e68 status/keyboard: fix function naming style 2011-09-19 17:36:13 -04:00
a1def85c18 Updated Latvian translation. 2011-09-19 23:30:31 +03:00
dc624f65e4 user-menu: Fix spacing in combobox item
At some time an additional container was added which broke the
existing CSS rule.
2011-09-19 22:06:31 +02:00
361652d028 popup-menu: Use correct St.Align values
It is not St.Align.CENTER, but St.Align.MIDDLE - in contrast to
St.TextAlign, where it *is* CENTER. Yay consistency!
2011-09-19 22:06:31 +02:00
92024b7e54 network-agent: Allow entries to activate default action
Currently entries' 'activate' signal is ignored, so hitting enter
does not have any effect, even if all required information has been
entered.
Instead, connect to the 'activate' signal so that hitting enter
behaves as if the "OK" button had been pressed.

https://bugzilla.gnome.org/show_bug.cgi?id=659133
2011-09-19 21:26:32 +02:00
4e4ce0dd21 network-agent: Focus the first reactive entry
Currently network dialogs don't focus password entries, which means
that rather than entering their password directly, users first have
to click the entry (or tab around the dialog).
Instead, put keyboard focus on the first entry that requires user
input.

https://bugzilla.gnome.org/show_bug.cgi?id=659133
2011-09-19 21:26:32 +02:00
bc0c490ec3 polkit-agent: Remove hack to focus password entry
As dialog buttons used to "steal" the initial key focus, the polkit
dialog delayed focusing the password entry. With buttons no longer
overwriting the manually set focus, this is no longer necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=659133
2011-09-19 21:26:32 +02:00
6d92af17fd modal-dialog: Don't let buttons steal manually-set focus
ModalDialog provides a method to set the initial focus. However,
when adding buttons, the initial focus is always set to the last
button, thus overwriting a previously set manual focus.
Instead, only set the initial key focus if setInitialKeyFocus()
has not been called manually before.

https://bugzilla.gnome.org/show_bug.cgi?id=659133
2011-09-19 21:26:32 +02:00
2140a498a2 StTable: Silence row_span warning for now
This seems to be very noisy and generally harmless so
silence it up for now.

https://bugzilla.gnome.org/show_bug.cgi?id=658939
2011-09-19 21:25:07 +02:00
28349d362c Updated Belarusian translation. 2011-09-19 21:59:18 +03:00
e7af9f98e3 [l10n] Updated German translation 2011-09-19 20:17:24 +02:00
dd6053c5e1 [l10n] Updated German translation 2011-09-19 20:14:48 +02:00
37726a4cb6 app: Don't abort if a .desktop file has no Exec= key
Seen in the wild in nautilus-pastebin-configurator.desktop.
2011-09-19 14:13:20 -04:00
4352cc231e modalDialog: Don't use a for...in loop for iterating over arrays.
for...in loops do not guarantee that the indexes iterate in order. As a
consequence, buttons may appear in an undesired order.
2011-09-19 13:42:47 -04:00
824220356f popup-menu: Add 'sensitive' flag to item parameters
A menu action may not make sense at any time, so add API to mark
an item insensitive to indicate that its action is currently
unavailable, but may become activatable at a later point.

https://bugzilla.gnome.org/show_bug.cgi?id=659270
2011-09-19 18:54:15 +02:00
247ad9d7ab scroll-view-sizing: Add tests for padding / borders
Add tests to verify that the fade works fine with borders and
padding.

https://bugzilla.gnome.org/show_bug.cgi?id=659159
2011-09-19 18:51:07 +02:00
09fe12d0c1 st-scroll-view-fade: Pass a precomputed fade area to the shader
Instead of doing complex computations in the shader just pass in the correct
fade area (taking padding, scrollbars and rtl into account) and just work
with that in the shader.

That fixes a bug where we would fade the scrollbar when padding is present.

https://bugzilla.gnome.org/show_bug.cgi?id=659159
2011-09-19 18:51:01 +02:00
127ef8383b windowManager: Incorporate invisible borders into window dimming effect
Without this, the dim "fade" will start at the top of the untrimmed actor. With
a large enough draggable_border_width setting, this will show no fade at all.

https://bugzilla.gnome.org/show_bug.cgi?id=659302
2011-09-19 12:39:48 -04:00
82eccb566c windowManager: Use an off-screen buffer for window dimming
The way the window dimmer shader is applied will cause rendering errors with
the rounded corners, invisible borders or shaped textures since it doesn't deal
well with the multitexturing used by the MetaShapedTexture. Use an off-screen
buffer to flatten the texture before being applied.

https://bugzilla.gnome.org/show_bug.cgi?id=659302
2011-09-19 12:39:41 -04:00
543b29efe7 userMenu: Update the user information if the object is already loaded
Any time we get a cached user object from the AccountsService, it will
already be loaded.

https://bugzilla.gnome.org/show_bug.cgi?id=658605
2011-09-19 10:50:54 -04:00
0f4ce5dd4e altTab: Fix icon scrolling
Don't depend on the primary monitor position for determining whether we should
scroll, just use our own container's size.

https://bugzilla.gnome.org/show_bug.cgi?id=658239
2011-09-19 10:50:54 -04:00
c23919df15 Silently add chat source in the MessageTray
We don't want the tray bar to open/close quickly when adding a chat because
it happens when user opens the chat from Empathy. The notification will
popup on incoming message anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=657249
2011-09-19 16:19:26 +02:00
2b2a8b4747 ctrlAltTab: don't allow more than one popup
In a normal user session you can't have more than one
popup, because the popup is modal and we don't allow
the popup to show up when there are other modals.

In a GDM session, however, the login dialog is modal, and
we want a popup, so we don't have that same check.

This commit changes the ctrlAltTab manager code to not
allow multiple popups.

https://bugzilla.gnome.org/show_bug.cgi?id=659177
2011-09-19 10:17:19 -04:00
2e48dbf6ee main: Let SWITCH_PANELS keybinding through at login screen
Users depend on being able to switch focus between the panel
and the login screen using ctrl-alt-tab.

Because the login screen has no overview, we were short circuiting
some code that needs to get run to support ctrl-alt-tab.

This commit changes the short-circuit code to only run for user
sessions.

https://bugzilla.gnome.org/show_bug.cgi?id=659177
2011-09-19 10:17:18 -04:00
207917ba45 Updated Slovenian translation 2011-09-19 16:15:44 +02:00
f824b97f3a Updated Polish translation 2011-09-19 15:07:04 +02:00
a5ff2fc68f Updated Spanish translation 2011-09-19 14:57:34 +02:00
4906806c0b Updated Gujarati Translations 2011-09-19 18:10:00 +05:30
d98336a906 updated Tamil translation 2011-09-19 17:51:28 +05:30
9ddd11cdb8 Updated Galician translations 2011-09-19 13:44:45 +02:00
554ad4ef05 keyboard: switch to using the correct gsettings key for enable/disable
https://bugzilla.gnome.org/show_bug.cgi?id=612662
2011-09-19 07:34:02 -04:00
45d8550044 Updated Galician translations 2011-09-19 13:18:59 +02:00
f2b44c1494 Updated Persian translation 2011-09-19 14:37:17 +04:30
bdb28e87a9 Updated Persian translation 2011-09-19 14:35:13 +04:30
8b9592e53e Updated Slovak translation 2011-09-19 11:30:12 +02:00
84f89648a6 Update Simplified Chinese translation. 2011-09-19 09:25:48 +00:00
1174992099 Updated Spanish translation 2011-09-19 10:35:57 +02:00
391a220dc1 gdm: add optional logo to user list
This commit adds the ability to set a small logo
at the login screen for administrators and
distributions.

https://bugzilla.gnome.org/show_bug.cgi?id=658062
2011-09-19 00:08:55 -04:00
43f1d0578b gdm: add fingerprint support
This commit adds the ability to log in with a fingerprint instead
of a password (assuming the user is enrolled and fingerprint
isn't disabled via gsettings)

https://bugzilla.gnome.org/show_bug.cgi?id=657823
2011-09-18 23:32:03 -04:00
d3e35028ca Updated Hungarian translation 2011-09-19 02:00:57 +02:00
61c7d87003 Updated Hungarian translation 2011-09-19 02:00:57 +02:00
20f2fa84a4 Updated Swedish translation 2011-09-18 19:35:23 +02:00
17e269b96c Updated Latvian translation. 2011-09-18 20:16:21 +03:00
6a57ac92ba Updated Spanish translation 2011-09-18 17:23:31 +02:00
07ad03556f Updated POTFILES.in 2011-09-18 14:09:01 +02:00
04c33230c8 Updated Bulgarian translation 2011-09-18 11:40:55 +03:00
083dac630f updated Tamil translation 2011-09-18 14:05:50 +05:30
6375724196 Updated Vietnamese translation 2011-09-18 15:59:43 +10:00
922957c1ae po/vi: import from Damned Lies 2011-09-18 15:34:15 +10:00
cbf7d0e738 vi/po: removed redudant %d 2011-09-18 15:30:50 +10:00
fb81efeecf theme/gdm: shrink entry
commit 8424236daa
set the entry to a specific size to prevent it from
growing for long passwords.

The size is a little too long though, since it makes
the dialog pop out horizontally when showing the entry.

This commit drops it down a few em.

https://bugzilla.gnome.org/show_bug.cgi?id=659370
2011-09-17 23:40:20 -04:00
8466198626 loginDialog: subtract padding when drawing focus line
If there's no scrollbar in the user list it grows as the
user arrows around.  This is because it wasn't taking
padding into account when computing its destination size.

https://bugzilla.gnome.org/show_bug.cgi?id=658469
2011-09-17 23:25:31 -04:00
33718ef7a5 panel: drop dead code
The _userMenu variable never gets initialized anymore,
so remove some code that only gets run when it's defined.

https://bugzilla.gnome.org/show_bug.cgi?id=651299
2011-09-17 23:23:15 -04:00
a94a62764d gdm: add a power button
Making users have to log in to power off the machine isn't a good idea.

This commit adds a power menu similar to the one in the fallback greeter
which offers 3 items:

- Suspend
- Restart
- Power off

https://bugzilla.gnome.org/show_bug.cgi?id=657822
2011-09-17 23:16:20 -04:00
12c98df3db Updated Traditional Chinese translation(Hong Kong and Taiwan) 2011-09-18 08:35:10 +08:00
81909a406f Updated reduced Finnish translation 2011-09-17 22:29:36 +03:00
d291aaa4f2 Updated Galician translations 2011-09-17 21:21:38 +02:00
da36d87e46 Updated Punjabi Translation 2011-09-18 00:42:12 +05:30
42bc09a7ef Updated Polish translation 2011-09-17 20:55:43 +02:00
d0defc592e Updated Belarusian translation. 2011-09-17 20:15:11 +03:00
700f7fbaf3 gdm: replace 'gdm-password' with a constant
It's a little messy to have 'gdm-password' strung all
through the code, so this commit defines a constant up
top and uses that instead.

https://bugzilla.gnome.org/show_bug.cgi?id=657823
2011-09-17 12:53:54 -04:00
74f2d02ac3 Updated Slovenian translation 2011-09-17 18:15:01 +02:00
c865d96f4b Update Simplified Chinese translation. 2011-09-17 16:04:56 +00:00
cd7b9e108c user-menu: Explain why disabling notifications changes IM status
While the current behavior of setting the IM status to "busy" while
notifications are disabled makes sense, as incoming messages are
very likely to be missed, it is not immediately obvious.
Display a transient notification to explain the behavior to the user.

https://bugzilla.gnome.org/show_bug.cgi?id=652718
2011-09-17 17:18:29 +02:00
f54b82f64c global: Initiate *full* GC at idle
While I've been trying to make the GC kick in more often, I've decided
it's a better tradeoff to aggressively GC at "leisure", for multiple
reasons.

We can and should revisit this at a later time, but basically:

* The shell doesn't generate *that* much JS data - garbage collection
  is very fast here.
* Long periods without GC mean we're not calling free() when we
  could, which in turn makes heap fragmentation much worse.
* Ensuring the GC runs at idle makes it much less likely we'll take
  a random large GC hit in the middle of an animation.

https://bugzilla.gnome.org/show_bug.cgi?id=659254
2011-09-17 10:16:35 -04:00
36bfe8c533 memory: Add display of elapsed seconds since a garbage collection
This is useful information for debugging.

https://bugzilla.gnome.org/show_bug.cgi?id=659254
2011-09-17 10:16:35 -04:00
a40d063cb8 Updated Russian translation 2011-09-17 14:14:52 +04:00
ac88a88bfb Updated Norwegian bokmål translation 2011-09-17 11:47:14 +02:00
d89c9b4556 Updated Japanese translation 2011-09-17 13:07:50 +09:00
a07056f5e2 l10n: Updated Italian translation 2011-09-17 02:01:56 +02:00
f91bea3ea5 Updated Portuguese translation 2011-09-17 01:00:25 +01:00
9fbd79316a panel: merge statusBox into rightBox
Simplify the layout in rightBox by getting rid of statusBox, and just
putting everything into rightBox directly.

Simplify the handling of the user menu by adding it like it was a
status icon rather than special-casing it. Rename the "tray_icon"
variables to "status_area" to reflect this better.

https://bugzilla.gnome.org/show_bug.cgi?id=651299
2011-09-16 14:15:49 -04:00
6d89d0b02a panel: remove legacyBox, mix legacy icons in with regular
Legacy trayicons are mostly gone, so remove some of the special-casing
for them to simplify things.

Also, fix panel.addToStatusArea() to interpret its "position" relative
to tray_icon_order, not relative to the existing contents of
statusBox, so that the order that extension icons appear in does not
depend on the order they are loaded in.

https://bugzilla.gnome.org/show_bug.cgi?id=651299
2011-09-16 14:15:49 -04:00
0febcbfa2a userMenu: belatedly rename CSS to match the new filename
https://bugzilla.gnome.org/show_bug.cgi?id=651299
2011-09-16 14:15:48 -04:00
f2f2898fe3 panel: fix part of the panel-corner-highlighting hack
The underline highlights on the panel menu items normally have a 100ms
transition between highlighted and unhighlighted, but the panel corner
graphics can't do that, so we hacked the Activities button and user
menu to have no transition. But in gdm mode, the user menu isn't the
rightmost item any more. Fix this by modifying the CSS from the code
instead.

https://bugzilla.gnome.org/show_bug.cgi?id=651299
2011-09-16 14:15:48 -04:00
f65826b3ba network: Don't notify on connection lost
The design is for applications to do this, basically.  Web browsers,
Evolution, Empathy already display something on network status change.

Note though we need an application API in GIO to monitor network state;
see https://bugzilla.gnome.org/show_bug.cgi?id=620932

https://bugzilla.gnome.org/show_bug.cgi?id=658954
2011-09-16 13:57:14 -04:00
a869007180 calendar: Improve Layout
- align event header with buttons
 - button hovers stretch across fully like menus
 - better padding for month
 - day hover is lighter

https://bugzilla.gnome.org/show_bug.cgi?id=641135
2011-09-16 19:22:12 +02:00
b5fa48f485 status: don't show 'Show Keyboard Layout' on the login screen
It does not make a great amount of sense to have this function
on the login screen. And worse, it does not work, since the greeter
is currently a modal dialog, so interaction with the opening
window is impossible.

https://bugzilla.gnome.org/show_bug.cgi?id=659164
2011-09-16 09:45:11 -04:00
36d564526c build: Fix rule to create .service files
It was always taking the first .service.in file to create all .service
files: org.gnome.Shell.CalendarServer.service.in was the only one being
used.

https://bugzilla.gnome.org/show_bug.cgi?id=659194
2011-09-16 09:21:14 +02:00
063f34b5d3 browser-plugin: Add support for BROWSER_PLUGIN_DIR environment variable
This makes it easy to override where the plugin should be installed.

This is based on what totem does.

https://bugzilla.gnome.org/show_bug.cgi?id=659123
2011-09-16 00:17:59 +02:00
9486ca5975 Updated Slovenian translation 2011-09-15 22:44:09 +02:00
63ead272a9 Updated Slovenian translation 2011-09-15 22:37:02 +02:00
9dfa2ad84e app-display: Remove AppIconMenu::popup
The signal is just duplicating the parent class' ::open-state-changed
signal, so remove it.
2011-09-15 22:01:58 +02:00
523e431ece tests: Add transition test
https://bugzilla.gnome.org/show_bug.cgi?id=658092
2011-09-15 13:27:12 -04:00
768c4a0dd5 Updated Punjabi Translation 2011-09-15 20:49:58 +05:30
fd25cf30ff messageTray: fix a warning
Check for click in keyboardBox rather than Main.keyboard.actor, since
the latter won't exist when the keyboard is hidden.

https://bugzilla.gnome.org/show_bug.cgi?id=658598
2011-09-15 08:34:29 -04:00
1d14488a4f telepathyClient: notify only once per account for connection error
https://bugzilla.gnome.org/show_bug.cgi?id=659050
2011-09-15 10:10:22 +02:00
6e32c97c43 Updated Bulgarian translation 2011-09-15 07:16:02 +03:00
99 changed files with 20668 additions and 11955 deletions

93
NEWS
View File

@ -1,3 +1,96 @@
3.2.0
=====
* Prevent the fallback on-screen keyboard from showing up while
GNOME Shell is running [Dan, #659865]
* Disable code to reposition windows around the on-screen keyboard;
it wasn't finished or working properly. [Dan; #659643]
* Fix interaction between on-screen keyboard and notifications
[Dan; #658603]
* Fix menu-sizing problems in right-to-left locales. [Florian; #659827]
* Update chat icons in the message tray when an avatar image changes
[Marina; #659768]
* Fix problem with empty notification bubbles being left [Marina; #659862]
* Fix problem with chat notifications bouncing when new messages come in.
[Marina; #659768]
* Fix bug that was causing SIP calls to automatically be accepted in some
circumstances [Guillaume; #660084]
* Fix string that should have been marked translatable [Frédéric]
* Fix a crash that could happen during CSS transitions [Florian; #659676]
* Build fixes [Colin, Florian]
Contributors:
Guillaume Desmottes, Florian Müllner, Frédéric Péters, Colin Walters,
Dan Winship, Marina Zhurakhinskaya
Translations:
Friedel Wolff [af], Nilamdyuti Goswami [as], Ihar Hrachyshka [be],
Ivaylo Valkov [bg], Gil Forcada [ca], Carles Ferrando [ca@valencia],
Petr Kovar [cz], Mario Blättermann [de], Kris Thomsen [dk],
Tiffany Antopolski, Kristjan Schmidt [eo], Daniel Mustieles [es],
Inaki Larranaga Murgoitio [eu], Tommi Vainikainen [fi], Bruno Brouard [fr],
Fran Dieguez [gl], Yaron Shahrabani [he], Gabor Kelemen [hu],
Andika Triwidada [id], Jiro Matsuzawa [ja], Changwoo Ryu [ko],
Rudolfs Mazurs [lv], Aurimas Černius [lt], Kjartan Maraas [nb],
A S Alam [pa], Piotr Drąg [pl], Duarte Loreto [pt], Djavan Fagundes,
Rodolfo Ribeiro Gomes, Gabriel F. Vilar [pt_BR], Yuri Myasoedov [ru],
Daniel Nylander [se], Martin Srebotnjak [sl], Michal Štrba [sv],
Krishnababu Krothapalli, Praveen Illa [te], Cheng-Chia Tseng [zh_KH, zh_TW]
3.1.92
======
* Login screen
- Add the ability to set a logo at the top of the user list [Ray; #658062]
- Add fingerprint reader support [Ray; #657823]
- Add a power button offering the choice of Suspend/Restart/Power off
[Ray; #657822]
- Remove the option to view the current keyboad layout [Matthias; #659164]
- Make Control-Alt-Tab work for full keyboard access [Ray; #659177]
* Frequently initiate a full garbage collection; Spidermonkey isn't very good
at tracking the amount of resources we have allocated so this hopefully will
improve memory usage without affecting performance too much [Colin; #659254]
* Stop adding a notification when the network connection is lost
[Colin; #658954]
* When disabling notifications; display a notification
"Your chat status will be set to busy" [Florian; #652718]
* Fix keynav in network dialogs [Florian; #659133]
* Improve calendar styling [Sean; #641135, #651299]
* Shrink padding around panel buttons for narrow screens [Dan; #651299]
* Allow enabling the onscreen keyboard through the accessibility menu
[Dan; #612662]
* Fix problem that was causing VPN secret dialogs to be delayed before showing
[Florian; #658484]
* Make custom-keybindings for the window switcher that don't use alt
work correctly [Florian; #645200]
* Fix duplicate application icons in the Activities Overview [Colin; #659351]
* Bug fixes for dimming windows with attached modal dialogs
[Jasper, Owen; #659302, 659634]
* Add build-time support for BROWSER_PLUGIN_DIR environment variable
[Vincent; #659123]
* Build fixes [Vincent; #659194]
* Code cleanups and test cases
[Adel, Dan, Florian, Jasper; #651299, #658092, #658939]
* Misc bug fixes
[Adel, Colin, Cosimo, Dan, Florian, Giovanni, Jasper, Ray, Xavier;
#651299, #652837, #657249, #658004, #658150, #658239, #658469, #658598,
#658605, #659050, #659159, #659210, #659270, #659370, #659633]
Contributors:
Giovanni Campagna, Cosimo Cecchi, Xavier Claessens, Matthias Clasen,
Rui Matos, Florian Müllner, Jasper St. Pierre, Owen Taylor,
Vincent Untz, Colin Walters, Sean Wilson, Dan Winship
Translations:
Ihar Hrachyshka [be], Alexander Shopov, Ivaylo Valkov [bg],
Mario Blättermann [de], Jorge González, Daniel Mustieles [es],
Arash Mousavi [fa], Ville-Pekka Vainio [fi], Fran Dieguez [gl],
Sweta Kothari [gu], Gabor Kelemen [hu], Jiro Matsuzawa [ja],
Luca Ferretti [it], Rudolfs Mazurs [lv], Kjartan Maraas [nb], A S Alam [pa],
Piotr Drąg [pl], Duarte Loreto [pt], Yuri Myasoedov [ru],
Daniel Nylander [se], Matej Urbančič [sl], Miroslav Nikolić [sr, sr@latin],
Michal Štrba [sv], Tirumurti Vasudevan [ta], Phương Lê Hoàng [vi],
Aron Xu [zh_CN], Chao-Hsiung Liao [zh_HK, zh_TW]
3.1.91.1
========

View File

@ -1,5 +1,5 @@
mozillalibdir = $(libdir)/mozilla/plugins
mozillalibdir = $(BROWSER_PLUGIN_DIR)
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.1.91.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.2.0],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -9,7 +9,7 @@ AC_CONFIG_AUX_DIR([config])
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
AM_INIT_AUTOMAKE([1.10 dist-xz no-dist-gzip foreign])
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar foreign])
AM_MAINTAINER_MODE([enable])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
@ -66,7 +66,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.7.5
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.29.15
GJS_MIN_VERSION=1.29.18
MUTTER_MIN_VERSION=3.0.0
FOLKS_MIN_VERSION=0.5.2
GTK_MIN_VERSION=3.0.0
@ -235,6 +235,9 @@ else
fi
AC_SUBST(SHELL_SYSTEM_CA_FILE,["$with_ca_certificates"])
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
AC_CONFIG_FILES([
Makefile
data/Makefile

View File

@ -69,13 +69,6 @@
<schema id="org.gnome.shell.keyboard" path="/org/gnome/shell/keyboard/"
gettext-domain="@GETTEXT_PACKAGE@">
<key name="show-keyboard" type="b">
<default>false</default>
<_summary>Show the onscreen keyboard</_summary>
<_description>
If true, display onscreen keyboard.
</_description>
</key>
<key name="keyboard-type" type="s">
<default>'touch'</default>
<_summary>Which keyboard to use</_summary>

View File

@ -1,5 +1,5 @@
#version 110
uniform sampler2D sampler0;
uniform sampler2D tex;
uniform float fraction;
uniform float height;
const float c = -0.2;
@ -12,15 +12,16 @@ mat4 contrast = mat4 (1.0 + c, 0.0, 0.0, 0.0,
vec4 off = vec4(0.633, 0.633, 0.633, 0);
void main()
{
vec4 color = texture2D(sampler0, gl_TexCoord[0].st);
float y = height * gl_TexCoord[0][1];
vec4 color = texture2D(tex, cogl_tex_coord_in[0].xy);
float y = height * cogl_tex_coord_in[0].y;
// To reduce contrast, blend with a mid gray
gl_FragColor = color * contrast - off * c;
cogl_color_out = color * contrast - off * c * color.a;
// We only fully dim at a distance of BORDER_MAX_HEIGHT from the edge and
// We only fully dim at a distance of BORDER_MAX_HEIGHT from the top and
// when the fraction is 1.0. For other locations and fractions we linearly
// interpolate back to the original undimmed color.
gl_FragColor = color + (gl_FragColor - color) * min(y / border_max_height, 1.0);
gl_FragColor = color + (gl_FragColor - color) * fraction;
// interpolate back to the original undimmed color, so the top of the window
// is at full color.
cogl_color_out = color + (cogl_color_out - color) * max(min(y / border_max_height, 1.0), 0.0);
cogl_color_out = color + (cogl_color_out - color) * fraction;
}

View File

@ -30,6 +30,10 @@
min-width: 350px;
}
.login-dialog-prompt-fingerprint-message {
font-size: 10.5pt;
}
.login-dialog-user-list-view {
-st-vfade-offset: 1em;
}
@ -110,7 +114,7 @@
background-color: white;
caret-color: black;
caret-size: 1px;
width: 23em;
width: 15em;
}
.login-dialog-session-list {

View File

@ -164,6 +164,10 @@ StTooltip StLabel {
background-color: #4c4c4c;
}
.popup-menu-item:insensitive {
color: #9f9f9f;
}
.popup-image-menu-item {
}
@ -276,12 +280,12 @@ StTooltip StLabel {
background-color: black;
border-image: url("panel-border.svg") 1;
font-size: 10.5pt;
font-weight: bold;
height: 1.86em;
}
#panelLeft, #panelCenter, #panelRight {
#panelLeft, #panelCenter {
spacing: 4px;
font-weight: bold;
}
#panelLeft:ltr {
@ -335,7 +339,8 @@ StTooltip StLabel {
}
.panel-button {
padding: 0px 12px;
-natural-hpadding: 12px;
-minimum-hpadding: 6px;
font-weight: bold;
color: #ccc;
transition-duration: 100;
@ -355,9 +360,9 @@ StTooltip StLabel {
text-shadow: black 0px 2px 2px;
}
#statusTray > .panel-button:active,
#statusTray > .panel-button:checked,
#statusTray > .panel-button:focus {
.panel-status-button:active,
.panel-status-button:checked,
.panel-status-button:focus {
background-image: url("panel-button-highlight-narrow.svg");
}
@ -371,19 +376,7 @@ StTooltip StLabel {
-boxpointer-gap: 4px
}
/* The rounded panel corners we draw don't
* support transitions, so disable transitions
* for the buttons at the left/right edges
*/
#panelActivities {
transition-duration: 0;
}
#panelStatus {
transition-duration: 0;
}
#panelStatusMenu {
#panelUserMenu {
spacing: 4px;
}
@ -410,6 +403,7 @@ StTooltip StLabel {
.status-chooser-user-name {
font-weight: bold;
font-size: 1.3em;
min-width: 120pt;
}
.status-chooser-combo {
@ -426,24 +420,10 @@ StTooltip StLabel {
}
.status-chooser-status-item,
.status-chooser-combo > .popup-combobox-item {
.status-chooser-combo .popup-combobox-item {
spacing: .4em;
}
#legacyTray {
spacing: 14px;
padding-left: 14px;
}
#legacyTray:rtl {
padding-left: 0px;
padding-right: 14px;
}
#legacyTray:compact {
spacing: 8px;
}
.system-status-icon {
icon-size: 1.14em;
}
@ -531,8 +511,6 @@ StTooltip StLabel {
.dash-placeholder {
background-image: url("dash-placeholder.svg");
height: 27px;
width: 48px;
}
#viewSelector {
@ -951,7 +929,7 @@ StTooltip StLabel {
.calendar-vertical-separator {
-stipple-width: 1px;
-stipple-color: #505050;
width: 1.5em;
width: 0.3em;
}
#calendarPopup {
@ -974,13 +952,14 @@ StTooltip StLabel {
.calendar-month-label {
color: #666666;
font-size: 7.5pt;
padding: 2px;
padding-bottom: 8px;
padding-top: 8px;
font-weight: bold;
}
.calendar-change-month-back {
width: 20px;
height: 20px;
width: 18px;
height: 12px;
background-image: url("calendar-arrow-left.svg");
border-radius: 4px;
}
@ -997,8 +976,8 @@ StTooltip StLabel {
}
.calendar-change-month-forward {
width: 20px;
height: 20px;
width: 18px;
height: 12px;
background-image: url("calendar-arrow-right.svg");
border-radius: 4px;
}
@ -1030,6 +1009,7 @@ StTooltip StLabel {
.calendar-day-base:hover {
background-color: #777777;
color: #fff;
}
.calendar-day-base:active {
@ -1038,6 +1018,7 @@ StTooltip StLabel {
.calendar-day-heading {
color: #666666;
padding-top: 1em;
}
.calendar-week-number {
@ -1100,7 +1081,8 @@ StTooltip StLabel {
font-size: 9pt;
font-weight: bold;
color: rgba(153, 153, 153, 1.0);
padding-left: 0.3em;
padding-left: 1.8em;
padding-top: 0.8em;
}
.events-day-header:rtl {

View File

@ -3,7 +3,10 @@ jsdir = $(pkgdatadir)/js
nobase_dist_js_DATA = \
gdm/batch.js \
gdm/consoleKit.js \
gdm/fingerprint.js \
gdm/loginDialog.js \
gdm/powerMenu.js \
misc/config.js \
misc/docInfo.js \
misc/fileUtils.js \

32
js/gdm/consoleKit.js Normal file
View File

@ -0,0 +1,32 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const DBus = imports.dbus;
const ConsoleKitManagerIface = {
name: 'org.freedesktop.ConsoleKit.Manager',
methods: [{ name: 'CanRestart',
inSignature: '',
outSignature: 'b' },
{ name: 'CanStop',
inSignature: '',
outSignature: 'b' },
{ name: 'Restart',
inSignature: '',
outSignature: '' },
{ name: 'Stop',
inSignature: '',
outSignature: '' }]
};
function ConsoleKitManager() {
this._init();
};
ConsoleKitManager.prototype = {
_init: function() {
DBus.system.proxifyObject(this,
'org.freedesktop.ConsoleKit',
'/org/freedesktop/ConsoleKit/Manager');
}
};
DBus.proxifyPrototype(ConsoleKitManager.prototype, ConsoleKitManagerIface);

26
js/gdm/fingerprint.js Normal file
View File

@ -0,0 +1,26 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
const DBus = imports.dbus;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const FprintManagerIface = {
name: 'net.reactivated.Fprint.Manager',
methods: [{ name: 'GetDefaultDevice',
inSignature: '',
outSignature: 'o' }]
};
function FprintManager() {
this._init();
};
FprintManager.prototype = {
_init: function() {
DBus.system.proxifyObject(this,
'net.reactivated.Fprint',
'/net/reactivated/Fprint/Manager');
}
};
DBus.proxifyPrototype(FprintManager.prototype, FprintManagerIface);

View File

@ -33,15 +33,25 @@ const St = imports.gi.St;
const GdmGreeter = imports.gi.GdmGreeter;
const Batch = imports.gdm.batch;
const DBus = imports.dbus;
const Fprint = imports.gdm.fingerprint;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
const _PASSWORD_SERVICE_NAME = 'gdm-password';
const _FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
const _FADE_ANIMATION_TIME = 0.16;
const _RESIZE_ANIMATION_TIME = 0.25;
const _SCROLL_ANIMATION_TIME = 2.0;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_NAME_SIZE = 48;
const _LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
const _FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
const _LOGO_KEY = 'logo';
let _loginDialog = null;
@ -246,12 +256,15 @@ UserListItem.prototype = {
showFocusAnimation: function(time) {
let hold = new Batch.Hold();
let node = this.actor.get_theme_node();
let padding = node.get_horizontal_padding();
let box = this._verticalBox.get_allocation_box();
Tweener.removeTweens(this._focusBin);
this._focusBin.width = 0;
Tweener.addTween(this._focusBin,
{ width: box.x2 - box.x1,
{ width: (box.x2 - box.x1 - padding),
time: time,
transition: 'linear',
onComplete: function() {
@ -734,7 +747,7 @@ LoginDialog.prototype = {
this._greeterClient.open_connection();
this._greeterClient.call_start_conversation('gdm-password');
this._greeterClient.call_start_conversation(_PASSWORD_SERVICE_NAME);
this._greeterClient.connect('reset',
Lang.bind(this, this._onReset));
@ -757,6 +770,17 @@ LoginDialog.prototype = {
this._greeterClient.connect('conversation-stopped',
Lang.bind(this, this._onConversationStopped));
this._settings = new Gio.Settings({ schema: _LOGIN_SCREEN_SCHEMA });
this._fprintManager = new Fprint.FprintManager();
this._startFingerprintConversationIfNeeded();
this._settings.connect('changed::' + _LOGO_KEY,
Lang.bind(this, this._updateLogo));
this._logoBox = new St.Bin({ style_class: 'login-dialog-logo-box' });
this.contentLayout.add(this._logoBox);
this._updateLogo();
this._titleLabel = new St.Label({ style_class: 'login-dialog-title',
text: C_("title", "Sign In") });
@ -801,6 +825,12 @@ LoginDialog.prototype = {
x_fill: true,
y_fill: false,
x_align: St.Align.START });
// translators: this message is shown below the password entry field
// to indicate the user can swipe their finger instead
this._promptFingerprintMessage = new St.Label({ text: _("(or swipe finger)"),
style_class: 'login-dialog-prompt-fingerprint-message' });
this._promptFingerprintMessage.hide();
this._promptBox.add(this._promptFingerprintMessage);
this._sessionList = new SessionList();
this._sessionList.connect('session-activated',
@ -848,15 +878,47 @@ LoginDialog.prototype = {
this._onUserListActivated(item);
}));
},
_startFingerprintConversationIfNeeded: function() {
this._haveFingerprintReader = false;
if (!this._settings.get_boolean(_FINGERPRINT_AUTHENTICATION_KEY))
return;
this._fprintManager.GetDefaultDeviceRemote(DBus.CALL_FLAG_START, Lang.bind(this,
function(device, error) {
if (!error && device)
this._haveFingerprintReader = true;
if (this._haveFingerprintReader)
this._greeterClient.call_start_conversation(_FINGERPRINT_SERVICE_NAME);
}));
},
_updateLogo: function() {
this._logoBox.child = null;
let path = this._settings.get_string(_LOGO_KEY);
if (path) {
let file = Gio.file_new_for_path(path);
let uri = file.get_uri();
let textureCache = St.TextureCache.get_default();
this._logoBox.child = textureCache.load_uri_async(uri, -1, _LOGO_ICON_NAME_SIZE);
}
},
_onReset: function(client, serviceName) {
this._greeterClient.call_start_conversation('gdm-password');
this._greeterClient.call_start_conversation(_PASSWORD_SERVICE_NAME);
this._startFingerprintConversationIfNeeded();
let tasks = [this._hidePrompt,
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
this._fadeInNotListedButton]),
this._fadeInNotListedButton,
this._fadeInLogo]),
function() {
this._sessionList.close();
@ -881,10 +943,17 @@ LoginDialog.prototype = {
},
_onInfo: function(client, serviceName, info) {
// we don't want fingerprint messages with the word UPEK in them
if (serviceName != _PASSWORD_SERVICE_NAME)
return;
Main.notifyError(info);
},
_onProblem: function(client, serviceName, problem) {
// we don't want to show auth failed messages to
// users who haven't enrolled their fingerprint.
if (serviceName != _PASSWORD_SERVICE_NAME)
return;
Main.notifyError(problem);
},
@ -901,6 +970,13 @@ LoginDialog.prototype = {
return _fadeInActor(this._promptEntry);
},
function() {
if (!this._haveFingerprintReader)
return null;
return _fadeInActor(this._promptFingerprintMessage);
},
function() {
return _fadeInActor(this._promptBox);
},
@ -969,6 +1045,7 @@ LoginDialog.prototype = {
},
function() {
this._promptFingerprintMessage.hide();
this._promptEntry.set_text('');
}];
@ -992,12 +1069,20 @@ LoginDialog.prototype = {
return batch.run();
},
_onInfoQuery: function(client, serviceName, question) {
// We only expect questions to come from the main auth service
if (serviceName != _PASSWORD_SERVICE_NAME)
return;
this._promptEntry.set_text('');
this._promptEntry.clutter_text.set_password_char('');
this._askQuestion(serviceName, question);
},
_onSecretInfoQuery: function(client, serviceName, secretQuestion) {
// We only expect secret requests to come from the main auth service
if (serviceName != _PASSWORD_SERVICE_NAME)
return;
this._promptEntry.set_text('');
this._promptEntry.clutter_text.set_password_char('\u25cf');
this._askQuestion(serviceName, secretQuestion);
@ -1134,7 +1219,14 @@ LoginDialog.prototype = {
},
_onConversationStopped: function(client, serviceName) {
this._greeterClient.call_cancel();
// if the password service fails, then cancel everything.
// But if, e.g., fingerprint fails, still give
// password authentication a chance to succeed
if (serviceName == _PASSWORD_SERVICE_NAME) {
this._greeterClient.call_cancel();
} else if (serviceName == _FINGERPRINT_SERVICE_NAME) {
_fadeOutActor(this._promptFingerprintMessage);
}
},
_onNotListedClicked: function(user) {
@ -1151,16 +1243,25 @@ LoginDialog.prototype = {
},
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
this._fadeOutNotListedButton]),
this._fadeOutNotListedButton,
this._fadeOutLogo]),
function() {
this._greeterClient.call_begin_verification('gdm-password');
this._greeterClient.call_begin_verification(_PASSWORD_SERVICE_NAME);
}];
let batch = new Batch.ConsecutiveBatch(this, tasks);
batch.run();
},
_fadeInLogo: function() {
return _fadeInActor(this._logoBox);
},
_fadeOutLogo: function() {
return _fadeOutActor(this._logoBox);
},
_fadeInTitleLabel: function() {
return _fadeInActor(this._titleLabel);
},
@ -1196,7 +1297,8 @@ LoginDialog.prototype = {
},
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
this._fadeOutNotListedButton]),
this._fadeOutNotListedButton,
this._fadeOutLogo]),
function() {
return this._userList.shrinkToNaturalHeight();
@ -1204,8 +1306,11 @@ LoginDialog.prototype = {
function() {
let userName = activatedItem.user.get_user_name();
this._greeterClient.call_begin_verification_for_user('gdm-password',
this._greeterClient.call_begin_verification_for_user(_PASSWORD_SERVICE_NAME,
userName);
if (this._haveFingerprintReader)
this._greeterClient.call_begin_verification_for_user(_FINGERPRINT_SERVICE_NAME, userName);
}];
this._user = activatedItem.user;

146
js/gdm/powerMenu.js Normal file
View File

@ -0,0 +1,146 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*-
*
* Copyright 2011 Red Hat, Inc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, 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.
*/
const Lang = imports.lang;
const UPowerGlib = imports.gi.UPowerGlib;
const ConsoleKit = imports.gdm.consoleKit;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
function PowerMenuButton() {
this._init();
}
PowerMenuButton.prototype = {
__proto__: PanelMenu.SystemStatusButton.prototype,
_init: function() {
PanelMenu.SystemStatusButton.prototype._init.call(this, 'system-shutdown', null);
this._consoleKitManager = new ConsoleKit.ConsoleKitManager();
this._upClient = new UPowerGlib.Client();
this._createSubMenu();
this._upClient.connect('notify::can-suspend',
Lang.bind(this, this._updateHaveSuspend));
this._updateHaveSuspend();
// ConsoleKit doesn't send notifications when shutdown/reboot
// are disabled, so we update the menu item each time the menu opens
this.menu.connect('open-state-changed', Lang.bind(this,
function(menu, open) {
if (open) {
this._updateHaveShutdown();
this._updateHaveRestart();
}
}));
this._updateHaveShutdown();
this._updateHaveRestart();
},
_updateVisibility: function() {
if (!this._haveSuspend && !this._haveShutdown && !this._haveRestart)
this.actor.hide();
else
this.actor.show();
},
_updateHaveShutdown: function() {
this._consoleKitManager.CanStopRemote(Lang.bind(this,
function(result, error) {
if (!error)
this._haveShutdown = result;
else
this._haveShutdown = false;
if (this._haveShutdown) {
this._powerOffItem.actor.show();
} else {
this._powerOffItem.actor.hide();
}
this._updateVisibility();
}));
},
_updateHaveRestart: function() {
this._consoleKitManager.CanRestartRemote(Lang.bind(this,
function(result, error) {
if (!error)
this._haveRestart = result;
else
this._haveRestart = false;
if (this._haveRestart) {
this._restartItem.actor.show();
} else {
this._restartItem.actor.hide();
}
this._updateVisibility();
}));
},
_updateHaveSuspend: function() {
this._haveSuspend = this._upClient.get_can_suspend();
if (this._haveSuspend)
this._suspendItem.actor.show();
else
this._suspendItem.actor.hide();
this._updateVisibility();
},
_createSubMenu: function() {
let item;
item = new PopupMenu.PopupMenuItem(_("Suspend"));
item.connect('activate', Lang.bind(this, this._onActivateSuspend));
this.menu.addMenuItem(item);
this._suspendItem = item;
item = new PopupMenu.PopupMenuItem(_("Restart"));
item.connect('activate', Lang.bind(this, this._onActivateRestart));
this.menu.addMenuItem(item);
this._restartItem = item;
item = new PopupMenu.PopupMenuItem(_("Power Off"));
item.connect('activate', Lang.bind(this, this._onActivatePowerOff));
this.menu.addMenuItem(item);
this._powerOffItem = item;
},
_onActivateSuspend: function() {
if (this._haveSuspend)
this._upClient.suspend_sync(null);
},
_onActivateRestart: function() {
if (this._haveRestart)
this._consoleKitManager.RestartRemote();
},
_onActivatePowerOff: function() {
if (this._haveShutdown)
this._consoleKitManager.StopRemote();
}
};

View File

@ -31,6 +31,18 @@ function mod(a, b) {
return (a + b) % b;
}
function primaryModifier(mask) {
if (mask == 0)
return 0;
let primary = 1;
while (mask > 1) {
mask >>= 1;
primary <<= 1;
}
return primary;
}
function AltTabPopup() {
this._init();
}
@ -48,6 +60,7 @@ AltTabPopup.prototype = {
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._haveModal = false;
this._modifierMask = 0;
this._currentApp = 0;
this._currentWindow = -1;
@ -121,7 +134,7 @@ AltTabPopup.prototype = {
}
},
show : function(backward, binding) {
show : function(backward, binding, mask) {
let appSys = Shell.AppSystem.get_default();
let apps = appSys.get_running ();
@ -131,6 +144,7 @@ AltTabPopup.prototype = {
if (!Main.pushModal(this.actor))
return false;
this._haveModal = true;
this._modifierMask = primaryModifier(mask);
this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
@ -179,7 +193,7 @@ AltTabPopup.prototype = {
// details.) So we check now. (Have to do this after updating
// selection.)
let [x, y, mods] = global.get_pointer();
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
if (!(mods & this._modifierMask)) {
this._finish();
return false;
}
@ -256,7 +270,7 @@ AltTabPopup.prototype = {
_keyReleaseEvent : function(actor, event) {
let [x, y, mods] = global.get_pointer();
let state = mods & Clutter.ModifierType.MOD1_MASK;
let state = mods & this._modifierMask;
if (state == 0)
this._finish();
@ -636,11 +650,10 @@ SwitcherList.prototype = {
this._items[this._highlighted].add_style_pseudo_class('selected');
}
let monitor = Main.layoutManager.primaryMonitor;
let itemSize = this._items[index].allocation.x2 - this._items[index].allocation.x1;
let [posX, posY] = this._items[index].get_transformed_position();
posX += this.actor.x;
if (posX + itemSize > monitor.width + monitor.x)
let [absItemX, absItemY] = this._items[index].get_transformed_position();
let [result, posX, posY] = this.actor.transform_stage_point(absItemX, 0);
let [containerWidth, containerHeight] = this.actor.get_transformed_size();
if (posX + this._items[index].get_width() > containerWidth)
this._scrollToRight();
else if (posX < 0)
this._scrollToLeft();

View File

@ -559,7 +559,7 @@ AppWellIcon.prototype = {
this._menu.connect('activate-window', Lang.bind(this, function (menu, window) {
this.activateWindow(window);
}));
this._menu.connect('popup', Lang.bind(this, function (menu, isPoppedUp) {
this._menu.connect('open-state-changed', Lang.bind(this, function (menu, isPoppedUp) {
if (!isPoppedUp)
this._onMenuPoppedDown();
}));
@ -643,7 +643,6 @@ AppIconMenu.prototype = {
this._source = source;
this.connect('activate', Lang.bind(this, this._onActivate));
this.connect('open-state-changed', Lang.bind(this, this._onOpenStateChanged));
this.actor.add_style_class_name('app-well-menu');
@ -707,14 +706,6 @@ AppIconMenu.prototype = {
this.open();
},
_onOpenStateChanged: function (menu, open) {
if (open) {
this.emit('popup', true);
} else {
this.emit('popup', false);
}
},
_onActivate: function (actor, child) {
if (child._window) {
let metaWindow = child._window;

View File

@ -23,8 +23,6 @@ const AutorunSetting = {
ASK: 3
};
const HOTPLUG_ICON_SIZE = 16;
// misc utils
function ignoreAutorunForMount(mount) {
let root = mount.get_root();
@ -279,12 +277,12 @@ AutorunResidentSource.prototype = {
__proto__: MessageTray.Source.prototype,
_init: function() {
MessageTray.Source.prototype._init.call(this, _('Removable Devices'));
MessageTray.Source.prototype._init.call(this, _("Removable Devices"));
this._mounts = [];
this._notification = new AutorunResidentNotification(this);
this._setSummaryIcon(this.createNotificationIcon(HOTPLUG_ICON_SIZE));
this._setSummaryIcon(this.createNotificationIcon());
},
addMount: function(mount, apps) {
@ -329,10 +327,10 @@ AutorunResidentSource.prototype = {
}
},
createNotificationIcon: function(iconSize) {
createNotificationIcon: function() {
return new St.Icon ({ icon_name: 'media-removable',
icon_type: St.IconType.FULLCOLOR,
icon_size: iconSize ? iconSize : this.ICON_SIZE });
icon_size: this.ICON_SIZE });
}
}
@ -533,16 +531,16 @@ AutorunTransientSource.prototype = {
this.apps = apps;
this._notification = new AutorunTransientNotification(this);
this._setSummaryIcon(this.createNotificationIcon(this.ICON_SIZE));
this._setSummaryIcon(this.createNotificationIcon());
// add ourselves as a source, and popup the notification
Main.messageTray.add(this);
this.notify(this._notification);
},
createNotificationIcon: function(iconSize) {
createNotificationIcon: function() {
return new St.Icon({ gicon: this.mount.get_icon(),
icon_size: iconSize ? iconSize : this.ICON_SIZE });
icon_size: this.ICON_SIZE });
}
}

View File

@ -94,7 +94,7 @@ CtrlAltTabManager.prototype = {
return a.x - b.x;
},
popup: function(backwards) {
popup: function(backwards, mask) {
// Start with the set of focus groups that are currently mapped
let items = this._items.filter(function (item) { return item.proxy.mapped; });
@ -123,7 +123,16 @@ CtrlAltTabManager.prototype = {
return;
items.sort(Lang.bind(this, this._sortItems));
new CtrlAltTabPopup().show(items, backwards);
if (!this._popup) {
this._popup = new CtrlAltTabPopup();
this._popup.show(items, backwards, mask);
this._popup.actor.connect('destroy',
Lang.bind(this, function() {
this._popup = null;
}));
}
}
};
@ -147,6 +156,7 @@ CtrlAltTabPopup.prototype = {
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._haveModal = false;
this._modifierMask = 0;
this._selection = 0;
Main.uiGroup.add_actor(this.actor);
@ -183,10 +193,11 @@ CtrlAltTabPopup.prototype = {
this._switcher.actor.allocate(childBox, flags);
},
show : function(items, startBackwards) {
show : function(items, startBackwards, mask) {
if (!Main.pushModal(this.actor))
return false;
this._haveModal = true;
this._modifierMask = AltTab.primaryModifier(mask);
this._keyPressEventId = this.actor.connect('key-press-event', Lang.bind(this, this._keyPressEvent));
this._keyReleaseEventId = this.actor.connect('key-release-event', Lang.bind(this, this._keyReleaseEvent));
@ -200,7 +211,7 @@ CtrlAltTabPopup.prototype = {
this._select(this._selection);
let [x, y, mods] = global.get_pointer();
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
if (!(mods & this._modifierMask)) {
this._finish();
return false;
}
@ -246,7 +257,7 @@ CtrlAltTabPopup.prototype = {
_keyReleaseEvent : function(actor, event) {
let [x, y, mods] = global.get_pointer();
let state = mods & Clutter.ModifierType.MOD1_MASK;
let state = mods & this._modifierMask;
if (state == 0)
this._finish();

View File

@ -684,6 +684,8 @@ Dash.prototype = {
}
this._dragPlaceholder = new DragPlaceholderItem();
this._dragPlaceholder.child.set_width (this.iconSize);
this._dragPlaceholder.child.set_height (this.iconSize / 2);
this._box.insert_actor(this._dragPlaceholder.actor,
this._dragPlaceholderPos);
if (fadeIn)

View File

@ -60,7 +60,7 @@ DateMenuButton.prototype = {
PanelMenu.Button.prototype._init.call(this, menuAlignment);
this._clock = new St.Label();
this.actor.set_child(this._clock);
this.actor.add_actor(this._clock);
hbox = new St.BoxLayout({name: 'calendarArea' });
this.menu.addActor(hbox);

View File

@ -15,9 +15,11 @@ const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const KEYBOARD_SCHEMA = 'org.gnome.shell.keyboard';
const SHOW_KEYBOARD = 'show-keyboard';
const KEYBOARD_TYPE = 'keyboard-type';
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
// Key constants taken from Antler
// FIXME: ought to be moved into libcaribou
const PRETTY_KEYS = {
@ -207,6 +209,8 @@ Keyboard.prototype = {
this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA });
this._keyboardSettings.connect('changed', Lang.bind(this, this._settingsChanged));
this._a11yApplicationsSettings = new Gio.Settings({ schema: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._settingsChanged));
this._settingsChanged();
},
@ -215,7 +219,7 @@ Keyboard.prototype = {
},
_settingsChanged: function () {
this._enableKeyboard = this._keyboardSettings.get_boolean(SHOW_KEYBOARD);
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);
if (!this._enableKeyboard && !this._keyboard)
return;
if (this._enableKeyboard && this._keyboard &&
@ -488,11 +492,11 @@ Keyboard.prototype = {
},
SetCursorLocation: function(x, y, w, h) {
this._setLocation(x, y);
// this._setLocation(x, y);
},
SetEntryLocation: function(x, y, w, h) {
this._setLocation(x, y);
// this._setLocation(x, y);
},
get Name() {

View File

@ -45,7 +45,9 @@ LayoutManager.prototype = {
this.trayBox.connect('allocation-changed',
Lang.bind(this, this._updateTrayBarrier));
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox' });
this.keyboardBox = new St.BoxLayout({ name: 'keyboardBox',
reactive: true,
track_hover: true });
this.addChrome(this.keyboardBox, { visibleInFullscreen: true });
this._keyboardHeightNotifyId = 0;

View File

@ -607,6 +607,9 @@ Memory.prototype = {
this._gjs_closure = new St.Label();
this.actor.add(this._gjs_closure);
this._last_gc_seconds_ago = new St.Label();
this.actor.add(this._last_gc_seconds_ago);
this._gcbutton = new St.Button({ label: 'Full GC',
style_class: 'lg-obj-inspector-button' });
this._gcbutton.connect('clicked', Lang.bind(this, function () { global.gc(); this._renderText(); }));
@ -626,6 +629,7 @@ Memory.prototype = {
this._gjs_gobject.text = 'gjs_gobject: ' + memInfo.gjs_gobject;
this._gjs_function.text = 'gjs_function: ' + memInfo.gjs_function;
this._gjs_closure.text = 'gjs_closure: ' + memInfo.gjs_closure;
this._last_gc_seconds_ago.text = 'last_gc_seconds_ago: ' + memInfo.last_gc_seconds_ago;
}
};

View File

@ -595,9 +595,9 @@ function _globalKeyPressHandler(actor, event) {
return true;
}
// Other bindings are only available when the overview is up and
// Other bindings are only available to the user session when the overview is up and
// no modal dialog is present.
if (!overview.visible || modalCount > 1)
if (global.session_type == Shell.SessionType.USER && (!overview.visible || modalCount > 1))
return false;
// This isn't a Meta.KeyBindingAction yet
@ -607,7 +607,8 @@ function _globalKeyPressHandler(actor, event) {
}
if (action == Meta.KeyBindingAction.SWITCH_PANELS) {
ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK);
ctrlAltTabManager.popup(modifierState & Clutter.ModifierType.SHIFT_MASK,
modifierState);
return true;
}

View File

@ -284,7 +284,8 @@ FocusGrabber.prototype = {
let source = event.get_source();
switch (event.type()) {
case Clutter.EventType.BUTTON_PRESS:
if (!this.actor.contains(source) && !Main.keyboard.actor.contains(source))
if (!this.actor.contains(source) &&
!Main.layoutManager.keyboardBox.contains(source))
this.emit('button-pressed', source);
break;
case Clutter.EventType.KEY_PRESS:
@ -415,6 +416,7 @@ Notification.prototype = {
_init: function(source, title, banner, params) {
this.source = source;
this.title = title;
this.urgency = Urgency.NORMAL;
this.resident = false;
// 'transient' is a reserved keyword in JS, so we have to use an alternate variable name
@ -502,8 +504,11 @@ Notification.prototype = {
let oldFocus = global.stage.key_focus;
if (this._icon)
if (this._icon && (params.icon || params.clear)) {
this._icon.destroy();
this._icon = null;
}
// We always clear the content area if we don't have custom
// content because it might contain the @banner that didn't
// fit in the banner mode.
@ -529,14 +534,17 @@ Notification.prototype = {
if (!this._scrollArea && !this._actionArea && !this._imageBin)
this._table.remove_style_class_name('multi-line-notification');
this._icon = params.icon || this.source.createNotificationIcon();
this._table.add(this._icon, { row: 0,
col: 0,
x_expand: false,
y_expand: false,
y_fill: false,
y_align: St.Align.START });
if (!this._icon) {
this._icon = params.icon || this.source.createNotificationIcon();
this._table.add(this._icon, { row: 0,
col: 0,
x_expand: false,
y_expand: false,
y_fill: false,
y_align: St.Align.START });
}
this.title = title;
title = title ? _fixMarkup(title.replace(/\n/g, ' '), params.titleMarkup) : '';
this._titleLabel.clutter_text.set_markup('<b>' + title + '</b>');
@ -791,11 +799,12 @@ Notification.prototype = {
},
_bannerBoxAllocate: function(actor, box, flags) {
let [titleMinW, titleNatW] = this._titleLabel.get_preferred_width(-1);
let [titleMinH, titleNatH] = this._titleLabel.get_preferred_height(-1);
let [bannerMinW, bannerNatW] = this._bannerLabel.get_preferred_width(-1);
let availWidth = box.x2 - box.x1;
let [titleMinW, titleNatW] = this._titleLabel.get_preferred_width(-1);
let [titleMinH, titleNatH] = this._titleLabel.get_preferred_height(availWidth);
let [bannerMinW, bannerNatW] = this._bannerLabel.get_preferred_width(availWidth);
let titleBox = new Clutter.ActorBox();
let titleBoxW = Math.min(titleNatW, availWidth);
if (this._titleDirection == St.TextDirection.RTL) {
@ -1347,6 +1356,7 @@ MessageTray.prototype = {
this._summaryBin.opacity = 0;
this._summaryMotionId = 0;
this._trayMotionId = 0;
this._summaryBoxPointer = new BoxPointer.BoxPointer(St.Side.BOTTOM,
{ reactive: true,
@ -1386,12 +1396,15 @@ MessageTray.prototype = {
}));
this._focusGrabber.connect('escape-pressed', Lang.bind(this, this._escapeTray));
Main.layoutManager.keyboardBox.connect('notify::hover', Lang.bind(this, this._onKeyboardHoverChanged));
this._trayState = State.HIDDEN;
this._locked = false;
this._traySummoned = false;
this._useLongerTrayLeftTimeout = false;
this._trayLeftTimeoutId = 0;
this._pointerInTray = false;
this._pointerInKeyboard = false;
this._summaryState = State.HIDDEN;
this._summaryTimeoutId = 0;
this._pointerInSummary = false;
@ -1494,8 +1507,11 @@ MessageTray.prototype = {
// after notifications are done showing. However, we don't want that to happen for
// transient sources, which are removed after the notification is shown, but are
// not removed fast enough because of the callbacks to avoid the summary popping up.
// So we just don't add transient sources to this._newSummaryItems .
if (!source.isTransient)
// So we just don't add transient sources to this._newSummaryItems.
// We don't want that to happen for chat sources neither, because they
// can be added when the user starts a chat from Empathy and they are not transient.
// The notification will popup on incoming message anyway. See bug #657249.
if (!source.isTransient && !source.isChat)
this._newSummaryItems.push(summaryItem);
source.connect('notify', Lang.bind(this, this._onNotify));
@ -1838,6 +1854,24 @@ MessageTray.prototype = {
}
},
_onKeyboardHoverChanged: function(keyboard) {
this._pointerInKeyboard = keyboard.hover;
if (!keyboard.hover) {
let event = Clutter.get_current_event();
if (event && event.type() == Clutter.EventType.LEAVE) {
let into = event.get_related();
if (into && this.actor.contains(into)) {
// Don't call _updateState, because pointerInTray is
// still false
return;
}
}
}
this._updateState();
},
_onStatusChanged: function(presence, status) {
this._backFromAway = (this._userStatus == GnomeSession.PresenceStatus.IDLE && this._userStatus != status);
this._userStatus = status;
@ -1902,7 +1936,7 @@ MessageTray.prototype = {
let notificationsPending = this._notificationQueue.length > 0 && (!this._busy || notificationUrgent);
let notificationPinned = this._pointerInTray && !this._pointerInSummary && !this._notificationRemoved;
let notificationExpanded = this._notificationBin.y < 0;
let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked) || this._notificationRemoved;
let notificationExpired = (this._notificationTimeoutId == 0 && !(this._notification && this._notification.urgency == Urgency.CRITICAL) && !this._pointerInTray && !this._locked && !(this._pointerInKeyboard && notificationExpanded)) || this._notificationRemoved;
let canShowNotification = notificationsPending && this._summaryState == State.HIDDEN;
if (this._notificationState == State.HIDDEN) {
@ -2260,6 +2294,8 @@ MessageTray.prototype = {
// _clickedSummaryItem.actor can change absolute position without changing allocation
this._summaryMotionId = this._summary.connect('allocation-changed',
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
this._trayMotionId = Main.layoutManager.trayBox.connect('notify::anchor-y',
Lang.bind(this, this._adjustSummaryBoxPointerPosition));
this._summaryBoxPointer.actor.opacity = 0;
this._summaryBoxPointer.actor.show();
@ -2291,8 +2327,10 @@ MessageTray.prototype = {
if (this._clickedSummaryItemAllocationChangedId) {
this._clickedSummaryItem.actor.disconnect(this._clickedSummaryItemAllocationChangedId);
this._summary.disconnect(this._summaryMotionId);
Main.layoutManager.trayBox.disconnect(this._trayMotionId);
this._clickedSummaryItemAllocationChangedId = 0;
this._summaryMotionId = 0;
this._trayMotionId = 0;
}
if (this._clickedSummaryItem)
@ -2311,8 +2349,9 @@ MessageTray.prototype = {
}
this._summaryBoxPointerState = State.HIDING;
// Unset this._clickedSummaryItem if we are no longer showing the summary
if (this._summaryState != State.SHOWN)
// Unset this._clickedSummaryItem if we are no longer showing the summary or if
// this._clickedSummaryItem is still the item associated with the currently showing box pointer
if (this._summaryState != State.SHOWN || this._summaryBoxPointerItem == this._clickedSummaryItem)
this._unsetClickedSummaryItem();
this._focusGrabber.ungrabFocus();

View File

@ -110,9 +110,8 @@ ModalDialog.prototype = {
this._buttonLayout.destroy_children();
this._actionKeys = {};
let i = 0;
for (let index in buttons) {
let buttonInfo = buttons[index];
for (let i = 0; i < buttons.length; i ++) {
let buttonInfo = buttons[i];
let label = buttonInfo['label'];
let action = buttonInfo['action'];
let key = buttonInfo['key'];
@ -132,7 +131,9 @@ ModalDialog.prototype = {
else
x_alignment = St.Align.MIDDLE;
this._initialKeyFocus = buttonInfo.button;
if (this._initialKeyFocus == this._dialogLayout ||
this._buttonLayout.contains(this._initialKeyFocus))
this._initialKeyFocus = buttonInfo.button;
this._buttonLayout.add(buttonInfo.button,
{ expand: true,
x_fill: false,
@ -144,11 +145,10 @@ ModalDialog.prototype = {
if (key)
this._actionKeys[key] = action;
i++;
}
// Fade in buttons if there weren't any before
if (!hadChildren && i > 0) {
if (!hadChildren && buttons.length > 0) {
this._buttonLayout.opacity = 0;
Tweener.addTween(this._buttonLayout,
{ opacity: 255,

View File

@ -91,6 +91,7 @@ NetworkSecretDialog.prototype = {
}
let secretTable = new St.Table({ style_class: 'network-dialog-secret-table' });
let initialFocusSet = false;
let pos = 0;
for (let i = 0; i < this._content.secrets.length; i++) {
let secret = this._content.secrets[i];
@ -109,6 +110,12 @@ NetworkSecretDialog.prototype = {
secret.valid = secret.value.length > 0;
if (reactive) {
if (!initialFocusSet) {
this.setInitialKeyFocus(secret.entry);
initialFocusSet = true;
}
secret.entry.clutter_text.connect('activate', Lang.bind(this, this._onOk));
secret.entry.clutter_text.connect('text-changed', Lang.bind(this, function() {
secret.value = secret.entry.get_text();
if (secret.validate)

View File

@ -16,7 +16,6 @@ const Layout = imports.ui.layout;
const Overview = imports.ui.overview;
const PopupMenu = imports.ui.popupMenu;
const PanelMenu = imports.ui.panelMenu;
const UserMenu = imports.ui.userMenu;
const DateMenu = imports.ui.dateMenu;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
@ -28,29 +27,31 @@ const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const SPINNER_ANIMATION_TIME = 0.2;
const STANDARD_TRAY_ICON_ORDER = ['a11y', 'keyboard', 'volume', 'bluetooth', 'network', 'battery'];
const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
const STANDARD_STATUS_AREA_ORDER = ['a11y', 'keyboard', 'volume', 'bluetooth', 'network', 'battery', 'userMenu'];
const STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION = {
'a11y': imports.ui.status.accessibility.ATIndicator,
'volume': imports.ui.status.volume.Indicator,
'battery': imports.ui.status.power.Indicator,
'keyboard': imports.ui.status.keyboard.XKBIndicator
'keyboard': imports.ui.status.keyboard.XKBIndicator,
'userMenu': imports.ui.userMenu.UserMenuButton
};
if (Config.HAVE_BLUETOOTH)
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
try {
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['network'] = imports.ui.status.network.NMApplet;
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['network'] = imports.ui.status.network.NMApplet;
} catch(e) {
log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
}
const GDM_TRAY_ICON_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'battery'];
const GDM_TRAY_ICON_SHELL_IMPLEMENTATION = {
const GDM_STATUS_AREA_ORDER = ['a11y', 'display', 'keyboard', 'volume', 'battery', 'powerMenu'];
const GDM_STATUS_AREA_SHELL_IMPLEMENTATION = {
'a11y': imports.ui.status.accessibility.ATIndicator,
'volume': imports.ui.status.volume.Indicator,
'battery': imports.ui.status.power.Indicator,
'keyboard': imports.ui.status.keyboard.XKBIndicator
'keyboard': imports.ui.status.keyboard.XKBIndicator,
'powerMenu': imports.gdm.powerMenu.PowerMenuButton
};
// To make sure the panel corners blend nicely with the panel,
@ -248,7 +249,7 @@ AppMenuButton.prototype = {
this._targetApp = null;
let bin = new St.Bin({ name: 'appMenu' });
this.actor.set_child(bin);
this.actor.add_actor(bin);
this.actor.reactive = false;
this._targetIsCurrent = false;
@ -563,10 +564,10 @@ ActivitiesButton.prototype = {
PanelMenu.Button.prototype._init.call(this, 0.0);
let container = new Shell.GenericContainer();
container.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
container.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
container.connect('allocate', Lang.bind(this, this._allocate));
this.actor.child = container;
container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
container.connect('allocate', Lang.bind(this, this._containerAllocate));
this.actor.add_actor(container);
this.actor.name = 'panelActivities';
/* Translators: If there is no suitable word for "Activities"
@ -598,15 +599,15 @@ ActivitiesButton.prototype = {
this._xdndTimeOut = 0;
},
_getPreferredWidth: function(actor, forHeight, alloc) {
_containerGetPreferredWidth: function(actor, forHeight, alloc) {
[alloc.min_size, alloc.natural_size] = this._label.get_preferred_width(forHeight);
},
_getPreferredHeight: function(actor, forWidth, alloc) {
_containerGetPreferredHeight: function(actor, forWidth, alloc) {
[alloc.min_size, alloc.natural_size] = this._label.get_preferred_height(forWidth);
},
_allocate: function(actor, box, flags) {
_containerAllocate: function(actor, box, flags) {
this._label.allocate(box, flags);
// The hot corner needs to be outside any padding/alignment
@ -782,8 +783,10 @@ PanelCorner.prototype = {
button = this._findRightmostButton(this._box);
if (button) {
if (this._button && this._buttonStyleChangedSignalId)
if (this._button && this._buttonStyleChangedSignalId) {
this._button.disconnect(this._buttonStyleChangedSignalId);
this._button.style = null;
}
this._button = button;
@ -801,6 +804,10 @@ PanelCorner.prototype = {
let pseudoClass = button.get_style_pseudo_class();
this.actor.set_style_pseudo_class(pseudoClass);
}));
// The corner doesn't support theme transitions, so override
// the .panel-button default
button.style = 'transition-duration: 0';
}
},
@ -895,14 +902,6 @@ Panel.prototype = {
this.actor.remove_style_class_name('in-overview');
}));
if (global.session_type == Shell.SessionType.GDM) {
this._tray_icon_order = GDM_TRAY_ICON_ORDER;
this._tray_icon_shell_implementation = GDM_TRAY_ICON_SHELL_IMPLEMENTATION;
} else {
this._tray_icon_order = STANDARD_TRAY_ICON_ORDER;
this._tray_icon_shell_implementation = STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION;
}
this._menus = new PopupMenu.PopupMenuManager(this);
this._leftBox = new St.BoxLayout({ name: 'panelLeft' });
@ -953,21 +952,12 @@ Panel.prototype = {
this._menus.addMenu(this._dateMenu.menu);
/* right */
// System status applets live in statusBox, while legacy tray icons
// live in trayBox
// The trayBox is hidden when there are no tray icons.
this._trayBox = new St.BoxLayout({ name: 'legacyTray' });
this._statusBox = new St.BoxLayout({ name: 'statusTray' });
this._trayBox.hide();
this._rightBox.add(this._trayBox);
this._rightBox.add(this._statusBox);
if (global.session_type == Shell.SessionType.USER) {
this._userMenu = new UserMenu.UserMenuButton();
this._userMenu.actor.name = 'panelStatus';
this._rightBox.add(this._userMenu.actor);
if (global.session_type == Shell.SessionType.GDM) {
this._status_area_order = GDM_STATUS_AREA_ORDER;
this._status_area_shell_implementation = GDM_STATUS_AREA_SHELL_IMPLEMENTATION;
} else {
this._status_area_order = STANDARD_STATUS_AREA_ORDER;
this._status_area_shell_implementation = STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION;
}
Main.statusIconDispatcher.connect('status-icon-added', Lang.bind(this, this._onTrayIconAdded));
@ -1053,9 +1043,9 @@ Panel.prototype = {
},
startStatusArea: function() {
for (let i = 0; i < this._tray_icon_order.length; i++) {
let role = this._tray_icon_order[i];
let constructor = this._tray_icon_shell_implementation[role];
for (let i = 0; i < this._status_area_order.length; i++) {
let role = this._status_area_order[i];
let constructor = this._status_area_shell_implementation[role];
if (!constructor) {
// This icon is not implemented (this is a bug)
continue;
@ -1064,11 +1054,23 @@ Panel.prototype = {
let indicator = new constructor();
this.addToStatusArea(role, indicator, i);
}
},
// PopupMenuManager depends on menus being added in order for
// keyboard navigation
if (this._userMenu)
this._menus.addMenu(this._userMenu.menu);
_insertStatusItem: function(actor, position) {
let children = this._rightBox.get_children();
let i;
for (i = children.length - 1; i >= 0; i--) {
let rolePosition = children[i]._rolePosition;
if (position > rolePosition) {
this._rightBox.insert_actor(actor, i + 1);
break;
}
}
if (i == -1) {
// If we didn't find a position, we must be first
this._rightBox.insert_actor(actor, 0);
}
actor._rolePosition = position;
},
addToStatusArea: function(role, indicator, position) {
@ -1080,8 +1082,7 @@ Panel.prototype = {
if (!position)
position = 0;
this._statusBox.insert_actor(indicator.actor, position);
this._insertStatusItem(indicator.actor, position);
this._menus.addMenu(indicator.menu);
this._statusArea[role] = indicator;
@ -1094,39 +1095,24 @@ Panel.prototype = {
},
_onTrayIconAdded: function(o, icon, role) {
icon.height = PANEL_ICON_SIZE;
if (this._tray_icon_shell_implementation[role]) {
if (this._status_area_shell_implementation[role]) {
// This icon is legacy, and replaced by a Shell version
// Hide it
return;
}
// Figure out the index in our well-known order for this icon
let position = this._tray_icon_order.indexOf(role);
icon._rolePosition = position;
let children = this._trayBox.get_children();
let i;
// Walk children backwards, until we find one that isn't
// well-known, or one where we should follow
for (i = children.length - 1; i >= 0; i--) {
let rolePosition = children[i]._rolePosition;
if (!rolePosition || position > rolePosition) {
this._trayBox.insert_actor(icon, i + 1);
break;
}
}
if (i == -1) {
// If we didn't find a position, we must be first
this._trayBox.insert_actor(icon, 0);
}
// Make sure the trayBox is shown.
this._trayBox.show();
icon.height = PANEL_ICON_SIZE;
let buttonBox = new PanelMenu.ButtonBox();
let box = buttonBox.actor;
box.add_actor(icon);
this._insertStatusItem(box, this._status_area_order.indexOf(role));
},
_onTrayIconRemoved: function(o, icon) {
if (icon.get_parent() != null)
this._trayBox.remove_actor(icon);
let box = icon.get_parent();
if (box && box._delegate instanceof PanelMenu.ButtonBox)
box.destroy();
},
};

View File

@ -2,26 +2,110 @@
const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Lang = imports.lang;
const PopupMenu = imports.ui.popupMenu;
const Main = imports.ui.main;
const Params = imports.misc.params;
const PopupMenu = imports.ui.popupMenu;
function ButtonBox(params) {
this._init.apply(this, arguments);
};
ButtonBox.prototype = {
_init: function(params) {
params = Params.parse(params, { style_class: 'panel-button' }, true);
this.actor = new Shell.GenericContainer(params);
this.actor._delegate = this;
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this.actor.connect('allocate', Lang.bind(this, this._allocate));
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
this._minHPadding = this._natHPadding = 0.0;
},
_onStyleChanged: function(actor) {
let themeNode = actor.get_theme_node();
this._minHPadding = themeNode.get_length('-minimum-hpadding');
this._natHPadding = themeNode.get_length('-natural-hpadding');
},
_getPreferredWidth: function(actor, forHeight, alloc) {
let children = actor.get_children();
let child = children.length > 0 ? children[0] : null;
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1);
} else {
alloc.min_size = alloc.natural_size = 0;
}
alloc.min_size += 2 * this._minHPadding;
alloc.natural_size += 2 * this._natHPadding;
},
_getPreferredHeight: function(actor, forWidth, alloc) {
let children = actor.get_children();
let child = children.length > 0 ? children[0] : null;
if (child) {
[alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1);
} else {
alloc.min_size = alloc.natural_size = 0;
}
},
_allocate: function(actor, box, flags) {
let children = actor.get_children();
if (children.length == 0)
return;
let child = children[0];
let [minWidth, natWidth] = child.get_preferred_width(-1);
let [minHeight, natHeight] = child.get_preferred_height(-1);
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
let childBox = new Clutter.ActorBox();
if (natWidth + 2 * this._natHPadding <= availWidth) {
childBox.x1 = this._natHPadding;
childBox.x2 = availWidth - this._natHPadding;
} else {
childBox.x1 = this._minHPadding;
childBox.x2 = availWidth - this._minHPadding;
}
if (natHeight <= availHeight) {
childBox.y1 = Math.floor((availHeight - natHeight) / 2);
childBox.y2 = childBox.y1 + natHeight;
} else {
childBox.y1 = 0;
childBox.y2 = availHeight;
}
child.allocate(childBox, flags);
},
}
function Button(menuAlignment) {
this._init(menuAlignment);
}
Button.prototype = {
__proto__: ButtonBox.prototype,
_init: function(menuAlignment) {
this.actor = new St.Bin({ style_class: 'panel-button',
reactive: true,
can_focus: true,
x_fill: true,
y_fill: false,
track_hover: true });
this.actor._delegate = this;
ButtonBox.prototype._init.call(this, { reactive: true,
can_focus: true,
track_hover: true });
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
this.menu = new PopupMenu.PopupMenu(this.actor, menuAlignment, St.Side.TOP);
@ -112,7 +196,8 @@ SystemStatusButton.prototype = {
this._iconActor = new St.Icon({ icon_name: iconName,
icon_type: St.IconType.SYMBOLIC,
style_class: 'system-status-icon' });
this.actor.set_child(this._iconActor);
this.actor.add_actor(this._iconActor);
this.actor.add_style_class_name('panel-status-button');
this.setTooltip(tooltipText);
},

View File

@ -142,6 +142,7 @@ AuthenticationDialog.prototype = {
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
this._passwordBox.add(this._passwordEntry,
{expand: true });
this.setInitialKeyFocus(this._passwordEntry);
this._passwordBox.hide();
this._errorMessageLabel = new St.Label({ style_class: 'polkit-dialog-error-label' });
@ -186,13 +187,6 @@ AuthenticationDialog.prototype = {
this._session.connect('request', Lang.bind(this, this._onSessionRequest));
this._session.connect('show-error', Lang.bind(this, this._onSessionShowError));
this._session.connect('show-info', Lang.bind(this, this._onSessionShowInfo));
// Delay focus grab to avoid ModalDialog stealing focus with
// its buttons
this.connect('opened',
Lang.bind(this, function() {
this._passwordEntry.grab_key_focus();
}));
},
startAuthentication: function() {

View File

@ -35,6 +35,7 @@ PopupBaseMenuItem.prototype = {
params = Params.parse (params, { reactive: true,
activate: true,
hover: true,
sensitive: true,
style_class: null
});
this.actor = new Shell.GenericContainer({ style_class: 'popup-menu-item',
@ -52,11 +53,15 @@ PopupBaseMenuItem.prototype = {
this._columnWidths = null;
this._spacing = 0;
this.active = false;
this._activatable = params.reactive && params.activate;
this.sensitive = this._activatable && params.sensitive;
this.setSensitive(this.sensitive);
if (params.style_class)
this.actor.add_style_class_name(params.style_class);
if (params.reactive && params.activate) {
if (this._activatable) {
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonReleaseEvent));
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
}
@ -117,6 +122,23 @@ PopupBaseMenuItem.prototype = {
}
},
setSensitive: function(sensitive) {
if (!this._activatable)
return;
if (this.sensitive == sensitive)
return;
this.sensitive = sensitive;
this.actor.reactive = sensitive;
this.actor.can_focus = sensitive;
if (sensitive)
this.actor.remove_style_pseudo_class('insensitive');
else
this.actor.add_style_pseudo_class('insensitive');
this.emit('sensitive-changed', sensitive);
},
destroy: function() {
this.actor.destroy();
this.emit('destroy');
@ -222,10 +244,25 @@ PopupBaseMenuItem.prototype = {
},
_getPreferredHeight: function(actor, forWidth, alloc) {
let height = 0;
let height = 0, x = 0, minWidth, childWidth;
for (let i = 0; i < this._children.length; i++) {
let child = this._children[i];
let [min, natural] = child.actor.get_preferred_height(forWidth);
if (this._columnWidths) {
if (child.span == -1) {
childWidth = 0;
for (let j = i; j < this._columnWidths.length; j++)
childWidth += this._columnWidths[j]
} else
childWidth = this._columnWidths[i];
} else {
if (child.span == -1)
childWidth = forWidth - x;
else
[minWidth, childWidth] = child.actor.get_preferred_width(-1);
}
x += childWidth;
let [min, natural] = child.actor.get_preferred_height(childWidth);
if (natural > height)
height = natural;
}
@ -283,7 +320,14 @@ PopupBaseMenuItem.prototype = {
}
extraWidth = availWidth - naturalWidth;
} else {
availWidth = naturalWidth;
if (child.span == -1) {
if (direction == St.TextDirection.LTR)
availWidth = box.x2 - x;
else
availWidth = x - box.x1;
} else {
availWidth = naturalWidth;
}
extraWidth = 0;
}
@ -291,7 +335,7 @@ PopupBaseMenuItem.prototype = {
if (child.expand) {
childBox.x1 = x;
childBox.x2 = x + availWidth;
} else if (child.align === St.Align.CENTER) {
} else if (child.align === St.Align.MIDDLE) {
childBox.x1 = x + Math.round(extraWidth / 2);
childBox.x2 = childBox.x1 + naturalWidth;
} else if (child.align === St.Align.END) {
@ -305,7 +349,7 @@ PopupBaseMenuItem.prototype = {
if (child.expand) {
childBox.x1 = x - availWidth;
childBox.x2 = x;
} else if (child.align === St.Align.CENTER) {
} else if (child.align === St.Align.MIDDLE) {
childBox.x1 = x - Math.round(extraWidth / 2);
childBox.x2 = childBox.x1 + naturalWidth;
} else if (child.align === St.Align.END) {
@ -899,6 +943,17 @@ PopupMenuBase.prototype = {
this.emit('active-changed', null);
}
}));
menuItem._sensitiveChangeId = menuItem.connect('sensitive-changed', Lang.bind(this, function(menuItem, sensitive) {
if (!sensitive && this._activeMenuItem == menuItem) {
if (!this.actor.navigate_focus(menuItem.actor,
Gtk.DirectionType.TAB_FORWARD,
true))
this.actor.grab_key_focus();
} else if (sensitive && this._activeMenuItem == null) {
if (global.stage.get_key_focus() == this.actor)
menuItem.actor.grab_key_focus();
}
}));
menuItem._activateId = menuItem.connect('activate', Lang.bind(this, function (menuItem, event) {
this.emit('activate', menuItem);
this.close(true);
@ -906,6 +961,7 @@ PopupMenuBase.prototype = {
menuItem.connect('destroy', Lang.bind(this, function(emitter) {
menuItem.disconnect(menuItem._activateId);
menuItem.disconnect(menuItem._activeChangeId);
menuItem.disconnect(menuItem._sensitiveChangeId);
if (menuItem.menu) {
menuItem.menu.disconnect(menuItem._subMenuActivateId);
menuItem.menu.disconnect(menuItem._subMenuActiveChangeId);
@ -1528,7 +1584,8 @@ PopupComboBoxMenuItem.prototype = {
this.addActor(this._itemBox);
let expander = new St.Label({ text: '\u2304' });
this.addActor(expander, { align: St.Align.END });
this.addActor(expander, { align: St.Align.END,
span: -1 });
this._menu = new PopupComboMenu(this.actor);
Main.uiGroup.add_actor(this._menu.actor);

View File

@ -68,9 +68,9 @@ ATIndicator.prototype = {
// 'screen-reader-enabled');
// this.menu.addMenuItem(screenReader);
// let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
// 'screen-keyboard-enabled');
// this.menu.addMenuItem(screenKeyboard);
let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
'screen-keyboard-enabled');
this.menu.addMenuItem(screenKeyboard);
let visualBell = this._buildItemGConf(_("Visual Alerts"), client, KEY_VISUAL_BELL);
this.menu.addMenuItem(visualBell);

View File

@ -49,10 +49,11 @@ XKBIndicator.prototype = {
PanelMenu.Button.prototype._init.call(this, St.Align.START);
this._container = new Shell.GenericContainer();
this._container.connect('get-preferred-width', Lang.bind(this, this._get_preferred_width));
this._container.connect('get-preferred-height', Lang.bind(this, this._get_preferred_height));
this._container.connect('allocate', Lang.bind(this, this._allocate));
this.actor.set_child(this._container);
this._container.connect('get-preferred-width', Lang.bind(this, this._containerGetPreferredWidth));
this._container.connect('get-preferred-height', Lang.bind(this, this._containerGetPreferredHeight));
this._container.connect('allocate', Lang.bind(this, this._containerAllocate));
this.actor.add_actor(this._container);
this.actor.add_style_class_name('panel-status-button');
this._iconActor = new St.Icon({ icon_name: 'keyboard', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
this._container.add_actor(this._iconActor);
@ -61,21 +62,23 @@ XKBIndicator.prototype = {
this._showFlags = false;
this._config = Gkbd.Configuration.get();
this._config.connect('changed', Lang.bind(this, this._sync_config));
this._config.connect('group-changed', Lang.bind(this, this._sync_group));
this._config.connect('changed', Lang.bind(this, this._syncConfig));
this._config.connect('group-changed', Lang.bind(this, this._syncGroup));
this._config.start_listen();
this._sync_config();
this._syncConfig();
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() {
Main.overview.hide();
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
}));
if (global.session_type == Shell.SessionType.USER) {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, function() {
Main.overview.hide();
Util.spawn(['gkbd-keyboard-display', '-g', String(this._config.get_current_group() + 1)]);
}));
}
this.menu.addSettingsAction(_("Region and Language Settings"), 'gnome-region-panel.desktop');
},
_adjust_group_names: function(names) {
_adjustGroupNames: function(names) {
// Disambiguate duplicate names with a subscript
// This is O(N^2) to avoid sorting names
// but N <= 4 so who cares?
@ -97,7 +100,7 @@ XKBIndicator.prototype = {
return names;
},
_sync_config: function() {
_syncConfig: function() {
this._showFlags = this._config.if_flags_shown();
if (this._showFlags) {
this._container.set_skip_paint(this._iconActor, false);
@ -119,7 +122,7 @@ XKBIndicator.prototype = {
for (let i = 0; i < this._labelActors.length; i++)
this._labelActors[i].destroy();
let short_names = this._adjust_group_names(this._config.get_short_group_names());
let short_names = this._adjustGroupNames(this._config.get_short_group_names());
this._selectedLayout = null;
this._layoutItems = [ ];
@ -144,10 +147,10 @@ XKBIndicator.prototype = {
this._container.set_skip_paint(shortLabel, true);
}
this._sync_group();
this._syncGroup();
},
_sync_group: function() {
_syncGroup: function() {
let selected = this._config.get_current_group();
if (this._selectedLayout) {
@ -170,10 +173,10 @@ XKBIndicator.prototype = {
this._selectedLayout = item;
},
_get_preferred_width: function(container, for_height, alloc) {
/* Here, and in _get_preferred_height, we need to query for the
height of all children, but we ignore the results for those
we don't actually display. */
_containerGetPreferredWidth: function(container, for_height, alloc) {
// Here, and in _containerGetPreferredHeight, we need to query
// for the height of all children, but we ignore the results
// for those we don't actually display.
let max_min_width = 0, max_natural_width = 0;
if (this._showFlags)
[max_min_width, max_natural_width] = this._iconActor.get_preferred_width(for_height);
@ -190,7 +193,7 @@ XKBIndicator.prototype = {
alloc.natural_size = max_natural_width;
},
_get_preferred_height: function(container, for_width, alloc) {
_containerGetPreferredHeight: function(container, for_width, alloc) {
let max_min_height = 0, max_natural_height = 0;
if (this._showFlags)
[max_min_height, max_natural_height] = this._iconActor.get_preferred_height(for_width);
@ -207,7 +210,7 @@ XKBIndicator.prototype = {
alloc.natural_size = max_natural_height;
},
_allocate: function(container, box, flags) {
_containerAllocate: function(container, box, flags) {
// translate box to (0, 0)
box.x2 -= box.x1;
box.x1 = 0;

View File

@ -1291,6 +1291,9 @@ NMDeviceWireless.prototype = {
apObj.accessPoints.splice(i, 1);
if (apObj.accessPoints.length == 0) {
if (this._activeNetwork == apObj)
this._activeNetwork = null;
if (apObj.item)
apObj.item.destroy();
@ -1480,6 +1483,11 @@ NMDeviceWireless.prototype = {
},
_createNetworkItem: function(apObj, position) {
if(!apObj.accessPoints || apObj.accessPoints.length == 0) {
// this should not happen, but I have no idea why it happens
return;
}
if(apObj.connections.length > 0) {
if (apObj.connections.length == 1)
apObj.item = this._createAPItem(apObj.connections[0], apObj, false);
@ -1742,13 +1750,6 @@ NMApplet.prototype = {
if (wrapperClass) {
let wrapper = new wrapperClass(this._client, device, this._connections);
wrapper._networkLostId = wrapper.connect('network-lost', Lang.bind(this, function(device) {
this._notifyForDevice(device, 'network-offline',
_("Connectivity lost"),
_("You are no longer connected to the network"),
// set critical urgency to popup the notification automatically
MessageTray.Urgency.CRITICAL);
}));
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
// XXX: nm-applet has no special text depending on reason
// but I'm not sure of this generic message
@ -1761,7 +1762,6 @@ NMApplet.prototype = {
this._syncSectionTitle(dev.category);
}));
wrapper._destroyId = wrapper.connect('destroy', function(wrapper) {
wrapper.disconnect(wrapper._networkLostId);
wrapper.disconnect(wrapper._activationFailedId);
wrapper.disconnect(wrapper._deviceStateChangedId);
wrapper.disconnect(wrapper._destroyId);

View File

@ -83,6 +83,9 @@ Client.prototype = {
this._chatSources = {};
this._chatState = Tp.ChannelChatState.ACTIVE;
// account path -> AccountNotification
this._accountNotifications = {};
// Set up a SimpleObserver, which will call _observeChannels whenever a
// channel matching its filters is detected.
// The second argument, recover, means _observeChannels will be run
@ -302,6 +305,8 @@ Client.prototype = {
Shell.get_tp_contacts(conn, [targetHandle],
contactFeatures,
Lang.bind(this, this._createAudioVideoSource, channel, context, dispatchOp));
context.delay();
},
_createAudioVideoSource: function(connection, contacts, failed, channel, context, dispatchOp) {
@ -335,6 +340,8 @@ Client.prototype = {
Shell.get_tp_contacts(conn, [targetHandle],
contactFeatures,
Lang.bind(this, this._createFileTransferSource, channel, context, dispatchOp));
context.delay();
},
_createFileTransferSource: function(connection, contacts, failed, channel, context, dispatchOp) {
@ -420,7 +427,6 @@ Client.prototype = {
/* Display notification to ask user to accept/reject request */
let source = this._ensureSubscriptionSource();
Main.messageTray.add(source);
let notif = new SubscriptionRequestNotification(source, contact);
source.notify(notif);
@ -430,6 +436,7 @@ Client.prototype = {
if (this._subscriptionSource == null) {
this._subscriptionSource = new MultiNotificationSource(
_("Subscription request"), 'gtk-dialog-question');
Main.messageTray.add(this._subscriptionSource);
this._subscriptionSource.connect('destroy', Lang.bind(this, function () {
this._subscriptionSource = null;
}));
@ -446,11 +453,18 @@ Client.prototype = {
return;
}
let notif = this._accountNotifications[account.get_object_path()];
if (notif)
return;
/* Display notification that account failed to connect */
let source = this._ensureAccountSource();
Main.messageTray.add(source);
let notif = new AccountNotification(source, account, connectionError);
notif = new AccountNotification(source, account, connectionError);
this._accountNotifications[account.get_object_path()] = notif;
notif.connect('destroy', Lang.bind(this, function() {
delete this._accountNotifications[account.get_object_path()];
}));
source.notify(notif);
},
@ -458,6 +472,7 @@ Client.prototype = {
if (this._accountSource == null) {
this._accountSource = new MultiNotificationSource(
_("Connection error"), 'gtk-dialog-error');
Main.messageTray.add(this._accountSource);
this._accountSource.connect('destroy', Lang.bind(this, function () {
this._accountSource = null;
}));
@ -532,13 +547,6 @@ ChatSource.prototype = {
createNotificationIcon: function() {
this._iconBox = new St.Bin({ style_class: 'avatar-box' });
this._iconBox._size = this.ICON_SIZE;
this._updateAvatarIcon();
return this._iconBox;
},
_updateAvatarIcon: function() {
let textureCache = St.TextureCache.get_default();
let file = this._contact.get_avatar_file();
@ -550,6 +558,13 @@ ChatSource.prototype = {
icon_type: St.IconType.FULLCOLOR,
icon_size: this._iconBox._size });
}
return this._iconBox;
},
_updateAvatarIcon: function() {
this._setSummaryIcon(this.createNotificationIcon());
this._notification.update(this._notification.title, null, { customContent: true, icon: this.createNotificationIcon() });
},
open: function(notification) {
@ -1448,17 +1463,12 @@ AccountNotification.prototype = {
_("Connection to %s failed").format(account.get_display_name()),
null, { customContent: true });
let message;
if (connectionError in _connectionErrorMessages) {
message = _connectionErrorMessages[connectionError];
} else {
message = _("Unknown reason");
}
this._label = new St.Label();
this.addActor(this._label);
this._updateMessage(connectionError);
this._account = account;
this.addBody(message);
this.addButton('reconnect', _("Reconnect"));
this.addButton('edit', _("Edit account"));
@ -1492,11 +1502,25 @@ AccountNotification.prototype = {
this._connectionStatusId = account.connect('notify::connection-status',
Lang.bind(this, function() {
if (account.connection_status != Tp.ConnectionStatus.DISCONNECTED)
let status = account.connection_status;
if (status == Tp.ConnectionStatus.CONNECTED) {
this.destroy();
} else if (status == Tp.ConnectionStatus.DISCONNECTED) {
this._updateMessage(account.connection_error);
}
}));
},
_updateMessage: function(connectionError) {
let message;
if (connectionError in _connectionErrorMessages) {
message = _connectionErrorMessages[connectionError];
} else {
message = _("Unknown reason");
}
this._label.set_text(message);
},
destroy: function() {
if (this._enabledId != 0) {
this._account.disconnect(this._enabledId);

View File

@ -5,6 +5,7 @@ const DBus = imports.dbus;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Tp = imports.gi.TelepathyGLib;
@ -22,7 +23,6 @@ const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const WRAP_WIDTH = 150;
const DIALOG_ICON_SIZE = 64;
const IMStatus = {
@ -87,28 +87,20 @@ IMUserNameItem.prototype = {
this.label = new St.Label();
this.label.clutter_text.set_line_wrap(true);
this.label.clutter_text.set_ellipsize(Pango.EllipsizeMode.NONE);
this._wrapper.add_actor(this.label);
},
_wrapperGetPreferredWidth: function(actor, forHeight, alloc) {
[alloc.min_size, alloc.natural_size] = this.label.get_preferred_width(-1);
if (alloc.natural_size > WRAP_WIDTH)
alloc.natural_size = WRAP_WIDTH;
alloc.min_size = 1;
alloc.natural_size = 1;
},
_wrapperGetPreferredHeight: function(actor, forWidth, alloc) {
let minWidth, natWidth;
[alloc.min_size, alloc.natural_size] = this.label.get_preferred_height(forWidth);
[minWidth, natWidth] = this.label.get_preferred_width(-1);
if (natWidth > WRAP_WIDTH) {
alloc.min_size *= 2;
alloc.natural_size *= 2;
}
},
_wrapperAllocate: function(actor, box, flags) {
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
this.label.allocate(box, flags);
}
};
@ -194,6 +186,10 @@ IMStatusChooserItem.prototype = {
this._userChangedId = this._user.connect('changed',
Lang.bind(this,
this._updateUser));
this.actor.connect('notify::mapped', Lang.bind(this, function() {
if (this.actor.mapped)
this._updateUser();
}));
},
// Override getColumnWidths()/setColumnWidths() to make the item
@ -203,9 +199,6 @@ IMStatusChooserItem.prototype = {
},
setColumnWidths: function(widths) {
this._columnWidths = PopupMenu.PopupBaseMenuItem.prototype.getColumnWidths.call(this);
let sectionWidths = this._section.getColumnWidths();
this._section.setColumnWidths(sectionWidths);
},
_updateUser: function() {
@ -321,33 +314,35 @@ IMStatusChooserItem.prototype = {
this._accountMgr.set_all_requested_presences(newPresence, status, msg);
},
getIMPresenceForSessionStatus: function(sessionStatus) {
if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE)
return this._previousPresence;
if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {
// Only change presence if the current one is "more present" than
// busy, or if coming back from idle
if (this._currentPresence == Tp.ConnectionPresenceType.AVAILABLE ||
this._currentPresence == Tp.ConnectionPresenceType.EXTENDED_AWAY)
return Tp.ConnectionPresenceType.BUSY;
}
if (sessionStatus == GnomeSession.PresenceStatus.IDLE) {
// Only change presence if the current one is "more present" than
// idle
if (this._currentPresence != Tp.ConnectionPresenceType.OFFLINE)
return Tp.ConnectionPresenceType.EXTENDED_AWAY;
}
return this._currentPresence;
},
_sessionStatusChanged: function(sessionPresence, sessionStatus) {
let [presence, s, msg] = this._accountMgr.get_most_available_presence();
let newPresence, status;
if (sessionStatus == GnomeSession.PresenceStatus.AVAILABLE) {
newPresence = this._previousPresence;
} else if (sessionStatus == GnomeSession.PresenceStatus.BUSY) {
// Only change presence if the current one is "more present" than
// busy, or if coming back from idle
if (presence == Tp.ConnectionPresenceType.AVAILABLE ||
presence == Tp.ConnectionPresenceType.EXTENDED_AWAY) {
newPresence = Tp.ConnectionPresenceType.BUSY;
} else {
return;
}
} else if (sessionStatus == GnomeSession.PresenceStatus.IDLE) {
// Only change presence if the current one is "more present" than
// idle
if (presence != Tp.ConnectionPresenceType.OFFLINE)
newPresence = Tp.ConnectionPresenceType.EXTENDED_AWAY;
else
return;
} else {
return;
}
let newPresence = this.getIMPresenceForSessionStatus(sessionStatus);
if (newPresence == undefined)
if (!newPresence || newPresence == presence)
return;
status = this._statusForPresence(newPresence);
@ -368,8 +363,8 @@ UserMenuButton.prototype = {
_init: function() {
PanelMenu.Button.prototype._init.call(this, 0.0);
let box = new St.BoxLayout({ name: 'panelStatusMenu' });
this.actor.set_child(box);
let box = new St.BoxLayout({ name: 'panelUserMenu' });
this.actor.add_actor(box);
this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
@ -419,6 +414,7 @@ UserMenuButton.prototype = {
box.add(this._name, { y_align: St.Align.MIDDLE, y_fill: false });
this._userLoadedId = this._user.connect('notify::is-loaded', Lang.bind(this, this._updateUserName));
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._updateUserName));
this._updateUserName();
this._createSubMenu();
this._userManager.connect('notify::is-loaded',
@ -547,6 +543,7 @@ UserMenuButton.prototype = {
item = new IMStatusChooserItem();
item.connect('activate', Lang.bind(this, this._onMyAccountActivate));
this.menu.addMenuItem(item);
this._statusChooser = item;
item = new PopupMenu.PopupSwitchMenuItem(_("Notifications"));
item.connect('activate', Lang.bind(this, this._updatePresenceStatus));
@ -594,8 +591,21 @@ UserMenuButton.prototype = {
},
_updatePresenceStatus: function(item, event) {
let status = item.state ? GnomeSession.PresenceStatus.AVAILABLE
: GnomeSession.PresenceStatus.BUSY;
let status;
if (item.state) {
status = GnomeSession.PresenceStatus.AVAILABLE;
} else {
status = GnomeSession.PresenceStatus.BUSY;
let [presence, s, msg] = this._account_mgr.get_most_available_presence();
let newPresence = this._statusChooser.getIMPresenceForSessionStatus(status);
if (newPresence != presence &&
newPresence == Tp.ConnectionPresenceType.BUSY)
Main.notify(_("Your chat status will be set to busy"),
_("Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."));
}
this._presence.setStatus(status);
},

View File

@ -19,47 +19,47 @@ const UNDIM_TIME = 0.250;
var dimShader = undefined;
function getDimShader() {
if (dimShader === null)
return null;
if (!dimShader) {
let source = Shell.get_file_contents_utf8_sync(global.datadir + '/shaders/dim-window.glsl');
try {
let shader = new Clutter.Shader();
shader.set_fragment_source(source, -1);
shader.compile();
dimShader = shader;
} catch (e) {
log(e.message);
dimShader = null;
}
}
function getDimShaderSource() {
if (!dimShader)
dimShader = Shell.get_file_contents_utf8_sync(global.datadir + '/shaders/dim-window.glsl');
return dimShader;
}
function getTopInvisibleBorder(metaWindow) {
let outerRect = metaWindow.get_outer_rect();
let inputRect = metaWindow.get_input_rect();
return outerRect.y - inputRect.y;
}
function WindowDimmer(actor) {
this._init(actor);
}
WindowDimmer.prototype = {
_init: function(actor) {
this.effect = new Clutter.ShaderEffect({ shader_type: Clutter.ShaderType.FRAGMENT_SHADER });
this.effect.set_shader_source(getDimShaderSource());
this.actor = actor;
},
set dimFraction(fraction) {
this._dimFraction = fraction;
let shader = getDimShader();
if (!Meta.prefs_get_attach_modal_dialogs() || !shader) {
this.actor.set_shader(null);
if (!Meta.prefs_get_attach_modal_dialogs()) {
this.effect.enabled = false;
return;
}
if (fraction > 0.01) {
this.actor.set_shader(shader);
this.actor.set_shader_param_float('height', this.actor.get_height());
this.actor.set_shader_param_float('fraction', fraction);
} else
this.actor.set_shader(null);
Shell.shader_effect_set_double_uniform(this.effect, 'height', this.actor.get_height());
Shell.shader_effect_set_double_uniform(this.effect, 'fraction', fraction);
if (!this.effect.actor)
this.actor.add_effect(this.effect);
} else {
if (this.effect.actor)
this.actor.remove_effect(this.effect);
}
},
get dimFraction() {
@ -69,11 +69,11 @@ WindowDimmer.prototype = {
_dimFraction: 0.0
};
function getWindowDimmer(texture) {
if (!texture._windowDimmer)
texture._windowDimmer = new WindowDimmer(texture);
function getWindowDimmer(actor) {
if (!actor._windowDimmer)
actor._windowDimmer = new WindowDimmer(actor);
return texture._windowDimmer;
return actor._windowDimmer;
}
function WindowManager() {
@ -268,30 +268,28 @@ WindowManager.prototype = {
let actor = window.get_compositor_private();
if (!actor)
return;
let texture = actor.get_texture();
if (animate)
Tweener.addTween(getWindowDimmer(texture),
Tweener.addTween(getWindowDimmer(actor),
{ dimFraction: 1.0,
time: DIM_TIME,
transition: 'linear'
});
else
getWindowDimmer(texture).dimFraction = 1.0;
getWindowDimmer(actor).dimFraction = 1.0;
},
_undimWindow: function(window, animate) {
let actor = window.get_compositor_private();
if (!actor)
return;
let texture = actor.get_texture();
if (animate)
Tweener.addTween(getWindowDimmer(texture),
Tweener.addTween(getWindowDimmer(actor),
{ dimFraction: 0.0,
time: UNDIM_TIME,
transition: 'linear'
});
else
getWindowDimmer(texture).dimFraction = 0.0;
getWindowDimmer(actor).dimFraction = 0.0;
},
_mapWindow : function(shellwm, actor) {
@ -528,22 +526,22 @@ WindowManager.prototype = {
shellwm.completed_switch_workspace();
},
_startAppSwitcher : function(shellwm, binding, window, backwards) {
_startAppSwitcher : function(shellwm, binding, mask, window, backwards) {
/* prevent a corner case where both popups show up at once */
if (this._workspaceSwitcherPopup != null)
this._workspaceSwitcherPopup.actor.hide();
let tabPopup = new AltTab.AltTabPopup();
if (!tabPopup.show(backwards, binding))
if (!tabPopup.show(backwards, binding, mask))
tabPopup.destroy();
},
_startA11ySwitcher : function(shellwm, binding, window, backwards) {
Main.ctrlAltTabManager.popup(backwards);
_startA11ySwitcher : function(shellwm, binding, mask, window, backwards) {
Main.ctrlAltTabManager.popup(backwards, mask);
},
_showWorkspaceSwitcher : function(shellwm, binding, window, backwards) {
_showWorkspaceSwitcher : function(shellwm, binding, mask, window, backwards) {
if (global.screen.n_workspaces == 1)
return;

View File

@ -1,6 +1,7 @@
af
an
ar
as
be
bg
bn

View File

@ -1,6 +1,7 @@
data/gnome-shell.desktop.in.in
data/org.gnome.shell.gschema.xml.in
js/gdm/loginDialog.js
js/gdm/powerMenu.js
js/misc/util.js
js/ui/appDisplay.js
js/ui/appFavorites.js

1024
po/af.po

File diff suppressed because it is too large Load Diff

1616
po/as.po Normal file

File diff suppressed because it is too large Load Diff

382
po/be.po
View File

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-14 22:03+0300\n"
"PO-Revision-Date: 2011-09-14 22:03+0300\n"
"POT-Creation-Date: 2011-09-21 22:18+0300\n"
"PO-Revision-Date: 2011-09-21 22:18+0300\n"
"Last-Translator: Ігар Грачышка <ihar.hrachyshka@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n"
@ -60,22 +60,18 @@ msgid "If true, display date in the clock, in addition to time."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display onscreen keyboard."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display seconds in time."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display the ISO week date in the calendar."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "List of desktop file IDs for favorite applications"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -90,46 +86,42 @@ msgid ""
"at the optimal thread count on the system."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show the onscreen keyboard"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
"a different container format."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -137,54 +129,75 @@ msgid ""
"remove already saved data."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "The type of keyboard to use."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "Uuids of extensions to enable"
msgstr "UUID-значэнні пашырэнняў, якія трэба ўключыць"
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Whether to collect stats about applications usage"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Which keyboard to use"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "disabled OpenSearch providers"
msgstr ""
#: ../js/gdm/loginDialog.js:604
#: ../js/gdm/loginDialog.js:617
msgid "Session..."
msgstr "Сеанс..."
#: ../js/gdm/loginDialog.js:761
#: ../js/gdm/loginDialog.js:785
msgctxt "title"
msgid "Sign In"
msgstr "Уваход"
#: ../js/gdm/loginDialog.js:818
#. translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:830
msgid "(or swipe finger)"
msgstr "(або правядзіце пальцам)"
#: ../js/gdm/loginDialog.js:848
msgid "Not listed?"
msgstr "Няма ў спісе?"
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
msgid "Cancel"
msgstr "Скасаваць"
#: ../js/gdm/loginDialog.js:933
#: ../js/gdm/loginDialog.js:1009
msgctxt "button"
msgid "Sign In"
msgstr "Увайсці"
#: ../js/gdm/loginDialog.js:1253
#: ../js/gdm/loginDialog.js:1358
msgid "Login Window"
msgstr "Акно ўваходу"
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
msgid "Suspend"
msgstr "Прыпыніць камп'ютар"
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "Перазапусціць сістэму"
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "Выключыць камп'ютар"
#: ../js/misc/util.js:92
msgid "Command not found"
msgstr "Загад не знойдзены"
@ -213,15 +226,15 @@ msgstr "ПРАГРАМЫ"
msgid "SETTINGS"
msgstr "НАСТРОЙКІ"
#: ../js/ui/appDisplay.js:685
#: ../js/ui/appDisplay.js:684
msgid "New Window"
msgstr "Новае акно"
#: ../js/ui/appDisplay.js:688
#: ../js/ui/appDisplay.js:687
msgid "Remove from Favorites"
msgstr "Выдаліць са спіса ўпадабанага"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:688
msgid "Add to Favorites"
msgstr "Дадаць у спіс упадабанага"
@ -235,12 +248,16 @@ msgstr "%s дададзены ў ваш спіс упадабанага."
msgid "%s has been removed from your favorites."
msgstr "%s выдалены з вашага спіса ўпадабанага."
#: ../js/ui/autorunManager.js:592
#: ../js/ui/autorunManager.js:280
msgid "Removable Devices"
msgstr "Зменныя прыстасаванні"
#: ../js/ui/autorunManager.js:590
#, c-format
msgid "Open with %s"
msgstr "Адкрыць у %s"
#: ../js/ui/autorunManager.js:618
#: ../js/ui/autorunManager.js:616
msgid "Eject"
msgstr "Выняць"
@ -395,15 +412,15 @@ msgstr "На наступным тыдні"
msgid "Unknown"
msgstr "Невядома"
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
msgid "Available"
msgstr "Даступны"
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
msgid "Away"
msgstr "Адсутны"
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
msgid "Busy"
msgstr "Заняты"
@ -415,7 +432,7 @@ msgstr "Па-за сеткай"
msgid "CONTACTS"
msgstr "КАНТАКТЫ"
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1197
msgid "Remove"
msgstr "Выдаліць"
@ -513,10 +530,6 @@ msgstr[2] "Вы аўтаматычна скончыце сеанс працы з
msgid "Logging out of the system."
msgstr "Заканчэнне сеанса працы з сістэмай."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "Выключыць камп'ютар"
#: ../js/ui/endSessionDialog.js:81
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
@ -535,11 +548,6 @@ msgstr[2] "Сістэма аўтаматычна выключыцца праз %
msgid "Powering off the system."
msgstr "Выключэнне сістэмы."
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
#: ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "Перазапусціць сістэму"
#: ../js/ui/endSessionDialog.js:98
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
@ -567,96 +575,96 @@ msgstr "Усталяваць"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Сцягнуць і ўсталяваць \"%s\" з extensions.gnome.org?"
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Клавіятура"
#: ../js/ui/lookingGlass.js:641
#: ../js/ui/lookingGlass.js:645
msgid "No extensions installed"
msgstr "Няма ўсталяваных пашырэнняў"
#: ../js/ui/lookingGlass.js:687
#: ../js/ui/lookingGlass.js:691
msgid "Enabled"
msgstr "Уключана"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "Выключана"
#: ../js/ui/lookingGlass.js:691
#: ../js/ui/lookingGlass.js:695
msgid "Error"
msgstr "Памылка"
#: ../js/ui/lookingGlass.js:693
#: ../js/ui/lookingGlass.js:697
msgid "Out of date"
msgstr "Састарэла"
#: ../js/ui/lookingGlass.js:695
#: ../js/ui/lookingGlass.js:699
msgid "Downloading"
msgstr "Сцягванне"
#: ../js/ui/lookingGlass.js:720
#: ../js/ui/lookingGlass.js:724
msgid "View Source"
msgstr "Паглядзець выточны код"
#: ../js/ui/lookingGlass.js:726
#: ../js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "Сеціўная старонка"
#: ../js/ui/messageTray.js:1188
#: ../js/ui/messageTray.js:1190
msgid "Open"
msgstr "Адкрыць"
#: ../js/ui/messageTray.js:2367
#: ../js/ui/messageTray.js:2372
msgid "System Information"
msgstr "Сістэмная інфармацыя"
#: ../js/ui/networkAgent.js:138
#: ../js/ui/networkAgent.js:145
msgid "Show password"
msgstr "Паказваць пароль"
#: ../js/ui/networkAgent.js:153
#: ../js/ui/networkAgent.js:160
msgid "Connect"
msgstr "Злучыць"
#. Cisco LEAP
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
#: ../js/ui/networkAgent.js:317
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
#: ../js/ui/networkAgent.js:324
msgid "Password: "
msgstr "Пароль: "
#. static WEP
#: ../js/ui/networkAgent.js:253
#: ../js/ui/networkAgent.js:260
msgid "Key: "
msgstr "Ключ: "
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
msgid "Username: "
msgstr "Імя карыстальніка: "
#: ../js/ui/networkAgent.js:291
#: ../js/ui/networkAgent.js:298
msgid "Identity: "
msgstr "Ідэнтычнасць: "
#: ../js/ui/networkAgent.js:293
#: ../js/ui/networkAgent.js:300
msgid "Private key password: "
msgstr "Пароль да прыватнага ключа: "
#: ../js/ui/networkAgent.js:305
#: ../js/ui/networkAgent.js:312
msgid "Service: "
msgstr "Паслуга: "
#: ../js/ui/networkAgent.js:334
#: ../js/ui/networkAgent.js:341
msgid "Authentication required by wireless network"
msgstr "Для бесправадной сеткі патрэбная ідэнтыфікацыя"
#: ../js/ui/networkAgent.js:335
#: ../js/ui/networkAgent.js:342
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -665,37 +673,37 @@ msgstr ""
"Для доступу да бесправадной сеткі \"%s\" патрэбны пароль або ключы "
"шыфравання."
#: ../js/ui/networkAgent.js:339
#: ../js/ui/networkAgent.js:346
msgid "Wired 802.1X authentication"
msgstr "Правадная ідэнтыфікацыя 802.1X"
#: ../js/ui/networkAgent.js:341
#: ../js/ui/networkAgent.js:348
msgid "Network name: "
msgstr "Назва сеткі: "
#: ../js/ui/networkAgent.js:346
#: ../js/ui/networkAgent.js:353
msgid "DSL authentication"
msgstr "DSL-ідэнтыфікацыя"
#: ../js/ui/networkAgent.js:353
#: ../js/ui/networkAgent.js:360
msgid "PIN code required"
msgstr "Патрэбны PIN-код"
#: ../js/ui/networkAgent.js:354
#: ../js/ui/networkAgent.js:361
msgid "PIN code is needed for the mobile broadband device"
msgstr ""
"Для прыстасавання для доступу да шырокапалоснай мабільнай сеткі патрэбны PIN-"
"код"
#: ../js/ui/networkAgent.js:355
#: ../js/ui/networkAgent.js:362
msgid "PIN: "
msgstr "PIN-код: "
#: ../js/ui/networkAgent.js:361
#: ../js/ui/networkAgent.js:368
msgid "Mobile broadband network password"
msgstr "Пароль да шырокапалоснай мабільнай сеткі"
#: ../js/ui/networkAgent.js:362
#: ../js/ui/networkAgent.js:369
#, c-format
msgid "A password is required to connect to '%s'."
msgstr "Каб злучыцца з \"%s\", патрэбны пароль."
@ -719,14 +727,14 @@ msgid "Dash"
msgstr "Прыборная дошка"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:538
#: ../js/ui/panel.js:539
#, c-format
msgid "Quit %s"
msgstr "%s: выйсці"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:575
msgid "Activities"
msgstr "Заняткі"
@ -759,7 +767,7 @@ msgstr "Патрэбная ідэнтыфікацыя"
msgid "Administrator"
msgstr "Адміністратар"
#: ../js/ui/polkitAuthenticationAgent.js:174
#: ../js/ui/polkitAuthenticationAgent.js:175
msgid "Authenticate"
msgstr "Ідэнтыфікаваць"
@ -767,11 +775,11 @@ msgstr "Ідэнтыфікаваць"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:262
#: ../js/ui/polkitAuthenticationAgent.js:256
msgid "Sorry, that didn't work. Please try again."
msgstr "На жаль, ідэнтыфікацыя не адбылася. Паўтарыце спробу."
#: ../js/ui/polkitAuthenticationAgent.js:274
#: ../js/ui/polkitAuthenticationAgent.js:268
msgid "Password:"
msgstr "Пароль:"
@ -780,7 +788,7 @@ msgstr "Пароль:"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:687
#: ../js/ui/popupMenu.js:727
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -807,9 +815,10 @@ msgstr "Маштабаванне"
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
#. 'screen-reader-enabled');
#. this.menu.addMenuItem(screenReader);
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
#. 'screen-keyboard-enabled');
#. this.menu.addMenuItem(screenKeyboard);
#: ../js/ui/status/accessibility.js:71
msgid "Screen Keyboard"
msgstr "Экранная клавіятура"
#: ../js/ui/status/accessibility.js:75
msgid "Visual Alerts"
msgstr "Візуальныя сігналы"
@ -929,7 +938,7 @@ msgstr "Заўсёды даваць дазвол"
msgid "Grant this time only"
msgstr "Даць дазвол аднойчы"
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
msgid "Reject"
msgstr "Адмовіць"
@ -969,11 +978,11 @@ msgstr "Увядзіце PIN, які паказвае прыстасаванне
msgid "OK"
msgstr "Добра"
#: ../js/ui/status/keyboard.js:71
#: ../js/ui/status/keyboard.js:73
msgid "Show Keyboard Layout"
msgstr "Паказаць раскладку"
#: ../js/ui/status/keyboard.js:75
#: ../js/ui/status/keyboard.js:78
msgid "Region and Language Settings"
msgstr "Настройкі мясцовасці і мовы"
@ -1018,13 +1027,13 @@ msgstr "недаступна"
msgid "connection failed"
msgstr "не ўдалося злучыцца"
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
msgid "More..."
msgstr "Яшчэ..."
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1455
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
msgid "Connected (private)"
msgstr "Злучана (прыватна)"
@ -1041,7 +1050,7 @@ msgid "Auto dial-up"
msgstr "Аўтаматычна: мадэм"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
#, c-format
msgid "Auto %s"
msgstr "Аўтаматычна: %s"
@ -1050,47 +1059,39 @@ msgstr "Аўтаматычна: %s"
msgid "Auto bluetooth"
msgstr "Аўтаматычна: Bluetooth"
#: ../js/ui/status/network.js:1469
#: ../js/ui/status/network.js:1472
msgid "Auto wireless"
msgstr "Аўтаматычна: wireless"
#: ../js/ui/status/network.js:1558
#: ../js/ui/status/network.js:1566
msgid "Enable networking"
msgstr "Уключыць сеткавыя функцыі"
#: ../js/ui/status/network.js:1570
#: ../js/ui/status/network.js:1578
msgid "Wired"
msgstr "Правадное злучэнне"
#: ../js/ui/status/network.js:1581
#: ../js/ui/status/network.js:1589
msgid "Wireless"
msgstr "Бесправадное злучэнне"
#: ../js/ui/status/network.js:1591
#: ../js/ui/status/network.js:1599
msgid "Mobile broadband"
msgstr "Мабільны broadband"
#: ../js/ui/status/network.js:1601
#: ../js/ui/status/network.js:1609
msgid "VPN Connections"
msgstr "VPN-злучэнні"
#: ../js/ui/status/network.js:1612
#: ../js/ui/status/network.js:1620
msgid "Network Settings"
msgstr "Сеткавыя настройкі"
#: ../js/ui/status/network.js:1747
msgid "Connectivity lost"
msgstr "Злучэнне страчана"
#: ../js/ui/status/network.js:1748
msgid "You are no longer connected to the network"
msgstr "Вы больш не злучаны з сеткай"
#: ../js/ui/status/network.js:1756
#: ../js/ui/status/network.js:1757
msgid "Connection failed"
msgstr "Не ўдалося злучыцца"
#: ../js/ui/status/network.js:1757
#: ../js/ui/status/network.js:1758
msgid "Activation of network connection failed"
msgstr "Не ўдалося ўключыць сеткавае злучэнне"
@ -1205,44 +1206,44 @@ msgstr "Мікрафон"
#. We got the TpContact
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:256
#: ../js/ui/telepathyClient.js:259
msgid "Invitation"
msgstr "Запрашэнне"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:322
#: ../js/ui/telepathyClient.js:325
msgid "Call"
msgstr "Званок"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:350
#: ../js/ui/telepathyClient.js:353
msgid "File Transfer"
msgstr "Перадача файла"
#: ../js/ui/telepathyClient.js:432
#: ../js/ui/telepathyClient.js:434
msgid "Subscription request"
msgstr "Запыт на падпіску"
#: ../js/ui/telepathyClient.js:460
#: ../js/ui/telepathyClient.js:470
msgid "Connection error"
msgstr "Памылка злучэння"
#: ../js/ui/telepathyClient.js:722
#: ../js/ui/telepathyClient.js:733
#, c-format
msgid "%s is online."
msgstr "%s у сетцы."
#: ../js/ui/telepathyClient.js:727
#: ../js/ui/telepathyClient.js:738
#, c-format
msgid "%s is offline."
msgstr "%s па-за сеткай."
#: ../js/ui/telepathyClient.js:730
#: ../js/ui/telepathyClient.js:741
#, c-format
msgid "%s is away."
msgstr "%s далёка ад камп'ютара."
#: ../js/ui/telepathyClient.js:733
#: ../js/ui/telepathyClient.js:744
#, c-format
msgid "%s is busy."
msgstr "%s мае пільныя справы."
@ -1250,35 +1251,35 @@ msgstr "%s мае пільныя справы."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:967
#: ../js/ui/telepathyClient.js:978
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Адпраўлена ў <b>%X</b>, <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/telepathyClient.js:973
#: ../js/ui/telepathyClient.js:984
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/telepathyClient.js:978
#: ../js/ui/telepathyClient.js:989
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:1020
#: ../js/ui/telepathyClient.js:1031
#, c-format
msgid "%s is now known as %s"
msgstr "%s змяніў імя на %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1129
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "Invitation to %s"
msgstr "Запрашэнне ў %s"
@ -1286,34 +1287,34 @@ msgstr "Запрашэнне ў %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/telepathyClient.js:1137
#: ../js/ui/telepathyClient.js:1148
#, c-format
msgid "%s is inviting you to join %s"
msgstr "Удзельнік %s запрашае вас далучыцца да %s"
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
#: ../js/ui/telepathyClient.js:1332
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
#: ../js/ui/telepathyClient.js:1343
msgid "Decline"
msgstr "Адмовіцца"
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
#: ../js/ui/telepathyClient.js:1344
msgid "Accept"
msgstr "Прыняць"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1173
#: ../js/ui/telepathyClient.js:1184
#, c-format
msgid "Video call from %s"
msgstr "Відэазванок ад %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1176
#: ../js/ui/telepathyClient.js:1187
#, c-format
msgid "Call from %s"
msgstr "Званок ад %s"
#: ../js/ui/telepathyClient.js:1186
#: ../js/ui/telepathyClient.js:1197
msgid "Answer"
msgstr "Адказаць"
@ -1322,108 +1323,108 @@ msgstr "Адказаць"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1222
#: ../js/ui/telepathyClient.js:1233
#, c-format
msgid "%s is sending you %s"
msgstr "%s пасылае вам %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1308
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
#: ../js/ui/telepathyClient.js:1395
#: ../js/ui/telepathyClient.js:1406
msgid "Network error"
msgstr "Сеткавая памылка"
#: ../js/ui/telepathyClient.js:1397
#: ../js/ui/telepathyClient.js:1408
msgid "Authentication failed"
msgstr "Няўдалая ідэнтыфікацыя"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1410
msgid "Encryption error"
msgstr "Памылка шыфравання"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1412
msgid "Certificate not provided"
msgstr "Сертыфікат не пададзены"
#: ../js/ui/telepathyClient.js:1403
#: ../js/ui/telepathyClient.js:1414
msgid "Certificate untrusted"
msgstr "Сертыфікат не заслугоўвае даверу"
#: ../js/ui/telepathyClient.js:1405
#: ../js/ui/telepathyClient.js:1416
msgid "Certificate expired"
msgstr "Сертыфікат састарэў"
#: ../js/ui/telepathyClient.js:1407
#: ../js/ui/telepathyClient.js:1418
msgid "Certificate not activated"
msgstr "Сертыфікат не актывізаваны"
#: ../js/ui/telepathyClient.js:1409
#: ../js/ui/telepathyClient.js:1420
msgid "Certificate hostname mismatch"
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
#: ../js/ui/telepathyClient.js:1411
#: ../js/ui/telepathyClient.js:1422
msgid "Certificate fingerprint mismatch"
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
#: ../js/ui/telepathyClient.js:1413
#: ../js/ui/telepathyClient.js:1424
msgid "Certificate self-signed"
msgstr "Сертыфікат уласнаручна падпісаны"
#: ../js/ui/telepathyClient.js:1415
#: ../js/ui/telepathyClient.js:1426
msgid "Status is set to offline"
msgstr "Уключаны рэжым па-за сеткай"
#: ../js/ui/telepathyClient.js:1417
#: ../js/ui/telepathyClient.js:1428
msgid "Encryption is not available"
msgstr "Шыфраванне недаступнае"
#: ../js/ui/telepathyClient.js:1419
#: ../js/ui/telepathyClient.js:1430
msgid "Certificate is invalid"
msgstr "Хібны сертыфікат"
#: ../js/ui/telepathyClient.js:1421
#: ../js/ui/telepathyClient.js:1432
msgid "Connection has been refused"
msgstr "Адмоўлена ў злучэнні"
#: ../js/ui/telepathyClient.js:1423
#: ../js/ui/telepathyClient.js:1434
msgid "Connection can't be established"
msgstr "Не ўдалося ўсталяваць злучэнне"
#: ../js/ui/telepathyClient.js:1425
#: ../js/ui/telepathyClient.js:1436
msgid "Connection has been lost"
msgstr "Злучэнне страчана"
#: ../js/ui/telepathyClient.js:1427
#: ../js/ui/telepathyClient.js:1438
msgid "This resource is already connected to the server"
msgstr "Гэты рэсурс ужо злучаны з серверам"
#: ../js/ui/telepathyClient.js:1429
#: ../js/ui/telepathyClient.js:1440
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
#: ../js/ui/telepathyClient.js:1431
#: ../js/ui/telepathyClient.js:1442
msgid "The account already exists on the server"
msgstr "Такі конт ужо існуе на серверы"
#: ../js/ui/telepathyClient.js:1433
#: ../js/ui/telepathyClient.js:1444
msgid "Server is currently too busy to handle the connection"
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
#: ../js/ui/telepathyClient.js:1435
#: ../js/ui/telepathyClient.js:1446
msgid "Certificate has been revoked"
msgstr "Сертыфікат быў адкліканы"
#: ../js/ui/telepathyClient.js:1437
#: ../js/ui/telepathyClient.js:1448
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
#: ../js/ui/telepathyClient.js:1439
#: ../js/ui/telepathyClient.js:1450
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1433,67 +1434,76 @@ msgstr ""
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1448
#: ../js/ui/telepathyClient.js:1459
#, c-format
msgid "Connection to %s failed"
msgstr "не ўдалося злучыцца з %s"
#: ../js/ui/telepathyClient.js:1455
msgid "Unknown reason"
msgstr "Невядомая прычына"
#: ../js/ui/telepathyClient.js:1462
#: ../js/ui/telepathyClient.js:1468
msgid "Reconnect"
msgstr "Перазлучыцца"
#: ../js/ui/telepathyClient.js:1463
#: ../js/ui/telepathyClient.js:1469
msgid "Edit account"
msgstr "Рэдагаваць конт"
#: ../js/ui/userMenu.js:153
#: ../js/ui/telepathyClient.js:1515
msgid "Unknown reason"
msgstr "Невядомая прычына"
#: ../js/ui/userMenu.js:145
msgid "Hidden"
msgstr "Схаваны"
#: ../js/ui/userMenu.js:159
#: ../js/ui/userMenu.js:151
msgid "Idle"
msgstr "Бяздзейны"
#: ../js/ui/userMenu.js:162
#: ../js/ui/userMenu.js:154
msgid "Unavailable"
msgstr "Недаступны"
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
msgid "Power Off..."
msgstr "Выключыць камп'ютар..."
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
msgid "Suspend"
msgstr "Прыпыніць камп'ютар"
#: ../js/ui/userMenu.js:551
#: ../js/ui/userMenu.js:548
msgid "Notifications"
msgstr "Апавяшчэнні"
#: ../js/ui/userMenu.js:559
#: ../js/ui/userMenu.js:556
msgid "Online Accounts"
msgstr "Сеціўныя конты"
#: ../js/ui/userMenu.js:563
#: ../js/ui/userMenu.js:560
msgid "System Settings"
msgstr "Сістэмныя настройкі"
#: ../js/ui/userMenu.js:570
#: ../js/ui/userMenu.js:567
msgid "Lock Screen"
msgstr "Замкнуць экран"
#: ../js/ui/userMenu.js:575
#: ../js/ui/userMenu.js:572
msgid "Switch User"
msgstr "Перамяніць карыстальніка"
#: ../js/ui/userMenu.js:580
#: ../js/ui/userMenu.js:577
msgid "Log Out..."
msgstr "Скончыць сеанс..."
#: ../js/ui/userMenu.js:605
msgid "Your chat status will be set to busy"
msgstr "Вам прызначаны стан занятасці для чату"
#: ../js/ui/userMenu.js:606
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
msgstr ""
"Апавяшчэнні выключаныя, у тым ліку аб новых паведамленнях у чаце. Ваш "
"сеціўны стан абноўлены інфармацыяй аб тым, што вы можаце не ўбачыць чужых "
"паведамленняў у час."
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@ -1584,9 +1594,3 @@ msgstr "Файлавая сістэма"
#, c-format
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "calendar:week_start:0"
#~ msgstr "calendar:week_start:1"
#~ msgid "Do Not Disturb"
#~ msgstr "Не турбаваць"

908
po/bg.po

File diff suppressed because it is too large Load Diff

1059
po/ca.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1119
po/cs.po

File diff suppressed because it is too large Load Diff

662
po/da.po

File diff suppressed because it is too large Load Diff

523
po/de.po

File diff suppressed because it is too large Load Diff

1271
po/eo.po

File diff suppressed because it is too large Load Diff

454
po/es.po

File diff suppressed because it is too large Load Diff

1156
po/eu.po

File diff suppressed because it is too large Load Diff

393
po/fa.po
View File

@ -1,22 +1,22 @@
# Persian translation for gnome-shell.
# Copyright (C) 2010-2011 Iranian Free Software Users Group (IFSUG.org)translation team.
# This file is distributed under the same license as the gnome-shell package.
# Arash Mousavi <mousavi.arash@gmail.com>, 2010,2011
# Mahyar Moghimi <mahyar.moqimi@gmail.com>, 2010.
# Arash Mousavi <mousavi.arash@gmail.com>, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-09-06 15:20+0000\n"
"PO-Revision-Date: 2011-09-07 01:33+0330\n"
"POT-Creation-Date: 2011-09-19 03:42+0000\n"
"PO-Revision-Date: 2011-09-19 14:32+0330\n"
"Last-Translator: Arash Mousavi <mousavi.arash@gmail.com>\n"
"Language-Team: Persian <translate@ifsug.org>\n"
"Language-Team: Persian <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Poedit-Language: Persian\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-SourceCharset: utf-8\n"
@ -62,7 +62,6 @@ msgid "If true, display date in the clock, in addition to time."
msgstr "اگر روی «درست» تنظیم شود، تاریخ را در کنار ساعت نشان می‌دهد."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
#| msgid "If true, display seconds in time."
msgid "If true, display onscreen keyboard."
msgstr "در صورت تنظیم بر روی «درست»، صفحه‌کلید مجازی نمایش داده می‌شود."
@ -139,44 +138,76 @@ msgstr "استفاده از کدام صفحه‌کلید"
msgid "disabled OpenSearch providers"
msgstr "غیرفعال کردنِ تامین‌کننده‌گان OpenSearch"
#: ../js/gdm/loginDialog.js:601
#| msgid "Searching..."
#: ../js/gdm/loginDialog.js:614
msgid "Session..."
msgstr "نشست..."
#: ../js/gdm/loginDialog.js:758
#: ../js/gdm/loginDialog.js:931
#: ../js/gdm/loginDialog.js:776
#| msgid "Sign In"
msgctxt "title"
msgid "Sign In"
msgstr "ورود"
#: ../js/gdm/loginDialog.js:816
#. translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:821
msgid "(or swipe finger)"
msgstr "(یا انگشتتان را بکشید)"
#: ../js/gdm/loginDialog.js:839
msgid "Not listed?"
msgstr "فهرست نشده؟"
#: ../js/gdm/loginDialog.js:926
#: ../js/ui/endSessionDialog.js:410
#: ../js/gdm/loginDialog.js:980
#: ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477
#: ../js/ui/networkAgent.js:158
#: ../js/ui/polkitAuthenticationAgent.js:170
#: ../js/ui/status/bluetooth.js:480
msgid "Cancel"
msgstr "لغو"
#: ../js/gdm/loginDialog.js:1251
#| msgid "New Window"
#: ../js/gdm/loginDialog.js:985
#| msgid "Sign In"
msgctxt "button"
msgid "Sign In"
msgstr "ورود"
#: ../js/gdm/loginDialog.js:1324
msgid "Login Window"
msgstr "پنجره‌ی ورود به سیستم"
#: ../js/misc/util.js:68
#: ../js/gdm/powerMenu.js:116
#: ../js/ui/userMenu.js:520
#: ../js/ui/userMenu.js:522
#: ../js/ui/userMenu.js:591
msgid "Suspend"
msgstr "تعلیق"
#: ../js/gdm/powerMenu.js:121
#: ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:97
#: ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "راه‌اندازی مجدد"
#: ../js/gdm/powerMenu.js:126
#: ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "خاموش کردن"
#: ../js/misc/util.js:92
msgid "Command not found"
msgstr "فرمان پیدا نشد"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:95
#: ../js/misc/util.js:119
msgid "Could not parse command:"
msgstr "عدم توانایی در تجزیه فرمان:"
#: ../js/misc/util.js:103
#: ../js/misc/util.js:127
#, c-format
msgid "Execution of '%s' failed:"
msgstr "اجرای «%s» شکست خورد:"
@ -194,15 +225,15 @@ msgstr "برنامه‌ها"
msgid "SETTINGS"
msgstr "تنظیمات"
#: ../js/ui/appDisplay.js:685
#: ../js/ui/appDisplay.js:684
msgid "New Window"
msgstr "پنجره‌ی جدید"
#: ../js/ui/appDisplay.js:688
#: ../js/ui/appDisplay.js:687
msgid "Remove from Favorites"
msgstr "حذف از مورد پسندها"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:688
msgid "Add to Favorites"
msgstr "اضافه کردن به مورد پسندها"
@ -402,7 +433,7 @@ msgid "CONTACTS"
msgstr "CONTACTS"
#: ../js/ui/dash.js:172
#: ../js/ui/messageTray.js:1197
#: ../js/ui/messageTray.js:1196
msgid "Remove"
msgstr "حذف"
@ -471,7 +502,7 @@ msgid "Log Out %s"
msgstr "خروج از %s"
#: ../js/ui/endSessionDialog.js:61
#: ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:75
msgid "Log Out"
msgstr "خروج از سیستم"
@ -479,112 +510,120 @@ msgstr "خروج از سیستم"
msgid "Click Log Out to quit these applications and log out of the system."
msgstr "بر روی خروج از سیستم کلیک کنید تا از این برنامه‌ها خارج و از سیستم خارج شوید."
#: ../js/ui/endSessionDialog.js:63
#, c-format
msgid "%s will be logged out automatically in %d seconds."
msgstr "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
#: ../js/ui/endSessionDialog.js:64
#, c-format
msgid "You will be logged out automatically in %d seconds."
msgstr "شما در مدت %Id ثانیه به طور خودکار از سیستم خارج می‌شوید."
#| msgid "%s will be logged out automatically in %d seconds."
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
msgstr[1] "%s به طور خودکار در مدت %Id ثانیه از سیستم خارج خواهد شد."
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:69
#, c-format
#| msgid "You will be logged out automatically in %d seconds."
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج می‌شوید."
msgstr[1] "شما پس از %Id ثانیه به طور خودکار از سیستم خارج می‌شوید."
#: ../js/ui/endSessionDialog.js:73
msgid "Logging out of the system."
msgstr "درحال خروج از سیستم."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:79
msgid "Power Off"
msgstr "خاموش کردن"
#: ../js/ui/endSessionDialog.js:73
#: ../js/ui/endSessionDialog.js:81
msgid "Click Power Off to quit these applications and power off the system."
msgstr "بر روی خاموش کردن کلیک کنید تا از این برنامه‌ها خارج و سیستم خاموش شود."
#: ../js/ui/endSessionDialog.js:74
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d seconds."
msgstr "سیستم در مدت %Id ثانیه به طور خودکار خاموش می‌شود."
#| msgid "The system will power off automatically in %d seconds."
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار خاموش می‌شود."
msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار خاموش می‌شود."
#: ../js/ui/endSessionDialog.js:75
#: ../js/ui/endSessionDialog.js:87
msgid "Powering off the system."
msgstr "درحال خاموش کردن سیستم."
#: ../js/ui/endSessionDialog.js:77
#: ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:90
msgid "Restart"
msgstr "راه‌اندازی مجدد"
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:98
msgid "Click Restart to quit these applications and restart the system."
msgstr "بر روی راه‌اندازی مجدد کلیک کنید تا از این برنامه‌ها خارج و سیستم مجددا راه‌اندازی گردد."
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:100
#, c-format
msgid "The system will restart automatically in %d seconds."
msgstr "سیستم در مدت %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود."
#| msgid "The system will restart automatically in %d seconds."
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود."
msgstr[1] "سیستم پس از %Id ثانیه به طور خودکار مجددا راه‌اندازی می‌شود."
#: ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:104
msgid "Restarting the system."
msgstr "درحال راه‌اندازی مجدد سیستم."
#: ../js/ui/keyboard.js:508
#: ../js/ui/extensionSystem.js:481
msgid "Install"
msgstr "نصب"
#: ../js/ui/extensionSystem.js:485
#, c-format
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "بارگیری و نصب «%s» از extensions.gnome.org؟"
#: ../js/ui/keyboard.js:513
#: ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "صفحه‌کلید"
#: ../js/ui/lookingGlass.js:640
#: ../js/ui/lookingGlass.js:645
msgid "No extensions installed"
msgstr "هیچ افزونه‌ای نصب نشده است"
#: ../js/ui/lookingGlass.js:686
#: ../js/ui/lookingGlass.js:691
msgid "Enabled"
msgstr "به کار انداختن"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:688
#: ../js/ui/lookingGlass.js:693
#: ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "از کار انداختن"
#: ../js/ui/lookingGlass.js:690
#: ../js/ui/lookingGlass.js:695
msgid "Error"
msgstr "خطا"
#: ../js/ui/lookingGlass.js:692
#: ../js/ui/lookingGlass.js:697
msgid "Out of date"
msgstr "قدیمی"
#: ../js/ui/lookingGlass.js:694
#: ../js/ui/lookingGlass.js:699
msgid "Downloading"
msgstr "در حال بارگیری"
#: ../js/ui/lookingGlass.js:719
#: ../js/ui/lookingGlass.js:724
msgid "View Source"
msgstr "نمایش منبع"
#: ../js/ui/lookingGlass.js:725
#: ../js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "صفحه‌ی وب"
#: ../js/ui/messageTray.js:1190
#: ../js/ui/messageTray.js:1189
msgid "Open"
msgstr "بازکردن"
#: ../js/ui/messageTray.js:2352
#: ../js/ui/messageTray.js:2368
msgid "System Information"
msgstr "اطلاعات سیستم"
#: ../js/ui/networkAgent.js:138
#| msgid "Password:"
msgid "Show password"
msgstr "نمایش گذرواژه"
#: ../js/ui/networkAgent.js:153
#| msgid "Connection"
msgid "Connect"
msgstr "اتصال"
@ -594,7 +633,6 @@ msgstr "اتصال"
#: ../js/ui/networkAgent.js:287
#: ../js/ui/networkAgent.js:307
#: ../js/ui/networkAgent.js:317
#| msgid "Password:"
msgid "Password: "
msgstr "گذرواژه: "
@ -624,7 +662,6 @@ msgid "Service: "
msgstr "سرویس: "
#: ../js/ui/networkAgent.js:334
#| msgid "Authentication Required"
msgid "Authentication required by wireless network"
msgstr "تایید هویت برای شبکه بی‌سیم لازم است"
@ -635,17 +672,15 @@ msgstr "گذرواژه یا کلیدهای رمزنگاری برای دسترس
#: ../js/ui/networkAgent.js:339
msgid "Wired 802.1X authentication"
msgstr "تصدیق هویت 802.1X سیمی"
msgstr "تایید هویت 802.1X سیمی"
#: ../js/ui/networkAgent.js:341
#| msgid "Network Manager"
msgid "Network name: "
msgstr "نام شبکه: "
#: ../js/ui/networkAgent.js:346
#| msgid "authentication required"
msgid "DSL authentication"
msgstr "تصدیق هویت DSL"
msgstr "تایید هویت DSL"
#: ../js/ui/networkAgent.js:353
msgid "PIN code required"
@ -660,13 +695,11 @@ msgid "PIN: "
msgstr "پین: "
#: ../js/ui/networkAgent.js:361
#| msgid "Mobile broadband"
msgid "Mobile broadband network password"
msgstr "گذرواژه شبکه پهن‌باند تلفن همراه"
#: ../js/ui/networkAgent.js:362
#, c-format
#| msgid "You're now connected to '%s'"
msgid "A password is required to connect to '%s'."
msgstr "برای اتصال به «%s» گذرواژه لازم است."
@ -689,14 +722,14 @@ msgid "Dash"
msgstr "دَش"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:538
#: ../js/ui/panel.js:539
#, c-format
msgid "Quit %s"
msgstr "خروج از %s"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:575
msgid "Activities"
msgstr "فعالیت‌ها"
@ -731,7 +764,7 @@ msgstr "مدیر"
#: ../js/ui/polkitAuthenticationAgent.js:174
msgid "Authenticate"
msgstr "هویت تایید لازم است"
msgstr "تایید هویت"
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
@ -889,7 +922,7 @@ msgstr "تنظیمات صدا"
#: ../js/ui/status/bluetooth.js:382
#, c-format
msgid "Authorization request from %s"
msgstr "درخواست تصدیق هویت از %s"
msgstr "درخواست تایید هویت از %s"
#: ../js/ui/status/bluetooth.js:388
#, c-format
@ -905,7 +938,7 @@ msgid "Grant this time only"
msgstr "موافقت تنها در همین زمان"
#: ../js/ui/status/bluetooth.js:392
#: ../js/ui/telepathyClient.js:1185
#: ../js/ui/telepathyClient.js:1196
msgid "Reject"
msgstr "رد کردن"
@ -946,11 +979,11 @@ msgstr "لطفا PIN ذکر شده در دستگاه را وارد کنید."
msgid "OK"
msgstr "تایید"
#: ../js/ui/status/keyboard.js:71
#: ../js/ui/status/keyboard.js:72
msgid "Show Keyboard Layout"
msgstr "نمایش چیدمان صفحه‌کلید"
#: ../js/ui/status/keyboard.js:75
#: ../js/ui/status/keyboard.js:77
msgid "Region and Language Settings"
msgstr "تنظیمات ناحیه و زبان"
@ -972,7 +1005,7 @@ msgstr "مدیریت نشده"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:495
msgid "authentication required"
msgstr "تصدیق هویت لازم است"
msgstr "تایید هویت لازم است"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
@ -1058,31 +1091,19 @@ msgstr "اتصال‌های وی‌پی‌ان"
msgid "Network Settings"
msgstr "تنظیمات شبکه"
#: ../js/ui/status/network.js:1747
#| msgid "Connection"
msgid "Connectivity lost"
msgstr "اتصال از دست رفت"
#: ../js/ui/status/network.js:1748
#| msgid "You're now connected to wired network '%s'"
msgid "You're no longer connected to the network"
msgstr "شما دیگر به شبکه متصل نیستید"
#: ../js/ui/status/network.js:1756
#| msgid "connection failed"
#: ../js/ui/status/network.js:1749
msgid "Connection failed"
msgstr "اتصال شکست خورد"
#: ../js/ui/status/network.js:1757
#| msgid "connection failed"
#: ../js/ui/status/network.js:1750
msgid "Activation of network connection failed"
msgstr "فعال‌سازی اتصال شبکه شکست خورد"
#: ../js/ui/status/network.js:1992
#: ../js/ui/status/network.js:2000
msgid "Networking is disabled"
msgstr "غیرفعال‌سازی شبکه"
#: ../js/ui/status/network.js:2117
#: ../js/ui/status/network.js:2125
msgid "Network Manager"
msgstr "مدیریت شبکه"
@ -1101,6 +1122,7 @@ msgstr "درحال برآورد..."
msgid "%d hour remaining"
msgid_plural "%d hours remaining"
msgstr[0] "%Id ساعت مانده"
msgstr[1] "%Id ساعت مانده"
#. TRANSLATORS: this is a time string, as in "%d hours %d minutes remaining"
#: ../js/ui/status/power.js:113
@ -1112,17 +1134,27 @@ msgstr "%Id %s %Id %s باقی‌مانده"
msgid "hour"
msgid_plural "hours"
msgstr[0] "ساعت"
msgstr[1] "ساعت"
#: ../js/ui/status/power.js:115
msgid "minute"
msgid_plural "minutes"
msgstr[0] "%Id دقیقه‌"
msgstr[1] "%Id دقیقه‌"
#: ../js/ui/status/power.js:118
#, c-format
msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "%Id دقیقه‌ی مانده"
msgstr[1] "%Id دقیقه‌ی مانده"
#: ../js/ui/status/power.js:121
#: ../js/ui/status/power.js:194
#, c-format
msgctxt "percent of battery remaining"
msgid "%d%%"
msgstr "٪%Id"
#: ../js/ui/status/power.js:201
msgid "AC adapter"
@ -1175,46 +1207,44 @@ msgstr "میکروفون"
#. We got the TpContact
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:256
#: ../js/ui/telepathyClient.js:259
msgid "Invitation"
msgstr "دعوتنامه"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:322
#: ../js/ui/telepathyClient.js:325
msgid "Call"
msgstr "تماس"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:350
#: ../js/ui/telepathyClient.js:353
msgid "File Transfer"
msgstr "انتقال پرونده"
#: ../js/ui/telepathyClient.js:432
#| msgid "Authorization request from %s"
#: ../js/ui/telepathyClient.js:434
msgid "Subscription request"
msgstr "درخواست اشتراک"
#: ../js/ui/telepathyClient.js:460
#| msgid "Connection"
#: ../js/ui/telepathyClient.js:470
msgid "Connection error"
msgstr "خطا اتصال"
#: ../js/ui/telepathyClient.js:722
#: ../js/ui/telepathyClient.js:733
#, c-format
msgid "%s is online."
msgstr "%s بر خط است."
#: ../js/ui/telepathyClient.js:727
#: ../js/ui/telepathyClient.js:738
#, c-format
msgid "%s is offline."
msgstr "%s برون خط است."
#: ../js/ui/telepathyClient.js:730
#: ../js/ui/telepathyClient.js:741
#, c-format
msgid "%s is away."
msgstr "%s غایب است."
#: ../js/ui/telepathyClient.js:733
#: ../js/ui/telepathyClient.js:744
#, c-format
msgid "%s is busy."
msgstr "%s مشغول است."
@ -1222,35 +1252,35 @@ msgstr "%s مشغول است."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:967
#: ../js/ui/telepathyClient.js:978
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "ارسال در <b>%OH:%OM</b> در <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/telepathyClient.js:973
#: ../js/ui/telepathyClient.js:984
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "ارسال در <b>%A</b>, <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/telepathyClient.js:978
#: ../js/ui/telepathyClient.js:989
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "ارسال در <b>%A</b>, <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:1020
#: ../js/ui/telepathyClient.js:1031
#, c-format
msgid "%s is now known as %s"
msgstr "%s با عنوان %s شناخته می‌شود"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1129
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "Invitation to %s"
msgstr "دعوتنامه به %s"
@ -1258,36 +1288,36 @@ msgstr "دعوتنامه به %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/telepathyClient.js:1137
#: ../js/ui/telepathyClient.js:1148
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s از شما دعوت می‌کند که به %s بپیوندید"
#: ../js/ui/telepathyClient.js:1139
#: ../js/ui/telepathyClient.js:1228
#: ../js/ui/telepathyClient.js:1332
#: ../js/ui/telepathyClient.js:1150
#: ../js/ui/telepathyClient.js:1239
#: ../js/ui/telepathyClient.js:1343
msgid "Decline"
msgstr "رد کردن"
#: ../js/ui/telepathyClient.js:1140
#: ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1151
#: ../js/ui/telepathyClient.js:1240
#: ../js/ui/telepathyClient.js:1344
msgid "Accept"
msgstr "پذیرفتن"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1173
#: ../js/ui/telepathyClient.js:1184
#, c-format
msgid "Video call from %s"
msgstr "تماس ویدئویی از طریق %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1176
#: ../js/ui/telepathyClient.js:1187
#, c-format
msgid "Call from %s"
msgstr "تماس از طرف %s"
#: ../js/ui/telepathyClient.js:1186
#: ../js/ui/telepathyClient.js:1197
msgid "Answer"
msgstr "پاسخگویی"
@ -1296,138 +1326,128 @@ msgstr "پاسخگویی"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1222
#: ../js/ui/telepathyClient.js:1233
#, c-format
msgid "%s is sending you %s"
msgstr "%s در حال ارسال %s به شما است"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1308
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s اجازه دسترسی برای دیدن زمان‌هایی که شما برخط هستید را دارد"
#: ../js/ui/telepathyClient.js:1395
#| msgid "Network Manager"
#: ../js/ui/telepathyClient.js:1406
msgid "Network error"
msgstr "خطا شبکه"
#: ../js/ui/telepathyClient.js:1397
#| msgid "Authentication Required"
#: ../js/ui/telepathyClient.js:1408
msgid "Authentication failed"
msgstr "تایید هویت شکست خورد"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1410
msgid "Encryption error"
msgstr "خطا رمزنگاری"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1412
msgid "Certificate not provided"
msgstr "گواهینامه ارائه نشده"
#: ../js/ui/telepathyClient.js:1403
#: ../js/ui/telepathyClient.js:1414
msgid "Certificate untrusted"
msgstr "گواهینامه نامعتبر است"
#: ../js/ui/telepathyClient.js:1405
#: ../js/ui/telepathyClient.js:1416
msgid "Certificate expired"
msgstr "گواهینامه منقضی شده"
#: ../js/ui/telepathyClient.js:1407
#: ../js/ui/telepathyClient.js:1418
msgid "Certificate not activated"
msgstr "گواهینامه فعال نشده"
#: ../js/ui/telepathyClient.js:1409
#: ../js/ui/telepathyClient.js:1420
msgid "Certificate hostname mismatch"
msgstr "نام کارگزار گواهینامه نامنطبق است"
#: ../js/ui/telepathyClient.js:1411
#: ../js/ui/telepathyClient.js:1422
msgid "Certificate fingerprint mismatch"
msgstr "اثرانگشت گواهینامه نامنطبق است"
#: ../js/ui/telepathyClient.js:1413
#: ../js/ui/telepathyClient.js:1424
msgid "Certificate self-signed"
msgstr "گواهینامه خود-امضا شده"
#: ../js/ui/telepathyClient.js:1415
#| msgid "%s is offline."
#: ../js/ui/telepathyClient.js:1426
msgid "Status is set to offline"
msgstr "وضعیت بر روی برون خط تنظیم شده"
#: ../js/ui/telepathyClient.js:1417
#: ../js/ui/telepathyClient.js:1428
msgid "Encryption is not available"
msgstr "رمزنگاری موجود نیست"
#: ../js/ui/telepathyClient.js:1419
#: ../js/ui/telepathyClient.js:1430
msgid "Certificate is invalid"
msgstr "گواهینامه نامعتبر است"
#: ../js/ui/telepathyClient.js:1421
#| msgid "Connection established"
#: ../js/ui/telepathyClient.js:1432
msgid "Connection has been refused"
msgstr "اتصال رد شده است"
#: ../js/ui/telepathyClient.js:1423
#| msgid "Connection established"
#: ../js/ui/telepathyClient.js:1434
msgid "Connection can't be established"
msgstr "اتصال نمی‌تواند برقرار شود"
#: ../js/ui/telepathyClient.js:1425
#| msgid "Connection established"
#: ../js/ui/telepathyClient.js:1436
msgid "Connection has been lost"
msgstr "اتصال از دست رفته است"
#: ../js/ui/telepathyClient.js:1427
#: ../js/ui/telepathyClient.js:1438
msgid "This resource is already connected to the server"
msgstr "این منبع از قبل به کارگزار متصل شده است"
#: ../js/ui/telepathyClient.js:1429
#: ../js/ui/telepathyClient.js:1440
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "اتصال توسط یک اتصال جدید که از منبع مشابه استفاده می‌کند، جایگزین شده است"
#: ../js/ui/telepathyClient.js:1431
#: ../js/ui/telepathyClient.js:1442
msgid "The account already exists on the server"
msgstr "حساب از قبل بر روی کارگزار وجود دارد"
#: ../js/ui/telepathyClient.js:1433
#: ../js/ui/telepathyClient.js:1444
msgid "Server is currently too busy to handle the connection"
msgstr "کارگزار در حال حاضر برای دست گرفتن اتصال بسیار مشغول است"
#: ../js/ui/telepathyClient.js:1435
#: ../js/ui/telepathyClient.js:1446
msgid "Certificate has been revoked"
msgstr "گواهینامه لغو شده است"
#: ../js/ui/telepathyClient.js:1437
#: ../js/ui/telepathyClient.js:1448
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "گواهینامه از الگوریتم رمزی نامطمئنی استفاده می‌کند یا از نظر cryptography ضعیف است"
#: ../js/ui/telepathyClient.js:1439
#: ../js/ui/telepathyClient.js:1450
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
msgstr "اندازه گواهینامه کارگزار، یا عمق حلقه‌ی گواهینامه کارگزار، از محدودیت اعمال شده توسط کتابخانه cryptography تجاوز کرد"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1448
#: ../js/ui/telepathyClient.js:1459
#, c-format
#| msgid "connection failed"
msgid "Connection to %s failed"
msgstr "اتصال به %s شکست خورد"
#: ../js/ui/telepathyClient.js:1455
#| msgid "Unknown"
msgid "Unknown reason"
msgstr "دلیل ناشناخته"
#: ../js/ui/telepathyClient.js:1462
#| msgid "Reject"
#: ../js/ui/telepathyClient.js:1468
msgid "Reconnect"
msgstr "اتصال مجدد"
#: ../js/ui/telepathyClient.js:1463
#| msgid "My Account"
#: ../js/ui/telepathyClient.js:1469
msgid "Edit account"
msgstr "ویرایش حساب"
#: ../js/ui/telepathyClient.js:1515
msgid "Unknown reason"
msgstr "دلیل ناشناخته"
#: ../js/ui/userMenu.js:153
msgid "Hidden"
msgstr "نامرئی"
@ -1437,48 +1457,47 @@ msgid "Idle"
msgstr "بی‌کار"
#: ../js/ui/userMenu.js:162
#| msgid "unavailable"
msgid "Unavailable"
msgstr "خارج از دسترس"
#: ../js/ui/userMenu.js:516
#: ../js/ui/userMenu.js:520
#: ../js/ui/userMenu.js:589
#: ../js/ui/userMenu.js:518
#: ../js/ui/userMenu.js:522
#: ../js/ui/userMenu.js:592
msgid "Power Off..."
msgstr "خاموش کردن..."
#: ../js/ui/userMenu.js:518
#: ../js/ui/userMenu.js:520
#: ../js/ui/userMenu.js:588
msgid "Suspend"
msgstr "تعلیق"
#: ../js/ui/userMenu.js:551
#| msgid "Applications"
#: ../js/ui/userMenu.js:554
msgid "Notifications"
msgstr "اعلان‌ها"
#: ../js/ui/userMenu.js:559
#| msgid "My Account"
#: ../js/ui/userMenu.js:562
msgid "Online Accounts"
msgstr "حساب‌های برخط"
#: ../js/ui/userMenu.js:563
#: ../js/ui/userMenu.js:566
msgid "System Settings"
msgstr "تنظیمات سیستم"
#: ../js/ui/userMenu.js:570
#: ../js/ui/userMenu.js:573
msgid "Lock Screen"
msgstr "قفل کردن صفحه"
#: ../js/ui/userMenu.js:575
#: ../js/ui/userMenu.js:578
msgid "Switch User"
msgstr "تعویض کاربر"
#: ../js/ui/userMenu.js:580
#: ../js/ui/userMenu.js:583
msgid "Log Out..."
msgstr "خروج از سیستم..."
#: ../js/ui/userMenu.js:611
msgid "Your chat status will be set to busy"
msgstr "وضعیت گپ شما «مشغول» تنظیم می‌شود"
#: ../js/ui/userMenu.js:612
msgid "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."
msgstr "هم‌اکنون اعلان‌ها، از جمله پیام‌های گپ، غیرفعال هستند. وضعیتِ برخطِ شما به گونه‌ای تنظیم شده است که به دیگران نشان دهد ممکن است شما پیام‌هایشان را نبینید."
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@ -1509,6 +1528,7 @@ msgstr "«%s» آماده است"
msgid "%u Output"
msgid_plural "%u Outputs"
msgstr[0] "%Iu خروجی"
msgstr[1] "%Iu خروجی"
#. translators:
#. * The number of sound inputs on a particular device
@ -1517,6 +1537,7 @@ msgstr[0] "%Iu خروجی"
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%Iu ورودی"
msgstr[1] "%Iu ورودی"
#: ../src/gvc/gvc-mixer-control.c:1408
msgid "System Sounds"
@ -1545,7 +1566,7 @@ msgstr "پیش‌فرض"
#: ../src/shell-polkit-authentication-agent.c:334
msgid "Authentication dialog was dismissed by the user"
msgstr "محاوره تصدیق هویت از طرف کاربر رد شد"
msgstr "محاوره تایید هویت از طرف کاربر رد شد"
#: ../src/shell-util.c:100
msgid "Home Folder"
@ -1567,7 +1588,3 @@ msgstr "سیستم پرونده‌ها"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#: ../src/shell-util.c:600
msgid "calendar:week_start:0"
msgstr "calendar:week_start:0"

551
po/fi.po

File diff suppressed because it is too large Load Diff

374
po/fr.po
View File

@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: gnome-shell master fr\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-09-14 13:45+0000\n"
"POT-Creation-Date: 2011-09-23 12:02+0000\n"
"PO-Revision-Date: 2011-09-14 18:35+0200\n"
"Last-Translator: Bruno Brouard <annoa.b@gmail.com>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
@ -78,23 +78,19 @@ msgid "If true, display date in the clock, in addition to time."
msgstr "Si vrai, afficher la date dans l'horloge, en plus de l'heure."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display onscreen keyboard."
msgstr "Si vrai, afficher le clavier visuel."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display seconds in time."
msgstr "Si vrai, afficher les secondes dans l'horloge."
#: ../data/org.gnome.shell.gschema.xml.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display the ISO week date in the calendar."
msgstr "Si vrai, afficher le numéro de semaine ISO dans le calendrier."
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "List of desktop file IDs for favorite applications"
msgstr ""
"Liste d'identifiants de fichiers desktop pour les applications favorites"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -121,23 +117,19 @@ msgstr ""
"et le codec VP8. %T est utilisé comme paramètre pour une supposition quant "
"au nombre optimal de threads à utiliser sur le système."
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
msgstr "Afficher la date dans l'horloge"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show the onscreen keyboard"
msgstr "Afficher le clavier visuel"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr "Afficher la numérotation des semaines dans le calendrier"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr "Afficher l'heure avec les secondes"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -145,7 +137,7 @@ msgstr ""
"Les applications correspondant à ces identifiants sont affichées dans la "
"zone des favoris."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@ -155,7 +147,7 @@ msgstr ""
"utilise cette extension. Elle devrait être modifiée si le format du "
"conteneur utilisé pour l'enregistrement est différent."
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -163,11 +155,11 @@ msgstr ""
"Le nombre d'images par seconde des animations d'écran enregistrées par "
"l'outil idoine de GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Le pipeline GStreamer utilisé pour coder l'animation d'écran"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -180,54 +172,75 @@ msgstr ""
"pousser à désactiver cette fonctionnalité. Remarquez que cette désactivation "
"ne supprime pas d'éventuelles données déjà enregistrées."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "The type of keyboard to use."
msgstr "Le type de clavier utilisé."
#: ../data/org.gnome.shell.gschema.xml.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "Uuids of extensions to enable"
msgstr "Identifiants UUID des extensions à activer"
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Whether to collect stats about applications usage"
msgstr "Collecter des statistiques sur l'utilisation des applications"
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Which keyboard to use"
msgstr "Le clavier utilisé"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "disabled OpenSearch providers"
msgstr "fournisseurs OpenSearch désactivés"
#: ../js/gdm/loginDialog.js:604
#: ../js/gdm/loginDialog.js:617
msgid "Session..."
msgstr "Session..."
#: ../js/gdm/loginDialog.js:761
#: ../js/gdm/loginDialog.js:785
msgctxt "title"
msgid "Sign In"
msgstr "Connexion"
#: ../js/gdm/loginDialog.js:818
#. translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:830
msgid "(or swipe finger)"
msgstr "(ou faites glisser le doigt)"
#: ../js/gdm/loginDialog.js:848
msgid "Not listed?"
msgstr "Absent de la liste ?"
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
msgid "Cancel"
msgstr "Annuler"
#: ../js/gdm/loginDialog.js:933
#: ../js/gdm/loginDialog.js:1009
msgctxt "button"
msgid "Sign In"
msgstr "Se connecter"
#: ../js/gdm/loginDialog.js:1253
#: ../js/gdm/loginDialog.js:1358
msgid "Login Window"
msgstr "Fenêtre de connexion"
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
msgid "Suspend"
msgstr "Mettre en veille"
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "Redémarrer"
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "Éteindre"
#: ../js/misc/util.js:92
msgid "Command not found"
msgstr "Commande non trouvée"
@ -256,15 +269,15 @@ msgstr "APPLICATIONS"
msgid "SETTINGS"
msgstr "PARAMÈTRES"
#: ../js/ui/appDisplay.js:685
#: ../js/ui/appDisplay.js:684
msgid "New Window"
msgstr "Nouvelle fenêtre"
#: ../js/ui/appDisplay.js:688
#: ../js/ui/appDisplay.js:687
msgid "Remove from Favorites"
msgstr "Enlever des favoris"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:688
msgid "Add to Favorites"
msgstr "Ajouter aux favoris"
@ -278,12 +291,16 @@ msgstr "%s a été ajouté à vos favoris."
msgid "%s has been removed from your favorites."
msgstr "%s a été supprimé de vos favoris."
#: ../js/ui/autorunManager.js:592
#: ../js/ui/autorunManager.js:280
msgid "Removable Devices"
msgstr "Périphériques amovibles"
#: ../js/ui/autorunManager.js:590
#, c-format
msgid "Open with %s"
msgstr "Ouvrir avec %s"
#: ../js/ui/autorunManager.js:618
#: ../js/ui/autorunManager.js:616
msgid "Eject"
msgstr "Éjecter"
@ -461,15 +478,15 @@ msgstr "La semaine prochaine"
msgid "Unknown"
msgstr "Inconnu"
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
msgid "Available"
msgstr "Disponible"
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
msgid "Away"
msgstr "Absent"
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
msgid "Busy"
msgstr "Occupé"
@ -481,7 +498,7 @@ msgstr "Déconnecté"
msgid "CONTACTS"
msgstr "CONTACTS"
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1204
msgid "Remove"
msgstr "Enlever"
@ -583,10 +600,6 @@ msgstr[1] "Vous allez être déconnecté automatiquement dans %d secondes."
msgid "Logging out of the system."
msgstr "Déconnexion du système."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "Éteindre"
#: ../js/ui/endSessionDialog.js:81
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
@ -604,11 +617,6 @@ msgstr[1] "Cet ordinateur s'éteindra automatiquement dans %d secondes."
msgid "Powering off the system."
msgstr "Extinction du système."
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
#: ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "Redémarrer"
#: ../js/ui/endSessionDialog.js:98
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
@ -635,96 +643,96 @@ msgstr "Installer"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Clavier"
#: ../js/ui/lookingGlass.js:641
#: ../js/ui/lookingGlass.js:645
msgid "No extensions installed"
msgstr "Aucune extension installée"
#: ../js/ui/lookingGlass.js:687
#: ../js/ui/lookingGlass.js:691
msgid "Enabled"
msgstr "Activé"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "Désactivé"
#: ../js/ui/lookingGlass.js:691
#: ../js/ui/lookingGlass.js:695
msgid "Error"
msgstr "Erreur"
#: ../js/ui/lookingGlass.js:693
#: ../js/ui/lookingGlass.js:697
msgid "Out of date"
msgstr "Périmé"
#: ../js/ui/lookingGlass.js:695
#: ../js/ui/lookingGlass.js:699
msgid "Downloading"
msgstr "Téléchargement"
#: ../js/ui/lookingGlass.js:720
#: ../js/ui/lookingGlass.js:724
msgid "View Source"
msgstr "Afficher la source"
#: ../js/ui/lookingGlass.js:726
#: ../js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "Page Web"
#: ../js/ui/messageTray.js:1188
#: ../js/ui/messageTray.js:1197
msgid "Open"
msgstr "Ouvrir"
#: ../js/ui/messageTray.js:2367
#: ../js/ui/messageTray.js:2405
msgid "System Information"
msgstr "Informations du système"
#: ../js/ui/networkAgent.js:138
#: ../js/ui/networkAgent.js:145
msgid "Show password"
msgstr "Afficher le mot de passe"
#: ../js/ui/networkAgent.js:153
#: ../js/ui/networkAgent.js:160
msgid "Connect"
msgstr "Se connecter"
#. Cisco LEAP
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
#: ../js/ui/networkAgent.js:317
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
#: ../js/ui/networkAgent.js:324
msgid "Password: "
msgstr "Mot de passe : "
#. static WEP
#: ../js/ui/networkAgent.js:253
#: ../js/ui/networkAgent.js:260
msgid "Key: "
msgstr "Clé : "
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
msgid "Username: "
msgstr "Nom d'utilisateur : "
#: ../js/ui/networkAgent.js:291
#: ../js/ui/networkAgent.js:298
msgid "Identity: "
msgstr "Identité : "
#: ../js/ui/networkAgent.js:293
#: ../js/ui/networkAgent.js:300
msgid "Private key password: "
msgstr "Mot de passe de la clé privée : "
#: ../js/ui/networkAgent.js:305
#: ../js/ui/networkAgent.js:312
msgid "Service: "
msgstr "Service : "
#: ../js/ui/networkAgent.js:334
#: ../js/ui/networkAgent.js:341
msgid "Authentication required by wireless network"
msgstr "L'authentification est requise par le réseau sans fil"
#: ../js/ui/networkAgent.js:335
#: ../js/ui/networkAgent.js:342
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network '%"
@ -733,35 +741,35 @@ msgstr ""
"Il faut un mot de passe ou une clé de chiffrement pour accéder au réseau "
"sans fil « %s »"
#: ../js/ui/networkAgent.js:339
#: ../js/ui/networkAgent.js:346
msgid "Wired 802.1X authentication"
msgstr "Authentification filaire 802.1X"
#: ../js/ui/networkAgent.js:341
#: ../js/ui/networkAgent.js:348
msgid "Network name: "
msgstr "Nom du réseau : "
#: ../js/ui/networkAgent.js:346
#: ../js/ui/networkAgent.js:353
msgid "DSL authentication"
msgstr "Authentification DSL"
#: ../js/ui/networkAgent.js:353
#: ../js/ui/networkAgent.js:360
msgid "PIN code required"
msgstr "Code PIN requis"
#: ../js/ui/networkAgent.js:354
#: ../js/ui/networkAgent.js:361
msgid "PIN code is needed for the mobile broadband device"
msgstr "Un code PIN est nécessaire pour les téléphones mobiles à large bande"
#: ../js/ui/networkAgent.js:355
#: ../js/ui/networkAgent.js:362
msgid "PIN: "
msgstr "PIN : "
#: ../js/ui/networkAgent.js:361
#: ../js/ui/networkAgent.js:368
msgid "Mobile broadband network password"
msgstr "Mot de passe du téléphone mobile à large bande"
#: ../js/ui/networkAgent.js:362
#: ../js/ui/networkAgent.js:369
#, c-format
msgid "A password is required to connect to '%s'."
msgstr "Un mot de passe est requis pour se connecter à « %s »."
@ -785,14 +793,14 @@ msgid "Dash"
msgstr "Dash"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:538
#: ../js/ui/panel.js:539
#, c-format
msgid "Quit %s"
msgstr "Quitter %s"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:575
msgid "Activities"
msgstr "Activités"
@ -825,7 +833,7 @@ msgstr "Authentification nécessaire"
msgid "Administrator"
msgstr "Administrateur"
#: ../js/ui/polkitAuthenticationAgent.js:174
#: ../js/ui/polkitAuthenticationAgent.js:175
msgid "Authenticate"
msgstr "S'authentifier"
@ -833,11 +841,11 @@ msgstr "S'authentifier"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:262
#: ../js/ui/polkitAuthenticationAgent.js:256
msgid "Sorry, that didn't work. Please try again."
msgstr "Échec de l'authentification. Essayez à nouveau."
#: ../js/ui/polkitAuthenticationAgent.js:274
#: ../js/ui/polkitAuthenticationAgent.js:268
msgid "Password:"
msgstr "Mot de passe :"
@ -846,7 +854,7 @@ msgstr "Mot de passe :"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:687
#: ../js/ui/popupMenu.js:731
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -873,9 +881,10 @@ msgstr "Zoom"
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
#. 'screen-reader-enabled');
#. this.menu.addMenuItem(screenReader);
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
#. 'screen-keyboard-enabled');
#. this.menu.addMenuItem(screenKeyboard);
#: ../js/ui/status/accessibility.js:71
msgid "Screen Keyboard"
msgstr "Clavier visuel"
#: ../js/ui/status/accessibility.js:75
msgid "Visual Alerts"
msgstr "Alertes visuelles"
@ -994,7 +1003,7 @@ msgstr "Toujours accorder l'accès"
msgid "Grant this time only"
msgstr "Accorder l'accès cette fois uniquement"
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
msgid "Reject"
msgstr "Refuser"
@ -1038,11 +1047,11 @@ msgstr ""
msgid "OK"
msgstr "Valider"
#: ../js/ui/status/keyboard.js:71
#: ../js/ui/status/keyboard.js:73
msgid "Show Keyboard Layout"
msgstr "Afficher la disposition du clavier"
#: ../js/ui/status/keyboard.js:75
#: ../js/ui/status/keyboard.js:78
msgid "Region and Language Settings"
msgstr "Paramètres de région et de langue"
@ -1087,13 +1096,13 @@ msgstr "non disponible"
msgid "connection failed"
msgstr "échec de connexion"
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
msgid "More..."
msgstr "Plus..."
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1455
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
msgid "Connected (private)"
msgstr "Connecté (privé)"
@ -1110,7 +1119,7 @@ msgid "Auto dial-up"
msgstr "Connexion par téléphone automatique"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
#, c-format
msgid "Auto %s"
msgstr "Auto %s"
@ -1119,47 +1128,39 @@ msgstr "Auto %s"
msgid "Auto bluetooth"
msgstr "Bluetooth automatique"
#: ../js/ui/status/network.js:1469
#: ../js/ui/status/network.js:1472
msgid "Auto wireless"
msgstr "Sans fil automatique"
#: ../js/ui/status/network.js:1558
#: ../js/ui/status/network.js:1566
msgid "Enable networking"
msgstr "Activer le réseau"
#: ../js/ui/status/network.js:1570
#: ../js/ui/status/network.js:1578
msgid "Wired"
msgstr "Filaire"
#: ../js/ui/status/network.js:1581
#: ../js/ui/status/network.js:1589
msgid "Wireless"
msgstr "Sans fil"
#: ../js/ui/status/network.js:1591
#: ../js/ui/status/network.js:1599
msgid "Mobile broadband"
msgstr "Téléphone mobile à large bande"
#: ../js/ui/status/network.js:1601
#: ../js/ui/status/network.js:1609
msgid "VPN Connections"
msgstr "Connexions par VPN"
#: ../js/ui/status/network.js:1612
#: ../js/ui/status/network.js:1620
msgid "Network Settings"
msgstr "Paramètres du réseau"
#: ../js/ui/status/network.js:1747
msgid "Connectivity lost"
msgstr "Connexion perdue"
#: ../js/ui/status/network.js:1748
msgid "You are no longer connected to the network"
msgstr "Vous n'êtes plus connecté au réseau"
#: ../js/ui/status/network.js:1756
#: ../js/ui/status/network.js:1757
msgid "Connection failed"
msgstr "Échec de connexion"
#: ../js/ui/status/network.js:1757
#: ../js/ui/status/network.js:1758
msgid "Activation of network connection failed"
msgstr "L'activation de la connexion réseau a échoué"
@ -1270,46 +1271,46 @@ msgstr "Microphone"
#. We got the TpContact
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:256
#: ../js/ui/telepathyClient.js:259
msgid "Invitation"
msgstr "Invitation"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:322
#: ../js/ui/telepathyClient.js:325
msgid "Call"
msgstr "Appel"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:350
#: ../js/ui/telepathyClient.js:353
msgid "File Transfer"
msgstr "Transfert de fichiers"
#: ../js/ui/telepathyClient.js:432
#: ../js/ui/telepathyClient.js:434
msgid "Subscription request"
msgstr "Demande d'abonnement"
#: ../js/ui/telepathyClient.js:460
#: ../js/ui/telepathyClient.js:470
msgid "Connection error"
msgstr "Erreur de connexion"
#: ../js/ui/telepathyClient.js:722
#: ../js/ui/telepathyClient.js:733
#, c-format
msgid "%s is online."
msgstr "%s est en ligne."
#
# luc: note: Empathy utilise « déconnecté »
#: ../js/ui/telepathyClient.js:727
#: ../js/ui/telepathyClient.js:738
#, c-format
msgid "%s is offline."
msgstr "%s est hors ligne."
#: ../js/ui/telepathyClient.js:730
#: ../js/ui/telepathyClient.js:741
#, c-format
msgid "%s is away."
msgstr "%s est absent."
#: ../js/ui/telepathyClient.js:733
#: ../js/ui/telepathyClient.js:744
#, c-format
msgid "%s is busy."
msgstr "%s est occupé."
@ -1319,35 +1320,35 @@ msgstr "%s est occupé."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:967
#: ../js/ui/telepathyClient.js:978
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Envoyé <b>%A</b> à <b>%X</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/telepathyClient.js:973
#: ../js/ui/telepathyClient.js:984
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Envoyé le <b>%A %-d %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/telepathyClient.js:978
#: ../js/ui/telepathyClient.js:989
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Envoyé le <b>%A %-d %B %Y</b>"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:1020
#: ../js/ui/telepathyClient.js:1031
#, c-format
msgid "%s is now known as %s"
msgstr "%s est maintenant connu sous le nom de %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1129
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "Invitation to %s"
msgstr "Invitation vers %s"
@ -1355,34 +1356,34 @@ msgstr "Invitation vers %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/telepathyClient.js:1137
#: ../js/ui/telepathyClient.js:1148
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s vous invite à rejoindre %s"
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
#: ../js/ui/telepathyClient.js:1332
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
#: ../js/ui/telepathyClient.js:1343
msgid "Decline"
msgstr "Refuser"
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
#: ../js/ui/telepathyClient.js:1344
msgid "Accept"
msgstr "Accepter"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1173
#: ../js/ui/telepathyClient.js:1184
#, c-format
msgid "Video call from %s"
msgstr "Appel vidéo de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1176
#: ../js/ui/telepathyClient.js:1187
#, c-format
msgid "Call from %s"
msgstr "Appel provenant de %s"
#: ../js/ui/telepathyClient.js:1186
#: ../js/ui/telepathyClient.js:1197
msgid "Answer"
msgstr "Répondre"
@ -1391,112 +1392,112 @@ msgstr "Répondre"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1222
#: ../js/ui/telepathyClient.js:1233
#, c-format
msgid "%s is sending you %s"
msgstr "%s vous envoie %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1308
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s aimerait être autorisé à savoir lorsque vous êtes en ligne"
#: ../js/ui/telepathyClient.js:1395
#: ../js/ui/telepathyClient.js:1406
msgid "Network error"
msgstr "Erreur réseau"
#: ../js/ui/telepathyClient.js:1397
#: ../js/ui/telepathyClient.js:1408
msgid "Authentication failed"
msgstr "L'authentification a échoué"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1410
msgid "Encryption error"
msgstr "Erreur de chiffrement"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1412
msgid "Certificate not provided"
msgstr "Certificat non fourni"
#: ../js/ui/telepathyClient.js:1403
#: ../js/ui/telepathyClient.js:1414
msgid "Certificate untrusted"
msgstr "Certificat non validé"
#: ../js/ui/telepathyClient.js:1405
#: ../js/ui/telepathyClient.js:1416
msgid "Certificate expired"
msgstr "Certificat expiré"
#: ../js/ui/telepathyClient.js:1407
#: ../js/ui/telepathyClient.js:1418
msgid "Certificate not activated"
msgstr "Certificat non activé"
#: ../js/ui/telepathyClient.js:1409
#: ../js/ui/telepathyClient.js:1420
msgid "Certificate hostname mismatch"
msgstr "Le nom de l'hôte du certificat ne correspond pas"
#: ../js/ui/telepathyClient.js:1411
#: ../js/ui/telepathyClient.js:1422
msgid "Certificate fingerprint mismatch"
msgstr "L'empreinte du certificat ne correspond pas"
#: ../js/ui/telepathyClient.js:1413
#: ../js/ui/telepathyClient.js:1424
msgid "Certificate self-signed"
msgstr "Certificat auto-signé"
#: ../js/ui/telepathyClient.js:1415
#: ../js/ui/telepathyClient.js:1426
msgid "Status is set to offline"
msgstr "Le statut est hors ligne"
#: ../js/ui/telepathyClient.js:1417
#: ../js/ui/telepathyClient.js:1428
msgid "Encryption is not available"
msgstr "Chiffrement non disponible"
#: ../js/ui/telepathyClient.js:1419
#: ../js/ui/telepathyClient.js:1430
msgid "Certificate is invalid"
msgstr "Certificat non valide"
#: ../js/ui/telepathyClient.js:1421
#: ../js/ui/telepathyClient.js:1432
msgid "Connection has been refused"
msgstr "La connexion a été refusée"
#: ../js/ui/telepathyClient.js:1423
#: ../js/ui/telepathyClient.js:1434
msgid "Connection can't be established"
msgstr "La connexion ne peut pas être établie"
#: ../js/ui/telepathyClient.js:1425
#: ../js/ui/telepathyClient.js:1436
msgid "Connection has been lost"
msgstr "La connexion a été perdue"
#: ../js/ui/telepathyClient.js:1427
#: ../js/ui/telepathyClient.js:1438
msgid "This resource is already connected to the server"
msgstr "Cette ressource est déjà connectée au serveur"
#: ../js/ui/telepathyClient.js:1429
#: ../js/ui/telepathyClient.js:1440
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"La connexion a été remplacée par une nouvelle connexion utilisant la même "
"ressource"
#: ../js/ui/telepathyClient.js:1431
#: ../js/ui/telepathyClient.js:1442
msgid "The account already exists on the server"
msgstr "Ce compte existe déjà sur le serveur"
#: ../js/ui/telepathyClient.js:1433
#: ../js/ui/telepathyClient.js:1444
msgid "Server is currently too busy to handle the connection"
msgstr "Le serveur est actuellement trop chargé pour traiter la connexion"
#: ../js/ui/telepathyClient.js:1435
#: ../js/ui/telepathyClient.js:1446
msgid "Certificate has been revoked"
msgstr "Le certificat a été révoqué"
#: ../js/ui/telepathyClient.js:1437
#: ../js/ui/telepathyClient.js:1448
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Le certificat utilise un algorithme de chiffrement douteux, ou est faible "
"cryptographiquement"
#: ../js/ui/telepathyClient.js:1439
#: ../js/ui/telepathyClient.js:1450
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1506,67 +1507,76 @@ msgstr ""
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1448
#: ../js/ui/telepathyClient.js:1459
#, c-format
msgid "Connection to %s failed"
msgstr "La connexion à %s a échoué"
#: ../js/ui/telepathyClient.js:1455
msgid "Unknown reason"
msgstr "Raison inconnue"
#: ../js/ui/telepathyClient.js:1462
#: ../js/ui/telepathyClient.js:1468
msgid "Reconnect"
msgstr "Se reconnecter"
#: ../js/ui/telepathyClient.js:1463
#: ../js/ui/telepathyClient.js:1469
msgid "Edit account"
msgstr "Modifier le compte"
#: ../js/ui/userMenu.js:153
#: ../js/ui/telepathyClient.js:1515
msgid "Unknown reason"
msgstr "Raison inconnue"
#: ../js/ui/userMenu.js:145
msgid "Hidden"
msgstr "Invisible"
#: ../js/ui/userMenu.js:159
#: ../js/ui/userMenu.js:151
msgid "Idle"
msgstr "Inactif"
#: ../js/ui/userMenu.js:162
#: ../js/ui/userMenu.js:154
msgid "Unavailable"
msgstr "Non disponible"
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
msgid "Power Off..."
msgstr "Éteindre..."
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
msgid "Suspend"
msgstr "Mettre en veille"
#: ../js/ui/userMenu.js:551
#: ../js/ui/userMenu.js:548
msgid "Notifications"
msgstr "Notifications"
#: ../js/ui/userMenu.js:559
#: ../js/ui/userMenu.js:556
msgid "Online Accounts"
msgstr "Comptes en ligne"
#: ../js/ui/userMenu.js:563
#: ../js/ui/userMenu.js:560
msgid "System Settings"
msgstr "Paramètres système"
#: ../js/ui/userMenu.js:570
#: ../js/ui/userMenu.js:567
msgid "Lock Screen"
msgstr "Verrouiller l'écran"
#: ../js/ui/userMenu.js:575
#: ../js/ui/userMenu.js:572
msgid "Switch User"
msgstr "Changer d'utilisateur"
#: ../js/ui/userMenu.js:580
#: ../js/ui/userMenu.js:577
msgid "Log Out..."
msgstr "Fermer la session..."
#: ../js/ui/userMenu.js:605
msgid "Your chat status will be set to busy"
msgstr "Votre statut pour les discussions sera défini à occupé"
#: ../js/ui/userMenu.js:606
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
msgstr ""
"Les notifications sont maintenant désactivées, y compris les messages de "
"discussion. Votre statut en ligne a été modifié afin que les autres sachent "
"qu'il se peut que vous ne voyez pas leurs messages."
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30

393
po/gl.po
View File

@ -12,8 +12,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-14 23:01+0200\n"
"PO-Revision-Date: 2011-09-14 23:03+0200\n"
"POT-Creation-Date: 2011-09-21 22:50+0200\n"
"PO-Revision-Date: 2011-09-21 22:51+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <gnome-l10n-gl@gnome.org>\n"
"Language: gl\n"
@ -76,22 +76,18 @@ msgid "If true, display date in the clock, in addition to time."
msgstr "Se é verdadeiro, móstrase a data no reloxo, ademais da hora."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display onscreen keyboard."
msgstr "Se é verdadeiro, móstranse o teclado en pantalla."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display seconds in time."
msgstr "Se é verdadeiro, móstranse os segundos na hora."
#: ../data/org.gnome.shell.gschema.xml.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display the ISO week date in the calendar."
msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "List of desktop file IDs for favorite applications"
msgstr "Mostra os ID de ficheiros desktop para os aplicativos preferidos"
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -117,23 +113,19 @@ msgstr ""
"códec VP8. Úsase %T como suposición para o número de fillos óptimos no "
"sistema."
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
msgstr "Mostrar a data no reloxo"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show the onscreen keyboard"
msgstr "Mostrar o teclado en pantalla"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr "Mostrar a data da semana no calendario"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr "Mostrar a hora con segundos"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
@ -141,7 +133,7 @@ msgstr ""
"Os aplicativos que corresponden a estes identificadores mostraranse na área "
"de preferidos."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@ -151,7 +143,7 @@ msgstr ""
"baseado na data actual e usa esta extensión. Debería cambiar ao grabar nun "
"formato de contedor diferente."
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -159,11 +151,11 @@ msgstr ""
"A taxa de marcos do screencast resultante grabado polo grabador de "
"screencasts de GNOME Shell en marcos-por-segundo."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "A tubería de gstreamer usada para codificar o screencast"
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -175,54 +167,75 @@ msgstr ""
"privados, vostede pode desactivar isto por motivos de privacidade. Teña en "
"conta que facendo isto non eliminará os datos gardados."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "The type of keyboard to use."
msgstr "O tipo de teclado a usar."
#: ../data/org.gnome.shell.gschema.xml.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "Uuids of extensions to enable"
msgstr "Uuid das extensións que activar"
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Whether to collect stats about applications usage"
msgstr "Indica se recoller estatísticas sobre o uso dos aplicativos"
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Which keyboard to use"
msgstr "Que teclado usar"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "disabled OpenSearch providers"
msgstr "fornecedores de OpenSearch desactivados"
#: ../js/gdm/loginDialog.js:604
#: ../js/gdm/loginDialog.js:617
msgid "Session..."
msgstr "Sesión…"
#: ../js/gdm/loginDialog.js:761
#: ../js/gdm/loginDialog.js:785
msgctxt "title"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:818
#. translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:830
msgid "(or swipe finger)"
msgstr "(ou pase o dedo)"
#: ../js/gdm/loginDialog.js:848
msgid "Not listed?"
msgstr "Non está na lista?"
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:165
#: ../js/ui/polkitAuthenticationAgent.js:171 ../js/ui/status/bluetooth.js:480
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/loginDialog.js:933
#: ../js/gdm/loginDialog.js:1009
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:1253
#: ../js/gdm/loginDialog.js:1358
msgid "Login Window"
msgstr "Xanela de inicio de sesión"
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:514
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:585
msgid "Suspend"
msgstr "Suspender"
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "Reiniciar"
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "Apagar"
#: ../js/misc/util.js:92
msgid "Command not found"
msgstr "Orde non atopada"
@ -251,15 +264,15 @@ msgstr "APLICATIVOS"
msgid "SETTINGS"
msgstr "CONFIGURACIÓN"
#: ../js/ui/appDisplay.js:685
#: ../js/ui/appDisplay.js:684
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:688
#: ../js/ui/appDisplay.js:687
msgid "Remove from Favorites"
msgstr "Eliminar dos favoritos"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:688
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@ -273,12 +286,16 @@ msgstr "%s foi engadido aos seus favoritos."
msgid "%s has been removed from your favorites."
msgstr "%s foi eliminado dos seus favoritos."
#: ../js/ui/autorunManager.js:592
#: ../js/ui/autorunManager.js:280
msgid "Removable Devices"
msgstr "Dispositivos extraíbeis"
#: ../js/ui/autorunManager.js:590
#, c-format
msgid "Open with %s"
msgstr "Abrir con %s"
#: ../js/ui/autorunManager.js:618
#: ../js/ui/autorunManager.js:616
msgid "Eject"
msgstr "Expulsar"
@ -433,15 +450,15 @@ msgstr "A vindeira semana"
msgid "Unknown"
msgstr "Descoñecido"
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:147
#: ../js/ui/contactDisplay.js:80 ../js/ui/userMenu.js:139
msgid "Available"
msgstr "Dispoñíbel"
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:156
#: ../js/ui/contactDisplay.js:85 ../js/ui/userMenu.js:148
msgid "Away"
msgstr "Ausente"
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:150
#: ../js/ui/contactDisplay.js:89 ../js/ui/userMenu.js:142
msgid "Busy"
msgstr "Ocupado"
@ -453,7 +470,7 @@ msgstr "Desconectado"
msgid "CONTACTS"
msgstr "CONTACTOS"
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1197
msgid "Remove"
msgstr "Eliminar"
@ -548,10 +565,6 @@ msgstr[1] "A súa sesión pecharase automaticamente en %d segundos."
msgid "Logging out of the system."
msgstr "Saíndo da sesión."
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "Apagar"
#: ../js/ui/endSessionDialog.js:81
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
@ -568,11 +581,6 @@ msgstr[1] "O seu computador apagarase automaticamente en %d segundos."
msgid "Powering off the system."
msgstr "Apagando o sistema."
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
#: ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:98
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
@ -599,96 +607,96 @@ msgstr "Instalar"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Desexa descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "Teclado"
#: ../js/ui/lookingGlass.js:641
#: ../js/ui/lookingGlass.js:645
msgid "No extensions installed"
msgstr "Non hai ningunha extensión instalada"
#: ../js/ui/lookingGlass.js:687
#: ../js/ui/lookingGlass.js:691
msgid "Enabled"
msgstr "Activado"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "Desactivado"
#: ../js/ui/lookingGlass.js:691
#: ../js/ui/lookingGlass.js:695
msgid "Error"
msgstr "Erro"
#: ../js/ui/lookingGlass.js:693
#: ../js/ui/lookingGlass.js:697
msgid "Out of date"
msgstr "Desactualizado"
#: ../js/ui/lookingGlass.js:695
#: ../js/ui/lookingGlass.js:699
msgid "Downloading"
msgstr "Descargando"
#: ../js/ui/lookingGlass.js:720
#: ../js/ui/lookingGlass.js:724
msgid "View Source"
msgstr "Ver fonte"
#: ../js/ui/lookingGlass.js:726
#: ../js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "Páxina web"
#: ../js/ui/messageTray.js:1188
#: ../js/ui/messageTray.js:1190
msgid "Open"
msgstr "Abrir"
#: ../js/ui/messageTray.js:2367
#: ../js/ui/messageTray.js:2372
msgid "System Information"
msgstr "Información do sistema"
#: ../js/ui/networkAgent.js:138
#: ../js/ui/networkAgent.js:145
msgid "Show password"
msgstr "Mostrar contrasinal"
#: ../js/ui/networkAgent.js:153
#: ../js/ui/networkAgent.js:160
msgid "Connect"
msgstr "Conectar"
#. Cisco LEAP
#: ../js/ui/networkAgent.js:248 ../js/ui/networkAgent.js:260
#: ../js/ui/networkAgent.js:287 ../js/ui/networkAgent.js:307
#: ../js/ui/networkAgent.js:317
#: ../js/ui/networkAgent.js:255 ../js/ui/networkAgent.js:267
#: ../js/ui/networkAgent.js:294 ../js/ui/networkAgent.js:314
#: ../js/ui/networkAgent.js:324
msgid "Password: "
msgstr "Contrasinal: "
#. static WEP
#: ../js/ui/networkAgent.js:253
#: ../js/ui/networkAgent.js:260
msgid "Key: "
msgstr "Chave: "
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/ui/networkAgent.js:285 ../js/ui/networkAgent.js:303
#: ../js/ui/networkAgent.js:292 ../js/ui/networkAgent.js:310
msgid "Username: "
msgstr "Nome de usuario: "
#: ../js/ui/networkAgent.js:291
#: ../js/ui/networkAgent.js:298
msgid "Identity: "
msgstr "Identidade: "
#: ../js/ui/networkAgent.js:293
#: ../js/ui/networkAgent.js:300
msgid "Private key password: "
msgstr "Contrasinal da chave privada: "
#: ../js/ui/networkAgent.js:305
#: ../js/ui/networkAgent.js:312
msgid "Service: "
msgstr "Servizo: "
#: ../js/ui/networkAgent.js:334
#: ../js/ui/networkAgent.js:341
msgid "Authentication required by wireless network"
msgstr "A rede sen fíos require autenticación"
#: ../js/ui/networkAgent.js:335
#: ../js/ui/networkAgent.js:342
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@ -697,35 +705,35 @@ msgstr ""
"Son necesarios contrasinais ou chaves de codificación para acceder á rede "
"sen fíos '%s'."
#: ../js/ui/networkAgent.js:339
#: ../js/ui/networkAgent.js:346
msgid "Wired 802.1X authentication"
msgstr "Autenticación con fíos 802.1X"
#: ../js/ui/networkAgent.js:341
#: ../js/ui/networkAgent.js:348
msgid "Network name: "
msgstr "Nome da rede:"
#: ../js/ui/networkAgent.js:346
#: ../js/ui/networkAgent.js:353
msgid "DSL authentication"
msgstr "Autenticación DSL"
#: ../js/ui/networkAgent.js:353
#: ../js/ui/networkAgent.js:360
msgid "PIN code required"
msgstr "Requírese un código PIN"
#: ../js/ui/networkAgent.js:354
#: ../js/ui/networkAgent.js:361
msgid "PIN code is needed for the mobile broadband device"
msgstr "É necesario un código PIN para o dispositivo de banda larga móbil"
#: ../js/ui/networkAgent.js:355
#: ../js/ui/networkAgent.js:362
msgid "PIN: "
msgstr "PIN:"
#: ../js/ui/networkAgent.js:361
#: ../js/ui/networkAgent.js:368
msgid "Mobile broadband network password"
msgstr "Contrasinal da rede de banda larga móbil"
#: ../js/ui/networkAgent.js:362
#: ../js/ui/networkAgent.js:369
#, c-format
msgid "A password is required to connect to '%s'."
msgstr "Requírese un contrasinal para conectarse a «%s»."
@ -749,18 +757,18 @@ msgid "Dash"
msgstr "Panel"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:538
#: ../js/ui/panel.js:539
#, c-format
msgid "Quit %s"
msgstr "Saír de %s"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:575
msgid "Activities"
msgstr "Actividades"
#: ../js/ui/panel.js:977
#: ../js/ui/panel.js:967
msgid "Top Bar"
msgstr "Barra superior"
@ -789,7 +797,7 @@ msgstr "Autenticación requirida"
msgid "Administrator"
msgstr "Administrador"
#: ../js/ui/polkitAuthenticationAgent.js:174
#: ../js/ui/polkitAuthenticationAgent.js:175
msgid "Authenticate"
msgstr "Autenticar"
@ -797,11 +805,11 @@ msgstr "Autenticar"
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance.
#: ../js/ui/polkitAuthenticationAgent.js:262
#: ../js/ui/polkitAuthenticationAgent.js:256
msgid "Sorry, that didn't work. Please try again."
msgstr "Desculpe, iso non funcionou. Ténteo de novo."
#: ../js/ui/polkitAuthenticationAgent.js:274
#: ../js/ui/polkitAuthenticationAgent.js:268
msgid "Password:"
msgstr "Contrasinal:"
@ -810,7 +818,7 @@ msgstr "Contrasinal:"
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:687
#: ../js/ui/popupMenu.js:727
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -837,9 +845,10 @@ msgstr "Ampliación"
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
#. 'screen-reader-enabled');
#. this.menu.addMenuItem(screenReader);
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
#. 'screen-keyboard-enabled');
#. this.menu.addMenuItem(screenKeyboard);
#: ../js/ui/status/accessibility.js:71
msgid "Screen Keyboard"
msgstr "Lector de pantalla"
#: ../js/ui/status/accessibility.js:75
msgid "Visual Alerts"
msgstr "Alertas visuais"
@ -958,7 +967,7 @@ msgstr "Conceder acceso sempre"
msgid "Grant this time only"
msgstr "Conceder só esta vez"
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
msgid "Reject"
msgstr "Rexeitar"
@ -998,11 +1007,11 @@ msgstr "Introduza o PIN mencionado no dispositivo."
msgid "OK"
msgstr "Aceptar"
#: ../js/ui/status/keyboard.js:71
#: ../js/ui/status/keyboard.js:73
msgid "Show Keyboard Layout"
msgstr "Mostrar a distribución do teclado"
#: ../js/ui/status/keyboard.js:75
#: ../js/ui/status/keyboard.js:78
msgid "Region and Language Settings"
msgstr "Configuración rexional e de idioma"
@ -1047,13 +1056,13 @@ msgstr "non dispoñíbel"
msgid "connection failed"
msgstr "conexión fallida"
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1515
#: ../js/ui/status/network.js:575 ../js/ui/status/network.js:1523
msgid "More..."
msgstr "Máis..."
#. TRANSLATORS: this is the indication that a connection for another logged in user is active,
#. and we cannot access its settings (including the name)
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1455
#: ../js/ui/status/network.js:611 ../js/ui/status/network.js:1458
msgid "Connected (private)"
msgstr "Conectado (privado)"
@ -1070,7 +1079,7 @@ msgid "Auto dial-up"
msgstr "Por liña conmutada automática"
#. TRANSLATORS: this the automatic wireless connection name (including the network name)
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1467
#: ../js/ui/status/network.js:878 ../js/ui/status/network.js:1470
#, c-format
msgid "Auto %s"
msgstr "%s automática"
@ -1079,47 +1088,39 @@ msgstr "%s automática"
msgid "Auto bluetooth"
msgstr "Bluetooth automática"
#: ../js/ui/status/network.js:1469
#: ../js/ui/status/network.js:1472
msgid "Auto wireless"
msgstr "Sen fíos automática"
#: ../js/ui/status/network.js:1558
#: ../js/ui/status/network.js:1566
msgid "Enable networking"
msgstr "Activar rede"
#: ../js/ui/status/network.js:1570
#: ../js/ui/status/network.js:1578
msgid "Wired"
msgstr "Con fíos"
#: ../js/ui/status/network.js:1581
#: ../js/ui/status/network.js:1589
msgid "Wireless"
msgstr "Sen fíos"
#: ../js/ui/status/network.js:1591
#: ../js/ui/status/network.js:1599
msgid "Mobile broadband"
msgstr "Banda larga móbil"
#: ../js/ui/status/network.js:1601
#: ../js/ui/status/network.js:1609
msgid "VPN Connections"
msgstr "Conexións VPN"
#: ../js/ui/status/network.js:1612
#: ../js/ui/status/network.js:1620
msgid "Network Settings"
msgstr "Configuracións da rede"
#: ../js/ui/status/network.js:1747
msgid "Connectivity lost"
msgstr "Conectividade perdida"
#: ../js/ui/status/network.js:1748
msgid "You are no longer connected to the network"
msgstr "Xa non está conectado á rede"
#: ../js/ui/status/network.js:1756
#: ../js/ui/status/network.js:1757
msgid "Connection failed"
msgstr "Produciuse un fallo na conexión"
#: ../js/ui/status/network.js:1757
#: ../js/ui/status/network.js:1758
msgid "Activation of network connection failed"
msgstr "Produciuse un fallo na activación da conexión de rede"
@ -1230,44 +1231,44 @@ msgstr "Micrófono"
#. We got the TpContact
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:256
#: ../js/ui/telepathyClient.js:259
msgid "Invitation"
msgstr "Convite"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:322
#: ../js/ui/telepathyClient.js:325
msgid "Call"
msgstr "Chamar"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:350
#: ../js/ui/telepathyClient.js:353
msgid "File Transfer"
msgstr "Transferencia de ficheiro"
#: ../js/ui/telepathyClient.js:432
#: ../js/ui/telepathyClient.js:434
msgid "Subscription request"
msgstr "Solicitude de autorización"
#: ../js/ui/telepathyClient.js:460
#: ../js/ui/telepathyClient.js:470
msgid "Connection error"
msgstr "Erro de conexión"
#: ../js/ui/telepathyClient.js:722
#: ../js/ui/telepathyClient.js:733
#, c-format
msgid "%s is online."
msgstr "%s está conectado/a."
#: ../js/ui/telepathyClient.js:727
#: ../js/ui/telepathyClient.js:738
#, c-format
msgid "%s is offline."
msgstr "%s está desconectado/a."
#: ../js/ui/telepathyClient.js:730
#: ../js/ui/telepathyClient.js:741
#, c-format
msgid "%s is away."
msgstr "%s está ausente."
#: ../js/ui/telepathyClient.js:733
#: ../js/ui/telepathyClient.js:744
#, c-format
msgid "%s is busy."
msgstr "%s está ocupado/a."
@ -1275,35 +1276,35 @@ msgstr "%s está ocupado/a."
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:967
#: ../js/ui/telepathyClient.js:978
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Enviado ás <b>%X</b> o <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/telepathyClient.js:973
#: ../js/ui/telepathyClient.js:984
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/telepathyClient.js:978
#: ../js/ui/telepathyClient.js:989
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:1020
#: ../js/ui/telepathyClient.js:1031
#, c-format
msgid "%s is now known as %s"
msgstr "%s é coñecido agora como %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1129
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "Invitation to %s"
msgstr "Convidado a %s"
@ -1311,34 +1312,34 @@ msgstr "Convidado a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/telepathyClient.js:1137
#: ../js/ui/telepathyClient.js:1148
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s esta convidando a unirse a %s"
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
#: ../js/ui/telepathyClient.js:1332
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
#: ../js/ui/telepathyClient.js:1343
msgid "Decline"
msgstr "Rexeitar"
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
#: ../js/ui/telepathyClient.js:1344
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1173
#: ../js/ui/telepathyClient.js:1184
#, c-format
msgid "Video call from %s"
msgstr "Videochamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1176
#: ../js/ui/telepathyClient.js:1187
#, c-format
msgid "Call from %s"
msgstr "Chamada de %s"
#: ../js/ui/telepathyClient.js:1186
#: ../js/ui/telepathyClient.js:1197
msgid "Answer"
msgstr "Respostar"
@ -1347,111 +1348,111 @@ msgstr "Respostar"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1222
#: ../js/ui/telepathyClient.js:1233
#, c-format
msgid "%s is sending you %s"
msgstr "%s esta enviándolle %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1308
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cando vostede está dispoñíbel"
#: ../js/ui/telepathyClient.js:1395
#: ../js/ui/telepathyClient.js:1406
msgid "Network error"
msgstr "Erro de rede"
#: ../js/ui/telepathyClient.js:1397
#: ../js/ui/telepathyClient.js:1408
msgid "Authentication failed"
msgstr "A autenticación fallou"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1410
msgid "Encryption error"
msgstr "Erro de cifrado"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1412
msgid "Certificate not provided"
msgstr "Non se forneceu o certificado"
#: ../js/ui/telepathyClient.js:1403
#: ../js/ui/telepathyClient.js:1414
msgid "Certificate untrusted"
msgstr "Certificado non fiábel"
#: ../js/ui/telepathyClient.js:1405
#: ../js/ui/telepathyClient.js:1416
msgid "Certificate expired"
msgstr "O certificado caducou"
#: ../js/ui/telepathyClient.js:1407
#: ../js/ui/telepathyClient.js:1418
msgid "Certificate not activated"
msgstr "O certificado non está activado"
#: ../js/ui/telepathyClient.js:1409
#: ../js/ui/telepathyClient.js:1420
msgid "Certificate hostname mismatch"
msgstr "Certificado de cliente SSL"
#: ../js/ui/telepathyClient.js:1411
#: ../js/ui/telepathyClient.js:1422
msgid "Certificate fingerprint mismatch"
msgstr "A impresión dixital do certificado non coincide"
#: ../js/ui/telepathyClient.js:1413
#: ../js/ui/telepathyClient.js:1424
msgid "Certificate self-signed"
msgstr "Certificado autoasinado"
#: ../js/ui/telepathyClient.js:1415
#: ../js/ui/telepathyClient.js:1426
msgid "Status is set to offline"
msgstr "O estado está definido a desconectado"
#: ../js/ui/telepathyClient.js:1417
#: ../js/ui/telepathyClient.js:1428
msgid "Encryption is not available"
msgstr "O cifrado non está dispoñíbel"
#: ../js/ui/telepathyClient.js:1419
#: ../js/ui/telepathyClient.js:1430
msgid "Certificate is invalid"
msgstr "O certificado non é válido"
#: ../js/ui/telepathyClient.js:1421
#: ../js/ui/telepathyClient.js:1432
msgid "Connection has been refused"
msgstr "Rexeitouse a conexión"
#: ../js/ui/telepathyClient.js:1423
#: ../js/ui/telepathyClient.js:1434
msgid "Connection can't be established"
msgstr "Non é posíbel estabelecer a conexión"
#: ../js/ui/telepathyClient.js:1425
#: ../js/ui/telepathyClient.js:1436
msgid "Connection has been lost"
msgstr "Perdeuse a conexión"
#: ../js/ui/telepathyClient.js:1427
#: ../js/ui/telepathyClient.js:1438
msgid "This resource is already connected to the server"
msgstr "Este recurso xa está conectado ao servidor"
#: ../js/ui/telepathyClient.js:1429
#: ../js/ui/telepathyClient.js:1440
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"A conexión foi substituída por unha nova conexión empregando o mesmo recurso"
#: ../js/ui/telepathyClient.js:1431
#: ../js/ui/telepathyClient.js:1442
msgid "The account already exists on the server"
msgstr "Esta conta xa existe no servidor"
#: ../js/ui/telepathyClient.js:1433
#: ../js/ui/telepathyClient.js:1444
msgid "Server is currently too busy to handle the connection"
msgstr "Nestes intres o servidor está moi ocupado para xesionar a conexión"
#: ../js/ui/telepathyClient.js:1435
#: ../js/ui/telepathyClient.js:1446
msgid "Certificate has been revoked"
msgstr "O certificado foi revocado"
#: ../js/ui/telepathyClient.js:1437
#: ../js/ui/telepathyClient.js:1448
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
"débil"
#: ../js/ui/telepathyClient.js:1439
#: ../js/ui/telepathyClient.js:1450
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1462,67 +1463,76 @@ msgstr ""
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1448
#: ../js/ui/telepathyClient.js:1459
#, c-format
msgid "Connection to %s failed"
msgstr "Produciuse un fallo na conexión a %s"
#: ../js/ui/telepathyClient.js:1455
msgid "Unknown reason"
msgstr "Razón descoñecido"
#: ../js/ui/telepathyClient.js:1462
#: ../js/ui/telepathyClient.js:1468
msgid "Reconnect"
msgstr "Reconectar"
#: ../js/ui/telepathyClient.js:1463
#: ../js/ui/telepathyClient.js:1469
msgid "Edit account"
msgstr "Editar conta"
#: ../js/ui/userMenu.js:153
#: ../js/ui/telepathyClient.js:1515
msgid "Unknown reason"
msgstr "Razón descoñecido"
#: ../js/ui/userMenu.js:145
msgid "Hidden"
msgstr "Oculto"
#: ../js/ui/userMenu.js:159
#: ../js/ui/userMenu.js:151
msgid "Idle"
msgstr "Inactivo"
#: ../js/ui/userMenu.js:162
#: ../js/ui/userMenu.js:154
msgid "Unavailable"
msgstr "Non dispoñíbel"
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
#: ../js/ui/userMenu.js:512 ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:586
msgid "Power Off..."
msgstr "Apagar…"
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
msgid "Suspend"
msgstr "Suspender"
#: ../js/ui/userMenu.js:551
#: ../js/ui/userMenu.js:548
msgid "Notifications"
msgstr "Notificacións"
#: ../js/ui/userMenu.js:559
#: ../js/ui/userMenu.js:556
msgid "Online Accounts"
msgstr "Contas en liña"
#: ../js/ui/userMenu.js:563
#: ../js/ui/userMenu.js:560
msgid "System Settings"
msgstr "Configuracións do sistema"
#: ../js/ui/userMenu.js:570
#: ../js/ui/userMenu.js:567
msgid "Lock Screen"
msgstr "Bloquear pantalla"
#: ../js/ui/userMenu.js:575
#: ../js/ui/userMenu.js:572
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:580
#: ../js/ui/userMenu.js:577
msgid "Log Out..."
msgstr "Saír da sesión…"
#: ../js/ui/userMenu.js:605
msgid "Your chat status will be set to busy"
msgstr "O seu estado de chat será estabelecido a «ocupado»"
#: ../js/ui/userMenu.js:606
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
msgstr ""
"Agora as notificacións están desactivadas, incluíndo os mensaxes de "
"conversa. O seu estado en liña foi axustado para dicirlle ás outras persoas "
"que non quere ver as súas mensaxes."
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@ -1612,6 +1622,18 @@ msgstr "Sistema de ficheiros"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "If true, display onscreen keyboard."
#~ msgstr "Se é verdadeiro, móstranse o teclado en pantalla."
#~ msgid "Show the onscreen keyboard"
#~ msgstr "Mostrar o teclado en pantalla"
#~ msgid "Connectivity lost"
#~ msgstr "Conectividade perdida"
#~ msgid "You are no longer connected to the network"
#~ msgstr "Xa non está conectado á rede"
#~ msgid "Do Not Disturb"
#~ msgstr "Non molestar"
@ -1691,9 +1713,6 @@ msgstr "%1$s: %2$s"
#~ msgid "No such application"
#~ msgstr "Non existe o aplicativo"
#~ msgid "Screen Reader"
#~ msgstr "Lector de pantalla"
#~ msgid "Clip the crosshairs at the center"
#~ msgstr "Poñer o punto de mira no centro"

1195
po/gu.po

File diff suppressed because it is too large Load Diff

932
po/he.po

File diff suppressed because it is too large Load Diff

1087
po/hu.po

File diff suppressed because it is too large Load Diff

487
po/id.po

File diff suppressed because it is too large Load Diff

447
po/it.po

File diff suppressed because it is too large Load Diff

774
po/ja.po

File diff suppressed because it is too large Load Diff

457
po/ko.po

File diff suppressed because it is too large Load Diff

558
po/lt.po

File diff suppressed because it is too large Load Diff

515
po/lv.po

File diff suppressed because it is too large Load Diff

437
po/nb.po

File diff suppressed because it is too large Load Diff

473
po/pa.po

File diff suppressed because it is too large Load Diff

437
po/pl.po

File diff suppressed because it is too large Load Diff

457
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

486
po/ru.po

File diff suppressed because it is too large Load Diff

1036
po/sk.po

File diff suppressed because it is too large Load Diff

878
po/sl.po

File diff suppressed because it is too large Load Diff

1228
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

467
po/sv.po

File diff suppressed because it is too large Load Diff

302
po/ta.po
View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-14 21:13+0530\n"
"PO-Revision-Date: 2011-09-14 21:16+0530\n"
"POT-Creation-Date: 2011-09-19 17:49+0530\n"
"PO-Revision-Date: 2011-09-19 17:51+0530\n"
"Last-Translator: Dr.T.Vasudevan <agnihot3@gmail.com>\n"
"Language-Team: American English <kde-i18n-doc@kde.org>\n"
"Language: ta\n"
@ -71,22 +71,18 @@ msgid "If true, display date in the clock, in addition to time."
msgstr "உண்மையெனில், கடிகாரத்தில் மணியுடன் நாளை காட்டு."
#: ../data/org.gnome.shell.gschema.xml.in.h:9
msgid "If true, display onscreen keyboard."
msgstr "உண்மையானால் திரை விசைப்பலகையை காட்டவும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display seconds in time."
msgstr "உண்மையானால் நேரத்தில் வினாடிகளை காட்டவும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:11
#: ../data/org.gnome.shell.gschema.xml.in.h:10
msgid "If true, display the ISO week date in the calendar."
msgstr "உண்மையானால் நாட்காட்டியில் ஐஎஸ்ஓ வார எண்களை காட்டவும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:12
#: ../data/org.gnome.shell.gschema.xml.in.h:11
msgid "List of desktop file IDs for favorite applications"
msgstr "விருப்ப பயன்பாடுகளுக்கு மேல்மேசை கோப்பு அடையாளங்கள்."
#: ../data/org.gnome.shell.gschema.xml.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.h:13
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -110,29 +106,25 @@ msgstr ""
"webmmux' ஆகும்; இதுVP8 கோடக் ஐ பயன்படுத்தி WEBM க்கு பதிவுசெய்யும். கணினியில் "
"பொருத்தமான இழை கணக்குக்கு ஊகம் செய்வதற்கு %T இடப்பிடிப்பானாக வேலை செய்யும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.h:14
msgid "Show date in clock"
msgstr "தேதியை கடிகாரத்தில் காட்டுக"
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show the onscreen keyboard"
msgstr "திரை விசைப்பலகையை காட்டவும்"
#: ../data/org.gnome.shell.gschema.xml.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.h:15
msgid "Show the week date in the calendar"
msgstr "நாட்காட்டியில் வார நாளை காட்டவும்"
#: ../data/org.gnome.shell.gschema.xml.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.h:16
msgid "Show time with seconds"
msgstr "நொடிகளுடன் நேரம் காட்டுக"
#: ../data/org.gnome.shell.gschema.xml.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.h:17
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr "இந்த அடையாளங் காட்டிகளுக்கு பொருத்தமான பயன்பாடுகள் விருப்ப இடத்தில் காட்டப்படும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.h:18
msgid ""
"The filename for recorded screencasts will be a unique filename based on the "
"current date, and use this extension. It should be changed when recording to "
@ -142,18 +134,18 @@ msgstr ""
"அடிப்படையாக கொண்டது; இந்த பின்னொட்டை பயன்படுத்தும். பதிவதை வேறு கொள்கலத்தின் ஒழுங்கில் "
"மாற்றுகையில் இதையும் மாற்ற வேண்டும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.h:19
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
"க்னோம்ஷெல் இன் ஸ்க்ரீன்காஸ்ட் பதிவரில் ஸ்க்ரீன்காட் ஐ பதிகையில் வினாடிக்கு சட்டங்களின் விகிதம்."
#: ../data/org.gnome.shell.gschema.xml.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.h:20
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "ஸ்க்ரீன்காஸ்டை குறியாக்க பயனாகும் ஜிஸ்ட்ரீமர் குழாய்."
#: ../data/org.gnome.shell.gschema.xml.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.h:21
msgid ""
"The shell normally monitors active applications in order to present the most "
"used ones (e.g. in launchers). While this data will be kept private, you may "
@ -164,54 +156,75 @@ msgstr ""
"நிரல்கள் (எ-டு: துவக்கிகள்) முன் வைக்கப்படும். இந்த தரவு அந்தரங்கமாக வைக்கப்பட்டாலும் நீங்கள் "
"இதை நீக்க விரும்பலாம். அப்படிச் செய்வது முன்னே சேகரித்த தரவை நீக்காஅது என் அறியவும்."
#: ../data/org.gnome.shell.gschema.xml.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.h:22
msgid "The type of keyboard to use."
msgstr "பயன்படுத்த வேண்டிய விசைப்பலகை வகை"
#: ../data/org.gnome.shell.gschema.xml.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.h:23
msgid "Uuids of extensions to enable"
msgstr "செயல் ஆக்க வேண்டிய நீட்சிகளின் யூயூஐடிக்கள்."
#: ../data/org.gnome.shell.gschema.xml.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.h:24
msgid "Whether to collect stats about applications usage"
msgstr "நிரல்களின் பயன்பாடு குறித்த புள்ளிவிவரம் சேகரிக்க வேண்டுமா"
#: ../data/org.gnome.shell.gschema.xml.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.h:25
msgid "Which keyboard to use"
msgstr "எந்த விசைப்பலகையை பயன்படுத்த வேண்டும்?"
#: ../data/org.gnome.shell.gschema.xml.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.h:26
msgid "disabled OpenSearch providers"
msgstr "ஓபன்செர்ச் வழங்குவோர் செயல்நீக்கம் செய்யபட்டனர்."
#: ../js/gdm/loginDialog.js:604
#: ../js/gdm/loginDialog.js:617
msgid "Session..."
msgstr "அமர்வு..."
#: ../js/gdm/loginDialog.js:761
#: ../js/gdm/loginDialog.js:785
msgctxt "title"
msgid "Sign In"
msgstr "உள்நுழை"
#: ../js/gdm/loginDialog.js:818
#. translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:830
msgid "(or swipe finger)"
msgstr "(அல்லது விரல் தீய்ப்பு)"
#: ../js/gdm/loginDialog.js:848
msgid "Not listed?"
msgstr "பட்டியலில் இல்லை?"
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:426
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
msgid "Cancel"
msgstr "ரத்துசெய்க"
#: ../js/gdm/loginDialog.js:933
#: ../js/gdm/loginDialog.js:1009
msgctxt "button"
msgid "Sign In"
msgstr "உள்நுழை"
#: ../js/gdm/loginDialog.js:1253
#: ../js/gdm/loginDialog.js:1358
msgid "Login Window"
msgstr "உள்புகு சாளரம்"
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:520
#: ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:591
msgid "Suspend"
msgstr "இடைநிறுத்தம்."
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "மறு துவக்கம்"
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "மின்சக்தி நிறுத்தம்"
#: ../js/misc/util.js:92
msgid "Command not found"
msgstr "கட்டளை காணப்படவில்லை"
@ -240,15 +253,15 @@ msgstr "APPLICATIONS"
msgid "SETTINGS"
msgstr "SETTINGS"
#: ../js/ui/appDisplay.js:685
#: ../js/ui/appDisplay.js:684
msgid "New Window"
msgstr "புதிய சாளரம்"
#: ../js/ui/appDisplay.js:688
#: ../js/ui/appDisplay.js:687
msgid "Remove from Favorites"
msgstr "விருப்பத்தில் இருந்து நீக்கு"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:688
msgid "Add to Favorites"
msgstr "விருப்பங்களுக்கு சேர்"
@ -442,7 +455,7 @@ msgstr "இணைப்பு விலகி"
msgid "CONTACTS"
msgstr "CONTACTS"
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
msgid "Remove"
msgstr "நீக்கு"
@ -536,10 +549,6 @@ msgstr[1] "நீங்கள் தானியங்கியாக %d வி
msgid "Logging out of the system."
msgstr "கணினியில் இருந்து வெளியேறுகிறது"
#: ../js/ui/endSessionDialog.js:80 ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "மின்சக்தி நிறுத்தம்"
#: ../js/ui/endSessionDialog.js:81
msgid "Click Power Off to quit these applications and power off the system."
msgstr "இந்த பயன்பாடுகளை மூடி கணினி மின் நிறுத்தம் செய்ய மின் நிறுத்தம் ஐ சொடுக்கவும்"
@ -555,11 +564,6 @@ msgstr[1] "கணினி தானியங்கியாக %d வினா
msgid "Powering off the system."
msgstr "கணினி மின் நிறுத்தப்படுகிறது"
#: ../js/ui/endSessionDialog.js:89 ../js/ui/endSessionDialog.js:97
#: ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "மறு துவக்கம்"
#: ../js/ui/endSessionDialog.js:98
msgid "Click Restart to quit these applications and restart the system."
msgstr "இந்த பயன்பாடுகளை மூடி கணினி மீள் துவக்கம் செய்ய செய்ய மீள் துவக்கம் ஐ சொடுக்கவும்"
@ -584,49 +588,49 @@ msgstr "நிறுவு"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "'%s' ஐ எக்ஸ்டென்ஷன்ஸ்.க்னோம்.ஆர்க். இலிருந்து தரவிறக்கி நிறுவவா?"
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
#: ../js/ui/keyboard.js:517 ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "விசைப்பலகை"
#: ../js/ui/lookingGlass.js:641
#: ../js/ui/lookingGlass.js:645
msgid "No extensions installed"
msgstr "நீட்சிகள் ஏதும் நிறுவப்படவில்லை"
#: ../js/ui/lookingGlass.js:687
#: ../js/ui/lookingGlass.js:691
msgid "Enabled"
msgstr "செயலாக்கப்பட்டது"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "செயல்நீக்கப்பட்டது"
#: ../js/ui/lookingGlass.js:691
#: ../js/ui/lookingGlass.js:695
msgid "Error"
msgstr "பிழை"
#: ../js/ui/lookingGlass.js:693
#: ../js/ui/lookingGlass.js:697
msgid "Out of date"
msgstr "காலாவதியானது"
#: ../js/ui/lookingGlass.js:695
#: ../js/ui/lookingGlass.js:699
msgid "Downloading"
msgstr "பதிவிறக்குகிறது"
#: ../js/ui/lookingGlass.js:720
#: ../js/ui/lookingGlass.js:724
msgid "View Source"
msgstr "மூலத்தை பார்க்க"
#: ../js/ui/lookingGlass.js:726
#: ../js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "இணைய பக்கம்"
#: ../js/ui/messageTray.js:1188
#: ../js/ui/messageTray.js:1189
msgid "Open"
msgstr "திற"
#: ../js/ui/messageTray.js:2367
#: ../js/ui/messageTray.js:2368
msgid "System Information"
msgstr "கணினி தகவல்கள்"
@ -732,14 +736,14 @@ msgid "Dash"
msgstr "டேஷ்போர்ட்"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:538
#: ../js/ui/panel.js:539
#, c-format
msgid "Quit %s"
msgstr "%s லிருந்து வெளியேறு"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:575
msgid "Activities"
msgstr "செயல்பாடுகள்"
@ -820,9 +824,10 @@ msgstr "பெரிதாக்கு"
#. let screenReader = this._buildItem(_("Screen Reader"), APPLICATIONS_SCHEMA,
#. 'screen-reader-enabled');
#. this.menu.addMenuItem(screenReader);
#. let screenKeyboard = this._buildItem(_("Screen Keyboard"), APPLICATIONS_SCHEMA,
#. 'screen-keyboard-enabled');
#. this.menu.addMenuItem(screenKeyboard);
#: ../js/ui/status/accessibility.js:71
msgid "Screen Keyboard"
msgstr "திரை விசைப்பலகை"
#: ../js/ui/status/accessibility.js:75
msgid "Visual Alerts"
msgstr "காட்சி எச்சரிக்கைகள்"
@ -941,7 +946,7 @@ msgstr "எப்போதும் அணுகலை அளி"
msgid "Grant this time only"
msgstr "இம்முறை மட்டும் அணுகலை அளி"
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
msgid "Reject"
msgstr "மறு"
@ -981,11 +986,11 @@ msgstr "சாதனத்தின் சொல்லும் பின் ஐ
msgid "OK"
msgstr "சரி"
#: ../js/ui/status/keyboard.js:71
#: ../js/ui/status/keyboard.js:72
msgid "Show Keyboard Layout"
msgstr "விசைப்பலகை இடவமைவை காட்டுக"
#: ../js/ui/status/keyboard.js:75
#: ../js/ui/status/keyboard.js:77
msgid "Region and Language Settings"
msgstr " வட்டாரம் மற்றும் மொழி அமைப்பு"
@ -1090,27 +1095,19 @@ msgstr "விபிஎன் இணைப்புகள்"
msgid "Network Settings"
msgstr "வலைப்பின்னல் அமைப்புகள்"
#: ../js/ui/status/network.js:1747
msgid "Connectivity lost"
msgstr "இணைப்பு அற்றுப்போயிற்று"
#: ../js/ui/status/network.js:1748
msgid "You are no longer connected to the network"
msgstr "நீங்கள் இப்போது பிணையத்துடன் இணைக்கப்படவில்லை"
#: ../js/ui/status/network.js:1756
#: ../js/ui/status/network.js:1749
msgid "Connection failed"
msgstr "இணைப்பு தோல்வியுற்றது"
#: ../js/ui/status/network.js:1757
#: ../js/ui/status/network.js:1750
msgid "Activation of network connection failed"
msgstr "வலைப்பின்னல் இணைப்பு செயலாக்கம் தோல்வி அடைந்தது"
#: ../js/ui/status/network.js:2008
#: ../js/ui/status/network.js:2000
msgid "Networking is disabled"
msgstr "வலைப்பின்னல் செயல் நீக்கப்பட்டது"
#: ../js/ui/status/network.js:2133
#: ../js/ui/status/network.js:2125
msgid "Network Manager"
msgstr "வலைப்பின்னல் மேலாளர்"
@ -1213,44 +1210,44 @@ msgstr "ஒலிவாங்கி"
#. We got the TpContact
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:256
#: ../js/ui/telepathyClient.js:259
msgid "Invitation"
msgstr "அழைப்பு"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:322
#: ../js/ui/telepathyClient.js:325
msgid "Call"
msgstr "அழை"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:350
#: ../js/ui/telepathyClient.js:353
msgid "File Transfer"
msgstr "கோப்பு பறிமாற்றம் "
#: ../js/ui/telepathyClient.js:432
#: ../js/ui/telepathyClient.js:434
msgid "Subscription request"
msgstr "சந்தா வேண்டுதல்"
#: ../js/ui/telepathyClient.js:460
#: ../js/ui/telepathyClient.js:470
msgid "Connection error"
msgstr "இணைப்பு பிழை"
#: ../js/ui/telepathyClient.js:722
#: ../js/ui/telepathyClient.js:733
#, c-format
msgid "%s is online."
msgstr "%s இணைப்பில்"
#: ../js/ui/telepathyClient.js:727
#: ../js/ui/telepathyClient.js:738
#, c-format
msgid "%s is offline."
msgstr "%s இணைப்பு விலகி"
#: ../js/ui/telepathyClient.js:730
#: ../js/ui/telepathyClient.js:741
#, c-format
msgid "%s is away."
msgstr "%s வெளியே "
#: ../js/ui/telepathyClient.js:733
#: ../js/ui/telepathyClient.js:744
#, c-format
msgid "%s is busy."
msgstr "%s வேலையில்"
@ -1258,35 +1255,35 @@ msgstr "%s வேலையில்"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:967
#: ../js/ui/telepathyClient.js:978
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr " <b>%X</b> போது <b>%A</b> %A அன்று அனுப்பியது"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/telepathyClient.js:973
#: ../js/ui/telepathyClient.js:984
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "<b>%A</b>, <b>%B %d</b> அன்று அனுப்பியது"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/telepathyClient.js:978
#: ../js/ui/telepathyClient.js:989
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr " <b>%A</b>, <b>%B %d</b>, %Y அன்று அனுப்பியது"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:1020
#: ../js/ui/telepathyClient.js:1031
#, c-format
msgid "%s is now known as %s"
msgstr "%s இப்போது %s ஆனார்"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1129
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "Invitation to %s"
msgstr "%s க்கு அழைப்பு"
@ -1294,34 +1291,34 @@ msgstr "%s க்கு அழைப்பு"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/telepathyClient.js:1137
#: ../js/ui/telepathyClient.js:1148
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s உங்களை %s உடன் சேர அழைக்கிறார்."
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
#: ../js/ui/telepathyClient.js:1332
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
#: ../js/ui/telepathyClient.js:1343
msgid "Decline"
msgstr "நிராகரி"
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
#: ../js/ui/telepathyClient.js:1344
msgid "Accept"
msgstr "ஏற்றுக்கொள்"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1173
#: ../js/ui/telepathyClient.js:1184
#, c-format
msgid "Video call from %s"
msgstr "%s இடமிருந்து விடியோ அழைப்பு"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1176
#: ../js/ui/telepathyClient.js:1187
#, c-format
msgid "Call from %s"
msgstr "%s இடமிருந்து அழைப்பு"
#: ../js/ui/telepathyClient.js:1186
#: ../js/ui/telepathyClient.js:1197
msgid "Answer"
msgstr "பதிலளி"
@ -1330,108 +1327,108 @@ msgstr "பதிலளி"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1222
#: ../js/ui/telepathyClient.js:1233
#, c-format
msgid "%s is sending you %s"
msgstr "%s உங்களுக்கு %s அனுப்புகிறார்"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1308
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s நீங்கள் இணைப்பில் இருக்கும் போது காண அனுமதி வேண்டுகிறார். "
#: ../js/ui/telepathyClient.js:1395
#: ../js/ui/telepathyClient.js:1406
msgid "Network error"
msgstr "வலையமைப்பு பிழை"
#: ../js/ui/telepathyClient.js:1397
#: ../js/ui/telepathyClient.js:1408
msgid "Authentication failed"
msgstr "உறுதி செய்தல் தோல்வி"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1410
msgid "Encryption error"
msgstr "மறையாக்க பிழை"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1412
msgid "Certificate not provided"
msgstr "சான்றிதழ் தரப்படவில்லை"
#: ../js/ui/telepathyClient.js:1403
#: ../js/ui/telepathyClient.js:1414
msgid "Certificate untrusted"
msgstr "சான்றிதழில் நம்பக தன்மை இல்லை"
#: ../js/ui/telepathyClient.js:1405
#: ../js/ui/telepathyClient.js:1416
msgid "Certificate expired"
msgstr "சான்றிதழ் காலாவதியானது"
#: ../js/ui/telepathyClient.js:1407
#: ../js/ui/telepathyClient.js:1418
msgid "Certificate not activated"
msgstr "சான்றிதழ் செயல்படுத்தப்படவில்லை"
#: ../js/ui/telepathyClient.js:1409
#: ../js/ui/telepathyClient.js:1420
msgid "Certificate hostname mismatch"
msgstr "சான்றிதழ் புரவலன் பெயர் ஒத்திசையவில்லை"
#: ../js/ui/telepathyClient.js:1411
#: ../js/ui/telepathyClient.js:1422
msgid "Certificate fingerprint mismatch"
msgstr "சான்றிதழ் அடையாளம் ஒத்திசையவில்லை"
#: ../js/ui/telepathyClient.js:1413
#: ../js/ui/telepathyClient.js:1424
msgid "Certificate self-signed"
msgstr "சான்றிதழ் தானே கையெழுத்திட்டது"
#: ../js/ui/telepathyClient.js:1415
#: ../js/ui/telepathyClient.js:1426
msgid "Status is set to offline"
msgstr "நிலை இப்போது இணைப்பு விலகி "
#: ../js/ui/telepathyClient.js:1417
#: ../js/ui/telepathyClient.js:1428
msgid "Encryption is not available"
msgstr "குறீயீட்டுமுறை கிடைப்பில் இல்லை"
#: ../js/ui/telepathyClient.js:1419
#: ../js/ui/telepathyClient.js:1430
msgid "Certificate is invalid"
msgstr "சான்றிதழ் செல்லுபடியாகாது"
#: ../js/ui/telepathyClient.js:1421
#: ../js/ui/telepathyClient.js:1432
msgid "Connection has been refused"
msgstr "இணைப்பு மறுக்கப்பட்டது"
#: ../js/ui/telepathyClient.js:1423
#: ../js/ui/telepathyClient.js:1434
msgid "Connection can't be established"
msgstr "இணைக்க முடியவில்லை"
#: ../js/ui/telepathyClient.js:1425
#: ../js/ui/telepathyClient.js:1436
msgid "Connection has been lost"
msgstr "இணைப்பு அற்றுப்போயிற்று"
#: ../js/ui/telepathyClient.js:1427
#: ../js/ui/telepathyClient.js:1438
msgid "This resource is already connected to the server"
msgstr "இந்த மூலம் ஏற்கனவே சேவையகத்துக்கு இணைக்கப்பட்டது"
#: ../js/ui/telepathyClient.js:1429
#: ../js/ui/telepathyClient.js:1440
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "இணைப்பு அதே முலத்துடன் புதிய இணைப்பால் மாற்றப்பட்டது."
#: ../js/ui/telepathyClient.js:1431
#: ../js/ui/telepathyClient.js:1442
msgid "The account already exists on the server"
msgstr "இந்த கணக்கு ஏற்கனவே சேவையகத்தில் உள்ளது"
#: ../js/ui/telepathyClient.js:1433
#: ../js/ui/telepathyClient.js:1444
msgid "Server is currently too busy to handle the connection"
msgstr "இணைப்பை கையாள சேவையகம் இப்போது மிகவும் வேலை பளுவில் உள்ளது."
#: ../js/ui/telepathyClient.js:1435
#: ../js/ui/telepathyClient.js:1446
msgid "Certificate has been revoked"
msgstr "சான்றிதழ் ரத்து செய்யப்பட்டது"
#: ../js/ui/telepathyClient.js:1437
#: ../js/ui/telepathyClient.js:1448
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"சான்றிதழ் பாதுகாப்பில்லாத சைபர் அல்கோரிதத்தை பயன்படுத்துகிறது. இது மறையாக்கத்தில் "
"பலகீனமானது."
#: ../js/ui/telepathyClient.js:1439
#: ../js/ui/telepathyClient.js:1450
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1441,23 +1438,23 @@ msgstr ""
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1448
#: ../js/ui/telepathyClient.js:1459
#, c-format
msgid "Connection to %s failed"
msgstr " %s க்கு இணைப்பு தோல்வி அடைந்தது"
#: ../js/ui/telepathyClient.js:1455
msgid "Unknown reason"
msgstr "தெரியாத காரணம்"
#: ../js/ui/telepathyClient.js:1462
#: ../js/ui/telepathyClient.js:1468
msgid "Reconnect"
msgstr "மீள் இணை"
#: ../js/ui/telepathyClient.js:1463
#: ../js/ui/telepathyClient.js:1469
msgid "Edit account"
msgstr "கணக்கை திருத்துக"
#: ../js/ui/telepathyClient.js:1515
msgid "Unknown reason"
msgstr "தெரியாத காரணம்"
#: ../js/ui/userMenu.js:153
msgid "Hidden"
msgstr "மறைக்கப்பட்டது"
@ -1470,38 +1467,46 @@ msgstr "சும்மாயிருத்தல் "
msgid "Unavailable"
msgstr "இருப்பில் இல்லை"
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:592
msgid "Power Off..."
msgstr "மின்சக்தி நிறுத்து..."
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
msgid "Suspend"
msgstr "இடைநிறுத்தம்."
#: ../js/ui/userMenu.js:551
#: ../js/ui/userMenu.js:554
msgid "Notifications"
msgstr "அறிவிப்புகள்"
#: ../js/ui/userMenu.js:559
#: ../js/ui/userMenu.js:562
msgid "Online Accounts"
msgstr "ஆன் லைன் கணக்குகள்"
#: ../js/ui/userMenu.js:563
#: ../js/ui/userMenu.js:566
msgid "System Settings"
msgstr "கணினி அமைப்புகள்"
#: ../js/ui/userMenu.js:570
#: ../js/ui/userMenu.js:573
msgid "Lock Screen"
msgstr "திரையைப் பூட்டுக."
#: ../js/ui/userMenu.js:575
#: ../js/ui/userMenu.js:578
msgid "Switch User"
msgstr "பயனர் மாற்று"
#: ../js/ui/userMenu.js:580
#: ../js/ui/userMenu.js:583
msgid "Log Out..."
msgstr "வெளியேறு..."
#: ../js/ui/userMenu.js:611
msgid "Your chat status will be set to busy"
msgstr "உங்கள் நடப்பு நிலையை வேலையில் என அமைக்கப்பட்டது"
#: ../js/ui/userMenu.js:612
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
msgstr ""
"அறிவிப்புகள் இப்போது செயல் நீக்கப்பட்டன. இது அரட்டை செய்திகளையும் உள்லடக்கும். உங்கள் "
"வலைஇணைப்பு நிலை நீங்கள் மற்றவர் செய்திகளை காணமாட்டீர்கள் என மாற்றி அமைக்கப்பட்டது"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@ -1591,6 +1596,18 @@ msgstr "கோப்பு அமைப்பு"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "If true, display onscreen keyboard."
#~ msgstr "உண்மையானால் திரை விசைப்பலகையை காட்டவும்."
#~ msgid "Show the onscreen keyboard"
#~ msgstr "திரை விசைப்பலகையை காட்டவும்"
#~ msgid "Connectivity lost"
#~ msgstr "இணைப்பு அற்றுப்போயிற்று"
#~ msgid "You are no longer connected to the network"
#~ msgstr "நீங்கள் இப்போது பிணையத்துடன் இணைக்கப்படவில்லை"
#~ msgid "Do Not Disturb"
#~ msgstr "தொந்திரவு செய்யாதே"
@ -1833,9 +1850,6 @@ msgstr "%1$s: %2$s"
#~ msgid "Shut Down..."
#~ msgstr "நிறுத்தவும்... "
#~ msgid "Screen Reader"
#~ msgstr "திரைபடிப்பான்"
#~ msgid "Search your computer"
#~ msgstr "உங்கள் கணினியில் தேடுக"

1137
po/te.po

File diff suppressed because it is too large Load Diff

921
po/vi.po

File diff suppressed because it is too large Load Diff

View File

@ -14,16 +14,15 @@
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-09-11 10:39+0000\n"
"PO-Revision-Date: 2011-09-13 11:51+0800\n"
"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-09-19 09:24+0000\n"
"PO-Revision-Date: 2011-09-19 09:25+0000\n"
"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../data/gnome-shell.desktop.in.in.h:1
@ -185,36 +184,55 @@ msgstr "使用哪个键盘"
msgid "disabled OpenSearch providers"
msgstr "已禁用的 OpenSearch 提供商"
#: ../js/gdm/loginDialog.js:604
#: ../js/gdm/loginDialog.js:617
msgid "Session..."
msgstr "会话..."
#: ../js/gdm/loginDialog.js:761
#| msgid "Sign In"
#: ../js/gdm/loginDialog.js:785
msgctxt "title"
msgid "Sign In"
msgstr "登录"
#: ../js/gdm/loginDialog.js:818
#. translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/loginDialog.js:830
msgid "(or swipe finger)"
msgstr "(或滑动手指)"
#: ../js/gdm/loginDialog.js:848
msgid "Not listed?"
msgstr "未列出?"
#: ../js/gdm/loginDialog.js:928 ../js/ui/endSessionDialog.js:410
#: ../js/ui/networkAgent.js:158 ../js/ui/polkitAuthenticationAgent.js:170
#: ../js/ui/status/bluetooth.js:480
#: ../js/gdm/loginDialog.js:1004 ../js/ui/endSessionDialog.js:426
#: ../js/ui/extensionSystem.js:477 ../js/ui/networkAgent.js:158
#: ../js/ui/polkitAuthenticationAgent.js:170 ../js/ui/status/bluetooth.js:480
msgid "Cancel"
msgstr "取消"
#: ../js/gdm/loginDialog.js:933
#| msgid "Sign In"
#: ../js/gdm/loginDialog.js:1009
msgctxt "button"
msgid "Sign In"
msgstr "登录"
#: ../js/gdm/loginDialog.js:1253
#: ../js/gdm/loginDialog.js:1358
msgid "Login Window"
msgstr "登录窗口"
#: ../js/gdm/powerMenu.js:116 ../js/ui/userMenu.js:520
#: ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:591
msgid "Suspend"
msgstr "挂起"
#: ../js/gdm/powerMenu.js:121 ../js/ui/endSessionDialog.js:89
#: ../js/ui/endSessionDialog.js:97 ../js/ui/endSessionDialog.js:106
msgid "Restart"
msgstr "重启"
#: ../js/gdm/powerMenu.js:126 ../js/ui/endSessionDialog.js:80
#: ../js/ui/endSessionDialog.js:91
msgid "Power Off"
msgstr "关机"
#: ../js/misc/util.js:92
msgid "Command not found"
msgstr "命令未找到"
@ -243,15 +261,15 @@ msgstr "应用程序"
msgid "SETTINGS"
msgstr "设置"
#: ../js/ui/appDisplay.js:685
#: ../js/ui/appDisplay.js:684
msgid "New Window"
msgstr "新窗口"
#: ../js/ui/appDisplay.js:688
#: ../js/ui/appDisplay.js:687
msgid "Remove from Favorites"
msgstr "从收藏夹中移除"
#: ../js/ui/appDisplay.js:689
#: ../js/ui/appDisplay.js:688
msgid "Add to Favorites"
msgstr "添加到收藏夹"
@ -445,7 +463,7 @@ msgstr "离线"
msgid "CONTACTS"
msgstr "联系人"
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1195
#: ../js/ui/dash.js:172 ../js/ui/messageTray.js:1196
msgid "Remove"
msgstr "移除"
@ -513,7 +531,7 @@ msgstr "最近项目"
msgid "Log Out %s"
msgstr "注销 %s"
#: ../js/ui/endSessionDialog.js:61 ../js/ui/endSessionDialog.js:67
#: ../js/ui/endSessionDialog.js:61 ../js/ui/endSessionDialog.js:75
msgid "Log Out"
msgstr "注销"
@ -521,98 +539,102 @@ msgstr "注销"
msgid "Click Log Out to quit these applications and log out of the system."
msgstr "点“注销“来退出这些应用程序及系统"
#: ../js/ui/endSessionDialog.js:63
#, c-format
msgid "%s will be logged out automatically in %d seconds."
msgstr "%s 将在 %d 秒后自动注销。"
#: ../js/ui/endSessionDialog.js:64
#, c-format
msgid "You will be logged out automatically in %d seconds."
msgstr "您将在 %d 秒后自动注销。"
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s 将在 %d 秒后自动注销。"
#: ../js/ui/endSessionDialog.js:65
#: ../js/ui/endSessionDialog.js:69
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "您将在 %d 秒后自动注销。"
#: ../js/ui/endSessionDialog.js:73
msgid "Logging out of the system."
msgstr "从系统注销"
#: ../js/ui/endSessionDialog.js:72 ../js/ui/endSessionDialog.js:79
msgid "Power Off"
msgstr "关机"
#: ../js/ui/endSessionDialog.js:73
#: ../js/ui/endSessionDialog.js:81
msgid "Click Power Off to quit these applications and power off the system."
msgstr "点击关机以退出应用程序并关闭系统。"
#: ../js/ui/endSessionDialog.js:74
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d seconds."
msgstr "系统将在 %d 秒后自动关机。"
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "系统将在 %d 秒后自动关机。"
#: ../js/ui/endSessionDialog.js:75
#: ../js/ui/endSessionDialog.js:87
msgid "Powering off the system."
msgstr "关闭系统。"
#: ../js/ui/endSessionDialog.js:77 ../js/ui/endSessionDialog.js:85
#: ../js/ui/endSessionDialog.js:90
msgid "Restart"
msgstr "重启"
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:98
msgid "Click Restart to quit these applications and restart the system."
msgstr "点“重启“来退出这些应用程序并重启系统"
#: ../js/ui/endSessionDialog.js:87
#: ../js/ui/endSessionDialog.js:100
#, c-format
msgid "The system will restart automatically in %d seconds."
msgstr "系统将在 %d 秒后自动重启。"
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "系统将在 %d 秒后自动重启。"
#: ../js/ui/endSessionDialog.js:88
#: ../js/ui/endSessionDialog.js:104
msgid "Restarting the system."
msgstr "重启计算机。"
msgstr "重启系统。"
#: ../js/ui/extensionSystem.js:481
msgid "Install"
msgstr "安装"
#: ../js/ui/extensionSystem.js:485
#, c-format
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "从 extensions.gnome.org 下载并安装 %s"
#: ../js/ui/keyboard.js:513 ../js/ui/status/power.js:211
msgid "Keyboard"
msgstr "键盘"
#: ../js/ui/lookingGlass.js:641
#: ../js/ui/lookingGlass.js:645
msgid "No extensions installed"
msgstr "未安装扩展"
#: ../js/ui/lookingGlass.js:687
#: ../js/ui/lookingGlass.js:691
msgid "Enabled"
msgstr "已启用"
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:689 ../src/gvc/gvc-mixer-control.c:1093
#: ../js/ui/lookingGlass.js:693 ../src/gvc/gvc-mixer-control.c:1093
msgid "Disabled"
msgstr "已禁用"
#: ../js/ui/lookingGlass.js:691
#: ../js/ui/lookingGlass.js:695
msgid "Error"
msgstr "错误"
#: ../js/ui/lookingGlass.js:693
#: ../js/ui/lookingGlass.js:697
msgid "Out of date"
msgstr "过时"
#: ../js/ui/lookingGlass.js:695
#: ../js/ui/lookingGlass.js:699
msgid "Downloading"
msgstr "正在下载"
#: ../js/ui/lookingGlass.js:720
#: ../js/ui/lookingGlass.js:724
msgid "View Source"
msgstr "查看源"
#: ../js/ui/lookingGlass.js:726
#: ../js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "网页"
#: ../js/ui/messageTray.js:1188
#: ../js/ui/messageTray.js:1189
msgid "Open"
msgstr "打开"
#: ../js/ui/messageTray.js:2367
#: ../js/ui/messageTray.js:2368
msgid "System Information"
msgstr "系统信息"
@ -718,14 +740,14 @@ msgid "Dash"
msgstr "Dash"
#. TODO - _quit() doesn't really work on apps in state STARTING yet
#: ../js/ui/panel.js:538
#: ../js/ui/panel.js:539
#, c-format
msgid "Quit %s"
msgstr "退出 %s"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:574
#: ../js/ui/panel.js:575
msgid "Activities"
msgstr "活动"
@ -927,7 +949,7 @@ msgstr "始终允许"
msgid "Grant this time only"
msgstr "允许一次"
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1185
#: ../js/ui/status/bluetooth.js:392 ../js/ui/telepathyClient.js:1196
msgid "Reject"
msgstr "拒绝"
@ -967,11 +989,11 @@ msgstr "请输入设备上的 PIN 码。"
msgid "OK"
msgstr "确定"
#: ../js/ui/status/keyboard.js:71
#: ../js/ui/status/keyboard.js:72
msgid "Show Keyboard Layout"
msgstr "显示键盘布局"
#: ../js/ui/status/keyboard.js:75
#: ../js/ui/status/keyboard.js:77
msgid "Region and Language Settings"
msgstr "区域和语言设置"
@ -1076,27 +1098,19 @@ msgstr "VPN 连接"
msgid "Network Settings"
msgstr "网络设置"
#: ../js/ui/status/network.js:1747
msgid "Connectivity lost"
msgstr "连接丢失"
#: ../js/ui/status/network.js:1748
msgid "You're no longer connected to the network"
msgstr "您已不再连接到该网络"
#: ../js/ui/status/network.js:1756
#: ../js/ui/status/network.js:1749
msgid "Connection failed"
msgstr "连接失败"
#: ../js/ui/status/network.js:1757
#: ../js/ui/status/network.js:1750
msgid "Activation of network connection failed"
msgstr "启用网络连接失败"
#: ../js/ui/status/network.js:2008
#: ../js/ui/status/network.js:2000
msgid "Networking is disabled"
msgstr "联网已禁用"
#: ../js/ui/status/network.js:2133
#: ../js/ui/status/network.js:2125
msgid "Network Manager"
msgstr "网络管理器"
@ -1138,6 +1152,12 @@ msgid "%d minute remaining"
msgid_plural "%d minutes remaining"
msgstr[0] "剩余 %d 分钟"
#: ../js/ui/status/power.js:121 ../js/ui/status/power.js:194
#, c-format
msgctxt "percent of battery remaining"
msgid "%d%%"
msgstr "%d%%"
#: ../js/ui/status/power.js:201
msgid "AC adapter"
msgstr "AC 适配器"
@ -1189,44 +1209,44 @@ msgstr "麦克风"
#. We got the TpContact
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
#: ../js/ui/telepathyClient.js:256
#: ../js/ui/telepathyClient.js:259
msgid "Invitation"
msgstr "邀请"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:322
#: ../js/ui/telepathyClient.js:325
msgid "Call"
msgstr "呼叫"
#. We got the TpContact
#: ../js/ui/telepathyClient.js:350
#: ../js/ui/telepathyClient.js:353
msgid "File Transfer"
msgstr "文件传送"
#: ../js/ui/telepathyClient.js:432
#: ../js/ui/telepathyClient.js:434
msgid "Subscription request"
msgstr "订阅请求"
#: ../js/ui/telepathyClient.js:460
#: ../js/ui/telepathyClient.js:470
msgid "Connection error"
msgstr "连接错误"
#: ../js/ui/telepathyClient.js:722
#: ../js/ui/telepathyClient.js:733
#, c-format
msgid "%s is online."
msgstr "%s 在线。"
#: ../js/ui/telepathyClient.js:727
#: ../js/ui/telepathyClient.js:738
#, c-format
msgid "%s is offline."
msgstr "%s 离线。"
#: ../js/ui/telepathyClient.js:730
#: ../js/ui/telepathyClient.js:741
#, c-format
msgid "%s is away."
msgstr "%s 离开。"
#: ../js/ui/telepathyClient.js:733
#: ../js/ui/telepathyClient.js:744
#, c-format
msgid "%s is busy."
msgstr "%s 忙碌。"
@ -1234,35 +1254,35 @@ msgstr "%s 忙碌。"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/telepathyClient.js:967
#: ../js/ui/telepathyClient.js:978
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "发送于 <b>%X</b>,在 <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/telepathyClient.js:973
#: ../js/ui/telepathyClient.js:984
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "发送于 <b>%A</b><b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/telepathyClient.js:978
#: ../js/ui/telepathyClient.js:989
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "发送于 <b>%A</b><b>%B %d</b>%Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/telepathyClient.js:1020
#: ../js/ui/telepathyClient.js:1031
#, c-format
msgid "%s is now known as %s"
msgstr "%s 现在叫做 %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/telepathyClient.js:1129
#: ../js/ui/telepathyClient.js:1140
#, c-format
msgid "Invitation to %s"
msgstr "邀请 %s"
@ -1270,34 +1290,34 @@ msgstr "邀请 %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/telepathyClient.js:1137
#: ../js/ui/telepathyClient.js:1148
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s 要请您加入 %s"
#: ../js/ui/telepathyClient.js:1139 ../js/ui/telepathyClient.js:1228
#: ../js/ui/telepathyClient.js:1332
#: ../js/ui/telepathyClient.js:1150 ../js/ui/telepathyClient.js:1239
#: ../js/ui/telepathyClient.js:1343
msgid "Decline"
msgstr "拒绝"
#: ../js/ui/telepathyClient.js:1140 ../js/ui/telepathyClient.js:1229
#: ../js/ui/telepathyClient.js:1333
#: ../js/ui/telepathyClient.js:1151 ../js/ui/telepathyClient.js:1240
#: ../js/ui/telepathyClient.js:1344
msgid "Accept"
msgstr "接受"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1173
#: ../js/ui/telepathyClient.js:1184
#, c-format
msgid "Video call from %s"
msgstr "来自 %s 的视频呼叫"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/telepathyClient.js:1176
#: ../js/ui/telepathyClient.js:1187
#, c-format
msgid "Call from %s"
msgstr "来自 %s 的呼叫"
#: ../js/ui/telepathyClient.js:1186
#: ../js/ui/telepathyClient.js:1197
msgid "Answer"
msgstr "接听"
@ -1306,108 +1326,108 @@ msgstr "接听"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/telepathyClient.js:1222
#: ../js/ui/telepathyClient.js:1233
#, c-format
msgid "%s is sending you %s"
msgstr "%s 正在向您发送 %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/telepathyClient.js:1297
#: ../js/ui/telepathyClient.js:1308
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s 想得到授权来查看您的在线状态"
#: ../js/ui/telepathyClient.js:1395
#: ../js/ui/telepathyClient.js:1406
msgid "Network error"
msgstr "网络错误"
#: ../js/ui/telepathyClient.js:1397
#: ../js/ui/telepathyClient.js:1408
msgid "Authentication failed"
msgstr "认证失败"
#: ../js/ui/telepathyClient.js:1399
#: ../js/ui/telepathyClient.js:1410
msgid "Encryption error"
msgstr "加密错误"
#: ../js/ui/telepathyClient.js:1401
#: ../js/ui/telepathyClient.js:1412
msgid "Certificate not provided"
msgstr "未提供证书"
#: ../js/ui/telepathyClient.js:1403
#: ../js/ui/telepathyClient.js:1414
msgid "Certificate untrusted"
msgstr "证书不受信任"
#: ../js/ui/telepathyClient.js:1405
#: ../js/ui/telepathyClient.js:1416
msgid "Certificate expired"
msgstr "证书过期"
#: ../js/ui/telepathyClient.js:1407
#: ../js/ui/telepathyClient.js:1418
msgid "Certificate not activated"
msgstr "证书未激活"
#: ../js/ui/telepathyClient.js:1409
#: ../js/ui/telepathyClient.js:1420
msgid "Certificate hostname mismatch"
msgstr "证书的主机名不匹配"
#: ../js/ui/telepathyClient.js:1411
#: ../js/ui/telepathyClient.js:1422
msgid "Certificate fingerprint mismatch"
msgstr "证书的指纹不匹配"
#: ../js/ui/telepathyClient.js:1413
#: ../js/ui/telepathyClient.js:1424
msgid "Certificate self-signed"
msgstr "证书是自已签发的"
#: ../js/ui/telepathyClient.js:1415
#: ../js/ui/telepathyClient.js:1426
msgid "Status is set to offline"
msgstr "已将状态设为离线。"
#: ../js/ui/telepathyClient.js:1417
#: ../js/ui/telepathyClient.js:1428
msgid "Encryption is not available"
msgstr "加密不可用"
#: ../js/ui/telepathyClient.js:1419
#: ../js/ui/telepathyClient.js:1430
msgid "Certificate is invalid"
msgstr "证书无效"
#: ../js/ui/telepathyClient.js:1421
#: ../js/ui/telepathyClient.js:1432
msgid "Connection has been refused"
msgstr "连接被拒绝"
#: ../js/ui/telepathyClient.js:1423
#: ../js/ui/telepathyClient.js:1434
msgid "Connection can't be established"
msgstr "无法建立连接"
#: ../js/ui/telepathyClient.js:1425
#: ../js/ui/telepathyClient.js:1436
msgid "Connection has been lost"
msgstr "连接丢失"
#: ../js/ui/telepathyClient.js:1427
#: ../js/ui/telepathyClient.js:1438
msgid "This resource is already connected to the server"
msgstr "此资源已经连接到服务器"
#: ../js/ui/telepathyClient.js:1429
#: ../js/ui/telepathyClient.js:1440
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "连接已经被使用相同资源的新连接所替换"
#: ../js/ui/telepathyClient.js:1431
#: ../js/ui/telepathyClient.js:1442
msgid "The account already exists on the server"
msgstr "服务器上已经存在该账户"
#: ../js/ui/telepathyClient.js:1433
#: ../js/ui/telepathyClient.js:1444
msgid "Server is currently too busy to handle the connection"
msgstr "服务器太忙,暂时无法处理该连接"
#: ../js/ui/telepathyClient.js:1435
#: ../js/ui/telepathyClient.js:1446
msgid "Certificate has been revoked"
msgstr "证书已撤销"
#: ../js/ui/telepathyClient.js:1437
#: ../js/ui/telepathyClient.js:1448
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "证书使用了不安全的加密算法或加密很弱"
#: ../js/ui/telepathyClient.js:1439
#: ../js/ui/telepathyClient.js:1450
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -1415,23 +1435,23 @@ msgstr "服务器证书的长度或证书链的长度超过了加密算法库的
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/telepathyClient.js:1448
#: ../js/ui/telepathyClient.js:1459
#, c-format
msgid "Connection to %s failed"
msgstr "连接 %s 失败"
#: ../js/ui/telepathyClient.js:1455
msgid "Unknown reason"
msgstr "未知原因"
#: ../js/ui/telepathyClient.js:1462
#: ../js/ui/telepathyClient.js:1468
msgid "Reconnect"
msgstr "重新连接"
#: ../js/ui/telepathyClient.js:1463
#: ../js/ui/telepathyClient.js:1469
msgid "Edit account"
msgstr "编辑帐户"
#: ../js/ui/telepathyClient.js:1515
msgid "Unknown reason"
msgstr "未知原因"
#: ../js/ui/userMenu.js:153
msgid "Hidden"
msgstr "隐身"
@ -1444,39 +1464,46 @@ msgstr "空闲"
msgid "Unavailable"
msgstr "不可用"
#: ../js/ui/userMenu.js:516 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:589
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:522 ../js/ui/userMenu.js:592
msgid "Power Off..."
msgstr "关机..."
#: ../js/ui/userMenu.js:518 ../js/ui/userMenu.js:520 ../js/ui/userMenu.js:588
msgid "Suspend"
msgstr "挂起"
#: ../js/ui/userMenu.js:551
#| msgid "Applications"
#: ../js/ui/userMenu.js:554
msgid "Notifications"
msgstr "提示"
#: ../js/ui/userMenu.js:559
#: ../js/ui/userMenu.js:562
msgid "Online Accounts"
msgstr "在线帐户"
#: ../js/ui/userMenu.js:563
#: ../js/ui/userMenu.js:566
msgid "System Settings"
msgstr "系统设置"
#: ../js/ui/userMenu.js:570
#: ../js/ui/userMenu.js:573
msgid "Lock Screen"
msgstr "锁定"
#: ../js/ui/userMenu.js:575
#: ../js/ui/userMenu.js:578
msgid "Switch User"
msgstr "切换用户"
#: ../js/ui/userMenu.js:580
#: ../js/ui/userMenu.js:583
msgid "Log Out..."
msgstr "注销..."
#: ../js/ui/userMenu.js:611
msgid "Your chat status will be set to busy"
msgstr "您的聊天状态将被设置为忙碌"
#: ../js/ui/userMenu.js:612
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
msgstr ""
"提示现已禁用,聊天消息也同时被禁用。您的在线状态已被自动调整,以便他人知道您"
"可能无法看到消息。"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
@ -1564,6 +1591,12 @@ msgstr "文件系统"
msgid "%1$s: %2$s"
msgstr "%1$s: %2$s"
#~ msgid "Connectivity lost"
#~ msgstr "连接丢失"
#~ msgid "You're no longer connected to the network"
#~ msgstr "您已不再连接到该网络"
#~ msgid "Do Not Disturb"
#~ msgstr "请勿打扰"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@ typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
servicedir = $(datadir)/dbus-1/services
service_DATA = $(service_in_files:.service.in=.service)
$(service_DATA): $(service_in_files) Makefile
%.service: %.service.in Makefile
$(AM_V_GEN) \
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@

View File

@ -120,7 +120,7 @@ shell_dbus_init (gboolean replace)
/* ...and the on-screen keyboard service */
if (!dbus_g_proxy_call (bus, "RequestName", &error,
G_TYPE_STRING, "org.gnome.Caribou.Keyboard",
G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING | request_name_flags,
G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING,
G_TYPE_INVALID,
G_TYPE_UINT, &request_name_result,
G_TYPE_INVALID))

View File

@ -14,6 +14,8 @@ ShellApp* _shell_app_new_for_window (MetaWindow *window);
ShellApp* _shell_app_new (GMenuTreeEntry *entry);
void _shell_app_set_entry (ShellApp *app, GMenuTreeEntry *entry);
void _shell_app_handle_startup_sequence (ShellApp *app, SnStartupSequence *sequence);
void _shell_app_add_window (ShellApp *app, MetaWindow *window);

View File

@ -43,14 +43,13 @@ static guint signals[LAST_SIGNAL] = { 0 };
struct _ShellAppSystemPrivate {
GMenuTree *apps_tree;
GHashTable *entry_to_app;
GHashTable *running_apps;
GHashTable *id_to_app;
GSList *known_vendor_prefixes;
GMenuTree *settings_tree;
GHashTable *setting_entry_to_app;
GHashTable *setting_id_to_app;
};
static void shell_app_system_finalize (GObject *object);
@ -94,15 +93,13 @@ shell_app_system_init (ShellAppSystem *self)
SHELL_TYPE_APP_SYSTEM,
ShellAppSystemPrivate);
priv->running_apps = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL, (GDestroyNotify) g_object_unref);
priv->entry_to_app = g_hash_table_new_full (NULL, NULL,
(GDestroyNotify)gmenu_tree_item_unref,
(GDestroyNotify)g_object_unref);
priv->setting_entry_to_app = g_hash_table_new_full (NULL, NULL,
(GDestroyNotify)gmenu_tree_item_unref,
(GDestroyNotify)g_object_unref);
priv->running_apps = g_hash_table_new_full (NULL, NULL, (GDestroyNotify) g_object_unref, NULL);
priv->id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL,
(GDestroyNotify)g_object_unref);
priv->setting_id_to_app = g_hash_table_new_full (g_str_hash, g_str_equal,
NULL,
(GDestroyNotify)g_object_unref);
/* For now, we want to pick up Evince, Nautilus, etc. We'll
* handle NODISPLAY semantics at a higher level or investigate them
@ -128,8 +125,8 @@ shell_app_system_finalize (GObject *object)
g_object_unref (priv->settings_tree);
g_hash_table_destroy (priv->running_apps);
g_hash_table_destroy (priv->entry_to_app);
g_hash_table_destroy (priv->setting_entry_to_app);
g_hash_table_destroy (priv->id_to_app);
g_hash_table_destroy (priv->setting_id_to_app);
g_slist_foreach (priv->known_vendor_prefixes, (GFunc)g_free, NULL);
g_slist_free (priv->known_vendor_prefixes);
@ -245,42 +242,10 @@ get_prefix_for_entry (GMenuTreeEntry *entry)
}
static void
load_app_entry (ShellAppSystem *self,
GMenuTreeEntry *entry)
get_flattened_entries_recurse (GMenuTreeDirectory *dir,
GHashTable *entry_set)
{
char *prefix;
ShellApp *app;
if (g_hash_table_lookup (self->priv->entry_to_app, entry))
return;
prefix = get_prefix_for_entry (entry);
if (prefix
&& !g_slist_find_custom (self->priv->known_vendor_prefixes, prefix,
(GCompareFunc)g_strcmp0))
self->priv->known_vendor_prefixes = g_slist_append (self->priv->known_vendor_prefixes,
prefix);
else
g_free (prefix);
/* Here we check to see whether the app is still running; if so, we
* keep the old data around.
*/
app = g_hash_table_lookup (self->priv->running_apps, gmenu_tree_entry_get_desktop_file_id (entry));
if (app != NULL)
app = g_object_ref (app);
else
app = _shell_app_new (entry);
g_hash_table_insert (self->priv->entry_to_app, gmenu_tree_item_ref (entry), app);
}
static void
gather_apps_recurse (ShellAppSystem *self,
GMenuTreeDirectory *root)
{
GMenuTreeIter *iter = gmenu_tree_directory_iter (root);
GMenuTreeIter *iter = gmenu_tree_directory_iter (dir);
GMenuTreeItemType next_type;
while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID)
@ -291,14 +256,18 @@ gather_apps_recurse (ShellAppSystem *self,
{
case GMENU_TREE_ITEM_ENTRY:
{
item = gmenu_tree_iter_get_entry (iter);
load_app_entry (self, (GMenuTreeEntry*)item);
GMenuTreeEntry *entry;
item = entry = gmenu_tree_iter_get_entry (iter);
/* Key is owned by entry */
g_hash_table_replace (entry_set,
(char*)gmenu_tree_entry_get_desktop_file_id (entry),
gmenu_tree_item_ref (entry));
}
break;
case GMENU_TREE_ITEM_DIRECTORY:
{
item = gmenu_tree_iter_get_directory (iter);
gather_apps_recurse (self, (GMenuTreeDirectory*)item);
get_flattened_entries_recurse ((GMenuTreeDirectory*)item, entry_set);
}
break;
default:
@ -311,46 +280,24 @@ gather_apps_recurse (ShellAppSystem *self,
gmenu_tree_iter_unref (iter);
}
static void
gather_settings_recurse (ShellAppSystem *self,
GMenuTreeDirectory *root)
static GHashTable *
get_flattened_entries_from_tree (GMenuTree *tree)
{
GMenuTreeIter *iter = gmenu_tree_directory_iter (root);
GMenuTreeItemType next_type;
GHashTable *table;
GMenuTreeDirectory *root;
while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID)
{
gpointer item = NULL;
table = g_hash_table_new_full (g_str_hash, g_str_equal,
(GDestroyNotify) NULL,
(GDestroyNotify) gmenu_tree_item_unref);
switch (next_type)
{
case GMENU_TREE_ITEM_ENTRY:
{
ShellApp *app;
root = gmenu_tree_get_root_directory (tree);
if (root != NULL)
get_flattened_entries_recurse (root, table);
item = gmenu_tree_iter_get_entry (iter);
if (g_hash_table_lookup (self->priv->setting_entry_to_app, item))
return;
app = _shell_app_new (item);
g_hash_table_insert (self->priv->setting_entry_to_app, gmenu_tree_item_ref (item), app);
}
break;
case GMENU_TREE_ITEM_DIRECTORY:
{
item = gmenu_tree_iter_get_directory (iter);
gather_settings_recurse (self, (GMenuTreeDirectory*)item);
}
break;
default:
break;
}
if (item != NULL)
gmenu_tree_item_unref (item);
}
gmenu_tree_iter_unref (iter);
gmenu_tree_item_unref (root);
return table;
}
static void
@ -359,11 +306,14 @@ on_apps_tree_changed_cb (GMenuTree *tree,
{
ShellAppSystem *self = SHELL_APP_SYSTEM (user_data);
GError *error = NULL;
GMenuTreeDirectory *root;
GHashTable *new_apps;
GHashTableIter iter;
gpointer key, value;
GSList *removed_apps = NULL;
GSList *removed_node;
g_assert (tree == self->priv->apps_tree);
g_hash_table_remove_all (self->priv->entry_to_app);
g_slist_foreach (self->priv->known_vendor_prefixes, (GFunc)g_free, NULL);
g_slist_free (self->priv->known_vendor_prefixes);
self->priv->known_vendor_prefixes = NULL;
@ -374,13 +324,74 @@ on_apps_tree_changed_cb (GMenuTree *tree,
return;
}
root = gmenu_tree_get_root_directory (self->priv->apps_tree);
if (root)
new_apps = get_flattened_entries_from_tree (self->priv->apps_tree);
g_hash_table_iter_init (&iter, new_apps);
while (g_hash_table_iter_next (&iter, &key, &value))
{
gather_apps_recurse (self, root);
gmenu_tree_item_unref (root);
const char *id = key;
GMenuTreeEntry *entry = value;
GMenuTreeEntry *old_entry;
char *prefix;
ShellApp *app;
prefix = get_prefix_for_entry (entry);
if (prefix != NULL
&& !g_slist_find_custom (self->priv->known_vendor_prefixes, prefix,
(GCompareFunc)g_strcmp0))
self->priv->known_vendor_prefixes = g_slist_append (self->priv->known_vendor_prefixes,
prefix);
else
g_free (prefix);
app = g_hash_table_lookup (self->priv->id_to_app, id);
if (app != NULL)
{
/* We hold a reference to the original entry temporarily,
* because otherwise the hash table would be referencing
* potentially free'd memory until we replace it below with
* the new data.
*/
old_entry = shell_app_get_tree_entry (app);
gmenu_tree_item_ref (old_entry);
_shell_app_set_entry (app, entry);
g_object_ref (app); /* Extra ref, removed in _replace below */
}
else
{
old_entry = NULL;
app = _shell_app_new (entry);
}
/* Note that "id" is owned by app->entry. Since we're always
* setting a new entry, even if the app already exists in the
* hash table we need to replace the key so that the new id
* string is pointed to.
*/
g_hash_table_replace (self->priv->id_to_app, (char*)id, app);
if (old_entry)
gmenu_tree_item_unref (old_entry);
}
/* Now iterate over the apps again; we need to unreference any apps
* which have been removed. The JS code may still be holding a
* reference; that's fine.
*/
g_hash_table_iter_init (&iter, self->priv->id_to_app);
while (g_hash_table_iter_next (&iter, &key, &value))
{
const char *id = key;
if (!g_hash_table_lookup (new_apps, id))
removed_apps = g_slist_prepend (removed_apps, (char*)id);
}
for (removed_node = removed_apps; removed_node; removed_node = removed_node->next)
{
const char *id = removed_node->data;
g_hash_table_remove (self->priv->id_to_app, id);
}
g_slist_free (removed_apps);
g_hash_table_destroy (new_apps);
g_signal_emit (self, signals[INSTALLED_CHANGED], 0);
}
@ -391,24 +402,32 @@ on_settings_tree_changed_cb (GMenuTree *tree,
{
ShellAppSystem *self = SHELL_APP_SYSTEM (user_data);
GError *error = NULL;
GMenuTreeDirectory *root;
GHashTable *new_settings;
GHashTableIter iter;
gpointer key, value;
g_assert (tree == self->priv->settings_tree);
g_hash_table_remove_all (self->priv->setting_entry_to_app);
g_hash_table_remove_all (self->priv->setting_id_to_app);
if (!gmenu_tree_load_sync (self->priv->settings_tree, &error))
{
g_warning ("Failed to load settings: %s", error->message);
return;
}
root = gmenu_tree_get_root_directory (self->priv->settings_tree);
new_settings = get_flattened_entries_from_tree (tree);
if (root)
g_hash_table_iter_init (&iter, new_settings);
while (g_hash_table_iter_next (&iter, &key, &value))
{
gather_settings_recurse (self, root);
gmenu_tree_item_unref (root);
const char *id = key;
GMenuTreeEntry *entry = value;
ShellApp *app;
app = _shell_app_new (entry);
g_hash_table_replace (self->priv->setting_id_to_app, (char*)id, app);
}
g_hash_table_destroy (new_settings);
}
/**
@ -444,7 +463,6 @@ ShellApp *
shell_app_system_lookup_setting (ShellAppSystem *self,
const char *id)
{
GMenuTreeEntry *entry;
ShellApp *app;
/* Actually defer to the main app set if there's overlap */
@ -452,18 +470,7 @@ shell_app_system_lookup_setting (ShellAppSystem *self,
if (app != NULL)
return app;
entry = gmenu_tree_get_entry_by_id (self->priv->settings_tree, id);
if (entry == NULL)
return NULL;
app = g_hash_table_lookup (self->priv->setting_entry_to_app, entry);
if (app != NULL)
return app;
app = _shell_app_new (entry);
g_hash_table_insert (self->priv->setting_entry_to_app, gmenu_tree_item_ref (entry), app);
return app;
return g_hash_table_lookup (self->priv->setting_id_to_app, id);
}
/**
@ -493,13 +500,7 @@ ShellApp *
shell_app_system_lookup_app (ShellAppSystem *self,
const char *id)
{
GMenuTreeEntry *entry;
entry = gmenu_tree_get_entry_by_id (self->priv->apps_tree, id);
if (entry == NULL)
return NULL;
return g_hash_table_lookup (self->priv->entry_to_app, entry);
return g_hash_table_lookup (self->priv->id_to_app, id);
}
/**
@ -604,7 +605,7 @@ shell_app_system_get_all (ShellAppSystem *self)
GHashTableIter iter;
gpointer key, value;
g_hash_table_iter_init (&iter, self->priv->entry_to_app);
g_hash_table_iter_init (&iter, self->priv->id_to_app);
while (g_hash_table_iter_next (&iter, &key, &value))
{
ShellApp *app = value;
@ -624,13 +625,12 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
switch (state)
{
case SHELL_APP_STATE_RUNNING:
/* key is owned by the app */
g_hash_table_insert (self->priv->running_apps, (char*)shell_app_get_id (app), g_object_ref (app));
g_hash_table_insert (self->priv->running_apps, g_object_ref (app), NULL);
break;
case SHELL_APP_STATE_STARTING:
break;
case SHELL_APP_STATE_STOPPED:
g_hash_table_remove (self->priv->running_apps, shell_app_get_id (app));
g_hash_table_remove (self->priv->running_apps, app);
break;
}
g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
@ -658,7 +658,7 @@ shell_app_system_get_running (ShellAppSystem *self)
ret = NULL;
while (g_hash_table_iter_next (&iter, &key, &value))
{
ShellApp *app = value;
ShellApp *app = key;
ret = g_slist_prepend (ret, app);
}
@ -767,7 +767,7 @@ GSList *
shell_app_system_initial_search (ShellAppSystem *self,
GSList *terms)
{
return search_tree (self, terms, self->priv->entry_to_app);
return search_tree (self, terms, self->priv->id_to_app);
}
/**
@ -825,5 +825,5 @@ GSList *
shell_app_system_search_settings (ShellAppSystem *self,
GSList *terms)
{
return search_tree (self, terms, self->priv->setting_entry_to_app);
return search_tree (self, terms, self->priv->setting_id_to_app);
}

View File

@ -819,12 +819,25 @@ _shell_app_new (GMenuTreeEntry *info)
ShellApp *app;
app = g_object_new (SHELL_TYPE_APP, NULL);
app->entry = gmenu_tree_item_ref (info);
app->name_collation_key = g_utf8_collate_key (shell_app_get_name (app), -1);
_shell_app_set_entry (app, info);
return app;
}
void
_shell_app_set_entry (ShellApp *app,
GMenuTreeEntry *entry)
{
if (app->entry != NULL)
gmenu_tree_item_unref (app->entry);
app->entry = gmenu_tree_item_ref (entry);
if (app->name_collation_key != NULL)
g_free (app->name_collation_key);
app->name_collation_key = g_utf8_collate_key (shell_app_get_name (app), -1);
}
static void
shell_app_state_transition (ShellApp *app,
ShellAppState state)
@ -1171,6 +1184,9 @@ trim_exec_line (const char *str)
{
const char *start, *end, *pos;
if (str == NULL)
return NULL;
end = strchr (str, ' ');
if (end == NULL)
end = str + strlen (str);

View File

@ -42,6 +42,8 @@
static ShellGlobal *the_object = NULL;
static void grab_notify (GtkWidget *widget, gboolean is_grab, gpointer user_data);
static void shell_global_on_gc (GjsContext *context,
ShellGlobal *global);
struct _ShellGlobal {
GObject parent;
@ -87,6 +89,8 @@ struct _ShellGlobal {
ca_context *sound_context;
guint32 xdnd_timestamp;
gint64 last_gc_end_time;
};
enum {
@ -270,7 +274,10 @@ shell_global_init (ShellGlobal *global)
global->js_context = g_object_new (GJS_TYPE_CONTEXT,
"search-path", search_path,
"js-version", "1.8",
"gc-notifications", TRUE,
NULL);
g_signal_connect (global->js_context, "gc", G_CALLBACK (shell_global_on_gc), global);
g_strfreev (search_path);
}
@ -1149,6 +1156,13 @@ shell_global_maybe_gc (ShellGlobal *global)
gjs_context_maybe_gc (global->js_context);
}
static void
shell_global_on_gc (GjsContext *context,
ShellGlobal *global)
{
global->last_gc_end_time = g_get_monotonic_time ();
}
/**
* shell_global_get_memory_info:
* @global:
@ -1161,6 +1175,7 @@ shell_global_get_memory_info (ShellGlobal *global,
ShellMemoryInfo *meminfo)
{
JSContext *context;
gint64 now;
memset (meminfo, 0, sizeof (meminfo));
#ifdef HAVE_MALLINFO
@ -1178,6 +1193,10 @@ shell_global_get_memory_info (ShellGlobal *global,
meminfo->gjs_gobject = (unsigned int) gjs_counter_object.value;
meminfo->gjs_function = (unsigned int) gjs_counter_function.value;
meminfo->gjs_closure = (unsigned int) gjs_counter_closure.value;
now = g_get_monotonic_time ();
meminfo->last_gc_seconds_ago = (now - global->last_gc_end_time) / G_TIME_SPAN_SECOND;
}
@ -1410,11 +1429,12 @@ run_leisure_functions (gpointer data)
if (global->work_count > 0)
return FALSE;
/*
* We do call MAYBE_GC() here to free up some memory and
* prevent the GC from running when we are busy doing other things.
/* Previously we called gjs_maybe_gc(). However, it simply doesn't
* trigger often enough. Garbage collection is very fast here, so
* let's just aggressively GC. This will help avoid both heap
* fragmentation, and the GC kicking in when we don't want it to.
*/
shell_global_maybe_gc (global);
gjs_context_gc (global->js_context);
/* No leisure closures, so we are done */
if (global->leisure_closures == NULL)

View File

@ -96,6 +96,9 @@ typedef struct {
guint gjs_gobject;
guint gjs_function;
guint gjs_closure;
/* 32 bit to avoid js conversion problems with 64 bit */
guint last_gc_seconds_ago;
} ShellMemoryInfo;
void shell_global_get_memory_info (ShellGlobal *global,

View File

@ -3,7 +3,7 @@ VOID:OBJECT,INT,INT,INT,INT
VOID:BOXED
VOID:BOXED,OBJECT
VOID:OBJECT,OBJECT
VOID:STRING,OBJECT,BOOLEAN
VOID:STRING,UINT,OBJECT,BOOLEAN
VOID:INT,INT
VOID:STRING,STRING,STRING,STRING,BOXED
VOID:STRING,OBJECT,STRING,BOXED

View File

@ -324,8 +324,23 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
gpointer callback_data)
{
ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent);
ShellAgentRequest *request = g_slice_new (ShellAgentRequest);
ShellAgentRequest *request;
NMSettingConnection *setting_connection;
const char *connection_type;
/* VPN secrets are currently unimplemented - bail out early */
setting_connection = nm_connection_get_setting_connection (connection);
connection_type = nm_setting_connection_get_connection_type (setting_connection);
if (strcmp (connection_type, "vpn") == 0)
{
GError *error = g_error_new (NM_SECRET_AGENT_ERROR,
NM_SECRET_AGENT_ERROR_AGENT_CANCELED,
"VPN secrets are currently unhandled.");
callback (NM_SECRET_AGENT (self), connection, NULL, error, callback_data);
return;
}
request = g_slice_new (ShellAgentRequest);
request->self = g_object_ref (self);
request->connection = g_object_ref (connection);
request->setting_name = g_strdup (setting_name);

View File

@ -850,3 +850,31 @@ shell_parse_search_provider (const char *data,
return FALSE;
}
/**
* shell_shader_effect_set_double_uniform:
* @effect: The #ClutterShaderEffect
* @name: The name of the uniform
* @value: The value to set it to.
*
* Set a double uniform on a ClutterShaderEffect.
*
* The problem here is that JavaScript doesn't have more than
* one number type, and gjs tries to automatically guess what
* type we want to set a GValue to. If the number is "1.0" or
* something, it will use an integer, which will cause errors
* in GLSL.
*/
void
shell_shader_effect_set_double_uniform (ClutterShaderEffect *effect,
const gchar *name,
gdouble value)
{
GValue gvalue = G_VALUE_INIT;
g_value_init (&gvalue, G_TYPE_DOUBLE);
g_value_set_double (&gvalue, value);
clutter_shader_effect_set_uniform_value (effect,
name,
&gvalue);
}

View File

@ -50,6 +50,10 @@ gboolean shell_parse_search_provider (const char *data,
char **icon_data_uri,
GError **error);
void shell_shader_effect_set_double_uniform (ClutterShaderEffect *effect,
const gchar *name,
gdouble value);
G_END_DECLS
#endif /* __SHELL_UTIL_H__ */

View File

@ -131,6 +131,7 @@ shell_wm_class_init (ShellWMClass *klass)
* ShellWM::keybinding:
* @shellwm: the #ShellWM
* @binding: the keybinding name
* @mask: the modifier mask used
* @window: for window keybindings, the #MetaWindow
* @backwards: for "reversible" keybindings, whether or not
* the backwards (Shifted) variant was invoked
@ -147,9 +148,10 @@ shell_wm_class_init (ShellWMClass *klass)
G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
0,
NULL, NULL,
_shell_marshal_VOID__STRING_OBJECT_BOOLEAN,
G_TYPE_NONE, 3,
_shell_marshal_VOID__STRING_UINT_OBJECT_BOOLEAN,
G_TYPE_NONE, 4,
G_TYPE_STRING,
G_TYPE_UINT,
META_TYPE_WINDOW,
G_TYPE_BOOLEAN);
}
@ -336,7 +338,7 @@ shell_wm_key_handler (MetaDisplay *display,
g_signal_emit (wm, shell_wm_signals[KEYBINDING],
g_quark_from_string (binding->name),
binding->name, window, backwards);
binding->name, binding->mask, window, backwards);
}
/**

View File

@ -25,6 +25,8 @@
#include "st-scroll-view-fade.h"
#include "st-scroll-view.h"
#include "st-widget.h"
#include "st-theme-node.h"
#include "st-scroll-bar.h"
#include "st-scrollable.h"
@ -39,11 +41,18 @@ static const gchar *fade_glsl_shader =
"uniform sampler2D tex;\n"
"uniform float height;\n"
"uniform float width;\n"
"uniform float scrollbar_width;\n"
"uniform float scrollbar_height;\n"
"uniform float offset_bottom;\n"
"uniform float offset_top;\n"
"uniform bool rtl;\n"
/*
* Used to pass the fade area to the shader
*
* [0][0] = x1
* [0][1] = y1
* [1][0] = x2
* [1][1] = y2
*
*/
"uniform mat2 fade_area;\n"
"\n"
"void main ()\n"
"{\n"
@ -51,18 +60,19 @@ static const gchar *fade_glsl_shader =
" float y = height * cogl_tex_coord_in[0].y;\n"
" float x = width * cogl_tex_coord_in[0].x;\n"
" float ratio = 1.0;\n"
" float fade_bottom_start = height - offset_bottom;\n"
" float fade_bottom_start = fade_area[1][1] - offset_bottom;\n"
" float ratio_top = y / offset_top;\n"
" float ratio_bottom = (height - scrollbar_height - y)/(height - scrollbar_height - fade_bottom_start);\n"
" bool in_scroll_area = ((rtl && x > scrollbar_width) || (!rtl && x < (width - scrollbar_width)));\n"
" bool fade_top = y < offset_top && in_scroll_area;\n"
" bool fade_bottom = y > fade_bottom_start && in_scroll_area && (y < (height - scrollbar_height));\n"
" float ratio_bottom = (fade_area[1][1] - y)/(fade_area[1][1] - fade_bottom_start);\n"
" bool in_scroll_area = fade_area[0][0] <= x && fade_area[1][0] >= x;\n"
" bool fade_top = y < offset_top && in_scroll_area && (y >= fade_area[0][1]);\n"
" bool fade_bottom = y > fade_bottom_start && in_scroll_area && (y <= fade_area[1][1]);\n"
"\n"
" if (fade_top) {\n"
" ratio = ratio_top;\n"
" ratio *= ratio_top;\n"
" }\n"
" else if (fade_bottom) {\n"
" ratio = ratio_bottom;\n"
"\n"
" if (fade_bottom) {\n"
" ratio *= ratio_bottom;\n"
" }\n"
"\n"
" cogl_color_out = color * ratio;\n"
@ -81,11 +91,9 @@ struct _StScrollViewFade
gint tex_uniform;
gint height_uniform;
gint width_uniform;
gint scrollbar_width_uniform;
gint scrollbar_height_uniform;
gint fade_area_uniform;
gint offset_top_uniform;
gint offset_bottom_uniform;
gint rtl_uniform;
StAdjustment *vadjustment;
@ -145,12 +153,8 @@ st_scroll_view_fade_pre_paint (ClutterEffect *effect)
cogl_program_get_uniform_location (self->program, "height");
self->width_uniform =
cogl_program_get_uniform_location (self->program, "width");
self->scrollbar_width_uniform =
cogl_program_get_uniform_location (self->program, "scrollbar_width");
self->scrollbar_height_uniform =
cogl_program_get_uniform_location (self->program, "scrollbar_height");
self->rtl_uniform =
cogl_program_get_uniform_location (self->program, "rtl");
self->fade_area_uniform =
cogl_program_get_uniform_location (self->program, "fade_area");
self->offset_top_uniform =
cogl_program_get_uniform_location (self->program, "offset_top");
self->offset_bottom_uniform =
@ -184,13 +188,54 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
ClutterActor *hscroll = st_scroll_view_get_hscroll_bar (ST_SCROLL_VIEW (self->actor));
gboolean h_scroll_visible, v_scroll_visible;
ClutterActorBox allocation, content_box, paint_box;
/*
* Used to pass the fade area to the shader
*
* [0][0] = x1
* [0][1] = y1
* [1][0] = x2
* [1][1] = y2
*
*/
float fade_area[2][2];
ClutterVertex verts[4];
if (self->program == COGL_INVALID_HANDLE)
goto out;
clutter_actor_get_paint_box (self->actor, &paint_box);
clutter_actor_get_abs_allocation_vertices (self->actor, verts);
clutter_actor_get_allocation_box (self->actor, &allocation);
st_theme_node_get_content_box (st_widget_get_theme_node (ST_WIDGET (self->actor)),
(const ClutterActorBox *)&allocation, &content_box);
/*
* The FBO is based on the paint_volume's size which can be larger then the actual
* allocation, so we have to account for that when passing the positions
*/
fade_area[0][0] = content_box.x1 + (verts[0].x - paint_box.x1);
fade_area[0][1] = content_box.y1 + (verts[0].y - paint_box.y1);
fade_area[1][0] = content_box.x2 + (verts[3].x - paint_box.x2);
fade_area[1][1] = content_box.y2 + (verts[3].y - paint_box.y2);
g_object_get (ST_SCROLL_VIEW (self->actor),
"hscrollbar-visible", &h_scroll_visible,
"vscrollbar-visible", &v_scroll_visible,
NULL);
if (self->program == COGL_INVALID_HANDLE)
goto out;
if (v_scroll_visible)
{
if (st_widget_get_direction (ST_WIDGET (self->actor)) == ST_TEXT_DIRECTION_RTL)
fade_area[0][0] += clutter_actor_get_width (vscroll);
fade_area[1][0] -= clutter_actor_get_width (vscroll);
}
if (h_scroll_visible)
fade_area[1][1] -= clutter_actor_get_height (hscroll);
st_adjustment_get_values (self->vadjustment, &value, &lower, &upper, NULL, NULL, &page_size);
@ -214,12 +259,8 @@ st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect)
cogl_program_set_uniform_1f (self->program, self->height_uniform, clutter_actor_get_height (self->actor));
if (self->width_uniform > -1)
cogl_program_set_uniform_1f (self->program, self->width_uniform, clutter_actor_get_width (self->actor));
if (self->scrollbar_width_uniform > -1)
cogl_program_set_uniform_1f (self->program, self->scrollbar_width_uniform, v_scroll_visible ? clutter_actor_get_width (vscroll) : 0);
if (self->scrollbar_height_uniform > -1)
cogl_program_set_uniform_1f (self->program, self->scrollbar_height_uniform, h_scroll_visible ? clutter_actor_get_height (hscroll) : 0);
if (self->rtl_uniform > -1)
cogl_program_set_uniform_1i (self->program, self->rtl_uniform, (st_widget_get_direction (ST_WIDGET (self->actor)) == ST_TEXT_DIRECTION_RTL));
if (self->fade_area_uniform > -1)
cogl_program_set_uniform_matrix (self->program, self->fade_area_uniform, 2, 1, FALSE, (const float *)fade_area);
material = clutter_offscreen_effect_get_target (effect);
cogl_material_set_user_program (material, self->program);
@ -428,9 +469,7 @@ st_scroll_view_fade_init (StScrollViewFade *self)
self->tex_uniform = -1;
self->height_uniform = -1;
self->width_uniform = -1;
self->scrollbar_width_uniform = -1;
self->scrollbar_height_uniform = -1;
self->rtl_uniform = -1;
self->fade_area_uniform = -1;
self->offset_top_uniform = -1;
self->offset_bottom_uniform = -1;
self->fade_offset = DEFAULT_FADE_OFFSET;

View File

@ -641,9 +641,10 @@ st_table_preferred_allocate (ClutterActor *self,
*/
if (col + col_span > priv->n_cols)
g_warning ("StTable: col-span exceeds number of columns");
#if 0
if (row + row_span > priv->n_rows)
g_warning ("StTable: row-span exceeds number of rows");
#endif
if (col_span > 1)
{
for (i = col + 1; i < col + col_span && i < priv->n_cols; i++)

View File

@ -328,6 +328,9 @@ st_theme_node_transition_paint (StThemeNodeTransition *transition,
calculate_offscreen_box (transition, allocation);
priv->needs_setup = !setup_framebuffers (transition, allocation);
if (priv->needs_setup) /* setting up framebuffers failed */
return;
}
cogl_color_set_from_4f (&constant, 0., 0., 0.,

View File

@ -15,6 +15,7 @@ TEST_JS = \
interactive/scrolling.js \
interactive/scroll-view-sizing.js \
interactive/table.js \
interactive/transitions.js \
testcommon/border-image.png \
testcommon/face-plain.png \
testcommon/ui.js \

View File

@ -325,10 +325,52 @@ mainBox.add(fadeBox);
spacer = new St.Bin();
fadeBox.add(spacer, { expand: true });
fadeBox.add(new St.Label({ text: 'Padding: '}));
let paddingButton = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;padding-right:3px;' });
fadeBox.add(paddingButton);
fadeBox.add(new St.Label({ text: 'Borders: '}));
let borderButton = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;padding-right:3px;' });
fadeBox.add(borderButton);
fadeBox.add(new St.Label({ text: 'Vertical Fade: '}));
let vfade = new St.Button({ label: 'No', style: 'text-decoration: underline; color: #4444ff;' });
fadeBox.add(vfade);
function togglePadding(button) {
switch(button.label) {
case 'No':
button.label = 'Yes';
break;
case 'Yes':
button.label = 'No';
break;
}
if (scrollView.style == null)
scrollView.style = (button.label == 'Yes' ? 'padding: 10px;' : 'padding: 0;');
else
scrollView.style += (button.label == 'Yes' ? 'padding: 10px;' : 'padding: 0;');
}
paddingButton.connect('clicked', function() { togglePadding(paddingButton); });
function toggleBorders(button) {
switch(button.label) {
case 'No':
button.label = 'Yes';
break;
case 'Yes':
button.label = 'No';
break;
}
if (scrollView.style == null)
scrollView.style = (button.label == 'Yes' ? 'border: 2px solid red;' : 'border: 0;');
else
scrollView.style += (button.label == 'Yes' ? 'border: 2px solid red;' : 'border: 0;');
}
borderButton.connect('clicked', function() { toggleBorders(borderButton); });
function toggleFade(button) {
switch(button.label) {
case 'No':

View File

@ -0,0 +1,34 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const UI = imports.testcommon.ui;
UI.init();
let stage = Clutter.Stage.get_default();
let hbox = new St.BoxLayout({ name: 'transition-container',
reactive: true,
track_hover: true,
width: stage.width,
height: stage.height,
style: 'padding: 10px;'
+ 'spacing: 10px;' });
stage.add_actor(hbox);
for (let i = 0; i < 5; i ++) {
let label = new St.Label({ text: (i+1).toString(),
name: "label" + i,
style_class: 'transition-label',
reactive: true,
track_hover: true });
hbox.add(label, { x_fill: false,
y_fill: false });
}
////////////////////////////////////////////////////////////////////////////////
stage.show();
Clutter.main();

View File

@ -71,4 +71,25 @@ stage {
.vfade {
-st-fade-offset: 68px;
}
}
#transition-container .transition-label {
color: white;
width: 1em;
height: 1em;
padding: 1em;
background-color: #333;
border: 2px solid black;
border-radius: 8px;
transition-duration: 1000; /* One second */
}
#transition-container:hover .transition-label {
background-color: blue;
border: 2px solid red;
}
#transition-container .transition-label:hover {
background-color: green;
border: 2px solid blue;
}

View File

@ -150,7 +150,7 @@
</autotools>
<autotools id="cogl">
<branch repo="git.gnome.org" module="cogl"/>
<branch repo="git.gnome.org" module="cogl" revision="cogl-1.8"/>
<dependencies>
<dep package="glib"/>
<dep package="gobject-introspection"/>
@ -161,7 +161,7 @@
</autotools>
<autotools id="clutter">
<branch repo="git.gnome.org" module="clutter"/>
<branch repo="git.gnome.org" module="clutter" revision="clutter-1.8"/>
<dependencies>
<dep package="cogl"/>
<dep package="json-glib"/>