Compare commits

...

93 Commits

Author SHA1 Message Date
906106c700 Bump version to 3.15.3
Update NEWS.
2014-12-19 11:48:00 +01:00
0257a23c31 windowManager: Update stacking during workspace switches
When animating workspace switches, windows on the old and new workspaces
are temporarily reparented. If windows are restacked, those windows will
thus be ignored by mutter until meta_switch_workspace_completed() resyncs
the stacking at the end of the animation.
As a result, activating a window on another workspace that is not on top
of the stack is very noticeably a two-step operation of switching workspace
and raising the window. There is a technical reason for that order[0], but
we can avoid the visible disruption by manually syncing the stack during
the switch operation.

[0] https://git.gnome.org/browse/mutter/tree/src/core/workspace.c#n590

https://bugzilla.gnome.org/show_bug.cgi?id=741680
2014-12-19 11:39:50 +01:00
e0eebc90e0 Rename KeyBindingMode to ActionMode
The keybinding mode is no longer used exclusively for actions triggered
by keybindings, so reflect this by a more generic name.

https://bugzilla.gnome.org/show_bug.cgi?id=740237
2014-12-19 11:39:50 +01:00
ddeac2386f gestures: Restrict actions based on keybindingMode
Just like keybindings and the message tray pointer barrier, gestures
don't always make sense - for instance, swiping up the screen shield
should not trigger the message tray just as the SelectArea action around
the left edge should not open the overview.
To avoid this, restrict gestures based on the current keybinding mode.

https://bugzilla.gnome.org/show_bug.cgi?id=740237
2014-12-19 11:39:50 +01:00
7b9be2188a loginDialog: use two column view if banner message long
Frequently banner messages are longer than can reasonable
fit in a one column view, which leads to a smooshed layout.

This commit changes the layout to a two column view, with the
banner on the left and the prompt on the right, if the banner
message is long enough that it can't fit well above the prompt.
If there isn't enough space for two columns then we keep the
one column layout but add scrollbars.

https://bugzilla.gnome.org/show_bug.cgi?id=703972
2014-12-18 13:58:10 -05:00
117a81e06f loginDialog: display banner message when disable-user-list=true
The login screen supports showing a banner message which admins
can use to mention login rules or disclaimers.

This message only shows up currently if the user list is enabled.
Most people who want to show a banner message also want to disable
the user list.

This commit moves the banner message to display when the user is
prompted for login credentials instead of when showing the user
list. It also adds a scrollbar if the message is too long.

https://bugzilla.gnome.org/show_bug.cgi?id=703972
2014-12-18 13:58:09 -05:00
522fe8e8bf loginDialog: allocate children manually
The login screen is pretty custom full screen container and the standard
layout managers aren't really a good fit for the kind of layout that's
happening. This will be even more problematic with upcoming changes
to login banners, so we need to switch techniques.

This commit moves login dialog over to using a custom allocate handler
that has specific domain knowledge of the parts of the login screen
and where they go.

https://bugzilla.gnome.org/show_bug.cgi?id=703972
2014-12-18 13:58:09 -05:00
73480255b1 Updated Kazakh translation 2014-12-18 00:40:51 +00:00
09d3f8eb71 Updated Basque language 2014-12-17 16:31:51 +01:00
0592adead5 Calendar: ignore timeouts starting the calendar-server
In certain cases the timeout for starting the calendar helper can
be reached but the calendar helper still loads fine. If so, just
ignore the timeout and wait until we get a notification from
dbus of the successful start.

https://bugzilla.gnome.org/show_bug.cgi?id=735308
2014-12-14 17:18:16 -08:00
b21f5c5566 calendar-server: activate evolution-source-registry manually at startup
g_dbus_proxy_new() (and library calls that wrap it) has an hardcoded
timeout of 25 seconds, which is insufficient for starting up e-s-r
in certain setups. Avoid a timeout error by starting the service
manually with a longer timeout before hand.
Also demote the error to a warning + exit failure instead of
a crash, to avoid triggering abrt reports.

https://bugzilla.gnome.org/show_bug.cgi?id=735308
2014-12-14 17:18:16 -08:00
7602260462 Updated Kazakh translation 2014-12-14 14:08:39 +00:00
0448effd82 Updated Turkish translation 2014-12-13 17:46:23 +00:00
90dedccc87 Updated Swedish translation 2014-12-11 19:06:46 +00:00
b29e8a1a3d Fix typo 2014-12-11 15:48:51 +01:00
9689a9ba8b Updated Hungarian translation 2014-11-30 15:31:24 +00:00
4eb0a672db theme: Add high-contrast variant
For now, simply enforce symbolic icons.

https://bugzilla.gnome.org/show_bug.cgi?id=740447
2014-11-29 18:13:03 +01:00
cad56c871a app: Respect icon-style for faded icon texture
Just like regular application icons, the faded icon texture used
in the app menu should follow the theme's icon style setting.

https://bugzilla.gnome.org/show_bug.cgi?id=740447
2014-11-29 18:13:03 +01:00
0acc7ed4c2 app: Use StIcon as icon_texture when loading from a GIcon
Themes - namely the HighContrast one - may now request symbolic
icons rather than fullcolor ones. In order to have recoloring
work as expected in that case, we will need a theme node to pick
up colors from - using an StIcon instead of manually loading a
texture from the cache gives us that for free, so do that.

https://bugzilla.gnome.org/show_bug.cgi?id=740447
2014-11-29 18:13:03 +01:00
2940ef07e9 st-theme-node: Add support for -st-icon-style property
GTK+ added support for a -gtk-icon-style property in themes to
enforce a particular icon style. Do the same for shell themes
with an -st-icon-style property, with the same set of possible
values as the GTK+ variant:
  'requested' - use symbolic or fullcolor icon depending on the
                icon name (default)
  'regular'   - enforce fullcolor icons
  'symbolic'  - enforce symbolic icons

https://bugzilla.gnome.org/show_bug.cgi?id=740447
2014-11-29 18:13:03 +01:00
deddac8748 st-texture-cache: Remove load_gicon_with_colors()
The split between st_texture_cache_load_gicon() and load_gicon_with_colors()
no longer makes any sense, so just move the code into the public method.

https://bugzilla.gnome.org/show_bug.cgi?id=740447
2014-11-29 18:13:03 +01:00
f4cc3327e8 main: Add support for -high-contrast theme variants
While the default Shell style is fairly decent with regard to
accessibility requirements, having the ability to tweak certain
aspects where the regular style works less well is still useful.
For this purpose, try to load a -high-contrast theme variant of
the default stylesheet when a high-contrast theme is requested
(as determined by the GTK+ theme name).

https://bugzilla.gnome.org/show_bug.cgi?id=740447
2014-11-29 18:13:03 +01:00
977448b6bc overview: Set _shown before calling _animateNotVisible
_hideDone checks _shown to determine if anything has shown the overview
while we hid it, and if so, shows the overview forward just in case.

In a local patch that called _hideDone immediately inside _hide for
testing, this broke. While we don't actually depend on this anywhere,
it doesn't hurt so that the next person to hack this up (perhaps me!)
doesn't get stuck debugging it for 20 minutes.
2014-11-27 14:28:32 -08:00
d69eceab3b Update .gitignore 2014-11-27 21:00:51 +01:00
ed7649c93a main: Fix unsetting of custom stylesheets
Since moving to a GFile based API in commit 642bf2b778,
setThemeStylesheet() no longer accepts %null to revert to
the default theme. We should have some way to revert to the
default and the least intrusive option is to return to the
old behavior, so do that.
2014-11-27 14:43:21 +00:00
af6ed9e02a main: Update doc comment 2014-11-27 14:43:21 +00:00
983314333f Bump version to 3.15.2
Update NEWS.
2014-11-27 14:05:26 +00:00
26389f92f5 build: Add org.gtk.Application.xml to distfiles 2014-11-27 14:05:26 +00:00
1e8e5d4671 calendar: Stop computing week number ourselves
Correctly computing the ISO week number is tricky and we already
have code in the platform to do it, so just refer its computation
to GDateTime rather than doing it ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=736722
2014-11-27 13:30:20 +00:00
31d375093e switcher: Remove some unused variables 2014-11-27 13:30:20 +00:00
546ae00854 Add busy property to ShellApp
Using a separate property to show when the application is busy rather
than cramming it into the state property makes the code clearer. In most
places we only care if an app is running or not, not whether it is
actually busy.

https://bugzilla.gnome.org/show_bug.cgi?id=736492
2014-11-27 10:59:55 +00:00
e00bfcc2cf Use org.gtk.Application proxy to monitor app's busy state
This simplifies the code and fixes a race where an application could
call g_application_mark_busy() before the shell subscribed to change
notifications on the application's busy state.

https://bugzilla.gnome.org/show_bug.cgi?id=736492
2014-11-27 10:59:55 +00:00
943f6c9d28 Generate GDBus proxy object for org.gtk.Application
Having a proxy object will make it easier to monitor the application's
busy state.

This adds a dependency on gdbus-codegen

https://bugzilla.gnome.org/show_bug.cgi?id=736492
2014-11-27 10:59:55 +00:00
dbf16d6ea3 shell-gtk-embed: Remove old hack workaround for a mutter bug
The window actor shouldn't have been picked since it has an empty
input shape, but bugs in mutter weren't properly interpreting that.

Since the Wayland restructure, the MetaWindowActor isn't actually
reactive anymore, it's the MetaSurfaceActorX11, so this code isn't
doing anything.
2014-11-26 12:54:37 -08:00
77b0c07410 Updated Czech translation 2014-11-26 12:06:33 +01:00
e36eb02ab0 Updated Hebrew translation 2014-11-24 20:04:18 +02:00
2935fd4ffe St: support css margin property
It's implemented similar to the padding property, but instead of taking
into account the margin values at drawing time in node-drawing, we set
the clutter actor margins in StWidget when the style is computed.

In the case that a CSS margin is not specified, we don't to set a value
of 0 to the clutter actor margin. In this manner it allows to use
Clutter margin values set in the code. However, the margins that are set
both in the code and in the CSS on the same side, the result is
unpredictable.

We avoid to set the clutter actor margin values to 0 if there's no CSS
margin values defined, so we still allow clutter actors to use margin
set in the code.

https://bugzilla.gnome.org/show_bug.cgi?id=728437
2014-11-19 16:42:25 +01:00
5961f162fa gdm: fix sensitivity of auth prompt when cancelling early and user list is disabled
If the user list is disabled and the user clicks cancel quickly enough
after typing their username, they can get in a state where the
auth prompt gets stuck in the insensitive state.

This is because the login dialog code makes the prompt insensitive
while while pam is processing the provided username, but the prompt
only makes itself sensitive again when it is hidden.

This commit makes it sensitive right before asking for a username again.

https://bugzilla.gnome.org/show_bug.cgi?id=740141
2014-11-17 12:11:03 -05:00
5d440fa8d9 gdm: disallow cancel after verification succeeds
Once verification has succeeded, the train's already
left the building and we shouldn't allow canceling.

This commit renders the cancel button non-reactive
and makes the cancel function be a noop after
verification succeeds.

https://bugzilla.gnome.org/show_bug.cgi?id=740141
2014-11-17 12:11:02 -05:00
3d4408dce8 network: properly remove connections from list
Due to a typo we were always removing the first (index 0) connection
from the global list of connections instead of the correct one.

This resulted in some connections remaining in the shell's connection
list long after they were removed.  In particular, this resulted in
multiple copies of a bluetooth connection appearing after suspend/resume
(when the device was readded and the cached connection list was
rescanned).

https://bugzilla.gnome.org/show_bug.cgi?id=740227
2014-11-16 15:53:54 -08:00
ea707dcd75 Added Norwegian bokmål translation from Åka Sikrom. 2014-11-16 12:29:57 +01:00
196429a18f Updated Korean translation 2014-11-16 03:55:45 +09:00
487b5cd0a9 Update Vietnamese translation
Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
2014-11-14 14:19:17 +07:00
891f30ff63 shellDBus: Emit a PropertyChanged for OverviewActive
I was going to add another DBus property to signal when the shell was
done loading and was idle, and while implementing that I noticed we
aren't emitting PropertyChanged for, well, any property.  Let's fix
OverviewActive.

It's unfortunate it's so tedious to correctly implement a DBus
property =/

https://bugzilla.gnome.org/show_bug.cgi?id=704163
2014-11-13 18:17:57 +00:00
45e42d7b9e shellDBus: don't consider a zero-index monitor invalid
Currently, shellDBus only uses the passed in monitor index if it's
strictly > 0. A zero-index monitor is a valid one though, so don't
restrict this to strictly positive indices.

https://bugzilla.gnome.org/show_bug.cgi?id=740074
2014-11-13 10:05:59 -08:00
facaea6850 environment: Define N_() globally
Commit 1291bcd0c8 implemented it for dateMenu, but the function
is already used in screenShield as well. Just add it globally as
we do for other standard gettext "macros".
2014-11-13 12:26:33 +00:00
e467a734a1 ibusManager: Preload all ibus input sources in user configuration
Normally users switch xkb input sources and ibus input sources.
But currently the first input source only is running. It's also good
to preload all ibus engines in the logging session so that users switch
input sources quickly without the launching time of input sources.

The following is the ibus change:
https://github.com/ibus/ibus/commit/cff35929a9

https://bugzilla.gnome.org/show_bug.cgi?id=695428
2014-11-12 21:07:19 +01:00
050378743e viewSelector: Hide workspace page after animating to app picker
WorkspacesDisplay relies on being hidden to disable workspace switches
by scrolling or panning. Usually viewSelector will hide the previous
page on page switch, but we currently miss the case when opening the
overview at the app picker, where the workspaces page is still shown
for the transition, but never hidden.
Fix this by calling hide() in addition to setting the opacity to 0 at
the end of the overview animation.

https://bugzilla.gnome.org/show_bug.cgi?id=737534
2014-11-12 20:03:59 +01:00
25bf2ff87a Updated Spanish translation 2014-11-12 13:20:37 +01:00
551b96d79f Set style classes for extension download dialog
So that the layout is correct.

https://bugzilla.gnome.org/show_bug.cgi?id=739888
2014-11-10 18:58:12 -05:00
1291bcd0c8 dateMenu: Fix commit 52503c4c
dateMenu uses now N_() but the function is not defined.

To solve it, define N_().
2014-11-10 16:45:10 +01:00
73362beb0b screenShield: Don't lock after crash if locking is disabled
When the user has disabled locking we shouldn't lock the screen.

https://bugzilla.gnome.org/show_bug.cgi?id=704884
2014-11-09 18:32:05 +01:00
52503c4c38 js: Fix util_translate_time_string() usage
util_translate_time_string() was called to use LC_TIME to translate
strings, but those strings were not marked as to be translated.

https://bugzilla.gnome.org/show_bug.cgi?id=739822
2014-11-08 21:55:16 +01:00
219b0bf987 Update Aragonese translation 2014-11-08 19:15:27 +01:00
cbfd6a8128 keyboard: Delay caribou daemon invocation until really needed
Calling g_dbus_proxy_new without any flag means that the caribou
daemon will be launched through D-Bus activation, when creating
a proxy.  It smoked out some corner cases in caribou and at-spi2-core,
but generally it would be good to avoid creating unused process.

This patch delays the invocation until the "Run" method is called.

https://bugzilla.gnome.org/show_bug.cgi?id=739712
2014-11-08 06:49:17 +09:00
21d11b3638 calendar: Allow translators to change non-work days
https://bugzilla.gnome.org/show_bug.cgi?id=664645
2014-11-07 18:21:10 +01:00
455595f2b2 Revert "Calendar: Remove leading zeros for 24h time format"
Leading zeros are common in the 24h format, and indeed used in the
wallclock in the top bar. Convention and consistency within the
same clock format trumps inconsistency between different time formats,
so reverting commit 316f825b2a.

https://bugzilla.gnome.org/show_bug.cgi?id=658675
2014-11-07 15:16:07 +00:00
316f825b2a Calendar: Remove leading zeros for 24h time format
https://bugzilla.gnome.org/show_bug.cgi?id=658675
2014-11-07 14:58:22 +01:00
35fcd16992 dateMenu: Allow extensions to add custom calendar sources
Splits instantiation of the event source into a separate method,
allowing extensions to subclass the DateMenuButton and provide its
own calendar source.

https://bugzilla.gnome.org/show_bug.cgi?id=672500
2014-11-07 14:49:38 +01:00
084f7a36b1 rfkill: hide Airplane Mode indicator when g-s-d says so
https://bugzilla.gnome.org/show_bug.cgi?id=736292
2014-11-07 10:29:13 +01:00
1fe3ab8f68 rfkill: remove unused code
https://bugzilla.gnome.org/show_bug.cgi?id=736292
2014-11-07 10:29:13 +01:00
be3c3c64c1 Port gnome-shell to Python 3
https://bugzilla.gnome.org/show_bug.cgi?id=732478
2014-11-07 10:18:58 +01:00
568454abb8 screenShield: Recognise all Enter keys as Return
Bug #704339.
2014-11-07 10:14:17 +01:00
5014434b9a st-button: Recognise all Enter keys as Return
Bug #704339.
2014-11-07 10:14:11 +01:00
b05ab0eaeb build: Workaround quoting issues in configure script
Default value of BROWSER_PLUGIN_DIR variable contains special symbols.
Thus quoting and inlining it in parameter expansion is not portable.
In particular it does not work in dash. Replace ${a:-b} parameter
expansion with conditional statement.

https://bugzilla.gnome.org/show_bug.cgi?id=739241
2014-11-07 10:10:41 +01:00
e402ed1fe4 portalHelper: Change user facing name to "Network Login"
"Captive Portal" is a bit confusing for people who are not familiar
with the technical term.

https://bugzilla.gnome.org/show_bug.cgi?id=737198
2014-11-07 10:09:12 +01:00
4801d1dd7f css: Add an inset shadow to overview windows
A small dark gap was caused by the rounded window edges not meeting the
sharp corner of the CSS border on hover. By adding a small inset
box-shadow, this gap is filled in.

https://bugzilla.gnome.org/show_bug.cgi?id=699044
2014-11-07 10:08:29 +01:00
24c0a1a1d4 Move style updates in AppIcon._onStateChanged out
There is currently no simple way to inject into AppIcon's state change,
so an extension that wants to do this has to destroy/remove/update all
icons in the Shell (i.e. in the Dash, AllView, FrequentView) on enable()
and disable() after updating AppIcon.prototype._onStateChange, or the
extension must require a restart of the Shell.

To solve this issue, we rename _onStateChanged to _updateRunningStyle,
and connect the notify::state signal with an anonymous function that
calls _updateRunningStyle.
This extra function call should allow extensions to just extend the
updateRunningStyle function in the prototype.

https://bugzilla.gnome.org/show_bug.cgi?id=739497
2014-11-06 21:22:33 +01:00
4a1f939e2b Update Aragonese translation 2014-11-06 21:06:03 +01:00
111a9e13f2 dateMenu: Fix typo in _isToday()
getDay() is the day of week, what we want there is getDate().

https://bugzilla.gnome.org/show_bug.cgi?id=738725
2014-11-03 15:03:54 +01:00
926f76635e build: Bump GTK+ requirement
GTK_POLICY_EXTERNAL requires at least 3.15.0
2014-10-30 14:28:30 +00:00
72a43a6001 Bump version to 3.15.1
Update NEWS.
2014-10-30 11:13:39 +00:00
5180ab262c appDisplay: Use EXTERNAL scroll policy
Now that we support the new policy type, we can just use it instead
of hiding the scrollbar.

https://bugzilla.gnome.org/show_bug.cgi?id=739379
2014-10-30 00:37:55 +01:00
5fca85cd28 scroll-view: Support GTK_POLICY_EXTERNAL
GTK+ added a new PolicyType which currently triggers compiler warnings
about unhandled values in switch statements. We also have a use case for
it already, so add support for the new policy type.

https://bugzilla.gnome.org/show_bug.cgi?id=739379
2014-10-30 00:37:55 +01:00
fb5b368ca7 Calendar: Inline _ellipsizeEventTime into caller
This patch inlines the function _ellipsizeEventTime into its only caller
_addEvent. This also removes the need for the global const
EventEllipses and is thus removed by this commit as well.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 19:31:05 -05:00
62b6419332 Calendar: sort multi-day events by ending day/time
With commit dc6a60dde, the calendar displays the ending day and time of
a continuing multi-day event on its ending day. This results in the list
not appearing to be sorted. This patch sorts the list according to the
displayed day/time.

With the two appointments
Thursday 0800-1000 Foo, and Wednesday 0900-Friday 1200 Bar and today
being Monday, the rest of the week list currently displays:
F ...1200 Bar
T    0800 Foo
With this patch, the displaying order is switched because Friday comes
after Thursday.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 15:31:32 -05:00
65c136f4ed Calendar: Show multi-day event continuation
Currently, multi-day events are shown as individual appointments on each
day.  This patch ellipsizes multi-day events to indicate continuation on
the prior or following day (or other time-period.)

The time label spot is now replaced by a box layout that contains the
prefix ellipsis label, the time label and the postfix ellipsis label.
In order to keep the alignment, ellipses are merely invisible (zero
opacity) when hidden.

The ellipses are styled using the events-day-time-ellipses class which,
by default, take the color of the event text.

When RTL is used, the box contents are adjusted accordingly (clutter
does that for us).

An event spanning three days now displays "...All Day..." in the
calendar on the second day.

https://bugzilla.gnome.org/show_bug.cgi?id=727302
2014-10-27 15:31:32 -05:00
34606c0a8c messageTray: Summarize notifications when messages queue up
It is really annoying for the user to acknowledge multiple notifications
when they queue up. So, to prevent a notification flood that has to be
handled by the user one-by-one, a summarized-notification feature is
added which leaves a single summarized-notification for the user,
replacing multiple notifications if the number exceeds 1, which they may
or may not acknowledge. When this summarized-notification is acknowledged,
the message-tray is opened where they can view the notifications that were
summarized. This helps the user concentrate on his primary task
simultaneously informing them about the new notifications.

https://bugzilla.gnome.org/show_bug.cgi?id=702460
2014-10-27 18:20:51 +01:00
260657c0b8 BackgroundCache: plug an Animation object leak
We need to return early in case the animation file is the same,
otherwise we'll create a new Animation object and leak the previous
one.

https://bugzilla.gnome.org/show_bug.cgi?id=739252
2014-10-27 17:50:41 +01:00
f5cc579272 Update Uzbek@cyrillic translation 2014-10-19 13:41:47 -04:00
b4ce0e7208 Update Uzbek@cyrillic translation 2014-10-18 19:45:55 -04:00
eb3fc7815e Use LC_TIME locale for strftime format string translations
We commonly mark strftime format strings for translation to account
for date/time representations without an existing strftime shortcut
("Yesterday %H%p"). As those translations are looked up according to
the locale defined by LC_MESSAGES, while the conversion characters
themselves are resolved according to LC_TIME, the result can be
rather odd when mixing locales ("Den 27. January"). The correct
solution would be to install translations for format strings in
the LC_TIME catalogue and look them up with dcgettext(), but we
don't have the infrastructure to do that easily. Work around this
by adding a helper method that looks up a string in LC_MESSAGES
using the locale defined by LC_TIME and use that to translate
format strings, which has the same result.

https://bugzilla.gnome.org/show_bug.cgi?id=738640
2014-10-16 23:41:51 +02:00
2f5a226bc2 Fix handling of SystemBackground
Since the background rework, SystemBackground is no longer a transparent
actor that you have to stack on top of a solid background, it is an
opaque actor. Fix the color of the background actor, and remove places
where we were setting the background color underneath the system background
and expecting blending - in particular, we can always set no_clear_hint
on the stage.

https://bugzilla.gnome.org/show_bug.cgi?id=738652
2014-10-16 17:16:06 -04:00
01eb79a3cc layout: Reset the OSK to the primary monitor when monitors change
When monitors change, the previous index might not mean the same
physical monitor anymore, in fact, it might become invalid. In the
latter case, we'll actually get a JS error when accessing
this.keyboardMonitor in _updateKeyboardBox() . To avoid this, let's
just always reset the OSK to the primary monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=738536
2014-10-16 16:42:36 +02:00
7ea364ae8b Add Uzbek@cyrillic translation 2014-10-16 09:49:20 -04:00
48a6e6f309 main: Allow loading file-based stylesheets again
The gnome-classic mode ships a stylesheet on disk, so make sure to load
that if if we can't find any file in the resource itself.
2014-10-14 22:25:30 -07:00
0f63ad0fc1 gdm: Don't throw an error if there's no logo file 2014-10-14 20:00:25 -07:00
49c4ba5656 theme: make a GResource
Now that we have all the infrastructure ready, port the theme to a
GResource.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:54:18 -07:00
642bf2b778 theme: convert stylesheet loading to GFile
In preparation to making it a GResource.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:54:00 -07:00
328bb1c21b st: always use GFile internally
We're moving the theme infrastructure towards GResource, so as a first
step move all the loading to use GFiles instead of URIs or paths.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:53:39 -07:00
38add2e78b background: port to new GFile MetaBackground API
https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:51:29 -07:00
2dc41c944e texture-cache: remove unused base64 code path
This was introduced in b0c6cf3f to support image data for web search
providers, which do not exist anymore. Just remove it.

https://bugzilla.gnome.org/show_bug.cgi?id=736936
2014-10-14 18:50:48 -07:00
ea552ea157 keyboardManager: Adopt to changes in meta_display_freeze_keyboard 2014-10-14 14:47:23 -07:00
89 changed files with 7101 additions and 4118 deletions

2
.gitignore vendored
View File

@ -23,6 +23,7 @@ data/gnome-shell-wayland.desktop
data/gnome-shell-wayland.desktop.in data/gnome-shell-wayland.desktop.in
data/gnome-shell-extension-prefs.desktop data/gnome-shell-extension-prefs.desktop
data/gnome-shell-extension-prefs.desktop.in data/gnome-shell-extension-prefs.desktop.in
data/gnome-shell-theme.gresource
data/gschemas.compiled data/gschemas.compiled
data/perf-background.xml data/perf-background.xml
data/org.gnome.shell.gschema.xml data/org.gnome.shell.gschema.xml
@ -85,6 +86,7 @@ src/gnome-shell-perf-helper
src/gnome-shell-perf-tool src/gnome-shell-perf-tool
src/gnome-shell-portal-helper src/gnome-shell-portal-helper
src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service src/hotplug-sniffer/org.gnome.Shell.HotplugSniffer.service
src/org-gtk-application.[ch]
src/run-js-test src/run-js-test
src/test-recorder src/test-recorder
src/test-recorder.ogg src/test-recorder.ogg

62
NEWS
View File

@ -1,3 +1,65 @@
3.15.3
======
* Add support for high-contrast themes [Florian; #740447]
* Fix banner message on login screen without user list [Ray; #703972]
* Fix flicker when activating windows on another workspace [Florian; #741680]
* Misc. bug fixes [Giovanni, Florian; #735308, #740237]
Contributors:
Giovanni Campagna, Florian Müllner, Jasper St. Pierre, Ray Strode
Translations:
Balázs Úr [hu], Josef Andersson [sv], Muhammet Kara [tr],
Baurzhan Muftakhidinov [kk], Inaki Larranaga Murgoitio [eu]
3.15.2
======
* Fix visual glitch of window preview outline in overview [Chris; #699044]
* Change user facing name of "Captive Portal" to "Network Login" [Elad; #737198]
* Port to Python 3 [Slavek; #732478]
* Hide Airplane mode indicator when g-s-d says so [Cosimo; #736292]
* Allow translators to change non-work days [Lavi; #664645]
* Delay invocation of caribou daemon until really needed [Daiki; #739712]
* Don't lock screen after crash if locking is disabled [Adel; #704884]
* Improve layout of extension installation dialog [William; #739888]
* Fix workspace changes from app picker [Yuki; #737534]
* Preload all ibus input sources in user configuration [Takao; #695428]
* Properly remove network connections from list [Ryan; #740227]
* Support CSS margin property [Carlos; #728437]
* Improve handling of BUSY application state [Phillip; #736492]
* Fix erroneous week numbers in calendar [Florian; #736722]
* Misc. bugfixes and cleanups [Darcy, Yuki, Alexander, Eskild, Bastien, Cosimo, Colin,
Ray; #738725, #739497, #739241, #672500, #739822, #740074, #704163, #740141]
Contributors:
Yuki, Lavi .A, Elad Alfassa, Cosimo Cecchi, Takao Fujiwara, Adel Gadllah,
Eskild Hustvedt, Chris Johns, William Jon McCann, Slavek Kabrda, Ryan Lortie,
Florian Müllner, Bastien Nocera, Christian Persch, Carlos Soriano,
Jasper St. Pierre, Ray Strode, Alexander Tsoy, Daiki Ueno, Colin Walters,
Phillip Wood
Translations:
Jorge Perez Perez [an], Daniel Martinez [an], Daniel Mustieles [es],
Trần Ngọc Quân [vi], Changwoo Ryu [ko], Kjartan Maraas [nb],
Yosef Or Boczko [he], Marek Černocký [cs]
3.15.1
======
* Use GResources for theme loading [Cosimo; #736936]
* Reset the OSK to primary on monitor changes [Rui; #738536]
* Use LC_TIME locale for format string translations [Florian; #738640]
* Summarize queued up notifications [Devyani; #702460]
* Improve handling of multi-day events [Andreas; #727302]
* Support EXTERNAL scroll policy type [Florian; #739379]
* Misc. bugfixes [Owen, Rui; #738652, #739252]
Contributors:
Andreas Brauchli, Cosimo Cecchi, Devyani Kota, Rui Matos, Florian Müllner,
Jasper St. Pierre, Owen W. Taylor
Translations:
Bahodir Mansurov [uz@cyrillic]
3.14.1 3.14.1
====== ======
* Fix pulse animation for scrolled app folders [Florian; #736885] * Fix pulse animation for scrolled app folders [Florian; #736885]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.14.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.15.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@ -37,7 +37,7 @@ AC_PATH_PROG([XSLTPROC], [xsltproc])
GLIB_GSETTINGS GLIB_GSETTINGS
# Get a value to substitute into gnome-shell.in # Get a value to substitute into gnome-shell.in
AM_PATH_PYTHON([2.5]) AM_PATH_PYTHON([3])
AC_SUBST(PYTHON) AC_SUBST(PYTHON)
# We need at least this, since gst_plugin_register_static() was added # We need at least this, since gst_plugin_register_static() was added
@ -76,8 +76,8 @@ AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.15.90 CLUTTER_MIN_VERSION=1.15.90
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.14.1 MUTTER_MIN_VERSION=3.15.3
GTK_MIN_VERSION=3.13.2 GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.37.0 GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.5.3 LIBEDATASERVER_MIN_VERSION=3.5.3
@ -232,9 +232,17 @@ esac
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS" AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
AC_SUBST(AM_CFLAGS) AC_SUBST(AM_CFLAGS)
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}" if test -z "${BROWSER_PLUGIN_DIR}"; then
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
fi
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to]) AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme])
AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[])
if test -z "$GDBUS_CODEGEN"; then
AC_MSG_ERROR([gdbus-codegen not found])
fi
AC_CONFIG_FILES([ AC_CONFIG_FILES([
Makefile Makefile
data/Makefile data/Makefile

View File

@ -35,44 +35,11 @@ introspection_DATA = \
org.gnome.ShellSearchProvider.xml \ org.gnome.ShellSearchProvider.xml \
org.gnome.ShellSearchProvider2.xml org.gnome.ShellSearchProvider2.xml
themedir = $(pkgdatadir)/theme resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml)
dist_theme_DATA = \ gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files)
theme/calendar-arrow-left.svg \ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $<
theme/calendar-arrow-right.svg \ resourcedir = $(pkgdatadir)
theme/calendar-today.svg \ resource_DATA = gnome-shell-theme.gresource
theme/checkbox-focused.svg \
theme/checkbox-off-focused.svg \
theme/checkbox-off.svg \
theme/checkbox.svg \
theme/close-window.svg \
theme/close.svg \
theme/corner-ripple-ltr.png \
theme/corner-ripple-rtl.png \
theme/dash-placeholder.svg \
theme/filter-selected-ltr.svg \
theme/filter-selected-rtl.svg \
theme/gnome-shell.css \
theme/logged-in-indicator.svg \
theme/message-tray-background.png \
theme/more-results.svg \
theme/noise-texture.png \
theme/page-indicator-active.svg \
theme/page-indicator-inactive.svg \
theme/page-indicator-checked.svg \
theme/page-indicator-hover.svg \
theme/panel-button-border.svg \
theme/panel-button-highlight-narrow.svg \
theme/panel-button-highlight-wide.svg \
theme/process-working.svg \
theme/running-indicator.svg \
theme/source-button-border.svg \
theme/summary-counter.svg \
theme/toggle-off-us.svg \
theme/toggle-off-intl.svg \
theme/toggle-on-us.svg \
theme/toggle-on-intl.svg \
theme/ws-switch-arrow-up.png \
theme/ws-switch-arrow-down.png
backgrounddir = $(pkgdatadir) backgrounddir = $(pkgdatadir)
background_DATA = perf-background.xml background_DATA = perf-background.xml
@ -116,7 +83,9 @@ EXTRA_DIST = \
perf-background.xml.in \ perf-background.xml.in \
org.gnome.Shell.PortalHelper.desktop.in \ org.gnome.Shell.PortalHelper.desktop.in \
org.gnome.Shell.PortalHelper.service.in \ org.gnome.Shell.PortalHelper.service.in \
org.gnome.shell.gschema.xml.in.in org.gnome.shell.gschema.xml.in.in \
gnome-shell-theme.gresource.xml \
$(resource_files)
CLEANFILES += \ CLEANFILES += \
gnome-shell.desktop.in \ gnome-shell.desktop.in \
@ -128,4 +97,5 @@ CLEANFILES += \
perf-background.xml \ perf-background.xml \
gschemas.compiled \ gschemas.compiled \
org.gnome.shell.gschema.valid \ org.gnome.shell.gschema.valid \
org.gnome.shell.gschema.xml.in org.gnome.shell.gschema.xml.in \
gnome-shell-theme.gresource

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell/theme">
<file>calendar-arrow-left.svg</file>
<file>calendar-arrow-right.svg</file>
<file>calendar-today.svg</file>
<file>checkbox-focused.svg</file>
<file>checkbox-off-focused.svg</file>
<file>checkbox-off.svg</file>
<file>checkbox.svg</file>
<file>close-window.svg</file>
<file>close.svg</file>
<file>corner-ripple-ltr.png</file>
<file>corner-ripple-rtl.png</file>
<file>dash-placeholder.svg</file>
<file>filter-selected-ltr.svg</file>
<file>filter-selected-rtl.svg</file>
<file>gnome-shell.css</file>
<file>gnome-shell-high-contrast.css</file>
<file>logged-in-indicator.svg</file>
<file>message-tray-background.png</file>
<file>more-results.svg</file>
<file>noise-texture.png</file>
<file>page-indicator-active.svg</file>
<file>page-indicator-inactive.svg</file>
<file>page-indicator-checked.svg</file>
<file>page-indicator-hover.svg</file>
<file>panel-button-border.svg</file>
<file>panel-button-highlight-narrow.svg</file>
<file>panel-button-highlight-wide.svg</file>
<file>process-working.svg</file>
<file>running-indicator.svg</file>
<file>source-button-border.svg</file>
<file>summary-counter.svg</file>
<file>toggle-off-us.svg</file>
<file>toggle-off-intl.svg</file>
<file>toggle-on-us.svg</file>
<file>toggle-on-intl.svg</file>
<file>ws-switch-arrow-up.png</file>
<file>ws-switch-arrow-down.png</file>
</gresource>
</gresources>

View File

@ -1,9 +1,9 @@
[Desktop Entry] [Desktop Entry]
_Name=Captive Portal _Name=Network Login
Type=Application Type=Application
Exec=gapplication launch org.gnome.Shell.PortalHelper Exec=gapplication launch org.gnome.Shell.PortalHelper
DBusActivatable=true DBusActivatable=true
NoDisplay=true NoDisplay=true
Icon=network-workgroup Icon=network-workgroup
StartupNotify=true StartupNotify=true
OnlyShowIn=GNOME; OnlyShowIn=GNOME;

View File

@ -0,0 +1,20 @@
/* Copyright 2014, Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU Lesser General Public License,
* version 2.1, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
* more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
*/
@import url("resource:///org/gnome/shell/theme/gnome-shell.css");
stage {
-st-icon-style: symbolic;
}

View File

@ -829,6 +829,7 @@ StScrollBar StButton#vhandle:active {
.window-clone-border { .window-clone-border {
border: 4px solid rgba(255, 255, 255, 0.5); border: 4px solid rgba(255, 255, 255, 0.5);
border-radius: 4px; border-radius: 4px;
box-shadow: inset 0px 0px 0px 1px rgba(255, 255, 255, 0.5);
} }
.notification-close { .notification-close {
@ -1494,6 +1495,10 @@ StScrollBar StButton#vhandle:active {
text-align: right; text-align: right;
} }
.events-day-time-ellipses {
color: rgba(153, 153, 153, 1.0);
}
.events-day-time:rtl { .events-day-time:rtl {
text-align: left; text-align: left;
} }
@ -2383,6 +2388,10 @@ StScrollBar StButton#vhandle:active {
} }
/* Login Dialog */ /* Login Dialog */
.login-dialog-banner-view {
padding-top: 24px;
max-width: 23em;
}
.framed-user-icon { .framed-user-icon {
border: 2px solid #8b8b8b; border: 2px solid #8b8b8b;
@ -2395,11 +2404,7 @@ StScrollBar StButton#vhandle:active {
} }
.login-dialog-banner { .login-dialog-banner {
font-size: 10pt;
font-weight: bold;
text-align: center;
color: #666666; color: #666666;
padding-bottom: 1em;
} }
.login-dialog { .login-dialog {

View File

@ -1,6 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Lang = imports.lang; const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@ -126,7 +127,7 @@ const AuthPrompt = new Lang.Class({
this._initButtons(); this._initButtons();
let spinnerIcon = global.datadir + '/theme/process-working.svg'; let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._spinner = new Animation.AnimatedIcon(spinnerIcon, DEFAULT_BUTTON_WELL_ICON_SIZE); this._spinner = new Animation.AnimatedIcon(spinnerIcon, DEFAULT_BUTTON_WELL_ICON_SIZE);
this._spinner.actor.opacity = 0; this._spinner.actor.opacity = 0;
this._spinner.actor.show(); this._spinner.actor.show();
@ -260,6 +261,7 @@ const AuthPrompt = new Lang.Class({
_onVerificationComplete: function() { _onVerificationComplete: function() {
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
this.cancelButton.reactive = false;
}, },
_onReset: function() { _onReset: function() {
@ -431,6 +433,7 @@ const AuthPrompt = new Lang.Class({
reset: function() { reset: function() {
let oldStatus = this.verificationStatus; let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this.cancelButton.reactive = true;
if (oldStatus == AuthPromptStatus.VERIFYING) if (oldStatus == AuthPromptStatus.VERIFYING)
this._userVerifier.cancel(); this._userVerifier.cancel();
@ -499,6 +502,9 @@ const AuthPrompt = new Lang.Class({
}, },
cancel: function() { cancel: function() {
if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
return;
}
this.reset(); this.reset();
this.emit('cancelled'); this.emit('cancelled');
} }

View File

@ -26,6 +26,7 @@ const Gtk = imports.gi.Gtk;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@ -364,12 +365,12 @@ const LoginDialog = new Lang.Class({
Name: 'LoginDialog', Name: 'LoginDialog',
_init: function(parentActor) { _init: function(parentActor) {
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW, this.actor = new Shell.GenericContainer({ style_class: 'login-dialog',
layout_manager: new Clutter.BinLayout(), visible: false });
style_class: 'login-dialog', this.actor.get_accessible().set_role(Atk.Role.WINDOW);
visible: false });
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true })); this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true }));
this.actor.connect('allocate', Lang.bind(this, this._onAllocate));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
parentActor.add_child(this.actor); parentActor.add_child(this.actor);
@ -405,17 +406,10 @@ const LoginDialog = new Lang.Class({
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box', this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER, y_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_expand: true,
vertical: true, vertical: true,
visible: false }); visible: false });
this.actor.add_child(this._userSelectionBox); this.actor.add_child(this._userSelectionBox);
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
text: '' });
this._userSelectionBox.add(this._bannerLabel);
this._updateBanner();
this._userList = new UserList(); this._userList = new UserList();
this._userSelectionBox.add(this._userList.actor, this._userSelectionBox.add(this._userList.actor,
{ expand: true, { expand: true,
@ -450,11 +444,25 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START, x_align: St.Align.START,
x_fill: true }); x_fill: true });
this._bannerView = new St.ScrollView({ style_class: 'login-dialog-banner-view',
opacity: 0,
vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
hscrollbar_policy: Gtk.PolicyType.NEVER });
this.actor.add_child(this._bannerView);
let bannerBox = new St.BoxLayout({ vertical: true });
this._bannerView.add_actor(bannerBox);
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
text: '' });
this._bannerLabel.clutter_text.line_wrap = true;
this._bannerLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
bannerBox.add_child(this._bannerLabel);
this._updateBanner();
this._logoBin = new St.Widget({ style_class: 'login-dialog-logo-bin', this._logoBin = new St.Widget({ style_class: 'login-dialog-logo-bin',
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.END, y_align: Clutter.ActorAlign.END });
x_expand: true,
y_expand: true });
this.actor.add_child(this._logoBin); this.actor.add_child(this._logoBin);
this._updateLogo(); this._updateLogo();
@ -485,6 +493,180 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._updateDisableUserList)); Lang.bind(this, this._updateDisableUserList));
}, },
_getBannerAllocation: function (dialogBox) {
let actorBox = new Clutter.ActorBox();
let [minWidth, minHeight, natWidth, natHeight] = this._bannerView.get_preferred_size();
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
actorBox.x1 = centerX - natWidth / 2;
actorBox.y1 = dialogBox.y1 + Main.layoutManager.panelBox.height;
actorBox.x2 = actorBox.x1 + natWidth;
actorBox.y2 = actorBox.y1 + natHeight;
return actorBox;
},
_getLogoBinAllocation: function (dialogBox) {
let actorBox = new Clutter.ActorBox();
let [minWidth, minHeight, natWidth, natHeight] = this._logoBin.get_preferred_size();
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
actorBox.x1 = centerX - natWidth / 2;
actorBox.y1 = dialogBox.y2 - natHeight;
actorBox.x2 = actorBox.x1 + natWidth;
actorBox.y2 = actorBox.y1 + natHeight;
return actorBox;
},
_getCenterActorAllocation: function (dialogBox, actor) {
let actorBox = new Clutter.ActorBox();
let [minWidth, minHeight, natWidth, natHeight] = actor.get_preferred_size();
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2;
actorBox.x1 = centerX - natWidth / 2;
actorBox.y1 = centerY - natHeight / 2;
actorBox.x2 = actorBox.x1 + natWidth;
actorBox.y2 = actorBox.y1 + natHeight;
return actorBox;
},
_onAllocate: function (actor, dialogBox, flags) {
let dialogWidth = dialogBox.x2 - dialogBox.x1;
let dialogHeight = dialogBox.y2 - dialogBox.y1;
// First find out what space the children require
let bannerAllocation = null;
let bannerHeight = 0;
let bannerWidth = 0;
if (this._bannerView.visible) {
bannerAllocation = this._getBannerAllocation(dialogBox, this._bannerView);
bannerHeight = bannerAllocation.y2 - bannerAllocation.y1;
bannerWidth = bannerAllocation.x2 - bannerAllocation.x1;
}
let authPromptAllocation = null;
let authPromptHeight = 0;
let authPromptWidth = 0;
if (this._authPrompt.actor.visible) {
authPromptAllocation = this._getCenterActorAllocation(dialogBox, this._authPrompt.actor);
authPromptHeight = authPromptAllocation.y2 - authPromptAllocation.y1;
authPromptWidth = authPromptAllocation.x2 - authPromptAllocation.x1;
}
let userSelectionAllocation = null;
let userSelectionHeight = 0;
if (this._userSelectionBox.visible) {
userSelectionAllocation = this._getCenterActorAllocation(dialogBox, this._userSelectionBox);
userSelectionHeight = userSelectionAllocation.y2 - userSelectionAllocation.y1;
}
let logoAllocation = null;
let logoHeight = 0;
if (this._logoBin.visible) {
logoAllocation = this._getLogoBinAllocation(dialogBox);
logoHeight = logoAllocation.y2 - logoAllocation.y1;
}
// Then figure out if we're overly constrained and need to
// try a different layout, or if we have what extra space we
// can hand out
if (bannerAllocation) {
let leftOverYSpace = dialogHeight - bannerHeight - authPromptHeight - logoHeight;
if (leftOverYSpace > 0) {
// First figure out how much left over space is up top
let leftOverTopSpace = leftOverYSpace / 2;
// Then, shift the banner into the middle of that extra space
let yShift = leftOverTopSpace / 2;
bannerAllocation.y1 += yShift;
bannerAllocation.y2 += yShift;
} else {
// Then figure out how much space there would be if we switched to a
// wide layout with banner on one side and authprompt on the other.
let leftOverXSpace = dialogWidth - authPromptWidth;
// In a wide view, half of the available space goes to the banner,
// and the other half goes to the margins.
let wideBannerWidth = leftOverXSpace / 2;
let wideSpacing = leftOverXSpace - wideBannerWidth;
// If we do go with a wide layout, we need there to be at least enough
// space for the banner and the auth prompt to be the same width,
// so it doesn't look unbalanced.
if (authPromptWidth > 0 && wideBannerWidth > authPromptWidth) {
let centerX = dialogBox.x1 + dialogWidth / 2;
let centerY = dialogBox.y1 + dialogHeight / 2;
// A small portion of the spacing goes down the center of the
// screen to help delimit the two columns of the wide view
let centerGap = wideSpacing / 8;
// place the banner along the left edge of the center margin
bannerAllocation.x2 = centerX - centerGap / 2;
bannerAllocation.x1 = bannerAllocation.x2 - wideBannerWidth;
// figure out how tall it would like to be and try to accomodate
// but don't let it get too close to the logo
let [wideMinHeight, wideBannerHeight] = this._bannerView.get_preferred_height(wideBannerWidth);
let maxWideHeight = dialogHeight - 3 * logoHeight;
wideBannerHeight = Math.min(maxWideHeight, wideBannerHeight);
bannerAllocation.y1 = centerY - wideBannerHeight / 2;
bannerAllocation.y2 = bannerAllocation.y1 + wideBannerHeight;
// place the auth prompt along the right edge of the center margin
authPromptAllocation.x1 = centerX + centerGap / 2;
authPromptAllocation.x2 = authPromptAllocation.x1 + authPromptWidth;
} else {
// If we aren't going to do a wide view, then we need to limit
// the height of the banner so it will present scrollbars
// First figure out how much space there is without the banner
leftOverYSpace += bannerHeight;
// Then figure out how much of that space is up top
let availableTopSpace = leftOverYSpace / 2;
// Then give all of that space to the banner
bannerAllocation.y2 = bannerAllocation.y1 + availableTopSpace;
}
}
} else if (userSelectionAllocation) {
// Grow the user list to fill the space
let leftOverYSpace = dialogHeight - userSelectionHeight - logoHeight;
if (leftOverYSpace > 0) {
let topExpansion = leftOverYSpace / 2;
let bottomExpansion = topExpansion;
userSelectionAllocation.y1 -= topExpansion;
userSelectionAllocation.y2 += bottomExpansion;
}
}
// Finally hand out the allocations
if (bannerAllocation) {
this._bannerView.allocate(bannerAllocation, flags);
}
if (authPromptAllocation)
this._authPrompt.actor.allocate(authPromptAllocation, flags);
if (userSelectionAllocation)
this._userSelectionBox.allocate(userSelectionAllocation, flags);
if (logoAllocation)
this._logoBin.allocate(logoAllocation, flags);
},
_ensureUserListLoaded: function() { _ensureUserListLoaded: function() {
if (!this._userManager.is_loaded) { if (!this._userManager.is_loaded) {
this._userManagerLoadedId = this._userManager.connect('notify::is-loaded', this._userManagerLoadedId = this._userManager.connect('notify::is-loaded',
@ -537,24 +719,36 @@ const LoginDialog = new Lang.Class({
} }
}, },
_updateLogoTexture: function(cache, uri) { _fadeInBannerView: function() {
if (this._logoFileUri != uri) Tweener.addTween(this._bannerView,
{ opacity: 255,
time: _FADE_ANIMATION_TIME,
transition: 'easeOutQuad' });
},
_hideBannerView: function() {
Tweener.removeTweens(this._bannerView);
this._bannerView.opacity = 0;
},
_updateLogoTexture: function(cache, file) {
if (this._logoFile && !this._logoFile.equal(file))
return; return;
this._logoBin.destroy_all_children(); this._logoBin.destroy_all_children();
if (this._logoFileUri) { if (this._logoFile) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._logoBin.add_child(this._textureCache.load_uri_async(this._logoFileUri, this._logoBin.add_child(this._textureCache.load_file_async(this._logoFile,
-1, _LOGO_ICON_HEIGHT, -1, _LOGO_ICON_HEIGHT,
scaleFactor)); scaleFactor));
} }
}, },
_updateLogo: function() { _updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY); let path = this._settings.get_string(GdmUtil.LOGO_KEY);
this._logoFileUri = path ? Gio.file_new_for_path(path).get_uri() : null; this._logoFile = path ? Gio.file_new_for_path(path) : null;
this._updateLogoTexture(this._textureCache, this._logoFileUri); this._updateLogoTexture(this._textureCache, this._logoFile);
}, },
_onPrompted: function() { _onPrompted: function() {
@ -604,6 +798,7 @@ const LoginDialog = new Lang.Class({
{ opacity: 255, { opacity: 255,
time: _FADE_ANIMATION_TIME, time: _FADE_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
this._fadeInBannerView();
}, },
_showRealmLoginHint: function(realmManager, hint) { _showRealmLoginHint: function(realmManager, hint) {
@ -643,6 +838,8 @@ const LoginDialog = new Lang.Class({
realmManager.release(); realmManager.release();
})); }));
this._updateCancelButton(); this._updateCancelButton();
this._authPrompt.updateSensitivity(true);
this._showPrompt(); this._showPrompt();
}, },
@ -858,6 +1055,7 @@ const LoginDialog = new Lang.Class({
_showUserList: function() { _showUserList: function() {
this._ensureUserListLoaded(); this._ensureUserListLoaded();
this._authPrompt.hide(); this._authPrompt.hide();
this._hideBannerView();
this._sessionMenuButton.close(); this._sessionMenuButton.close();
this._setUserListExpanded(true); this._setUserListExpanded(true);
this._notListedButton.show(); this._notListedButton.show();
@ -957,7 +1155,7 @@ const LoginDialog = new Lang.Class({
this.actor.show(); this.actor.show();
this.actor.opacity = 0; this.actor.opacity = 0;
Main.pushModal(this.actor, { keybindingMode: Shell.KeyBindingMode.LOGIN_SCREEN }); Main.pushModal(this.actor, { actionMode: Shell.ActionMode.LOGIN_SCREEN });
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
{ opacity: 255, { opacity: 255,

View File

@ -43,7 +43,7 @@ function getCurrentExtension() {
let path = match[1]; let path = match[1];
let file = Gio.File.new_for_path(path); let file = Gio.File.new_for_path(path);
// Walk up the directory tree, looking for an extesion with // Walk up the directory tree, looking for an extension with
// the same UUID as a directory name. // the same UUID as a directory name.
while (file != null) { while (file != null) {
let extension = extensions[file.get_basename()]; let extension = extensions[file.get_basename()];

View File

@ -1,13 +1,14 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
try { try {
var IBus = imports.gi.IBus; var IBus = imports.gi.IBus;
if (!('new_async' in IBus.Bus)) _checkIBusVersion();
throw "IBus version is too old";
const IBusCandidatePopup = imports.ui.ibusCandidatePopup; const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
} catch (e) { } catch (e) {
var IBus = null; var IBus = null;
@ -16,6 +17,22 @@ try {
let _ibusManager = null; let _ibusManager = null;
function _checkIBusVersion() {
var requiredMajor = 1;
var requiredMinor = 5;
var requiredMicro = 2;
if ((IBus.MAJOR_VERSION > requiredMajor) ||
(IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION > requiredMinor) ||
(IBus.MAJOR_VERSION == requiredMajor && IBus.MINOR_VERSION == requiredMinor &&
IBus.MICRO_VERSION >= requiredMicro))
return;
throw "Found IBus version %d.%d.%d but required is %d.%d.%d".
format(IBus.MAJOR_VERSION, IBus.MINOR_VERSION, IBus.MINOR_VERSION,
requiredMajor, requiredMinor, requiredMicro);
}
function getIBusManager() { function getIBusManager() {
if (_ibusManager == null) if (_ibusManager == null)
_ibusManager = new IBusManager(); _ibusManager = new IBusManager();
@ -28,6 +45,7 @@ const IBusManager = new Lang.Class({
// This is the longest we'll keep the keyboard frozen until an input // This is the longest we'll keep the keyboard frozen until an input
// source is active. // source is active.
_MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms _MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms
_PRELOAD_ENGINES_DELAY_TIME: 30, // sec
_init: function() { _init: function() {
if (!IBus) if (!IBus)
@ -42,6 +60,7 @@ const IBusManager = new Lang.Class({
this._ready = false; this._ready = false;
this._registerPropertiesId = 0; this._registerPropertiesId = 0;
this._currentEngineName = null; this._currentEngineName = null;
this._preloadEnginesId = 0;
this._ibus = IBus.Bus.new_async(); this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', Lang.bind(this, this._onConnected)); this._ibus.connect('connected', Lang.bind(this, this._onConnected));
@ -176,5 +195,27 @@ const IBusManager = new Lang.Class({
this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME, this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
null, callback); null, callback);
}, },
preloadEngines: function(ids) {
if (!IBus || !this._ibus || ids.length == 0)
return;
if (this._preloadEnginesId != 0) {
Mainloop.source_remove(this._preloadEnginesId);
this._preloadEnginesId = 0;
}
this._preloadEnginesId =
Mainloop.timeout_add_seconds(this._PRELOAD_ENGINES_DELAY_TIME,
Lang.bind(this, function() {
this._ibus.preload_engines_async(
ids,
-1,
null,
null);
this._preloadEnginesId = 0;
return GLib.SOURCE_REMOVE;
}));
},
}); });
Signals.addSignalMethods(IBusManager.prototype); Signals.addSignalMethods(IBusManager.prototype);

View File

@ -35,7 +35,7 @@ function releaseKeyboard() {
} }
function holdKeyboard() { function holdKeyboard() {
global.freeze_keyboard(global.get_current_time()); global.display.freeze_keyboard(global.get_current_time());
} }
const KeyboardManager = new Lang.Class({ const KeyboardManager = new Lang.Class({

View File

@ -81,7 +81,6 @@ const AppSwitcherPopup = new Lang.Class({
let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT); let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT);
let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT); let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT);
let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM); let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM);
let vPadding = this.actor.get_theme_node().get_vertical_padding();
let hPadding = leftPadding + rightPadding; let hPadding = leftPadding + rightPadding;
let icon = this._items[this._selectedIndex].actor; let icon = this._items[this._selectedIndex].actor;

View File

@ -12,7 +12,7 @@ const ANIMATED_ICON_UPDATE_TIMEOUT = 100;
const Animation = new Lang.Class({ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',
_init: function(filename, width, height, speed) { _init: function(file, width, height, speed) {
this.actor = new St.Bin(); this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._speed = speed; this._speed = speed;
@ -23,7 +23,7 @@ const Animation = new Lang.Class({
this._frame = 0; this._frame = 0;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._animations = St.TextureCache.get_default().load_sliced_image (filename, width, height, scaleFactor, this._animations = St.TextureCache.get_default().load_sliced_image (file, width, height, scaleFactor,
Lang.bind(this, this._animationsLoaded)); Lang.bind(this, this._animationsLoaded));
this.actor.set_child(this._animations); this.actor.set_child(this._animations);
}, },
@ -82,7 +82,7 @@ const AnimatedIcon = new Lang.Class({
Name: 'AnimatedIcon', Name: 'AnimatedIcon',
Extends: Animation, Extends: Animation,
_init: function(filename, size) { _init: function(file, size) {
this.parent(filename, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
} }
}); });

View File

@ -379,9 +379,7 @@ const AllView = new Lang.Class({
this.actor.add_actor(this._scrollView); this.actor.add_actor(this._scrollView);
this._scrollView.set_policy(Gtk.PolicyType.NEVER, this._scrollView.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC); Gtk.PolicyType.EXTERNAL);
// we are only using ScrollView for the fade effect, hide scrollbars
this._scrollView.vscroll.hide();
this._adjustment = this._scrollView.vscroll.adjustment; this._adjustment = this._scrollView.vscroll.adjustment;
this._pageIndicators = new PageIndicators(); this._pageIndicators = new PageIndicators();
@ -1564,10 +1562,11 @@ const AppIcon = new Lang.Class({
this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._menuTimeoutId = 0; this._menuTimeoutId = 0;
this._stateChangedId = this.app.connect('notify::state', this._stateChangedId = this.app.connect('notify::state', Lang.bind(this,
Lang.bind(this, function () {
this._onStateChanged)); this._updateRunningStyle();
this._onStateChanged(); }));
this._updateRunningStyle();
}, },
_onDestroy: function() { _onDestroy: function() {
@ -1588,7 +1587,7 @@ const AppIcon = new Lang.Class({
} }
}, },
_onStateChanged: function() { _updateRunningStyle: function() {
if (this.app.state != Shell.AppState.STOPPED) if (this.app.state != Shell.AppState.STOPPED)
this.actor.add_style_class_name('running'); this.actor.add_style_class_name('running');
else else

View File

@ -106,6 +106,8 @@ const Main = imports.ui.main;
const Params = imports.misc.params; const Params = imports.misc.params;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background'; const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
const PRIMARY_COLOR_KEY = 'primary-color'; const PRIMARY_COLOR_KEY = 'primary-color';
const SECONDARY_COLOR_KEY = 'secondary-color'; const SECONDARY_COLOR_KEY = 'secondary-color';
@ -125,6 +127,16 @@ const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
let _backgroundCache = null; let _backgroundCache = null;
function _fileEqual0(file1, file2) {
if (file1 == file2)
return true;
if (!file1 || !file2)
return false;
return file1.equal(file2);
}
const BackgroundCache = new Lang.Class({ const BackgroundCache = new Lang.Class({
Name: 'BackgroundCache', Name: 'BackgroundCache',
@ -134,25 +146,25 @@ const BackgroundCache = new Lang.Class({
this._backgroundSources = {}; this._backgroundSources = {};
}, },
monitorFile: function(filename) { monitorFile: function(file) {
if (this._fileMonitors[filename]) let key = file.hash();
if (this._fileMonitors[key])
return; return;
let file = Gio.File.new_for_path(filename);
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null); let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
monitor.connect('changed', monitor.connect('changed',
Lang.bind(this, function() { Lang.bind(this, function() {
this.emit('file-changed', filename); this.emit('file-changed', file);
})); }));
this._fileMonitors[filename] = monitor; this._fileMonitors[key] = monitor;
}, },
getAnimation: function(params) { getAnimation: function(params) {
params = Params.parse(params, { filename: null, params = Params.parse(params, { file: null,
onLoaded: null }); onLoaded: null });
if (this._animationFilename == params.filename) { if (_fileEqual0(this._animationFile, params.file)) {
if (params.onLoaded) { if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
params.onLoaded(this._animation); params.onLoaded(this._animation);
@ -160,12 +172,13 @@ const BackgroundCache = new Lang.Class({
})); }));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
} }
return;
} }
let animation = new Animation({ filename: params.filename }); let animation = new Animation({ file: params.file });
animation.load(Lang.bind(this, function() { animation.load(Lang.bind(this, function() {
this._animationFilename = params.filename; this._animationFile = params.file;
this._animation = animation; this._animation = animation;
if (params.onLoaded) { if (params.onLoaded) {
@ -218,14 +231,14 @@ const Background = new Lang.Class({
params = Params.parse(params, { monitorIndex: 0, params = Params.parse(params, { monitorIndex: 0,
layoutManager: Main.layoutManager, layoutManager: Main.layoutManager,
settings: null, settings: null,
filename: null, file: null,
style: null }); style: null });
this.background = new Meta.Background({ meta_screen: global.screen }); this.background = new Meta.Background({ meta_screen: global.screen });
this.background._delegate = this; this.background._delegate = this;
this._settings = params.settings; this._settings = params.settings;
this._filename = params.filename; this._file = params.file;
this._style = params.style; this._style = params.style;
this._monitorIndex = params.monitorIndex; this._monitorIndex = params.monitorIndex;
this._layoutManager = params.layoutManager; this._layoutManager = params.layoutManager;
@ -292,20 +305,21 @@ const Background = new Lang.Class({
this.background.set_gradient(shadingType, color, secondColor); this.background.set_gradient(shadingType, color, secondColor);
}, },
_watchFile: function(filename) { _watchFile: function(file) {
if (this._fileWatches[filename]) let key = file.hash();
if (this._fileWatches[key])
return; return;
this._cache.monitorFile(filename); this._cache.monitorFile(file);
let signalId = this._cache.connect('file-changed', let signalId = this._cache.connect('file-changed',
Lang.bind(this, function(cache, changedFile) { Lang.bind(this, function(cache, changedFile) {
if (changedFile == filename) { if (changedFile.equal(file)) {
let imageCache = Meta.BackgroundImageCache.get_default(); let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile); imageCache.purge(changedFile);
this.emit('changed'); this.emit('changed');
} }
})); }));
this._fileWatches[filename] = signalId; this._fileWatches[key] = signalId;
}, },
_removeAnimationTimeout: function() { _removeAnimationTimeout: function() {
@ -328,9 +342,9 @@ const Background = new Lang.Class({
this._animation.transitionProgress, this._animation.transitionProgress,
this._style); this._style);
} else if (files.length > 0) { } else if (files.length > 0) {
this.background.set_filename(files[0], this._style); this.background.set_file(files[0], this._style);
} else { } else {
this.background.set_filename(null, this._style); this.background.set_file(null, this._style);
} }
this._queueUpdateAnimation(); this._queueUpdateAnimation();
}); });
@ -387,28 +401,28 @@ const Background = new Lang.Class({
GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation'); GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation');
}, },
_loadAnimation: function(filename) { _loadAnimation: function(file) {
this._cache.getAnimation({ filename: filename, this._cache.getAnimation({ file: file,
onLoaded: Lang.bind(this, function(animation) { onLoaded: Lang.bind(this, function(animation) {
this._animation = animation; this._animation = animation;
if (!this._animation || this._cancellable.is_cancelled()) { if (!this._animation || this._cancellable.is_cancelled()) {
this._setLoaded(); this._setLoaded();
return; return;
} }
this._updateAnimation(); this._updateAnimation();
this._watchFile(filename); this._watchFile(file);
}) })
}); });
}, },
_loadImage: function(filename) { _loadImage: function(file) {
this.background.set_filename(filename, this._style); this.background.set_file(file, this._style);
this._watchFile(filename); this._watchFile(file);
let cache = Meta.BackgroundImageCache.get_default(); let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(filename); let image = cache.load(file);
if (image.is_loaded()) if (image.is_loaded())
this._setLoaded(); this._setLoaded();
else { else {
@ -420,11 +434,11 @@ const Background = new Lang.Class({
} }
}, },
_loadFile: function(filename) { _loadFile: function(file) {
if (filename.endsWith('.xml')) if (file.get_basename().endsWith('.xml'))
this._loadAnimation(filename); this._loadAnimation(file);
else else
this._loadImage(filename); this._loadImage(file);
}, },
_load: function () { _load: function () {
@ -432,12 +446,12 @@ const Background = new Lang.Class({
this._loadPattern(); this._loadPattern();
if (!this._filename) { if (!this._file) {
this._setLoaded(); this._setLoaded();
return; return;
} }
this._loadFile(this._filename); this._loadFile(this._file);
}, },
}); });
Signals.addSignalMethods(Background.prototype); Signals.addSignalMethods(Background.prototype);
@ -448,11 +462,12 @@ const SystemBackground = new Lang.Class({
Name: 'SystemBackground', Name: 'SystemBackground',
_init: function() { _init: function() {
let filename = global.datadir + '/theme/noise-texture.png'; let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png');
if (_systemBackground == null) { if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_screen: global.screen }); _systemBackground = new Meta.Background({ meta_screen: global.screen });
_systemBackground.set_filename(filename, GDesktopEnums.BackgroundStyle.WALLPAPER); _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
_systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER);
} }
this.actor = new Meta.BackgroundActor({ meta_screen: global.screen, this.actor = new Meta.BackgroundActor({ meta_screen: global.screen,
@ -460,7 +475,7 @@ const SystemBackground = new Lang.Class({
background: _systemBackground }); background: _systemBackground });
let cache = Meta.BackgroundImageCache.get_default(); let cache = Meta.BackgroundImageCache.get_default();
let image = cache.load(filename); let image = cache.load(file);
if (image.is_loaded()) { if (image.is_loaded()) {
image = null; image = null;
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
@ -509,20 +524,17 @@ const BackgroundSource = new Lang.Class({
}, },
getBackground: function(monitorIndex) { getBackground: function(monitorIndex) {
let filename = null; let file = null;
let style; let style;
if (this._overrideImage != null) { if (this._overrideImage != null) {
filename = this._overrideImage; file = Gio.File.new_for_path(this._overrideImage);
style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode style = GDesktopEnums.BackgroundStyle.ZOOM; // Hardcode
} else { } else {
style = this._settings.get_enum(BACKGROUND_STYLE_KEY); style = this._settings.get_enum(BACKGROUND_STYLE_KEY);
if (style != GDesktopEnums.BackgroundStyle.NONE) { if (style != GDesktopEnums.BackgroundStyle.NONE) {
let uri = this._settings.get_string(PICTURE_URI_KEY); let uri = this._settings.get_string(PICTURE_URI_KEY);
if (GLib.uri_parse_scheme(uri) != null) file = Gio.File.new_for_commandline_arg(uri);
filename = Gio.File.new_for_uri(uri).get_path();
else
filename = uri;
} }
} }
@ -530,7 +542,7 @@ const BackgroundSource = new Lang.Class({
// they can have variants that depend on the aspect ratio and // they can have variants that depend on the aspect ratio and
// size of the monitor; for other backgrounds we can use the // size of the monitor; for other backgrounds we can use the
// same background object for all monitors. // same background object for all monitors.
if (filename == null || !filename.endsWith('.xml')) if (file == null || !file.get_basename().endsWith('.xml'))
monitorIndex = 0; monitorIndex = 0;
if (!(monitorIndex in this._backgrounds)) { if (!(monitorIndex in this._backgrounds)) {
@ -538,7 +550,7 @@ const BackgroundSource = new Lang.Class({
monitorIndex: monitorIndex, monitorIndex: monitorIndex,
layoutManager: this._layoutManager, layoutManager: this._layoutManager,
settings: this._settings, settings: this._settings,
filename: filename, file: file,
style: style style: style
}); });
@ -571,9 +583,9 @@ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',
_init: function(params) { _init: function(params) {
params = Params.parse(params, { filename: null }); params = Params.parse(params, { file: null });
this.filename = params.filename; this.file = params.file;
this.keyFrameFiles = []; this.keyFrameFiles = [];
this.transitionProgress = 0.0; this.transitionProgress = 0.0;
this.transitionDuration = 0.0; this.transitionDuration = 0.0;
@ -581,9 +593,7 @@ const Animation = new Lang.Class({
}, },
load: function(callback) { load: function(callback) {
let file = Gio.File.new_for_path(this.filename); this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() });
this._show = new GnomeDesktop.BGSlideShow({ filename: this.filename });
this._show.load_async(null, this._show.load_async(null,
Lang.bind(this, Lang.bind(this,
@ -603,16 +613,16 @@ const Animation = new Lang.Class({
if (this._show.get_num_slides() < 1) if (this._show.get_num_slides() < 1)
return; return;
let [progress, duration, isFixed, file1, file2] = this._show.get_current_slide(monitor.width, monitor.height); let [progress, duration, isFixed, filename1, filename2] = this._show.get_current_slide(monitor.width, monitor.height);
this.transitionDuration = duration; this.transitionDuration = duration;
this.transitionProgress = progress; this.transitionProgress = progress;
if (file1) if (filename1)
this.keyFrameFiles.push(file1); this.keyFrameFiles.push(Gio.File.new_for_path(filename1));
if (file2) if (filename2)
this.keyFrameFiles.push(file2); this.keyFrameFiles.push(Gio.File.new_for_path(filename2));
}, },
}); });
Signals.addSignalMethods(Animation.prototype); Signals.addSignalMethods(Animation.prototype);

View File

@ -13,9 +13,11 @@ const Shell = imports.gi.Shell;
const MSECS_IN_DAY = 24 * 60 * 60 * 1000; const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate'; const SHOW_WEEKDATE_KEY = 'show-weekdate';
const ELLIPSIS_CHAR = '\u2026';
// alias to prevent xgettext from picking up strings translated in GTK+ // alias to prevent xgettext from picking up strings translated in GTK+
const gtk30_ = Gettext_gtk30.gettext; const gtk30_ = Gettext_gtk30.gettext;
const NC_ = function(context, str) { return str; };
// in org.gnome.desktop.interface // in org.gnome.desktop.interface
const CLOCK_FORMAT_KEY = 'clock-format'; const CLOCK_FORMAT_KEY = 'clock-format';
@ -32,12 +34,10 @@ function _sameDay(dateA, dateB) {
return _sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate()); return _sameMonth(dateA, dateB) && (dateA.getDate() == dateB.getDate());
} }
/* TODO: maybe needs config - right now we assume that Saturday and
* Sunday are non-work days (not true in e.g. Israel, it's Sunday and
* Monday there)
*/
function _isWorkDay(date) { function _isWorkDay(date) {
return date.getDay() != 0 && date.getDay() != 6; /* Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
let days = C_('calendar-no-work', "06");
return days.indexOf(date.getDay().toString()) == -1;
} }
function _getBeginningOfDay(date) { function _getBeginningOfDay(date) {
@ -58,19 +58,21 @@ function _getEndOfDay(date) {
return ret; return ret;
} }
function _formatEventTime(event, clockFormat) { function _formatEventTime(event, clockFormat, periodBegin, periodEnd) {
let ret; let ret;
if (event.allDay) { let allDay = (event.allDay || (event.date <= periodBegin && event.end >= periodEnd));
if (allDay) {
/* Translators: Shown in calendar event list for all day events /* Translators: Shown in calendar event list for all day events
* Keep it short, best if you can use less then 10 characters * Keep it short, best if you can use less then 10 characters
*/ */
ret = C_("event list time", "All Day"); ret = C_("event list time", "All Day");
} else { } else {
let date = event.date >= periodBegin ? event.date : event.end;
switch (clockFormat) { switch (clockFormat) {
case '24h': case '24h':
/* Translators: Shown in calendar event list, if 24h format, /* Translators: Shown in calendar event list, if 24h format,
\u2236 is a ratio character, similar to : */ \u2236 is a ratio character, similar to : */
ret = event.date.toLocaleFormat(C_("event list time", "%H\u2236%M")); ret = date.toLocaleFormat(C_("event list time", "%H\u2236%M"));
break; break;
default: default:
@ -79,30 +81,13 @@ function _formatEventTime(event, clockFormat) {
/* Translators: Shown in calendar event list, if 12h format, /* Translators: Shown in calendar event list, if 12h format,
\u2236 is a ratio character, similar to : and \u2009 is \u2236 is a ratio character, similar to : and \u2009 is
a thin space */ a thin space */
ret = event.date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p")); ret = date.toLocaleFormat(C_("event list time", "%l\u2236%M\u2009%p"));
break; break;
} }
} }
return ret; return ret;
} }
function _getCalendarWeekForDate(date) {
// Based on the algorithms found here:
// http://en.wikipedia.org/wiki/Talk:ISO_week_date
let midnightDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
// Need to get Monday to be 1 ... Sunday to be 7
let dayOfWeek = 1 + ((midnightDate.getDay() + 6) % 7);
let nearestThursday = new Date(midnightDate.getFullYear(), midnightDate.getMonth(),
midnightDate.getDate() + (4 - dayOfWeek));
let jan1st = new Date(nearestThursday.getFullYear(), 0, 1);
let diffDate = nearestThursday - jan1st;
let dayNumber = Math.floor(Math.abs(diffDate) / MSECS_IN_DAY);
let weekNumber = Math.floor(dayNumber / 7) + 1;
return weekNumber;
}
function _getCalendarDayAbbreviation(dayNumber) { function _getCalendarDayAbbreviation(dayNumber) {
let abbreviations = [ let abbreviations = [
/* Translators: Calendar grid abbreviation for Sunday. /* Translators: Calendar grid abbreviation for Sunday.
@ -248,11 +233,24 @@ const DBusEventSource = new Lang.Class({
this._initialized = false; this._initialized = false;
this._dbusProxy = new CalendarServer(); this._dbusProxy = new CalendarServer();
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) { this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
let loaded = false;
try { try {
this._dbusProxy.init_finish(result); this._dbusProxy.init_finish(result);
loaded = true;
} catch(e) { } catch(e) {
log('Error loading calendars: ' + e.message); if (e.matches(Gio.DBusError, Gio.DBusError.TIMED_OUT)) {
return; // Ignore timeouts and install signals as normal, because with high
// probability the service will appear later on, and we will get a
// NameOwnerChanged which will finish loading
//
// (But still _initialized to false, because the proxy does not know
// about the HasCalendars property and would cause an exception trying
// to read it)
} else {
log('Error loading calendars: ' + e.message);
return;
}
} }
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged)); this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
@ -268,9 +266,11 @@ const DBusEventSource = new Lang.Class({
this.emit('notify::has-calendars'); this.emit('notify::has-calendars');
})); }));
this._initialized = true; this._initialized = loaded;
this.emit('notify::has-calendars'); if (loaded) {
this._onNameAppeared(); this.emit('notify::has-calendars');
this._onNameAppeared();
}
})); }));
}, },
@ -292,6 +292,7 @@ const DBusEventSource = new Lang.Class({
}, },
_onNameAppeared: function(owner) { _onNameAppeared: function(owner) {
this._initialized = true;
this._resetCache(); this._resetCache();
this._loadEvents(true); this._loadEvents(true);
}, },
@ -361,6 +362,12 @@ const DBusEventSource = new Lang.Class({
result.push(event); result.push(event);
} }
} }
result.sort(function(event1, event2) {
// sort events by end time on ending day
let d1 = event1.date < begin && event1.end <= end ? event1.end : event1.date;
let d2 = event2.date < begin && event2.end <= end ? event2.end : event2.date;
return d1.getTime() - d2.getTime();
});
return result; return result;
}, },
@ -661,7 +668,7 @@ const Calendar = new Lang.Class({
this._buttons.push(button); this._buttons.push(button);
if (this._useWeekdate && iter.getDay() == 4) { if (this._useWeekdate && iter.getDay() == 4) {
let label = new St.Label({ text: _getCalendarWeekForDate(iter).toString(), let label = new St.Label({ text: iter.toLocaleFormat('%V'),
style_class: 'calendar-day-base calendar-week-number'}); style_class: 'calendar-day-base calendar-week-number'});
layout.attach(label, rtl ? 7 : 0, row, 1, 1); layout.attach(label, rtl ? 7 : 0, row, 1, 1);
} }
@ -721,12 +728,16 @@ const EventsList = new Lang.Class({
this._eventSource.connect('changed', Lang.bind(this, this._update)); this._eventSource.connect('changed', Lang.bind(this, this._update));
}, },
_addEvent: function(event, index, includeDayName) { _addEvent: function(event, index, includeDayName, periodBegin, periodEnd) {
let dayString; let dayString;
if (includeDayName) if (includeDayName) {
dayString = _getEventDayAbbreviation(event.date.getDay()); if (event.date >= periodBegin)
else dayString = _getEventDayAbbreviation(event.date.getDay());
else /* show event end day if it began earlier */
dayString = _getEventDayAbbreviation(event.end.getDay());
} else {
dayString = ''; dayString = '';
}
let dayLabel = new St.Label({ style_class: 'events-day-dayname', let dayLabel = new St.Label({ style_class: 'events-day-dayname',
text: dayString, text: dayString,
@ -739,16 +750,30 @@ const EventsList = new Lang.Class({
let layout = this.actor.layout_manager; let layout = this.actor.layout_manager;
layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1); layout.attach(dayLabel, rtl ? 2 : 0, index, 1, 1);
let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY); let clockFormat = this._desktopSettings.get_string(CLOCK_FORMAT_KEY);
let timeString = _formatEventTime(event, clockFormat); let timeString = _formatEventTime(event, clockFormat, periodBegin, periodEnd);
let timeLabel = new St.Label({ style_class: 'events-day-time', let timeLabel = new St.Label({ style_class: 'events-day-time',
text: timeString, text: timeString,
y_align: Clutter.ActorAlign.START }); y_align: Clutter.ActorAlign.START });
timeLabel.clutter_text.line_wrap = false; timeLabel.clutter_text.line_wrap = false;
timeLabel.clutter_text.ellipsize = false; timeLabel.clutter_text.ellipsize = false;
layout.attach(timeLabel, 1, index, 1, 1); let preEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
text: ELLIPSIS_CHAR,
y_align: Clutter.ActorAlign.START });
let postEllipsisLabel = new St.Label({ style_class: 'events-day-time-ellipses',
text: ELLIPSIS_CHAR,
y_align: Clutter.ActorAlign.START });
if (event.allDay || event.date >= periodBegin)
preEllipsisLabel.opacity = 0;
if (event.allDay || event.end <= periodEnd)
postEllipsisLabel.opacity = 0;
let timeLabelBoxLayout = new St.BoxLayout();
timeLabelBoxLayout.add(preEllipsisLabel);
timeLabelBoxLayout.add(timeLabel);
timeLabelBoxLayout.add(postEllipsisLabel);
layout.attach(timeLabelBoxLayout, 1, index, 1, 1);
let titleLabel = new St.Label({ style_class: 'events-day-task', let titleLabel = new St.Label({ style_class: 'events-day-task',
text: event.summary, text: event.summary,
@ -759,8 +784,8 @@ const EventsList = new Lang.Class({
layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1); layout.attach(titleLabel, rtl ? 0 : 2, index, 1, 1);
}, },
_addPeriod: function(header, index, begin, end, includeDayName, showNothingScheduled) { _addPeriod: function(header, index, periodBegin, periodEnd, includeDayName, showNothingScheduled) {
let events = this._eventSource.getEvents(begin, end); let events = this._eventSource.getEvents(periodBegin, periodEnd);
if (events.length == 0 && !showNothingScheduled) if (events.length == 0 && !showNothingScheduled)
return index; return index;
@ -771,15 +796,14 @@ const EventsList = new Lang.Class({
index++; index++;
for (let n = 0; n < events.length; n++) { for (let n = 0; n < events.length; n++) {
this._addEvent(events[n], index, includeDayName); this._addEvent(events[n], index, includeDayName, periodBegin, periodEnd);
index++; index++;
} }
if (events.length == 0 && showNothingScheduled) { if (events.length == 0 && showNothingScheduled) {
let now = new Date();
/* Translators: Text to show if there are no events */ /* Translators: Text to show if there are no events */
let nothingEvent = new CalendarEvent(now, now, _("Nothing Scheduled"), true); let nothingEvent = new CalendarEvent(periodBegin, periodBegin, _("Nothing Scheduled"), true);
this._addEvent(nothingEvent, index, false); this._addEvent(nothingEvent, index, false, periodBegin, periodEnd);
index++; index++;
} }
@ -792,14 +816,17 @@ const EventsList = new Lang.Class({
let dayBegin = _getBeginningOfDay(day); let dayBegin = _getBeginningOfDay(day);
let dayEnd = _getEndOfDay(day); let dayEnd = _getEndOfDay(day);
let dayString; let dayFormat;
let now = new Date(); let now = new Date();
if (_sameYear(day, now)) if (_sameYear(day, now))
/* Translators: Shown on calendar heading when selected day occurs on current year */ /* Translators: Shown on calendar heading when selected day occurs on current year */
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d")); dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %d"));
else else
/* Translators: Shown on calendar heading when selected day occurs on different year */ /* Translators: Shown on calendar heading when selected day occurs on different year */
dayString = day.toLocaleFormat(C_("calendar heading", "%A, %B %d, %Y")); dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %d, %Y"));
let dayString = day.toLocaleFormat(dayFormat);
this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true); this._addPeriod(dayString, 0, dayBegin, dayEnd, false, true);
}, },

View File

@ -36,6 +36,8 @@ const NotificationDirection = {
RECEIVED: 'chat-received' RECEIVED: 'chat-received'
}; };
const N_ = function(s) { return s; };
function makeMessageFromTpMessage(tpMessage, direction) { function makeMessageFromTpMessage(tpMessage, direction) {
let [text, flags] = tpMessage.to_text(); let [text, flags] = tpMessage.to_text();
@ -950,70 +952,70 @@ const ChatNotification = new Lang.Class({
// Show only the time if date is on today // Show only the time if date is on today
if(daysAgo < 1){ if(daysAgo < 1){
/* Translators: Time in 24h format */ /* Translators: Time in 24h format */
format = _("%H\u2236%M"); format = N_("%H\u2236%M");
} }
// Show the word "Yesterday" and time if date is on yesterday // Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){ else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a /* Translators: this is the word "Yesterday" followed by a
time string in 24h format. i.e. "Yesterday, 14:30" */ time string in 24h format. i.e. "Yesterday, 14:30" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("Yesterday, %H\u2236%M"); format = N_("Yesterday, %H\u2236%M");
} }
// Show a week day and time if date is in the last week // Show a week day and time if date is in the last week
else if (daysAgo < 7) { else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time /* Translators: this is the week day name followed by a time
string in 24h format. i.e. "Monday, 14:30" */ string in 24h format. i.e. "Monday, 14:30" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("%A, %H\u2236%M"); format = N_("%A, %H\u2236%M");
} else if (date.getYear() == now.getYear()) { } else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number /* Translators: this is the month name and day number
followed by a time string in 24h format. followed by a time string in 24h format.
i.e. "May 25, 14:30" */ i.e. "May 25, 14:30" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("%B %d, %H\u2236%M"); format = N_("%B %d, %H\u2236%M");
} else { } else {
/* Translators: this is the month name, day number, year /* Translators: this is the month name, day number, year
number followed by a time string in 24h format. number followed by a time string in 24h format.
i.e. "May 25 2012, 14:30" */ i.e. "May 25 2012, 14:30" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("%B %d %Y, %H\u2236%M"); format = N_("%B %d %Y, %H\u2236%M");
} }
} else { } else {
// Show only the time if date is on today // Show only the time if date is on today
if(daysAgo < 1){ if(daysAgo < 1){
/* Translators: Time in 24h format */ /* Translators: Time in 24h format */
format = _("%l\u2236%M %p"); format = N_("%l\u2236%M %p");
} }
// Show the word "Yesterday" and time if date is on yesterday // Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){ else if(daysAgo <2){
/* Translators: this is the word "Yesterday" followed by a /* Translators: this is the word "Yesterday" followed by a
time string in 12h format. i.e. "Yesterday, 2:30 pm" */ time string in 12h format. i.e. "Yesterday, 2:30 pm" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("Yesterday, %l\u2236%M %p"); format = N_("Yesterday, %l\u2236%M %p");
} }
// Show a week day and time if date is in the last week // Show a week day and time if date is in the last week
else if (daysAgo < 7) { else if (daysAgo < 7) {
/* Translators: this is the week day name followed by a time /* Translators: this is the week day name followed by a time
string in 12h format. i.e. "Monday, 2:30 pm" */ string in 12h format. i.e. "Monday, 2:30 pm" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("%A, %l\u2236%M %p"); format = N_("%A, %l\u2236%M %p");
} else if (date.getYear() == now.getYear()) { } else if (date.getYear() == now.getYear()) {
/* Translators: this is the month name and day number /* Translators: this is the month name and day number
followed by a time string in 12h format. followed by a time string in 12h format.
i.e. "May 25, 2:30 pm" */ i.e. "May 25, 2:30 pm" */
// xgettext:no-c-format // xgettext:no-c-format
format = _("%B %d, %l\u2236%M %p"); format = N_("%B %d, %l\u2236%M %p");
} else { } else {
/* Translators: this is the month name, day number, year /* Translators: this is the month name, day number, year
number followed by a time string in 12h format. number followed by a time string in 12h format.
i.e. "May 25 2012, 2:30 pm"*/ i.e. "May 25 2012, 2:30 pm"*/
// xgettext:no-c-format // xgettext:no-c-format
format = _("%B %d %Y, %l\u2236%M %p"); format = N_("%B %d %Y, %l\u2236%M %p");
} }
} }
return date.toLocaleFormat(format); return date.toLocaleFormat(Shell.util_translate_time_string(format));
}, },
appendTimestamp: function() { appendTimestamp: function() {
@ -1264,9 +1266,8 @@ const SubscriptionRequestNotification = new Lang.Class({
let file = contact.get_avatar_file(); let file = contact.get_avatar_file();
if (file) { if (file) {
let uri = file.get_uri();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size, scaleFactor); iconBox.child = textureCache.load_file_async(file, iconBox._size, iconBox._size, scaleFactor);
} }
else { else {
iconBox.child = new St.Icon({ icon_name: 'avatar-default', iconBox.child = new St.Icon({ icon_name: 'avatar-default',

View File

@ -129,7 +129,7 @@ const DateMenuButton = new Lang.Class({
/* Translators: This is the date format to use when the calendar popup is /* Translators: This is the date format to use when the calendar popup is
* shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
*/ */
let dateFormat = _("%A %B %e, %Y"); let dateFormat = Shell.util_translate_time_string (N_("%A %B %e, %Y"));
this._date.set_label(now.toLocaleFormat(dateFormat)); this._date.set_label(now.toLocaleFormat(dateFormat));
} }
})); }));
@ -147,7 +147,7 @@ const DateMenuButton = new Lang.Class({
let now = new Date(); let now = new Date();
return now.getYear() == date.getYear() && return now.getYear() == date.getYear() &&
now.getMonth() == date.getMonth() && now.getMonth() == date.getMonth() &&
now.getDay() == date.getDay(); now.getDate() == date.getDate();
}, },
_appInstalledChanged: function() { _appInstalledChanged: function() {
@ -173,6 +173,10 @@ const DateMenuButton = new Lang.Class({
} }
}, },
_getEventSource: function() {
return new Calendar.DBusEventSource();
},
_setEventSource: function(eventSource) { _setEventSource: function(eventSource) {
if (this._eventSource) if (this._eventSource)
this._eventSource.destroy(); this._eventSource.destroy();
@ -190,7 +194,7 @@ const DateMenuButton = new Lang.Class({
let eventSource; let eventSource;
let showEvents = Main.sessionMode.showCalendarEvents; let showEvents = Main.sessionMode.showCalendarEvents;
if (showEvents) { if (showEvents) {
eventSource = new Calendar.DBusEventSource(); eventSource = this._getEventSource();
} else { } else {
eventSource = new Calendar.EmptyEventSource(); eventSource = new Calendar.EmptyEventSource();
} }

View File

@ -6,6 +6,8 @@ const Meta = imports.gi.Meta;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const St = imports.gi.St; const St = imports.gi.St;
const Main = imports.ui.main;
const EDGE_THRESHOLD = 20; const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80; const DRAG_DISTANCE = 80;
@ -13,9 +15,10 @@ const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction', Name: 'EdgeDragAction',
Extends: Clutter.GestureAction, Extends: Clutter.GestureAction,
_init : function(side) { _init : function(side, allowedModes) {
this.parent(); this.parent();
this._side = side; this._side = side;
this._allowedModes = allowedModes;
this.set_n_touch_points(1); this.set_n_touch_points(1);
global.display.connect('grab-op-begin', Lang.bind(this, function() { global.display.connect('grab-op-begin', Lang.bind(this, function() {
@ -34,6 +37,9 @@ const EdgeDragAction = new Lang.Class({
if (this.get_n_current_points() == 0) if (this.get_n_current_points() == 0)
return false; return false;
if (!(this._allowedModes & Main.actionMode))
return false;
let [x, y] = this.get_press_coords(0); let [x, y] = this.get_press_coords(0);
let monitorRect = this._getMonitorRect(x, y); let monitorRect = this._getMonitorRect(x, y);

View File

@ -77,6 +77,7 @@ function init() {
window._ = Gettext.gettext; window._ = Gettext.gettext;
window.C_ = Gettext.pgettext; window.C_ = Gettext.pgettext;
window.ngettext = Gettext.ngettext; window.ngettext = Gettext.ngettext;
window.N_ = function(s) { return s; };
// Miscellaneous monkeypatching // Miscellaneous monkeypatching
_patchContainerClass(St.BoxLayout); _patchContainerClass(St.BoxLayout);

View File

@ -203,14 +203,16 @@ const InstallExtensionDialog = new Lang.Class({
let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name); let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name);
let box = new St.BoxLayout(); let box = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
this.contentLayout.add(box); this.contentLayout.add(box);
let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) }) let gicon = new Gio.FileIcon({ file: Gio.File.new_for_uri(REPOSITORY_URL_BASE + info.icon) })
let icon = new St.Icon({ gicon: gicon }); let icon = new St.Icon({ gicon: gicon });
box.add(icon); box.add(icon);
let label = new St.Label({ text: message }); let label = new St.Label({ style_class: 'prompt-dialog-headline',
text: message });
box.add(label); box.add(label);
}, },

View File

@ -74,7 +74,7 @@ function disableExtension(uuid) {
if (extension.stylesheet) { if (extension.stylesheet) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme(); let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.unload_stylesheet(extension.stylesheet.get_path()); theme.unload_stylesheet(extension.stylesheet);
} }
try { try {
@ -118,7 +118,7 @@ function enableExtension(uuid) {
let stylesheetFile = extension.dir.get_child(stylesheetNames[i]); let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
if (stylesheetFile.query_exists(null)) { if (stylesheetFile.query_exists(null)) {
let theme = St.ThemeContext.get_for_stage(global.stage).get_theme(); let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
theme.load_stylesheet(stylesheetFile.get_path()); theme.load_stylesheet(stylesheetFile);
extension.stylesheet = stylesheetFile; extension.stylesheet = stylesheetFile;
break; break;
} }

View File

@ -187,14 +187,7 @@ const Keyboard = new Lang.Class({
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0, this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
Lang.bind(this, this._sync), Lang.bind(this, this._sync),
Lang.bind(this, this._sync)); Lang.bind(this, this._sync));
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME, this._daemonProxy = null;
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME, this._cursorProxy = new CursorManagerProxy(Gio.DBus.session, CURSOR_BUS_NAME,
CURSOR_OBJECT_PATH, CURSOR_OBJECT_PATH,
Lang.bind(this, function(proxy, error) { Lang.bind(this, function(proxy, error) {
@ -256,15 +249,28 @@ const Keyboard = new Lang.Class({
this.actor = null; this.actor = null;
this._destroySource(); this._destroySource();
this._daemonProxy.QuitRemote(function (result, error) { if (this._daemonProxy) {
if (error) { this._daemonProxy.QuitRemote(function (result, error) {
log(error.message); if (error) {
return; log(error.message);
} return;
}); }
});
this._daemonProxy = null;
}
}, },
_setupKeyboard: function() { _setupKeyboard: function() {
if (!this._daemonProxy) {
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
CARIBOU_OBJECT_PATH,
Lang.bind(this, function(proxy, error) {
if (error) {
log(error.message);
return;
}
}));
}
this._daemonProxy.RunRemote(function (result, error) { this._daemonProxy.RunRemote(function (result, error) {
if (error) { if (error) {
log(error.message); log(error.message);

View File

@ -20,7 +20,6 @@ const Tweener = imports.ui.tweener;
const STARTUP_ANIMATION_TIME = 0.5; const STARTUP_ANIMATION_TIME = 0.5;
const KEYBOARD_ANIMATION_TIME = 0.15; const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0; const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
// The message tray takes this much pressure // The message tray takes this much pressure
// in the pressure barrier at once to release it. // in the pressure barrier at once to release it.
@ -160,10 +159,10 @@ const LayoutManager = new Lang.Class({
this._isPopupWindowVisible = false; this._isPopupWindowVisible = false;
this._startingUp = true; this._startingUp = true;
// Normally, the stage is always covered so Clutter doesn't need to clear // We don't want to paint the stage background color because either
// it; however it becomes visible during the startup animation // the SystemBackground we create or the MetaBackgroundActor inside
// See the comment below for a longer explanation // global.window_group covers the entirety of the screen.
global.stage.background_color = DEFAULT_BACKGROUND_COLOR; global.stage.no_clear_hint = true;
// Set up stage hierarchy to group all UI actors under one container. // Set up stage hierarchy to group all UI actors under one container.
this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' }); this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
@ -423,10 +422,7 @@ const LayoutManager = new Lang.Class({
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y); this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
this.panelBox.set_size(this.primaryMonitor.width, -1); this.panelBox.set_size(this.primaryMonitor.width, -1);
if (this.keyboardIndex < 0) this.keyboardIndex = this.primaryIndex;
this.keyboardIndex = this.primaryIndex;
else
this._updateKeyboardBox();
this.trayBox.set_position(this.bottomMonitor.x, this.trayBox.set_position(this.bottomMonitor.x,
this.bottomMonitor.y + this.bottomMonitor.height); this.bottomMonitor.y + this.bottomMonitor.height);
@ -462,8 +458,8 @@ const LayoutManager = new Lang.Class({
_setupTrayPressure: function() { _setupTrayPressure: function() {
this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD, this._trayPressure = new PressureBarrier(MESSAGE_TRAY_PRESSURE_THRESHOLD,
MESSAGE_TRAY_PRESSURE_TIMEOUT, MESSAGE_TRAY_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW); Shell.ActionMode.OVERVIEW);
this._trayPressure.setEventFilter(this._trayBarrierEventFilter); this._trayPressure.setEventFilter(this._trayBarrierEventFilter);
this._trayPressure.connect('trigger', function(barrier) { this._trayPressure.connect('trigger', function(barrier) {
if (Main.layoutManager.bottomMonitor.inFullscreen) if (Main.layoutManager.bottomMonitor.inFullscreen)
@ -591,10 +587,6 @@ const LayoutManager = new Lang.Class({
// //
// When starting a normal user session, we want to grow it out of the middle // When starting a normal user session, we want to grow it out of the middle
// of the screen. // of the screen.
//
// Usually, we don't want to paint the stage background color because the
// MetaBackgroundActor inside global.window_group covers the entirety of the
// screen. So, we set no_clear_hint at the end of the animation.
_prepareStartupAnimation: function() { _prepareStartupAnimation: function() {
// During the initial transition, add a simple actor to block all events, // During the initial transition, add a simple actor to block all events,
@ -675,10 +667,6 @@ const LayoutManager = new Lang.Class({
}, },
_startupAnimationComplete: function() { _startupAnimationComplete: function() {
// At this point, the UI group is covering everything, so
// we no longer need to clear the stage
global.stage.no_clear_hint = true;
this._coverPane.destroy(); this._coverPane.destroy();
this._coverPane = null; this._coverPane = null;
@ -1079,8 +1067,8 @@ const HotCorner = new Lang.Class({
this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD, this._pressureBarrier = new PressureBarrier(HOT_CORNER_PRESSURE_THRESHOLD,
HOT_CORNER_PRESSURE_TIMEOUT, HOT_CORNER_PRESSURE_TIMEOUT,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW); Shell.ActionMode.OVERVIEW);
this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview)); this._pressureBarrier.connect('trigger', Lang.bind(this, this._toggleOverview));
// Cache the three ripples instead of dynamically creating and destroying them. // Cache the three ripples instead of dynamically creating and destroying them.
@ -1257,10 +1245,10 @@ const HotCorner = new Lang.Class({
const PressureBarrier = new Lang.Class({ const PressureBarrier = new Lang.Class({
Name: 'PressureBarrier', Name: 'PressureBarrier',
_init: function(threshold, timeout, keybindingMode) { _init: function(threshold, timeout, actionMode) {
this._threshold = threshold; this._threshold = threshold;
this._timeout = timeout; this._timeout = timeout;
this._keybindingMode = keybindingMode; this._actionMode = actionMode;
this._barriers = []; this._barriers = [];
this._eventFilter = null; this._eventFilter = null;
@ -1363,7 +1351,7 @@ const PressureBarrier = new Lang.Class({
return; return;
// Throw out all events not in the proper keybinding mode // Throw out all events not in the proper keybinding mode
if (!(this._keybindingMode & Main.keybindingMode)) if (!(this._actionMode & Main.actionMode))
return; return;
let slide = this._getDistanceAlongBarrier(barrier, event); let slide = this._getDistanceAlongBarrier(barrier, event);

View File

@ -1086,7 +1086,7 @@ const LookingGlass = new Lang.Class({
if (this._open) if (this._open)
return; return;
if (!Main.pushModal(this._entry, { keybindingMode: Shell.KeyBindingMode.LOOKING_GLASS })) if (!Main.pushModal(this._entry, { actionMode: Shell.ActionMode.LOOKING_GLASS }))
return; return;
this._notebook.selectIndex(0); this._notebook.selectIndex(0);

View File

@ -1198,12 +1198,7 @@ const ZoomRegion = new Lang.Class({
// Add a background for when the magnified uiGroup is scrolled // Add a background for when the magnified uiGroup is scrolled
// out of view (don't want to see desktop showing through). // out of view (don't want to see desktop showing through).
this._background = new Clutter.Actor({ background_color: Main.DEFAULT_BACKGROUND_COLOR, this._background = (new Background.SystemBackground()).actor;
layout_manager: new Clutter.BinLayout(),
width: global.screen_width,
height: global.screen_height });
let noiseTexture = (new Background.SystemBackground()).actor;
this._background.add_actor(noiseTexture);
mainGroup.add_actor(this._background); mainGroup.add_actor(this._background);
// Clone the group that contains all of UI on the screen. This is the // Clone the group that contains all of UI on the screen. This is the

View File

@ -4,6 +4,7 @@ const Clutter = imports.gi.Clutter;
const Gdk = imports.gi.Gdk; const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang; const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
@ -40,8 +41,6 @@ const Magnifier = imports.ui.magnifier;
const XdndHandler = imports.ui.xdndHandler; const XdndHandler = imports.ui.xdndHandler;
const Util = imports.misc.util; const Util = imports.misc.util;
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard'; const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable'; const STICKY_KEYS_ENABLE = 'stickykeys-enable';
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a'; const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
@ -64,7 +63,7 @@ let shellMountOpDBusService = null;
let screenSaverDBus = null; let screenSaverDBus = null;
let screencastService = null; let screencastService = null;
let modalCount = 0; let modalCount = 0;
let keybindingMode = Shell.KeyBindingMode.NONE; let actionMode = Shell.ActionMode.NONE;
let modalActorFocusStack = []; let modalActorFocusStack = [];
let uiGroup = null; let uiGroup = null;
let magnifier = null; let magnifier = null;
@ -77,18 +76,19 @@ let _cssStylesheet = null;
let _a11ySettings = null; let _a11ySettings = null;
function _sessionUpdated() { function _sessionUpdated() {
_loadDefaultStylesheet(); if (sessionMode.isPrimary)
_loadDefaultStylesheet();
wm.setCustomKeybindingHandler('panel-main-menu', wm.setCustomKeybindingHandler('panel-main-menu',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
sessionMode.hasOverview ? Lang.bind(overview, overview.toggle) : null); sessionMode.hasOverview ? Lang.bind(overview, overview.toggle) : null);
wm.allowKeybinding('overlay-key', Shell.KeyBindingMode.NORMAL | wm.allowKeybinding('overlay-key', Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW); Shell.ActionMode.OVERVIEW);
wm.setCustomKeybindingHandler('panel-run-dialog', wm.setCustomKeybindingHandler('panel-run-dialog',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
sessionMode.hasRunDialog ? openRunDialog : null); sessionMode.hasRunDialog ? openRunDialog : null);
if (!sessionMode.hasRunDialog) { if (!sessionMode.hasRunDialog) {
@ -111,6 +111,8 @@ function start() {
sessionMode = new SessionMode.SessionMode(); sessionMode = new SessionMode.SessionMode();
sessionMode.connect('updated', _sessionUpdated); sessionMode.connect('updated', _sessionUpdated);
Gtk.Settings.get_default().connect('notify::gtk-theme-name',
_loadDefaultStylesheet);
_initializeUI(); _initializeUI();
shellDBusService = new ShellDBus.GnomeShell(); shellDBusService = new ShellDBus.GnomeShell();
@ -131,6 +133,9 @@ function _initializeUI() {
Shell.WindowTracker.get_default(); Shell.WindowTracker.get_default();
Shell.AppUsage.get_default(); Shell.AppUsage.get_default();
let resource = Gio.Resource.load(global.datadir + '/gnome-shell-theme.gresource');
resource._register();
_loadDefaultStylesheet(); _loadDefaultStylesheet();
// Setup the stage hierarchy early // Setup the stage hierarchy early
@ -204,8 +209,8 @@ function _initializeUI() {
} }
layoutManager.connect('startup-complete', function() { layoutManager.connect('startup-complete', function() {
if (keybindingMode == Shell.KeyBindingMode.NONE) { if (actionMode == Shell.ActionMode.NONE) {
keybindingMode = Shell.KeyBindingMode.NORMAL; actionMode = Shell.ActionMode.NORMAL;
} }
if (screenShield) { if (screenShield) {
screenShield.lockIfWasLocked(); screenShield.lockIfWasLocked();
@ -224,12 +229,38 @@ function _initializeUI() {
}); });
} }
function _loadDefaultStylesheet() { function _getStylesheet(name) {
if (!sessionMode.isPrimary) let stylesheet;
return;
let stylesheet = global.datadir + '/theme/' + sessionMode.stylesheetName; stylesheet = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/' + name);
if (_defaultCssStylesheet == stylesheet) if (stylesheet.query_exists(null))
return stylesheet;
stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + name);
if (stylesheet.query_exists(null))
return stylesheet;
return null;
}
function _getDefaultStylesheet() {
let stylesheet = null;
let name = sessionMode.stylesheetName;
// Look for a high-contrast variant first when using GTK+'s HighContrast
// theme
if (Gtk.Settings.get_default().gtk_theme_name == 'HighContrast')
stylesheet = _getStylesheet(name.replace('.css', '-high-contrast.css'));
if (stylesheet == null)
stylesheet = _getStylesheet(sessionMode.stylesheetName);
return stylesheet;
}
function _loadDefaultStylesheet() {
let stylesheet = _getDefaultStylesheet();
if (_defaultCssStylesheet && _defaultCssStylesheet.equal(stylesheet))
return; return;
_defaultCssStylesheet = stylesheet; _defaultCssStylesheet = stylesheet;
@ -241,7 +272,7 @@ function _loadDefaultStylesheet() {
* *
* Get the theme CSS file that the shell will load * Get the theme CSS file that the shell will load
* *
* Returns: A file path that contains the theme CSS, * Returns: A #GFile that contains the theme CSS,
* null if using the default * null if using the default
*/ */
function getThemeStylesheet() { function getThemeStylesheet() {
@ -256,7 +287,7 @@ function getThemeStylesheet() {
* Set the theme CSS file that the shell will load * Set the theme CSS file that the shell will load
*/ */
function setThemeStylesheet(cssStylesheet) { function setThemeStylesheet(cssStylesheet) {
_cssStylesheet = cssStylesheet; _cssStylesheet = cssStylesheet ? Gio.File.new_for_path(cssStylesheet) : null;
} }
/** /**
@ -341,7 +372,7 @@ function _findModal(actor) {
* - options: Meta.ModalOptions flags to indicate that the pointer is * - options: Meta.ModalOptions flags to indicate that the pointer is
* already grabbed * already grabbed
* *
* - keybindingMode: used to set the current Shell.KeyBindingMode to filter * - actionMode: used to set the current Shell.ActionMode to filter
* global keybindings; the default of NONE will filter * global keybindings; the default of NONE will filter
* out all keybindings * out all keybindings
* *
@ -350,7 +381,7 @@ function _findModal(actor) {
function pushModal(actor, params) { function pushModal(actor, params) {
params = Params.parse(params, { timestamp: global.get_current_time(), params = Params.parse(params, { timestamp: global.get_current_time(),
options: 0, options: 0,
keybindingMode: Shell.KeyBindingMode.NONE }); actionMode: Shell.ActionMode.NONE });
if (modalCount == 0) { if (modalCount == 0) {
if (!global.begin_modal(params.timestamp, params.options)) { if (!global.begin_modal(params.timestamp, params.options)) {
@ -380,9 +411,9 @@ function pushModal(actor, params) {
destroyId: actorDestroyId, destroyId: actorDestroyId,
prevFocus: prevFocus, prevFocus: prevFocus,
prevFocusDestroyId: prevFocusDestroyId, prevFocusDestroyId: prevFocusDestroyId,
keybindingMode: keybindingMode }); actionMode: actionMode });
keybindingMode = params.keybindingMode; actionMode = params.actionMode;
global.stage.set_key_focus(actor); global.stage.set_key_focus(actor);
return true; return true;
} }
@ -408,7 +439,7 @@ function popModal(actor, timestamp) {
if (focusIndex < 0) { if (focusIndex < 0) {
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
global.end_modal(timestamp); global.end_modal(timestamp);
keybindingMode = Shell.KeyBindingMode.NORMAL; actionMode = Shell.ActionMode.NORMAL;
throw new Error('incorrect pop'); throw new Error('incorrect pop');
} }
@ -421,7 +452,7 @@ function popModal(actor, timestamp) {
if (focusIndex == modalActorFocusStack.length - 1) { if (focusIndex == modalActorFocusStack.length - 1) {
if (record.prevFocus) if (record.prevFocus)
record.prevFocus.disconnect(record.prevFocusDestroyId); record.prevFocus.disconnect(record.prevFocusDestroyId);
keybindingMode = record.keybindingMode; actionMode = record.actionMode;
global.stage.set_key_focus(record.prevFocus); global.stage.set_key_focus(record.prevFocus);
} else { } else {
// If we have: // If we have:
@ -446,7 +477,7 @@ function popModal(actor, timestamp) {
for (let i = modalActorFocusStack.length - 1; i > focusIndex; i--) { for (let i = modalActorFocusStack.length - 1; i > focusIndex; i--) {
modalActorFocusStack[i].prevFocus = modalActorFocusStack[i - 1].prevFocus; modalActorFocusStack[i].prevFocus = modalActorFocusStack[i - 1].prevFocus;
modalActorFocusStack[i].prevFocusDestroyId = modalActorFocusStack[i - 1].prevFocusDestroyId; modalActorFocusStack[i].prevFocusDestroyId = modalActorFocusStack[i - 1].prevFocusDestroyId;
modalActorFocusStack[i].keybindingMode = modalActorFocusStack[i - 1].keybindingMode; modalActorFocusStack[i].actionMode = modalActorFocusStack[i - 1].actionMode;
} }
} }
modalActorFocusStack.splice(focusIndex, 1); modalActorFocusStack.splice(focusIndex, 1);
@ -457,7 +488,7 @@ function popModal(actor, timestamp) {
layoutManager.modalEnded(); layoutManager.modalEnded();
global.end_modal(timestamp); global.end_modal(timestamp);
Meta.enable_unredirect_for_screen(global.screen); Meta.enable_unredirect_for_screen(global.screen);
keybindingMode = Shell.KeyBindingMode.NORMAL; actionMode = Shell.ActionMode.NORMAL;
} }
function createLookingGlass() { function createLookingGlass() {

View File

@ -1852,7 +1852,7 @@ const MessageTray = new Lang.Class({
this.idleMonitor = Meta.IdleMonitor.get_core(); this.idleMonitor = Meta.IdleMonitor.get_core();
this._grabHelper = new GrabHelper.GrabHelper(this.actor, this._grabHelper = new GrabHelper.GrabHelper(this.actor,
{ keybindingMode: Shell.KeyBindingMode.MESSAGE_TRAY }); { actionMode: Shell.ActionMode.MESSAGE_TRAY });
this._grabHelper.addActor(this._summaryBoxPointer.actor); this._grabHelper.addActor(this._summaryBoxPointer.actor);
this._grabHelper.addActor(this.actor); this._grabHelper.addActor(this.actor);
@ -1916,16 +1916,16 @@ const MessageTray = new Lang.Class({
Main.wm.addKeybinding('toggle-message-tray', Main.wm.addKeybinding('toggle-message-tray',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.MESSAGE_TRAY | Shell.ActionMode.MESSAGE_TRAY |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this.toggleAndNavigate)); Lang.bind(this, this.toggleAndNavigate));
Main.wm.addKeybinding('focus-active-notification', Main.wm.addKeybinding('focus-active-notification',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.MESSAGE_TRAY | Shell.ActionMode.MESSAGE_TRAY |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._expandActiveNotification)); Lang.bind(this, this._expandActiveNotification));
this._sources = new Map(); this._sources = new Map();
@ -1951,7 +1951,9 @@ const MessageTray = new Lang.Class({
this._messageTrayMenuButton.actor.connect('key-press-event', this._messageTrayMenuButton.actor.connect('key-press-event',
Lang.bind(this, this._onTrayButtonKeyPress)); Lang.bind(this, this._onTrayButtonKeyPress));
let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM); let gesture = new EdgeDragAction.EdgeDragAction(St.Side.BOTTOM,
Shell.ActionMode.NORMAL |
Shell.ActionMode.OVERVIEW);
gesture.connect('activated', Lang.bind(this, this.toggle)); gesture.connect('activated', Lang.bind(this, this.toggle));
global.stage.add_action(gesture); global.stage.add_action(gesture);
}, },
@ -2432,8 +2434,22 @@ const MessageTray = new Lang.Class({
if (shouldShowNotification && nextNotification) { if (shouldShowNotification && nextNotification) {
let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen; let limited = this._busy || Main.layoutManager.bottomMonitor.inFullscreen;
let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL); let showNextNotification = (!limited || nextNotification.forFeedback || nextNotification.urgency == Urgency.CRITICAL);
if (showNextNotification) if (showNextNotification) {
this._showNotification(); let len = this._notificationQueue.length;
if (len > 1) {
this._notificationQueue.length = 0;
let source = new SystemNotificationSource();
this.add(source);
let notification = new Notification(source, ngettext("%d new message", "%d new messages", len).format(len));
notification.setTransient(true);
notification.connect('clicked', Lang.bind(this, function() {
this.openTray();
}));
source.notify(notification);
} else {
this._showNotification();
}
}
} }
} else if (this._notificationState == State.SHOWN) { } else if (this._notificationState == State.SHOWN) {
let expired = (this._userActiveWhileNotificationShown && let expired = (this._userActiveWhileNotificationShown &&

View File

@ -41,14 +41,14 @@ const ModalDialog = new Lang.Class({
_init: function(params) { _init: function(params) {
params = Params.parse(params, { shellReactive: false, params = Params.parse(params, { shellReactive: false,
styleClass: null, styleClass: null,
keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL, actionMode: Shell.ActionMode.SYSTEM_MODAL,
shouldFadeIn: true, shouldFadeIn: true,
shouldFadeOut: true, shouldFadeOut: true,
destroyOnClose: true }); destroyOnClose: true });
this.state = State.CLOSED; this.state = State.CLOSED;
this._hasModal = false; this._hasModal = false;
this._keybindingMode = params.keybindingMode; this._actionMode = params.actionMode;
this._shellReactive = params.shellReactive; this._shellReactive = params.shellReactive;
this._shouldFadeIn = params.shouldFadeIn; this._shouldFadeIn = params.shouldFadeIn;
this._shouldFadeOut = params.shouldFadeOut; this._shouldFadeOut = params.shouldFadeOut;
@ -194,7 +194,7 @@ const ModalDialog = new Lang.Class({
}, },
placeSpinner: function(layoutInfo) { placeSpinner: function(layoutInfo) {
let spinnerIcon = global.datadir + '/theme/process-working.svg'; let spinnerIcon = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE); this._workSpinner = new Animation.AnimatedIcon(spinnerIcon, WORK_SPINNER_ICON_SIZE);
this._workSpinner.actor.opacity = 0; this._workSpinner.actor.opacity = 0;
this._workSpinner.actor.show(); this._workSpinner.actor.show();
@ -362,7 +362,7 @@ const ModalDialog = new Lang.Class({
if (this._hasModal) if (this._hasModal)
return true; return true;
if (!Main.pushModal(this._group, { timestamp: timestamp, if (!Main.pushModal(this._group, { timestamp: timestamp,
keybindingMode: this._keybindingMode })) actionMode: this._actionMode }))
return false; return false;
this._hasModal = true; this._hasModal = true;

View File

@ -509,7 +509,7 @@ const Overview = new Lang.Class({
if (shouldBeModal) { if (shouldBeModal) {
if (!this._modal) { if (!this._modal) {
if (Main.pushModal(this._overview, if (Main.pushModal(this._overview,
{ keybindingMode: Shell.KeyBindingMode.OVERVIEW })) { { actionMode: Shell.ActionMode.OVERVIEW })) {
this._modal = true; this._modal = true;
} else { } else {
this.hide(); this.hide();
@ -605,9 +605,9 @@ const Overview = new Lang.Class({
return; return;
} }
this._animateNotVisible();
this._shown = false; this._shown = false;
this._animateNotVisible();
this._syncGrab(); this._syncGrab();
}, },

View File

@ -181,6 +181,7 @@ const AppMenuButton = new Lang.Class({
this._targetApp = null; this._targetApp = null;
this._appMenuNotifyId = 0; this._appMenuNotifyId = 0;
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
this._busyNotifyId = 0;
let bin = new St.Bin({ name: 'appMenu' }); let bin = new St.Bin({ name: 'appMenu' });
bin.connect('style-changed', Lang.bind(this, this._onStyleChanged)); bin.connect('style-changed', Lang.bind(this, this._onStyleChanged));
@ -273,7 +274,7 @@ const AppMenuButton = new Lang.Class({
_onStyleChanged: function(actor) { _onStyleChanged: function(actor) {
let node = actor.get_theme_node(); let node = actor.get_theme_node();
let [success, icon] = node.lookup_url('spinner-image', false); let [success, icon] = node.lookup_url('spinner-image', false);
if (!success || this._spinnerIcon == icon) if (!success || (this._spinnerIcon && this._spinnerIcon.equal(icon)))
return; return;
this._spinnerIcon = icon; this._spinnerIcon = icon;
this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE); this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE);
@ -457,12 +458,17 @@ const AppMenuButton = new Lang.Class({
this._targetApp.disconnect(this._actionGroupNotifyId); this._targetApp.disconnect(this._actionGroupNotifyId);
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
} }
if (this._busyNotifyId) {
this._targetApp.disconnect(this._busyNotifyId);
this._busyNotifyId = 0;
}
this._targetApp = targetApp; this._targetApp = targetApp;
if (this._targetApp) { if (this._targetApp) {
this._appMenuNotifyId = this._targetApp.connect('notify::menu', Lang.bind(this, this._sync)); this._appMenuNotifyId = this._targetApp.connect('notify::menu', Lang.bind(this, this._sync));
this._actionGroupNotifyId = this._targetApp.connect('notify::action-group', Lang.bind(this, this._sync)); this._actionGroupNotifyId = this._targetApp.connect('notify::action-group', Lang.bind(this, this._sync));
this._busyNotifyId = this._targetApp.connect('notify::busy', Lang.bind(this, this._sync));
this._label.setText(this._targetApp.get_name()); this._label.setText(this._targetApp.get_name());
this.actor.set_accessible_name(this._targetApp.get_name()); this.actor.set_accessible_name(this._targetApp.get_name());
} }
@ -476,7 +482,7 @@ const AppMenuButton = new Lang.Class({
let isBusy = (this._targetApp != null && let isBusy = (this._targetApp != null &&
(this._targetApp.get_state() == Shell.AppState.STARTING || (this._targetApp.get_state() == Shell.AppState.STARTING ||
this._targetApp.get_state() == Shell.AppState.BUSY)); this._targetApp.get_busy()));
if (isBusy) if (isBusy)
this.startAnimation(); this.startAnimation();
else else
@ -887,7 +893,7 @@ const Panel = new Lang.Class({
this.statusArea = {}; this.statusArea = {};
this.menuManager = new PopupMenu.PopupMenuManager(this, { keybindingMode: Shell.KeyBindingMode.TOPBAR_POPUP }); this.menuManager = new PopupMenu.PopupMenuManager(this, { actionMode: Shell.ActionMode.TOPBAR_POPUP });
this._leftBox = new St.BoxLayout({ name: 'panelLeft' }); this._leftBox = new St.BoxLayout({ name: 'panelLeft' });
this.actor.add_actor(this._leftBox); this.actor.add_actor(this._leftBox);

View File

@ -85,7 +85,8 @@ const Clock = new Lang.Class({
let date = new Date(); let date = new Date();
/* Translators: This is a time format for a date in /* Translators: This is a time format for a date in
long format */ long format */
this._date.text = date.toLocaleFormat(_("%A, %B %d")); let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
this._date.text = date.toLocaleFormat(dateFormat);
}, },
destroy: function() { destroy: function() {
@ -646,14 +647,14 @@ const ScreenShield = new Lang.Class({
if (this._isModal) if (this._isModal)
return true; return true;
this._isModal = Main.pushModal(this.actor, { keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN }); this._isModal = Main.pushModal(this.actor, { actionMode: Shell.ActionMode.LOCK_SCREEN });
if (this._isModal) if (this._isModal)
return true; return true;
// We failed to get a pointer grab, it means that // We failed to get a pointer grab, it means that
// something else has it. Try with a keyboard grab only // something else has it. Try with a keyboard grab only
this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED, this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED,
keybindingMode: Shell.KeyBindingMode.LOCK_SCREEN }); actionMode: Shell.ActionMode.LOCK_SCREEN });
return this._isModal; return this._isModal;
}, },
@ -669,7 +670,9 @@ const ScreenShield = new Lang.Class({
if (this._lockScreenState != MessageTray.State.SHOWN) if (this._lockScreenState != MessageTray.State.SHOWN)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter); let isEnter = (symbol == Clutter.KEY_Return ||
symbol == Clutter.KEY_KP_Enter ||
symbol == Clutter.KEY_ISO_Enter);
if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape)) if (!isEnter && !(GLib.unichar_isprint(unichar) || symbol == Clutter.KEY_Escape))
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@ -1332,6 +1335,8 @@ const ScreenShield = new Lang.Class({
// If the previous shell crashed, and gnome-session restarted us, then re-lock // If the previous shell crashed, and gnome-session restarted us, then re-lock
lockIfWasLocked: function() { lockIfWasLocked: function() {
if (!this._settings.get_boolean(LOCK_ENABLED_KEY))
return;
let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR); let wasLocked = global.get_runtime_state('b', LOCKED_STATE_STR);
if (wasLocked === null) if (wasLocked === null)
return; return;

View File

@ -90,6 +90,12 @@ const GnomeShell = new Lang.Class({
function(display, action, deviceid, timestamp) { function(display, action, deviceid, timestamp) {
this._emitAcceleratorActivated(action, deviceid, timestamp); this._emitAcceleratorActivated(action, deviceid, timestamp);
})); }));
this._cachedOverviewVisible = false;
Main.overview.connect('showing',
Lang.bind(this, this._checkOverviewVisibleChanged));
Main.overview.connect('hidden',
Lang.bind(this, this._checkOverviewVisibleChanged));
}, },
/** /**
@ -134,7 +140,7 @@ const GnomeShell = new Lang.Class({
params[param] = params[param].deep_unpack(); params[param] = params[param].deep_unpack();
let monitorIndex = -1; let monitorIndex = -1;
if (params['monitor']) if (params['monitor'] >= 0)
monitorIndex = params['monitor']; monitorIndex = params['monitor'];
let icon = null; let icon = null;
@ -235,8 +241,15 @@ const GnomeShell = new Lang.Class({
Mode: global.session_mode, Mode: global.session_mode,
_checkOverviewVisibleChanged: function() {
if (Main.overview.visible !== this._cachedOverviewVisible) {
this._cachedOverviewVisible = Main.overview.visible;
this._dbusImpl.emit_property_changed('OverviewActive', new GLib.Variant('b', this._cachedOverviewVisible));
}
},
get OverviewActive() { get OverviewActive() {
return Main.overview.visible; return this._cachedOverviewVisible;
}, },
set OverviewActive(visible) { set OverviewActive(visible) {

View File

@ -163,13 +163,13 @@ const InputSourceManager = new Lang.Class({
Main.wm.addKeybinding('switch-input-source', Main.wm.addKeybinding('switch-input-source',
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }), new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.ALL, Shell.ActionMode.ALL,
Lang.bind(this, this._switchInputSource)); Lang.bind(this, this._switchInputSource));
this._keybindingActionBackward = this._keybindingActionBackward =
Main.wm.addKeybinding('switch-input-source-backward', Main.wm.addKeybinding('switch-input-source-backward',
new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }), new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings" }),
Meta.KeyBindingFlags.IS_REVERSED, Meta.KeyBindingFlags.IS_REVERSED,
Shell.KeyBindingMode.ALL, Shell.ActionMode.ALL,
Lang.bind(this, this._switchInputSource)); Lang.bind(this, this._switchInputSource));
this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA }); this._settings = new Gio.Settings({ schema_id: DESKTOP_INPUT_SOURCES_SCHEMA });
this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged)); this._settings.connect('changed::' + KEY_INPUT_SOURCES, Lang.bind(this, this._inputSourcesChanged));
@ -239,8 +239,8 @@ const InputSourceManager = new Lang.Class({
// effect without considerable work to consolidate the usage // effect without considerable work to consolidate the usage
// of pushModal/popModal and grabHelper. See // of pushModal/popModal and grabHelper. See
// https://bugzilla.gnome.org/show_bug.cgi?id=695143 . // https://bugzilla.gnome.org/show_bug.cgi?id=695143 .
if (Main.keybindingMode == Shell.KeyBindingMode.MESSAGE_TRAY || if (Main.actionMode == Shell.ActionMode.MESSAGE_TRAY ||
Main.keybindingMode == Shell.KeyBindingMode.TOPBAR_POPUP) { Main.actionMode == Shell.ActionMode.TOPBAR_POPUP) {
this._modifiersSwitcher(); this._modifiersSwitcher();
return; return;
} }
@ -381,6 +381,10 @@ const InputSourceManager = new Lang.Class({
if (this._mruSources.length > 0) if (this._mruSources.length > 0)
this._mruSources[0].activate(); this._mruSources[0].activate();
// All ibus engines are preloaded here to reduce the launching time
// when users switch the input sources.
this._ibusManager.preloadEngines(Object.keys(this._ibusSources));
}, },
_makeEngineShortName: function(engineDesc) { _makeEngineShortName: function(engineDesc) {

View File

@ -876,7 +876,8 @@ const NMWirelessDialog = new Lang.Class({
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this._noNetworksSpinner = new Animation.AnimatedIcon(global.datadir + '/theme/process-working.svg', 24, 24); let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24);
this._noNetworksBox.add_actor(this._noNetworksSpinner.actor); this._noNetworksBox.add_actor(this._noNetworksSpinner.actor);
this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label', this._noNetworksBox.add_actor(new St.Label({ style_class: 'no-networks-label',
text: _("No Networks") })); text: _("No Networks") }));
@ -1866,7 +1867,7 @@ const NMApplet = new Lang.Class({
_connectionRemoved: function(connection) { _connectionRemoved: function(connection) {
let pos = this._connections.indexOf(connection); let pos = this._connections.indexOf(connection);
if (pos != -1) if (pos != -1)
this._connections.splice(connection, 1); this._connections.splice(pos, 1);
let section = connection._section; let section = connection._section;

View File

@ -15,6 +15,7 @@ const RfkillManagerInterface = '<node> \
<interface name="org.gnome.SettingsDaemon.Rfkill"> \ <interface name="org.gnome.SettingsDaemon.Rfkill"> \
<property name="AirplaneMode" type="b" access="readwrite" /> \ <property name="AirplaneMode" type="b" access="readwrite" /> \
<property name="HardwareAirplaneMode" type="b" access="read" /> \ <property name="HardwareAirplaneMode" type="b" access="read" /> \
<property name="ShouldShowAirplaneMode" type="b" access="read" /> \
</interface> \ </interface> \
</node>'; </node>';
@ -48,6 +49,10 @@ const RfkillManager = new Lang.Class({
return this._proxy.HardwareAirplaneMode; return this._proxy.HardwareAirplaneMode;
}, },
get shouldShowAirplaneMode() {
return this._proxy.ShouldShowAirplaneMode;
},
_changed: function() { _changed: function() {
this.emit('airplane-mode-changed'); this.emit('airplane-mode-changed');
} }
@ -101,11 +106,10 @@ const Indicator = new Lang.Class({
_sync: function() { _sync: function() {
let airplaneMode = this._manager.airplaneMode; let airplaneMode = this._manager.airplaneMode;
let hwAirplaneMode = this._manager.hwAirplaneMode; let hwAirplaneMode = this._manager.hwAirplaneMode;
let changed = (airplaneMode != this._indicator.visible) || let showAirplaneMode = this._manager.shouldShowAirplaneMode;
(hwAirplaneMode != this._offItem.actor.visible);
this._indicator.visible = airplaneMode; this._indicator.visible = (airplaneMode && showAirplaneMode);
this._item.actor.visible = airplaneMode; this._item.actor.visible = (airplaneMode && showAirplaneMode);
this._offItem.setSensitive(!hwAirplaneMode); this._offItem.setSensitive(!hwAirplaneMode);
if (hwAirplaneMode) if (hwAirplaneMode)

View File

@ -87,8 +87,6 @@ const SwitcherPopup = new Lang.Class({
let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT); let leftPadding = this.actor.get_theme_node().get_padding(St.Side.LEFT);
let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT); let rightPadding = this.actor.get_theme_node().get_padding(St.Side.RIGHT);
let bottomPadding = this.actor.get_theme_node().get_padding(St.Side.BOTTOM);
let vPadding = this.actor.get_theme_node().get_vertical_padding();
let hPadding = leftPadding + rightPadding; let hPadding = leftPadding + rightPadding;
// Allocate the switcherList // Allocate the switcherList

View File

@ -154,7 +154,7 @@ const UnlockDialog = new Lang.Class({
return true; return true;
if (!Main.pushModal(this.actor, { timestamp: timestamp, if (!Main.pushModal(this.actor, { timestamp: timestamp,
keybindingMode: Shell.KeyBindingMode.UNLOCK_SCREEN })) actionMode: Shell.ActionMode.UNLOCK_SCREEN }))
return false; return false;
this._isModal = true; this._isModal = true;

View File

@ -65,7 +65,8 @@ const ShowOverviewAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { vfunc_gesture_prepare : function(action, actor) {
return this.get_n_current_points() == this.get_n_touch_points(); return Main.actionMode == Shell.ActionMode.NORMAL &&
this.get_n_current_points() == this.get_n_touch_points();
}, },
_getBoundingRect : function(motion) { _getBoundingRect : function(motion) {
@ -193,27 +194,30 @@ const ViewSelector = new Lang.Class({
// the windows to animate, but now we no longer want to // the windows to animate, but now we no longer want to
// show it given that we are now on the apps page or // show it given that we are now on the apps page or
// search page. // search page.
if (this._activePage != this._workspacesPage) if (this._activePage != this._workspacesPage) {
this._workspacesPage.opacity = 0; this._workspacesPage.opacity = 0;
this._workspacesPage.hide();
}
})); }));
Main.wm.addKeybinding('toggle-application-view', Main.wm.addKeybinding('toggle-application-view',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._toggleAppsPage)); Lang.bind(this, this._toggleAppsPage));
Main.wm.addKeybinding('toggle-overview', Main.wm.addKeybinding('toggle-overview',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(Main.overview, Main.overview.toggle)); Lang.bind(Main.overview, Main.overview.toggle));
let gesture; let gesture;
gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT); gesture = new EdgeDragAction.EdgeDragAction(St.Side.LEFT,
Shell.ActionMode.NORMAL);
gesture.connect('activated', Lang.bind(this, function() { gesture.connect('activated', Lang.bind(this, function() {
if (Main.overview.visible) if (Main.overview.visible)
Main.overview.hide(); Main.overview.hide();

View File

@ -478,7 +478,9 @@ const WorkspaceSwitchAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { vfunc_gesture_prepare : function(action, actor) {
return this.get_n_current_points() == this.get_n_touch_points(); let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
return this.get_n_current_points() == this.get_n_touch_points() &&
(allowedModes & Main.actionMode);
}, },
vfunc_gesture_end : function(action, actor) { vfunc_gesture_end : function(action, actor) {
@ -526,7 +528,7 @@ const AppSwitchAction = new Lang.Class({
}, },
vfunc_gesture_prepare : function(action, actor) { vfunc_gesture_prepare : function(action, actor) {
if (Main.overview.visible) { if (Main.actionMode != Shell.ActionMode.NORMAL) {
this.cancel(); this.cancel();
return false; return false;
} }
@ -616,177 +618,178 @@ const WindowManager = new Lang.Class({
this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow)); this._shellwm.connect('destroy', Lang.bind(this, this._destroyWindow));
this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding)); this._shellwm.connect('filter-keybinding', Lang.bind(this, this._filterKeybinding));
this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange)); this._shellwm.connect('confirm-display-change', Lang.bind(this, this._confirmDisplayChange));
global.screen.connect('restacked', Lang.bind(this, this._syncStacking));
this._workspaceSwitcherPopup = null; this._workspaceSwitcherPopup = null;
this._tilePreview = null; this._tilePreview = null;
this.setCustomKeybindingHandler('switch-to-workspace-left', this.setCustomKeybindingHandler('switch-to-workspace-left',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-right', this.setCustomKeybindingHandler('switch-to-workspace-right',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-up', this.setCustomKeybindingHandler('switch-to-workspace-up',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-down', this.setCustomKeybindingHandler('switch-to-workspace-down',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-last', this.setCustomKeybindingHandler('switch-to-workspace-last',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-left', this.setCustomKeybindingHandler('move-to-workspace-left',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-right', this.setCustomKeybindingHandler('move-to-workspace-right',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-up', this.setCustomKeybindingHandler('move-to-workspace-up',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-down', this.setCustomKeybindingHandler('move-to-workspace-down',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-1', this.setCustomKeybindingHandler('switch-to-workspace-1',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-2', this.setCustomKeybindingHandler('switch-to-workspace-2',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-3', this.setCustomKeybindingHandler('switch-to-workspace-3',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-4', this.setCustomKeybindingHandler('switch-to-workspace-4',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-5', this.setCustomKeybindingHandler('switch-to-workspace-5',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-6', this.setCustomKeybindingHandler('switch-to-workspace-6',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-7', this.setCustomKeybindingHandler('switch-to-workspace-7',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-8', this.setCustomKeybindingHandler('switch-to-workspace-8',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-9', this.setCustomKeybindingHandler('switch-to-workspace-9',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-10', this.setCustomKeybindingHandler('switch-to-workspace-10',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-11', this.setCustomKeybindingHandler('switch-to-workspace-11',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-to-workspace-12', this.setCustomKeybindingHandler('switch-to-workspace-12',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW, Shell.ActionMode.OVERVIEW,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-1', this.setCustomKeybindingHandler('move-to-workspace-1',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-2', this.setCustomKeybindingHandler('move-to-workspace-2',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-3', this.setCustomKeybindingHandler('move-to-workspace-3',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-4', this.setCustomKeybindingHandler('move-to-workspace-4',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-5', this.setCustomKeybindingHandler('move-to-workspace-5',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-6', this.setCustomKeybindingHandler('move-to-workspace-6',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-7', this.setCustomKeybindingHandler('move-to-workspace-7',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-8', this.setCustomKeybindingHandler('move-to-workspace-8',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-9', this.setCustomKeybindingHandler('move-to-workspace-9',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-10', this.setCustomKeybindingHandler('move-to-workspace-10',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-11', this.setCustomKeybindingHandler('move-to-workspace-11',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-12', this.setCustomKeybindingHandler('move-to-workspace-12',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('move-to-workspace-last', this.setCustomKeybindingHandler('move-to-workspace-last',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._showWorkspaceSwitcher)); Lang.bind(this, this._showWorkspaceSwitcher));
this.setCustomKeybindingHandler('switch-applications', this.setCustomKeybindingHandler('switch-applications',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-group', this.setCustomKeybindingHandler('switch-group',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-applications-backward', this.setCustomKeybindingHandler('switch-applications-backward',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-group-backward', this.setCustomKeybindingHandler('switch-group-backward',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._startAppSwitcher)); Lang.bind(this, this._startAppSwitcher));
this.setCustomKeybindingHandler('switch-windows', this.setCustomKeybindingHandler('switch-windows',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._startWindowSwitcher)); Lang.bind(this, this._startWindowSwitcher));
this.setCustomKeybindingHandler('switch-windows-backward', this.setCustomKeybindingHandler('switch-windows-backward',
Shell.KeyBindingMode.NORMAL, Shell.ActionMode.NORMAL,
Lang.bind(this, this._startWindowSwitcher)); Lang.bind(this, this._startWindowSwitcher));
this.setCustomKeybindingHandler('switch-panels', this.setCustomKeybindingHandler('switch-panels',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW | Shell.ActionMode.OVERVIEW |
Shell.KeyBindingMode.LOCK_SCREEN | Shell.ActionMode.LOCK_SCREEN |
Shell.KeyBindingMode.UNLOCK_SCREEN | Shell.ActionMode.UNLOCK_SCREEN |
Shell.KeyBindingMode.LOGIN_SCREEN, Shell.ActionMode.LOGIN_SCREEN,
Lang.bind(this, this._startA11ySwitcher)); Lang.bind(this, this._startA11ySwitcher));
this.setCustomKeybindingHandler('switch-panels-backward', this.setCustomKeybindingHandler('switch-panels-backward',
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.OVERVIEW | Shell.ActionMode.OVERVIEW |
Shell.KeyBindingMode.LOCK_SCREEN | Shell.ActionMode.LOCK_SCREEN |
Shell.KeyBindingMode.UNLOCK_SCREEN | Shell.ActionMode.UNLOCK_SCREEN |
Shell.KeyBindingMode.LOGIN_SCREEN, Shell.ActionMode.LOGIN_SCREEN,
Lang.bind(this, this._startA11ySwitcher)); Lang.bind(this, this._startA11ySwitcher));
this.addKeybinding('pause-resume-tweens', this.addKeybinding('pause-resume-tweens',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.ALL, Shell.ActionMode.ALL,
Lang.bind(this, this._toggleTweens)); Lang.bind(this, this._toggleTweens));
this.addKeybinding('open-application-menu', this.addKeybinding('open-application-menu',
new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }), new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE, Meta.KeyBindingFlags.NONE,
Shell.KeyBindingMode.NORMAL | Shell.ActionMode.NORMAL |
Shell.KeyBindingMode.TOPBAR_POPUP, Shell.ActionMode.TOPBAR_POPUP,
Lang.bind(this, this._toggleAppMenu)); Lang.bind(this, this._toggleAppMenu));
Main.overview.connect('showing', Lang.bind(this, function() { Main.overview.connect('showing', Lang.bind(this, function() {
@ -875,7 +878,7 @@ const WindowManager = new Lang.Class({
removeKeybinding: function(name) { removeKeybinding: function(name) {
if (global.display.remove_keybinding(name)) if (global.display.remove_keybinding(name))
this.allowKeybinding(name, Shell.KeyBindingMode.NONE); this.allowKeybinding(name, Shell.ActionMode.NONE);
}, },
allowKeybinding: function(name, modes) { allowKeybinding: function(name, modes) {
@ -1232,18 +1235,36 @@ const WindowManager = new Lang.Class({
}, },
_filterKeybinding: function(shellwm, binding) { _filterKeybinding: function(shellwm, binding) {
if (Main.keybindingMode == Shell.KeyBindingMode.NONE) if (Main.actionMode == Shell.ActionMode.NONE)
return true; return true;
// There's little sense in implementing a keybinding in mutter and // There's little sense in implementing a keybinding in mutter and
// not having it work in NORMAL mode; handle this case generically // not having it work in NORMAL mode; handle this case generically
// so we don't have to explicitly allow all builtin keybindings in // so we don't have to explicitly allow all builtin keybindings in
// NORMAL mode. // NORMAL mode.
if (Main.keybindingMode == Shell.KeyBindingMode.NORMAL && if (Main.actionMode == Shell.ActionMode.NORMAL &&
binding.is_builtin()) binding.is_builtin())
return false; return false;
return !(this._allowedKeybindings[binding.get_name()] & Main.keybindingMode); return !(this._allowedKeybindings[binding.get_name()] & Main.actionMode);
},
_syncStacking: function() {
if (this._switchData == null)
return;
// Update stacking of windows in inGroup (aka the workspace we are
// switching to). Windows in outGroup are about to be hidden anyway,
// so we just ignore them here.
let windows = global.get_window_actors();
let sibling = null;
for (let i = 0; i < windows.length; i++) {
if (windows[i].get_parent() != this._switchData.inGroup)
continue;
this._switchData.inGroup.set_child_above_sibling(windows[i], sibling);
sibling = windows[i];
}
}, },
_switchWorkspace : function(shellwm, from, to, direction) { _switchWorkspace : function(shellwm, from, to, direction) {

View File

@ -68,6 +68,7 @@ th
tr tr
ug ug
uk uk
uz@cyrillic
vi vi
zh_CN zh_CN
zh_HK zh_HK

998
po/an.po

File diff suppressed because it is too large Load Diff

364
po/cs.po
View File

@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-22 19:42+0000\n" "POT-Creation-Date: 2014-11-26 08:34+0000\n"
"PO-Revision-Date: 2014-09-23 07:05+0200\n" "PO-Revision-Date: 2014-11-26 12:05+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n" "Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n" "Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n" "Language: cs\n"
@ -293,8 +293,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukazatele" msgstr "Se změnou zaměření v režimu myši čekat na zastavení pohybu ukazatele"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" msgid "Network Login"
msgstr "Přihlašovací portál" msgstr "Přihlášení do sítě"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
@ -309,7 +309,7 @@ msgstr "Rozšíření GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "Zrušit" msgstr "Zrušit"
@ -327,33 +327,33 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Přihlásit se" msgstr "Přihlásit se"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "Vybrat sezení" msgstr "Vybrat sezení"
#: ../js/gdm/loginDialog.js:429 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "Nejste na seznamu?" msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(např. uživatel nebo %s)" msgstr "(např. uživatel nebo %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "Uživatelské jméno: " msgstr "Uživatelské jméno: "
#: ../js/gdm/loginDialog.js:922 #: ../js/gdm/loginDialog.js:955
msgid "Login Window" msgid "Login Window"
msgstr "Přihlašovací okno" msgstr "Přihlašovací okno"
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "Chyba ověření" msgstr "Chyba ověření"
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(nebo otiskněte prst)" msgstr "(nebo otiskněte prst)"
@ -374,31 +374,31 @@ msgstr "Vykonání „%s“ selhalo:"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Přesměrováno na ověření přes web" msgstr "Přesměrováno na ověření přes web"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Zde se objeví často používané aplikace" msgstr "Zde se objeví často používané aplikace"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "Časté" msgstr "Časté"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "Všechny" msgstr "Všechny"
#: ../js/ui/appDisplay.js:1790 #: ../js/ui/appDisplay.js:1789
msgid "New Window" msgid "New Window"
msgstr "Nové okno" msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených" msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1822 #: ../js/ui/appDisplay.js:1821
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené" msgstr "Přidat mezi oblíbené"
#: ../js/ui/appDisplay.js:1831 #: ../js/ui/appDisplay.js:1830
msgid "Show Details" msgid "Show Details"
msgstr "Zobrazit podrobnosti" msgstr "Zobrazit podrobnosti"
@ -421,17 +421,23 @@ msgstr "Nastavení"
msgid "Change Background…" msgid "Change Background…"
msgstr "Změnit pozadí…" msgstr "Změnit pozadí…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Celý den" msgstr "Celý den"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%k%M" msgstr "%k%M"
@ -439,7 +445,7 @@ msgstr "%k%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -449,43 +455,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:115
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "Ne" msgstr "Ne"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:117
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "Po" msgstr "Po"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:119
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "Út" msgstr "Út"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:121
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "St" msgstr "St"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:123
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "Čt" msgstr "Čt"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:125
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "Pá" msgstr "Pá"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:127
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "So" msgstr "So"
@ -496,85 +502,83 @@ msgstr "So"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:140
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Ne" msgstr "Ne"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:142
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Po" msgstr "Po"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:144
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "Út" msgstr "Út"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:146
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "St" msgstr "St"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:148
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "Čt" msgstr "Čt"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:150
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "Pá" msgstr "Pá"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:152
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "So" msgstr "So"
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:461
msgid "Previous month" msgid "Previous month"
msgstr "Předchozí měsíc" msgstr "Předchozí měsíc"
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:471
msgid "Next month" msgid "Next month"
msgstr "Následující měsíc" msgstr "Následující měsíc"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:806
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "nic nenaplánováno" msgstr "nic nenaplánováno"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #: ../js/ui/calendar.js:825
#: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %e. %B" msgstr "%A, %e. %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #: ../js/ui/calendar.js:829
#: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %e. %B %Y" msgstr "%A, %e. %B %Y"
#: ../js/ui/calendar.js:813 #: ../js/ui/calendar.js:841
msgid "Today" msgid "Today"
msgstr "Dnes" msgstr "Dnes"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:845
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Zítra" msgstr "Zítra"
#: ../js/ui/calendar.js:828 #: ../js/ui/calendar.js:856
msgid "This week" msgid "This week"
msgstr "Tento týden" msgstr "Tento týden"
#: ../js/ui/calendar.js:836 #: ../js/ui/calendar.js:864
msgid "Next week" msgid "Next week"
msgstr "Následující týden" msgstr "Následující týden"
@ -608,7 +612,7 @@ msgid "Type again:"
msgstr "Napište znovu:" msgstr "Napište znovu:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Připojit" msgstr "Připojit"
@ -702,102 +706,102 @@ msgstr "Ověřit"
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu." msgstr "Ověření bohužel nebylo úspěšné. Zkuste to prosím znovu."
#: ../js/ui/components/telepathyClient.js:240 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "Pozvání" msgstr "Pozvání"
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "Hovor" msgstr "Hovor"
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "Přenos souborů" msgstr "Přenos souborů"
#: ../js/ui/components/telepathyClient.js:420 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "Diskuse" msgstr "Diskuse"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "Zrušit ztlumení" msgstr "Zrušit ztlumení"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "Ztlumit" msgstr "Ztlumit"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%k%M" msgstr "%k%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960 #: ../js/ui/components/telepathyClient.js:962
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "včera, %k%M" msgstr "včera, %k%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967 #: ../js/ui/components/telepathyClient.js:969
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %k%M" msgstr "%A, %k%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974 #: ../js/ui/components/telepathyClient.js:976
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%e. %B %k%M" msgstr "%e. %B %k%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980 #: ../js/ui/components/telepathyClient.js:982
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%e. %B %Y, %k%M" msgstr "%e. %B %Y, %k%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l%M%p" msgstr "%l%M%p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993 #: ../js/ui/components/telepathyClient.js:995
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "včera, %l%M%p" msgstr "včera, %l%M%p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000 #: ../js/ui/components/telepathyClient.js:1002
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M%p" msgstr "%A, %l%M%p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007 #: ../js/ui/components/telepathyClient.js:1009
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%e. %B, %l%M%p" msgstr "%e. %B, %l%M%p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%e. %B %Y, %l%M%p" msgstr "%e. %B %Y, %l%M%p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s je teď znám jako %s" msgstr "%s je teď znám jako %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Pozvánka na připojení k %s" msgstr "Pozvánka na připojení k %s"
@ -805,38 +809,38 @@ msgstr "Pozvánka na připojení k %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1157 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s vás zve do %s" msgstr "%s vás zve do %s"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "Odmítnout" msgstr "Odmítnout"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "Přijmout" msgstr "Přijmout"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Videohovor od %s" msgstr "Videohovor od %s"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Hovor od %s" msgstr "Hovor od %s"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "Zvednout" msgstr "Zvednout"
@ -845,110 +849,110 @@ msgstr "Zvednout"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s vám posílá %s" msgstr "%s vám posílá %s"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s vás žádá o oprávnění vidět, že jste dostupní" msgstr "%s vás žádá o oprávnění vidět, že jste dostupní"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "Chyba sítě" msgstr "Chyba sítě"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Ověření selhalo" msgstr "Ověření selhalo"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "Chyba šifrování" msgstr "Chyba šifrování"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Certifikát neposkytnut" msgstr "Certifikát neposkytnut"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Nedůvěryhodný certifikát" msgstr "Nedůvěryhodný certifikát"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Platnost certifikátu vypršela" msgstr "Platnost certifikátu vypršela"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Certifikát není aktivován" msgstr "Certifikát není aktivován"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Název počítače certifikátu nesouhlasí" msgstr "Název počítače certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Otisk prstu certifikátu nesouhlasí" msgstr "Otisk prstu certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Certifikát je podepsán sám sebou" msgstr "Certifikát je podepsán sám sebou"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Stav nastaven na „Odhlášen“" msgstr "Stav nastaven na „Odhlášen“"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Šifrování není dostupné" msgstr "Šifrování není dostupné"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Certifikát je neplatný" msgstr "Certifikát je neplatný"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Spojení bylo odmítnuto" msgstr "Spojení bylo odmítnuto"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Spojení nemohlo bát navázáno" msgstr "Spojení nemohlo bát navázáno"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Spojení bylo ztraceno" msgstr "Spojení bylo ztraceno"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Tento účet je již připojen k serveru" msgstr "Tento účet je již připojen k serveru"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj" msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Takový účet již na serveru existuje" msgstr "Takový účet již na serveru existuje"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení" msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Certifikát byl odvolán" msgstr "Certifikát byl odvolán"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z " "Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z "
"kryptografického hlediska slabý" "kryptografického hlediska slabý"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -956,22 +960,22 @@ msgstr ""
"Délka certifikátu serveru nebo délka zřetězených certifikátů serveru " "Délka certifikátu serveru nebo délka zřetězených certifikátů serveru "
"přesáhla omezení dané kryptografickou knihovnou" "přesáhla omezení dané kryptografickou knihovnou"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "Vnitřní chyba" msgstr "Vnitřní chyba"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Nelze se připojit k „%s“" msgstr "Nelze se připojit k „%s“"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "Zobrazit účet" msgstr "Zobrazit účet"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Neznámý důvod" msgstr "Neznámý důvod"
@ -987,15 +991,15 @@ msgstr "Zobrazit aplikace"
msgid "Dash" msgid "Dash"
msgstr "Oblíbené" msgstr "Oblíbené"
#: ../js/ui/dateMenu.js:96 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Otevřít kalendář" msgstr "Otevřít kalendář"
#: ../js/ui/dateMenu.js:100 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Otevřít Hodiny" msgstr "Otevřít Hodiny"
#: ../js/ui/dateMenu.js:107 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Nastavení data a času" msgstr "Nastavení data a času"
@ -1003,7 +1007,7 @@ msgstr "Nastavení data a času"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:204 #: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e. %B, %Y" msgstr "%A, %e. %B, %Y"
@ -1154,7 +1158,7 @@ msgstr "Instalovat"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?" msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
msgid "Keyboard" msgid "Keyboard"
msgstr "Klávesnice" msgstr "Klávesnice"
@ -1210,39 +1214,48 @@ msgstr "Zobrazit zdroj"
msgid "Web Page" msgid "Web Page"
msgstr "Webová stránka" msgstr "Webová stránka"
#: ../js/ui/messageTray.js:1327 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "Otevřít" msgstr "Otevřít"
#: ../js/ui/messageTray.js:1334 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "Odstranit" msgstr "Odstranit"
#: ../js/ui/messageTray.js:1631 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "Upozornění" msgstr "Upozornění"
#: ../js/ui/messageTray.js:1638 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Vymazat zprávy" msgstr "Vymazat zprávy"
#: ../js/ui/messageTray.js:1657 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Nastavení upozornění" msgstr "Nastavení upozornění"
#: ../js/ui/messageTray.js:1710 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Nabídka lišty zpráv" msgstr "Nabídka lišty zpráv"
#: ../js/ui/messageTray.js:1934 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "Žádné zprávy" msgstr "Žádné zprávy"
#: ../js/ui/messageTray.js:1979 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "Lišta zpráv" msgstr "Lišta zpráv"
#: ../js/ui/messageTray.js:2992 #: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nová zpráva"
msgstr[1] "%d nové zprávy"
msgstr[2] "%d nových zpráv"
#: ../js/ui/messageTray.js:3011
msgid "System Information" msgid "System Information"
msgstr "Informace o systému" msgstr "Informace o systému"
@ -1251,14 +1264,6 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Neznámé" msgstr "Neznámé"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d nová zpráva"
msgstr[1] "%d nové zprávy"
msgstr[2] "%d nových zpráv"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Zpět" msgstr "Zpět"
@ -1311,7 +1316,7 @@ msgstr "Restartuje se…"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %e. %B" msgstr "%A, %e. %B"
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:154
#, javascript-format #, javascript-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
@ -1319,27 +1324,27 @@ msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění" msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění" msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Uzamknout" msgstr "Uzamknout"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME potřebuje uzamknout obrazovku" msgstr "GNOME potřebuje uzamknout obrazovku"
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Nelze uzamknout obrazovku" msgstr "Nelze uzamknout obrazovku"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Zamknutí bylo zablokováno některou z aplikací" msgstr "Zamknutí bylo zablokováno některou z aplikací"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:611
msgid "Searching…" msgid "Searching…"
msgstr "Hledá se…" msgstr "Hledá se…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:613
msgid "No results." msgid "No results."
msgstr "Žádné výsledky." msgstr "Žádné výsledky."
@ -1416,9 +1421,9 @@ msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "Vypnout" msgstr "Vypnout"
@ -1434,7 +1439,7 @@ msgstr[0] "%d připojené zařízení"
msgstr[1] "%d připojená zařízení" msgstr[1] "%d připojená zařízení"
msgstr[2] "%d připojených zařízení" msgstr[2] "%d připojených zařízení"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "Nepřipojeno" msgstr "Nepřipojeno"
@ -1442,7 +1447,7 @@ msgstr "Nepřipojeno"
msgid "Brightness" msgid "Brightness"
msgstr "Jas" msgstr "Jas"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:563
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Zobrazit rozložení klávesnice" msgstr "Zobrazit rozložení klávesnice"
@ -1470,8 +1475,8 @@ msgstr "Povoleno"
msgid "<unknown>" msgid "<unknown>"
msgstr "<neznámé>" msgstr "<neznámé>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "Vypnuto" msgstr "Vypnuto"
@ -1489,7 +1494,7 @@ msgstr "Nespravováno"
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Odpojuje se…" msgstr "Odpojuje se…"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "Připojuje se…" msgstr "Připojuje se…"
@ -1510,7 +1515,7 @@ msgstr "Schází firmware"
msgid "Unavailable" msgid "Unavailable"
msgstr "Nedostupné" msgstr "Nedostupné"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "Připojení selhalo" msgstr "Připojení selhalo"
@ -1522,7 +1527,7 @@ msgstr "Nastavení připojení po drátu"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Nastavení mobilní širokopásmové sítě" msgstr "Nastavení mobilní širokopásmové sítě"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Hardware zakázán" msgstr "Hardware zakázán"
@ -1562,60 +1567,60 @@ msgstr "Sítě WiFi"
msgid "Select a network" msgid "Select a network"
msgstr "Vyberte síť" msgstr "Vyberte síť"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "Žádné sítě" msgstr "Žádné sítě"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "K vypnutí použijte fyzický vypínač" msgstr "K vypnutí použijte fyzický vypínač"
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "Vybrat síť" msgstr "Vybrat síť"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Nastavení WiFi" msgstr "Nastavení WiFi"
#: ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "Zapnout" msgstr "Zapnout"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Hotspot aktivní" msgstr "Hotspot aktivní"
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "připojování…" msgstr "připojování…"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1412 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "je vyžadováno ověření" msgstr "je vyžadováno ověření"
#: ../js/ui/status/network.js:1414 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "připojení selhalo" msgstr "připojení selhalo"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "Nastavení sítě" msgstr "Nastavení sítě"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Nastavení VPN" msgstr "Nastavení VPN"
#: ../js/ui/status/network.js:1501 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1656 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "Network Manager" msgstr "Network Manager"
#: ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivace síťového připojení selhala" msgstr "Aktivace síťového připojení selhala"
@ -1649,11 +1654,11 @@ msgstr "Záložní zdroj"
msgid "Battery" msgid "Battery"
msgstr "Baterie" msgstr "Baterie"
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Režim „letadlo“" msgstr "Režim „letadlo“"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "Zapnuto" msgstr "Zapnuto"
@ -1833,40 +1838,3 @@ msgstr "Heslo nemůže být prázdné."
#: ../src/shell-polkit-authentication-agent.c:346 #: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "Dialogové okno ověření bylo uživatelem zrušeno" msgstr "Dialogové okno ověření bylo uživatelem zrušeno"
#~ msgid "The maximum accuracy level of location."
#~ msgstr "Maximální míra přesnosti určení polohy"
#~ msgid ""
#~ "Configures the maximum level of location accuracy applications are "
#~ "allowed to see. Valid options are 'off' (disable location tracking), "
#~ "'country', 'city', 'neighborhood', 'street', and 'exact' (typically "
#~ "requires GPS receiver). Please keep in mind that this only controls what "
#~ "GeoClue will allow applications to see and they can find user's location "
#~ "on their own using network resources (albeit with street-level accuracy "
#~ "at best)."
#~ msgstr ""
#~ "Nastavuje maximální míru přesnosti určení polohy, kterou mohou aplikace "
#~ "vidět. Platné hodnoty jsou „off“ (sledování polohy vypnuto), "
#~ "„country“ (země), „city“ (město), „neighborhood“ (čtvrť), "
#~ "„street“ (ulice) a „exact“ (přesná, typicky vyžaduje přijímač signálu "
#~ "GPS). Uvědomte si, že tímto se řídí, pouze kolik toho GeoClue dovolí "
#~ "vidět aplikacím, které si ale mohou polohu uživatele zjišťovat samy podle "
#~ "síťových zdrojů (třebaže s nejlepší přesností na úrovni ulic)."
#~ msgid "Arrangement of buttons on the titlebar"
#~ msgstr "Uspořádání tlačítek v záhlaví"
#~ msgid ""
#~ "This key overrides the key in org.gnome.desktop.wm.preferences when "
#~ "running GNOME Shell."
#~ msgstr ""
#~ "Když běží GNOME Shell, tento klíč přepíše klíč v org.gnome.desktop.wm."
#~ "preferences"
#~ msgid "Extension"
#~ msgstr "Rozšíření"
#~ msgid "Select an extension to configure using the combobox above."
#~ msgstr ""
#~ "Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."

325
po/es.po
View File

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-10-06 07:46+0000\n" "POT-Creation-Date: 2014-11-12 08:29+0000\n"
"PO-Revision-Date: 2014-10-06 13:00+0200\n" "PO-Revision-Date: 2014-11-12 12:29+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n" "Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"Language: es\n" "Language: es\n"
@ -304,8 +304,9 @@ msgstr ""
"Retardo al cambiar el foco del ratón hasta que el puntero deja de moverse" "Retardo al cambiar el foco del ratón hasta que el puntero deja de moverse"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" #| msgid "Network error"
msgstr "Portal captivo" msgid "Network Login"
msgstr "Inicio de sesión de la red"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
@ -319,7 +320,7 @@ msgstr "Extensiones de GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
@ -337,33 +338,33 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Iniciar sesión" msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "Elegir sesión" msgstr "Elegir sesión"
#: ../js/gdm/loginDialog.js:429 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "¿No está en la lista?" msgstr "¿No está en la lista?"
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(ej., usuario o %s)" msgstr "(ej., usuario o %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "Nombre de usuario:" msgstr "Nombre de usuario:"
#: ../js/gdm/loginDialog.js:922 #: ../js/gdm/loginDialog.js:953
msgid "Login Window" msgid "Login Window"
msgstr "Ventana de inicio de sesión" msgstr "Ventana de inicio de sesión"
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "Error de autenticación" msgstr "Error de autenticación"
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(o pase el dedo)" msgstr "(o pase el dedo)"
@ -384,31 +385,31 @@ msgstr "Falló la ejecución de «%s»:"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Redirección para autenticación web" msgstr "Redirección para autenticación web"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí" msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "Frecuentes" msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "Todas" msgstr "Todas"
#: ../js/ui/appDisplay.js:1790 #: ../js/ui/appDisplay.js:1789
msgid "New Window" msgid "New Window"
msgstr "Ventana nueva" msgstr "Ventana nueva"
#: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Quitar de los favoritos" msgstr "Quitar de los favoritos"
#: ../js/ui/appDisplay.js:1822 #: ../js/ui/appDisplay.js:1821
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Añadir a los favoritos" msgstr "Añadir a los favoritos"
#: ../js/ui/appDisplay.js:1831 #: ../js/ui/appDisplay.js:1830
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalles" msgstr "Mostrar detalles"
@ -431,17 +432,23 @@ msgstr "Configuración"
msgid "Change Background…" msgid "Change Background…"
msgstr "Cambiar el fondo…" msgstr "Cambiar el fondo…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Todo el día" msgstr "Todo el día"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
@ -449,7 +456,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -459,43 +466,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:115
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "D" msgstr "D"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:117
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "L" msgstr "L"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:119
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "M" msgstr "M"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:121
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "X" msgstr "X"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:123
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "J" msgstr "J"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:125
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "V" msgstr "V"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:127
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
@ -506,85 +513,83 @@ msgstr "S"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:140
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Dom" msgstr "Dom"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:142
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "L" msgstr "L"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:144
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "M" msgstr "M"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:146
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "X" msgstr "X"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:148
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "J" msgstr "J"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:150
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "V" msgstr "V"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:152
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:461
msgid "Previous month" msgid "Previous month"
msgstr "Mes anterior" msgstr "Mes anterior"
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:471
msgid "Next month" msgid "Next month"
msgstr "Siguiente mes" msgstr "Siguiente mes"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:806
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Nada programado" msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #: ../js/ui/calendar.js:825
#: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d de %B" msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #: ../js/ui/calendar.js:829
#: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y" msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:813 #: ../js/ui/calendar.js:841
msgid "Today" msgid "Today"
msgstr "Hoy" msgstr "Hoy"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:845
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Mañana" msgstr "Mañana"
#: ../js/ui/calendar.js:828 #: ../js/ui/calendar.js:856
msgid "This week" msgid "This week"
msgstr "Esta semana" msgstr "Esta semana"
#: ../js/ui/calendar.js:836 #: ../js/ui/calendar.js:864
msgid "Next week" msgid "Next week"
msgstr "La semana que viene" msgstr "La semana que viene"
@ -618,7 +623,7 @@ msgid "Type again:"
msgstr "Escriba de nuevo:" msgstr "Escriba de nuevo:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
@ -712,102 +717,102 @@ msgstr "Autenticar"
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Inténtelo de nuevo," msgstr "Inténtelo de nuevo,"
#: ../js/ui/components/telepathyClient.js:240 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "Invitación" msgstr "Invitación"
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "Llamar" msgstr "Llamar"
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "Transferencia de archivos" msgstr "Transferencia de archivos"
#: ../js/ui/components/telepathyClient.js:420 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "Chat" msgstr "Chat"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "Dar voz" msgstr "Dar voz"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "Silenciar" msgstr "Silenciar"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960 #: ../js/ui/components/telepathyClient.js:962
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Ayer, %H%M" msgstr "Ayer, %H%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967 #: ../js/ui/components/telepathyClient.js:969
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974 #: ../js/ui/components/telepathyClient.js:976
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d de %B, %H%M" msgstr "%d de %B, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980 #: ../js/ui/components/telepathyClient.js:982
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d de %B de %Y, %H%M" msgstr "%d de %B de %Y, %H%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l%M %p" msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993 #: ../js/ui/components/telepathyClient.js:995
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Ayer a las %l%M %p" msgstr "Ayer a las %l%M %p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000 #: ../js/ui/components/telepathyClient.js:1002
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007 #: ../js/ui/components/telepathyClient.js:1009
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d de %B, %l%M %p" msgstr "%d de %B, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d de %B de %Y, %l%M %p" msgstr "%d de %B de %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s" msgstr "Ahora %s se llama %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Invitación a %s" msgstr "Invitación a %s"
@ -815,38 +820,38 @@ msgstr "Invitación a %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1157 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s" msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "Rechazar" msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "Aceptar" msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Videollamada de %s" msgstr "Videollamada de %s"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Llamada de %s" msgstr "Llamada de %s"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "Responder" msgstr "Responder"
@ -855,112 +860,112 @@ msgstr "Responder"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s le está enviando %s" msgstr "%s le está enviando %s"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cuándo está en línea" msgstr "%s solicita permiso para ver cuándo está en línea"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "Error de la red" msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Falló la autenticación" msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "Error de cifrado" msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Certificado no proporcionado" msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "No se confía en el certificado" msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Certificado caducado" msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Certificado no activado" msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide" msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide" msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Certificado autofirmado" msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»" msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "El cifrado no está disponible" msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "El certificado no es válido" msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión" msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "No se puede establecer la conexión" msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Se ha perdido la conexión" msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor" msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "" msgstr ""
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso" "Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor" msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "" msgstr ""
"Actualmente el servidor está muy ocupado intentando gestionar la conexión" "Actualmente el servidor está muy ocupado intentando gestionar la conexión"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado" msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente " "El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil" "débil"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -969,22 +974,22 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de " "certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía" "criptografía"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "Error interno" msgstr "Error interno"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "No se pudo conectar a %s" msgstr "No se pudo conectar a %s"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "Ver cuenta" msgstr "Ver cuenta"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Razón desconocida" msgstr "Razón desconocida"
@ -1000,22 +1005,22 @@ msgstr "Mostrar aplicaciones"
msgid "Dash" msgid "Dash"
msgstr "Tablero" msgstr "Tablero"
#: ../js/ui/dateMenu.js:97 #: ../js/ui/dateMenu.js:99
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Abrir calendario" msgstr "Abrir calendario"
#: ../js/ui/dateMenu.js:101 #: ../js/ui/dateMenu.js:103
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Abrir Relojes" msgstr "Abrir Relojes"
#: ../js/ui/dateMenu.js:108 #: ../js/ui/dateMenu.js:110
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Configuración de hora y fecha" msgstr "Configuración de hora y fecha"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:132 #: ../js/ui/dateMenu.js:134
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y" msgstr "%A, %e de %B de %Y"
@ -1159,7 +1164,7 @@ msgstr "Instalar"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?" msgstr "¿Descargar e instalar «%s» desde extensions.gnome.org?"
#: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:535
msgid "Keyboard" msgid "Keyboard"
msgstr "Teclado" msgstr "Teclado"
@ -1215,39 +1220,47 @@ msgstr "Ver fuente"
msgid "Web Page" msgid "Web Page"
msgstr "Página web" msgstr "Página web"
#: ../js/ui/messageTray.js:1327 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "Abrir" msgstr "Abrir"
#: ../js/ui/messageTray.js:1334 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "Quitar" msgstr "Quitar"
#: ../js/ui/messageTray.js:1631 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "Notificaciones" msgstr "Notificaciones"
#: ../js/ui/messageTray.js:1638 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Limpiar mensajes" msgstr "Limpiar mensajes"
#: ../js/ui/messageTray.js:1657 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Configuración de las notificaciones" msgstr "Configuración de las notificaciones"
#: ../js/ui/messageTray.js:1710 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Bandeja de menú" msgstr "Bandeja de menú"
#: ../js/ui/messageTray.js:1934 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "No hay mensajes" msgstr "No hay mensajes"
#: ../js/ui/messageTray.js:1979 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "Bandeja de mensajes" msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2992 #: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaje nuevo"
msgstr[1] "%d mensajes nuevos"
#: ../js/ui/messageTray.js:3011
msgid "System Information" msgid "System Information"
msgstr "Información del sistema" msgstr "Información del sistema"
@ -1256,13 +1269,6 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Desconocido" msgstr "Desconocido"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaje nuevo"
msgstr[1] "%d mensajes nuevos"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Deshacer" msgstr "Deshacer"
@ -1315,26 +1321,26 @@ msgstr "Reiniciando…"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d de %B" msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:154
#, javascript-format #, javascript-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d notificación nueva" msgstr[0] "%d notificación nueva"
msgstr[1] "%d notificaciones nuevas" msgstr[1] "%d notificaciones nuevas"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Bloquear" msgstr "Bloquear"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME necesita bloquear la pantalla" msgstr "GNOME necesita bloquear la pantalla"
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "No se pudo bloquear" msgstr "No se pudo bloquear"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Una aplicación impidió el bloqueo" msgstr "Una aplicación impidió el bloqueo"
@ -1419,9 +1425,9 @@ msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "Apagar" msgstr "Apagar"
@ -1436,7 +1442,7 @@ msgid_plural "%d Connected Devices"
msgstr[0] "%d dispositivo conectado" msgstr[0] "%d dispositivo conectado"
msgstr[1] "%d dispositivos conectados" msgstr[1] "%d dispositivos conectados"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "No conectado" msgstr "No conectado"
@ -1444,7 +1450,7 @@ msgstr "No conectado"
msgid "Brightness" msgid "Brightness"
msgstr "Brillo" msgstr "Brillo"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:559
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Mostrar la distribución del teclado" msgstr "Mostrar la distribución del teclado"
@ -1472,8 +1478,8 @@ msgstr "Activar"
msgid "<unknown>" msgid "<unknown>"
msgstr "<desconocido>" msgstr "<desconocido>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "Desconectado" msgstr "Desconectado"
@ -1491,7 +1497,7 @@ msgstr "Sin gestionar"
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Desconectando" msgstr "Desconectando"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "Conectando" msgstr "Conectando"
@ -1512,7 +1518,7 @@ msgstr "Falta el «firmware»"
msgid "Unavailable" msgid "Unavailable"
msgstr "No disponible" msgstr "No disponible"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "Falló la conexión" msgstr "Falló la conexión"
@ -1524,7 +1530,7 @@ msgstr "Configuración de red cableada"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Configuración de banda ancha móvil" msgstr "Configuración de banda ancha móvil"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Hardware desactivado" msgstr "Hardware desactivado"
@ -1564,60 +1570,60 @@ msgstr "Redes Wi-Fi"
msgid "Select a network" msgid "Select a network"
msgstr "Seleccionar una red" msgstr "Seleccionar una red"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "No hay redes" msgstr "No hay redes"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Usar el interruptor hardware para apagar" msgstr "Usar el interruptor hardware para apagar"
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "Seleccionar red" msgstr "Seleccionar red"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Configuración de Wi-Fi" msgstr "Configuración de Wi-Fi"
#: ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "Encender" msgstr "Encender"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Punto de acceso activo" msgstr "Punto de acceso activo"
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "conectando…" msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1412 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "se necesita autenticación" msgstr "se necesita autenticación"
#: ../js/ui/status/network.js:1414 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "falló la conexión" msgstr "falló la conexión"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "Configuración de la red" msgstr "Configuración de la red"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Configuración de VPN" msgstr "Configuración de VPN"
#: ../js/ui/status/network.js:1501 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1656 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "Gestor de la red" msgstr "Gestor de la red"
#: ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Falló la activación de la conexión de red" msgstr "Falló la activación de la conexión de red"
@ -1651,11 +1657,11 @@ msgstr "SAI"
msgid "Battery" msgid "Battery"
msgstr "Batería" msgstr "Batería"
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Modo avión" msgstr "Modo avión"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "Encender" msgstr "Encender"
@ -1835,6 +1841,9 @@ msgstr "La contraseña no puede estar vacía"
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "El usuario rechazó el diálogo de autenticación" msgstr "El usuario rechazó el diálogo de autenticación"
#~ msgid "Captive Portal"
#~ msgstr "Portal captivo"
#~ msgid "The maximum accuracy level of location." #~ msgid "The maximum accuracy level of location."
#~ msgstr "El nivel máximo de precisión de la ubicación." #~ msgstr "El nivel máximo de precisión de la ubicación."

582
po/eu.po

File diff suppressed because it is too large Load Diff

326
po/he.po
View File

@ -10,8 +10,8 @@ msgid ""
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-13 23:32+0300\n" "POT-Creation-Date: 2014-11-24 20:00+0200\n"
"PO-Revision-Date: 2014-11-24 20:03+0200\n" "PO-Revision-Date: 2014-11-24 20:03+0200\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n" "Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n" "Language-Team: עברית <>\n"
@ -292,8 +292,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgid "Delay focus changes in mouse mode until the pointer stops moving" msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Delay focus changes in mouse mode until the pointer stops moving" msgstr "Delay focus changes in mouse mode until the pointer stops moving"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" msgid "Network Login"
msgstr "Network Login" msgstr "Network Login"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
@ -307,7 +307,7 @@ msgstr "הרחבות GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:916 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "ביטול" msgstr "ביטול"
@ -325,20 +325,20 @@ msgctxt "button"
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "כניסה" msgstr "כניסה"
#: ../js/gdm/loginDialog.js:275 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "בחירת הפעלה" msgstr "בחירת הפעלה"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:434 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "לא רשום?" msgstr "לא רשום?"
#. Translators: this message is shown below the username entry field #. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm #. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:619 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
@ -346,16 +346,16 @@ msgstr "(משתמש או %s לדוגמה)"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "שם משתמש:" msgstr "שם משתמש:"
#: ../js/gdm/loginDialog.js:955 #: ../js/gdm/loginDialog.js:955
msgid "Login Window" msgid "Login Window"
msgstr "חלון כניסה" msgstr "חלון כניסה"
#: ../js/gdm/util.js:341 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "שגיאת אימות" msgstr "שגיאת אימות"
@ -364,7 +364,7 @@ msgstr "שגיאת אימות"
#. not the main auth service. Instead we use the messages #. not the main auth service. Instead we use the messages
#. as a cue to display our own message. #. as a cue to display our own message.
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:473 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(או להעביר אצבע)" msgstr "(או להעביר אצבע)"
@ -389,15 +389,15 @@ msgstr "ההרצה של „%s” נכשלה:"
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "אימות ניתוב הרשת" msgstr "אימות ניתוב הרשת"
#: ../js/ui/appDisplay.js:770 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "יישומים בשימוש תדיר יופיעו כאן" msgstr "יישומים בשימוש תדיר יופיעו כאן"
#: ../js/ui/appDisplay.js:881 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "תדיר" msgstr "תדיר"
#: ../js/ui/appDisplay.js:888 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "הכול" msgstr "הכול"
@ -417,12 +417,12 @@ msgstr "הוספה למועדפים"
#: ../js/ui/appDisplay.js:1830 #: ../js/ui/appDisplay.js:1830
msgid "Show Details" msgid "Show Details"
msgstr "הצגת פרטים" msgstr "הצגת פרטים"
#: ../js/ui/appFavorites.js:132 #: ../js/ui/appFavorites.js:132
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s נוסף למועדפים שלך." msgstr "%s נוסף למועדפים שלך."
#: ../js/ui/appFavorites.js:166 #: ../js/ui/appFavorites.js:166
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
@ -436,17 +436,23 @@ msgstr "הגדרות"
#: ../js/ui/backgroundMenu.js:21 #: ../js/ui/backgroundMenu.js:21
msgid "Change Background…" msgid "Change Background…"
msgstr "החלפת הרקע…" msgstr "החלפת הרקע…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "65"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. #.
#: ../js/ui/calendar.js:68 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "יום שלם" msgstr "יום שלם"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : #. \u2236 is a ratio character, similar to :
#: ../js/ui/calendar.js:75 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
@ -454,7 +460,7 @@ msgstr "%H:%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space #. a thin space
#: ../js/ui/calendar.js:84 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
@ -464,43 +470,43 @@ msgstr "%l\\u2236%M%p"
#. * #. *
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. #.
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:115
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "א" msgstr "א"
#. Translators: Calendar grid abbreviation for Monday #. Translators: Calendar grid abbreviation for Monday
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:117
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "ב" msgstr "ב"
#. Translators: Calendar grid abbreviation for Tuesday #. Translators: Calendar grid abbreviation for Tuesday
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:119
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "ג" msgstr "ג"
#. Translators: Calendar grid abbreviation for Wednesday #. Translators: Calendar grid abbreviation for Wednesday
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:121
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "ד" msgstr "ד"
#. Translators: Calendar grid abbreviation for Thursday #. Translators: Calendar grid abbreviation for Thursday
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:123
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "ה" msgstr "ה"
#. Translators: Calendar grid abbreviation for Friday #. Translators: Calendar grid abbreviation for Friday
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:125
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "ו" msgstr "ו"
#. Translators: Calendar grid abbreviation for Saturday #. Translators: Calendar grid abbreviation for Saturday
#: ../js/ui/calendar.js:127 #: ../js/ui/calendar.js:127
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
@ -511,85 +517,83 @@ msgstr "ש"
#. * NOTE: These list abbreviations are normally not shown together #. * NOTE: These list abbreviations are normally not shown together
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. #.
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:140
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "א׳" msgstr "א׳"
#. Translators: Event list abbreviation for Monday #. Translators: Event list abbreviation for Monday
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:142
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "ב׳" msgstr "ב׳"
#. Translators: Event list abbreviation for Tuesday #. Translators: Event list abbreviation for Tuesday
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:144
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "ג׳" msgstr "ג׳"
#. Translators: Event list abbreviation for Wednesday #. Translators: Event list abbreviation for Wednesday
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:146
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "ד׳" msgstr "ד׳"
#. Translators: Event list abbreviation for Thursday #. Translators: Event list abbreviation for Thursday
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:148
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "ה" msgstr "ה"
#. Translators: Event list abbreviation for Friday #. Translators: Event list abbreviation for Friday
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:150
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "ו׳" msgstr "ו׳"
#. Translators: Event list abbreviation for Saturday #. Translators: Event list abbreviation for Saturday
#: ../js/ui/calendar.js:152 #: ../js/ui/calendar.js:152
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "ש׳" msgstr "ש׳"
#: ../js/ui/calendar.js:461 #: ../js/ui/calendar.js:461
msgid "Previous month" msgid "Previous month"
msgstr "חודש קודם" msgstr "חודש קודם"
#: ../js/ui/calendar.js:471 #: ../js/ui/calendar.js:471
msgid "Next month" msgid "Next month"
msgstr "חודש הבא" msgstr "חודש הבא"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:806 #: ../js/ui/calendar.js:806
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "היומן ריק" msgstr "היומן ריק"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:825 #: ../js/ui/calendar.js:825
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, ה־%e ב%B" msgstr "%A, ה־%e ב%B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:829 #: ../js/ui/calendar.js:829
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, ה־%e ב%B, %Y" msgstr "%A, ה־%e ב%B, %Y"
#: ../js/ui/calendar.js:841 #: ../js/ui/calendar.js:841
msgid "Today" msgid "Today"
msgstr "היום" msgstr "היום"
#: ../js/ui/calendar.js:845 #: ../js/ui/calendar.js:845
msgid "Tomorrow" msgid "Tomorrow"
msgstr "מחר" msgstr "מחר"
#: ../js/ui/calendar.js:856 #: ../js/ui/calendar.js:856
msgid "This week" msgid "This week"
msgstr "השבוע" msgstr "השבוע"
#: ../js/ui/calendar.js:864 #: ../js/ui/calendar.js:864
msgid "Next week" msgid "Next week"
msgstr "בשבוע הבא" msgstr "בשבוע הבא"
@ -623,7 +627,7 @@ msgid "Type again:"
msgid "Type again:" msgid "Type again:"
msgstr "נא להקליד שוב:" msgstr "נא להקליד שוב:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "התחברות" msgstr "התחברות"
@ -719,47 +723,47 @@ msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסל
msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה." msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה."
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use #. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does. #. system-users for now as Empathy does.
#: ../js/ui/components/telepathyClient.js:242 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "הזמנה" msgstr "הזמנה"
#. We got the TpContact #. We got the TpContact
#: ../js/ui/components/telepathyClient.js:302 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "התקשרות" msgstr "התקשרות"
#. We got the TpContact #. We got the TpContact
#: ../js/ui/components/telepathyClient.js:318 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "העברת קבצים" msgstr "העברת קבצים"
#: ../js/ui/components/telepathyClient.js:422 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "שיחה" msgstr "שיחה"
#: ../js/ui/components/telepathyClient.js:485 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "ביטול ההשתקה" msgstr "ביטול ההשתקה"
#: ../js/ui/components/telepathyClient.js:485 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "השתקה" msgstr "השתקה"
#. Translators: Time in 24h format #. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:955 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%H:%M" msgstr "%H:%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" #. time string in 24h format. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:962 #: ../js/ui/components/telepathyClient.js:962
#, no-c-format #, no-c-format
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "אתמול, %H\\u2236%M" msgstr "אתמול, %H\\u2236%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" #. string in 24h format. i.e. "Monday, 14:30"
#: ../js/ui/components/telepathyClient.js:969 #: ../js/ui/components/telepathyClient.js:969
#, no-c-format #, no-c-format
msgid "%A, %H%M" msgid "%A, %H%M"
@ -767,7 +771,7 @@ msgstr "%A, %H:%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" #. i.e. "May 25, 14:30"
#: ../js/ui/components/telepathyClient.js:976 #: ../js/ui/components/telepathyClient.js:976
#, no-c-format #, no-c-format
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
@ -775,26 +779,26 @@ msgstr "%d ב%B, %H:%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" #. i.e. "May 25 2012, 14:30"
#: ../js/ui/components/telepathyClient.js:982 #: ../js/ui/components/telepathyClient.js:982
#, no-c-format #, no-c-format
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d ב%B, %H:%M" msgstr "%d ב%B, %H:%M"
#. Translators: Time in 24h format #. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:988 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l:%M %p" msgstr "%l:%M %p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" #. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:995 #: ../js/ui/components/telepathyClient.js:995
#, no-c-format #, no-c-format
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "אתמול, %l\\u2236%M %p" msgstr "אתמול, %l\\u2236%M %p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" #. string in 12h format. i.e. "Monday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1002 #: ../js/ui/components/telepathyClient.js:1002
#, no-c-format #, no-c-format
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
@ -802,7 +806,7 @@ msgstr "%l:%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" #. i.e. "May 25, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1009 #: ../js/ui/components/telepathyClient.js:1009
#, no-c-format #, no-c-format
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
@ -810,21 +814,21 @@ msgstr "%d ב%B, %H:%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm" #. i.e. "May 25 2012, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1015 #: ../js/ui/components/telepathyClient.js:1015
#, no-c-format #, no-c-format
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d ב%B %Y, %l\\u2236%M %p" msgstr "%d ב%B %Y, %l\\u2236%M %p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. #. IM name.
#: ../js/ui/components/telepathyClient.js:1047 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "השם של %s הוחלף ל־%s" msgstr "השם של %s הוחלף ל־%s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. #. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1151 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
@ -832,38 +836,38 @@ msgstr "הזמנה ל־%s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. #. * for example.
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "הוזמנת על ידי %s להצטרף אל %s" msgstr "הוזמנת על ידי %s להצטרף אל %s"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1287 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "דחייה" msgstr "דחייה"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1292 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "אישור" msgstr "אישור"
#. translators: argument is a contact name like Alice for example. #. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1186 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "שיחת וידאו מאת %s" msgstr "שיחת וידאו מאת %s"
#. translators: argument is a contact name like Alice for example. #. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1189 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "שיחה מאת %s" msgstr "שיחה מאת %s"
#. translators: this is a button label (verb), not a noun #. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1203 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "מענה" msgstr "מענה"
@ -872,108 +876,108 @@ msgstr "מענה"
#. * the contact's alias and the second one is the #. * the contact's alias and the second one is the
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. #.
#: ../js/ui/components/telepathyClient.js:1224 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s שולח/ת אליך %s" msgstr "%s שולח/ת אליך %s"
#. To translators: The parameter is the contact's alias #. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1253 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון" msgstr "%s רוצה לקבל הרשאות כדי לראות מתי מצבך הוא מקוון"
#: ../js/ui/components/telepathyClient.js:1338 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "שגיאת רשת" msgstr "שגיאת רשת"
#: ../js/ui/components/telepathyClient.js:1340 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "האימות נכשל" msgstr "האימות נכשל"
#: ../js/ui/components/telepathyClient.js:1342 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "שגיאת הצפנה" msgstr "שגיאת הצפנה"
#: ../js/ui/components/telepathyClient.js:1344 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "לא סופק אישור" msgstr "לא סופק אישור"
#: ../js/ui/components/telepathyClient.js:1346 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "האישור אינו מהימן" msgstr "האישור אינו מהימן"
#: ../js/ui/components/telepathyClient.js:1348 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "האישור פג" msgstr "האישור פג"
#: ../js/ui/components/telepathyClient.js:1350 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "האישור לא מופעל" msgstr "האישור לא מופעל"
#: ../js/ui/components/telepathyClient.js:1352 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "שם המארח באישור אינו תואם" msgstr "שם המארח באישור אינו תואם"
#: ../js/ui/components/telepathyClient.js:1354 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "חוסר התאמה בטביעת האצבע של האישור" msgstr "חוסר התאמה בטביעת האצבע של האישור"
#: ../js/ui/components/telepathyClient.js:1356 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "אישור בחתימה עצמית" msgstr "אישור בחתימה עצמית"
#: ../js/ui/components/telepathyClient.js:1358 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "המצב הוגדר ל'מנותק'" msgstr "המצב הוגדר ל'מנותק'"
#: ../js/ui/components/telepathyClient.js:1360 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "ההצפנה אינה זמינה" msgstr "ההצפנה אינה זמינה"
#: ../js/ui/components/telepathyClient.js:1362 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "האישור אינו תקף" msgstr "האישור אינו תקף"
#: ../js/ui/components/telepathyClient.js:1364 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "ההתחברות נשללה" msgstr "ההתחברות נשללה"
#: ../js/ui/components/telepathyClient.js:1366 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "לא ניתן להפעיל את החיבור" msgstr "לא ניתן להפעיל את החיבור"
#: ../js/ui/components/telepathyClient.js:1368 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "החיבור אבד" msgstr "החיבור אבד"
#: ../js/ui/components/telepathyClient.js:1370 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "חשבון זה כבר מחובר לשרת" msgstr "חשבון זה כבר מחובר לשרת"
#: ../js/ui/components/telepathyClient.js:1372 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב" msgstr "החיבור הוחלף בחיבור חדש באמצעות אותו המשאב"
#: ../js/ui/components/telepathyClient.js:1374 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "החשבון כבר קיים בשרת" msgstr "החשבון כבר קיים בשרת"
#: ../js/ui/components/telepathyClient.js:1376 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור" msgstr "השרת עסוק ברגע זה מכדי לטפל בחיבור"
#: ../js/ui/components/telepathyClient.js:1378 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "האישור נשלל" msgstr "האישור נשלל"
#: ../js/ui/components/telepathyClient.js:1380 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה" msgstr "האישור משתמש באלגוריתם הצפנה שאינו בטוח או חלש מבחינת הצפנה"
#: ../js/ui/components/telepathyClient.js:1382 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
@ -981,22 +985,22 @@ msgstr ""
msgstr "" msgstr ""
"אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי " "אורך אישור השרת, או עומק שרשרת אישור השרת, חורגים מהמגבלות שנכפו על ידי "
"ספריית ההצפנה" "ספריית ההצפנה"
#: ../js/ui/components/telepathyClient.js:1384 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "שגיאה פנימית" msgstr "שגיאה פנימית"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. #. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1394 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "לא ניתן להתחבר אל %s" msgstr "לא ניתן להתחבר אל %s"
#: ../js/ui/components/telepathyClient.js:1399 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "צפייה בחשבון" msgstr "צפייה בחשבון"
#: ../js/ui/components/telepathyClient.js:1436 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "סיבה לא ידועה" msgstr "סיבה לא ידועה"
@ -1014,22 +1018,22 @@ msgstr "הצגת יישומים"
#: ../js/ui/dash.js:445 #: ../js/ui/dash.js:445
msgid "Dash" msgid "Dash"
msgstr "חלונית" msgstr "חלונית"
#: ../js/ui/dateMenu.js:97 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "פתיחת היומן" msgstr "פתיחת היומן"
#: ../js/ui/dateMenu.js:101 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "פתיחת השעונים" msgstr "פתיחת השעונים"
#: ../js/ui/dateMenu.js:108 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "הגדרות תאריך ושעה" msgstr "הגדרות תאריך ושעה"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: ../js/ui/dateMenu.js:132 #: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A ה־%e ב%B, %Y" msgstr "%A ה־%e ב%B, %Y"
@ -1168,7 +1172,7 @@ msgstr "התקנה"
#, javascript-format #, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?" msgstr "הורדה והתקנה של „%s” מ־extensions.gnome.org?"
#: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
msgid "Keyboard" msgid "Keyboard"
msgstr "מקלדת" msgstr "מקלדת"
@ -1224,39 +1228,48 @@ msgstr "צפייה במקור"
#: ../js/ui/lookingGlass.js:758 #: ../js/ui/lookingGlass.js:758
msgid "Web Page" msgid "Web Page"
msgstr "דף אינטרנט" msgstr "דף אינטרנט"
#: ../js/ui/messageTray.js:1332 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "פתיחה" msgstr "פתיחה"
#: ../js/ui/messageTray.js:1339 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "הסרה" msgstr "הסרה"
#: ../js/ui/messageTray.js:1636 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "התרעות" msgstr "התרעות"
#: ../js/ui/messageTray.js:1643 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "פינוי ההודעות" msgstr "פינוי ההודעות"
#: ../js/ui/messageTray.js:1662 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "הגדרות התרעה" msgstr "הגדרות התרעה"
#: ../js/ui/messageTray.js:1715 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "תפריט מגש" msgstr "תפריט מגש"
#: ../js/ui/messageTray.js:1939 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "אין הודעות" msgstr "אין הודעות"
#: ../js/ui/messageTray.js:1984 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "אזור דיווח ההודעות" msgstr "אזור דיווח ההודעות"
# javascript-format
#: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "הודעה חדשה אחת"
msgstr[1] "%d הודעות חדשות"
#: ../js/ui/messageTray.js:3011 #: ../js/ui/messageTray.js:3011
msgid "System Information" msgid "System Information"
msgstr "פרטי המערכת" msgstr "פרטי המערכת"
@ -1265,14 +1278,6 @@ msgctxt "program"
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "לא ידוע" msgstr "לא ידוע"
# javascript-format
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "הודעה חדשה אחת"
msgstr[1] "%d הודעות חדשות"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
@ -1331,18 +1336,18 @@ msgid "%A, %B %d"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, ה־%d ב%B" msgstr "%A, ה־%d ב%B"
# javascript-format # javascript-format
#: ../js/ui/screenShield.js:154 #: ../js/ui/screenShield.js:154
#, c-format #, c-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "התרעה חדשה אחת" msgstr[0] "התרעה חדשה אחת"
msgstr[1] "%d התרעות חדשות" msgstr[1] "%d התרעות חדשות"
#: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "נעילה" msgstr "נעילה"
#: ../js/ui/screenShield.js:709 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "על GNOME לנעול את המסך" msgstr "על GNOME לנעול את המסך"
@ -1353,19 +1358,19 @@ msgstr "על GNOME לנעול את המסך"
#. Just tell him to stop using this app #. Just tell him to stop using this app
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "לא ניתן לנעול" msgstr "לא ניתן לנעול"
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "הנעילה נחסמה ע״י היישום" msgstr "הנעילה נחסמה ע״י היישום"
#: ../js/ui/search.js:611 #: ../js/ui/search.js:611
msgid "Searching…" msgid "Searching…"
msgstr "בחיפוש…" msgstr "בחיפוש…"
#: ../js/ui/search.js:613 #: ../js/ui/search.js:613
msgid "No results." msgid "No results."
msgstr "אין תוצאות." msgstr "אין תוצאות."
@ -1444,9 +1449,9 @@ msgid "Bluetooth"
msgid "Bluetooth" msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:118 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "כיבוי" msgstr "כיבוי"
@ -1462,7 +1467,7 @@ msgid_plural "%d Connected Devices"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected Devices"
msgstr[0] "התקן אחד מחובר" msgstr[0] "התקן אחד מחובר"
msgstr[1] "%d התקנים מחוברים" msgstr[1] "%d התקנים מחוברים"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "לא מחובר" msgstr "לא מחובר"
@ -1470,7 +1475,7 @@ msgstr "לא מחובר"
#: ../js/ui/status/brightness.js:44 #: ../js/ui/status/brightness.js:44
msgid "Brightness" msgid "Brightness"
msgstr "בהירות" msgstr "בהירות"
#: ../js/ui/status/keyboard.js:563 #: ../js/ui/status/keyboard.js:563
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "הצגת פריסת המקלדת" msgstr "הצגת פריסת המקלדת"
@ -1498,8 +1503,8 @@ msgstr "אפשור"
#: ../js/ui/status/network.js:101 #: ../js/ui/status/network.js:101
msgid "<unknown>" msgid "<unknown>"
msgstr "<לא ידוע>" msgstr "<לא ידוע>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1512 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "כבוי" msgstr "כבוי"
@ -1517,7 +1522,7 @@ msgstr "לא מנוהל"
#: ../js/ui/status/network.js:465 #: ../js/ui/status/network.js:465
msgid "Disconnecting" msgid "Disconnecting"
msgstr "בהליכי ניתוק" msgstr "בהליכי ניתוק"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "בהתחברות" msgstr "בהתחברות"
@ -1538,7 +1543,7 @@ msgstr "הקושחה חסרה"
#: ../js/ui/status/network.js:486 #: ../js/ui/status/network.js:486
msgid "Unavailable" msgid "Unavailable"
msgstr "לא זמין" msgstr "לא זמין"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "ההתחברות נכשלה" msgstr "ההתחברות נכשלה"
@ -1550,7 +1555,7 @@ msgstr "הגדרות רשת קווית"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624 #: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "הגדרות פס־רחב נייד" msgstr "הגדרות פס־רחב נייד"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "מנוטרל חומרתית" msgstr "מנוטרל חומרתית"
@ -1590,60 +1595,60 @@ msgstr "רשתות אלחוטיות"
#: ../js/ui/status/network.js:853 #: ../js/ui/status/network.js:853
msgid "Select a network" msgid "Select a network"
msgstr "בחירת רשת" msgstr "בחירת רשת"
#: ../js/ui/status/network.js:883 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "אין רשתות" msgstr "אין רשתות"
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "שימוש במתג של החומרה לכיבוי" msgstr "שימוש במתג של החומרה לכיבוי"
#: ../js/ui/status/network.js:1174 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "בחירת רשת" msgstr "בחירת רשת"
#: ../js/ui/status/network.js:1180 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "הגדרות רשת אלחוטית" msgstr "הגדרות רשת אלחוטית"
#: ../js/ui/status/network.js:1282 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "הפעלה" msgstr "הפעלה"
#: ../js/ui/status/network.js:1299 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "נקודה חמה פעילה" msgstr "נקודה חמה פעילה"
#: ../js/ui/status/network.js:1410 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "בהתחברות..." msgstr "בהתחברות..."
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:1413 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "נדרש אימות" msgstr "נדרש אימות"
#: ../js/ui/status/network.js:1415 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "ההתחברות נכשלה" msgstr "ההתחברות נכשלה"
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "הגדרות הרשת" msgstr "הגדרות הרשת"
#: ../js/ui/status/network.js:1483 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "הגדרות VPN" msgstr "הגדרות VPN"
#: ../js/ui/status/network.js:1502 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1657 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "מנהל הרשתות" msgstr "מנהל הרשתות"
#: ../js/ui/status/network.js:1697 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "הפעלת חיבור הרשת נכשלה" msgstr "הפעלת חיבור הרשת נכשלה"
@ -1684,11 +1689,11 @@ msgstr "סוללה"
#. The menu only appears when airplane mode is on, so just #. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically #. statically build it as if it was on, rather than dynamically
#. changing the menu contents. #. changing the menu contents.
#: ../js/ui/status/rfkill.js:88 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "מצב טיסה" msgstr "מצב טיסה"
#: ../js/ui/status/rfkill.js:90 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "פועל" msgstr "פועל"
@ -1867,6 +1872,9 @@ msgstr "הססמה לא יכולה להישאר ריקה"
#: ../src/shell-polkit-authentication-agent.c:346 #: ../src/shell-polkit-authentication-agent.c:346
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות" msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "Captive Portal"
#~ msgstr "Captive Portal"
#~ msgid "The maximum accuracy level of location." #~ msgid "The maximum accuracy level of location."
#~ msgstr "The maximum accuracy level of location." #~ msgstr "The maximum accuracy level of location."

344
po/hu.po
View File

@ -11,10 +11,10 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-14 07:38+0000\n" "POT-Creation-Date: 2014-11-30 08:32+0000\n"
"PO-Revision-Date: 2014-09-14 15:21+0200\n" "PO-Revision-Date: 2014-11-30 16:24+0100\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n" "Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <kde-l10n-hu@kde.org>\n" "Language-Team: Hungarian <openscope at googlegroups dot com>\n"
"Language: hu\n" "Language: hu\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -300,8 +300,9 @@ msgstr ""
"Fókuszváltozások késleltetése a mutató mozgásának megállásáig egér módban" "Fókuszváltozások késleltetése a mutató mozgásának megállásáig egér módban"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" #| msgid "Network error"
msgstr "Fogoly portál" msgid "Network Login"
msgstr "Hálózati bejelentkezés"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
@ -315,7 +316,7 @@ msgstr "GNOME Shell kiterjesztések"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "Mégse" msgstr "Mégse"
@ -333,33 +334,33 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Bejelentkezés" msgstr "Bejelentkezés"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "Válasszon munkamenetet" msgstr "Válasszon munkamenetet"
#: ../js/gdm/loginDialog.js:429 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "Nincs a listán?" msgstr "Nincs a listán?"
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(például: felhasználó vagy %s)" msgstr "(például: felhasználó vagy %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "Felhasználónév: " msgstr "Felhasználónév: "
#: ../js/gdm/loginDialog.js:922 #: ../js/gdm/loginDialog.js:955
msgid "Login Window" msgid "Login Window"
msgstr "Bejelentkezési ablak" msgstr "Bejelentkezési ablak"
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "Hitelesítési hiba" msgstr "Hitelesítési hiba"
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(vagy húzza le az ujját)" msgstr "(vagy húzza le az ujját)"
@ -377,19 +378,18 @@ msgid "Execution of “%s” failed:"
msgstr "„%s” végrehajtása meghiúsult:" msgstr "„%s” végrehajtása meghiúsult:"
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
#| msgid "Authentication Required"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Web hitelesítés átirányítás" msgstr "Web hitelesítés átirányítás"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Itt jelennek meg a gyakran használt alkalmazások" msgstr "Itt jelennek meg a gyakran használt alkalmazások"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "Gyakori" msgstr "Gyakori"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "Összes" msgstr "Összes"
@ -409,17 +409,17 @@ msgstr "Hozzáadás a Kedvencekhez"
msgid "Show Details" msgid "Show Details"
msgstr "Részletek megjelenítése" msgstr "Részletek megjelenítése"
#: ../js/ui/appFavorites.js:124 #: ../js/ui/appFavorites.js:132
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s felvéve a Kedvencek közé." msgstr "%s felvéve a Kedvencek közé."
#: ../js/ui/appFavorites.js:158 #: ../js/ui/appFavorites.js:166
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s eltávolítva a Kedvencek közül" msgstr "%s eltávolítva a Kedvencek közül"
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:813 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:819
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Beállítások" msgstr "Beállítások"
@ -428,17 +428,23 @@ msgstr "Beállítások"
msgid "Change Background…" msgid "Change Background…"
msgstr "Háttér megváltoztatása…" msgstr "Háttér megváltoztatása…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Egész nap" msgstr "Egész nap"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%k.%M" msgstr "%k.%M"
@ -446,7 +452,7 @@ msgstr "%k.%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l.%M %p" msgstr "%l.%M %p"
@ -456,43 +462,43 @@ msgstr "%l.%M %p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:98
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "V" msgstr "V"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:100
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "H" msgstr "H"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:102
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "K" msgstr "K"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:104
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "Sz" msgstr "Sz"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:106
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "Cs" msgstr "Cs"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:108
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "P" msgstr "P"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:110
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "Sz" msgstr "Sz"
@ -503,85 +509,83 @@ msgstr "Sz"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:123
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "V" msgstr "V"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:125
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "H" msgstr "H"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:127
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "K" msgstr "K"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:129
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "Sze" msgstr "Sze"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:131
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "Cs" msgstr "Cs"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:133
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "P" msgstr "P"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:135
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "Szo" msgstr "Szo"
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:444
msgid "Previous month" msgid "Previous month"
msgstr "Előző hónap" msgstr "Előző hónap"
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:454
msgid "Next month" msgid "Next month"
msgstr "Következő hónap" msgstr "Következő hónap"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:789
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Semmi sincs ütemezve" msgstr "Semmi sincs ütemezve"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #: ../js/ui/calendar.js:808
#: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d." msgstr "%A, %B %d."
#. Translators: Shown on calendar heading when selected day occurs on different year */ #: ../js/ui/calendar.js:812
#: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %Y. %B %d." msgstr "%A, %Y. %B %d."
#: ../js/ui/calendar.js:813 #: ../js/ui/calendar.js:824
msgid "Today" msgid "Today"
msgstr "Ma" msgstr "Ma"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:828
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Holnap" msgstr "Holnap"
#: ../js/ui/calendar.js:828 #: ../js/ui/calendar.js:839
msgid "This week" msgid "This week"
msgstr "Ezen a héten" msgstr "Ezen a héten"
#: ../js/ui/calendar.js:836 #: ../js/ui/calendar.js:847
msgid "Next week" msgid "Next week"
msgstr "Jövő héten" msgstr "Jövő héten"
@ -615,7 +619,7 @@ msgid "Type again:"
msgstr "Írja be újra:" msgstr "Írja be újra:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Kapcsolódás" msgstr "Kapcsolódás"
@ -709,102 +713,102 @@ msgstr "Hitelesítés"
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "A hitelesítés sikertelen. Próbálja újra." msgstr "A hitelesítés sikertelen. Próbálja újra."
#: ../js/ui/components/telepathyClient.js:240 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "Meghívás" msgstr "Meghívás"
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "Hívás" msgstr "Hívás"
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "Fájlátvitel" msgstr "Fájlátvitel"
#: ../js/ui/components/telepathyClient.js:420 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "Csevegés" msgstr "Csevegés"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "Visszahangosítás" msgstr "Visszahangosítás"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "Némítás" msgstr "Némítás"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%k.%M" msgstr "%k.%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960 #: ../js/ui/components/telepathyClient.js:962
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Tegnap, %k.%M" msgstr "Tegnap, %k.%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967 #: ../js/ui/components/telepathyClient.js:969
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A %k.%M" msgstr "%A %k.%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974 #: ../js/ui/components/telepathyClient.js:976
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%B %d., %k.%M" msgstr "%B %d., %k.%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980 #: ../js/ui/components/telepathyClient.js:982
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%Y. %B %d., %k.%M" msgstr "%Y. %B %d., %k.%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%P %l.%M" msgstr "%P %l.%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993 #: ../js/ui/components/telepathyClient.js:995
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Tegnap %l.%M %P" msgstr "Tegnap %l.%M %P"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000 #: ../js/ui/components/telepathyClient.js:1002
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l.%M %P" msgstr "%A, %l.%M %P"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007 #: ../js/ui/components/telepathyClient.js:1009
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%B %d., %l.%M %p" msgstr "%B %d., %l.%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%Y. %B %d., %l.%M %p" msgstr "%Y. %B %d., %l.%M %p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s mostantól %s néven ismert" msgstr "%s mostantól %s néven ismert"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Meghívás ide: %s" msgstr "Meghívás ide: %s"
@ -812,38 +816,38 @@ msgstr "Meghívás ide: %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1157 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s kéri, hogy csatlakozzon ehhez: %s" msgstr "%s kéri, hogy csatlakozzon ehhez: %s"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "Elutasítás" msgstr "Elutasítás"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "Elfogadás" msgstr "Elfogadás"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Videohívás tőle: %s" msgstr "Videohívás tőle: %s"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Hívás tőle: %s" msgstr "Hívás tőle: %s"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "Válasz" msgstr "Válasz"
@ -852,111 +856,111 @@ msgstr "Válasz"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s a következőt küldi: %s" msgstr "%s a következőt küldi: %s"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s engedélyt kér, hogy láthassa az Ön elérhető állapotát" msgstr "%s engedélyt kér, hogy láthassa az Ön elérhető állapotát"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "Hálózati hiba" msgstr "Hálózati hiba"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "A hitelesítés meghiúsult" msgstr "A hitelesítés meghiúsult"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "Titkosítási hiba" msgstr "Titkosítási hiba"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Nincs megadva tanúsítvány" msgstr "Nincs megadva tanúsítvány"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "A tanúsítvány nem megbízható" msgstr "A tanúsítvány nem megbízható"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "A tanúsítvány lejárt" msgstr "A tanúsítvány lejárt"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "A tanúsítvány nincs aktiválva" msgstr "A tanúsítvány nincs aktiválva"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "A tanúsítvány gépneve eltér" msgstr "A tanúsítvány gépneve eltér"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "A tanúsítvány ujjlenyomata eltér" msgstr "A tanúsítvány ujjlenyomata eltér"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "A tanúsítvány önaláírt" msgstr "A tanúsítvány önaláírt"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Az állapot beállítva kilépettre" msgstr "Az állapot beállítva kilépettre"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "A titkosítás nem érhető el" msgstr "A titkosítás nem érhető el"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "A tanúsítvány érvénytelen" msgstr "A tanúsítvány érvénytelen"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "A kapcsolat visszautasítva" msgstr "A kapcsolat visszautasítva"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "A kapcsolat nem hozható létre" msgstr "A kapcsolat nem hozható létre"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "A kapcsolat elveszett" msgstr "A kapcsolat elveszett"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Ez a fiók már kapcsolódik a kiszolgálóhoz" msgstr "Ez a fiók már kapcsolódik a kiszolgálóhoz"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "" msgstr ""
"A kapcsolatot leváltotta egy új, ugyanazt az erőforrást használó kapcsolat" "A kapcsolatot leváltotta egy új, ugyanazt az erőforrást használó kapcsolat"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "A fiók már létezik a kiszolgálón" msgstr "A fiók már létezik a kiszolgálón"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "A kiszolgáló pillanatnyilag túl elfoglalt a kapcsolat kezeléséhez" msgstr "A kiszolgáló pillanatnyilag túl elfoglalt a kapcsolat kezeléséhez"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "A tanúsítvány visszavonva" msgstr "A tanúsítvány visszavonva"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"A tanúsítvány nem biztonságos titkosító algoritmust használ, vagy " "A tanúsítvány nem biztonságos titkosító algoritmust használ, vagy "
"titkosításilag gyenge" "titkosításilag gyenge"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -964,22 +968,22 @@ msgstr ""
"A kiszolgáló tanúsítványának hossza, vagy a kiszolgáló tanúsítványláncának " "A kiszolgáló tanúsítványának hossza, vagy a kiszolgáló tanúsítványláncának "
"mélysége túllépi a titkosítási programkönyvtár korlátozásait" "mélysége túllépi a titkosítási programkönyvtár korlátozásait"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "Belső hiba" msgstr "Belső hiba"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Nem lehet kapcsolódni ehhez: %s" msgstr "Nem lehet kapcsolódni ehhez: %s"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "Fiók megtekintése" msgstr "Fiók megtekintése"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Ismeretlen ok" msgstr "Ismeretlen ok"
@ -996,22 +1000,22 @@ msgstr "Alkalmazások megjelenítése"
msgid "Dash" msgid "Dash"
msgstr "Dash" msgstr "Dash"
#: ../js/ui/dateMenu.js:96 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Naptár megnyitása" msgstr "Naptár megnyitása"
#: ../js/ui/dateMenu.js:100 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Órák megnyitása" msgstr "Órák megnyitása"
#: ../js/ui/dateMenu.js:107 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Dátum- és időbeállítások" msgstr "Dátum- és időbeállítások"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:204 #: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A, %Y. %B %d." msgstr "%A, %Y. %B %d."
@ -1157,7 +1161,7 @@ msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "" msgstr ""
"Letölti és telepíti a következőt az extensions.gnome.org webhelyről: „%s”?" "Letölti és telepíti a következőt az extensions.gnome.org webhelyről: „%s”?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
msgid "Keyboard" msgid "Keyboard"
msgstr "Billentyűzet" msgstr "Billentyűzet"
@ -1213,54 +1217,55 @@ msgstr "Forrás megtekintése"
msgid "Web Page" msgid "Web Page"
msgstr "Weblap" msgstr "Weblap"
#: ../js/ui/messageTray.js:1326 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "Megnyitás" msgstr "Megnyitás"
#: ../js/ui/messageTray.js:1333 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "Eltávolítás" msgstr "Eltávolítás"
#: ../js/ui/messageTray.js:1630 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "Értesítések" msgstr "Értesítések"
#: ../js/ui/messageTray.js:1637 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Üzenetek törlése" msgstr "Üzenetek törlése"
#: ../js/ui/messageTray.js:1656 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Értesítések beállításai" msgstr "Értesítések beállításai"
#: ../js/ui/messageTray.js:1709 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Tálcamenü" msgstr "Tálcamenü"
#: ../js/ui/messageTray.js:1926 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "Nincs üzenet" msgstr "Nincs üzenet"
#: ../js/ui/messageTray.js:1968 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "Üzenettálca" msgstr "Üzenettálca"
#: ../js/ui/messageTray.js:2971 #: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
msgid "System Information" #: ../js/ui/screenShield.js:152
msgstr "Rendszerinformációk"
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:425
msgctxt "program"
msgid "Unknown"
msgstr "Ismeretlen"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format #, javascript-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
msgstr[0] "%d új üzenet" msgstr[0] "%d új üzenet"
msgstr[1] "%d új üzenet" msgstr[1] "%d új üzenet"
#: ../js/ui/messageTray.js:3011
msgid "System Information"
msgstr "Rendszerinformációk"
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:439
msgctxt "program"
msgid "Unknown"
msgstr "Ismeretlen"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Visszavonás" msgstr "Visszavonás"
@ -1277,17 +1282,17 @@ msgstr "Áttekintés"
msgid "Type to search…" msgid "Type to search…"
msgstr "Gépeljen a kereséshez…" msgstr "Gépeljen a kereséshez…"
#: ../js/ui/panel.js:515 #: ../js/ui/panel.js:521
msgid "Quit" msgid "Quit"
msgstr "Kilépés" msgstr "Kilépés"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */ #. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:567 #: ../js/ui/panel.js:573
msgid "Activities" msgid "Activities"
msgstr "Tevékenységek" msgstr "Tevékenységek"
#: ../js/ui/panel.js:918 #: ../js/ui/panel.js:924
msgid "Top Bar" msgid "Top Bar"
msgstr "Felső sáv" msgstr "Felső sáv"
@ -1304,7 +1309,6 @@ msgid "Close"
msgstr "Bezárás" msgstr "Bezárás"
#: ../js/ui/runDialog.js:277 #: ../js/ui/runDialog.js:277
#| msgid "Estimating…"
msgid "Restarting…" msgid "Restarting…"
msgstr "Újraindítás…" msgstr "Újraindítás…"
@ -1314,34 +1318,34 @@ msgstr "Újraindítás…"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d." msgstr "%A, %B %d."
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:154
#, javascript-format #, javascript-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d új értesítés" msgstr[0] "%d új értesítés"
msgstr[1] "%d új értesítés" msgstr[1] "%d új értesítés"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Zárolás" msgstr "Zárolás"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "A GNOME-nak zárolnia kell a képernyőt" msgstr "A GNOME-nak zárolnia kell a képernyőt"
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Nem lehet zárolni" msgstr "Nem lehet zárolni"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "A zárolást egy alkalmazás blokkolta" msgstr "A zárolást egy alkalmazás blokkolta"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:611
msgid "Searching…" msgid "Searching…"
msgstr "Keresés…" msgstr "Keresés…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:613
msgid "No results." msgid "No results."
msgstr "Nincs találat." msgstr "Nincs találat."
@ -1418,9 +1422,9 @@ msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "Kikapcsolás" msgstr "Kikapcsolás"
@ -1435,7 +1439,7 @@ msgid_plural "%d Connected Devices"
msgstr[0] "%d eszköz kapcsolódott" msgstr[0] "%d eszköz kapcsolódott"
msgstr[1] "%d eszköz kapcsolódott" msgstr[1] "%d eszköz kapcsolódott"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "Nincs kapcsolat" msgstr "Nincs kapcsolat"
@ -1443,7 +1447,7 @@ msgstr "Nincs kapcsolat"
msgid "Brightness" msgid "Brightness"
msgstr "Fényerő" msgstr "Fényerő"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:563
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Billentyűzetkiosztás megjelenítése" msgstr "Billentyűzetkiosztás megjelenítése"
@ -1456,7 +1460,6 @@ msgid "Disable"
msgstr "Letiltás" msgstr "Letiltás"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:73
#| msgid "Power Settings"
msgid "Privacy Settings" msgid "Privacy Settings"
msgstr "Adatvédelmi beállítások" msgstr "Adatvédelmi beállítások"
@ -1472,8 +1475,8 @@ msgstr "Engedélyezés"
msgid "<unknown>" msgid "<unknown>"
msgstr "<ismeretlen>" msgstr "<ismeretlen>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "Ki" msgstr "Ki"
@ -1491,7 +1494,7 @@ msgstr "Felügyeletlen"
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Bontás…" msgstr "Bontás…"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "Kapcsolódás" msgstr "Kapcsolódás"
@ -1512,7 +1515,7 @@ msgstr "Hiányzó firmware"
msgid "Unavailable" msgid "Unavailable"
msgstr "Nem érhető el" msgstr "Nem érhető el"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "Kapcsolódás meghiúsult" msgstr "Kapcsolódás meghiúsult"
@ -1524,7 +1527,7 @@ msgstr "Vezetékes beállítások"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Mobil széles sáv beállításai" msgstr "Mobil széles sáv beállításai"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Hardver kikapcsolva" msgstr "Hardver kikapcsolva"
@ -1564,60 +1567,60 @@ msgstr "Wi-Fi hálózatok"
msgid "Select a network" msgid "Select a network"
msgstr "Válasszon egy hálózatot" msgstr "Válasszon egy hálózatot"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "Nincs hálózat" msgstr "Nincs hálózat"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "A hardveres kapcsolóval kapcsolja ki" msgstr "A hardveres kapcsolóval kapcsolja ki"
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "Válasszon hálózatot" msgstr "Válasszon hálózatot"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Wi-Fi beállítások" msgstr "Wi-Fi beállítások"
#: ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "Bekapcsolás" msgstr "Bekapcsolás"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "A hotspot aktív" msgstr "A hotspot aktív"
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "kapcsolódás…" msgstr "kapcsolódás…"
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1412 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "hitelesítés szükséges" msgstr "hitelesítés szükséges"
#: ../js/ui/status/network.js:1414 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "a kapcsolódás meghiúsult" msgstr "a kapcsolódás meghiúsult"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "Hálózati beállítások" msgstr "Hálózati beállítások"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN beállítások" msgstr "VPN beállítások"
#: ../js/ui/status/network.js:1501 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1656 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "Hálózatkezelő" msgstr "Hálózatkezelő"
#: ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "A hálózati kapcsolat aktiválása meghiúsult" msgstr "A hálózati kapcsolat aktiválása meghiúsult"
@ -1651,11 +1654,11 @@ msgstr "Szünetmentes táp"
msgid "Battery" msgid "Battery"
msgstr "Akkumulátor" msgstr "Akkumulátor"
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Repülőgép üzemmód" msgstr "Repülőgép üzemmód"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "Be" msgstr "Be"
@ -1817,7 +1820,7 @@ msgstr ""
msgid "List possible modes" msgid "List possible modes"
msgstr "Lehetséges módok listázása" msgstr "Lehetséges módok listázása"
#: ../src/shell-app.c:666 #: ../src/shell-app.c:680
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "„%s” indítása meghiúsult" msgstr "„%s” indítása meghiúsult"
@ -1834,6 +1837,9 @@ msgstr "A jelszó nem lehet üres"
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "A hitelesítési ablakot a felhasználó bezárta" msgstr "A hitelesítési ablakot a felhasználó bezárta"
#~ msgid "Captive Portal"
#~ msgstr "Fogoly portál"
#~ msgid "The maximum accuracy level of location." #~ msgid "The maximum accuracy level of location."
#~ msgstr "A hely maximális pontossági szintje." #~ msgstr "A hely maximális pontossági szintje."

468
po/kk.po

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@ msgstr ""
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-13 07:37+0000\n" "POT-Creation-Date: 2014-09-13 07:37+0000\n"
"PO-Revision-Date: 2014-09-18 01:41+0900\n" "PO-Revision-Date: 2014-11-16 03:54+0900\n"
"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n" "Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
"Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n" "Language-Team: GNOME Korea <gnome-kr@googlegroups.com>\n"
"Language: Korean\n" "Language: Korean\n"
@ -1444,7 +1444,7 @@ msgstr "<알 수 없음>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1511
msgid "Off" msgid "Off"
msgstr "끄기" msgstr ""
#: ../js/ui/status/network.js:459 #: ../js/ui/status/network.js:459
msgid "Connected" msgid "Connected"
@ -1626,7 +1626,7 @@ msgstr "비행기 모드"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:85
msgid "On" msgid "On"
msgstr "켜기" msgstr ""
#: ../js/ui/status/system.js:317 #: ../js/ui/status/system.js:317
msgid "Switch User" msgid "Switch User"

327
po/nb.po
View File

@ -7,10 +7,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010. # Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell 3.13.x\n" "Project-Id-Version: gnome-shell 3.15.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-27 15:31+0200\n" "POT-Creation-Date: 2014-11-16 12:28+0100\n"
"PO-Revision-Date: 2014-09-27 15:33+0200\n" "PO-Revision-Date: 2014-11-16 12:29+0100\n"
"Last-Translator: Åka Sikrom <a4NOSPAMPLEASETHANKYOU@hush.com>\n" "Last-Translator: Åka Sikrom <a4NOSPAMPLEASETHANKYOU@hush.com>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: Norwegian bokmål\n" "Language: Norwegian bokmål\n"
@ -294,8 +294,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Utsett fokusendringer i musmodus til peker slutter å bevege seg" msgstr "Utsett fokusendringer i musmodus til peker slutter å bevege seg"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" msgid "Network Login"
msgstr "Fanget portal" msgstr "Nettverkspålogging"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
@ -309,7 +309,7 @@ msgstr "Utvidelser for GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
@ -327,20 +327,20 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Logg inn" msgstr "Logg inn"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "Velg økt" msgstr "Velg økt"
#. translators: this message is shown below the user list on the #. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for #. login screen. It can be activated to reveal an entry for
#. manually entering the username. #. manually entering the username.
#: ../js/gdm/loginDialog.js:429 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "Ikke listet?" msgstr "Ikke listet?"
#. Translators: this message is shown below the username entry field #. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm #. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(f.eks. bruker eller %s)" msgstr "(f.eks. bruker eller %s)"
@ -348,16 +348,16 @@ msgstr "(f.eks. bruker eller %s)"
#. TTLS and PEAP are actually much more complicated, but this complication #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication #. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one) #. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "Brukernavn: " msgstr "Brukernavn: "
#: ../js/gdm/loginDialog.js:922 #: ../js/gdm/loginDialog.js:953
msgid "Login Window" msgid "Login Window"
msgstr "Innloggingsvindu" msgstr "Innloggingsvindu"
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "Autentiseringsfeil" msgstr "Autentiseringsfeil"
@ -366,7 +366,7 @@ msgstr "Autentiseringsfeil"
#. as a cue to display our own message. #. as a cue to display our own message.
#. Translators: this message is shown below the password entry field #. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead #. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(eller dra finger)" msgstr "(eller dra finger)"
@ -391,31 +391,31 @@ msgstr "Kjøring av «%s» mislyktes:"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Omdirigering av autentisering på nett" msgstr "Omdirigering av autentisering på nett"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Ofte brukte programmer vil vises her" msgstr "Ofte brukte programmer vil vises her"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "Ofte" msgstr "Ofte"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: ../js/ui/appDisplay.js:1790 #: ../js/ui/appDisplay.js:1789
msgid "New Window" msgid "New Window"
msgstr "Nytt vindu" msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:1816 ../js/ui/dash.js:285 #: ../js/ui/appDisplay.js:1815 ../js/ui/dash.js:285
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Fjern fra favoritter" msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:1822 #: ../js/ui/appDisplay.js:1821
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Legg til i favoritter" msgstr "Legg til i favoritter"
#: ../js/ui/appDisplay.js:1831 #: ../js/ui/appDisplay.js:1830
msgid "Show Details" msgid "Show Details"
msgstr "Vis detaljer" msgstr "Vis detaljer"
@ -438,17 +438,23 @@ msgstr "Innstillinger"
msgid "Change Background…" msgid "Change Background…"
msgstr "Bytt bakgrunn …" msgstr "Bytt bakgrunn …"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. #.
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Hele dagen" msgstr "Hele dagen"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : #. \u2236 is a ratio character, similar to :
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%H.%M" msgstr "%H.%M"
@ -456,7 +462,7 @@ msgstr "%H.%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space #. a thin space
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%H.%M" msgstr "%H.%M"
@ -466,43 +472,43 @@ msgstr "%H.%M"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. #.
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:115
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Monday #. Translators: Calendar grid abbreviation for Monday
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:117
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "M" msgstr "M"
#. Translators: Calendar grid abbreviation for Tuesday #. Translators: Calendar grid abbreviation for Tuesday
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:119
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "T" msgstr "T"
#. Translators: Calendar grid abbreviation for Wednesday #. Translators: Calendar grid abbreviation for Wednesday
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:121
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "O" msgstr "O"
#. Translators: Calendar grid abbreviation for Thursday #. Translators: Calendar grid abbreviation for Thursday
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:123
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "T" msgstr "T"
#. Translators: Calendar grid abbreviation for Friday #. Translators: Calendar grid abbreviation for Friday
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:125
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "F" msgstr "F"
#. Translators: Calendar grid abbreviation for Saturday #. Translators: Calendar grid abbreviation for Saturday
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:127
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "L" msgstr "L"
@ -513,85 +519,83 @@ msgstr "L"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. #.
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:140
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Sø" msgstr "Sø"
#. Translators: Event list abbreviation for Monday #. Translators: Event list abbreviation for Monday
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:142
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Ma" msgstr "Ma"
#. Translators: Event list abbreviation for Tuesday #. Translators: Event list abbreviation for Tuesday
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:144
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "Ti" msgstr "Ti"
#. Translators: Event list abbreviation for Wednesday #. Translators: Event list abbreviation for Wednesday
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:146
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "On" msgstr "On"
#. Translators: Event list abbreviation for Thursday #. Translators: Event list abbreviation for Thursday
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:148
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "To" msgstr "To"
#. Translators: Event list abbreviation for Friday #. Translators: Event list abbreviation for Friday
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:150
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "Fr" msgstr "Fr"
#. Translators: Event list abbreviation for Saturday #. Translators: Event list abbreviation for Saturday
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:152
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "Lø" msgstr "Lø"
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:461
msgid "Previous month" msgid "Previous month"
msgstr "Forrige måned" msgstr "Forrige måned"
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:471
msgid "Next month" msgid "Next month"
msgstr "Neste måned" msgstr "Neste måned"
#. Translators: Text to show if there are no events #. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:806
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Ingenting planlagt" msgstr "Ingenting planlagt"
#. Translators: Shown on calendar heading when selected day occurs on current year #: ../js/ui/calendar.js:825
#: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A %B %d" msgstr "%A %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year #: ../js/ui/calendar.js:829
#: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A %B %d, %Y" msgstr "%A %B %d, %Y"
#: ../js/ui/calendar.js:813 #: ../js/ui/calendar.js:841
msgid "Today" msgid "Today"
msgstr "I dag" msgstr "I dag"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:845
msgid "Tomorrow" msgid "Tomorrow"
msgstr "I morgen" msgstr "I morgen"
#: ../js/ui/calendar.js:828 #: ../js/ui/calendar.js:856
msgid "This week" msgid "This week"
msgstr "Denne uka" msgstr "Denne uka"
#: ../js/ui/calendar.js:836 #: ../js/ui/calendar.js:864
msgid "Next week" msgid "Next week"
msgstr "Neste uke" msgstr "Neste uke"
@ -625,7 +629,7 @@ msgid "Type again:"
msgstr "Skriv på nytt:" msgstr "Skriv på nytt:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Koble til" msgstr "Koble til"
@ -723,47 +727,47 @@ msgstr "Beklager, det virket ikke. Prøv igjen."
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use #. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does. #. system-users for now as Empathy does.
#: ../js/ui/components/telepathyClient.js:240 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "Invitasjon" msgstr "Invitasjon"
#. We got the TpContact #. We got the TpContact
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "Ring" msgstr "Ring"
#. We got the TpContact #. We got the TpContact
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "Filoverføring" msgstr "Filoverføring"
#: ../js/ui/components/telepathyClient.js:420 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "Prat" msgstr "Prat"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "Fjern demping" msgstr "Fjern demping"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "Demp" msgstr "Demp"
#. Translators: Time in 24h format #. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%H.%M" msgstr "%H.%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" #. time string in 24h format. i.e. "Yesterday, 14:30"
#: ../js/ui/components/telepathyClient.js:960 #: ../js/ui/components/telepathyClient.js:962
#, no-c-format #, no-c-format
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "I går, %H.%M" msgstr "I går, %H.%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" #. string in 24h format. i.e. "Monday, 14:30"
#: ../js/ui/components/telepathyClient.js:967 #: ../js/ui/components/telepathyClient.js:969
#, no-c-format #, no-c-format
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H.%M" msgstr "%A, %H.%M"
@ -771,7 +775,7 @@ msgstr "%A, %H.%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" #. i.e. "May 25, 14:30"
#: ../js/ui/components/telepathyClient.js:974 #: ../js/ui/components/telepathyClient.js:976
#, no-c-format #, no-c-format
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d %B, %H.%M" msgstr "%d %B, %H.%M"
@ -779,26 +783,26 @@ msgstr "%d %B, %H.%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" #. i.e. "May 25 2012, 14:30"
#: ../js/ui/components/telepathyClient.js:980 #: ../js/ui/components/telepathyClient.js:982
#, no-c-format #, no-c-format
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H.%M" msgstr "%d %B %Y, %H.%M"
#. Translators: Time in 24h format #. Translators: Time in 24h format
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%H.%M" msgstr "%H.%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" #. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:993 #: ../js/ui/components/telepathyClient.js:995
#, no-c-format #, no-c-format
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "I går, %H.%M" msgstr "I går, %H.%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" #. string in 12h format. i.e. "Monday, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1000 #: ../js/ui/components/telepathyClient.js:1002
#, no-c-format #, no-c-format
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %H.%M" msgstr "%A, %H.%M"
@ -806,7 +810,7 @@ msgstr "%A, %H.%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" #. i.e. "May 25, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1007 #: ../js/ui/components/telepathyClient.js:1009
#, no-c-format #, no-c-format
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d %B, %H.%M" msgstr "%d %B, %H.%M"
@ -814,21 +818,21 @@ msgstr "%d %B, %H.%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm" #. i.e. "May 25 2012, 2:30 pm"
#: ../js/ui/components/telepathyClient.js:1013 #: ../js/ui/components/telepathyClient.js:1015
#, no-c-format #, no-c-format
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %H.%M" msgstr "%d %B %Y, %H.%M"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. #. IM name.
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s" msgstr "%s er nå kjent som %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. #. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Invitasjon til %s" msgstr "Invitasjon til %s"
@ -836,38 +840,38 @@ msgstr "Invitasjon til %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. #. * for example.
#: ../js/ui/components/telepathyClient.js:1157 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s inviterer deg til å bli med i %s" msgstr "%s inviterer deg til å bli med i %s"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "Avslå" msgstr "Avslå"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "Godta" msgstr "Godta"
#. translators: argument is a contact name like Alice for example. #. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1184 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Videosamtale fra %s" msgstr "Videosamtale fra %s"
#. translators: argument is a contact name like Alice for example. #. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1187 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Samtale fra %s" msgstr "Samtale fra %s"
#. translators: this is a button label (verb), not a noun #. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1201 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "Svar" msgstr "Svar"
@ -876,110 +880,110 @@ msgstr "Svar"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. #.
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s sender deg %s" msgstr "%s sender deg %s"
#. To translators: The parameter is the contact's alias #. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1251 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s vil ha rettigheter til å se når du er tilkoblet" msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "Nettverksfeil" msgstr "Nettverksfeil"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Autentisering mislyktes" msgstr "Autentisering mislyktes"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "Feil ved kryptering" msgstr "Feil ved kryptering"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Sertifikat ikke oppgitt" msgstr "Sertifikat ikke oppgitt"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Stoler ikke på sertifikatet" msgstr "Stoler ikke på sertifikatet"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Sertifikatet er utløpt" msgstr "Sertifikatet er utløpt"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Sertifikatet er ikke aktivert" msgstr "Sertifikatet er ikke aktivert"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Feil vertsnavn for sertifikat" msgstr "Feil vertsnavn for sertifikat"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Feil fingeravtrykk for sertifikat" msgstr "Feil fingeravtrykk for sertifikat"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Sertifikatet er selvsignert" msgstr "Sertifikatet er selvsignert"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Status er satt til frakoblet" msgstr "Status er satt til frakoblet"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgjengelig" msgstr "Kryptering er ikke tilgjengelig"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Sertifikatet er ugyldig" msgstr "Sertifikatet er ugyldig"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Tilkobling ble nektet" msgstr "Tilkobling ble nektet"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Klarte ikke å etablere tilkobling" msgstr "Klarte ikke å etablere tilkobling"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Tilkoblingen er brutt" msgstr "Tilkoblingen er brutt"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Denne kontoen er allerede koblet til tjeneren" msgstr "Denne kontoen er allerede koblet til tjeneren"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "" msgstr ""
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs" "Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Kontoen eksisterer allerede på tjeneren" msgstr "Kontoen eksisterer allerede på tjeneren"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Tjener er for opptatt til å håndtere tilkoblingen" msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Sertifikatet er tilbaketrukket" msgstr "Sertifikatet er tilbaketrukket"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt" "Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -987,22 +991,22 @@ msgstr ""
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i " "Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
"kryptografibiblioteket" "kryptografibiblioteket"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "Intern feil" msgstr "Intern feil"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. #. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Klarte ikke å koble til %s" msgstr "Klarte ikke å koble til %s"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "Vis konto" msgstr "Vis konto"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Ukjent årsak" msgstr "Ukjent årsak"
@ -1020,22 +1024,22 @@ msgstr "Vis programmer"
msgid "Dash" msgid "Dash"
msgstr "Favoritter" msgstr "Favoritter"
#: ../js/ui/dateMenu.js:96 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Åpne kalender" msgstr "Åpne kalender"
#: ../js/ui/dateMenu.js:100 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Åpne Klokker" msgstr "Åpne Klokker"
#: ../js/ui/dateMenu.js:107 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Innstillinger for dato og klokkeslett" msgstr "Innstillinger for dato og klokkeslett"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. #.
#: ../js/ui/dateMenu.js:204 #: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y" msgstr "%a %e %B, %Y"
@ -1180,7 +1184,7 @@ msgstr "Installer"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Last ned og installer «%s» fra extensions.gnome.org?" msgstr "Last ned og installer «%s» fra extensions.gnome.org?"
#: ../js/ui/keyboard.js:700 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
msgid "Keyboard" msgid "Keyboard"
msgstr "Tastatur" msgstr "Tastatur"
@ -1236,39 +1240,47 @@ msgstr "Vis kildekode"
msgid "Web Page" msgid "Web Page"
msgstr "Nettside" msgstr "Nettside"
#: ../js/ui/messageTray.js:1327 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "Åpne" msgstr "Åpne"
#: ../js/ui/messageTray.js:1334 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "Fjern" msgstr "Fjern"
#: ../js/ui/messageTray.js:1631 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "Varslinger" msgstr "Varslinger"
#: ../js/ui/messageTray.js:1638 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Tøm meldinger" msgstr "Tøm meldinger"
#: ../js/ui/messageTray.js:1657 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Innstillinger for varsling" msgstr "Innstillinger for varsling"
#: ../js/ui/messageTray.js:1710 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Meny for varslingsområde" msgstr "Meny for varslingsområde"
#: ../js/ui/messageTray.js:1934 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "Ingen meldinger" msgstr "Ingen meldinger"
#: ../js/ui/messageTray.js:1979 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "Meldingstrau" msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2992 #: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
#: ../js/ui/screenShield.js:152
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d ny melding"
msgstr[1] "%d nye meldinger"
#: ../js/ui/messageTray.js:3011
msgid "System Information" msgid "System Information"
msgstr "Systeminformasjon" msgstr "Systeminformasjon"
@ -1277,13 +1289,6 @@ msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Ukjent" msgstr "Ukjent"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d ny melding"
msgstr[1] "%d nye meldinger"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Angre" msgstr "Angre"
@ -1341,18 +1346,18 @@ msgstr "Starter på nytt …"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %B %d" msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:154
#, javascript-format #, javascript-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d ny varsling" msgstr[0] "%d ny varsling"
msgstr[1] "%d nye varslinger" msgstr[1] "%d nye varslinger"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Lås" msgstr "Lås"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME må låse skjermen" msgstr "GNOME må låse skjermen"
@ -1363,19 +1368,19 @@ msgstr "GNOME må låse skjermen"
#. #.
#. XXX: another option is to kick the user into the gdm login #. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs #. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Klarte ikke å låse" msgstr "Klarte ikke å låse"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Låsing ble stoppet av et program" msgstr "Låsing ble stoppet av et program"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:611
msgid "Searching…" msgid "Searching…"
msgstr "Søker …" msgstr "Søker …"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:613
msgid "No results." msgid "No results."
msgstr "Ingen resultater." msgstr "Ingen resultater."
@ -1454,9 +1459,9 @@ msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "Slå av" msgstr "Slå av"
@ -1471,7 +1476,7 @@ msgid_plural "%d Connected Devices"
msgstr[0] "%d tilkoblet enhet" msgstr[0] "%d tilkoblet enhet"
msgstr[1] "%d tilkoblede enheter" msgstr[1] "%d tilkoblede enheter"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "Ikke koblet til" msgstr "Ikke koblet til"
@ -1479,7 +1484,7 @@ msgstr "Ikke koblet til"
msgid "Brightness" msgid "Brightness"
msgstr "Lysstyrke" msgstr "Lysstyrke"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:563
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Vis tastaturutforming" msgstr "Vis tastaturutforming"
@ -1507,8 +1512,8 @@ msgstr "Slå på"
msgid "<unknown>" msgid "<unknown>"
msgstr "<ukjent>" msgstr "<ukjent>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "Av" msgstr "Av"
@ -1526,7 +1531,7 @@ msgstr "Håndteres ikke"
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Kobler fra" msgstr "Kobler fra"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "Kobler til" msgstr "Kobler til"
@ -1547,7 +1552,7 @@ msgstr "Fastvare mangler"
msgid "Unavailable" msgid "Unavailable"
msgstr "Ikke tilgjengelig" msgstr "Ikke tilgjengelig"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "Tilkobling mislyktes" msgstr "Tilkobling mislyktes"
@ -1559,7 +1564,7 @@ msgstr "Innstillinger for trådbundet nettverk"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Innstillinger for mobilt bredbånd" msgstr "Innstillinger for mobilt bredbånd"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Maskinvare slått av" msgstr "Maskinvare slått av"
@ -1599,60 +1604,60 @@ msgstr "Wi-Fi nettverk"
msgid "Select a network" msgid "Select a network"
msgstr "Velg et nettverk" msgstr "Velg et nettverk"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "Ingen nettverk" msgstr "Ingen nettverk"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Bruk maskinvarebryter til å slå av" msgstr "Bruk maskinvarebryter til å slå av"
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "Velg nettverk" msgstr "Velg nettverk"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Innstillinger" msgstr "Innstillinger"
#: ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "Slå på" msgstr "Slå på"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Trådløst aksesspunkt aktivt" msgstr "Trådløst aksesspunkt aktivt"
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "kobler til …" msgstr "kobler til …"
#. Translators: this is for network connections that require some kind of key or password #. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:1412 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "autentisering kreves" msgstr "autentisering kreves"
#: ../js/ui/status/network.js:1414 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "tilkobling mislyktes" msgstr "tilkobling mislyktes"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "Innstillinger for nettverk" msgstr "Innstillinger for nettverk"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Innstillinger for VPN" msgstr "Innstillinger for VPN"
#: ../js/ui/status/network.js:1501 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1656 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "Nettverkshåndtering" msgstr "Nettverkshåndtering"
#: ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivering av nettverkstilkobling mislyktes" msgstr "Aktivering av nettverkstilkobling mislyktes"
@ -1693,11 +1698,11 @@ msgstr "Batteri"
#. The menu only appears when airplane mode is on, so just #. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically #. statically build it as if it was on, rather than dynamically
#. changing the menu contents. #. changing the menu contents.
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Flymodus" msgstr "Flymodus"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "På" msgstr "På"

348
po/sv.po
View File

@ -3,22 +3,23 @@
# This file is distributed under the same license as the gnome-shell package. # This file is distributed under the same license as the gnome-shell package.
# Daniel Nylander <po@danielnylander.se>, 2009, 2010, 2011, 2012. # Daniel Nylander <po@danielnylander.se>, 2009, 2010, 2011, 2012.
# Marcus Lundblad <ml@update.uu.se>, 2014. # Marcus Lundblad <ml@update.uu.se>, 2014.
# Åke Engelbrektson <eson57@gmail.com, 2014.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-12 21:57+0000\n" "POT-Creation-Date: 2014-12-11 08:30+0000\n"
"PO-Revision-Date: 2014-09-15 09:47+0100\n" "PO-Revision-Date: 2014-12-11 08:57+0100\n"
"Last-Translator: Mattias Eriksson <snaggen@gmail.com>\n" "Last-Translator: Åke Engelbrektson <eson57@gmail.com>\n"
"Language-Team: svenska <tp-sv@listor.tp-sv.se>\n" "Language-Team: svenska <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n" "Language: sv\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n" "X-Generator: Poedit 1.7.1\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System" msgid "System"
@ -292,8 +293,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Fördröj fokusändringar i musläge tills pekare slutar röra sig" msgstr "Fördröj fokusändringar i musläge tills pekare slutar röra sig"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" msgid "Network Login"
msgstr "Fångstportal" msgstr "Nätverksinloggning"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
@ -307,7 +308,7 @@ msgstr "Tillägg för GNOME-skal"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "Avbryt" msgstr "Avbryt"
@ -325,33 +326,33 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Logga in" msgstr "Logga in"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "Välj session" msgstr "Välj session"
#: ../js/gdm/loginDialog.js:429 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "Inte listad?" msgstr "Inte listad?"
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(till exempel användare eller %s)" msgstr "(till exempel användare eller %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "Användarnamn: " msgstr "Användarnamn: "
#: ../js/gdm/loginDialog.js:922 #: ../js/gdm/loginDialog.js:955
msgid "Login Window" msgid "Login Window"
msgstr "Inloggningsfönster" msgstr "Inloggningsfönster"
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "Autentiseringsfel" msgstr "Autentiseringsfel"
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(eller dra fingret)" msgstr "(eller dra fingret)"
@ -372,15 +373,15 @@ msgstr "Körning av ”%s” misslyckades:"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Omdirigering för webautentisering" msgstr "Omdirigering för webautentisering"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Ofta använda program kommer visas här" msgstr "Ofta använda program kommer visas här"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "Ofta använda" msgstr "Ofta använda"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "Alla" msgstr "Alla"
@ -400,17 +401,17 @@ msgstr "Lägg till som favorit"
msgid "Show Details" msgid "Show Details"
msgstr "Visa detaljer" msgstr "Visa detaljer"
#: ../js/ui/appFavorites.js:124 #: ../js/ui/appFavorites.js:132
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s har lagts till i dina favoriter." msgstr "%s har lagts till i dina favoriter."
#: ../js/ui/appFavorites.js:158 #: ../js/ui/appFavorites.js:166
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s har tagits bort från dina favoriter." msgstr "%s har tagits bort från dina favoriter."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:813 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:819
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Inställningar" msgstr "Inställningar"
@ -419,17 +420,23 @@ msgstr "Inställningar"
msgid "Change Background…" msgid "Change Background…"
msgstr "Ändra bakgrund…" msgstr "Ändra bakgrund…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr ""
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Hela dagen" msgstr "Hela dagen"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
@ -437,7 +444,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -447,43 +454,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:98
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:100
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "M" msgstr "M"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:102
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "T" msgstr "T"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:104
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "O" msgstr "O"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:106
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "T" msgstr "T"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:108
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "F" msgstr "F"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:110
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "L" msgstr "L"
@ -494,85 +501,83 @@ msgstr "L"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:123
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Sö" msgstr "Sö"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:125
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Må" msgstr "Må"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:127
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "Ti" msgstr "Ti"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:129
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "On" msgstr "On"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:131
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "To" msgstr "To"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:133
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "Fr" msgstr "Fr"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:135
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "Lö" msgstr "Lö"
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:444
msgid "Previous month" msgid "Previous month"
msgstr "Föregående månad" msgstr "Föregående månad"
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:454
msgid "Next month" msgid "Next month"
msgstr "Nästa månad" msgstr "Nästa månad"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:789
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Ingenting i schemat" msgstr "Ingenting i schemat"
#. Translators: Shown on calendar heading when selected day occurs on current year */ #: ../js/ui/calendar.js:808
#: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on different year */ #: ../js/ui/calendar.js:812
#: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d %B, %Y" msgstr "%A, %d %B, %Y"
#: ../js/ui/calendar.js:813 #: ../js/ui/calendar.js:824
msgid "Today" msgid "Today"
msgstr "Idag" msgstr "Idag"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:828
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Imorgon" msgstr "Imorgon"
#: ../js/ui/calendar.js:828 #: ../js/ui/calendar.js:839
msgid "This week" msgid "This week"
msgstr "Denna vecka" msgstr "Denna vecka"
#: ../js/ui/calendar.js:836 #: ../js/ui/calendar.js:847
msgid "Next week" msgid "Next week"
msgstr "Nästa vecka" msgstr "Nästa vecka"
@ -606,7 +611,7 @@ msgid "Type again:"
msgstr "Skriv igen:" msgstr "Skriv igen:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Anslut" msgstr "Anslut"
@ -700,102 +705,102 @@ msgstr "Autentisera"
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Tyvärr, det fungerade inte. Försök igen." msgstr "Tyvärr, det fungerade inte. Försök igen."
#: ../js/ui/components/telepathyClient.js:240 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "Inbjudan" msgstr "Inbjudan"
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "Samtal" msgstr "Samtal"
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "Filöverföring" msgstr "Filöverföring"
#: ../js/ui/components/telepathyClient.js:420 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "Chatt" msgstr "Chatt"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "Aktivera ljud" msgstr "Aktivera ljud"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "Tyst" msgstr "Tyst"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960 #: ../js/ui/components/telepathyClient.js:962
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Igår, %H%M" msgstr "Igår, %H%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967 #: ../js/ui/components/telepathyClient.js:969
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974 #: ../js/ui/components/telepathyClient.js:976
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d %B, %H%M" msgstr "%d %B, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980 #: ../js/ui/components/telepathyClient.js:982
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H%M" msgstr "%d %B %Y, %H%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l%M%p" msgstr "%l%M%p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993 #: ../js/ui/components/telepathyClient.js:995
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Igår, %l%M%p" msgstr "Igår, %l%M%p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000 #: ../js/ui/components/telepathyClient.js:1002
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %I%M%p" msgstr "%A, %I%M%p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007 #: ../js/ui/components/telepathyClient.js:1009
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d %B, %l%M%p" msgstr "%d %B, %l%M%p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %l%M%p" msgstr "%d %B %Y, %l%M%p"
#. Translators: this is the other person changing their old IM name to their new #. Translators: this is the other person changing their old IM name to their new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s är nu känd som %s" msgstr "%s är nu känd som %s"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "Inbjudan till %s" msgstr "Inbjudan till %s"
@ -803,38 +808,38 @@ msgstr "Inbjudan till %s"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1157 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s bjuder in dig till %s" msgstr "%s bjuder in dig till %s"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "Neka" msgstr "Neka"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "Acceptera" msgstr "Acceptera"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "Videosamtal från %s" msgstr "Videosamtal från %s"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "Samtal från %s" msgstr "Samtal från %s"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "Svara" msgstr "Svara"
@ -843,109 +848,109 @@ msgstr "Svara"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s skickar dig %s" msgstr "%s skickar dig %s"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s vill få behörighet att se när du är ansluten" msgstr "%s vill få behörighet att se när du är ansluten"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "Nätverksfel" msgstr "Nätverksfel"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Autentisering misslyckades" msgstr "Autentisering misslyckades"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "Krypteringsfel" msgstr "Krypteringsfel"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Certifikat tillhandahålls inte" msgstr "Certifikat tillhandahålls inte"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Certifikatet är inte pålitligt" msgstr "Certifikatet är inte pålitligt"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Certifikatet är utgånget" msgstr "Certifikatet är utgånget"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Certifikatet är inte aktiverat" msgstr "Certifikatet är inte aktiverat"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Certifikatets värdnamn stämmer inte" msgstr "Certifikatets värdnamn stämmer inte"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Certifikatets fingeravtryck stämmer inte" msgstr "Certifikatets fingeravtryck stämmer inte"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Certifikatet är självsignerat" msgstr "Certifikatet är självsignerat"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Status är inställd till frånkopplad" msgstr "Status är inställd till frånkopplad"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Kryptering är inte tillgänglig" msgstr "Kryptering är inte tillgänglig"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Certifikatet är ogiltigt" msgstr "Certifikatet är ogiltigt"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Anslutningen har nekats" msgstr "Anslutningen har nekats"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Anslutningen kan inte etableras" msgstr "Anslutningen kan inte etableras"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Anslutningen har förlorats" msgstr "Anslutningen har förlorats"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Detta konto är redan anslutet till servern" msgstr "Detta konto är redan anslutet till servern"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "Anslutningen har ersatts av en ny anslutning med samma resurs" msgstr "Anslutningen har ersatts av en ny anslutning med samma resurs"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Kontot finns redan på servern" msgstr "Kontot finns redan på servern"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Servern är för närvarande för upptagen för att hantera anslutningen" msgstr "Servern är för närvarande för upptagen för att hantera anslutningen"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Certifikatet har spärrats" msgstr "Certifikatet har spärrats"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "" msgstr ""
"Certifikatet använder en osäker skifferalgoritm eller är kryptografiskt svagt" "Certifikatet använder en osäker skifferalgoritm eller är kryptografiskt svagt"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate " "The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library" "chain, exceed the limits imposed by the cryptography library"
@ -953,22 +958,22 @@ msgstr ""
"Längden på serverns certifikat, eller djupet av serverns certifikatkedja, " "Längden på serverns certifikat, eller djupet av serverns certifikatkedja, "
"överstiger gränserna som satts av det kryptografiska biblioteket" "överstiger gränserna som satts av det kryptografiska biblioteket"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "Internt fel" msgstr "Internt fel"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "Misslyckades att ansluta till %s" msgstr "Misslyckades att ansluta till %s"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "Visa konto" msgstr "Visa konto"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Okänd anledning" msgstr "Okänd anledning"
@ -982,24 +987,24 @@ msgstr "Visa program"
#: ../js/ui/dash.js:445 #: ../js/ui/dash.js:445
msgid "Dash" msgid "Dash"
msgstr "Favoriter" msgstr "Snabbstartspanel"
#: ../js/ui/dateMenu.js:96 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Öppna kalender" msgstr "Öppna kalender"
#: ../js/ui/dateMenu.js:100 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Öppna klockor" msgstr "Öppna klockor"
#: ../js/ui/dateMenu.js:107 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Inställningar för datum och tid" msgstr "Inställningar för datum och tid"
#. Translators: This is the date format to use when the calendar popup is #. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM"). #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#. */ #. */
#: ../js/ui/dateMenu.js:204 #: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%A %e %B, %Y" msgstr "%A %e %B, %Y"
@ -1144,7 +1149,7 @@ msgstr "Installera"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Hämta och installera ”%s” från extensions.gnome.org?" msgstr "Hämta och installera ”%s” från extensions.gnome.org?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
msgid "Keyboard" msgid "Keyboard"
msgstr "Tangentbord" msgstr "Tangentbord"
@ -1200,54 +1205,55 @@ msgstr "Visa källa"
msgid "Web Page" msgid "Web Page"
msgstr "Webbsida" msgstr "Webbsida"
#: ../js/ui/messageTray.js:1326 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "Öppna" msgstr "Öppna"
#: ../js/ui/messageTray.js:1333 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "Ta bort" msgstr "Ta bort"
#: ../js/ui/messageTray.js:1630 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "Notifieringar" msgstr "Notifieringar"
#: ../js/ui/messageTray.js:1637 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Rensa meddelanden" msgstr "Rensa meddelanden"
#: ../js/ui/messageTray.js:1656 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Inställningar för notifieringar" msgstr "Inställningar för notifieringar"
#: ../js/ui/messageTray.js:1709 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Fältmeny" msgstr "Fältmeny"
#: ../js/ui/messageTray.js:1926 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "Inga meddelanden" msgstr "Inga meddelanden"
#: ../js/ui/messageTray.js:1968 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "Meddelandefält" msgstr "Meddelandefält"
#: ../js/ui/messageTray.js:2971 #: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
msgid "System Information" #: ../js/ui/screenShield.js:152
msgstr "Systeminformation"
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:425
msgctxt "program"
msgid "Unknown"
msgstr "Okänt"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format #, javascript-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
msgstr[0] "%d nytt meddelande" msgstr[0] "%d nytt meddelande"
msgstr[1] "%d nya meddelanden" msgstr[1] "%d nya meddelanden"
#: ../js/ui/messageTray.js:3011
msgid "System Information"
msgstr "Systeminformation"
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:439
msgctxt "program"
msgid "Unknown"
msgstr "Okänt"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Ångra" msgstr "Ångra"
@ -1264,17 +1270,17 @@ msgstr "Översikt"
msgid "Type to search…" msgid "Type to search…"
msgstr "Skriv för att söka…" msgstr "Skriv för att söka…"
#: ../js/ui/panel.js:515 #: ../js/ui/panel.js:521
msgid "Quit" msgid "Quit"
msgstr "Avsluta" msgstr "Avsluta"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */ #. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:567 #: ../js/ui/panel.js:573
msgid "Activities" msgid "Activities"
msgstr "Aktiviteter" msgstr "Aktiviteter"
#: ../js/ui/panel.js:918 #: ../js/ui/panel.js:924
msgid "Top Bar" msgid "Top Bar"
msgstr "Systemrad" msgstr "Systemrad"
@ -1300,34 +1306,34 @@ msgstr "Startar om…"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:154
#, javascript-format #, javascript-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d ny notifiering" msgstr[0] "%d ny notifiering"
msgstr[1] "%d nya notifieringar" msgstr[1] "%d nya notifieringar"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Lås" msgstr "Lås"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME behöver låsa skärmen" msgstr "GNOME behöver låsa skärmen"
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Kunde inte låsa" msgstr "Kunde inte låsa"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Låsning hindrades av ett program" msgstr "Låsning hindrades av ett program"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:611
msgid "Searching…" msgid "Searching…"
msgstr "Söker…" msgstr "Söker…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:613
msgid "No results." msgid "No results."
msgstr "Inga sökträffar." msgstr "Inga sökträffar."
@ -1404,9 +1410,9 @@ msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "Stäng av" msgstr "Stäng av"
@ -1421,7 +1427,7 @@ msgid_plural "%d Connected Devices"
msgstr[0] "%d ansluten enhet" msgstr[0] "%d ansluten enhet"
msgstr[1] "%d anslutna enheter" msgstr[1] "%d anslutna enheter"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "Ej ansluten" msgstr "Ej ansluten"
@ -1429,7 +1435,7 @@ msgstr "Ej ansluten"
msgid "Brightness" msgid "Brightness"
msgstr "Ljusstyrka" msgstr "Ljusstyrka"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:563
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Visa tangentbordslayout" msgstr "Visa tangentbordslayout"
@ -1442,7 +1448,6 @@ msgid "Disable"
msgstr "Inaktivera" msgstr "Inaktivera"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:73
#| msgid "Power Settings"
msgid "Privacy Settings" msgid "Privacy Settings"
msgstr "Sekretessinställningar" msgstr "Sekretessinställningar"
@ -1458,8 +1463,8 @@ msgstr "Aktivera"
msgid "<unknown>" msgid "<unknown>"
msgstr "<okänd>" msgstr "<okänd>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "Frånkopplad" msgstr "Frånkopplad"
@ -1477,7 +1482,7 @@ msgstr "Ohanterade"
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Kopplar från" msgstr "Kopplar från"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "Ansluter" msgstr "Ansluter"
@ -1498,7 +1503,7 @@ msgstr "Fast programvara saknas"
msgid "Unavailable" msgid "Unavailable"
msgstr "Inte tillgänglig" msgstr "Inte tillgänglig"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "Anslutningen misslyckades" msgstr "Anslutningen misslyckades"
@ -1510,7 +1515,7 @@ msgstr "Trådbundna inställningar"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Inställningar för mobilt bredband" msgstr "Inställningar för mobilt bredband"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Maskinvara inaktiverad" msgstr "Maskinvara inaktiverad"
@ -1551,60 +1556,60 @@ msgstr "Trådlösa nätverk"
msgid "Select a network" msgid "Select a network"
msgstr "Välj ett nätverk" msgstr "Välj ett nätverk"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "Inga nätverk" msgstr "Inga nätverk"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Använd hårdvarubrytare för att slå av" msgstr "Använd hårdvarubrytare för att slå av"
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "Välj nätverk" msgstr "Välj nätverk"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Inställningar för trådlösa nätverk" msgstr "Inställningar för trådlösa nätverk"
#: ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "Slå på" msgstr "Slå på"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Surfpunkt Aktiv" msgstr "Surfzon aktiv"
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "ansluter..." msgstr "ansluter..."
#. Translators: this is for network connections that require some kind of key or password */ #. Translators: this is for network connections that require some kind of key or password */
#: ../js/ui/status/network.js:1412 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "autentisering krävs" msgstr "autentisering krävs"
#: ../js/ui/status/network.js:1414 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "anslutningen misslyckades" msgstr "anslutningen misslyckades"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "Nätverksinställningar" msgstr "Nätverksinställningar"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN-inställningar" msgstr "VPN-inställningar"
#: ../js/ui/status/network.js:1501 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1656 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "Nätverkshanterare" msgstr "Nätverkshanterare"
#: ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivering av nätverksanslutning misslyckades" msgstr "Aktivering av nätverksanslutning misslyckades"
@ -1638,11 +1643,11 @@ msgstr "Avbrottsfri kraftförsörjning (UPS)"
msgid "Battery" msgid "Battery"
msgstr "Batteri" msgstr "Batteri"
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Flygplansläge" msgstr "Flygplansläge"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "På" msgstr "På"
@ -1803,7 +1808,7 @@ msgstr "Använd ett specifikt läge, t.ex. ”gdm” för inloggningsskärm"
msgid "List possible modes" msgid "List possible modes"
msgstr "Lista möjliga lägen" msgstr "Lista möjliga lägen"
#: ../src/shell-app.c:666 #: ../src/shell-app.c:680
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Misslyckades med att starta ”%s”" msgstr "Misslyckades med att starta ”%s”"
@ -1820,6 +1825,9 @@ msgstr "Lösenordet får inte vara blankt"
msgid "Authentication dialog was dismissed by the user" msgid "Authentication dialog was dismissed by the user"
msgstr "Autentiseringsdialogen stängdes av användaren" msgstr "Autentiseringsdialogen stängdes av användaren"
#~ msgid "Captive Portal"
#~ msgstr "Fångstportal"
#~ msgid "The maximum accuracy level of location." #~ msgid "The maximum accuracy level of location."
#~ msgstr "Högsta grad av noggrannhet för plats." #~ msgstr "Högsta grad av noggrannhet för plats."

343
po/tr.po
View File

@ -7,14 +7,15 @@
# Osman Karagöz <osmank3@gmail.com>, 2013. # Osman Karagöz <osmank3@gmail.com>, 2013.
# Bayram Güçlü <byrmgcl@yandex.com.tr>, 2014. # Bayram Güçlü <byrmgcl@yandex.com.tr>, 2014.
# sabri ünal <yakushabb@gmail.com>, 2014. # sabri ünal <yakushabb@gmail.com>, 2014.
# Gökhan Gurbetoğlu <ggurbet@gmail.com>, 2014.
# Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2013, 2014. # Muhammet Kara <muhammetk@gmail.com>, 2011, 2012, 2013, 2014.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-09-15 09:30+0000\n" "POT-Creation-Date: 2014-12-13 08:33+0000\n"
"PO-Revision-Date: 2014-09-16 09:01+0000\n" "PO-Revision-Date: 2014-12-13 17:43+0000\n"
"Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n" "Last-Translator: Muhammet Kara <muhammetk@gmail.com>\n"
"Language-Team: Türkçe <gnome-turk@gnome.org>\n" "Language-Team: Türkçe <gnome-turk@gnome.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -267,8 +268,8 @@ msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Fare kipinde odak değişikliklerini işaretçi hareketi durana kadar beklet" msgstr "Fare kipinde odak değişikliklerini işaretçi hareketi durana kadar beklet"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1 #: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
msgid "Captive Portal" msgid "Network Login"
msgstr "Esir Portal" msgstr "Ağ Girişi"
#: ../js/extensionPrefs/main.js:123 #: ../js/extensionPrefs/main.js:123
#, javascript-format #, javascript-format
@ -282,7 +283,7 @@ msgstr "GNOME Kabuğu Uzantıları"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399 #: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:915 #: ../js/ui/status/network.js:916
msgid "Cancel" msgid "Cancel"
msgstr "İptal" msgstr "İptal"
@ -300,33 +301,33 @@ msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Giriş" msgstr "Giriş"
#: ../js/gdm/loginDialog.js:269 #: ../js/gdm/loginDialog.js:275
msgid "Choose Session" msgid "Choose Session"
msgstr "Oturum Seçin" msgstr "Oturum Seçin"
#: ../js/gdm/loginDialog.js:429 #: ../js/gdm/loginDialog.js:434
msgid "Not listed?" msgid "Not listed?"
msgstr "Listede yok mu?" msgstr "Listede yok mu?"
#: ../js/gdm/loginDialog.js:614 #: ../js/gdm/loginDialog.js:619
#, javascript-format #, javascript-format
msgid "(e.g., user or %s)" msgid "(e.g., user or %s)"
msgstr "(örneğin, kullanıcı veya %s)" msgstr "(örneğin, kullanıcı veya %s)"
#: ../js/gdm/loginDialog.js:619 ../js/ui/components/networkAgent.js:269 #: ../js/gdm/loginDialog.js:624 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287 #: ../js/ui/components/networkAgent.js:287
msgid "Username: " msgid "Username: "
msgstr "Kullanıcı Adı: " msgstr "Kullanıcı Adı: "
#: ../js/gdm/loginDialog.js:922 #: ../js/gdm/loginDialog.js:955
msgid "Login Window" msgid "Login Window"
msgstr "Oturum Açma Penceresi" msgstr "Oturum Açma Penceresi"
#: ../js/gdm/util.js:323 #: ../js/gdm/util.js:341
msgid "Authentication error" msgid "Authentication error"
msgstr "Kimlik doğrulama hatası" msgstr "Kimlik doğrulama hatası"
#: ../js/gdm/util.js:453 #: ../js/gdm/util.js:473
msgid "(or swipe finger)" msgid "(or swipe finger)"
msgstr "(ya da parmak izi okutun)" msgstr "(ya da parmak izi okutun)"
@ -347,15 +348,15 @@ msgstr "“%s” çalıştırılması başarısız:"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Web Kimlik Doğrulama Yönlendirmesi" msgstr "Web Kimlik Doğrulama Yönlendirmesi"
#: ../js/ui/appDisplay.js:772 #: ../js/ui/appDisplay.js:770
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Sık kullanılan uygulamalar burada yer alacak" msgstr "Sık kullanılan uygulamalar burada yer alacak"
#: ../js/ui/appDisplay.js:883 #: ../js/ui/appDisplay.js:881
msgid "Frequent" msgid "Frequent"
msgstr "Sık sık" msgstr "Sık sık"
#: ../js/ui/appDisplay.js:890 #: ../js/ui/appDisplay.js:888
msgid "All" msgid "All"
msgstr "Hepsi" msgstr "Hepsi"
@ -375,17 +376,17 @@ msgstr "Sık Kullanılanlara Ekle"
msgid "Show Details" msgid "Show Details"
msgstr "Ayrıntıları Göster" msgstr "Ayrıntıları Göster"
#: ../js/ui/appFavorites.js:124 #: ../js/ui/appFavorites.js:132
#, javascript-format #, javascript-format
msgid "%s has been added to your favorites." msgid "%s has been added to your favorites."
msgstr "%s sık kullanılanlarınıza eklendi." msgstr "%s sık kullanılanlarınıza eklendi."
#: ../js/ui/appFavorites.js:158 #: ../js/ui/appFavorites.js:166
#, javascript-format #, javascript-format
msgid "%s has been removed from your favorites." msgid "%s has been removed from your favorites."
msgstr "%s sık kullanılanlarınızdan çıkarıldı." msgstr "%s sık kullanılanlarınızdan çıkarıldı."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:813 #: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:819
#: ../js/ui/status/system.js:337 #: ../js/ui/status/system.js:337
msgid "Settings" msgid "Settings"
msgstr "Ayarlar" msgstr "Ayarlar"
@ -394,17 +395,24 @@ msgstr "Ayarlar"
msgid "Change Background…" msgid "Change Background…"
msgstr "Arkaplanı Değiştir…" msgstr "Arkaplanı Değiştir…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0"
#. (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:39
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events #. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters #. * Keep it short, best if you can use less then 10 characters
#. */ #. */
#: ../js/ui/calendar.js:67 #: ../js/ui/calendar.js:68
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Tüm Gün" msgstr "Tüm Gün"
#. Translators: Shown in calendar event list, if 24h format, #. Translators: Shown in calendar event list, if 24h format,
#. \u2236 is a ratio character, similar to : */ #. \u2236 is a ratio character, similar to : */
#: ../js/ui/calendar.js:73 #: ../js/ui/calendar.js:75
msgctxt "event list time" msgctxt "event list time"
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
@ -412,7 +420,7 @@ msgstr "%H%M"
#. Translators: Shown in calendar event list, if 12h format, #. Translators: Shown in calendar event list, if 12h format,
#. \u2236 is a ratio character, similar to : and \u2009 is #. \u2236 is a ratio character, similar to : and \u2009 is
#. a thin space */ #. a thin space */
#: ../js/ui/calendar.js:82 #: ../js/ui/calendar.js:84
msgctxt "event list time" msgctxt "event list time"
msgid "%l%M%p" msgid "%l%M%p"
msgstr "%l%M%p" msgstr "%l%M%p"
@ -422,43 +430,43 @@ msgstr "%l%M%p"
#. * NOTE: These grid abbreviations are always shown together #. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S". #. * and in order, e.g. "S M T W T F S".
#. */ #. */
#: ../js/ui/calendar.js:113 #: ../js/ui/calendar.js:98
msgctxt "grid sunday" msgctxt "grid sunday"
msgid "S" msgid "S"
msgstr "P" msgstr "P"
#. Translators: Calendar grid abbreviation for Monday */ #. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:115 #: ../js/ui/calendar.js:100
msgctxt "grid monday" msgctxt "grid monday"
msgid "M" msgid "M"
msgstr "P" msgstr "P"
#. Translators: Calendar grid abbreviation for Tuesday */ #. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:117 #: ../js/ui/calendar.js:102
msgctxt "grid tuesday" msgctxt "grid tuesday"
msgid "T" msgid "T"
msgstr "S" msgstr "S"
#. Translators: Calendar grid abbreviation for Wednesday */ #. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:119 #: ../js/ui/calendar.js:104
msgctxt "grid wednesday" msgctxt "grid wednesday"
msgid "W" msgid "W"
msgstr "Ç" msgstr "Ç"
#. Translators: Calendar grid abbreviation for Thursday */ #. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:121 #: ../js/ui/calendar.js:106
msgctxt "grid thursday" msgctxt "grid thursday"
msgid "T" msgid "T"
msgstr "P" msgstr "P"
#. Translators: Calendar grid abbreviation for Friday */ #. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:123 #: ../js/ui/calendar.js:108
msgctxt "grid friday" msgctxt "grid friday"
msgid "F" msgid "F"
msgstr "C" msgstr "C"
#. Translators: Calendar grid abbreviation for Saturday */ #. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:125 #: ../js/ui/calendar.js:110
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "C" msgstr "C"
@ -469,87 +477,83 @@ msgstr "C"
#. * so they need to be unique (e.g. Tuesday and Thursday cannot #. * so they need to be unique (e.g. Tuesday and Thursday cannot
#. * both be 'T'). #. * both be 'T').
#. */ #. */
#: ../js/ui/calendar.js:138 #: ../js/ui/calendar.js:123
msgctxt "list sunday" msgctxt "list sunday"
msgid "Su" msgid "Su"
msgstr "Pa" msgstr "Pa"
#. Translators: Event list abbreviation for Monday */ #. Translators: Event list abbreviation for Monday */
#: ../js/ui/calendar.js:140 #: ../js/ui/calendar.js:125
msgctxt "list monday" msgctxt "list monday"
msgid "M" msgid "M"
msgstr "Pz" msgstr "Pz"
#. Translators: Event list abbreviation for Tuesday */ #. Translators: Event list abbreviation for Tuesday */
#: ../js/ui/calendar.js:142 #: ../js/ui/calendar.js:127
msgctxt "list tuesday" msgctxt "list tuesday"
msgid "T" msgid "T"
msgstr "S" msgstr "S"
#. Translators: Event list abbreviation for Wednesday */ #. Translators: Event list abbreviation for Wednesday */
#: ../js/ui/calendar.js:144 #: ../js/ui/calendar.js:129
msgctxt "list wednesday" msgctxt "list wednesday"
msgid "W" msgid "W"
msgstr "Ç" msgstr "Ç"
#. Translators: Event list abbreviation for Thursday */ #. Translators: Event list abbreviation for Thursday */
#: ../js/ui/calendar.js:146 #: ../js/ui/calendar.js:131
msgctxt "list thursday" msgctxt "list thursday"
msgid "Th" msgid "Th"
msgstr "Pe" msgstr "Pe"
#. Translators: Event list abbreviation for Friday */ #. Translators: Event list abbreviation for Friday */
#: ../js/ui/calendar.js:148 #: ../js/ui/calendar.js:133
msgctxt "list friday" msgctxt "list friday"
msgid "F" msgid "F"
msgstr "C" msgstr "C"
#. Translators: Event list abbreviation for Saturday */ #. Translators: Event list abbreviation for Saturday */
#: ../js/ui/calendar.js:150 #: ../js/ui/calendar.js:135
msgctxt "list saturday" msgctxt "list saturday"
msgid "S" msgid "S"
msgstr "Ct" msgstr "Ct"
#: ../js/ui/calendar.js:453 #: ../js/ui/calendar.js:444
msgid "Previous month" msgid "Previous month"
msgstr "Önceki ay" msgstr "Önceki ay"
#: ../js/ui/calendar.js:463 #: ../js/ui/calendar.js:454
msgid "Next month" msgid "Next month"
msgstr "Gelecek ay" msgstr "Gelecek ay"
#. Translators: Text to show if there are no events */ #. Translators: Text to show if there are no events */
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:789
msgid "Nothing Scheduled" msgid "Nothing Scheduled"
msgstr "Planınız Boş" msgstr "Planınız Boş"
#. Translators: Shown on calendar heading when selected day occurs on current #: ../js/ui/calendar.js:808
#. year */
#: ../js/ui/calendar.js:799
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %d %B" msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on #: ../js/ui/calendar.js:812
#. different year */
#: ../js/ui/calendar.js:802
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d, %Y" msgid "%A, %B %d, %Y"
msgstr "%A, %d %B, %Y" msgstr "%A, %d %B, %Y"
#: ../js/ui/calendar.js:813 #: ../js/ui/calendar.js:824
msgid "Today" msgid "Today"
msgstr "Bugün" msgstr "Bugün"
#: ../js/ui/calendar.js:817 #: ../js/ui/calendar.js:828
msgid "Tomorrow" msgid "Tomorrow"
msgstr "Yarın" msgstr "Yarın"
#: ../js/ui/calendar.js:828 #: ../js/ui/calendar.js:839
msgid "This week" msgid "This week"
msgstr "Bu hafta" msgstr "Bu hafta"
#: ../js/ui/calendar.js:836 #: ../js/ui/calendar.js:847
msgid "Next week" msgid "Next week"
msgstr "Gelecek hafta" msgstr "Gelecek hafta"
@ -583,7 +587,7 @@ msgid "Type again:"
msgstr "Terkar yazın:" msgstr "Terkar yazın:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:918 #: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Bağlan" msgstr "Bağlan"
@ -675,103 +679,103 @@ msgstr "Doğrula"
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Üzgünüm ama işe yaramadı. Lütfen tekrar deneyin." msgstr "Üzgünüm ama işe yaramadı. Lütfen tekrar deneyin."
#: ../js/ui/components/telepathyClient.js:240 #: ../js/ui/components/telepathyClient.js:242
msgid "Invitation" msgid "Invitation"
msgstr "Davet" msgstr "Davet"
#: ../js/ui/components/telepathyClient.js:300 #: ../js/ui/components/telepathyClient.js:302
msgid "Call" msgid "Call"
msgstr "Çağrı" msgstr "Çağrı"
#: ../js/ui/components/telepathyClient.js:316 #: ../js/ui/components/telepathyClient.js:318
msgid "File Transfer" msgid "File Transfer"
msgstr "Dosya Aktarımı" msgstr "Dosya Aktarımı"
#: ../js/ui/components/telepathyClient.js:420 #: ../js/ui/components/telepathyClient.js:422
msgid "Chat" msgid "Chat"
msgstr "Sohbet" msgstr "Sohbet"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Unmute" msgid "Unmute"
msgstr "Sesi Aç" msgstr "Sesi Aç"
#: ../js/ui/components/telepathyClient.js:483 #: ../js/ui/components/telepathyClient.js:485
msgid "Mute" msgid "Mute"
msgstr "Sesi Kapat" msgstr "Sesi Kapat"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:953 #: ../js/ui/components/telepathyClient.js:955
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */ #. time string in 24h format. i.e. "Yesterday, 14:30" */
#: ../js/ui/components/telepathyClient.js:960 #: ../js/ui/components/telepathyClient.js:962
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Dün, %H%M" msgstr "Dün, %H%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */ #. string in 24h format. i.e. "Monday, 14:30" */
#: ../js/ui/components/telepathyClient.js:967 #: ../js/ui/components/telepathyClient.js:969
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */ #. i.e. "May 25, 14:30" */
#: ../js/ui/components/telepathyClient.js:974 #: ../js/ui/components/telepathyClient.js:976
msgid "%B %d, %H%M" msgid "%B %d, %H%M"
msgstr "%d %B, %H%M" msgstr "%d %B, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */ #. i.e. "May 25 2012, 14:30" */
#: ../js/ui/components/telepathyClient.js:980 #: ../js/ui/components/telepathyClient.js:982
msgid "%B %d %Y, %H%M" msgid "%B %d %Y, %H%M"
msgstr "%d %B %Y, %H%M" msgstr "%d %B %Y, %H%M"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format */
#: ../js/ui/components/telepathyClient.js:986 #: ../js/ui/components/telepathyClient.js:988
msgid "%l%M %p" msgid "%l%M %p"
msgstr "%l%M %p" msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */ #. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:993 #: ../js/ui/components/telepathyClient.js:995
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Dün, %l%M %p" msgstr "Dün, %l%M %p"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */ #. string in 12h format. i.e. "Monday, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1000 #: ../js/ui/components/telepathyClient.js:1002
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 12h format. #. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */ #. i.e. "May 25, 2:30 pm" */
#: ../js/ui/components/telepathyClient.js:1007 #: ../js/ui/components/telepathyClient.js:1009
msgid "%B %d, %l%M %p" msgid "%B %d, %l%M %p"
msgstr "%d %B, %l%M %p" msgstr "%d %B, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/ #. i.e. "May 25 2012, 2:30 pm"*/
#: ../js/ui/components/telepathyClient.js:1013 #: ../js/ui/components/telepathyClient.js:1015
msgid "%B %d %Y, %l%M %p" msgid "%B %d %Y, %l%M %p"
msgstr "%d %B %Y, %l%M %p" msgstr "%d %B %Y, %l%M %p"
#. Translators: this is the other person changing their old IM name to their #. Translators: this is the other person changing their old IM name to their
#. new #. new
#. IM name. */ #. IM name. */
#: ../js/ui/components/telepathyClient.js:1045 #: ../js/ui/components/telepathyClient.js:1047
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
msgstr "%s, şimdi %s olarak biliniyor" msgstr "%s, şimdi %s olarak biliniyor"
#. translators: argument is a room name like #. translators: argument is a room name like
#. * room@jabber.org for example. */ #. * room@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1149 #: ../js/ui/components/telepathyClient.js:1151
#, javascript-format #, javascript-format
msgid "Invitation to %s" msgid "Invitation to %s"
msgstr "%s'e Davet" msgstr "%s'e Davet"
@ -779,38 +783,38 @@ msgstr "%s'e Davet"
#. translators: first argument is the name of a contact and the second #. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org #. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example. */ #. * for example. */
#: ../js/ui/components/telepathyClient.js:1157 #: ../js/ui/components/telepathyClient.js:1159
#, javascript-format #, javascript-format
msgid "%s is inviting you to join %s" msgid "%s is inviting you to join %s"
msgstr "%s, sizi %s'e katılmanız için davet ediyor" msgstr "%s, sizi %s'e katılmanız için davet ediyor"
#: ../js/ui/components/telepathyClient.js:1159 #: ../js/ui/components/telepathyClient.js:1161
#: ../js/ui/components/telepathyClient.js:1194 #: ../js/ui/components/telepathyClient.js:1196
#: ../js/ui/components/telepathyClient.js:1228 #: ../js/ui/components/telepathyClient.js:1230
#: ../js/ui/components/telepathyClient.js:1286 #: ../js/ui/components/telepathyClient.js:1287
msgid "Decline" msgid "Decline"
msgstr "Reddet" msgstr "Reddet"
#: ../js/ui/components/telepathyClient.js:1165 #: ../js/ui/components/telepathyClient.js:1167
#: ../js/ui/components/telepathyClient.js:1234 #: ../js/ui/components/telepathyClient.js:1236
#: ../js/ui/components/telepathyClient.js:1291 #: ../js/ui/components/telepathyClient.js:1292
msgid "Accept" msgid "Accept"
msgstr "Kabul Et" msgstr "Kabul Et"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1184 #: ../js/ui/components/telepathyClient.js:1186
#, javascript-format #, javascript-format
msgid "Video call from %s" msgid "Video call from %s"
msgstr "%s'den görüntülü arama" msgstr "%s'den görüntülü arama"
#. translators: argument is a contact name like Alice for example. */ #. translators: argument is a contact name like Alice for example. */
#: ../js/ui/components/telepathyClient.js:1187 #: ../js/ui/components/telepathyClient.js:1189
#, javascript-format #, javascript-format
msgid "Call from %s" msgid "Call from %s"
msgstr "%s'den çağrı" msgstr "%s'den çağrı"
#. translators: this is a button label (verb), not a noun */ #. translators: this is a button label (verb), not a noun */
#: ../js/ui/components/telepathyClient.js:1201 #: ../js/ui/components/telepathyClient.js:1203
msgid "Answer" msgid "Answer"
msgstr "Cevapla" msgstr "Cevapla"
@ -819,129 +823,129 @@ msgstr "Cevapla"
#. * file name. The string will be something #. * file name. The string will be something
#. * like: "Alice is sending you test.ogg" #. * like: "Alice is sending you test.ogg"
#. */ #. */
#: ../js/ui/components/telepathyClient.js:1222 #: ../js/ui/components/telepathyClient.js:1224
#, javascript-format #, javascript-format
msgid "%s is sending you %s" msgid "%s is sending you %s"
msgstr "%s, size %s dosyasını gönderiyor" msgstr "%s, size %s dosyasını gönderiyor"
#. To translators: The parameter is the contact's alias */ #. To translators: The parameter is the contact's alias */
#: ../js/ui/components/telepathyClient.js:1251 #: ../js/ui/components/telepathyClient.js:1253
#, javascript-format #, javascript-format
msgid "%s would like permission to see when you are online" msgid "%s would like permission to see when you are online"
msgstr "%s, ne zaman çevrimiçi olduğunuzu görmek için izin istiyor" msgstr "%s, ne zaman çevrimiçi olduğunuzu görmek için izin istiyor"
#: ../js/ui/components/telepathyClient.js:1337 #: ../js/ui/components/telepathyClient.js:1338
msgid "Network error" msgid "Network error"
msgstr "Ağ hatası" msgstr "Ağ hatası"
#: ../js/ui/components/telepathyClient.js:1339 #: ../js/ui/components/telepathyClient.js:1340
msgid "Authentication failed" msgid "Authentication failed"
msgstr "Kimlik doğrulama başarısız" msgstr "Kimlik doğrulama başarısız"
#: ../js/ui/components/telepathyClient.js:1341 #: ../js/ui/components/telepathyClient.js:1342
msgid "Encryption error" msgid "Encryption error"
msgstr "Şifreleme hatası" msgstr "Şifreleme hatası"
#: ../js/ui/components/telepathyClient.js:1343 #: ../js/ui/components/telepathyClient.js:1344
msgid "Certificate not provided" msgid "Certificate not provided"
msgstr "Sertifika sağlanmamış" msgstr "Sertifika sağlanmamış"
#: ../js/ui/components/telepathyClient.js:1345 #: ../js/ui/components/telepathyClient.js:1346
msgid "Certificate untrusted" msgid "Certificate untrusted"
msgstr "Sertifika güvenilmez" msgstr "Sertifika güvenilmez"
#: ../js/ui/components/telepathyClient.js:1347 #: ../js/ui/components/telepathyClient.js:1348
msgid "Certificate expired" msgid "Certificate expired"
msgstr "Sertifikanın süresi dolmuş" msgstr "Sertifikanın süresi dolmuş"
#: ../js/ui/components/telepathyClient.js:1349 #: ../js/ui/components/telepathyClient.js:1350
msgid "Certificate not activated" msgid "Certificate not activated"
msgstr "Sertifika etkinleştirilmemiş" msgstr "Sertifika etkinleştirilmemiş"
#: ../js/ui/components/telepathyClient.js:1351 #: ../js/ui/components/telepathyClient.js:1352
msgid "Certificate hostname mismatch" msgid "Certificate hostname mismatch"
msgstr "Sertifikanın makine adı uyuşmuyor" msgstr "Sertifikanın makine adı uyuşmuyor"
#: ../js/ui/components/telepathyClient.js:1353 #: ../js/ui/components/telepathyClient.js:1354
msgid "Certificate fingerprint mismatch" msgid "Certificate fingerprint mismatch"
msgstr "Sertifikanın parmak izi uyuşmuyor" msgstr "Sertifikanın parmak izi uyuşmuyor"
#: ../js/ui/components/telepathyClient.js:1355 #: ../js/ui/components/telepathyClient.js:1356
msgid "Certificate self-signed" msgid "Certificate self-signed"
msgstr "Sertifika kendinden-imzalı" msgstr "Sertifika kendinden-imzalı"
#: ../js/ui/components/telepathyClient.js:1357 #: ../js/ui/components/telepathyClient.js:1358
msgid "Status is set to offline" msgid "Status is set to offline"
msgstr "Durum çevrimdıına ayarlı" msgstr "Durum çevrimdıına ayarlı"
#: ../js/ui/components/telepathyClient.js:1359 #: ../js/ui/components/telepathyClient.js:1360
msgid "Encryption is not available" msgid "Encryption is not available"
msgstr "Şifreleme kullanılabilir değil" msgstr "Şifreleme kullanılabilir değil"
#: ../js/ui/components/telepathyClient.js:1361 #: ../js/ui/components/telepathyClient.js:1362
msgid "Certificate is invalid" msgid "Certificate is invalid"
msgstr "Sertifika geçersiz" msgstr "Sertifika geçersiz"
#: ../js/ui/components/telepathyClient.js:1363 #: ../js/ui/components/telepathyClient.js:1364
msgid "Connection has been refused" msgid "Connection has been refused"
msgstr "Bağlantı reddedildi" msgstr "Bağlantı reddedildi"
#: ../js/ui/components/telepathyClient.js:1365 #: ../js/ui/components/telepathyClient.js:1366
msgid "Connection can't be established" msgid "Connection can't be established"
msgstr "Bağlantı kurulamıyor" msgstr "Bağlantı kurulamıyor"
#: ../js/ui/components/telepathyClient.js:1367 #: ../js/ui/components/telepathyClient.js:1368
msgid "Connection has been lost" msgid "Connection has been lost"
msgstr "Bağlantı koptu" msgstr "Bağlantı koptu"
#: ../js/ui/components/telepathyClient.js:1369 #: ../js/ui/components/telepathyClient.js:1370
msgid "This account is already connected to the server" msgid "This account is already connected to the server"
msgstr "Bu hesap zaten sunucuya bağlı" msgstr "Bu hesap zaten sunucuya bağlı"
#: ../js/ui/components/telepathyClient.js:1371 #: ../js/ui/components/telepathyClient.js:1372
msgid "" msgid ""
"Connection has been replaced by a new connection using the same resource" "Connection has been replaced by a new connection using the same resource"
msgstr "Bağlantı, aynı kaynağı kullanan yeni bir bağlantı ile değiştirildi" msgstr "Bağlantı, aynı kaynağı kullanan yeni bir bağlantı ile değiştirildi"
#: ../js/ui/components/telepathyClient.js:1373 #: ../js/ui/components/telepathyClient.js:1374
msgid "The account already exists on the server" msgid "The account already exists on the server"
msgstr "Sunucuda böyle bir hesap zaten var" msgstr "Sunucuda böyle bir hesap zaten var"
#: ../js/ui/components/telepathyClient.js:1375 #: ../js/ui/components/telepathyClient.js:1376
msgid "Server is currently too busy to handle the connection" msgid "Server is currently too busy to handle the connection"
msgstr "Sunucu, şu anda bağlantıyı işleyemeyecek kadar meşgul" msgstr "Sunucu, şu anda bağlantıyı işleyemeyecek kadar meşgul"
#: ../js/ui/components/telepathyClient.js:1377 #: ../js/ui/components/telepathyClient.js:1378
msgid "Certificate has been revoked" msgid "Certificate has been revoked"
msgstr "Sertifika hükümsüz kılınmış" msgstr "Sertifika hükümsüz kılınmış"
#: ../js/ui/components/telepathyClient.js:1379 #: ../js/ui/components/telepathyClient.js:1380
msgid "" msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak" "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "Sertifika güvensiz bir şifreleme algoritması kullanıyor ya da kriptografik olarak zayıf" msgstr "Sertifika güvensiz bir şifreleme algoritması kullanıyor ya da kriptografik olarak zayıf"
#: ../js/ui/components/telepathyClient.js:1381 #: ../js/ui/components/telepathyClient.js:1382
msgid "" msgid ""
"The length of the server certificate, or the depth of the server certificate" "The length of the server certificate, or the depth of the server certificate"
" chain, exceed the limits imposed by the cryptography library" " chain, exceed the limits imposed by the cryptography library"
msgstr "Sunucu sertifikasının uzunluğu ya da sunucu sertifikası zincirinin derinliği, şifreleme kütüphanesi tarafından koyulan sınırlarııyor" msgstr "Sunucu sertifikasının uzunluğu ya da sunucu sertifikası zincirinin derinliği, şifreleme kütüphanesi tarafından koyulan sınırlarııyor"
#: ../js/ui/components/telepathyClient.js:1383 #: ../js/ui/components/telepathyClient.js:1384
msgid "Internal error" msgid "Internal error"
msgstr "İç hata" msgstr "İç hata"
#. translators: argument is the account name, like #. translators: argument is the account name, like
#. * name@jabber.org for example. */ #. * name@jabber.org for example. */
#: ../js/ui/components/telepathyClient.js:1393 #: ../js/ui/components/telepathyClient.js:1394
#, javascript-format #, javascript-format
msgid "Unable to connect to %s" msgid "Unable to connect to %s"
msgstr "%s bağlantısı sağlanamadı" msgstr "%s bağlantısı sağlanamadı"
#: ../js/ui/components/telepathyClient.js:1398 #: ../js/ui/components/telepathyClient.js:1399
msgid "View account" msgid "View account"
msgstr "Hesabı göster" msgstr "Hesabı göster"
#: ../js/ui/components/telepathyClient.js:1435 #: ../js/ui/components/telepathyClient.js:1436
msgid "Unknown reason" msgid "Unknown reason"
msgstr "Bilinmeyen sebep" msgstr "Bilinmeyen sebep"
@ -957,15 +961,15 @@ msgstr "Uygulamaları Göster"
msgid "Dash" msgid "Dash"
msgstr "Konsol" msgstr "Konsol"
#: ../js/ui/dateMenu.js:96 #: ../js/ui/dateMenu.js:97
msgid "Open Calendar" msgid "Open Calendar"
msgstr "Takvimi Aç" msgstr "Takvimi Aç"
#: ../js/ui/dateMenu.js:100 #: ../js/ui/dateMenu.js:101
msgid "Open Clocks" msgid "Open Clocks"
msgstr "Saati Aç" msgstr "Saati Aç"
#: ../js/ui/dateMenu.js:107 #: ../js/ui/dateMenu.js:108
msgid "Date & Time Settings" msgid "Date & Time Settings"
msgstr "Tarih ve Saat Ayarları" msgstr "Tarih ve Saat Ayarları"
@ -973,9 +977,9 @@ msgstr "Tarih ve Saat Ayarları"
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 #. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29
#. AM"). #. AM").
#. */ #. */
#: ../js/ui/dateMenu.js:204 #: ../js/ui/dateMenu.js:132
msgid "%A %B %e, %Y" msgid "%A %B %e, %Y"
msgstr "%e %B %A, %Y" msgstr "%e %B %Y %A"
#: ../js/ui/endSessionDialog.js:64 #: ../js/ui/endSessionDialog.js:64
#, javascript-format #, javascript-format
@ -1108,7 +1112,7 @@ msgstr "Kur"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "extensions.gnome.org adresinden “%s” indirilip kurulsun mu?" msgstr "extensions.gnome.org adresinden “%s” indirilip kurulsun mu?"
#: ../js/ui/keyboard.js:692 ../js/ui/status/keyboard.js:523 #: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:539
msgid "Keyboard" msgid "Keyboard"
msgstr "Klavye" msgstr "Klavye"
@ -1164,53 +1168,54 @@ msgstr "Kaynağı Görüntüle"
msgid "Web Page" msgid "Web Page"
msgstr "Web Sayfası" msgstr "Web Sayfası"
#: ../js/ui/messageTray.js:1326 #: ../js/ui/messageTray.js:1332
msgid "Open" msgid "Open"
msgstr "Aç" msgstr "Aç"
#: ../js/ui/messageTray.js:1333 #: ../js/ui/messageTray.js:1339
msgid "Remove" msgid "Remove"
msgstr "Sil" msgstr "Sil"
#: ../js/ui/messageTray.js:1630 #: ../js/ui/messageTray.js:1636
msgid "Notifications" msgid "Notifications"
msgstr "Bildirimler" msgstr "Bildirimler"
#: ../js/ui/messageTray.js:1637 #: ../js/ui/messageTray.js:1643
msgid "Clear Messages" msgid "Clear Messages"
msgstr "Mesajları Temizle" msgstr "Mesajları Temizle"
#: ../js/ui/messageTray.js:1656 #: ../js/ui/messageTray.js:1662
msgid "Notification Settings" msgid "Notification Settings"
msgstr "Bildirim Ayarları" msgstr "Bildirim Ayarları"
#: ../js/ui/messageTray.js:1709 #: ../js/ui/messageTray.js:1715
msgid "Tray Menu" msgid "Tray Menu"
msgstr "Tepsi Menüsü" msgstr "Tepsi Menüsü"
#: ../js/ui/messageTray.js:1926 #: ../js/ui/messageTray.js:1939
msgid "No Messages" msgid "No Messages"
msgstr "Mesaj Yok" msgstr "Mesaj Yok"
#: ../js/ui/messageTray.js:1968 #: ../js/ui/messageTray.js:1984
msgid "Message Tray" msgid "Message Tray"
msgstr "Mesaj Tepsisi" msgstr "Mesaj Tepsisi"
#: ../js/ui/messageTray.js:2971 #: ../js/ui/messageTray.js:2441 ../js/ui/overviewControls.js:483
msgid "System Information" #: ../js/ui/screenShield.js:152
msgstr "Sistem Bilgisi"
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:425
msgctxt "program"
msgid "Unknown"
msgstr "Bilinmeyen"
#: ../js/ui/overviewControls.js:482 ../js/ui/screenShield.js:151
#, javascript-format #, javascript-format
msgid "%d new message" msgid "%d new message"
msgid_plural "%d new messages" msgid_plural "%d new messages"
msgstr[0] "%d yeni mesaj" msgstr[0] "%d yeni mesaj"
#: ../js/ui/messageTray.js:3011
msgid "System Information"
msgstr "Sistem Bilgisi"
#: ../js/ui/notificationDaemon.js:513 ../src/shell-app.c:439
msgctxt "program"
msgid "Unknown"
msgstr "Bilinmeyen"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "Geri Al" msgstr "Geri Al"
@ -1227,17 +1232,17 @@ msgstr "Genel Görünüm"
msgid "Type to search…" msgid "Type to search…"
msgstr "Aramak için buraya yazın..." msgstr "Aramak için buraya yazın..."
#: ../js/ui/panel.js:515 #: ../js/ui/panel.js:521
msgid "Quit" msgid "Quit"
msgstr "Kapat" msgstr "Kapat"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */ #. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:567 #: ../js/ui/panel.js:573
msgid "Activities" msgid "Activities"
msgstr "Etkinlikler" msgstr "Etkinlikler"
#: ../js/ui/panel.js:918 #: ../js/ui/panel.js:924
msgid "Top Bar" msgid "Top Bar"
msgstr "Tepe Çubuğu" msgstr "Tepe Çubuğu"
@ -1261,35 +1266,35 @@ msgstr "Yeniden başlatılıyor..."
#. long format */ #. long format */
#: ../js/ui/screenShield.js:88 #: ../js/ui/screenShield.js:88
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%d %B, %A" msgstr "%d %B %A"
#: ../js/ui/screenShield.js:153 #: ../js/ui/screenShield.js:154
#, javascript-format #, javascript-format
msgid "%d new notification" msgid "%d new notification"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "%d yeni bildirim" msgstr[0] "%d yeni bildirim"
#: ../js/ui/screenShield.js:472 ../js/ui/status/system.js:345 #: ../js/ui/screenShield.js:473 ../js/ui/status/system.js:345
msgid "Lock" msgid "Lock"
msgstr "Kilitle" msgstr "Kilitle"
#: ../js/ui/screenShield.js:706 #: ../js/ui/screenShield.js:709
msgid "GNOME needs to lock the screen" msgid "GNOME needs to lock the screen"
msgstr "GNOME'un ekranı kilitlemesi gerekiyor" msgstr "GNOME'un ekranı kilitlemesi gerekiyor"
#: ../js/ui/screenShield.js:833 ../js/ui/screenShield.js:1304 #: ../js/ui/screenShield.js:836 ../js/ui/screenShield.js:1312
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Kilitlenemedi" msgstr "Kilitlenemedi"
#: ../js/ui/screenShield.js:834 ../js/ui/screenShield.js:1305 #: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1313
msgid "Lock was blocked by an application" msgid "Lock was blocked by an application"
msgstr "Kilitleme bir uygulama tarafından engellendi" msgstr "Kilitleme bir uygulama tarafından engellendi"
#: ../js/ui/search.js:594 #: ../js/ui/search.js:611
msgid "Searching…" msgid "Searching…"
msgstr "Aranıyor…" msgstr "Aranıyor…"
#: ../js/ui/search.js:596 #: ../js/ui/search.js:613
msgid "No results." msgid "No results."
msgstr "Sonuç yok." msgstr "Sonuç yok."
@ -1366,9 +1371,9 @@ msgid "Bluetooth"
msgstr "Bluetooth" msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178 #: ../js/ui/status/bluetooth.js:51 ../js/ui/status/network.js:178
#: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:360 ../js/ui/status/network.js:1282
#: ../js/ui/status/network.js:1392 ../js/ui/status/rfkill.js:86 #: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91
#: ../js/ui/status/rfkill.js:114 #: ../js/ui/status/rfkill.js:118
msgid "Turn Off" msgid "Turn Off"
msgstr "Kapat" msgstr "Kapat"
@ -1382,7 +1387,7 @@ msgid "%d Connected Device"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected Devices"
msgstr[0] "%d Bağlı Cihaz" msgstr[0] "%d Bağlı Cihaz"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1309 #: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310
msgid "Not Connected" msgid "Not Connected"
msgstr "Bağlı Değil" msgstr "Bağlı Değil"
@ -1390,7 +1395,7 @@ msgstr "Bağlı Değil"
msgid "Brightness" msgid "Brightness"
msgstr "Parlaklık" msgstr "Parlaklık"
#: ../js/ui/status/keyboard.js:547 #: ../js/ui/status/keyboard.js:563
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Klavye Düzenini Göster" msgstr "Klavye Düzenini Göster"
@ -1418,8 +1423,8 @@ msgstr "Etkinleştir"
msgid "<unknown>" msgid "<unknown>"
msgstr "<bilinmeyen>" msgstr "<bilinmeyen>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1307 #: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308
#: ../js/ui/status/network.js:1511 #: ../js/ui/status/network.js:1512
msgid "Off" msgid "Off"
msgstr "Kapalı" msgstr "Kapalı"
@ -1438,7 +1443,7 @@ msgstr "Yönetilmeyen"
msgid "Disconnecting" msgid "Disconnecting"
msgstr "Bağlantı Kesiliyor" msgstr "Bağlantı Kesiliyor"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1301 #: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302
msgid "Connecting" msgid "Connecting"
msgstr "Bağlantı Kuruluyor" msgstr "Bağlantı Kuruluyor"
@ -1462,7 +1467,7 @@ msgstr "Ürün Bilgisi eksik"
msgid "Unavailable" msgid "Unavailable"
msgstr "Kullanılamaz" msgstr "Kullanılamaz"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1695 #: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696
msgid "Connection failed" msgid "Connection failed"
msgstr "Bağlantı başarısız oldu" msgstr "Bağlantı başarısız oldu"
@ -1474,7 +1479,7 @@ msgstr "Kablolu Ağ Ayarları"
msgid "Mobile Broadband Settings" msgid "Mobile Broadband Settings"
msgstr "Mobil Geniş Bant Ayarları" msgstr "Mobil Geniş Bant Ayarları"
#: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305 #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1306
msgid "Hardware Disabled" msgid "Hardware Disabled"
msgstr "Donanım Devre Dışı" msgstr "Donanım Devre Dışı"
@ -1514,61 +1519,61 @@ msgstr "Kablosuz Ağlar"
msgid "Select a network" msgid "Select a network"
msgstr "Bir ağ seçin" msgstr "Bir ağ seçin"
#: ../js/ui/status/network.js:882 #: ../js/ui/status/network.js:883
msgid "No Networks" msgid "No Networks"
msgstr "Ağ Yok" msgstr "Ağ Yok"
#: ../js/ui/status/network.js:903 ../js/ui/status/rfkill.js:112 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "Kapatmak için donanım anahtarını kullanın." msgstr "Kapatmak için donanım anahtarını kullanın."
#: ../js/ui/status/network.js:1173 #: ../js/ui/status/network.js:1174
msgid "Select Network" msgid "Select Network"
msgstr "Ağ Seç" msgstr "Ağ Seç"
#: ../js/ui/status/network.js:1179 #: ../js/ui/status/network.js:1180
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Kablosuz Ağ Ayarları" msgstr "Kablosuz Ağ Ayarları"
#: ../js/ui/status/network.js:1281 #: ../js/ui/status/network.js:1282
msgid "Turn On" msgid "Turn On"
msgstr "Aç" msgstr "Aç"
#: ../js/ui/status/network.js:1298 #: ../js/ui/status/network.js:1299
msgid "Hotspot Active" msgid "Hotspot Active"
msgstr "Hotspot Etkin" msgstr "Hotspot Etkin"
#: ../js/ui/status/network.js:1409 #: ../js/ui/status/network.js:1410
msgid "connecting..." msgid "connecting..."
msgstr "bağlanıyor..." msgstr "bağlanıyor..."
#. Translators: this is for network connections that require some kind of key #. Translators: this is for network connections that require some kind of key
#. or password */ #. or password */
#: ../js/ui/status/network.js:1412 #: ../js/ui/status/network.js:1413
msgid "authentication required" msgid "authentication required"
msgstr "kimlik doğrulaması gerekli" msgstr "kimlik doğrulaması gerekli"
#: ../js/ui/status/network.js:1414 #: ../js/ui/status/network.js:1415
msgid "connection failed" msgid "connection failed"
msgstr "bağlantı başarısız" msgstr "bağlantı başarısız"
#: ../js/ui/status/network.js:1480 ../js/ui/status/rfkill.js:89 #: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94
msgid "Network Settings" msgid "Network Settings"
msgstr "Ağ Ayarları" msgstr "Ağ Ayarları"
#: ../js/ui/status/network.js:1482 #: ../js/ui/status/network.js:1483
msgid "VPN Settings" msgid "VPN Settings"
msgstr "VPN Ayarları" msgstr "VPN Ayarları"
#: ../js/ui/status/network.js:1501 #: ../js/ui/status/network.js:1502
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1656 #: ../js/ui/status/network.js:1657
msgid "Network Manager" msgid "Network Manager"
msgstr "Ağ Yöneticisi" msgstr "Ağ Yöneticisi"
#: ../js/ui/status/network.js:1696 #: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Ağ bağlantısının etkinleştirilmesi başarısız oldu" msgstr "Ağ bağlantısının etkinleştirilmesi başarısız oldu"
@ -1602,11 +1607,11 @@ msgstr "UPS"
msgid "Battery" msgid "Battery"
msgstr "Pil" msgstr "Pil"
#: ../js/ui/status/rfkill.js:83 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode"
msgstr "Uçak Kipi" msgstr "Uçak Kipi"
#: ../js/ui/status/rfkill.js:85 #: ../js/ui/status/rfkill.js:90
msgid "On" msgid "On"
msgstr "Açık" msgstr "Açık"
@ -1764,7 +1769,7 @@ msgstr "Oturum açma için -\"gdm\" gibi- özel bir kip kullan"
msgid "List possible modes" msgid "List possible modes"
msgstr "Mevcut kipleri listele" msgstr "Mevcut kipleri listele"
#: ../src/shell-app.c:666 #: ../src/shell-app.c:680
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "“%s” başlatılamadı" msgstr "“%s” başlatılamadı"

1877
po/uz@cyrillic.po Normal file

File diff suppressed because it is too large Load Diff

2108
po/vi.po

File diff suppressed because it is too large Load Diff

View File

@ -51,6 +51,13 @@ gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
gnome-shell-perf-tool: gnome-shell-perf-tool.in Makefile gnome-shell-perf-tool: gnome-shell-perf-tool.in Makefile
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@ $(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
org-gtk-application.c org-gtk-application.h: org.gtk.Application.xml Makefile
$(AM_V_GEN) $(GDBUS_CODEGEN) \
--generate-c-code org-gtk-application \
--c-namespace Shell \
$<
EXTRA_DIST += org.gtk.Application.xml
CLEANFILES += gnome-shell $(bin_SCRIPTS) CLEANFILES += gnome-shell $(bin_SCRIPTS)
include Makefile-st.am include Makefile-st.am
@ -75,6 +82,8 @@ privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell
noinst_LTLIBRARIES += libgnome-shell-base.la noinst_LTLIBRARIES += libgnome-shell-base.la
shell_built_sources = \ shell_built_sources = \
org-gtk-application.h \
org-gtk-application.c \
shell-enum-types.h \ shell-enum-types.h \
shell-enum-types.c shell-enum-types.c
@ -90,7 +99,7 @@ shell_public_headers_h = \
shell-gtk-embed.h \ shell-gtk-embed.h \
shell-global.h \ shell-global.h \
shell-invert-lightness-effect.h \ shell-invert-lightness-effect.h \
shell-keybinding-modes.h \ shell-action-modes.h \
shell-mount-operation.h \ shell-mount-operation.h \
shell-perf-log.h \ shell-perf-log.h \
shell-screenshot.h \ shell-screenshot.h \
@ -178,8 +187,12 @@ libgnome_shell_built_sources = \
libgnome_shell_la_SOURCES = $(libgnome_shell_sources) libgnome_shell_la_SOURCES = $(libgnome_shell_sources)
nodist_libgnome_shell_la_SOURCES = $(libgnome_shell_built_sources) nodist_libgnome_shell_la_SOURCES = $(libgnome_shell_built_sources)
shell_no_gir_sources = \
org-gtk-application.h \
org-gtk-application.c
libgnome_shell_la_gir_sources = \ libgnome_shell_la_gir_sources = \
$(filter-out %-private.h $(shell_private_sources), $(shell_public_headers_h) $(libgnome_shell_base_la_SOURCES) $(libgnome_shell_sources) $(libgnome_shell_built_sources)) $(filter-out %-private.h $(shell_private_sources) $(shell_no_gir_sources), $(shell_public_headers_h) $(libgnome_shell_base_la_SOURCES) $(libgnome_shell_sources) $(libgnome_shell_built_sources))
gnome_shell_SOURCES = main.c gnome_shell_SOURCES = main.c
gnome_shell_CPPFLAGS = \ gnome_shell_CPPFLAGS = \

View File

@ -176,18 +176,54 @@ static void
calendar_sources_init (CalendarSources *sources) calendar_sources_init (CalendarSources *sources)
{ {
GError *error = NULL; GError *error = NULL;
GDBusConnection *session_bus;
GVariant *result;
sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources); sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
/* XXX Not sure what to do if this fails. /* WORKAROUND: the hardcoded timeout for e_source_registry_new_sync()
* Should this class implement GInitable or pass the (and other library calls that eventually call g_dbus_proxy_new[_sync]())
* registry in as a G_PARAM_CONSTRUCT_ONLY property? */ is 25 seconds. This has been shown to be too small for
sources->priv->registry = e_source_registry_new_sync (NULL, &error); evolution-source-registry in certain cases (slow disk, concurrent IO,
many configured sources), so we first ensure that the service
starts with a manual call and a higher timeout.
HACK: every time the DBus API is bumped in e-d-s we need
to update this!
*/
session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
if (session_bus == NULL)
{
g_error ("Failed to connect to the session bus: %s", error->message);
}
result = g_dbus_connection_call_sync (session_bus, "org.freedesktop.DBus",
"/", "org.freedesktop.DBus",
"StartServiceByName",
g_variant_new ("(su)",
"org.gnome.evolution.dataserver.Sources3",
0),
NULL,
G_DBUS_CALL_FLAGS_NONE,
60 * 1000,
NULL, &error);
if (result != NULL)
{
g_variant_unref (result);
sources->priv->registry = e_source_registry_new_sync (NULL, &error);
}
if (error != NULL) if (error != NULL)
{ {
g_error ("%s: %s", G_STRFUNC, error->message); /* Any error is fatal, but we don't want to crash gnome-shell-calendar-server
because of e-d-s problems. So just exit here.
*/
g_warning ("Failed to start evolution-source-registry: %s", error->message);
exit(EXIT_FAILURE);
} }
g_object_unref (session_bus);
sources->priv->source_added_id = g_signal_connect (sources->priv->registry, sources->priv->source_added_id = g_signal_connect (sources->priv->registry,
"source-added", "source-added",
G_CALLBACK (calendar_sources_registry_source_changed_cb), G_CALLBACK (calendar_sources_registry_source_changed_cb),

View File

@ -14,7 +14,7 @@ except ImportError:
try: try:
import simplejson as json import simplejson as json
except ImportError: except ImportError:
print 'The Python simplejson module is required' print('The Python simplejson module is required')
sys.exit(1) sys.exit(1)
from gi.repository import Gio from gi.repository import Gio
@ -88,36 +88,36 @@ function disable() {
} }
def create_extension(): def create_extension():
print print()
print '''Name should be a very short (ideally descriptive) string. print('''Name should be a very short (ideally descriptive) string.
Examples are: "Click To Focus", "Adblock", "Shell Window Shrinker". Examples are: "Click To Focus", "Adblock", "Shell Window Shrinker".
''' ''')
name = raw_input('Name: ').strip() name = input('Name: ').strip()
print print()
print '''Description is a single-sentence explanation of what your extension does. print('''Description is a single-sentence explanation of what your extension does.
Examples are: "Make windows visible on click", "Block advertisement popups" Examples are: "Make windows visible on click", "Block advertisement popups"
"Animate windows shrinking on minimize" "Animate windows shrinking on minimize"
''' ''')
description = raw_input('Description: ').strip() description = input('Description: ').strip()
underifier = re.compile('[^A-Za-z]') underifier = re.compile('[^A-Za-z]')
sample_uuid = underifier.sub('_', name) sample_uuid = underifier.sub('_', name)
# TODO use evolution data server # TODO use evolution data server
hostname = socket.gethostname() hostname = socket.gethostname()
sample_uuid = sample_uuid + '@' + hostname sample_uuid = sample_uuid + '@' + hostname
print print()
print '''Uuid is a globally-unique identifier for your extension. print('''Uuid is a globally-unique identifier for your extension.
This should be in the format of an email address (foo.bar@extensions.example.com), but This should be in the format of an email address (foo.bar@extensions.example.com), but
need not be an actual email address, though it's a good idea to base the uuid on your need not be an actual email address, though it's a good idea to base the uuid on your
email address. For example, if your email address is janedoe@example.com, you might email address. For example, if your email address is janedoe@example.com, you might
use an extension title clicktofocus@janedoe.example.com.''' use an extension title clicktofocus@janedoe.example.com.''')
uuid = raw_input('Uuid [%s]: ' % (sample_uuid, )).strip() uuid = input('Uuid [%s]: ' % (sample_uuid, )).strip()
if uuid == '': if uuid == '':
uuid = sample_uuid uuid = sample_uuid
extension_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'gnome-shell', 'extensions', uuid) extension_path = os.path.join(os.path.expanduser('~/.local'), 'share', 'gnome-shell', 'extensions', uuid)
if os.path.exists(extension_path): if os.path.exists(extension_path):
print "Extension path %r already exists" % (extension_path, ) print("Extension path %r already exists" % (extension_path, ))
sys.exit(0) sys.exit(0)
os.makedirs(extension_path) os.makedirs(extension_path)
meta = { 'name': name, meta = { 'name': name,
@ -132,13 +132,13 @@ use an extension title clicktofocus@janedoe.example.com.'''
f.write(json.write(meta) + '\n') f.write(json.write(meta) + '\n')
f.close() f.close()
for filename, contents in SAMPLE_EXTENSION_FILES.iteritems(): for filename, contents in SAMPLE_EXTENSION_FILES.items():
path = os.path.join(extension_path, filename) path = os.path.join(extension_path, filename)
f = open(path, 'w') f = open(path, 'w')
f.write(contents) f.write(contents)
f.close() f.close()
print "Created extension in %r" % (extension_path, ) print("Created extension in %r" % (extension_path, ))
extensionjs_path = os.path.join(extension_path, 'extension.js') extensionjs_path = os.path.join(extension_path, 'extension.js')
subprocess.Popen(['xdg-open', extensionjs_path]) subprocess.Popen(['xdg-open', extensionjs_path])
@ -149,19 +149,19 @@ def enable_extension(uuid):
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY) extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid in extensions: if uuid in extensions:
print >> sys.stderr, "%r is already enabled." % (uuid,) print("%r is already enabled." % (uuid,), file=sys.stderr)
sys.exit(1) sys.exit(1)
extensions.append(uuid) extensions.append(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions) settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
print >> sys.stderr, "%r is now enabled." % (uuid,) print("%r is now enabled." % (uuid,), file=sys.stderr)
def disable_extension(uuid): def disable_extension(uuid):
settings = Gio.Settings(schema='org.gnome.shell') settings = Gio.Settings(schema='org.gnome.shell')
extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY) extensions = settings.get_strv(ENABLED_EXTENSIONS_KEY)
if uuid not in extensions: if uuid not in extensions:
print >> sys.stderr, "%r is not enabled or installed." % (uuid,) print("%r is not enabled or installed." % (uuid,), file=sys.stderr)
sys.exit(1) sys.exit(1)
# Use a while loop here to remove *all* mentions instances # Use a while loop here to remove *all* mentions instances
@ -170,7 +170,7 @@ def disable_extension(uuid):
extensions.remove(uuid) extensions.remove(uuid)
settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions) settings.set_strv(ENABLED_EXTENSIONS_KEY, extensions)
print >> sys.stderr, "%r is now disabled." % (uuid,) print("%r is now disabled." % (uuid,), file=sys.stderr)
def main(): def main():
parser = optparse.OptionParser() parser = optparse.OptionParser()

View File

@ -14,15 +14,14 @@ import subprocess
import sys import sys
import tempfile import tempfile
import base64 import base64
from ConfigParser import RawConfigParser from configparser import RawConfigParser
import hashlib import hashlib
import hmac import hmac
import httplib from http import client
import urlparse from urllib import parse
import urllib
def show_version(option, opt_str, value, parser): def show_version(option, opt_str, value, parser):
print "GNOME Shell Performance Test @VERSION@" print("GNOME Shell Performance Test @VERSION@")
sys.exit() sys.exit()
def wait_for_dbus_name(wait_name): def wait_for_dbus_name(wait_name):
@ -41,7 +40,7 @@ def wait_for_dbus_name(wait_name):
None) None)
def on_timeout(): def on_timeout():
print "\nFailed to start %s: timed out" % (wait_name,) print("\nFailed to start %s: timed out" % (wait_name,))
sys.exit(1) sys.exit(1)
GLib.timeout_add_seconds(7, on_timeout) GLib.timeout_add_seconds(7, on_timeout)
@ -131,15 +130,15 @@ def upload_performance_report(report_text):
base_url = config.get('upload', 'url') base_url = config.get('upload', 'url')
system_name = config.get('upload', 'name') system_name = config.get('upload', 'name')
secret_key = config.get('upload', 'key') secret_key = config.get('upload', 'key')
except Exception, e: except Exception as e:
print "Can't read upload configuration from %s: %s" % (config_file, str(e)) print("Can't read upload configuration from %s: %s" % (config_file, str(e)))
sys.exit(1) sys.exit(1)
# Determine host, port and upload URL from provided data, we're # Determine host, port and upload URL from provided data, we're
# a bit extra-careful about normalization since the URL is part # a bit extra-careful about normalization since the URL is part
# of the signature. # of the signature.
split = urlparse.urlsplit(base_url) split = parse.urlsplit(base_url)
scheme = split[0].lower() scheme = split[0].lower()
netloc = split[1] netloc = split[1]
base_path = split[2] base_path = split[2]
@ -151,7 +150,7 @@ def upload_performance_report(report_text):
host, port = m.group(1), None host, port = m.group(1), None
if scheme != "http": if scheme != "http":
print "'%s' is not a HTTP URL" % base_url print("'%s' is not a HTTP URL" % base_url)
sys.exit(1) sys.exit(1)
if port is None: if port is None:
@ -166,7 +165,7 @@ def upload_performance_report(report_text):
normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path) normalized_base = "%s://%s:%d%s" % (scheme, host, port, base_path)
upload_url = normalized_base + '/system/%s/upload' % system_name upload_url = normalized_base + '/system/%s/upload' % system_name
upload_path = urlparse.urlsplit(upload_url)[2] # path portion upload_path = parse.urlsplit(upload_url)[2] # path portion
# Create signature based on upload URL and the report data # Create signature based on upload URL and the report data
@ -174,7 +173,7 @@ def upload_performance_report(report_text):
h = hmac.new(secret_key, digestmod=hashlib.sha1) h = hmac.new(secret_key, digestmod=hashlib.sha1)
h.update(signature_data) h.update(signature_data)
h.update(report_text) h.update(report_text)
signature = urllib.quote(base64.b64encode(h.digest()), "~") signature = parse.quote(base64.b64encode(h.digest()), "~")
headers = { headers = {
'User-Agent': 'gnome-shell-performance-tool/@VERSION@', 'User-Agent': 'gnome-shell-performance-tool/@VERSION@',
@ -182,15 +181,15 @@ def upload_performance_report(report_text):
'X-Shell-Signature': 'HMAC-SHA1 ' + signature 'X-Shell-Signature': 'HMAC-SHA1 ' + signature
}; };
connection = httplib.HTTPConnection(host, port) connection = client.HTTPConnection(host, port)
connection.request('POST', upload_path, report_text, headers) connection.request('POST', upload_path, report_text, headers)
response = connection.getresponse() response = connection.getresponse()
if response.status == 200: if response.status == 200:
print "Performance report upload succeeded" print("Performance report upload succeeded")
else: else:
print "Performance report upload failed with status %d" % response.status print("Performance report upload failed with status %d" % response.status)
print response.read() print(response.read())
def gnome_hwtest_log(*args): def gnome_hwtest_log(*args):
command = ['gnome-hwtest-log', '-t', 'gnome-shell-perf-tool'] command = ['gnome-hwtest-log', '-t', 'gnome-shell-perf-tool']
@ -207,7 +206,7 @@ def run_performance_test():
start_perf_helper() start_perf_helper()
for i in xrange(0, iters): for i in range(0, iters):
# We create an empty temporary file that the shell will overwrite # We create an empty temporary file that the shell will overwrite
# with the contents. # with the contents.
handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.") handle, output_file = tempfile.mkstemp(".json", "gnome-shell-perf.")
@ -306,12 +305,12 @@ def run_performance_test():
gnome_hwtest_log('--finished') gnome_hwtest_log('--finished')
else: else:
# Write a human readable summary # Write a human readable summary
print '------------------------------------------------------------'; print('------------------------------------------------------------')
for metric in sorted(metric_summaries.keys()): for metric in sorted(metric_summaries.keys()):
summary = metric_summaries[metric] summary = metric_summaries[metric]
print "#", summary['description'] print("#", summary['description'])
print metric, ", ".join((str(x) for x in summary['values'])) print(metric, ", ".join((str(x) for x in summary['values'])))
print '------------------------------------------------------------'; print('------------------------------------------------------------')
return True return True

View File

@ -0,0 +1,19 @@
<node>
<interface name='org.gtk.Application'>
<method name='Activate'>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='Open'>
<arg type='as' name='uris' direction='in'/>
<arg type='s' name='hint' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
</method>
<method name='CommandLine'>
<arg type='o' name='path' direction='in'/>
<arg type='aay' name='arguments' direction='in'/>
<arg type='a{sv}' name='platform_data' direction='in'/>
<arg type='i' name='exit_status' direction='out'/>
</method>
<property name='Busy' type='b' access='read'/>
</interface>
</node>

39
src/shell-action-modes.h Normal file
View File

@ -0,0 +1,39 @@
/**
* ShellActionMode:
* @SHELL_ACTION_MODE_NONE: block action
* @SHELL_ACTION_MODE_NORMAL: allow action when in window mode,
* e.g. when the focus is in an application window
* @SHELL_ACTION_MODE_OVERVIEW: allow action while the overview
* is active
* @SHELL_ACTION_MODE_LOCK_SCREEN: allow action when the screen
* is locked, e.g. when the screen shield is shown
* @SHELL_ACTION_MODE_UNLOCK_SCREEN: allow action in the unlock
* dialog
* @SHELL_ACTION_MODE_LOGIN_SCREEN: allow action in the login screen
* @SHELL_ACTION_MODE_MESSAGE_TRAY: allow action while the message
* tray is popped up
* @SHELL_ACTION_MODE_SYSTEM_MODAL: allow action when a system modal
* dialog (e.g. authentification or session dialogs) is open
* @SHELL_ACTION_MODE_LOOKING_GLASS: allow action in looking glass
* @SHELL_ACTION_MODE_TOPBAR_POPUP: allow action while a top bar menu
* is open
* @SHELL_ACTION_MODE_ALL: always allow action
*
* Controls in which GNOME Shell states an action (like keybindings and gestures)
* should be handled.
*/
typedef enum {
SHELL_ACTION_MODE_NONE = 0,
SHELL_ACTION_MODE_NORMAL = 1 << 0,
SHELL_ACTION_MODE_OVERVIEW = 1 << 1,
SHELL_ACTION_MODE_LOCK_SCREEN = 1 << 2,
SHELL_ACTION_MODE_UNLOCK_SCREEN = 1 << 3,
SHELL_ACTION_MODE_LOGIN_SCREEN = 1 << 4,
SHELL_ACTION_MODE_MESSAGE_TRAY = 1 << 5,
SHELL_ACTION_MODE_SYSTEM_MODAL = 1 << 6,
SHELL_ACTION_MODE_LOOKING_GLASS = 1 << 7,
SHELL_ACTION_MODE_TOPBAR_POPUP = 1 << 8,
SHELL_ACTION_MODE_ALL = ~0,
} ShellActionMode;

View File

@ -335,7 +335,6 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
switch (state) switch (state)
{ {
case SHELL_APP_STATE_RUNNING: case SHELL_APP_STATE_RUNNING:
case SHELL_APP_STATE_BUSY:
g_hash_table_insert (self->priv->running_apps, g_object_ref (app), NULL); g_hash_table_insert (self->priv->running_apps, g_object_ref (app), NULL);
break; break;
case SHELL_APP_STATE_STARTING: case SHELL_APP_STATE_STARTING:

View File

@ -16,6 +16,7 @@
#include "shell-window-tracker-private.h" #include "shell-window-tracker-private.h"
#include "st.h" #include "st.h"
#include "gtkactionmuxer.h" #include "gtkactionmuxer.h"
#include "org-gtk-application.h"
#ifdef HAVE_SYSTEMD #ifdef HAVE_SYSTEMD
#include <systemd/sd-journal.h> #include <systemd/sd-journal.h>
@ -47,14 +48,16 @@ typedef struct {
/* Whether or not we need to resort the windows; this is done on demand */ /* Whether or not we need to resort the windows; this is done on demand */
guint window_sort_stale : 1; guint window_sort_stale : 1;
/* DBus property notification subscription */
guint properties_changed_id : 1;
/* See GApplication documentation */ /* See GApplication documentation */
GDBusMenuModel *remote_menu; GDBusMenuModel *remote_menu;
GtkActionMuxer *muxer; GtkActionMuxer *muxer;
char *unique_bus_name; char *unique_bus_name;
GDBusConnection *session; GDBusConnection *session;
/* GDBus Proxy for getting application busy state */
ShellOrgGtkApplication *application_proxy;
GCancellable *cancellable;
} ShellAppRunningState; } ShellAppRunningState;
/** /**
@ -89,6 +92,7 @@ struct _ShellApp
enum { enum {
PROP_0, PROP_0,
PROP_STATE, PROP_STATE,
PROP_BUSY,
PROP_ID, PROP_ID,
PROP_DBUS_ID, PROP_DBUS_ID,
PROP_ACTION_GROUP, PROP_ACTION_GROUP,
@ -120,6 +124,9 @@ shell_app_get_property (GObject *gobject,
case PROP_STATE: case PROP_STATE:
g_value_set_enum (value, app->state); g_value_set_enum (value, app->state);
break; break;
case PROP_BUSY:
g_value_set_boolean (value, shell_app_get_busy (app));
break;
case PROP_ID: case PROP_ID:
g_value_set_string (value, shell_app_get_id (app)); g_value_set_string (value, shell_app_get_id (app));
break; break;
@ -202,27 +209,23 @@ shell_app_create_icon_texture (ShellApp *app,
int size) int size)
{ {
GIcon *icon; GIcon *icon;
gint scale;
ClutterActor *ret; ClutterActor *ret;
ShellGlobal *global;
StThemeContext *context;
global = shell_global_get ();
context = st_theme_context_get_for_stage (shell_global_get_stage (global));
g_object_get (context, "scale-factor", &scale, NULL);
ret = NULL;
if (app->info == NULL) if (app->info == NULL)
return window_backed_app_get_icon (app, size); return window_backed_app_get_icon (app, size);
ret = st_icon_new ();
st_icon_set_icon_size (ST_ICON (ret), size);
icon = g_app_info_get_icon (G_APP_INFO (app->info)); icon = g_app_info_get_icon (G_APP_INFO (app->info));
if (icon != NULL) if (icon != NULL)
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, size, scale); {
st_icon_set_gicon (ST_ICON (ret), icon);
if (ret == NULL) }
else
{ {
icon = g_themed_icon_new ("application-x-executable"); icon = g_themed_icon_new ("application-x-executable");
ret = st_texture_cache_load_gicon (st_texture_cache_get_default (), NULL, icon, size, scale); st_icon_set_gicon (ST_ICON (ret), icon);
g_object_unref (icon); g_object_unref (icon);
} }
@ -234,6 +237,7 @@ typedef struct {
int size; int size;
int scale; int scale;
ClutterTextDirection direction; ClutterTextDirection direction;
StThemeNode *theme_node;
} CreateFadedIconData; } CreateFadedIconData;
static CoglHandle static CoglHandle
@ -261,19 +265,28 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
guint8 *pixels; guint8 *pixels;
GIcon *icon; GIcon *icon;
GtkIconInfo *info; GtkIconInfo *info;
GtkIconLookupFlags lookup_flags;
StIconStyle icon_style;
app = data->app; app = data->app;
size = data->size; size = data->size;
scale = data->scale; scale = data->scale;
icon_style = st_theme_node_get_icon_style (data->theme_node);
info = NULL; info = NULL;
lookup_flags = GTK_ICON_LOOKUP_FORCE_SIZE;
if (icon_style == ST_ICON_STYLE_REGULAR)
lookup_flags |= GTK_ICON_LOOKUP_FORCE_REGULAR;
else if (icon_style == ST_ICON_STYLE_SYMBOLIC)
lookup_flags |= GTK_ICON_LOOKUP_FORCE_SYMBOLIC;
icon = g_app_info_get_icon (G_APP_INFO (app->info)); icon = g_app_info_get_icon (G_APP_INFO (app->info));
if (icon != NULL) if (icon != NULL)
{ {
info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (), info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (),
icon, size, scale, icon, size, scale,
GTK_ICON_LOOKUP_FORCE_SIZE); lookup_flags);
} }
if (info == NULL) if (info == NULL)
@ -281,7 +294,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
icon = g_themed_icon_new ("application-x-executable"); icon = g_themed_icon_new ("application-x-executable");
info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (), info = gtk_icon_theme_lookup_by_gicon_for_scale (gtk_icon_theme_get_default (),
icon, size, scale, icon, size, scale,
GTK_ICON_LOOKUP_FORCE_SIZE); lookup_flags);
g_object_unref (icon); g_object_unref (icon);
} }
@ -388,6 +401,7 @@ shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection directio
data.size = size; data.size = size;
data.scale = scale; data.scale = scale;
data.direction = direction; data.direction = direction;
data.theme_node = st_theme_context_get_root_node (context);
texture = st_texture_cache_load (st_texture_cache_get_default (), texture = st_texture_cache_load (st_texture_cache_get_default (),
cache_key, cache_key,
ST_TEXTURE_CACHE_POLICY_FOREVER, ST_TEXTURE_CACHE_POLICY_FOREVER,
@ -675,7 +689,6 @@ shell_app_activate_full (ShellApp *app,
case SHELL_APP_STATE_STARTING: case SHELL_APP_STATE_STARTING:
break; break;
case SHELL_APP_STATE_RUNNING: case SHELL_APP_STATE_RUNNING:
case SHELL_APP_STATE_BUSY:
shell_app_activate_window (app, NULL, timestamp); shell_app_activate_window (app, NULL, timestamp);
break; break;
} }
@ -1057,38 +1070,55 @@ shell_app_on_ws_switch (MetaScreen *screen,
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0); g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
} }
gboolean
shell_app_get_busy (ShellApp *app)
{
if (app->running_state != NULL &&
app->running_state->application_proxy != NULL &&
shell_org_gtk_application_get_busy (app->running_state->application_proxy))
return TRUE;
return FALSE;
}
static void static void
application_properties_changed (GDBusConnection *connection, busy_changed_cb (GObject *object,
const gchar *sender_name, GParamSpec *pspec,
const gchar *object_path, gpointer user_data)
const gchar *interface_name,
const gchar *signal_name,
GVariant *parameters,
gpointer user_data)
{ {
ShellApp *app = user_data; ShellApp *app = user_data;
GVariant *changed_properties;
gboolean busy = FALSE;
const gchar *interface_name_for_signal;
g_variant_get (parameters, g_assert (SHELL_IS_APP (app));
"(&s@a{sv}as)",
&interface_name_for_signal,
&changed_properties,
NULL);
if (g_strcmp0 (interface_name_for_signal, "org.gtk.Application") != 0) g_object_notify (G_OBJECT (app), "busy");
return; }
g_variant_lookup (changed_properties, "Busy", "b", &busy); static void
get_application_proxy (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
ShellApp *app = user_data;
ShellOrgGtkApplication *proxy;
if (busy) g_assert (SHELL_IS_APP (app));
shell_app_state_transition (app, SHELL_APP_STATE_BUSY);
else
shell_app_state_transition (app, SHELL_APP_STATE_RUNNING);
if (changed_properties != NULL) proxy = shell_org_gtk_application_proxy_new_finish (result, NULL);
g_variant_unref (changed_properties); if (proxy != NULL)
{
app->running_state->application_proxy = proxy;
g_signal_connect (proxy,
"notify::busy",
G_CALLBACK (busy_changed_cb),
app);
if (shell_org_gtk_application_get_busy (proxy))
g_object_notify (G_OBJECT (app), "busy");
}
if (app->running_state != NULL)
g_clear_object (&app->running_state->cancellable);
g_object_unref (app);
} }
static void static void
@ -1098,7 +1128,8 @@ shell_app_ensure_busy_watch (ShellApp *app)
MetaWindow *window; MetaWindow *window;
const gchar *object_path; const gchar *object_path;
if (running_state->properties_changed_id != 0) if (running_state->application_proxy != NULL ||
running_state->cancellable != NULL)
return; return;
if (running_state->unique_bus_name == NULL) if (running_state->unique_bus_name == NULL)
@ -1110,15 +1141,16 @@ shell_app_ensure_busy_watch (ShellApp *app)
if (object_path == NULL) if (object_path == NULL)
return; return;
running_state->properties_changed_id = running_state->cancellable = g_cancellable_new();
g_dbus_connection_signal_subscribe (running_state->session, /* Take a reference to app to make sure it isn't finalized before
running_state->unique_bus_name, get_application_proxy runs */
"org.freedesktop.DBus.Properties", shell_org_gtk_application_proxy_new (running_state->session,
"PropertiesChanged", G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
object_path, running_state->unique_bus_name,
"org.gtk.Application", object_path,
G_DBUS_SIGNAL_FLAGS_NONE, running_state->cancellable,
application_properties_changed, app, NULL); get_application_proxy,
g_object_ref (app));
} }
void void
@ -1461,8 +1493,13 @@ unref_running_state (ShellAppRunningState *state)
screen = shell_global_get_screen (shell_global_get ()); screen = shell_global_get_screen (shell_global_get ());
g_signal_handler_disconnect (screen, state->workspace_switch_id); g_signal_handler_disconnect (screen, state->workspace_switch_id);
if (state->properties_changed_id != 0) g_clear_object (&state->application_proxy);
g_dbus_connection_signal_unsubscribe (state->session, state->properties_changed_id);
if (state->cancellable != NULL)
{
g_cancellable_cancel (state->cancellable);
g_clear_object (&state->cancellable);
}
g_clear_object (&state->remote_menu); g_clear_object (&state->remote_menu);
g_clear_object (&state->muxer); g_clear_object (&state->muxer);
@ -1555,6 +1592,19 @@ shell_app_class_init(ShellAppClass *klass)
SHELL_APP_STATE_STOPPED, SHELL_APP_STATE_STOPPED,
G_PARAM_READABLE)); G_PARAM_READABLE));
/**
* ShellApp:busy:
*
* Whether the application has marked itself as busy.
*/
g_object_class_install_property (gobject_class,
PROP_BUSY,
g_param_spec_boolean ("busy",
"Busy",
"Busy state",
FALSE,
G_PARAM_READABLE));
/** /**
* ShellApp:id: * ShellApp:id:
* *

View File

@ -30,8 +30,7 @@ struct _ShellAppClass
typedef enum { typedef enum {
SHELL_APP_STATE_STOPPED, SHELL_APP_STATE_STOPPED,
SHELL_APP_STATE_STARTING, SHELL_APP_STATE_STARTING,
SHELL_APP_STATE_RUNNING, SHELL_APP_STATE_RUNNING
SHELL_APP_STATE_BUSY
} ShellAppState; } ShellAppState;
GType shell_app_get_type (void) G_GNUC_CONST; GType shell_app_get_type (void) G_GNUC_CONST;
@ -87,6 +86,8 @@ int shell_app_compare (ShellApp *app, ShellApp *other);
void shell_app_update_window_actions (ShellApp *app, MetaWindow *window); void shell_app_update_window_actions (ShellApp *app, MetaWindow *window);
void shell_app_update_app_menu (ShellApp *app, MetaWindow *window); void shell_app_update_app_menu (ShellApp *app, MetaWindow *window);
gboolean shell_app_get_busy (ShellApp *app);
G_END_DECLS G_END_DECLS
#endif /* __SHELL_APP_H__ */ #endif /* __SHELL_APP_H__ */

View File

@ -1132,14 +1132,6 @@ shell_global_end_modal (ShellGlobal *global,
sync_input_region (global); sync_input_region (global);
} }
void
shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp)
{
if (global->stage_xwindow != None)
meta_display_freeze_keyboard (global->meta_display, global->stage_xwindow, timestamp);
}
/* Code to close all file descriptors before we exec; copied from gspawn.c in GLib. /* Code to close all file descriptors before we exec; copied from gspawn.c in GLib.
* *
* Authors: Padraig O'Briain, Matthias Clasen, Lennart Poettering * Authors: Padraig O'Briain, Matthias Clasen, Lennart Poettering

View File

@ -45,8 +45,6 @@ gboolean shell_global_begin_modal (ShellGlobal *global,
MetaModalOptions options); MetaModalOptions options);
void shell_global_end_modal (ShellGlobal *global, void shell_global_end_modal (ShellGlobal *global,
guint32 timestamp); guint32 timestamp);
void shell_global_freeze_keyboard (ShellGlobal *global,
guint32 timestamp);
void shell_global_set_stage_input_region (ShellGlobal *global, void shell_global_set_stage_input_region (ShellGlobal *global,
GSList *rectangles); GSList *rectangles);

View File

@ -106,9 +106,6 @@ shell_gtk_embed_window_created_cb (MetaDisplay *display,
0, 0 /* offset x/y */); 0, 0 /* offset x/y */);
cairo_region_destroy (empty_region); cairo_region_destroy (empty_region);
/* Set the actor as unreative so Clutter doesn't pick it, either */
clutter_actor_set_reactive (window_actor, FALSE);
gdk_window_lower (gdk_window); gdk_window_lower (gdk_window);
/* Now that we've found the window we don't need to listen for /* Now that we've found the window we don't need to listen for

View File

@ -1,38 +0,0 @@
/**
* ShellKeyBindingMode:
* @SHELL_KEYBINDING_MODE_NONE: block keybinding
* @SHELL_KEYBINDING_MODE_NORMAL: allow keybinding when in window mode,
* e.g. when the focus is in an application window
* @SHELL_KEYBINDING_MODE_OVERVIEW: allow keybinding while the overview
* is active
* @SHELL_KEYBINDING_MODE_LOCK_SCREEN: allow keybinding when the screen
* is locked, e.g. when the screen shield is shown
* @SHELL_KEYBINDING_MODE_UNLOCK_SCREEN: allow keybinding in the unlock
* dialog
* @SHELL_KEYBINDING_MODE_LOGIN_SCREEN: allow keybinding in the login screen
* @SHELL_KEYBINDING_MODE_MESSAGE_TRAY: allow keybinding while the message
* tray is popped up
* @SHELL_KEYBINDING_MODE_SYSTEM_MODAL: allow keybinding when a system modal
* dialog (e.g. authentification or session dialogs) is open
* @SHELL_KEYBINDING_MODE_LOOKING_GLASS: allow keybinding in looking glass
* @SHELL_KEYBINDING_MODE_TOPBAR_POPUP: allow keybinding while a top bar menu
* is open
* @SHELL_KEYBINDING_MODE_ALL: always allow keybinding
*
* Controls in which GNOME Shell states a keybinding should be handled.
*/
typedef enum {
SHELL_KEYBINDING_MODE_NONE = 0,
SHELL_KEYBINDING_MODE_NORMAL = 1 << 0,
SHELL_KEYBINDING_MODE_OVERVIEW = 1 << 1,
SHELL_KEYBINDING_MODE_LOCK_SCREEN = 1 << 2,
SHELL_KEYBINDING_MODE_UNLOCK_SCREEN = 1 << 3,
SHELL_KEYBINDING_MODE_LOGIN_SCREEN = 1 << 4,
SHELL_KEYBINDING_MODE_MESSAGE_TRAY = 1 << 5,
SHELL_KEYBINDING_MODE_SYSTEM_MODAL = 1 << 6,
SHELL_KEYBINDING_MODE_LOOKING_GLASS = 1 << 7,
SHELL_KEYBINDING_MODE_TOPBAR_POPUP = 1 << 8,
SHELL_KEYBINDING_MODE_ALL = ~0,
} ShellKeyBindingMode;

View File

@ -12,6 +12,7 @@
#include <gdk/gdkx.h> #include <gdk/gdkx.h>
#include <X11/extensions/XTest.h> #include <X11/extensions/XTest.h>
#include <locale.h>
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY #ifdef HAVE__NL_TIME_FIRST_WEEKDAY
#include <langinfo.h> #include <langinfo.h>
#endif #endif
@ -208,6 +209,32 @@ shell_util_get_week_start ()
return week_start; return week_start;
} }
/**
* shell_util_translate_time_string:
* @str: String to translate
*
* Translate @str according to the locale defined by LC_TIME; unlike
* dcgettext(), the translations is still taken from the LC_MESSAGES
* catalogue and not the LC_TIME one.
*
* Returns: the translated string
*/
const char *
shell_util_translate_time_string (const char *str)
{
const char *locale = g_getenv ("LC_TIME");
const char *res;
if (locale)
setlocale (LC_MESSAGES, locale);
res = gettext (str);
setlocale (LC_MESSAGES, "");
return res;
}
/** /**
* shell_write_string_to_stream: * shell_write_string_to_stream:
* @stream: a #GOutputStream * @stream: a #GOutputStream

View File

@ -21,6 +21,7 @@ int shell_util_get_week_start (void);
char *shell_util_format_date (const char *format, char *shell_util_format_date (const char *format,
gint64 time_ms); gint64 time_ms);
const char *shell_util_translate_time_string (const char *str);
gboolean shell_write_string_to_stream (GOutputStream *stream, gboolean shell_write_string_to_stream (GOutputStream *stream,
const char *str, const char *str,

View File

@ -27,7 +27,7 @@
struct _StBorderImage { struct _StBorderImage {
GObject parent; GObject parent;
char *filename; GFile *file;
int border_top; int border_top;
int border_right; int border_right;
int border_bottom; int border_bottom;
@ -48,7 +48,7 @@ st_border_image_finalize (GObject *object)
{ {
StBorderImage *image = ST_BORDER_IMAGE (object); StBorderImage *image = ST_BORDER_IMAGE (object);
g_free (image->filename); g_object_unref (image->file);
G_OBJECT_CLASS (st_border_image_parent_class)->finalize (object); G_OBJECT_CLASS (st_border_image_parent_class)->finalize (object);
} }
@ -67,18 +67,18 @@ st_border_image_init (StBorderImage *image)
} }
StBorderImage * StBorderImage *
st_border_image_new (const char *filename, st_border_image_new (GFile *file,
int border_top, int border_top,
int border_right, int border_right,
int border_bottom, int border_bottom,
int border_left, int border_left,
int scale_factor) int scale_factor)
{ {
StBorderImage *image; StBorderImage *image;
image = g_object_new (ST_TYPE_BORDER_IMAGE, NULL); image = g_object_new (ST_TYPE_BORDER_IMAGE, NULL);
image->filename = g_strdup (filename); image->file = g_object_ref (file);
image->border_top = border_top; image->border_top = border_top;
image->border_right = border_right; image->border_right = border_right;
image->border_bottom = border_bottom; image->border_bottom = border_bottom;
@ -88,12 +88,18 @@ st_border_image_new (const char *filename,
return image; return image;
} }
const char * /**
st_border_image_get_filename (StBorderImage *image) * st_border_image_get_file:
* @image: a #StBorder_Image
*
* Returns: (transfer none): the #GFile for the #StBorder_Image
*/
GFile *
st_border_image_get_file (StBorderImage *image)
{ {
g_return_val_if_fail (ST_IS_BORDER_IMAGE (image), NULL); g_return_val_if_fail (ST_IS_BORDER_IMAGE (image), NULL);
return image->filename; return image->file;
} }
void void
@ -135,5 +141,5 @@ st_border_image_equal (StBorderImage *image,
image->border_right == other->border_right && image->border_right == other->border_right &&
image->border_bottom == other->border_bottom && image->border_bottom == other->border_bottom &&
image->border_left == other->border_left && image->border_left == other->border_left &&
strcmp (image->filename, other->filename) == 0); g_file_equal (image->file, other->file));
} }

View File

@ -22,6 +22,7 @@
#define __ST_BORDER_IMAGE_H__ #define __ST_BORDER_IMAGE_H__
#include <glib-object.h> #include <glib-object.h>
#include <gio/gio.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -39,14 +40,14 @@ typedef struct _StBorderImageClass StBorderImageClass;
GType st_border_image_get_type (void) G_GNUC_CONST; GType st_border_image_get_type (void) G_GNUC_CONST;
StBorderImage *st_border_image_new (const char *filename, StBorderImage *st_border_image_new (GFile *file,
int border_top, int border_top,
int border_right, int border_right,
int border_bottom, int border_bottom,
int border_left, int border_left,
int scale_factor); int scale_factor);
const char *st_border_image_get_filename (StBorderImage *image); GFile *st_border_image_get_file (StBorderImage *image);
void st_border_image_get_borders (StBorderImage *image, void st_border_image_get_borders (StBorderImage *image,
int *border_top, int *border_top,
int *border_right, int *border_right,

View File

@ -267,7 +267,8 @@ st_button_key_press (ClutterActor *actor,
{ {
if (event->keyval == CLUTTER_KEY_space || if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return || event->keyval == CLUTTER_KEY_Return ||
event->keyval == CLUTTER_KEY_KP_Enter) event->keyval == CLUTTER_KEY_KP_Enter ||
event->keyval == CLUTTER_KEY_ISO_Enter)
{ {
st_button_press (button, NULL, ST_BUTTON_ONE, NULL); st_button_press (button, NULL, ST_BUTTON_ONE, NULL);
return TRUE; return TRUE;
@ -287,7 +288,8 @@ st_button_key_release (ClutterActor *actor,
{ {
if (event->keyval == CLUTTER_KEY_space || if (event->keyval == CLUTTER_KEY_space ||
event->keyval == CLUTTER_KEY_Return || event->keyval == CLUTTER_KEY_Return ||
event->keyval == CLUTTER_KEY_KP_Enter) event->keyval == CLUTTER_KEY_KP_Enter ||
event->keyval == CLUTTER_KEY_ISO_Enter)
{ {
gboolean is_click; gboolean is_click;

View File

@ -373,6 +373,7 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
break; break;
case GTK_POLICY_ALWAYS: case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC: case GTK_POLICY_AUTOMATIC:
case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min width of the hscrollbar, /* Should theoretically use the min width of the hscrollbar,
* but that's not cleanly defined at the moment */ * but that's not cleanly defined at the moment */
min_width = 0; min_width = 0;
@ -382,6 +383,7 @@ st_scroll_view_get_preferred_width (ClutterActor *actor,
switch (priv->vscrollbar_policy) switch (priv->vscrollbar_policy)
{ {
case GTK_POLICY_NEVER: case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
account_for_vscrollbar = FALSE; account_for_vscrollbar = FALSE;
break; break;
case GTK_POLICY_ALWAYS: case GTK_POLICY_ALWAYS:
@ -443,6 +445,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->vscrollbar_policy) switch (priv->vscrollbar_policy)
{ {
case GTK_POLICY_NEVER: case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
break; break;
case GTK_POLICY_ALWAYS: case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC: case GTK_POLICY_AUTOMATIC:
@ -454,6 +457,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
switch (priv->hscrollbar_policy) switch (priv->hscrollbar_policy)
{ {
case GTK_POLICY_NEVER: case GTK_POLICY_NEVER:
case GTK_POLICY_EXTERNAL:
account_for_hscrollbar = FALSE; account_for_hscrollbar = FALSE;
break; break;
case GTK_POLICY_ALWAYS: case GTK_POLICY_ALWAYS:
@ -480,6 +484,7 @@ st_scroll_view_get_preferred_height (ClutterActor *actor,
break; break;
case GTK_POLICY_ALWAYS: case GTK_POLICY_ALWAYS:
case GTK_POLICY_AUTOMATIC: case GTK_POLICY_AUTOMATIC:
case GTK_POLICY_EXTERNAL:
/* Should theoretically use the min height of the vscrollbar, /* Should theoretically use the min height of the vscrollbar,
* but that's not cleanly defined at the moment */ * but that's not cleanly defined at the moment */
min_height = 0; min_height = 0;
@ -567,7 +572,7 @@ st_scroll_view_allocate (ClutterActor *actor,
} }
else else
{ {
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER; hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
/* try without a vertical scrollbar */ /* try without a vertical scrollbar */
clutter_actor_get_preferred_height (priv->child, avail_width, &child_min_height, NULL); clutter_actor_get_preferred_height (priv->child, avail_width, &child_min_height, NULL);
@ -576,18 +581,20 @@ st_scroll_view_allocate (ClutterActor *actor,
} }
else else
{ {
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER; vscrollbar_visible = priv->vscrollbar_policy == GTK_POLICY_ALWAYS;
if (priv->hscrollbar_policy == GTK_POLICY_AUTOMATIC) if (priv->hscrollbar_policy == GTK_POLICY_AUTOMATIC)
hscrollbar_visible = child_min_width > avail_height - (vscrollbar_visible ? 0 : sb_width); hscrollbar_visible = child_min_width > avail_height - (vscrollbar_visible ? 0 : sb_width);
else else
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER; hscrollbar_visible = priv->hscrollbar_policy == GTK_POLICY_ALWAYS;
} }
} }
else else
{ {
hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER; hscrollbar_visible = priv->hscrollbar_policy != GTK_POLICY_NEVER &&
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER; priv->hscrollbar_policy != GTK_POLICY_EXTERNAL;
vscrollbar_visible = priv->vscrollbar_policy != GTK_POLICY_NEVER &&
priv->vscrollbar_policy != GTK_POLICY_EXTERNAL;
} }
/* Whether or not we show the scrollbars, if the scrollbars are visible /* Whether or not we show the scrollbars, if the scrollbars are visible
@ -629,15 +636,19 @@ st_scroll_view_allocate (ClutterActor *actor,
clutter_actor_allocate (priv->hscroll, &child_box, flags); clutter_actor_allocate (priv->hscroll, &child_box, flags);
/* In case the scrollbar policy is NEVER or scrollbars should be /* In case the scrollbar policy is NEVER or EXTERNAL or scrollbars
* overlayed, we don't trim the content box allocation by the * should be overlayed, we don't trim the content box allocation by
* scrollbar size. * the scrollbar size.
* Fold this into the scrollbar sizes to simplify the rest of the * Fold this into the scrollbar sizes to simplify the rest of the
* computations. * computations.
*/ */
if (priv->hscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars) if (priv->hscrollbar_policy == GTK_POLICY_NEVER ||
priv->hscrollbar_policy == GTK_POLICY_EXTERNAL ||
priv->overlay_scrollbars)
sb_height = 0; sb_height = 0;
if (priv->vscrollbar_policy == GTK_POLICY_NEVER || priv->overlay_scrollbars) if (priv->vscrollbar_policy == GTK_POLICY_NEVER ||
priv->vscrollbar_policy == GTK_POLICY_EXTERNAL ||
priv->overlay_scrollbars)
sb_width = 0; sb_width = 0;
/* Child */ /* Child */

View File

@ -28,8 +28,8 @@
#include <glib.h> #include <glib.h>
#define CACHE_PREFIX_ICON "icon:" #define CACHE_PREFIX_ICON "icon:"
#define CACHE_PREFIX_URI "uri:" #define CACHE_PREFIX_FILE "file:"
#define CACHE_PREFIX_URI_FOR_CAIRO "uri-for-cairo:" #define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:"
struct _StTextureCachePrivate struct _StTextureCachePrivate
{ {
@ -101,7 +101,7 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_SIGNAL_RUN_LAST, G_SIGNAL_RUN_LAST,
0, /* no default handler slot */ 0, /* no default handler slot */
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_STRING); G_TYPE_NONE, 1, G_TYPE_FILE);
} }
/* Evicts all cached textures for named icons */ /* Evicts all cached textures for named icons */
@ -147,7 +147,7 @@ st_texture_cache_init (StTextureCache *self)
g_free, cogl_object_unref); g_free, cogl_object_unref);
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal, self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL); g_free, NULL);
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal, self->priv->file_monitors = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
g_object_unref, g_object_unref); g_object_unref, g_object_unref);
} }
@ -268,7 +268,7 @@ typedef struct {
GtkIconInfo *icon_info; GtkIconInfo *icon_info;
StIconColors *colors; StIconColors *colors;
char *uri; GFile *file;
} AsyncTextureLoadData; } AsyncTextureLoadData;
static void static void
@ -282,8 +282,8 @@ texture_load_data_free (gpointer p)
if (data->colors) if (data->colors)
st_icon_colors_unref (data->colors); st_icon_colors_unref (data->colors);
} }
else if (data->uri) else if (data->file)
g_free (data->uri); g_object_unref (data->file);
if (data->key) if (data->key)
g_free (data->key); g_free (data->key);
@ -405,83 +405,17 @@ out:
return rotated_pixbuf; return rotated_pixbuf;
} }
static GdkPixbuf*
decode_image (const char *val)
{
int i;
GError *error = NULL;
GdkPixbuf *res = NULL;
struct {
const char *prefix;
const char *mime_type;
} formats[] = {
{ "data:image/x-icon;base64,", "image/x-icon" },
{ "data:image/png;base64,", "image/png" }
};
g_return_val_if_fail (val, NULL);
for (i = 0; i < G_N_ELEMENTS (formats); i++)
{
if (g_str_has_prefix (val, formats[i].prefix))
{
gsize len;
guchar *data = NULL;
char *unescaped;
unescaped = g_uri_unescape_string (val + strlen (formats[i].prefix), NULL);
if (unescaped)
{
data = g_base64_decode (unescaped, &len);
g_free (unescaped);
}
if (data)
{
GdkPixbufLoader *loader;
loader = gdk_pixbuf_loader_new_with_mime_type (formats[i].mime_type, &error);
if (loader &&
gdk_pixbuf_loader_write (loader, data, len, &error) &&
gdk_pixbuf_loader_close (loader, &error))
{
res = gdk_pixbuf_loader_get_pixbuf (loader);
g_object_ref (res);
}
g_object_unref (loader);
g_free (data);
}
}
}
if (!res)
{
if (error)
{
g_warning ("%s\n", error->message);
g_error_free (error);
}
else
g_warning ("incorrect data uri");
}
return res;
}
static GdkPixbuf * static GdkPixbuf *
impl_load_pixbuf_file (const char *uri, impl_load_pixbuf_file (GFile *file,
int available_width, int available_width,
int available_height, int available_height,
int scale, int scale,
GError **error) GError **error)
{ {
GdkPixbuf *pixbuf = NULL; GdkPixbuf *pixbuf = NULL;
GFile *file;
char *contents = NULL; char *contents = NULL;
gsize size; gsize size;
if (g_str_has_prefix (uri, "data:"))
return decode_image (uri);
file = g_file_new_for_uri (uri);
if (g_file_load_contents (file, NULL, &contents, &size, NULL, error)) if (g_file_load_contents (file, NULL, &contents, &size, NULL, error))
{ {
pixbuf = impl_load_pixbuf_data ((const guchar *) contents, size, pixbuf = impl_load_pixbuf_data ((const guchar *) contents, size,
@ -490,7 +424,6 @@ impl_load_pixbuf_file (const char *uri,
error); error);
} }
g_object_unref (file);
g_free (contents); g_free (contents);
return pixbuf; return pixbuf;
@ -507,9 +440,9 @@ load_pixbuf_thread (GSimpleAsyncResult *result,
data = g_async_result_get_user_data (G_ASYNC_RESULT (result)); data = g_async_result_get_user_data (G_ASYNC_RESULT (result));
g_assert (data != NULL); g_assert (data != NULL);
g_assert (data->uri != NULL); g_assert (data->file != NULL);
pixbuf = impl_load_pixbuf_file (data->uri, data->width, data->height, data->scale, &error); pixbuf = impl_load_pixbuf_file (data->file, data->width, data->height, data->scale, &error);
if (error != NULL) if (error != NULL)
{ {
@ -647,7 +580,7 @@ static void
load_texture_async (StTextureCache *cache, load_texture_async (StTextureCache *cache,
AsyncTextureLoadData *data) AsyncTextureLoadData *data)
{ {
if (data->uri) if (data->file)
{ {
GSimpleAsyncResult *result; GSimpleAsyncResult *result;
result = g_simple_async_result_new (G_OBJECT (cache), on_pixbuf_loaded, data, load_texture_async); result = g_simple_async_result_new (G_OBJECT (cache), on_pixbuf_loaded, data, load_texture_async);
@ -879,12 +812,27 @@ ensure_request (StTextureCache *cache,
return had_pending; return had_pending;
} }
static ClutterActor * /**
load_gicon_with_colors (StTextureCache *cache, * st_texture_cache_load_gicon:
GIcon *icon, * @cache: The texture cache instance
gint size, * @theme_node: (nullable): The #StThemeNode to use for colors, or NULL
gint scale, * if the icon must not be recolored
StIconColors *colors) * @icon: the #GIcon to load
* @size: Size of themed
* @scale: Scale factor of display
*
* This method returns a new #ClutterActor for a given #GIcon. If the
* icon isn't loaded already, the texture will be filled
* asynchronously.
*
* Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found
*/
ClutterActor *
st_texture_cache_load_gicon (StTextureCache *cache,
StThemeNode *theme_node,
GIcon *icon,
gint size,
gint scale)
{ {
AsyncTextureLoadData *request; AsyncTextureLoadData *request;
ClutterActor *texture; ClutterActor *texture;
@ -893,13 +841,26 @@ load_gicon_with_colors (StTextureCache *cache,
GtkIconTheme *theme; GtkIconTheme *theme;
GtkIconInfo *info; GtkIconInfo *info;
StTextureCachePolicy policy; StTextureCachePolicy policy;
StIconColors *colors = NULL;
StIconStyle icon_style = ST_ICON_STYLE_REQUESTED;
GtkIconLookupFlags lookup_flags; GtkIconLookupFlags lookup_flags;
if (theme_node)
{
colors = st_theme_node_get_icon_colors (theme_node);
icon_style = st_theme_node_get_icon_style (theme_node);
}
/* Do theme lookups in the main thread to avoid thread-unsafety */ /* Do theme lookups in the main thread to avoid thread-unsafety */
theme = cache->priv->icon_theme; theme = cache->priv->icon_theme;
lookup_flags = GTK_ICON_LOOKUP_USE_BUILTIN; lookup_flags = GTK_ICON_LOOKUP_USE_BUILTIN;
if (icon_style == ST_ICON_STYLE_REGULAR)
lookup_flags |= GTK_ICON_LOOKUP_FORCE_REGULAR;
else if (icon_style == ST_ICON_STYLE_SYMBOLIC)
lookup_flags |= GTK_ICON_LOOKUP_FORCE_SYMBOLIC;
if (clutter_get_default_text_direction () == CLUTTER_TEXT_DIRECTION_RTL) if (clutter_get_default_text_direction () == CLUTTER_TEXT_DIRECTION_RTL)
lookup_flags |= GTK_ICON_LOOKUP_DIR_RTL; lookup_flags |= GTK_ICON_LOOKUP_DIR_RTL;
else else
@ -919,8 +880,8 @@ load_gicon_with_colors (StTextureCache *cache,
if (colors) if (colors)
{ {
/* This raises some doubts about the practice of using string keys */ /* This raises some doubts about the practice of using string keys */
key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,scale=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x", key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,scale=%d,style=%d,colors=%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x,%2x%2x%2x%2x",
gicon_string, size, scale, gicon_string, size, scale, icon_style,
colors->foreground.red, colors->foreground.blue, colors->foreground.green, colors->foreground.alpha, colors->foreground.red, colors->foreground.blue, colors->foreground.green, colors->foreground.alpha,
colors->warning.red, colors->warning.blue, colors->warning.green, colors->warning.alpha, colors->warning.red, colors->warning.blue, colors->warning.green, colors->warning.alpha,
colors->error.red, colors->error.blue, colors->error.green, colors->error.alpha, colors->error.red, colors->error.blue, colors->error.green, colors->error.alpha,
@ -928,8 +889,8 @@ load_gicon_with_colors (StTextureCache *cache,
} }
else else
{ {
key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,scale=%d", key = g_strdup_printf (CACHE_PREFIX_ICON "%s,size=%d,scale=%d,style=%d",
gicon_string, size, scale); gicon_string, size, scale, icon_style);
} }
g_free (gicon_string); g_free (gicon_string);
@ -961,31 +922,6 @@ load_gicon_with_colors (StTextureCache *cache,
return CLUTTER_ACTOR (texture); return CLUTTER_ACTOR (texture);
} }
/**
* st_texture_cache_load_gicon:
* @cache: The texture cache instance
* @theme_node: (nullable): The #StThemeNode to use for colors, or NULL
* if the icon must not be recolored
* @icon: the #GIcon to load
* @size: Size of themed
* @scale: Scale factor of display
*
* This method returns a new #ClutterActor for a given #GIcon. If the
* icon isn't loaded already, the texture will be filled
* asynchronously.
*
* Return Value: (transfer none): A new #ClutterActor for the icon, or %NULL if not found
*/
ClutterActor *
st_texture_cache_load_gicon (StTextureCache *cache,
StThemeNode *theme_node,
GIcon *icon,
gint size,
gint scale)
{
return load_gicon_with_colors (cache, icon, size, scale, theme_node ? st_theme_node_get_icon_colors (theme_node) : NULL);
}
static ClutterActor * static ClutterActor *
load_from_pixbuf (GdkPixbuf *pixbuf) load_from_pixbuf (GdkPixbuf *pixbuf)
{ {
@ -1014,46 +950,43 @@ file_changed_cb (GFileMonitor *monitor,
gpointer user_data) gpointer user_data)
{ {
StTextureCache *cache = user_data; StTextureCache *cache = user_data;
char *uri, *key; char *key;
guint file_hash;
if (event_type != G_FILE_MONITOR_EVENT_CHANGED) if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
return; return;
uri = g_file_get_uri (file); file_hash = g_file_hash (file);
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL); key = g_strdup_printf (CACHE_PREFIX_FILE "%u", file_hash);
g_hash_table_remove (cache->priv->keyed_cache, key); g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key); g_free (key);
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL); key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", file_hash);
g_hash_table_remove (cache->priv->keyed_cache, key); g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key); g_free (key);
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, uri); g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, file);
g_free (uri);
} }
static void static void
ensure_monitor_for_uri (StTextureCache *cache, ensure_monitor_for_file (StTextureCache *cache,
const gchar *uri) GFile *file)
{ {
StTextureCachePrivate *priv = cache->priv; StTextureCachePrivate *priv = cache->priv;
GFile *file = g_file_new_for_uri (uri);
if (g_hash_table_lookup (priv->file_monitors, uri) == NULL) if (g_hash_table_lookup (priv->file_monitors, file) == NULL)
{ {
GFileMonitor *monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, GFileMonitor *monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE,
NULL, NULL); NULL, NULL);
g_signal_connect (monitor, "changed", g_signal_connect (monitor, "changed",
G_CALLBACK (file_changed_cb), cache); G_CALLBACK (file_changed_cb), cache);
g_hash_table_insert (priv->file_monitors, g_strdup (uri), monitor); g_hash_table_insert (priv->file_monitors, g_object_ref (file), monitor);
} }
g_object_unref (file);
} }
typedef struct { typedef struct {
gchar *path; GFile *gfile;
gint grid_width, grid_height; gint grid_width, grid_height;
gint scale_factor; gint scale_factor;
ClutterActor *actor; ClutterActor *actor;
@ -1065,7 +998,7 @@ static void
on_data_destroy (gpointer data) on_data_destroy (gpointer data)
{ {
AsyncImageData *d = (AsyncImageData *)data; AsyncImageData *d = (AsyncImageData *)data;
g_free (d->path); g_object_unref (d->gfile);
g_object_unref (d->actor); g_object_unref (d->actor);
g_free (d); g_free (d);
} }
@ -1138,7 +1071,7 @@ load_sliced_image (GSimpleAsyncResult *result,
loader = gdk_pixbuf_loader_new (); loader = gdk_pixbuf_loader_new ();
g_signal_connect (loader, "size-prepared", G_CALLBACK (on_loader_size_prepared), data); g_signal_connect (loader, "size-prepared", G_CALLBACK (on_loader_size_prepared), data);
if (!g_file_get_contents (data->path, &buffer, &length, NULL)) if (!g_file_load_contents (data->gfile, NULL, &buffer, &length, NULL, NULL))
goto out; goto out;
if (!gdk_pixbuf_loader_write (loader, (const guchar *) buffer, length, NULL)) if (!gdk_pixbuf_loader_write (loader, (const guchar *) buffer, length, NULL))
@ -1173,7 +1106,7 @@ load_sliced_image (GSimpleAsyncResult *result,
/** /**
* st_texture_cache_load_sliced_image: * st_texture_cache_load_sliced_image:
* @cache: A #StTextureCache * @cache: A #StTextureCache
* @path: Path to a filename * @file: A #GFile
* @grid_width: Width in pixels * @grid_width: Width in pixels
* @grid_height: Height in pixels * @grid_height: Height in pixels
* @scale: Scale factor of the display * @scale: Scale factor of the display
@ -1189,7 +1122,7 @@ load_sliced_image (GSimpleAsyncResult *result,
*/ */
ClutterActor * ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache, st_texture_cache_load_sliced_image (StTextureCache *cache,
const gchar *path, GFile *file,
gint grid_width, gint grid_width,
gint grid_height, gint grid_height,
gint scale, gint scale,
@ -1204,7 +1137,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
data->grid_width = grid_width; data->grid_width = grid_width;
data->grid_height = grid_height; data->grid_height = grid_height;
data->scale_factor = scale; data->scale_factor = scale;
data->path = g_strdup (path); data->gfile = g_object_ref (file);
data->actor = actor; data->actor = actor;
data->load_callback = load_callback; data->load_callback = load_callback;
data->load_callback_data = user_data; data->load_callback_data = user_data;
@ -1221,9 +1154,9 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
} }
/** /**
* st_texture_cache_load_uri_async: * st_texture_cache_load_file_async:
* @cache: The texture cache instance * @cache: The texture cache instance
* @uri: uri of the image file from which to create a pixbuf * @file: a #GFile of the image file from which to create a pixbuf
* @available_width: available width for the image, can be -1 if not limited * @available_width: available width for the image, can be -1 if not limited
* @available_height: available height for the image, can be -1 if not limited * @available_height: available height for the image, can be -1 if not limited
* @scale: scale factor of the display * @scale: scale factor of the display
@ -1235,18 +1168,18 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
* Return value: (transfer none): A new #ClutterActor with no image loaded initially. * Return value: (transfer none): A new #ClutterActor with no image loaded initially.
*/ */
ClutterActor * ClutterActor *
st_texture_cache_load_uri_async (StTextureCache *cache, st_texture_cache_load_file_async (StTextureCache *cache,
const gchar *uri, GFile *file,
int available_width, int available_width,
int available_height, int available_height,
int scale) int scale)
{ {
ClutterActor *texture; ClutterActor *texture;
AsyncTextureLoadData *request; AsyncTextureLoadData *request;
StTextureCachePolicy policy; StTextureCachePolicy policy;
gchar *key; gchar *key;
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL); key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file));
policy = ST_TEXTURE_CACHE_POLICY_NONE; /* XXX */ policy = ST_TEXTURE_CACHE_POLICY_NONE; /* XXX */
@ -1264,7 +1197,7 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
request->cache = cache; request->cache = cache;
/* Transfer ownership of key */ /* Transfer ownership of key */
request->key = key; request->key = key;
request->uri = g_strdup (uri); request->file = g_object_ref (file);
request->policy = policy; request->policy = policy;
request->width = available_width; request->width = available_width;
request->height = available_height; request->height = available_height;
@ -1273,31 +1206,31 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
load_texture_async (cache, request); load_texture_async (cache, request);
} }
ensure_monitor_for_uri (cache, uri); ensure_monitor_for_file (cache, file);
return CLUTTER_ACTOR (texture); return CLUTTER_ACTOR (texture);
} }
static CoglTexture * static CoglTexture *
st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache, st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
StTextureCachePolicy policy, StTextureCachePolicy policy,
const gchar *uri, GFile *file,
int available_width, int available_width,
int available_height, int available_height,
int scale, int scale,
GError **error) GError **error)
{ {
CoglTexture *texdata; CoglTexture *texdata;
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
char *key; char *key;
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL); key = g_strdup_printf (CACHE_PREFIX_FILE "%u", g_file_hash (file));
texdata = g_hash_table_lookup (cache->priv->keyed_cache, key); texdata = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (texdata == NULL) if (texdata == NULL)
{ {
pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, scale, error); pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error);
if (!pixbuf) if (!pixbuf)
goto out; goto out;
@ -1313,7 +1246,7 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
else else
cogl_object_ref (texdata); cogl_object_ref (texdata);
ensure_monitor_for_uri (cache, uri); ensure_monitor_for_file (cache, file);
out: out:
g_free (key); g_free (key);
@ -1321,25 +1254,25 @@ out:
} }
static cairo_surface_t * static cairo_surface_t *
st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache, st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
StTextureCachePolicy policy, StTextureCachePolicy policy,
const gchar *uri, GFile *file,
int available_width, int available_width,
int available_height, int available_height,
int scale, int scale,
GError **error) GError **error)
{ {
cairo_surface_t *surface; cairo_surface_t *surface;
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
char *key; char *key;
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL); key = g_strdup_printf (CACHE_PREFIX_FILE_FOR_CAIRO "%u", g_file_hash (file));
surface = g_hash_table_lookup (cache->priv->keyed_cache, key); surface = g_hash_table_lookup (cache->priv->keyed_cache, key);
if (surface == NULL) if (surface == NULL)
{ {
pixbuf = impl_load_pixbuf_file (uri, available_width, available_height, scale, error); pixbuf = impl_load_pixbuf_file (file, available_width, available_height, scale, error);
if (!pixbuf) if (!pixbuf)
goto out; goto out;
@ -1355,7 +1288,7 @@ st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
else else
cairo_surface_reference (surface); cairo_surface_reference (surface);
ensure_monitor_for_uri (cache, uri); ensure_monitor_for_file (cache, file);
out: out:
g_free (key); g_free (key);
@ -1365,7 +1298,7 @@ out:
/** /**
* st_texture_cache_load_file_to_cogl_texture: (skip) * st_texture_cache_load_file_to_cogl_texture: (skip)
* @cache: A #StTextureCache * @cache: A #StTextureCache
* @file_path: Path to a file in supported image format * @file: A #GFile in supported image format
* @scale: Scale factor of the display * @scale: Scale factor of the display
* *
* This function synchronously loads the given file path * This function synchronously loads the given file path
@ -1376,35 +1309,30 @@ out:
*/ */
CoglTexture * CoglTexture *
st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache, st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path, GFile *file,
gint scale) gint scale)
{ {
CoglTexture *texture; CoglTexture *texture;
GFile *file;
char *uri;
GError *error = NULL; GError *error = NULL;
file = g_file_new_for_path (file_path); texture = st_texture_cache_load_file_sync_to_cogl_texture (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri = g_file_get_uri (file); file, -1, -1, scale, &error);
texture = st_texture_cache_load_uri_sync_to_cogl_texture (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri, -1, -1, scale, &error);
g_object_unref (file);
g_free (uri);
if (texture == NULL) if (texture == NULL)
{ {
g_warning ("Failed to load %s: %s", file_path, error->message); char *uri = g_file_get_uri (file);
g_warning ("Failed to load %s: %s", uri, error->message);
g_clear_error (&error); g_clear_error (&error);
return NULL; g_free (uri);
} }
return texture; return texture;
} }
/** /**
* st_texture_cache_load_file_to_cairo_surface: * st_texture_cache_load_file_to_cairo_surface:
* @cache: A #StTextureCache * @cache: A #StTextureCache
* @file_path: Path to a file in supported image format * @file: A #GFile in supported image format
* @scale: Scale factor of the display * @scale: Scale factor of the display
* *
* This function synchronously loads the given file path * This function synchronously loads the given file path
@ -1415,28 +1343,23 @@ st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
*/ */
cairo_surface_t * cairo_surface_t *
st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache, st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
const gchar *file_path, GFile *file,
gint scale) gint scale)
{ {
cairo_surface_t *surface; cairo_surface_t *surface;
GFile *file;
char *uri;
GError *error = NULL; GError *error = NULL;
file = g_file_new_for_path (file_path); surface = st_texture_cache_load_file_sync_to_cairo_surface (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri = g_file_get_uri (file); file, -1, -1, scale, &error);
surface = st_texture_cache_load_uri_sync_to_cairo_surface (cache, ST_TEXTURE_CACHE_POLICY_FOREVER,
uri, -1, -1, scale, &error);
g_object_unref (file);
g_free (uri);
if (surface == NULL) if (surface == NULL)
{ {
g_warning ("Failed to load %s: %s", file_path, error->message); char *uri = g_file_get_uri (file);
g_warning ("Failed to load %s: %s", uri, error->message);
g_clear_error (&error); g_clear_error (&error);
return NULL; g_free (uri);
} }
return surface; return surface;
} }

View File

@ -70,7 +70,7 @@ StTextureCache* st_texture_cache_get_default (void);
ClutterActor * ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache, st_texture_cache_load_sliced_image (StTextureCache *cache,
const gchar *path, GFile *file,
gint grid_width, gint grid_width,
gint grid_height, gint grid_height,
gint scale, gint scale,
@ -87,18 +87,18 @@ ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
gint size, gint size,
gint scale); gint scale);
ClutterActor *st_texture_cache_load_uri_async (StTextureCache *cache, ClutterActor *st_texture_cache_load_file_async (StTextureCache *cache,
const gchar *uri, GFile *file,
int available_width, int available_width,
int available_height, int available_height,
int scale); int scale);
CoglTexture *st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache, CoglTexture *st_texture_cache_load_file_to_cogl_texture (StTextureCache *cache,
const gchar *file_path, GFile *file,
gint scale); gint scale);
cairo_surface_t *st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache, cairo_surface_t *st_texture_cache_load_file_to_cairo_surface (StTextureCache *cache,
const gchar *file_path, GFile *file,
gint scale); gint scale);
/** /**

View File

@ -600,7 +600,7 @@ create_cairo_pattern_of_background_image (StThemeNode *node,
cairo_pattern_t *pattern; cairo_pattern_t *pattern;
cairo_content_t content; cairo_content_t content;
cairo_matrix_t matrix; cairo_matrix_t matrix;
const char *file; GFile *file;
StTextureCache *texture_cache; StTextureCache *texture_cache;
@ -1037,7 +1037,7 @@ st_theme_node_prerender_background (StThemeNode *node,
} }
else else
{ {
const char *background_image; GFile *background_image;
background_image = st_theme_node_get_background_image (node); background_image = st_theme_node_get_background_image (node);
@ -1303,14 +1303,14 @@ st_theme_node_load_border_image (StThemeNode *node)
if (border_image == NULL) if (border_image == NULL)
goto out; goto out;
const char *filename; GFile *file;
filename = st_border_image_get_filename (border_image); file = st_border_image_get_file (border_image);
int scale_factor; int scale_factor;
g_object_get (node->context, "scale-factor", &scale_factor, NULL); g_object_get (node->context, "scale-factor", &scale_factor, NULL);
node->border_slices_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (), node->border_slices_texture = st_texture_cache_load_file_to_cogl_texture (st_texture_cache_get_default (),
filename, scale_factor); file, scale_factor);
if (node->border_slices_texture == COGL_INVALID_HANDLE) if (node->border_slices_texture == COGL_INVALID_HANDLE)
goto out; goto out;
@ -1348,7 +1348,7 @@ st_theme_node_load_background_image (StThemeNode *node)
{ {
if (node->background_texture == COGL_INVALID_HANDLE) if (node->background_texture == COGL_INVALID_HANDLE)
{ {
const char *background_image; GFile *background_image;
StShadow *background_image_shadow_spec; StShadow *background_image_shadow_spec;
background_image = st_theme_node_get_background_image (node); background_image = st_theme_node_get_background_image (node);

View File

@ -25,6 +25,7 @@
#include <gdk/gdk.h> #include <gdk/gdk.h>
#include "st-theme-node.h" #include "st-theme-node.h"
#include <libcroco/libcroco.h>
#include "st-types.h" #include "st-types.h"
G_BEGIN_DECLS G_BEGIN_DECLS
@ -58,6 +59,7 @@ struct _StThemeNode {
int border_radius[4]; int border_radius[4];
int outline_width; int outline_width;
guint padding[4]; guint padding[4];
guint margin[4];
int width; int width;
int height; int height;
@ -68,7 +70,7 @@ struct _StThemeNode {
int transition_duration; int transition_duration;
char *background_image; GFile *background_image;
StBorderImage *border_image; StBorderImage *border_image;
StShadow *box_shadow; StShadow *box_shadow;
StShadow *background_image_shadow; StShadow *background_image_shadow;
@ -90,6 +92,8 @@ struct _StThemeNode {
guint background_position_set : 1; guint background_position_set : 1;
guint background_repeat : 1; guint background_repeat : 1;
gboolean margin_set : 4;
guint properties_computed : 1; guint properties_computed : 1;
guint geometry_computed : 1; guint geometry_computed : 1;
guint background_computed : 1; guint background_computed : 1;
@ -121,6 +125,8 @@ struct _StThemeNodeClass {
void _st_theme_node_ensure_background (StThemeNode *node); void _st_theme_node_ensure_background (StThemeNode *node);
void _st_theme_node_ensure_geometry (StThemeNode *node); void _st_theme_node_ensure_geometry (StThemeNode *node);
void _st_theme_node_apply_margins (StThemeNode *node,
ClutterActor *actor);
G_END_DECLS G_END_DECLS

View File

@ -158,7 +158,10 @@ st_theme_node_finalize (GObject *object)
} }
if (node->background_image) if (node->background_image)
g_free (node->background_image); {
g_object_unref (node->background_image);
node->background_image = NULL;
}
if (node->background_texture != COGL_INVALID_HANDLE) if (node->background_texture != COGL_INVALID_HANDLE)
cogl_handle_unref (node->background_texture); cogl_handle_unref (node->background_texture);
@ -905,7 +908,7 @@ st_theme_node_get_double (StThemeNode *node,
* parent's parent, and so forth. Note that if the property has a * parent's parent, and so forth. Note that if the property has a
* value of 'inherit' it will be inherited even if %FALSE is passed * value of 'inherit' it will be inherited even if %FALSE is passed
* in for @inherit; this only affects the default behavior for inheritance. * in for @inherit; this only affects the default behavior for inheritance.
* @value: (out): location to store the newly allocated value that was * @file: (out) (transfer full): location to store the newly allocated value that was
* determined. If the property is not found, the value in this location * determined. If the property is not found, the value in this location
* will not be changed. * will not be changed.
* *
@ -920,7 +923,7 @@ gboolean
st_theme_node_lookup_url (StThemeNode *node, st_theme_node_lookup_url (StThemeNode *node,
const char *property_name, const char *property_name,
gboolean inherit, gboolean inherit,
char **value) GFile **file)
{ {
gboolean result = FALSE; gboolean result = FALSE;
int i; int i;
@ -935,7 +938,6 @@ st_theme_node_lookup_url (StThemeNode *node,
{ {
CRTerm *term = decl->value; CRTerm *term = decl->value;
CRStyleSheet *base_stylesheet; CRStyleSheet *base_stylesheet;
GFile *file;
if (term->type != TERM_URI && term->type != TERM_STRING) if (term->type != TERM_URI && term->type != TERM_STRING)
continue; continue;
@ -945,23 +947,21 @@ st_theme_node_lookup_url (StThemeNode *node,
else else
base_stylesheet = NULL; base_stylesheet = NULL;
file = _st_theme_resolve_url (node->theme, *file = _st_theme_resolve_url (node->theme,
base_stylesheet, base_stylesheet,
decl->value->content.str->stryng->str); decl->value->content.str->stryng->str);
*value = g_file_get_path (file);
g_object_unref (file);
result = TRUE; result = TRUE;
break; break;
} }
} }
if (!result && inherit && node->parent_node) if (!result && inherit && node->parent_node)
result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, value); result = st_theme_node_lookup_url (node->parent_node, property_name, inherit, file);
return result; return result;
} }
/* /**
* st_theme_node_get_url: * st_theme_node_get_url:
* @node: a #StThemeNode * @node: a #StThemeNode
* @property_name: The name of the string property * @property_name: The name of the string property
@ -972,18 +972,18 @@ st_theme_node_lookup_url (StThemeNode *node,
* and lets you handle the case where the theme does not specify the * and lets you handle the case where the theme does not specify the
* indicated value. * indicated value.
* *
* Return value: the newly allocated value if found. * Returns: (transfer full): the newly allocated value if found.
* If @property_name is not found, a warning will be logged and %NULL * If @property_name is not found, a warning will be logged and %NULL
* will be returned. * will be returned.
*/ */
char * GFile *
st_theme_node_get_url (StThemeNode *node, st_theme_node_get_url (StThemeNode *node,
const char *property_name) const char *property_name)
{ {
char *value; GFile *file;
if (st_theme_node_lookup_url (node, property_name, FALSE, &value)) if (st_theme_node_lookup_url (node, property_name, FALSE, &file))
return value; return file;
else else
{ {
g_warning ("Did not find string property '%s'", property_name); g_warning ("Did not find string property '%s'", property_name);
@ -1657,6 +1657,100 @@ do_padding_property (StThemeNode *node,
} }
} }
static void
do_margin_property_term (StThemeNode *node,
CRTerm *term,
gboolean left,
gboolean right,
gboolean top,
gboolean bottom)
{
int value;
if (get_length_from_term_int (node, term, FALSE, &value) != VALUE_FOUND)
return;
if (left)
{
node->margin[ST_SIDE_LEFT] = value;
node->margin_set |= 1 << ST_SIDE_LEFT;
}
if (right)
{
node->margin[ST_SIDE_RIGHT] = value;
node->margin_set |= 1 << ST_SIDE_RIGHT;
}
if (top)
{
node->margin[ST_SIDE_TOP] = value;
node->margin_set |= 1 << ST_SIDE_TOP;
}
if (bottom)
{
node->margin[ST_SIDE_BOTTOM] = value;
node->margin_set |= 1 << ST_SIDE_BOTTOM;
}
}
static void
do_margin_property (StThemeNode *node,
CRDeclaration *decl)
{
const char *property_name = decl->property->stryng->str + 6; /* Skip 'margin' */
if (strcmp (property_name, "") == 0)
{
/* Slight deviation ... if we don't understand some of the terms and understand others,
* then we set the ones we understand and ignore the others instead of ignoring the
* whole thing
*/
if (decl->value == NULL) /* 0 values */
return;
else if (decl->value->next == NULL) /* 1 value */
{
do_margin_property_term (node, decl->value, TRUE, TRUE, TRUE, TRUE); /* left/right/top/bottom */
return;
}
else if (decl->value->next->next == NULL) /* 2 values */
{
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, TRUE); /* top/bottom */
do_margin_property_term (node, decl->value->next, TRUE, TRUE, FALSE, FALSE); /* left/right */
}
else if (decl->value->next->next->next == NULL) /* 3 values */
{
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); /* top */
do_margin_property_term (node, decl->value->next, TRUE, TRUE, FALSE, FALSE); /* left/right */
do_margin_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); /* bottom */
}
else if (decl->value->next->next->next->next == NULL) /* 4 values */
{
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE); /* top */
do_margin_property_term (node, decl->value->next, FALSE, TRUE, FALSE, FALSE); /* right */
do_margin_property_term (node, decl->value->next->next, FALSE, FALSE, FALSE, TRUE); /* bottom */
do_margin_property_term (node, decl->value->next->next->next, TRUE, FALSE, FALSE, FALSE); /* left */
}
else
{
g_warning ("Too many values for margin property");
return;
}
}
else
{
if (decl->value == NULL || decl->value->next != NULL)
return;
if (strcmp (property_name, "-left") == 0)
do_margin_property_term (node, decl->value, TRUE, FALSE, FALSE, FALSE);
else if (strcmp (property_name, "-right") == 0)
do_margin_property_term (node, decl->value, FALSE, TRUE, FALSE, FALSE);
else if (strcmp (property_name, "-top") == 0)
do_margin_property_term (node, decl->value, FALSE, FALSE, TRUE, FALSE);
else if (strcmp (property_name, "-bottom") == 0)
do_margin_property_term (node, decl->value, FALSE, FALSE, FALSE, TRUE);
}
}
static void static void
do_size_property (StThemeNode *node, do_size_property (StThemeNode *node,
CRDeclaration *decl, CRDeclaration *decl,
@ -1707,6 +1801,8 @@ _st_theme_node_ensure_geometry (StThemeNode *node)
do_outline_property (node, decl); do_outline_property (node, decl);
else if (g_str_has_prefix (property_name, "padding")) else if (g_str_has_prefix (property_name, "padding"))
do_padding_property (node, decl); do_padding_property (node, decl);
else if (g_str_has_prefix (property_name, "margin"))
do_margin_property (node, decl);
else if (strcmp (property_name, "width") == 0) else if (strcmp (property_name, "width") == 0)
do_size_property (node, decl, &width); do_size_property (node, decl, &width);
else if (strcmp (property_name, "height") == 0) else if (strcmp (property_name, "height") == 0)
@ -1926,8 +2022,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
CRTerm *term; CRTerm *term;
/* background: property sets all terms to specified or default values */ /* background: property sets all terms to specified or default values */
node->background_color = TRANSPARENT_COLOR; node->background_color = TRANSPARENT_COLOR;
g_free (node->background_image); g_clear_object (&node->background_image);
node->background_image = NULL;
node->background_position_set = FALSE; node->background_position_set = FALSE;
node->background_size = ST_BACKGROUND_SIZE_AUTO; node->background_size = ST_BACKGROUND_SIZE_AUTO;
@ -1943,7 +2038,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
if (node->parent_node) if (node->parent_node)
{ {
st_theme_node_get_background_color (node->parent_node, &node->background_color); st_theme_node_get_background_color (node->parent_node, &node->background_color);
node->background_image = g_strdup (st_theme_node_get_background_image (node->parent_node)); node->background_image = g_object_ref (st_theme_node_get_background_image (node->parent_node));
} }
} }
else if (term_is_none (term)) else if (term_is_none (term))
@ -1964,8 +2059,7 @@ _st_theme_node_ensure_background (StThemeNode *node)
base_stylesheet, base_stylesheet,
term->content.str->stryng->str); term->content.str->stryng->str);
node->background_image = g_file_get_path (file); node->background_image = file;
g_object_unref (file);
} }
} }
} }
@ -2062,30 +2156,25 @@ _st_theme_node_ensure_background (StThemeNode *node)
if (decl->value->type == TERM_URI) if (decl->value->type == TERM_URI)
{ {
CRStyleSheet *base_stylesheet; CRStyleSheet *base_stylesheet;
GFile *file;
if (decl->parent_statement != NULL) if (decl->parent_statement != NULL)
base_stylesheet = decl->parent_statement->parent_sheet; base_stylesheet = decl->parent_statement->parent_sheet;
else else
base_stylesheet = NULL; base_stylesheet = NULL;
g_free (node->background_image); g_clear_object (&node->background_image);
file = _st_theme_resolve_url (node->theme, node->background_image = _st_theme_resolve_url (node->theme,
base_stylesheet, base_stylesheet,
decl->value->content.str->stryng->str); decl->value->content.str->stryng->str);
node->background_image = g_file_get_path (file);
g_object_unref (file);
} }
else if (term_is_inherit (decl->value)) else if (term_is_inherit (decl->value))
{ {
g_free (node->background_image); g_clear_object (&node->background_image);
node->background_image = g_strdup (st_theme_node_get_background_image (node->parent_node)); node->background_image = g_object_ref (st_theme_node_get_background_image (node->parent_node));
} }
else if (term_is_none (decl->value)) else if (term_is_none (decl->value))
{ {
g_free (node->background_image); g_clear_object (&node->background_image);
node->background_image = NULL;
} }
} }
else if (strcmp (property_name, "-gradient-direction") == 0) else if (strcmp (property_name, "-gradient-direction") == 0)
@ -2142,7 +2231,13 @@ st_theme_node_get_background_color (StThemeNode *node,
*color = node->background_color; *color = node->background_color;
} }
const char * /**
* st_theme_node_get_background_image:
* @node: a #StThemeNode
*
* Returns: (transfer none): @node's background image.
*/
GFile *
st_theme_node_get_background_image (StThemeNode *node) st_theme_node_get_background_image (StThemeNode *node)
{ {
g_return_val_if_fail (ST_IS_THEME_NODE (node), NULL); g_return_val_if_fail (ST_IS_THEME_NODE (node), NULL);
@ -2258,6 +2353,18 @@ st_theme_node_get_padding (StThemeNode *node,
return node->padding[side]; return node->padding[side];
} }
double
st_theme_node_get_margin (StThemeNode *node,
StSide side)
{
g_return_val_if_fail (ST_IS_THEME_NODE (node), 0.);
g_return_val_if_fail (side >= ST_SIDE_TOP && side <= ST_SIDE_LEFT, 0.);
_st_theme_node_ensure_geometry (node);
return node->margin[side];
}
/** /**
* st_theme_node_get_transition_duration: * st_theme_node_get_transition_duration:
* @node: an #StThemeNode * @node: an #StThemeNode
@ -2285,6 +2392,48 @@ st_theme_node_get_transition_duration (StThemeNode *node)
return st_slow_down_factor * node->transition_duration; return st_slow_down_factor * node->transition_duration;
} }
StIconStyle
st_theme_node_get_icon_style (StThemeNode *node)
{
int i;
ensure_properties (node);
for (i = node->n_properties - 1; i >= 0; i--)
{
CRDeclaration *decl = node->properties[i];
if (strcmp (decl->property->stryng->str, "-st-icon-style") == 0)
{
CRTerm *term;
for (term = decl->value; term; term = term->next)
{
if (term->type != TERM_IDENT)
goto next_decl;
if (strcmp (term->content.str->stryng->str, "requested") == 0)
return ST_ICON_STYLE_REQUESTED;
else if (strcmp (term->content.str->stryng->str, "regular") == 0)
return ST_ICON_STYLE_REGULAR;
else if (strcmp (term->content.str->stryng->str, "symbolic") == 0)
return ST_ICON_STYLE_SYMBOLIC;
else
g_warning ("Unknown -st-icon-style \"%s\"",
term->content.str->stryng->str);
}
}
next_decl:
;
}
if (node->parent_node)
return st_theme_node_get_icon_style (node->parent_node);
return ST_ICON_STYLE_REQUESTED;
}
StTextDecoration StTextDecoration
st_theme_node_get_text_decoration (StThemeNode *node) st_theme_node_get_text_decoration (StThemeNode *node)
{ {
@ -2894,7 +3043,6 @@ st_theme_node_get_border_image (StThemeNode *node)
int border_left; int border_left;
GFile *file; GFile *file;
char *filename;
/* Support border-image: none; to suppress a previously specified border image */ /* Support border-image: none; to suppress a previously specified border image */
if (term_is_none (term)) if (term_is_none (term))
@ -2973,17 +3121,15 @@ st_theme_node_get_border_image (StThemeNode *node)
base_stylesheet = NULL; base_stylesheet = NULL;
file = _st_theme_resolve_url (node->theme, base_stylesheet, url); file = _st_theme_resolve_url (node->theme, base_stylesheet, url);
filename = g_file_get_path (file);
g_object_unref (file);
if (filename == NULL) if (file == NULL)
goto next_property; goto next_property;
node->border_image = st_border_image_new (filename, node->border_image = st_border_image_new (file,
border_top, border_right, border_bottom, border_left, border_top, border_right, border_bottom, border_left,
scale_factor); scale_factor);
g_free (filename); g_object_unref (file);
return node->border_image; return node->border_image;
} }
@ -3033,6 +3179,28 @@ st_theme_node_get_vertical_padding (StThemeNode *node)
return padding; return padding;
} }
void
_st_theme_node_apply_margins (StThemeNode *node,
ClutterActor *actor)
{
g_return_if_fail (ST_IS_THEME_NODE (node));
_st_theme_node_ensure_geometry (node);
// In the case that a CSS margin is not specified, we don't to set a value
// of 0 to the clutter actor margin. In this manner it allows to use Clutter
// margin values set in the code. However, the margins that are set both in
// the code and in the CSS on the same side, the result is unpredictable.
if (node->margin_set & 1 << ST_SIDE_LEFT)
clutter_actor_set_margin_left (actor, st_theme_node_get_margin(node, ST_SIDE_LEFT));
if (node->margin_set & 1 << ST_SIDE_RIGHT)
clutter_actor_set_margin_right (actor, st_theme_node_get_margin(node, ST_SIDE_RIGHT));
if (node->margin_set & 1 << ST_SIDE_TOP)
clutter_actor_set_margin_top (actor, st_theme_node_get_margin(node, ST_SIDE_TOP));
if (node->margin_set & 1 << ST_SIDE_BOTTOM)
clutter_actor_set_margin_bottom (actor, st_theme_node_get_margin(node, ST_SIDE_BOTTOM));
}
static GetFromTermResult static GetFromTermResult
parse_shadow_property (StThemeNode *node, parse_shadow_property (StThemeNode *node,
CRDeclaration *decl, CRDeclaration *decl,
@ -3853,7 +4021,9 @@ st_theme_node_paint_equal (StThemeNode *node,
!clutter_color_equal (&node->background_gradient_end, &other->background_gradient_end)) !clutter_color_equal (&node->background_gradient_end, &other->background_gradient_end))
return FALSE; return FALSE;
if (g_strcmp0 (node->background_image, other->background_image) != 0) if ((node->background_image != NULL) &&
(other->background_image != NULL) &&
!g_file_equal (node->background_image, other->background_image))
return FALSE; return FALSE;
_st_theme_node_ensure_geometry (node); _st_theme_node_ensure_geometry (node);

View File

@ -94,6 +94,12 @@ typedef enum {
ST_GRADIENT_RADIAL ST_GRADIENT_RADIAL
} StGradientType; } StGradientType;
typedef enum {
ST_ICON_STYLE_REQUESTED,
ST_ICON_STYLE_REGULAR,
ST_ICON_STYLE_SYMBOLIC
} StIconStyle;
typedef struct _StThemeNodePaintState StThemeNodePaintState; typedef struct _StThemeNodePaintState StThemeNodePaintState;
struct _StThemeNodePaintState { struct _StThemeNodePaintState {
@ -162,7 +168,7 @@ gboolean st_theme_node_lookup_shadow (StThemeNode *node,
gboolean st_theme_node_lookup_url (StThemeNode *node, gboolean st_theme_node_lookup_url (StThemeNode *node,
const char *property_name, const char *property_name,
gboolean inherit, gboolean inherit,
char **value); GFile **file);
/* Easier-to-use variants of the above, for application-level use */ /* Easier-to-use variants of the above, for application-level use */
void st_theme_node_get_color (StThemeNode *node, void st_theme_node_get_color (StThemeNode *node,
@ -174,7 +180,7 @@ gdouble st_theme_node_get_length (StThemeNode *node,
const char *property_name); const char *property_name);
StShadow *st_theme_node_get_shadow (StThemeNode *node, StShadow *st_theme_node_get_shadow (StThemeNode *node,
const char *property_name); const char *property_name);
char *st_theme_node_get_url (StThemeNode *node, GFile *st_theme_node_get_url (StThemeNode *node,
const char *property_name); const char *property_name);
/* Specific getters for particular properties: cached /* Specific getters for particular properties: cached
@ -188,7 +194,7 @@ void st_theme_node_get_background_gradient (StThemeNode *node,
ClutterColor *start, ClutterColor *start,
ClutterColor *end); ClutterColor *end);
const char *st_theme_node_get_background_image (StThemeNode *node); GFile *st_theme_node_get_background_image (StThemeNode *node);
int st_theme_node_get_border_width (StThemeNode *node, int st_theme_node_get_border_width (StThemeNode *node,
StSide side); StSide side);
@ -208,6 +214,9 @@ double st_theme_node_get_padding (StThemeNode *node,
double st_theme_node_get_horizontal_padding (StThemeNode *node); double st_theme_node_get_horizontal_padding (StThemeNode *node);
double st_theme_node_get_vertical_padding (StThemeNode *node); double st_theme_node_get_vertical_padding (StThemeNode *node);
double st_theme_node_get_margin (StThemeNode *node,
StSide side);
int st_theme_node_get_width (StThemeNode *node); int st_theme_node_get_width (StThemeNode *node);
int st_theme_node_get_height (StThemeNode *node); int st_theme_node_get_height (StThemeNode *node);
int st_theme_node_get_min_width (StThemeNode *node); int st_theme_node_get_min_width (StThemeNode *node);
@ -217,6 +226,8 @@ int st_theme_node_get_max_height (StThemeNode *node);
int st_theme_node_get_transition_duration (StThemeNode *node); int st_theme_node_get_transition_duration (StThemeNode *node);
StIconStyle st_theme_node_get_icon_style (StThemeNode *node);
StTextDecoration st_theme_node_get_text_decoration (StThemeNode *node); StTextDecoration st_theme_node_get_text_decoration (StThemeNode *node);
StTextAlign st_theme_node_get_text_align (StThemeNode *node); StTextAlign st_theme_node_get_text_align (StThemeNode *node);

View File

@ -60,13 +60,13 @@ struct _StTheme
{ {
GObject parent; GObject parent;
char *application_stylesheet; GFile *application_stylesheet;
char *default_stylesheet; GFile *default_stylesheet;
char *theme_stylesheet; GFile *theme_stylesheet;
GSList *custom_stylesheets; GSList *custom_stylesheets;
GHashTable *stylesheets_by_filename; GHashTable *stylesheets_by_file;
GHashTable *filenames_by_stylesheet; GHashTable *files_by_stylesheet;
CRCascade *cascade; CRCascade *cascade;
}; };
@ -98,12 +98,25 @@ G_DEFINE_TYPE (StTheme, st_theme, G_TYPE_OBJECT)
#define strqcmp(str,lit,lit_len) \ #define strqcmp(str,lit,lit_len) \
(strlen (str) != (lit_len) || memcmp (str, lit, lit_len)) (strlen (str) != (lit_len) || memcmp (str, lit, lit_len))
static gboolean
file_equal0 (GFile *file1,
GFile *file2)
{
if (file1 == file2)
return TRUE;
if ((file1 == NULL) || (file2 == NULL))
return FALSE;
return g_file_equal (file1, file2);
}
static void static void
st_theme_init (StTheme *theme) st_theme_init (StTheme *theme)
{ {
theme->stylesheets_by_filename = g_hash_table_new_full (g_str_hash, g_str_equal, theme->stylesheets_by_file = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal,
(GDestroyNotify)g_free, (GDestroyNotify)cr_stylesheet_unref); (GDestroyNotify)g_object_unref, (GDestroyNotify)cr_stylesheet_unref);
theme->filenames_by_stylesheet = g_hash_table_new (g_direct_hash, g_direct_equal); theme->files_by_stylesheet = g_hash_table_new (g_direct_hash, g_direct_equal);
} }
static void static void
@ -124,10 +137,10 @@ st_theme_class_init (StThemeClass *klass)
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_APPLICATION_STYLESHEET, PROP_APPLICATION_STYLESHEET,
g_param_spec_string ("application-stylesheet", g_param_spec_object ("application-stylesheet",
"Application Stylesheet", "Application Stylesheet",
"Stylesheet with application-specific styling", "Stylesheet with application-specific styling",
NULL, G_TYPE_FILE,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
/** /**
@ -138,10 +151,10 @@ st_theme_class_init (StThemeClass *klass)
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_THEME_STYLESHEET, PROP_THEME_STYLESHEET,
g_param_spec_string ("theme-stylesheet", g_param_spec_object ("theme-stylesheet",
"Theme Stylesheet", "Theme Stylesheet",
"Stylesheet with theme-specific styling", "Stylesheet with theme-specific styling",
NULL, G_TYPE_FILE,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
/** /**
@ -152,10 +165,10 @@ st_theme_class_init (StThemeClass *klass)
*/ */
g_object_class_install_property (object_class, g_object_class_install_property (object_class,
PROP_DEFAULT_STYLESHEET, PROP_DEFAULT_STYLESHEET,
g_param_spec_string ("default-stylesheet", g_param_spec_object ("default-stylesheet",
"Default Stylesheet", "Default Stylesheet",
"Stylesheet with global default styling", "Stylesheet with global default styling",
NULL, G_TYPE_FILE,
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
signals[STYLESHEETS_CHANGED] = signals[STYLESHEETS_CHANGED] =
@ -168,23 +181,32 @@ st_theme_class_init (StThemeClass *klass)
} }
static CRStyleSheet * static CRStyleSheet *
parse_stylesheet (const char *filename, parse_stylesheet (GFile *file,
GError **error) GError **error)
{ {
enum CRStatus status; enum CRStatus status;
CRStyleSheet *stylesheet; CRStyleSheet *stylesheet;
char *contents;
gsize length;
if (filename == NULL) if (file == NULL)
return NULL; return NULL;
status = cr_om_parser_simply_parse_file ((const guchar *) filename, if (!g_file_load_contents (file, NULL, &contents, &length, NULL, error))
CR_UTF_8, return NULL;
&stylesheet);
status = cr_om_parser_simply_parse_buf ((const guchar *) contents,
length,
CR_UTF_8,
&stylesheet);
g_free (contents);
if (status != CR_OK) if (status != CR_OK)
{ {
char *uri = g_file_get_uri (file);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Error parsing stylesheet '%s'; errcode:%d", filename, status); "Error parsing stylesheet '%s'; errcode:%d", uri, status);
g_free (uri);
return NULL; return NULL;
} }
@ -203,12 +225,12 @@ _st_theme_parse_declaration_list (const char *str)
/* Just g_warning for now until we have something nicer to do */ /* Just g_warning for now until we have something nicer to do */
static CRStyleSheet * static CRStyleSheet *
parse_stylesheet_nofail (const char *filename) parse_stylesheet_nofail (GFile *file)
{ {
GError *error = NULL; GError *error = NULL;
CRStyleSheet *result; CRStyleSheet *result;
result = parse_stylesheet (filename, &error); result = parse_stylesheet (file, &error);
if (error) if (error)
{ {
g_warning ("%s", error->message); g_warning ("%s", error->message);
@ -219,35 +241,33 @@ parse_stylesheet_nofail (const char *filename)
static void static void
insert_stylesheet (StTheme *theme, insert_stylesheet (StTheme *theme,
const char *filename, GFile *file,
CRStyleSheet *stylesheet) CRStyleSheet *stylesheet)
{ {
char *filename_copy;
if (stylesheet == NULL) if (stylesheet == NULL)
return; return;
filename_copy = g_strdup(filename); g_object_ref (file);
cr_stylesheet_ref (stylesheet); cr_stylesheet_ref (stylesheet);
g_hash_table_insert (theme->stylesheets_by_filename, filename_copy, stylesheet); g_hash_table_insert (theme->stylesheets_by_file, file, stylesheet);
g_hash_table_insert (theme->filenames_by_stylesheet, stylesheet, filename_copy); g_hash_table_insert (theme->files_by_stylesheet, stylesheet, file);
} }
gboolean gboolean
st_theme_load_stylesheet (StTheme *theme, st_theme_load_stylesheet (StTheme *theme,
const char *path, GFile *file,
GError **error) GError **error)
{ {
CRStyleSheet *stylesheet; CRStyleSheet *stylesheet;
stylesheet = parse_stylesheet (path, error); stylesheet = parse_stylesheet (file, error);
if (!stylesheet) if (!stylesheet)
return FALSE; return FALSE;
stylesheet->app_data = GUINT_TO_POINTER (TRUE); stylesheet->app_data = GUINT_TO_POINTER (TRUE);
insert_stylesheet (theme, path, stylesheet); insert_stylesheet (theme, file, stylesheet);
cr_stylesheet_ref (stylesheet); cr_stylesheet_ref (stylesheet);
theme->custom_stylesheets = g_slist_prepend (theme->custom_stylesheets, stylesheet); theme->custom_stylesheets = g_slist_prepend (theme->custom_stylesheets, stylesheet);
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0); g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
@ -257,11 +277,11 @@ st_theme_load_stylesheet (StTheme *theme,
void void
st_theme_unload_stylesheet (StTheme *theme, st_theme_unload_stylesheet (StTheme *theme,
const char *path) GFile *file)
{ {
CRStyleSheet *stylesheet; CRStyleSheet *stylesheet;
stylesheet = g_hash_table_lookup (theme->stylesheets_by_filename, path); stylesheet = g_hash_table_lookup (theme->stylesheets_by_file, file);
if (!stylesheet) if (!stylesheet)
return; return;
@ -269,8 +289,8 @@ st_theme_unload_stylesheet (StTheme *theme,
return; return;
theme->custom_stylesheets = g_slist_remove (theme->custom_stylesheets, stylesheet); theme->custom_stylesheets = g_slist_remove (theme->custom_stylesheets, stylesheet);
g_hash_table_remove (theme->stylesheets_by_filename, path); g_hash_table_remove (theme->stylesheets_by_file, file);
g_hash_table_remove (theme->filenames_by_stylesheet, stylesheet); g_hash_table_remove (theme->files_by_stylesheet, stylesheet);
cr_stylesheet_unref (stylesheet); cr_stylesheet_unref (stylesheet);
g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0); g_signal_emit (theme, signals[STYLESHEETS_CHANGED], 0);
} }
@ -279,7 +299,7 @@ st_theme_unload_stylesheet (StTheme *theme,
* st_theme_get_custom_stylesheets: * st_theme_get_custom_stylesheets:
* @theme: an #StTheme * @theme: an #StTheme
* *
* Returns: (transfer full) (element-type utf8): the list of stylesheet filenames * Returns: (transfer full) (element-type GFile): the list of stylesheet files
* that were loaded with st_theme_load_stylesheet() * that were loaded with st_theme_load_stylesheet()
*/ */
GSList* GSList*
@ -291,9 +311,9 @@ st_theme_get_custom_stylesheets (StTheme *theme)
for (iter = theme->custom_stylesheets; iter; iter = iter->next) for (iter = theme->custom_stylesheets; iter; iter = iter->next)
{ {
CRStyleSheet *stylesheet = iter->data; CRStyleSheet *stylesheet = iter->data;
gchar *filename = g_hash_table_lookup (theme->filenames_by_stylesheet, stylesheet); GFile *file = g_hash_table_lookup (theme->files_by_stylesheet, stylesheet);
result = g_slist_prepend (result, g_strdup (filename)); result = g_slist_prepend (result, g_object_ref (file));
} }
return result; return result;
@ -334,12 +354,12 @@ st_theme_finalize (GObject * object)
g_slist_free (theme->custom_stylesheets); g_slist_free (theme->custom_stylesheets);
theme->custom_stylesheets = NULL; theme->custom_stylesheets = NULL;
g_hash_table_destroy (theme->stylesheets_by_filename); g_hash_table_destroy (theme->stylesheets_by_file);
g_hash_table_destroy (theme->filenames_by_stylesheet); g_hash_table_destroy (theme->files_by_stylesheet);
g_free (theme->application_stylesheet); g_clear_object (&theme->application_stylesheet);
g_free (theme->theme_stylesheet); g_clear_object (&theme->theme_stylesheet);
g_free (theme->default_stylesheet); g_clear_object (&theme->default_stylesheet);
if (theme->cascade) if (theme->cascade)
{ {
@ -362,36 +382,39 @@ st_theme_set_property (GObject *object,
{ {
case PROP_APPLICATION_STYLESHEET: case PROP_APPLICATION_STYLESHEET:
{ {
const char *path = g_value_get_string (value); GFile *file = g_value_get_object (value);
if (path != theme->application_stylesheet) if (!file_equal0 (file, theme->application_stylesheet))
{ {
g_free (theme->application_stylesheet); g_clear_object (&theme->application_stylesheet);
theme->application_stylesheet = g_strdup (path); if (file != NULL)
theme->application_stylesheet = g_object_ref (file);
} }
break; break;
} }
case PROP_THEME_STYLESHEET: case PROP_THEME_STYLESHEET:
{ {
const char *path = g_value_get_string (value); GFile *file = g_value_get_object (value);
if (path != theme->theme_stylesheet) if (!file_equal0 (file, theme->theme_stylesheet))
{ {
g_free (theme->theme_stylesheet); g_clear_object (&theme->theme_stylesheet);
theme->theme_stylesheet = g_strdup (path); if (file != NULL)
theme->theme_stylesheet = g_object_ref (file);
} }
break; break;
} }
case PROP_DEFAULT_STYLESHEET: case PROP_DEFAULT_STYLESHEET:
{ {
const char *path = g_value_get_string (value); GFile *file = g_value_get_object (value);
if (path != theme->default_stylesheet) if (!file_equal0 (file, theme->default_stylesheet))
{ {
g_free (theme->default_stylesheet); g_clear_object (&theme->default_stylesheet);
theme->default_stylesheet = g_strdup (path); if (file != NULL)
theme->default_stylesheet = g_object_ref (file);
} }
break; break;
@ -413,13 +436,13 @@ st_theme_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_APPLICATION_STYLESHEET: case PROP_APPLICATION_STYLESHEET:
g_value_set_string (value, theme->application_stylesheet); g_value_set_object (value, theme->application_stylesheet);
break; break;
case PROP_THEME_STYLESHEET: case PROP_THEME_STYLESHEET:
g_value_set_string (value, theme->theme_stylesheet); g_value_set_object (value, theme->theme_stylesheet);
break; break;
case PROP_DEFAULT_STYLESHEET: case PROP_DEFAULT_STYLESHEET:
g_value_set_string (value, theme->default_stylesheet); g_value_set_object (value, theme->default_stylesheet);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -439,9 +462,9 @@ st_theme_get_property (GObject *object,
* Return value: the newly created theme object * Return value: the newly created theme object
**/ **/
StTheme * StTheme *
st_theme_new (const char *application_stylesheet, st_theme_new (GFile *application_stylesheet,
const char *theme_stylesheet, GFile *theme_stylesheet,
const char *default_stylesheet) GFile *default_stylesheet)
{ {
StTheme *theme = g_object_new (ST_TYPE_THEME, StTheme *theme = g_object_new (ST_TYPE_THEME,
"application-stylesheet", application_stylesheet, "application-stylesheet", application_stylesheet,
@ -852,26 +875,19 @@ add_matched_properties (StTheme *a_this,
if (import_rule->sheet == NULL) if (import_rule->sheet == NULL)
{ {
char *filename = NULL; GFile *file = NULL;
if (import_rule->url->stryng && import_rule->url->stryng->str) if (import_rule->url->stryng && import_rule->url->stryng->str)
{ {
GFile *file;
file = _st_theme_resolve_url (a_this, file = _st_theme_resolve_url (a_this,
a_nodesheet, a_nodesheet,
import_rule->url->stryng->str); import_rule->url->stryng->str);
filename = g_file_get_path (file); import_rule->sheet = parse_stylesheet (file, NULL);
g_object_unref (file);
} }
if (filename)
import_rule->sheet = parse_stylesheet (filename, NULL);
if (import_rule->sheet) if (import_rule->sheet)
{ {
insert_stylesheet (a_this, filename, import_rule->sheet); insert_stylesheet (a_this, file, import_rule->sheet);
/* refcount of stylesheets starts off at zero, so we don't need to unref! */ /* refcount of stylesheets starts off at zero, so we don't need to unref! */
} }
else else
@ -882,8 +898,8 @@ add_matched_properties (StTheme *a_this,
import_rule->sheet = (CRStyleSheet *) - 1; import_rule->sheet = (CRStyleSheet *) - 1;
} }
if (filename) if (file)
g_free (filename); g_object_unref (file);
} }
if (import_rule->sheet != (CRStyleSheet *) - 1) if (import_rule->sheet != (CRStyleSheet *) - 1)
@ -1008,8 +1024,8 @@ _st_theme_get_matched_properties (StTheme *theme,
return props; return props;
} }
/* Resolve an url from an url() reference in a stylesheet into an absolute /* Resolve an url from an url() reference in a stylesheet into a GFile,
* local filename, if possible. The resolution here is distinctly lame and * if possible. The resolution here is distinctly lame and
* will fail on many examples. * will fail on many examples.
*/ */
GFile * GFile *
@ -1018,7 +1034,7 @@ _st_theme_resolve_url (StTheme *theme,
const char *url) const char *url)
{ {
char *scheme; char *scheme;
GFile *stylesheet, *resource; GFile *resource;
if ((scheme = g_uri_parse_scheme (url))) if ((scheme = g_uri_parse_scheme (url)))
{ {
@ -1027,21 +1043,18 @@ _st_theme_resolve_url (StTheme *theme,
} }
else if (base_stylesheet != NULL) else if (base_stylesheet != NULL)
{ {
const char *base_filename = NULL; GFile *base_file = NULL, *parent;
char *dirname;
base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet); base_file = g_hash_table_lookup (theme->files_by_stylesheet, base_stylesheet);
/* This is an internal function, if we get here with /* This is an internal function, if we get here with
a bad @base_stylesheet we have a problem. */ a bad @base_stylesheet we have a problem. */
g_assert (base_filename); g_assert (base_file);
dirname = g_path_get_dirname (base_filename); parent = g_file_get_parent (base_file);
stylesheet = g_file_new_for_path (dirname); resource = g_file_resolve_relative_path (parent, url);
resource = g_file_resolve_relative_path (stylesheet, url);
g_object_unref (stylesheet); g_object_unref (parent);
g_free (dirname);
} }
else else
{ {

View File

@ -47,12 +47,12 @@ typedef struct _StThemeClass StThemeClass;
GType st_theme_get_type (void) G_GNUC_CONST; GType st_theme_get_type (void) G_GNUC_CONST;
StTheme *st_theme_new (const char *application_stylesheet, StTheme *st_theme_new (GFile *application_stylesheet,
const char *theme_stylesheet, GFile *theme_stylesheet,
const char *default_stylesheet); GFile *default_stylesheet);
gboolean st_theme_load_stylesheet (StTheme *theme, const char *path, GError **error); gboolean st_theme_load_stylesheet (StTheme *theme, GFile *file, GError **error);
void st_theme_unload_stylesheet (StTheme *theme, const char *path); void st_theme_unload_stylesheet (StTheme *theme, GFile *file);
GSList *st_theme_get_custom_stylesheets (StTheme *theme); GSList *st_theme_get_custom_stylesheets (StTheme *theme);
G_END_DECLS G_END_DECLS

View File

@ -40,6 +40,7 @@
#include "st-texture-cache.h" #include "st-texture-cache.h"
#include "st-theme-context.h" #include "st-theme-context.h"
#include "st-theme-node-transition.h" #include "st-theme-node-transition.h"
#include "st-theme-node-private.h"
#include "st-widget-accessible.h" #include "st-widget-accessible.h"
@ -277,26 +278,26 @@ current_paint_state (StWidget *widget)
static void static void
st_widget_texture_cache_changed (StTextureCache *cache, st_widget_texture_cache_changed (StTextureCache *cache,
const char *uri, GFile *file,
gpointer user_data) gpointer user_data)
{ {
StWidget *actor = ST_WIDGET (user_data); StWidget *actor = ST_WIDGET (user_data);
StThemeNode *node = actor->priv->theme_node; StThemeNode *node = actor->priv->theme_node;
char *path;
gboolean changed = FALSE; gboolean changed = FALSE;
GFile *theme_file;
if (node == NULL) if (node == NULL)
return; return;
path = g_filename_from_uri (uri, NULL, NULL); theme_file = st_theme_node_get_background_image (node);
if ((theme_file != NULL) && g_file_equal (theme_file, file))
if (g_strcmp0 (st_theme_node_get_background_image (node), path) == 0)
{ {
st_theme_node_invalidate_background_image (node); st_theme_node_invalidate_background_image (node);
changed = TRUE; changed = TRUE;
} }
if (g_strcmp0 (st_border_image_get_filename (st_theme_node_get_border_image (node)), path) == 0) theme_file = st_border_image_get_file (st_theme_node_get_border_image (node));
if ((theme_file != NULL) && g_file_equal (theme_file, file))
{ {
st_theme_node_invalidate_border_image (node); st_theme_node_invalidate_border_image (node);
changed = TRUE; changed = TRUE;
@ -317,8 +318,6 @@ st_widget_texture_cache_changed (StTextureCache *cache,
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor))) if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor)); clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
} }
g_free (path);
} }
static void static void
@ -1542,6 +1541,8 @@ st_widget_recompute_style (StWidget *widget,
return; return;
} }
_st_theme_node_apply_margins (new_theme_node, CLUTTER_ACTOR (widget));
if (!old_theme_node || if (!old_theme_node ||
!st_theme_node_geometry_equal (old_theme_node, new_theme_node)) !st_theme_node_geometry_equal (old_theme_node, new_theme_node))
clutter_actor_queue_relayout ((ClutterActor *) widget); clutter_actor_queue_relayout ((ClutterActor *) widget);

View File

@ -34,6 +34,9 @@ static StThemeNode *group2;
static StThemeNode *text3; static StThemeNode *text3;
static StThemeNode *text4; static StThemeNode *text4;
static StThemeNode *group3; static StThemeNode *group3;
static StThemeNode *group4;
static StThemeNode *group5;
static StThemeNode *group6;
static StThemeNode *cairo_texture; static StThemeNode *cairo_texture;
static gboolean fail; static gboolean fail;
@ -173,17 +176,21 @@ assert_background_image (StThemeNode *node,
const char *node_description, const char *node_description,
const char *expected) const char *expected)
{ {
const char *value = st_theme_node_get_background_image (node); GFile *value = st_theme_node_get_background_image (node);
if (expected == NULL) GFile *expected_file;
expected = "(null)";
if (value == NULL)
value = "(null)";
if (strcmp (expected, value) != 0) if (expected != NULL && value != NULL)
{ {
g_print ("%s: %s.background-image: expected: %s, got: %s\n", expected_file = g_file_new_for_path (expected);
test, node_description, expected, value);
fail = TRUE; if (!g_file_equal (expected_file, value))
{
char *uri = g_file_get_uri (expected_file);
g_print ("%s: %s.background-image: expected: %s, got: %s\n",
test, node_description, expected, uri);
fail = TRUE;
g_free (uri);
}
} }
} }
@ -229,6 +236,19 @@ test_lengths (void)
/* 1in == 72pt == 96px, at 96dpi */ /* 1in == 72pt == 96px, at 96dpi */
assert_length ("group1", "padding-left", 96., assert_length ("group1", "padding-left", 96.,
st_theme_node_get_padding (group1, ST_SIDE_LEFT)); st_theme_node_get_padding (group1, ST_SIDE_LEFT));
/* 12pt == 16px at 96dpi */
assert_length ("group1", "margin-top", 16.,
st_theme_node_get_margin (group1, ST_SIDE_TOP));
/* 12px == 12px */
assert_length ("group1", "margin-right", 12.,
st_theme_node_get_margin (group1, ST_SIDE_RIGHT));
/* 2em == 32px (with a 12pt font) */
assert_length ("group1", "margin-bottom", 32.,
st_theme_node_get_margin (group1, ST_SIDE_BOTTOM));
/* 1in == 72pt == 96px, at 96dpi */
assert_length ("group1", "margin-left", 96.,
st_theme_node_get_margin (group1, ST_SIDE_LEFT));
} }
static void static void
@ -278,6 +298,54 @@ test_padding (void)
st_theme_node_get_padding (group2, ST_SIDE_LEFT)); st_theme_node_get_padding (group2, ST_SIDE_LEFT));
} }
static void
test_margin (void)
{
test = "margin";
/* Test that a 4-sided margin property assigns the right margin to
* all sides */
assert_length ("group2", "margin-top", 1.,
st_theme_node_get_margin (group2, ST_SIDE_TOP));
assert_length ("group2", "margin-right", 2.,
st_theme_node_get_margin (group2, ST_SIDE_RIGHT));
assert_length ("group2", "margin-bottom", 3.,
st_theme_node_get_margin (group2, ST_SIDE_BOTTOM));
assert_length ("group2", "margin-left", 4.,
st_theme_node_get_margin (group2, ST_SIDE_LEFT));
/* Test that a 3-sided margin property assigns the right margin to
* all sides */
assert_length ("group4", "margin-top", 1.,
st_theme_node_get_margin (group4, ST_SIDE_TOP));
assert_length ("group4", "margin-right", 2.,
st_theme_node_get_margin (group4, ST_SIDE_RIGHT));
assert_length ("group4", "margin-bottom", 3.,
st_theme_node_get_margin (group4, ST_SIDE_BOTTOM));
assert_length ("group4", "margin-left", 2.,
st_theme_node_get_margin (group4, ST_SIDE_LEFT));
/* Test that a 2-sided margin property assigns the right margin to
* all sides */
assert_length ("group5", "margin-top", 1.,
st_theme_node_get_margin (group5, ST_SIDE_TOP));
assert_length ("group5", "margin-right", 2.,
st_theme_node_get_margin (group5, ST_SIDE_RIGHT));
assert_length ("group5", "margin-bottom", 1.,
st_theme_node_get_margin (group5, ST_SIDE_BOTTOM));
assert_length ("group5", "margin-left", 2.,
st_theme_node_get_margin (group5, ST_SIDE_LEFT));
/* Test that all sides have a margin of 0 when not specified */
assert_length ("group6", "margin-top", 0.,
st_theme_node_get_margin (group6, ST_SIDE_TOP));
assert_length ("group6", "margin-right", 0.,
st_theme_node_get_margin (group6, ST_SIDE_RIGHT));
assert_length ("group6", "margin-bottom", 0.,
st_theme_node_get_margin (group6, ST_SIDE_BOTTOM));
assert_length ("group6", "margin-left", 0.,
st_theme_node_get_margin (group6, ST_SIDE_LEFT));
}
static void static void
test_border (void) test_border (void)
{ {
@ -426,14 +494,16 @@ main (int argc, char **argv)
StTheme *theme; StTheme *theme;
StThemeContext *context; StThemeContext *context;
PangoFontDescription *font_desc; PangoFontDescription *font_desc;
GFile *file;
gtk_init (&argc, &argv); gtk_init (&argc, &argv);
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
return 1; return 1;
theme = st_theme_new ("st/test-theme.css", file = g_file_new_for_path ("st/test-theme.css");
NULL, NULL); theme = st_theme_new (file, NULL, NULL);
g_object_unref (file);
stage = clutter_stage_new (); stage = clutter_stage_new ();
context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage)); context = st_theme_context_get_for_stage (CLUTTER_STAGE (stage));
@ -452,6 +522,12 @@ main (int argc, char **argv)
CLUTTER_TYPE_TEXT, "text2", NULL, NULL, NULL); CLUTTER_TYPE_TEXT, "text2", NULL, NULL, NULL);
group2 = st_theme_node_new (context, root, NULL, group2 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group2", NULL, NULL, NULL); CLUTTER_TYPE_GROUP, "group2", NULL, NULL, NULL);
group4 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group4", NULL, NULL, NULL);
group5 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group5", NULL, NULL, NULL);
group6 = st_theme_node_new (context, root, NULL,
CLUTTER_TYPE_GROUP, "group6", NULL, NULL, NULL);
text3 = st_theme_node_new (context, group2, NULL, text3 = st_theme_node_new (context, group2, NULL,
CLUTTER_TYPE_TEXT, "text3", NULL, NULL, CLUTTER_TYPE_TEXT, "text3", NULL, NULL,
"color: #0000ff; padding-bottom: 12px;"); "color: #0000ff; padding-bottom: 12px;");
@ -468,6 +544,7 @@ main (int argc, char **argv)
test_type_inheritance (); test_type_inheritance ();
test_adjacent_selector (); test_adjacent_selector ();
test_padding (); test_padding ();
test_margin ();
test_border (); test_border ();
test_background (); test_background ();
test_font (); test_font ();
@ -478,6 +555,9 @@ main (int argc, char **argv)
g_object_unref (group1); g_object_unref (group1);
g_object_unref (group2); g_object_unref (group2);
g_object_unref (group3); g_object_unref (group3);
g_object_unref (group4);
g_object_unref (group5);
g_object_unref (group6);
g_object_unref (text1); g_object_unref (text1);
g_object_unref (text2); g_object_unref (text2);
g_object_unref (text3); g_object_unref (text3);

View File

@ -7,6 +7,11 @@ stage {
padding-bottom: 2em; padding-bottom: 2em;
padding-left: 1in; padding-left: 1in;
margin: 12pt;
margin-right: 12px;
margin-bottom: 2em;
margin-left: 1in;
background: #ff0000 url('some-background.png'); background: #ff0000 url('some-background.png');
} }
@ -58,6 +63,7 @@ stage > #text2 {
#group2 { #group2 {
background-image: url('other-background.png'); background-image: url('other-background.png');
padding: 1px 2px 3px 4px; padding: 1px 2px 3px 4px;
margin: 1px 2px 3px 4px;
border: 2px solid #000000; border: 2px solid #000000;
border-bottom: 5px solid #0000ff; border-bottom: 5px solid #0000ff;
@ -75,3 +81,15 @@ ClutterText:visited, StLabel:visited {
StLabel:boxed { StLabel:boxed {
border: 1px; border: 1px;
} }
#group4 {
margin: 1px 2px 3px;
}
#group5 {
margin: 1px 2px;
}
#group6 {
padding: 5px;
}

View File

@ -312,6 +312,9 @@ function test() {
button.label = 'NEVER'; button.label = 'NEVER';
break; break;
case 'NEVER': case 'NEVER':
button.label = 'EXTERNAL';
break;
case 'EXTERNAL':
button.label = 'AUTOMATIC'; button.label = 'AUTOMATIC';
break; break;
} }

View File

@ -1,6 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const St = imports.gi.St; const St = imports.gi.St;
@ -10,7 +11,7 @@ function init(stage) {
Environment.init(); Environment.init();
let context = St.ThemeContext.get_for_stage(stage); let context = St.ThemeContext.get_for_stage(stage);
let stylesheetPath = GLib.getenv("GNOME_SHELL_TESTSDIR") + "/testcommon/test.css"; let stylesheetPath = GLib.getenv("GNOME_SHELL_TESTSDIR") + "/testcommon/test.css";
let theme = new St.Theme({ application_stylesheet: stylesheetPath }); let theme = new St.Theme({ application_stylesheet: Gio.File.new_for_path(stylesheetPath) });
context.set_theme(theme); context.set_theme(theme);
} }

View File

@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/python3
# #
# This is a simple script that we use to check for files in git # This is a simple script that we use to check for files in git
# and not in the distribution. It was previously written in shell # and not in the distribution. It was previously written in shell
@ -16,10 +16,10 @@ os.chdir(srcdir)
status=0 status=0
for f in subprocess.Popen(["git", "ls-files"], stdout=subprocess.PIPE).stdout: for f in subprocess.Popen(["git", "ls-files"], stdout=subprocess.PIPE).stdout:
f = f.strip() f = f.decode('utf-8').strip()
if (not os.path.exists(os.path.join(distdir, f)) and if (not os.path.exists(os.path.join(distdir, f)) and
not any((fnmatch.fnmatch(f, p) for p in excludes))): not any((fnmatch.fnmatch(f, p) for p in excludes))):
print "File missing from distribution:", f print("File missing from distribution:", f)
status=1 status=1
sys.exit(status) sys.exit(status)