Compare commits

...

189 Commits

Author SHA1 Message Date
598cf48973 Bump version to 3.18.5
Update NEWS.
2016-04-21 12:04:11 +02:00
ce811ec063 st: Don't assert when corner texture creation fails 2016-04-20 19:32:32 +02:00
535fb0e2a0 Do not skip CoglError parameters
While CoglError is a define to GError, it doesn't follow the convention
of ignoring errors when NULL is passed, but rather treats the error as
fatal :-(
That's clearly unwanted for a compositor, so make sure to always pass
an error parameter where a runtime error is possible

https://bugzilla.gnome.org/show_bug.cgi?id=765061
2016-04-20 19:32:32 +02:00
281101d942 st: Do not try to unref NULL CoglObjects
https://bugzilla.gnome.org/show_bug.cgi?id=765061
2016-04-20 19:32:31 +02:00
045e1f01af st: Fix offscreen leak if cogl_framebuffer_allocate fails
If cogl_framebuffer_allocate fails in _st_create_shadow_pipeline_from_actor, the
CoglOffscreen* that was allocated earlier in the function is leaked.

https://bugzilla.gnome.org/show_bug.cgi?id=735705

Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
2016-04-03 11:56:39 +02:00
db252a65f8 Updated Czech translation 2016-03-30 08:29:07 +02:00
358ee88e1c NetworkAgent: Fix double-unref in get_secrets_keyring_cb()
In get_secrets_keyring_cb, we own a ref on the 'attributes' hash table
from secret_item_get_attributes), and a ref on the 'secret' object (from
secret_item_get_secret(), but in the SHELL_KEYRING_SK_TAG case, we unref
these once before breaking out of the loop, and the second time after
breaking out of the loop.

https://bugzilla.gnome.org/show_bug.cgi?id=759708

Note: This is needed to avoid crashes with libsecret 0.18.4 -- Michael
2016-03-21 17:56:15 -05:00
cdc9652f5b telepathyClient: Acknowledge messages before closing
While a channel has pending messages, it will pop up again when
dismissed. That is clearly not what users expect, so clear them
out first before closing a channel.

https://bugzilla.gnome.org/show_bug.cgi?id=747991
2016-03-16 17:45:52 -05:00
fcfa752fbd Updated Slovenian translation 2016-03-05 20:44:53 +01:00
4651b7adcc Bump version to 3.18.4
Update NEWS.
2016-02-22 16:45:15 +01:00
4562a431ad NetworkAgent: correctly identify the VPN secret requests
The non-interactive requests for 'vpn' settings are forwarded to the UI because
it is able to talk to the auth helpers. However, the VPN requests are identified
by the connection type instead of setting type. That is incorrect and the UI
is not prepared to handle such requests; tries to construct a dialog and fails
miserably:

  Gjs-Message: JS LOG: Invalid connection type: vpn

  (gnome-shell:13133): Gjs-WARNING **: JS ERROR: Error: No property 'text' in property list (or its value was undefined)
  NetworkSecretDialog<._init@resource:///org/gnome/shell/ui/components/networkAgent.js:60
  wrapper@resource:///org/gnome/gjs/modules/lang.js:169
  _Base.prototype._construct@resource:///org/gnome/gjs/modules/lang.js:110
  Class.prototype._construct/newClass@resource:///org/gnome/gjs/modules/lang.js:204
  NetworkAgent<._handleRequest@resource:///org/gnome/shell/ui/components/networkAgent.js:724
  wrapper@resource:///org/gnome/gjs/modules/lang.js:169
  NetworkAgent<._newRequest@resource:///org/gnome/shell/ui/components/networkAgent.js:715
  wrapper@resource:///org/gnome/gjs/modules/lang.js:169

https://bugzilla.gnome.org/show_bug.cgi?id=760999
2016-01-27 13:42:05 +01:00
f5d9d188a7 authPrompt: Do not allow bypassing disabled Sign In button
The Next and Sign In buttons are disabled when the username/password
field is empty. However, the user can still bypass this button by
pressing the enter key, leading to some odd glitches with the log in
for 'Not Listed?' users.

This is easy to fix by simply not progressing to the next screen when
the button is disabled.

https://bugzilla.gnome.org/show_bug.cgi?id=746180
2016-01-07 17:19:24 -06:00
cca01e3f02 Updated Indonesian translation 2016-01-02 12:12:44 +00:00
1874f3605d Updated Ukrainian translation 2015-12-05 17:00:22 +02:00
3001f3376c loginDialog: Reconsider user for user list when user changes
Generally a user-changed operation will be uninteresting, but if the
user is currently in the user list and the account changes to locked, we
want to remove it from the list, or if the user is not in the list and
the account changed to unlocked, we want to add it to the list. This
fixes the case where a new user account created in gnome-control-center
does not appear in the user list. The password mode is set in the new
account immediately after it is created, but the operations are not
atomic, so the login dialog considers the new user account when it is
still locked and rejects it from being displayed, then immediately
afterwards the account is unlocked. This commit causes the login dialog
to show the account when this occurs.

The containsUser() check here is not strictly necessary, but reduces
spurious calls to addUser() and removeUser(), since there's no easy way
to check if the locked status of the account has changed (as it's much
easier to connect to one signal on the UserManager than to
notify::locked on each User object).

https://bugzilla.gnome.org/show_bug.cgi?id=758568
2015-12-02 18:25:25 +01:00
491e511a96 altTab: Fix window-switcher on HiDPI displays
We need to take the scale factor into account to avoid tiny window
previews on HiDPI.

https://bugzilla.gnome.org/show_bug.cgi?id=758676
2015-12-02 10:35:52 +01:00
293bc98394 loginDialog: Fix TypeError when user is deleted
LoginDialog has a private _user, but UserListItem has a public user.
Easy to get wrong since _user would be the right thing to type in 90% of
this file.
2015-11-23 17:48:18 -06:00
2ed3482d54 Updated Esperanto translation 2015-11-23 00:40:00 +01:00
4e4414a84d Bump version to 3.18.3
Update NEWS.
2015-11-17 22:25:33 +01:00
934a08f28f browser-plugin: Do not create a new object every time NPPVpluginScriptableNPObject is requested
Merge PluginData and PluginObject structs into a single one and create
the scriptable object associated to the plugin instance in NPP_New. Then,
when NPPVpluginScriptableNPObject is requested we just return the
scriptable object associated to the given instance. This caused the
crashes in NPN_InvokeDefault with WebKit, since we had multiple
scriptable objects for the same instance, but only one of those objects
had the onchange listener installed. Firefox seems to cache the
scriptable object for the instance and therefore NPPVpluginScriptableNPObject
is requested only once.

https://bugzilla.gnome.org/show_bug.cgi?id=737932
2015-11-17 13:18:05 -06:00
732ea2a91e browser-plugin: Set windowless mode and don't claim to need XEmbed
NPAPI plugins are windowed by default, so we need to set
NPPVpluginWindowBool value to FALSE on startup. This way the browser
will not create a GtkSocket for a GtkPlug that we are not going to
create. It doesn't make sense to claim that we need XEmbed either.

https://bugzilla.gnome.org/show_bug.cgi?id=757940
2015-11-17 11:35:53 -06:00
aae6a3cbbd Revert "browser-plugin: Set windowless mode and don't claim to need XEmbed"
This reverts commit a52c91e9e5.

https://bugzilla.gnome.org/show_bug.cgi?id=758035
2015-11-16 10:57:56 -06:00
f67a6589bd Bump version to 3.18.2
Update NEWS.
2015-11-12 13:08:29 +01:00
88c1fa8a3e browser-plugin: Set windowless mode and don't claim to need XEmbed
NPAPI plugins are windowed by default, so we need to set
NPPVpluginWindowBool value to FALSE on startup. This way the browser
will not create a GtkSocket for a GtkPlug that we are not going to
create. It doesn't make sense to claim that we need XEmbed either.

https://bugzilla.gnome.org/show_bug.cgi?id=757940
2015-11-12 12:12:29 +01:00
012443bffa st: Fix Gaussian kernel calculation
The result of subtracting unsigned operands is unsigned, which throws
off our calculation in case it should be negative.

This partly reverts 18b6f13395.

https://bugzilla.gnome.org/show_bug.cgi?id=757779
2015-11-12 01:03:01 +01:00
61b14c7f04 Updated Chinese (Taiwan) translation 2015-11-11 00:36:06 +00:00
13dff7d5eb Stable backport for zh_CN translation from master 2015-11-11 00:21:32 +08:00
55087d03e4 browser-plugin: link with -Wl,-z,nodelete
This ensures that the module will not be unloaded, since GObject types
registered statically can't be reloaded. This should fix crashes with
browsers that correctly unload the plugins.

https://bugzilla.gnome.org/show_bug.cgi?id=737932
2015-11-10 15:25:40 +01:00
e7528bf2fa st_theme_node_prerender_shadow: guard against failure to allocate a texture
If we are trying to render a shadow at a size that is very large in one
direction, but small in the other direction (so that we don't 9-slice
the texture), then allocating the backing texture for the offscreen
buffer may fail due to texture-size limits. Don't crash in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=757150
2015-10-27 15:54:00 -04:00
9e64a1e3d6 Updated Romanian translation 2015-10-24 17:02:18 +00:00
007ac93cd6 ActivitiesButton: fix overview being toggled while still animating
Adds the missing checks for whether we should toggle the overview, on
button and key release.

https://bugzilla.gnome.org/show_bug.cgi?id=756925
2015-10-23 13:44:49 +02:00
d8336efddc Defend against failure of cairo_pattern_get_surface()
There are quite a few crashes in retrace.fedoraproject.org that are a result of
of cairo_pattern_get_surface() failing, then a subsequent call to
cairo_image_surface_get_width() crashing because no surface was returned to the
out parameter. Knowing what causes these is hard - my best guess is widgets getting
allocated at ridiculous sizes - but avoiding the crash makes sense in any case.

See https://bugzilla.redhat.com/show_bug.cgi?id=1206754

https://bugzilla.gnome.org/show_bug.cgi?id=756983
2015-10-22 15:15:54 -04:00
a83f822512 animation: do spinner animation with low priority
It's very unexpected that a spinner animation would
preempt idles from running.

This commit runs the spinner animation with a low
priority to ensure it doesn't take over the main
loop.

https://bugzilla.gnome.org/show_bug.cgi?id=754814
2015-10-21 08:54:55 -04:00
f64d64035a animation: Run every 16ms not ever 14ms
Right now the spinner animation updates every 14ms.
60 frames per second would be one frame per 16.667ms,
so we're waking up more frequently than we need to.

This commit changes the wakeup to happen after 16ms.

https://bugzilla.gnome.org/show_bug.cgi?id=754814
2015-10-21 08:54:31 -04:00
5583f881df gdm: don't emit start-session-when-ready from idle function
There's no point in delaying the emission.  We should do it
right away.

https://bugzilla.gnome.org/show_bug.cgi?id=754814
2015-10-21 08:54:24 -04:00
10e4382a7d Updated Hungarian translation 2015-10-21 06:08:43 +00:00
9f0ee0dc9f Updated Icelandic translation 2015-10-20 14:25:09 +00:00
2f82f783f2 Fix text-scaling-factor under wayland.
The text-scaling-factor GSetting was not being properly propagated
to clutter and the Pango font map; under X this is done by Clutter,
which listens to XSETTINGS directly.

https://bugzilla.gnome.org/show_bug.cgi?id=756447
2015-10-20 09:37:57 -04:00
4d066e3916 windowMenu: Ensure the source actor isn't sized 0x0
If the source actor is sized 0x0, the grabHelper will close the menu
on button release if the menu ends up flipped because in that case the
release event happens when the pointer is neither over the source
actor (since it's 0x0) or over the menu actor. A zero sized source
actor works for the non-flipped menu case because the menu's actor
itself ends up underneath the pointer.

https://bugzilla.gnome.org/show_bug.cgi?id=756605
2015-10-20 15:11:31 +02:00
342fbd16d3 Add RLM as appropriate 2015-10-18 17:23:22 +04:00
8ae0c69ccf windowManager: fix fullscreen clone being left around
If we get another effect on the same actor, we should make sure to
remove the clone through the "overwrite" methods provided by Tweener, or
there will be a race that might end up with a stray clone being left
around.

https://bugzilla.gnome.org/show_bug.cgi?id=756714
2015-10-16 14:11:10 -07:00
bed660bdf4 Fix some issues reported by Bjørn Lie in bug 740906. 2015-10-16 18:12:28 +02:00
ab2ca17b76 windowManager: Fix fullscreen animations on dualscreen
The translation should describe the difference between the fullscreened
and unfullscreened position of the window - however we are currently
assuming a fullscreen position of (0, 0) instead of the monitor's origin,
which causes glitches on dualscreen setups.

https://bugzilla.gnome.org/show_bug.cgi?id=756697
2015-10-16 15:52:07 +02:00
90b7710834 Bump version to 3.18.1
Update NEWS.
2015-10-15 19:56:47 +02:00
f8cc8f1dc1 theme: Use font-relative sizes for menu widths
For menus, it makes more sense to pick a width that fits a reasonable amount
of content rather than a fixed amount of screen estate, so use font-relative
sizes instead of pixel values.

https://bugzilla.gnome.org/show_bug.cgi?id=754581
2015-10-15 19:56:44 +02:00
f8e5e3e435 aggregateMenu: Ignore ellipsizable items in width-request
Some labels in the system status menu - namely network names - are out
of our control, and may thus grow the width "infinitively" unless we
restrict the menu width. So far we have been doing this by setting a
fixed width or max-width, but any value we put there might end up
being too restrictive in some locales. Instead, request a width that
fits all the labels we want to show unellipsized and use that instead
of an arbitrary limit.

https://bugzilla.gnome.org/show_bug.cgi?id=708472
2015-10-15 19:56:03 +02:00
508e751ffd box-layout: Support replacing layout manager
There is nothing preventing callers from replacing the internal
layout manager, and as long as the replacement is a (or derives
from) ClutterBoxLayout, everything should work fine except for
losing a bit of automatic property mapping - and the latter is
easily fixable by moving the setup out of the constructor.

https://bugzilla.gnome.org/show_bug.cgi?id=708472
2015-10-15 19:21:15 +02:00
207c847762 windowManager: add animations for fullscreen and unfullscreen
We use the newly introduced feature from Mutter to hook up our own
fullscreen and unfullscreen animations.
To give the illusion of a transition as smooth as possible, we create a
snapshot of the current contents of the actor before its state is
changed, and crossfade between the two states while the size changes.

https://bugzilla.gnome.org/show_bug.cgi?id=707248
2015-10-14 12:10:58 -04:00
3c980566d3 Updated Basque language 2015-10-14 12:26:29 +02:00
50b59e0ca6 batch: Add old commit message as comment at top of file
This is a lightly-edited version of Ray's commit message in
4902a600d5.
2015-10-13 14:43:39 -05:00
14c52bb00a dash: Ensure style for icon size computation
StIcon will skip loading the texture when its theme node is unset (which
may happen on style changes while the widget is hidden). While our size
request to compute the dash icon size will create the icon's theme node
if necessary (and of all its parents), a missing texture can still throw
off our computation.
Make sure this doesn't happen by ensuring the icon's style first, so the
texture is updated in response to StWidget::style-changed if necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=745649
2015-10-13 20:21:44 +02:00
9720b32987 dash: Revert mislead cleanup
When adjusting dash icon sizes, we compute the icon padding by subtracting
the configured icon size from the first icon actor's preferred size. To
make sure that the preferred size correctly corresponds to the current
dash icon size even while the icon is animating, we enforce the size
before the size request. For that we used to temporarily manipulate
the icon texture size directly, but commit e92d204d42 cleaned this
up to use the setIconSize() method instead.
This does not work however, as the icon actor's iconSize property will
always match the dash iconSize property, making the method a noop. So
go back to the original approach of enforcing the texture size to make
sure we always base our computations on correct values.

https://bugzilla.gnome.org/show_bug.cgi?id=745649
2015-10-13 20:21:44 +02:00
674ae262c8 Change incorrect parameter names
These were renamed a while ago.
2015-10-12 15:38:44 -04:00
db297e7fdb Don't crash on accesses to stale window-backed apps
The JS code could still be holding on to a reference to a window-backed app
after all windows have vanished. (For example, the dash queues an idle to
refetch apps and display them.) Avoid dying with an error message if we
attempt to activate or otherwise manipulate such a window.

https://bugzilla.gnome.org/show_bug.cgi?id=674799
2015-10-11 15:31:39 -04:00
d57c146514 Updated Danish translation by scootergrisen 2015-10-11 18:34:51 +02:00
ec5a4328e3 Updated Danish translation 2015-10-11 16:30:56 +00:00
e4ee72c481 Update Arabic translation 2015-10-10 15:27:42 +04:00
31f1e9ff0a autorunManager: Do not mark the notification CRITICAL
There is nothing particularly critical about this notification, it
was only marked as such to get certain behavior like auto-expanding
and sticking-around to be acknowledged by the user (as it offers
more actions than the summary notification, so it is frustrating
when it goes away because it was missed).
As all notifications will now stay visible until we are sure the
users has seen them, the latter reasoning no longer applies.
Auto-expansion doesn't appear too important and may even be considered
annoying by users, so remove the CRITICAL hint now.

https://bugzilla.gnome.org/show_bug.cgi?id=657923
2015-10-09 15:55:40 +02:00
d6c049a8c9 altTab: Don't error out if we don't have windows for an app
We are currently erroring out when the tab chain doesn't contain at
least one window for an app which might happen for windows that don't
take focus like xeyes. This leaves us in a state where we can't show
the switcher at all. Let's just ignore these apps instead of looking
broken.
2015-10-08 18:27:07 +02:00
44047ac881 shell-glsl-quad: Set the pipeline blend string explicitly
The default pipeline color is opaque white and blending is turned
off. If we only draw with that color (e.g. because animations are
disabled and we're always drawn with opacity == 255), blending is kept
disabled since cogl_pipeline_set_color() returns early if the color
doesn't change from what was there before.

In our case we always want blending to be enabled which we can achieve
by setting the blending string ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=755827
2015-10-08 18:27:07 +02:00
464d5d8a13 st-button: Don't rely on hover to accept clicks
Since commit 4f1f226828 we only consider buttons clicked when the
release event had a corresponding press event. However as we use
the hover state to check whether a release event actually occurred
on the button, we dismiss any clicks in cases where we missed the
enter event - most likely due to some other actor holding a grab.
Instead, check whether the button contains the event's source, which
should be less error-prone.

https://bugzilla.gnome.org/show_bug.cgi?id=748919
2015-10-07 15:05:36 +02:00
29811a85dc Updated Portuguese translation 2015-10-07 06:07:27 +00:00
36ee4e6c3b panel: Hide app menu when disabled by settings
While the GtkSettings::gtk-shell-shows-app-menu property is meant to
reflect a desktop capability (i.e. in the GNOME case: the app menu is
shown in the top bar), it is possible for users to overwrite it.
Respect the setting and actually hide the menu in that case.

https://bugzilla.gnome.org/show_bug.cgi?id=745919
2015-10-05 14:08:20 +02:00
2036e4c85c st: Remove wrong indentation
GObject-Introspection started warning for wrong annotations, and
StGenericAccessible::set-current-value has a return value annotation
even if it returns nothing. This generates the warning:

src/st/st-generic-accessible.c:146: Warning: St:
StGenericAccessible::set-current-value: invalid return annotation

Which, coupled with fatal warnings, breaks the Shell build.
2015-10-05 12:04:55 +01:00
f24034de84 Updated Czech translation 2015-10-05 11:56:30 +02:00
522ff86081 Updated Spanish translation 2015-10-05 07:46:19 +00:00
669e3c8ed9 Updated Spanish translation 2015-10-05 07:41:45 +00:00
ce850f464c Updated Kazakh translation 2015-10-04 12:00:33 +00:00
03eaa61cef Updated Portuguese translation 2015-10-04 07:34:03 +00:00
e10e953d24 Updated Finnish translation 2015-10-04 07:22:29 +00:00
2b47bb3d82 Updated Serbian Latin translation 2015-10-01 23:39:29 +00:00
73d819116c Updated Serbian translation 2015-10-01 23:38:05 +00:00
c8dd984663 Updated German translation 2015-10-01 20:43:16 +00:00
6087eb6d0e Updated Irish translation 2015-09-30 22:30:18 -06:00
97b43d1d36 Updated Vietnamese translation
Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
2015-10-01 07:22:35 +07:00
57ebadbaf8 Updated Lithuanian translation 2015-09-30 22:17:38 +03:00
cad7bb1151 Updated Greek translation 2015-09-30 10:38:28 +03:00
9a376d47c5 Updated Brazilian Portuguese translation 2015-09-29 19:09:31 +00:00
b79adc05f4 Updated Russian translation 2015-09-29 19:07:25 +00:00
f765c5e319 Updated Korean translation 2015-09-29 19:14:47 +09:00
edc445c0c9 Updated Italian translation 2015-09-29 07:03:06 +00:00
ab6b0f3f7f Updated Slovak translation 2015-09-29 05:32:58 +00:00
5e7902e733 Updated Polish translation 2015-09-29 00:53:38 +02:00
f9f821aa55 Updated Swedish translation 2015-09-28 22:40:28 +00:00
9ed4b2a5ae Updated Galician translation 2015-09-28 22:34:41 +00:00
0130ced790 Updated French translation 2015-09-28 21:39:48 +00:00
8dab07af82 Update Czech translation
Fixes #737598.
2015-09-28 17:10:10 -04:00
f6cd3fa5ed panel: improve string for system menu, bug 755755
Refer to the system menu in the top bar as "System" rather than "Settings" as
it contains more than just settings and "Settings" is already used for the
settings panel. "System" is also used elsewhere, so include context for
translators.
2015-09-28 16:29:12 -04:00
faae1a028e browser-plugin: try to avoid a crash
Quite tempted to delete this unmaintained and unreliable plugin, but I
can stand it not working so long as it at least stops crashing, so let's
try this first.

Hopefully mitigates bug #737932.
2015-09-27 13:14:08 -05:00
f5e32184fe theme: Update sass submodule to pick up menu size changes
https://bugzilla.gnome.org/show_bug.cgi?id=708472
2015-09-25 20:24:32 +02:00
18c7138237 Check error of g_dbus_proxy_new_sync call
Otherwise errors pile up and we crash later on.
2015-09-24 13:33:47 -04:00
3f0fbae7e2 shell_dbus_acquire_name: Don't leak the result
The GVariant returned by g_dbus_proxy_call_sync must be
freed with g_variant_unref, to prevent a leak.
2015-09-24 13:33:47 -04:00
7f1a258ff9 shell_dbus_acquire_name: Don't leak error
If fatal is not set, we return from this function in the error
case. Don't leak the GError if that happens.
2015-09-24 13:33:45 -04:00
35b38d5cb2 Updated Vietnamese translation
Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
2015-09-24 15:16:45 +07:00
09e8a437d4 Update Arabic translation 2015-09-23 23:53:04 +02:00
d2bedcc182 build: Replace deprecated GNOME_COMPILE_WARNINGS macro 2015-09-23 21:32:50 +02:00
84eda6e459 st: Don't avoid parameter list
Meh, C ...
2015-09-23 21:32:50 +02:00
f5e7530fc7 st: Add default case to switch statements 2015-09-23 21:32:50 +02:00
f983b34784 st: Handle all possible enum values in switch statements 2015-09-23 21:32:50 +02:00
36bbe64898 st: Fix constness in assignment 2015-09-23 21:32:50 +02:00
627a393ed6 st: Don't mix declarations and code 2015-09-23 21:32:50 +02:00
a025b151ef st: Don't shadow existing variables 2015-09-23 21:32:50 +02:00
18b6f13395 st: Fix signed-unsigned comparisons 2015-09-23 21:32:50 +02:00
051413550f st: Don't duplicate declarations from G_DEFINE_TYPE 2015-09-23 21:32:50 +02:00
3e10574736 shell: Add default case to switch statements
... to shut up a compiler warning.
2015-09-23 21:32:50 +02:00
9a3041004b shell: Don't shadow existing variables 2015-09-23 21:32:50 +02:00
87f71b8ce1 shell: Don't mix declarations and code 2015-09-23 21:32:50 +02:00
825146f1e3 shell: Fix signed-unsigned comparisons 2015-09-23 21:32:50 +02:00
52995416fd shell: Don't avoid parameter list
Meh, C ...
2015-09-23 21:32:50 +02:00
6c43d0247a main: Fix constness mismatches 2015-09-23 21:32:49 +02:00
9aa98d9f0c menutracker: Don't shadow existing variables 2015-09-23 21:32:49 +02:00
c3a29d6df1 theme-node: Rewrite switch statement
Some compilers warn about unhandled enum values in switch statements,
so don't use one where only two out of 21 possible values make sense.
2015-09-23 21:32:49 +02:00
82f84416a9 recorder: Rewrite switch statement
Avoid compiler warnings about unhandled enum values by using a
regular if-else statement.
2015-09-23 21:32:49 +02:00
9dd3162dbe recorder-src: Rewrite switch statement
Avoid compiler warnings about unhandled enum values by using a
regular if-else statement.
2015-09-23 21:32:49 +02:00
7ef519756a Update gvc submodule 2015-09-23 21:32:49 +02:00
3bbe74d1c1 popupMenu: Set ImageMenuItem's label-actor
While we don't use image menu items ourselves, extensions might,
so make sure they are accessible out of the box.
Spotted by Jay Strict.
2015-09-23 14:20:38 +02:00
409f6718b8 calendar: Disconnect all Notification signals on NotificationMessage destruction
The destroy signal handler is kept connected despite the NotificationMessage
being destroyed, which leaves dangling NotificationMessage objects that will
be mass destroyed when the Notification object these depend upon is finally
destroyed.

Depending on the amount of accumulated NotificationMessages, this may lead
to temporary freezes or other more funky issues when recursion limits are
hit.

https://bugzilla.gnome.org/show_bug.cgi?id=755425
2015-09-22 18:16:16 +02:00
9c0e179080 Updated Serbian Latin translation 2015-09-22 11:49:36 +00:00
b3b278d41f Updated Serbian translation 2015-09-22 11:48:55 +00:00
0f466dbafb Bump version to 3.18.0
Update NEWS.
2015-09-21 22:22:18 +02:00
fbb4a9a3a6 Updated Latvian translation 2015-09-20 22:01:15 +03:00
8ddae5cd71 Updated Swedish translation 2015-09-20 17:28:59 +00:00
b0915c7b60 Updated Brazilian Portuguese translation 2015-09-20 14:01:58 +00:00
831bb4e334 Updated Indonesian translation 2015-09-19 12:35:20 +00:00
4e025506fa Updated Irish translation 2015-09-18 10:43:04 -06:00
abccf451bf Updated Danish translation 2015-09-18 17:05:37 +02:00
14954117c0 Updated Indonesian translation 2015-09-17 01:19:59 +00:00
629f408fe5 Bump version to 3.17.92
Update NEWS.
2015-09-16 17:20:30 +02:00
86c6ab3c01 Updated Italian translation 2015-09-15 11:34:41 +00:00
4a6ff94701 Updated Czech translation 2015-09-14 16:04:24 +02:00
e480b08d58 Updated Japanese translation 2015-09-14 00:20:39 +09:00
caf53861d1 Updated Kazakh translation 2015-09-12 16:08:38 +00:00
d0480648ba Updated Persian translation 2015-09-11 23:55:57 +04:30
eb8cfe799f Finnish translation update 2015-09-10 18:46:33 +03:00
b9f2541880 Updated Norwegian bokmål translation. 2015-09-07 19:31:59 +02:00
bde9b08bfe Updated Norwegian bokmål translation. 2015-09-07 19:29:28 +02:00
8a4c862633 background: fix a race condition when loading several animations
When loading several animations at the same time, the last call
overrides the result for all of them.

This commit caches all animations separately based on the source's
schemas.

https://bugzilla.gnome.org/show_bug.cgi?id=741453
2015-09-07 06:51:42 +02:00
785c90f4b8 background: fix indentation 2015-09-07 06:49:55 +02:00
dd6a11e4c7 Updated German translation 2015-09-05 19:42:18 +00:00
64e9503adb Updated Korean translation 2015-09-06 02:06:45 +09:00
36c885bf34 style: Update from sass 2015-09-04 19:15:42 +02:00
ad7cde805d style: Update high-contrast theme
This was missed in fa0e54edbb ...
2015-09-04 18:56:11 +02:00
2c2c67f4dc Fix accidental gnome-shell-sass downgrade
... from commit 030a22d795.
2015-09-04 18:46:11 +02:00
cc4f8dfab0 Updated Kazakh translation 2015-09-04 15:51:16 +00:00
0fb13608c5 Bump version to 3.17.91
Update NEWS.
2015-09-03 15:54:26 +02:00
09dbe17da0 loginDialog: Limit user list to the available height
We currently will always allocate the user list's preferred size, so it
will grow indefinitely and never scroll; limit the height instead to
get the desired scrolling behavior when necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=754525
2015-09-03 15:45:39 +02:00
fdd347c9aa po: Update French translation (remove "à large bande") 2015-09-01 11:11:38 +02:00
572095515b Updated French translation 2015-09-01 08:17:16 +00:00
f2d4aa0822 authPrompt: hide/stop spinner after verfiication completes
When the user successfully types their password, we should hide
the spinner from the button well right away, so it doesn't
consume resources until reset (which may happen significantly later
if the user is vt switched away)

https://bugzilla.gnome.org/show_bug.cgi?id=753891
2015-08-31 15:24:27 -04:00
030a22d795 authPrompt: stop spinner after its hidden
The code previously tried to stop spinner after it was hidden, but
due to an incorrect check was only stoppig it after it was shown.

Also, it was only stopping after hiding due to an animation, and
failing to stop it in the non-animated case.

This left the spinner hidden and running while VT switched away
from the login screen, only stopping when the auth prompt was
reset when switching back.

https://bugzilla.gnome.org/show_bug.cgi?id=753891
2015-08-31 15:19:26 -04:00
c70afcdb44 Updated Hungarian translation 2015-08-31 17:42:42 +00:00
526d6c03b8 Updated Hebrew translation 2015-08-30 21:17:10 +03:00
261b55300d Punjabi Translation updated 2015-08-30 09:28:47 -05:00
e13bfd9a17 Updated Greek translation 2015-08-30 12:04:22 +03:00
e096d18bac Updated Hebrew translation 2015-08-27 23:49:12 +03:00
9460f0e4f3 Updated Dutch translation Master 3.18 2015-08-26 16:45:43 +02:00
e6591f52ac Updated Galician translations 2015-08-26 00:34:43 +02:00
07e3d1fd5c Updated Galician translations 2015-08-26 00:10:39 +02:00
1fbc6b24c8 Updated Turkish translation 2015-08-25 20:05:27 +00:00
982777be94 Updated Chinese (Taiwan) translation 2015-08-25 13:00:33 +00:00
6610a34ad0 Updated Spanish translation 2015-08-25 11:30:58 +02:00
bfa8a0441a Updated Spanish translation 2015-08-25 11:05:27 +02:00
7723622ec7 Updated Portuguese translation 2015-08-25 05:18:36 +00:00
6bcc8c70ef Updated Polish translation 2015-08-24 15:32:49 +02:00
d114d5f95a Fixes to Catalan translation 2015-08-21 18:25:30 +02:00
b5c734da42 Updated Slovak translation 2015-08-21 08:43:23 +00:00
2077bb94c1 Updated Russian translation 2015-08-20 19:58:12 +00:00
65a4ee7fb4 Updated Lithuanian translation 2015-08-20 22:37:07 +03:00
debf293298 Update Catalan translation 2015-08-20 19:25:14 +02:00
a0df3e7d1e network: Unify capitalization in newly changed strings
After fa0e54edbb some strings were inconsistent.
2015-08-20 17:07:46 +02:00
0d67c2d164 Updated Slovak translation 2015-08-20 12:29:10 +00:00
682bd7b622 Bump version to 3.17.90
Update NEWS.
2015-08-20 13:53:36 +02:00
fa0e54edbb status: Refine system status menu
* switch to a one-column layout (and adjust strings/widths
   accordingly
 * remove separator before system menu
 * add link to account settings to user submenu for consistency

https://bugzilla.gnome.org/show_bug.cgi?id=751377
2015-08-20 13:53:36 +02:00
5a0b209663 build: Bump EDS requirement to 3.17.2
In conjunction with 444fa2e0ab
2015-08-11 16:58:22 +02:00
7e8859fd0e Updated Brazilian Portuguese translation 2015-08-10 23:32:43 +00:00
444fa2e0ab calendar-server: Adjust to EDS service version bump 2015-08-10 17:30:38 +02:00
a31455b921 Updated Turkish translation 2015-08-09 17:03:20 +00:00
ac0213a516 viewSelector: Make the compose key focus the search entry
This way composed characters can be used to start searches.

https://bugzilla.gnome.org/show_bug.cgi?id=753320
2015-08-07 15:34:34 +02:00
45a6e2c305 viewSelector: Make backspace focus the search entry
Commit fb0cf64536 regressed this because
there's no unicode character for backspace.

https://bugzilla.gnome.org/show_bug.cgi?id=753319
2015-08-07 15:34:34 +02:00
11cbd396c0 calendar: Tweak message list style
* make icons smaller
 * use small font size in body
 * add some spacing between secondary item and title

https://bugzilla.gnome.org/show_bug.cgi?id=749958
2015-08-05 17:34:11 +02:00
a343445cd2 calendar: Vertically center message icon rather than top-align it
... as requested by the designers.

https://bugzilla.gnome.org/show_bug.cgi?id=749958
2015-08-05 17:33:19 +02:00
be3d62487c calendar: Minor cleanup
Add a constant for the icon size used in message list entries rather
than hardcoding it twice.

https://bugzilla.gnome.org/show_bug.cgi?id=749958
2015-08-05 17:33:19 +02:00
58905bd01a telepathyClient: Use protocol-specific policy
Since commit 79c04c93e4, we launch Polari instead of Empathy when
activating a chat notification for an IRC channel. It therefore makes
sense to follow Polari's notification policy for those notifications
rather than Empathy's.

https://bugzilla.gnome.org/show_bug.cgi?id=752881
2015-08-05 17:22:10 +02:00
08506eac2d gdm: clear user verifier when finished with it
We only need the user verifier for the purpose of user verification.
Once it's complete we should clear it so it doesn't get in the way
later.

This fixes a bug introduced in commit 3c8c5a5570 that leads to the
user session crashing when the login screen is reactivated.

https://bugzilla.gnome.org/show_bug.cgi?id=753181
2015-08-05 09:40:17 -04:00
02c6b0374d gdm: make user list fade-in on vt switch more reliable
We fade out the authentication prompt when a user successfully
logs into a user session. We reset it and fade it back in when
the user switches back to the login screen VT.

The problem is, we only fade it back in if the auth prompt status is
VERIFICATION_SUCCEEDED.  It's possible for it to be NOT_VERIFYING
if the authprompt gets reset for some other reason in the interim.

This commit changes the check to be more precise. We now only skip
the fade-in, if we're already faded in, and we only skip the reset if
we're already reset.

https://bugzilla.gnome.org/show_bug.cgi?id=753181
2015-08-05 09:40:15 -04:00
0722c06275 modalDialog: Match gtk+ buttons style
Follow the design we have in gtk+ for buttons dialogs,
which are at the bottom and they expand full width, having
the same amount of space for each one.

Also, since this removes any space for non-button widgets
in the button area, move the spinner present in the auth prompt
dialog next to the password entry.

https://bugzilla.gnome.org/show_bug.cgi?id=746108
2015-08-05 14:44:47 +02:00
17a4044d97 data: Revert accidental submodule change 2015-08-05 14:24:42 +02:00
27a7194634 spinner: use a 60fps spinner
- sync with gtk+ and provide a fluid spinner

https://bugzilla.gnome.org/show_bug.cgi?id=753064
2015-08-05 13:44:32 +02:00
d73f560bcc Update Catalan translation 2015-08-02 22:43:05 +02:00
108 changed files with 23235 additions and 16831 deletions

132
NEWS
View File

@ -1,3 +1,135 @@
3.18.5
======
* Fix deleting chat notifications in calendar [Florian; #747991]
* Fix recount issue in network agent component [Christophe; #759708]
* Plug a memory leak [Aaron; #735705]
* Do not assert on non-fatal runtime errors [Florian; #765061]
Contributors:
Christophe Fergeau, Florian Müllner, Aaron Plattner
Translations:
Matej Urbančič [sl], Marek Černocký [cs]
3.18.4
======
* Fix thumbnail scaling in window switcher on HiDPI [Florian; #758676]
* loginDialog: Update user list on user changes [Michael; #758568]
* gdm: Do not allow bypassing disabled Sign In button [Michael; #746180]
* Correctly identify VPN secret requests [Lubomir; #760999]
Contributors:
Michael Catanzaro, Florian Müllner, Lubomir Rintel
Translations:
Kristjan SCHMIDT [eo], Daniel Korostil [uk], Andika Triwidada [id]
3.18.3
======
* Fix browser plugin crash in Firefox [Carlos; #737932, #757940]
Contributors:
Carlos Garcia Campos
3.18.2
======
* Fix fullscreen animation glitches [Florian, Cosimo; #756697, #756714]
* Fix window menu being closed immediately in top orientation [Rui; #756605]
* Respect text-scaling factor under wayland [Owen; #756447]
* Fix login screen getting stuck after authentification [Ray; #754814]
* Fix overview being toggled while still animating [Rui; #756925]
* Improve robustness of browser plugin [Carlos; #737932, #757940]
* Misc. bug fixes [Owen, Florian; #756983, #757150, #757779]
Contributors:
Cosimo Cecchi, Carlos Garcia Campos, Rui Matos, Florian Müllner, Ray Strode,
Owen W. Taylor
Translations:
Kjartan Maraas [nb], Khaled Hosny [ar], Sveinn í Felli [is],
Balázs Meskó [hu], Daniel Șerbănescu [ro], Aron Xu [zh_CN],
Anthony Fok [zh_TW]
3.18.1
======
* Fix screen freezes when a notification is pushed [Carlos; #755425]
* Fix overzealous ellipsization in system status menu [Adel, Florian; #708472]
* Hide app menu when disabled by setting [Florian; #745919]
* Fix lightbox effect when animations are disabled [Rui; #755827]
* Do not mark hotplug notifications as critical [Florian; #657923]
* Fix icons getting cut off in dash [Florian; #745649]
* Animate fullscreen/unfullscreen operations [Cosimo; #707248]
* Misc. bug fixes [Florian, Owen; #748919, #674799, #754581]
Contributors:
Emmanuele Bassi, Michael Catanzaro, Cosimo Cecchi, Matthias Clasen,
Adel Gadllah, Carlos Garnacho, Ekaterina Gerasimova, Rui Matos,
Florian Müllner, Owen W. Taylor
Translations:
Марко Костић [sr], Милош Поповић [sr@latin], Khaled Hosny [ar],
Trần Ngọc Quân [vi], Petr Kovar [cs], Alexandre Franke [fr],
Fran Dieguez [gl], Anders Jonsson [sv], Piotr Drąg [pl], Dušan Kazik [sk],
Milo Casagrande [it], Changwoo Ryu [ko], Stas Solovey [ru],
Rafael Fontenelle [pt_BR], Tom Tryfonidis [el], Aurimas Černius [lt],
Seán de Búrca [ga], Christian Kirbach [de], Jiri Grönroos [fi],
Pedro Albuquerque [pt], Baurzhan Muftakhidinov [kk], Daniel Mustieles [es],
Marek Černocký [cs], Ask Hjorth Larsen [da], Inaki Larranaga Murgoitio [eu]
3.18.0
======
Translations:
Sendy Aditya Suryana [id], Kris Thomsen [da], Seán de Búrca [ga],
Andika Triwidada [id], Enrico Nicoletto [pt_BR], Anders Jonsson [sv],
Rūdolfs Mazurs [lv]
3.17.92
=======
* Fix race when loading multiple background animations [Josselin; #741453]
Contributors:
Michael Biebl, Josselin Mouette, Florian Müllner
Translations:
Baurzhan Muftakhidinov [kk], Changwoo Ryu [ko], Christian Kirbach [de],
Kjartan Maraas [nb], Jiri Grönroos [fi], Arash Mousavi [fa],
Jiro Matsuzawa [ja], Marek Černocký [cs], Milo Casagrande [it]
3.17.91
=======
* Fix login screen spinner causing wakeups while VT-switched away
[Ray, Rui; #753891]
* Fix scrolling of user list on login screen [Florian; #754525]
Contributors:
Piotr Drąg, Rui Matos, Florian Müllner, Ray Strode
Translations:
Dušan Kazik [sk], Jordi Mas [ca], Aurimas Černius [lt], Stas Solovey [ru],
Piotr Drąg [pl], Pedro Albuquerque [pt], Daniel Mustieles [es],
Chao-Hsiung Liao [zh_TW], Muhammet Kara [tr], Fran Dieguez [gl],
Hannie Dumoleyn [nl], Yosef Or Boczko [he], Tom Tryfonidis [el],
A S Alam [pa], Balázs Úr [hu], Alexandre Franke [fr], Frédéric Péters [fr]
3.17.90
=======
* Avoid caret/focus viewport changes during pointer movement [Rui; #752138]
* Match GTK+'s modal dialogs for system modal dialogs [Carlos; #746108]
* Refine message list style [Florian; #749958]
* Fix type-ahead behavior for backspace and compose key [Rui; #753319, #753320]
* Refine the system status menu [Florian; #751377]
* Misc. bug fixes and cleanups [Bastien, Ray, Florian, Jakub; #752779, #752739,
#741366, #651503, #753064, #753181, #752881]
Contributors:
Rui Matos, Florian Müllner, Bastien Nocera, Carlos Soriano, Jakub Steiner,
Ray Strode, Rico Tzschichholz
Translations:
Marek Černocký [cs], Kjartan Maraas [nb], Jordi Mas [ca], Muhammet Kara [tr],
Enrico Nicoletto [pt_BR]
3.17.4 3.17.4
====== ======
* Fix fuzziness of app menu icon [Jakub; #747932] * Fix fuzziness of app menu icon [Jakub; #747932]

View File

@ -3,7 +3,10 @@ mozillalibdir = $(BROWSER_PLUGIN_DIR)
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined # Browsers can unload and reload the module while browsing, which is not supported by GObject.
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
libgnome_shell_browser_plugin_la_LIBADD = \ libgnome_shell_browser_plugin_la_LIBADD = \
$(BROWSER_PLUGIN_LIBS) $(BROWSER_PLUGIN_LIBS)

View File

@ -43,10 +43,6 @@
#define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation" #define EXTENSION_DISABLE_VERSION_CHECK_KEY "disable-extension-version-validation"
typedef struct {
GDBusProxy *proxy;
} PluginData;
static NPNetscapeFuncs funcs; static NPNetscapeFuncs funcs;
static inline gchar * static inline gchar *
@ -145,121 +141,6 @@ check_origin_and_protocol (NPP instance)
return ret; return ret;
} }
/* =============== public entry points =================== */
NPError
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
{
/* global initialization routine, called once when plugin
is loaded */
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));
plugin->size = sizeof(NPPluginFuncs);
plugin->newp = NPP_New;
plugin->destroy = NPP_Destroy;
plugin->getvalue = NPP_GetValue;
plugin->setwindow = NPP_SetWindow;
return NPERR_NO_ERROR;
}
NPError
NP_Shutdown(void)
{
return NPERR_NO_ERROR;
}
const char*
NP_GetMIMEDescription(void)
{
return PLUGIN_MIME_STRING;
}
NPError
NP_GetValue(void *instance,
NPPVariable variable,
void *value)
{
switch (variable) {
case NPPVpluginNameString:
*(char**)value = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*(char**)value = PLUGIN_DESCRIPTION;
break;
default:
;
}
return NPERR_NO_ERROR;
}
NPError
NPP_New(NPMIMEType mimetype,
NPP instance,
uint16_t mode,
int16_t argc,
char **argn,
char **argv,
NPSavedData *saved)
{
/* instance initialization function */
PluginData *data;
GError *error = NULL;
g_debug ("plugin created");
if (!check_origin_and_protocol (instance))
return NPERR_GENERIC_ERROR;
data = g_slice_new (PluginData);
instance->pdata = data;
data->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL, /* interface info */
"org.gnome.Shell",
"/org/gnome/Shell",
"org.gnome.Shell.Extensions",
NULL, /* GCancellable */
&error);
if (!data->proxy)
{
/* ignore error if the shell is not running, otherwise warn */
if (error->domain != G_DBUS_ERROR ||
error->code != G_DBUS_ERROR_NAME_HAS_NO_OWNER)
{
g_warning ("Failed to set up Shell proxy: %s", error->message);
}
g_clear_error (&error);
return NPERR_GENERIC_ERROR;
}
g_debug ("plugin created successfully");
return NPERR_NO_ERROR;
}
NPError
NPP_Destroy(NPP instance,
NPSavedData **saved)
{
/* instance finalization function */
PluginData *data = instance->pdata;
g_debug ("plugin destroyed");
g_object_unref (data->proxy);
g_slice_free (PluginData, data);
return NPERR_NO_ERROR;
}
/* =================== scripting interface =================== */ /* =================== scripting interface =================== */
typedef struct { typedef struct {
@ -282,6 +163,14 @@ on_shell_signal (GDBusProxy *proxy,
{ {
PluginObject *obj = user_data; PluginObject *obj = user_data;
/* FIXME: We have half a dozen bug reports in which this function crashes in
* WebKit due to a null NPObject. This should never happen, but since it is
* happening, let's turn the crash into a critical.
*
* https://bugzilla.gnome.org/show_bug.cgi?id=737932
*/
g_return_if_fail (obj->instance);
if (strcmp (signal_name, "ExtensionStatusChanged") == 0) if (strcmp (signal_name, "ExtensionStatusChanged") == 0)
{ {
gchar *uuid; gchar *uuid;
@ -312,6 +201,12 @@ on_shell_appeared (GDBusConnection *connection,
{ {
PluginObject *obj = (PluginObject*) user_data; PluginObject *obj = (PluginObject*) user_data;
/* FIXME: Not sure if this is ever hit or not, but let's play it safe.
*
* https://bugzilla.gnome.org/show_bug.cgi?id=737932
*/
g_return_if_fail (obj->instance);
if (obj->restart_listener) if (obj->restart_listener)
{ {
NPVariant result = { NPVariantType_Void }; NPVariant result = { NPVariantType_Void };
@ -330,45 +225,18 @@ static NPObject *
plugin_object_allocate (NPP instance, plugin_object_allocate (NPP instance,
NPClass *klass) NPClass *klass)
{ {
PluginData *data = instance->pdata; PluginObject *obj = (PluginObject *) funcs.memalloc (sizeof (PluginObject));
PluginObject *obj = g_slice_new0 (PluginObject);
memset (obj, 0, sizeof (PluginObject));
obj->instance = instance; obj->instance = instance;
obj->proxy = g_object_ref (data->proxy);
obj->settings = g_settings_new (SHELL_SCHEMA);
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
G_CALLBACK (on_shell_signal), obj);
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION, return (NPObject*) obj;
"org.gnome.Shell",
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_shell_appeared,
NULL,
obj,
NULL);
g_debug ("plugin object created");
return (NPObject*)obj;
} }
static void static void
plugin_object_deallocate (NPObject *npobj) plugin_object_deallocate (NPObject *npobj)
{ {
PluginObject *obj = (PluginObject*)npobj; funcs.memfree (npobj);
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
g_object_unref (obj->proxy);
if (obj->listener)
funcs.releaseobject (obj->listener);
if (obj->watch_name_id)
g_bus_unwatch_name (obj->watch_name_id);
g_debug ("plugin object destroyed");
g_slice_free (PluginObject, obj);
} }
static inline gboolean static inline gboolean
@ -1019,6 +887,149 @@ init_methods_and_properties (void)
onextension_changed_id = funcs.getstringidentifier ("onchange"); onextension_changed_id = funcs.getstringidentifier ("onchange");
} }
/* =============== public entry points =================== */
NPError
NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
{
/* global initialization routine, called once when plugin
is loaded */
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));
plugin->size = sizeof(NPPluginFuncs);
plugin->newp = NPP_New;
plugin->destroy = NPP_Destroy;
plugin->getvalue = NPP_GetValue;
plugin->setwindow = NPP_SetWindow;
plugin->event = NPP_HandleEvent;
return NPERR_NO_ERROR;
}
NPError
NP_Shutdown(void)
{
return NPERR_NO_ERROR;
}
const char*
NP_GetMIMEDescription(void)
{
return PLUGIN_MIME_STRING;
}
NPError
NP_GetValue(void *instance,
NPPVariable variable,
void *value)
{
switch (variable) {
case NPPVpluginNameString:
*(char**)value = PLUGIN_NAME;
break;
case NPPVpluginDescriptionString:
*(char**)value = PLUGIN_DESCRIPTION;
break;
default:
;
}
return NPERR_NO_ERROR;
}
NPError
NPP_New(NPMIMEType mimetype,
NPP instance,
uint16_t mode,
int16_t argc,
char **argn,
char **argv,
NPSavedData *saved)
{
/* instance initialization function */
PluginObject *obj;
GError *error = NULL;
g_debug ("plugin created");
if (!check_origin_and_protocol (instance))
return NPERR_GENERIC_ERROR;
/* set windowless mode */
funcs.setvalue(instance, NPPVpluginWindowBool, NULL);
g_debug ("creating scriptable object");
init_methods_and_properties ();
obj = (PluginObject *) funcs.createobject (instance, &plugin_class);
instance->pdata = obj;
obj->proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
G_DBUS_PROXY_FLAGS_NONE,
NULL, /* interface info */
"org.gnome.Shell",
"/org/gnome/Shell",
"org.gnome.Shell.Extensions",
NULL, /* GCancellable */
&error);
if (!obj->proxy)
{
/* ignore error if the shell is not running, otherwise warn */
if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_NAME_HAS_NO_OWNER))
{
g_warning ("Failed to set up Shell proxy: %s", error->message);
}
g_clear_error (&error);
return NPERR_GENERIC_ERROR;
}
obj->settings = g_settings_new (SHELL_SCHEMA);
obj->signal_id = g_signal_connect (obj->proxy, "g-signal",
G_CALLBACK (on_shell_signal), obj);
obj->watch_name_id = g_bus_watch_name (G_BUS_TYPE_SESSION,
"org.gnome.Shell",
G_BUS_NAME_WATCHER_FLAGS_NONE,
on_shell_appeared,
NULL,
obj,
NULL);
g_debug ("plugin created successfully");
return NPERR_NO_ERROR;
}
NPError
NPP_Destroy(NPP instance,
NPSavedData **saved)
{
/* instance finalization function */
PluginObject *obj = (PluginObject *) instance->pdata;
if (!obj)
return NPERR_INVALID_INSTANCE_ERROR;
g_debug ("plugin destroyed");
g_signal_handler_disconnect (obj->proxy, obj->signal_id);
g_object_unref (obj->proxy);
if (obj->listener)
funcs.releaseobject (obj->listener);
if (obj->restart_listener)
funcs.releaseobject (obj->restart_listener);
if (obj->watch_name_id)
g_bus_unwatch_name (obj->watch_name_id);
funcs.releaseobject((NPObject *)obj);
return NPERR_NO_ERROR;
}
NPError NPError
NPP_GetValue(NPP instance, NPP_GetValue(NPP instance,
NPPVariable variable, NPPVariable variable,
@ -1029,13 +1040,10 @@ NPP_GetValue(NPP instance,
switch (variable) { switch (variable) {
case NPPVpluginScriptableNPObject: case NPPVpluginScriptableNPObject:
g_debug ("creating scriptable object"); g_debug ("creating scriptable object");
init_methods_and_properties (); if (!instance->pdata)
return NPERR_INVALID_INSTANCE_ERROR;
*(NPObject**)value = funcs.createobject (instance, &plugin_class); *(NPObject**)value = instance->pdata;
break;
case NPPVpluginNeedsXEmbed:
*(bool *)value = TRUE;
break; break;
default: default:
@ -1053,3 +1061,11 @@ NPP_SetWindow(NPP instance,
{ {
return NPERR_NO_ERROR; return NPERR_NO_ERROR;
} }
int16_t
NPP_HandleEvent(NPP instance,
void *event)
{
/* Ignore the event */
return FALSE;
}

View File

@ -1,5 +1,6 @@
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.17.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell]) AC_INIT([gnome-shell],[3.18.5],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AX_IS_RELEASE([git-directory])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c]) AC_CONFIG_SRCDIR([src/shell-global.c])
@ -74,13 +75,13 @@ AS_IF([test x$enable_systemd != xno], [
AC_MSG_RESULT($enable_systemd) AC_MSG_RESULT($enable_systemd)
CLUTTER_MIN_VERSION=1.21.5 CLUTTER_MIN_VERSION=1.21.5
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1 GOBJECT_INTROSPECTION_MIN_VERSION=1.45.4
GJS_MIN_VERSION=1.39.0 GJS_MIN_VERSION=1.39.0
MUTTER_MIN_VERSION=3.17.4 MUTTER_MIN_VERSION=3.18.1
GTK_MIN_VERSION=3.15.0 GTK_MIN_VERSION=3.15.0
GIO_MIN_VERSION=2.45.3 GIO_MIN_VERSION=2.45.3
LIBECAL_MIN_VERSION=3.5.3 LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.13.90 LIBEDATASERVER_MIN_VERSION=3.17.2
TELEPATHY_GLIB_MIN_VERSION=0.17.5 TELEPATHY_GLIB_MIN_VERSION=0.17.5
POLKIT_MIN_VERSION=0.100 POLKIT_MIN_VERSION=0.100
STARTUP_NOTIFICATION_MIN_VERSION=0.11 STARTUP_NOTIFICATION_MIN_VERSION=0.11
@ -220,7 +221,7 @@ if test "$enable_man" != no; then
fi fi
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no) AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
GNOME_COMPILE_WARNINGS([error]) AX_COMPILER_FLAGS()
case "$WARN_CFLAGS" in case "$WARN_CFLAGS" in
*-Werror*) *-Werror*)
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations" WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
@ -269,7 +270,7 @@ Build configuration:
Prefix: ${prefix} Prefix: ${prefix}
Source code location: ${srcdir} Source code location: ${srcdir}
Compiler: ${CC} Compiler: ${CC}
Compiler Warnings: $enable_compile_warnings Compiler Warnings: $ax_enable_compile_warnings
Support for NetworkManager: $have_networkmanager Support for NetworkManager: $have_networkmanager
Support for GStreamer recording: $build_recorder Support for GStreamer recording: $build_recorder

View File

@ -37,10 +37,9 @@ stage {
icon-shadow: 0 1px black; } icon-shadow: 0 1px black; }
.button:focus { .button:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; } icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.button:insensitive { .button:insensitive {
color: #7f7f7f; color: #7f7f7f;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@ -52,9 +51,46 @@ stage {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button {
border-right-width: 1px;
color: #eeeeec;
background-color: #2e3436;
border-color: rgba(0, 0, 0, 0.7);
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
padding: 12px; }
.modal-dialog-linked-button:insensitive {
color: #7f7f7f;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(62, 67, 68, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.modal-dialog-linked-button:active {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button:focus {
color: #eeeeec;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.modal-dialog-linked-button:first-child {
border-radius: 0px 0px 0px 6px; }
.modal-dialog-linked-button:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 0px; }
.modal-dialog-linked-button:first-child:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 6px; }
/* Entries */ /* Entries */
StEntry { StEntry {
@ -160,11 +196,12 @@ StScrollBar {
background-color: white; } background-color: white; }
.modal-dialog { .modal-dialog {
border-radius: 5px; border-radius: 9px;
color: #eeeeec; color: #eeeeec;
background-color: rgba(23, 25, 26, 0.95); background-color: rgba(23, 25, 26, 0.95);
border: 3px solid rgba(238, 238, 236, 0.5); border: 3px solid rgba(238, 238, 236, 0.5); }
padding: 24px; } .modal-dialog .modal-dialog-content-box {
padding: 24px; }
.modal-dialog .run-dialog-entry { .modal-dialog .run-dialog-entry {
width: 20em; width: 20em;
margin-bottom: 6px; } margin-bottom: 6px; }
@ -179,10 +216,6 @@ StScrollBar {
color: #d6d6d1; color: #d6d6d1;
padding-bottom: .4em; } padding-bottom: .4em; }
.button-dialog-button-box {
spacing: 18px;
padding-top: 48px; }
.show-processes-dialog-subject, .show-processes-dialog-subject,
.mount-question-dialog-subject, .mount-question-dialog-subject,
.end-session-dialog-subject { .end-session-dialog-subject {
@ -375,9 +408,9 @@ StScrollBar {
spacing-rows: 15px; spacing-rows: 15px;
spacing-columns: 1em; } spacing-columns: 1em; }
/* Popvers/Menus */ /* Popovers/Menus */
.popup-menu { .popup-menu {
min-width: 200px; } min-width: 15em; }
.popup-menu .popup-sub-menu { .popup-menu .popup-sub-menu {
background-color: black; background-color: black;
box-shadow: inset 0 -1px 0px #0d0d0d; } box-shadow: inset 0 -1px 0px #0d0d0d; }
@ -719,7 +752,7 @@ StScrollBar {
/* Message list */ /* Message list */
.message-list { .message-list {
width: 420px; } width: 31.5em; }
.message-list-sections { .message-list-sections {
spacing: 1.5em; } spacing: 1.5em; }
@ -754,7 +787,12 @@ StScrollBar {
padding: 8px 8px 8px 0px; } padding: 8px 8px 8px 0px; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
icon-size: 48px; } icon-size: 32px; }
.message-secondary-bin:ltr {
padding-left: 8px; }
.message-secondary-bin:rtl {
padding-right: 8px; }
.message-secondary-bin { .message-secondary-bin {
color: #999999; } color: #999999; }
@ -763,14 +801,20 @@ StScrollBar {
icon-size: 16px; } icon-size: 16px; }
.message-title { .message-title {
font-weight: bold; } font-weight: bold;
font-size: 1.1em; }
.message-content { .message-content {
padding: 8px; } padding: 8px;
font-size: .9em; }
.system-switch-user-submenu-icon { .system-switch-user-submenu-icon.user-icon {
icon-size: 24px; icon-size: 20px;
border: 1px solid rgba(255, 255, 255, 0.4); } padding: 0 2px; }
.system-switch-user-submenu-icon.default-icon {
icon-size: 16px;
padding: 0 4px; }
#appMenu { #appMenu {
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg"); spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
@ -779,7 +823,7 @@ StScrollBar {
color: transparent; } color: transparent; }
.aggregate-menu { .aggregate-menu {
width: 360px; } min-width: 21em; }
.aggregate-menu .popup-menu-icon { .aggregate-menu .popup-menu-icon {
padding: 0 4px; } padding: 0 4px; }
@ -834,7 +878,8 @@ StScrollBar {
min-width: 470px; } min-width: 470px; }
.nm-dialog-content { .nm-dialog-content {
spacing: 20px; } spacing: 20px;
padding: 24px; }
.nm-dialog-header-hbox { .nm-dialog-header-hbox {
spacing: 10px; } spacing: 10px; }
@ -1016,7 +1061,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: none; box-shadow: inset 0 0 black;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.app-view-control:first-child { .app-view-control:first-child {
@ -1335,10 +1380,9 @@ StScrollBar {
color: white; } color: white; }
.keyboard-key:focus { .keyboard-key:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; } icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.keyboard-key:hover, .keyboard-key:checked { .keyboard-key:hover, .keyboard-key:checked {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@ -1350,7 +1394,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: none; box-shadow: inset 0 0 black;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.keyboard-key:grayed { .keyboard-key:grayed {
@ -1443,7 +1487,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #1c5187; background-color: #1c5187;
box-shadow: none; box-shadow: inset 0 0 black;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.login-dialog .modal-dialog-button:default:insensitive { .login-dialog .modal-dialog-button:default:insensitive {

View File

@ -37,10 +37,9 @@ stage {
icon-shadow: 0 1px black; } icon-shadow: 0 1px black; }
.button:focus { .button:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; } icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.button:insensitive { .button:insensitive {
color: #939695; color: #939695;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@ -52,9 +51,46 @@ stage {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button {
border-right-width: 1px;
color: #eeeeec;
background-color: #2e3436;
border-color: rgba(0, 0, 0, 0.7);
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
padding: 12px; }
.modal-dialog-linked-button:insensitive {
color: #939695;
border-color: rgba(0, 0, 0, 0.7);
background-color: rgba(66, 71, 73, 0.7);
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.modal-dialog-linked-button:active {
color: white;
border-color: rgba(0, 0, 0, 0.7);
background-color: #222728;
box-shadow: inset 0 0 black;
text-shadow: none;
icon-shadow: none; }
.modal-dialog-linked-button:focus {
color: #eeeeec;
text-shadow: 0 1px black;
icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.modal-dialog-linked-button:first-child {
border-radius: 0px 0px 0px 6px; }
.modal-dialog-linked-button:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 0px; }
.modal-dialog-linked-button:first-child:last-child {
border-right-width: 0px;
border-radius: 0px 0px 6px 6px; }
/* Entries */ /* Entries */
StEntry { StEntry {
@ -160,11 +196,12 @@ StScrollBar {
background-color: white; } background-color: white; }
.modal-dialog { .modal-dialog {
border-radius: 5px; border-radius: 9px;
color: #eeeeec; color: #eeeeec;
background-color: rgba(23, 25, 26, 0.95); background-color: rgba(23, 25, 26, 0.95);
border: 3px solid rgba(238, 238, 236, 0.5); border: 3px solid rgba(238, 238, 236, 0.5); }
padding: 24px; } .modal-dialog .modal-dialog-content-box {
padding: 24px; }
.modal-dialog .run-dialog-entry { .modal-dialog .run-dialog-entry {
width: 20em; width: 20em;
margin-bottom: 6px; } margin-bottom: 6px; }
@ -179,10 +216,6 @@ StScrollBar {
color: #d6d6d1; color: #d6d6d1;
padding-bottom: .4em; } padding-bottom: .4em; }
.button-dialog-button-box {
spacing: 18px;
padding-top: 48px; }
.show-processes-dialog-subject, .show-processes-dialog-subject,
.mount-question-dialog-subject, .mount-question-dialog-subject,
.end-session-dialog-subject { .end-session-dialog-subject {
@ -375,9 +408,9 @@ StScrollBar {
spacing-rows: 15px; spacing-rows: 15px;
spacing-columns: 1em; } spacing-columns: 1em; }
/* Popvers/Menus */ /* Popovers/Menus */
.popup-menu { .popup-menu {
min-width: 200px; } min-width: 15em; }
.popup-menu .popup-sub-menu { .popup-menu .popup-sub-menu {
background-color: #343a3a; background-color: #343a3a;
box-shadow: inset 0 -1px 0px #282c2c; } box-shadow: inset 0 -1px 0px #282c2c; }
@ -719,7 +752,7 @@ StScrollBar {
/* Message list */ /* Message list */
.message-list { .message-list {
width: 420px; } width: 31.5em; }
.message-list-sections { .message-list-sections {
spacing: 1.5em; } spacing: 1.5em; }
@ -754,7 +787,12 @@ StScrollBar {
padding: 8px 8px 8px 0px; } padding: 8px 8px 8px 0px; }
.message-icon-bin > StIcon { .message-icon-bin > StIcon {
icon-size: 48px; } icon-size: 32px; }
.message-secondary-bin:ltr {
padding-left: 8px; }
.message-secondary-bin:rtl {
padding-right: 8px; }
.message-secondary-bin { .message-secondary-bin {
color: #8e8e80; } color: #8e8e80; }
@ -763,14 +801,20 @@ StScrollBar {
icon-size: 16px; } icon-size: 16px; }
.message-title { .message-title {
font-weight: bold; } font-weight: bold;
font-size: 1.1em; }
.message-content { .message-content {
padding: 8px; } padding: 8px;
font-size: .9em; }
.system-switch-user-submenu-icon { .system-switch-user-submenu-icon.user-icon {
icon-size: 24px; icon-size: 20px;
border: 1px solid rgba(238, 238, 236, 0.4); } padding: 0 2px; }
.system-switch-user-submenu-icon.default-icon {
icon-size: 16px;
padding: 0 4px; }
#appMenu { #appMenu {
spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg"); spinner-image: url("resource:///org/gnome/shell/theme/process-working.svg");
@ -779,7 +823,7 @@ StScrollBar {
color: transparent; } color: transparent; }
.aggregate-menu { .aggregate-menu {
width: 360px; } min-width: 21em; }
.aggregate-menu .popup-menu-icon { .aggregate-menu .popup-menu-icon {
padding: 0 4px; } padding: 0 4px; }
@ -834,7 +878,8 @@ StScrollBar {
min-width: 470px; } min-width: 470px; }
.nm-dialog-content { .nm-dialog-content {
spacing: 20px; } spacing: 20px;
padding: 24px; }
.nm-dialog-header-hbox { .nm-dialog-header-hbox {
spacing: 10px; } spacing: 10px; }
@ -1016,7 +1061,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: none; box-shadow: inset 0 0 black;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.app-view-control:first-child { .app-view-control:first-child {
@ -1335,10 +1380,9 @@ StScrollBar {
color: white; } color: white; }
.keyboard-key:focus { .keyboard-key:focus {
color: #eeeeec; color: #eeeeec;
border-color: #215d9c;
box-shadow: inset 0 1px #454f52;
text-shadow: 0 1px black; text-shadow: 0 1px black;
icon-shadow: 0 1px black; } icon-shadow: 0 1px black;
box-shadow: inset 0px 0px 0px 1px #215d9c; }
.keyboard-key:hover, .keyboard-key:checked { .keyboard-key:hover, .keyboard-key:checked {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
@ -1350,7 +1394,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #222728; background-color: #222728;
box-shadow: none; box-shadow: inset 0 0 black;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.keyboard-key:grayed { .keyboard-key:grayed {
@ -1443,7 +1487,7 @@ StScrollBar {
color: white; color: white;
border-color: rgba(0, 0, 0, 0.7); border-color: rgba(0, 0, 0, 0.7);
background-color: #1c5187; background-color: #1c5187;
box-shadow: none; box-shadow: inset 0 0 black;
text-shadow: none; text-shadow: none;
icon-shadow: none; } icon-shadow: none; }
.login-dialog .modal-dialog-button:default:insensitive { .login-dialog .modal-dialog-button:default:insensitive {

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -14,7 +14,7 @@ const ShellEntry = imports.ui.shellEntry;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget; const UserWidget = imports.ui.userWidget;
const DEFAULT_BUTTON_WELL_ICON_SIZE = 24; const DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0; const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3; const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
@ -189,7 +189,8 @@ const AuthPrompt = new Lang.Class({
this._updateNextButtonSensitivity(this._entry.text.length > 0); this._updateNextButtonSensitivity(this._entry.text.length > 0);
})); }));
this._entry.clutter_text.connect('activate', Lang.bind(this, function() { this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
this.emit('next'); if (this.nextButton.reactive)
this.emit('next');
})); }));
}, },
@ -258,6 +259,7 @@ const AuthPrompt = new Lang.Class({
}, },
_onVerificationComplete: function() { _onVerificationComplete: function() {
this.setActorInDefaultButtonWell(null);
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
this.cancelButton.reactive = false; this.cancelButton.reactive = false;
}, },
@ -281,6 +283,12 @@ const AuthPrompt = new Lang.Class({
if (oldActor) if (oldActor)
Tweener.removeTweens(oldActor); Tweener.removeTweens(oldActor);
let wasSpinner;
if (oldActor == this._spinner.actor)
wasSpinner = true;
else
wasSpinner = false;
let isSpinner; let isSpinner;
if (actor == this._spinner.actor) if (actor == this._spinner.actor)
isSpinner = true; isSpinner = true;
@ -290,6 +298,11 @@ const AuthPrompt = new Lang.Class({
if (this._defaultButtonWellActor != actor && oldActor) { if (this._defaultButtonWellActor != actor && oldActor) {
if (!animate) { if (!animate) {
oldActor.opacity = 0; oldActor.opacity = 0;
if (wasSpinner) {
if (this._spinner)
this._spinner.stop();
}
} else { } else {
Tweener.addTween(oldActor, Tweener.addTween(oldActor,
{ opacity: 0, { opacity: 0,
@ -298,7 +311,7 @@ const AuthPrompt = new Lang.Class({
transition: 'linear', transition: 'linear',
onCompleteScope: this, onCompleteScope: this,
onComplete: function() { onComplete: function() {
if (isSpinner) { if (wasSpinner) {
if (this._spinner) if (this._spinner)
this._spinner.stop(); this._spinner.stop();
} }
@ -489,6 +502,7 @@ const AuthPrompt = new Lang.Class({
finish: function(onComplete) { finish: function(onComplete) {
if (!this._userVerifier.hasPendingMessages) { if (!this._userVerifier.hasPendingMessages) {
this._userVerifier.clear();
onComplete(); onComplete();
return; return;
} }
@ -496,6 +510,7 @@ const AuthPrompt = new Lang.Class({
let signalId = this._userVerifier.connect('no-more-messages', let signalId = this._userVerifier.connect('no-more-messages',
Lang.bind(this, function() { Lang.bind(this, function() {
this._userVerifier.disconnect(signalId); this._userVerifier.disconnect(signalId);
this._userVerifier.clear();
onComplete(); onComplete();
})); }));
}, },

View File

@ -16,6 +16,34 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>. * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/ */
/*
* In order for transformation animations to look good, they need to be
* incremental and have some order to them (e.g., fade out hidden items,
* then shrink to close the void left over). Chaining animations in this way can
* be error-prone and wordy using just Tweener callbacks.
*
* The classes in this file help with this:
*
* - Task. encapsulates schedulable work to be run in a specific scope.
*
* - ConsecutiveBatch. runs a series of tasks in order and completes
* when the last in the series finishes.
*
* - ConcurrentBatch. runs a set of tasks at the same time and completes
* when the last to finish completes.
*
* - Hold. prevents a batch from completing the pending task until
* the hold is released.
*
* The tasks associated with a batch are specified in a list at batch
* construction time as either task objects or plain functions.
* Batches are task objects, themselves, so they can be nested.
*
* These classes aren't specific to GDM, but were found to be unintuitive and so
* are not used elsewhere. These APIs may ultimately get dropped entirely and
* replaced by something else.
*/
const Lang = imports.lang; const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;

View File

@ -96,7 +96,7 @@ const UserListItem = new Lang.Class({
}, },
_onDestroy: function() { _onDestroy: function() {
this._user.disconnect(this._userChangedId); this.user.disconnect(this._userChangedId);
}, },
_onClicked: function() { _onClicked: function() {
@ -212,6 +212,10 @@ const UserList = new Lang.Class({
return item; return item;
}, },
containsUser: function(user) {
return this._items[user.get_user_name()] != null;
},
addUser: function(user) { addUser: function(user) {
if (!user.is_loaded) if (!user.is_loaded)
return; return;
@ -535,6 +539,9 @@ const LoginDialog = new Lang.Class({
let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2; let centerX = dialogBox.x1 + (dialogBox.x2 - dialogBox.x1) / 2;
let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2; let centerY = dialogBox.y1 + (dialogBox.y2 - dialogBox.y1) / 2;
natWidth = Math.min(natWidth, dialogBox.x2 - dialogBox.x1);
natHeight = Math.min(natHeight, dialogBox.y2 - dialogBox.y1);
actorBox.x1 = Math.floor(centerX - natWidth / 2); actorBox.x1 = Math.floor(centerX - natWidth / 2);
actorBox.y1 = Math.floor(centerY - natHeight / 2); actorBox.y1 = Math.floor(centerY - natHeight / 2);
actorBox.x2 = actorBox.x1 + natWidth; actorBox.x2 = actorBox.x1 + natWidth;
@ -874,7 +881,7 @@ const LoginDialog = new Lang.Class({
}, },
_loginScreenSessionActivated: function() { _loginScreenSessionActivated: function() {
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED) if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
return; return;
Tweener.addTween(this.actor, Tweener.addTween(this.actor,
@ -891,7 +898,8 @@ const LoginDialog = new Lang.Class({
}, },
onUpdateScope: this, onUpdateScope: this,
onComplete: function() { onComplete: function() {
this._authPrompt.reset(); if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
this._authPrompt.reset();
}, },
onCompleteScope: this }); onCompleteScope: this });
}, },
@ -920,11 +928,7 @@ const LoginDialog = new Lang.Class({
}, },
onUpdateScope: this, onUpdateScope: this,
onComplete: function() { onComplete: function() {
let id = Mainloop.idle_add(Lang.bind(this, function() { this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] this._greeter.call_start_session_when_ready_sync');
}, },
onCompleteScope: this }); onCompleteScope: this });
}, },
@ -1126,6 +1130,10 @@ const LoginDialog = new Lang.Class({
this._userManager.disconnect(this._userRemovedId); this._userManager.disconnect(this._userRemovedId);
this._userRemovedId = 0; this._userRemovedId = 0;
} }
if (this._userChangedId) {
this._userManager.disconnect(this._userChangedId);
this._userChangedId = 0;
}
this._textureCache.disconnect(this._updateLogoTextureId); this._textureCache.disconnect(this._updateLogoTextureId);
Main.layoutManager.disconnect(this._startupCompleteId); Main.layoutManager.disconnect(this._startupCompleteId);
if (this._settings) { if (this._settings) {
@ -1172,6 +1180,14 @@ const LoginDialog = new Lang.Class({
this._userList.removeUser(user); this._userList.removeUser(user);
})); }));
this._userChangedId = this._userManager.connect('user-changed',
Lang.bind(this, function(userManager, user) {
if (this._userList.containsUser(user) && user.locked)
this._userList.removeUser(user);
else if (!this._userList.containsUser(user) && !user.locked)
this._userList.addUser(user);
}));
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, },

View File

@ -448,8 +448,6 @@ const AppSwitcher = new Lang.Class({
}); });
if (appIcon.cachedWindows.length > 0) if (appIcon.cachedWindows.length > 0)
this._addIcon(appIcon); this._addIcon(appIcon);
else if (workspace == null)
throw new Error('%s appears to be running, but doesn\'t have any windows'.format(appIcon.app.get_name()));
} }
this._curApp = -1; this._curApp = -1;
@ -687,15 +685,17 @@ const WindowIcon = new Lang.Class({
this._icon.destroy_all_children(); this._icon.destroy_all_children();
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
switch (mode) { switch (mode) {
case AppIconMode.THUMBNAIL_ONLY: case AppIconMode.THUMBNAIL_ONLY:
size = WINDOW_PREVIEW_SIZE; size = WINDOW_PREVIEW_SIZE;
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE)); this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor));
break; break;
case AppIconMode.BOTH: case AppIconMode.BOTH:
size = WINDOW_PREVIEW_SIZE; size = WINDOW_PREVIEW_SIZE;
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE)); this._icon.add_actor(_createWindowClone(mutterWindow, size * scaleFactor));
if (this.app) if (this.app)
this._icon.add_actor(this._createAppIcon(this.app, this._icon.add_actor(this._createAppIcon(this.app,
@ -707,7 +707,7 @@ const WindowIcon = new Lang.Class({
this._icon.add_actor(this._createAppIcon(this.app, size)); this._icon.add_actor(this._createAppIcon(this.app, size));
} }
this._icon.set_size(size, size); this._icon.set_size(size * scaleFactor, size * scaleFactor);
}, },
_createAppIcon: function(app, size) { _createAppIcon: function(app, size) {

View File

@ -7,7 +7,7 @@ const St = imports.gi.St;
const Signals = imports.signals; const Signals = imports.signals;
const Atk = imports.gi.Atk; const Atk = imports.gi.Atk;
const ANIMATED_ICON_UPDATE_TIMEOUT = 100; const ANIMATED_ICON_UPDATE_TIMEOUT = 16;
const Animation = new Lang.Class({ const Animation = new Lang.Class({
Name: 'Animation', Name: 'Animation',
@ -33,7 +33,7 @@ const Animation = new Lang.Class({
if (this._frame == 0) if (this._frame == 0)
this._showFrame(0); this._showFrame(0);
this._timeoutId = Mainloop.timeout_add(this._speed, Lang.bind(this, this._update)); this._timeoutId = GLib.timeout_add(GLib.PRIORITY_LOW, this._speed, Lang.bind(this, this._update));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update'); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._update');
} }

View File

@ -144,6 +144,7 @@ const BackgroundCache = new Lang.Class({
this._pendingFileLoads = []; this._pendingFileLoads = [];
this._fileMonitors = {}; this._fileMonitors = {};
this._backgroundSources = {}; this._backgroundSources = {};
this._animations = {};
}, },
monitorFile: function(file) { monitorFile: function(file) {
@ -162,12 +163,13 @@ const BackgroundCache = new Lang.Class({
getAnimation: function(params) { getAnimation: function(params) {
params = Params.parse(params, { file: null, params = Params.parse(params, { file: null,
settingsSchema: null,
onLoaded: null }); onLoaded: null });
if (_fileEqual0(this._animationFile, params.file)) { if (this._animations[params.settingsSchema] && _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._animations[params.settingsSchema]);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
})); }));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@ -178,12 +180,11 @@ const BackgroundCache = new Lang.Class({
let animation = new Animation({ file: params.file }); let animation = new Animation({ file: params.file });
animation.load(Lang.bind(this, function() { animation.load(Lang.bind(this, function() {
this._animationFile = params.file; this._animations[params.settingsSchema] = animation;
this._animation = animation;
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._animations[params.settingsSchema]);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
})); }));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@ -403,17 +404,18 @@ const Background = new Lang.Class({
_loadAnimation: function(file) { _loadAnimation: function(file) {
this._cache.getAnimation({ file: file, this._cache.getAnimation({ file: file,
onLoaded: Lang.bind(this, function(animation) { settingsSchema: this._settings.schema_id,
this._animation = animation; onLoaded: Lang.bind(this, function(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(file); this._watchFile(file);
}) })
}); });
}, },

View File

@ -24,6 +24,8 @@ const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate'; const SHOW_WEEKDATE_KEY = 'show-weekdate';
const ELLIPSIS_CHAR = '\u2026'; const ELLIPSIS_CHAR = '\u2026';
const MESSAGE_ICON_SIZE = 32;
const MESSAGE_ANIMATION_TIME = 0.1; const MESSAGE_ANIMATION_TIME = 0.1;
const DEFAULT_EXPAND_LINES = 6; const DEFAULT_EXPAND_LINES = 6;
@ -976,7 +978,6 @@ const Message = new Lang.Class({
this._iconBin = new St.Bin({ style_class: 'message-icon-bin', this._iconBin = new St.Bin({ style_class: 'message-icon-bin',
y_expand: true, y_expand: true,
visible: false }); visible: false });
this._iconBin.set_y_align(Clutter.ActorAlign.START);
hbox.add_actor(this._iconBin); hbox.add_actor(this._iconBin);
let contentBox = new St.BoxLayout({ style_class: 'message-content', let contentBox = new St.BoxLayout({ style_class: 'message-content',
@ -1229,7 +1230,7 @@ const NotificationMessage = new Lang.Class({
this._closed = true; this._closed = true;
this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED); this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
})); }));
notification.connect('destroy', Lang.bind(this, this._destroyId = notification.connect('destroy', Lang.bind(this,
function() { function() {
if (!this._closed) if (!this._closed)
this.close(); this.close();
@ -1240,9 +1241,10 @@ const NotificationMessage = new Lang.Class({
_getIcon: function() { _getIcon: function() {
if (this.notification.gicon) if (this.notification.gicon)
return new St.Icon({ gicon: this.notification.gicon, icon_size: 48 }); return new St.Icon({ gicon: this.notification.gicon,
icon_size: MESSAGE_ICON_SIZE });
else else
return this.notification.source.createIcon(48); return this.notification.source.createIcon(MESSAGE_ICON_SIZE);
}, },
_onUpdated: function(n, clear) { _onUpdated: function(n, clear) {
@ -1260,6 +1262,10 @@ const NotificationMessage = new Lang.Class({
if (this._updatedId) if (this._updatedId)
this.notification.disconnect(this._updatedId); this.notification.disconnect(this._updatedId);
this._updatedId = 0; this._updatedId = 0;
if (this._destroyId)
this.notification.disconnect(this._destroyId);
this._destroyId = 0;
} }
}); });

View File

@ -325,9 +325,6 @@ const AutorunNotification = new Lang.Class({
this._manager = manager; this._manager = manager;
this._mount = source.mount; this._mount = source.mount;
// set the notification to urgent, so that it expands out
this.setUrgency(MessageTray.Urgency.CRITICAL);
}, },
createBanner: function() { createBanner: function() {

View File

@ -9,9 +9,15 @@ const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Gcr = imports.gi.Gcr; const Gcr = imports.gi.Gcr;
const Animation = imports.ui.animation;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry; const ShellEntry = imports.ui.shellEntry;
const CheckBox = imports.ui.checkBox; const CheckBox = imports.ui.checkBox;
const Tweener = imports.ui.tweener;
const WORK_SPINNER_ICON_SIZE = 16;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const KeyringDialog = new Lang.Class({ const KeyringDialog = new Lang.Class({
Name: 'KeyringDialog', Name: 'KeyringDialog',
@ -58,27 +64,47 @@ const KeyringDialog = new Lang.Class({
{ y_fill: true, { y_fill: true,
y_align: St.Align.START }); y_align: St.Align.START });
this._workSpinner = null;
this._controlTable = null; this._controlTable = null;
this._cancelButton = this.addButton({ label: '', this._cancelButton = this.addButton({ label: '',
action: Lang.bind(this, this._onCancelButton), action: Lang.bind(this, this._onCancelButton),
key: Clutter.Escape }, key: Clutter.Escape });
{ expand: true, x_fill: false, x_align: St.Align.START });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._continueButton = this.addButton({ label: '', this._continueButton = this.addButton({ label: '',
action: Lang.bind(this, this._onContinueButton), action: Lang.bind(this, this._onContinueButton),
default: true }, default: true });
{ expand: false, x_fill: false, x_align: St.Align.END });
this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
}, },
_setWorking: function(working) {
if (!this._workSpinner)
return;
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
_buildControlTable: function() { _buildControlTable: function() {
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL }); let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
let table = new St.Widget({ style_class: 'keyring-dialog-control-table', let table = new St.Widget({ style_class: 'keyring-dialog-control-table',
@ -101,15 +127,22 @@ const KeyringDialog = new Lang.Class({
ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true }); ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate)); this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onPasswordActivate));
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.actor.opacity = 0;
if (rtl) { if (rtl) {
layout.attach(this._passwordEntry, 0, row, 1, 1); layout.attach(this._workSpinner.actor, 0, row, 1, 1);
layout.attach(label, 1, row, 1, 1); layout.attach(this._passwordEntry, 1, row, 1, 1);
layout.attach(label, 2, row, 1, 1);
} else { } else {
layout.attach(label, 0, row, 1, 1); layout.attach(label, 0, row, 1, 1);
layout.attach(this._passwordEntry, 1, row, 1, 1); layout.attach(this._passwordEntry, 1, row, 1, 1);
layout.attach(this._workSpinner.actor, 2, row, 1, 1);
} }
row++; row++;
} else { } else {
this._workSpinner = null;
this._passwordEntry = null; this._passwordEntry = null;
} }
@ -178,7 +211,7 @@ const KeyringDialog = new Lang.Class({
this._continueButton.can_focus = sensitive; this._continueButton.can_focus = sensitive;
this._continueButton.reactive = sensitive; this._continueButton.reactive = sensitive;
this.setWorking(!sensitive); this._setWorking(!sensitive);
}, },
_ensureOpen: function() { _ensureOpen: function() {

View File

@ -13,13 +13,19 @@ const Mainloop = imports.mainloop;
const Polkit = imports.gi.Polkit; const Polkit = imports.gi.Polkit;
const PolkitAgent = imports.gi.PolkitAgent; const PolkitAgent = imports.gi.PolkitAgent;
const Animation = imports.ui.animation;
const Components = imports.ui.components; const Components = imports.ui.components;
const ModalDialog = imports.ui.modalDialog; const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry; const ShellEntry = imports.ui.shellEntry;
const UserWidget = imports.ui.userWidget; const UserWidget = imports.ui.userWidget;
const Tweener = imports.ui.tweener;
const DIALOG_ICON_SIZE = 48; const DIALOG_ICON_SIZE = 48;
const WORK_SPINNER_ICON_SIZE = 16;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const AuthenticationDialog = new Lang.Class({ const AuthenticationDialog = new Lang.Class({
Name: 'AuthenticationDialog', Name: 'AuthenticationDialog',
Extends: ModalDialog.ModalDialog, Extends: ModalDialog.ModalDialog,
@ -136,6 +142,13 @@ const AuthenticationDialog = new Lang.Class({
this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate)); this._passwordEntry.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivate));
this._passwordBox.add(this._passwordEntry, this._passwordBox.add(this._passwordEntry,
{ expand: true }); { expand: true });
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.actor.opacity = 0;
this._passwordBox.add(this._workSpinner.actor);
this.setInitialKeyFocus(this._passwordEntry); this.setInitialKeyFocus(this._passwordEntry);
this._passwordBox.hide(); this._passwordBox.hide();
@ -165,17 +178,10 @@ const AuthenticationDialog = new Lang.Class({
this._cancelButton = this.addButton({ label: _("Cancel"), this._cancelButton = this.addButton({ label: _("Cancel"),
action: Lang.bind(this, this.cancel), action: Lang.bind(this, this.cancel),
key: Clutter.Escape }, key: Clutter.Escape });
{ expand: true, x_fill: false, x_align: St.Align.START });
this.placeSpinner({ expand: false,
x_fill: false,
y_fill: false,
x_align: St.Align.END,
y_align: St.Align.MIDDLE });
this._okButton = this.addButton({ label: _("Authenticate"), this._okButton = this.addButton({ label: _("Authenticate"),
action: Lang.bind(this, this._onAuthenticateButtonPressed), action: Lang.bind(this, this._onAuthenticateButtonPressed),
default: true }, default: true });
{ expand: false, x_fill: false, x_align: St.Align.END });
this._doneEmitted = false; this._doneEmitted = false;
@ -183,6 +189,30 @@ const AuthenticationDialog = new Lang.Class({
this._cookie = cookie; this._cookie = cookie;
}, },
_setWorking: function(working) {
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
performAuthentication: function() { performAuthentication: function() {
this.destroySession(); this.destroySession();
this._session = new PolkitAgent.Session({ identity: this._identityToAuth, this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
@ -229,7 +259,7 @@ const AuthenticationDialog = new Lang.Class({
this._okButton.can_focus = sensitive; this._okButton.can_focus = sensitive;
this._okButton.reactive = sensitive; this._okButton.reactive = sensitive;
this.setWorking(!sensitive); this._setWorking(!sensitive);
}, },
_onEntryActivate: function() { _onEntryActivate: function() {

View File

@ -303,6 +303,8 @@ const ChatSource = new Lang.Class({
}, },
_createPolicy: function() { _createPolicy: function() {
if (this._account.protocol_name == 'irc')
return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari');
return new MessageTray.NotificationApplicationPolicy('empathy'); return new MessageTray.NotificationApplicationPolicy('empathy');
}, },
@ -467,6 +469,7 @@ const ChatSource = new Lang.Class({
destroy: function(reason) { destroy: function(reason) {
if (this._client.is_handling_channel(this._channel)) { if (this._client.is_handling_channel(this._channel)) {
this._ackMessages();
// The chat box has been destroyed so it can't // The chat box has been destroyed so it can't
// handle the channel any more. // handle the channel any more.
this._channel.close_async(function(channel, result) { this._channel.close_async(function(channel, result) {

View File

@ -644,15 +644,14 @@ const Dash = new Lang.Class({
let firstIcon = firstButton._delegate.icon; let firstIcon = firstButton._delegate.icon;
let minHeight, natHeight; let minHeight, natHeight;
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
// Enforce the current icon size during the size request // Enforce the current icon size during the size request
firstIcon.setIconSize(this.iconSize); firstIcon.icon.ensure_style();
let [currentWidth, currentHeight] = firstIcon.icon.get_size();
firstIcon.icon.set_size(this.iconSize * scaleFactor, this.iconSize * scaleFactor);
[minHeight, natHeight] = firstButton.get_preferred_height(-1); [minHeight, natHeight] = firstButton.get_preferred_height(-1);
firstIcon.icon.set_size(currentWidth, currentHeight);
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
let iconSizes = baseIconSizes.map(function(s) {
return s * scaleFactor;
});
// Subtract icon padding and box spacing from the available height // Subtract icon padding and box spacing from the available height
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) + availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
@ -660,6 +659,10 @@ const Dash = new Lang.Class({
let availSize = availHeight / iconChildren.length; let availSize = availHeight / iconChildren.length;
let iconSizes = baseIconSizes.map(function(s) {
return s * scaleFactor;
});
let newIconSize = baseIconSizes[0]; let newIconSize = baseIconSizes[0];
for (let i = 0; i < iconSizes.length; i++) { for (let i = 0; i < iconSizes.length; i++) {
if (iconSizes[i] < availSize) if (iconSizes[i] < availSize)

View File

@ -14,7 +14,6 @@ const Atk = imports.gi.Atk;
const Params = imports.misc.params; const Params = imports.misc.params;
const Animation = imports.ui.animation;
const Layout = imports.ui.layout; const Layout = imports.ui.layout;
const Lightbox = imports.ui.lightbox; const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -23,10 +22,6 @@ const Tweener = imports.ui.tweener;
const OPEN_AND_CLOSE_TIME = 0.1; const OPEN_AND_CLOSE_TIME = 0.1;
const FADE_OUT_DIALOG_TIME = 1.0; const FADE_OUT_DIALOG_TIME = 1.0;
const WORK_SPINNER_ICON_SIZE = 24;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
const State = { const State = {
OPENED: 0, OPENED: 0,
CLOSED: 1, CLOSED: 1,
@ -79,7 +74,9 @@ const ModalDialog = new Lang.Class({
this._group.add_actor(this._backgroundBin); this._group.add_actor(this._backgroundBin);
this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog', this.dialogLayout = new St.BoxLayout({ style_class: 'modal-dialog',
vertical: true }); x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
vertical: true });
// modal dialogs are fixed width and grow vertically; set the request // modal dialogs are fixed width and grow vertically; set the request
// mode accordingly so wrapped labels are handled correctly during // mode accordingly so wrapped labels are handled correctly during
// size requests. // size requests.
@ -100,7 +97,8 @@ const ModalDialog = new Lang.Class({
this.backgroundStack.add_actor(this.dialogLayout); this.backgroundStack.add_actor(this.dialogLayout);
this.contentLayout = new St.BoxLayout({ vertical: true }); this.contentLayout = new St.BoxLayout({ vertical: true,
style_class: "modal-dialog-content-box" });
this.dialogLayout.add(this.contentLayout, this.dialogLayout.add(this.contentLayout,
{ expand: true, { expand: true,
x_fill: true, x_fill: true,
@ -108,8 +106,7 @@ const ModalDialog = new Lang.Class({
x_align: St.Align.MIDDLE, x_align: St.Align.MIDDLE,
y_align: St.Align.START }); y_align: St.Align.START });
this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box', this.buttonLayout = new St.Widget ({ layout_manager: new Clutter.BoxLayout ({ homogeneous:true }) });
vertical: false });
this.dialogLayout.add(this.buttonLayout, this.dialogLayout.add(this.buttonLayout,
{ x_align: St.Align.MIDDLE, { x_align: St.Align.MIDDLE,
y_align: St.Align.END }); y_align: St.Align.END });
@ -118,8 +115,6 @@ const ModalDialog = new Lang.Class({
this._initialKeyFocus = this.dialogLayout; this._initialKeyFocus = this.dialogLayout;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
this._savedKeyFocus = null; this._savedKeyFocus = null;
this._workSpinner = null;
}, },
destroy: function() { destroy: function() {
@ -147,16 +142,12 @@ const ModalDialog = new Lang.Class({
else else
x_alignment = St.Align.MIDDLE; x_alignment = St.Align.MIDDLE;
this.addButton(buttonInfo, { expand: true, this.addButton(buttonInfo);
x_fill: false,
y_fill: false,
x_align: x_alignment,
y_align: St.Align.MIDDLE });
} }
}, },
addButton: function(buttonInfo, layoutInfo) { addButton: function(buttonInfo) {
let label = buttonInfo['label']; let label = buttonInfo['label']
let action = buttonInfo['action']; let action = buttonInfo['action'];
let key = buttonInfo['key']; let key = buttonInfo['key'];
let isDefault = buttonInfo['default']; let isDefault = buttonInfo['default'];
@ -170,10 +161,12 @@ const ModalDialog = new Lang.Class({
else else
keys = []; keys = [];
let button = new St.Button({ style_class: 'modal-dialog-button button', let button = new St.Button({ style_class: 'modal-dialog-linked-button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
reactive: true, reactive: true,
can_focus: true, can_focus: true,
x_expand: true,
y_expand: true,
label: label }); label: label });
button.connect('clicked', action); button.connect('clicked', action);
@ -188,47 +181,11 @@ const ModalDialog = new Lang.Class({
for (let i in keys) for (let i in keys)
this._buttonKeys[keys[i]] = buttonInfo; this._buttonKeys[keys[i]] = buttonInfo;
this.buttonLayout.add(button, layoutInfo); this.buttonLayout.add_actor(button);
return button; return button;
}, },
placeSpinner: function(layoutInfo) {
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.actor.opacity = 0;
this._workSpinner.actor.show();
this.buttonLayout.add(this._workSpinner.actor, layoutInfo);
},
setWorking: function(working) {
if (!this._workSpinner)
return;
Tweener.removeTweens(this._workSpinner.actor);
if (working) {
this._workSpinner.play();
Tweener.addTween(this._workSpinner.actor,
{ opacity: 255,
delay: WORK_SPINNER_ANIMATION_DELAY,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear'
});
} else {
Tweener.addTween(this._workSpinner.actor,
{ opacity: 0,
time: WORK_SPINNER_ANIMATION_TIME,
transition: 'linear',
onCompleteScope: this,
onComplete: function() {
if (this._workSpinner)
this._workSpinner.stop();
}
});
}
},
_onKeyPressEvent: function(object, event) { _onKeyPressEvent: function(object, event) {
this._pressedKey = event.get_key_symbol(); this._pressedKey = event.get_key_symbol();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;

View File

@ -30,7 +30,7 @@ const APP_MENU_ICON_MARGIN = 0;
const BUTTON_DND_ACTIVATION_TIMEOUT = 250; const BUTTON_DND_ACTIVATION_TIMEOUT = 250;
const SPINNER_ANIMATION_TIME = 0.2; const SPINNER_ANIMATION_TIME = 1.0;
// To make sure the panel corners blend nicely with the panel, // To make sure the panel corners blend nicely with the panel,
// we draw background and borders the same way, e.g. drawing // we draw background and borders the same way, e.g. drawing
@ -95,6 +95,7 @@ const AppMenuButton = new Lang.Class({
this._startingApps = []; this._startingApps = [];
this._menuManager = panel.menuManager; this._menuManager = panel.menuManager;
this._gtkSettings = Gtk.Settings.get_default();
this._targetApp = null; this._targetApp = null;
this._appMenuNotifyId = 0; this._appMenuNotifyId = 0;
this._actionGroupNotifyId = 0; this._actionGroupNotifyId = 0;
@ -123,11 +124,14 @@ const AppMenuButton = new Lang.Class({
this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM); this._arrow = PopupMenu.arrowIcon(St.Side.BOTTOM);
this._container.add_actor(this._arrow); this._container.add_actor(this._arrow);
this._visible = !Main.overview.visible; this._visible = this._gtkSettings.gtk_shell_shows_app_menu &&
!Main.overview.visible;
if (!this._visible) if (!this._visible)
this.actor.hide(); this.actor.hide();
this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync)); this._overviewHidingId = Main.overview.connect('hiding', Lang.bind(this, this._sync));
this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync)); this._overviewShowingId = Main.overview.connect('showing', Lang.bind(this, this._sync));
this._showsAppMenuId = this._gtkSettings.connect('notify::gtk-shell-shows-app-menu',
Lang.bind(this, this._sync));
this._stop = true; this._stop = true;
@ -305,7 +309,9 @@ const AppMenuButton = new Lang.Class({
} }
} }
let visible = (this._targetApp != null && !Main.overview.visibleTarget); let visible = (this._targetApp != null &&
this._gtkSettings.gtk_shell_shows_app_menu &&
!Main.overview.visibleTarget);
if (visible) if (visible)
this.show(); this.show();
else else
@ -378,6 +384,10 @@ const AppMenuButton = new Lang.Class({
Main.overview.disconnect(this._overviewShowingId); Main.overview.disconnect(this._overviewShowingId);
this._overviewShowingId = 0; this._overviewShowingId = 0;
} }
if (this._showsAppMenuId > 0) {
this._gtkSettings.disconnect(this._showsAppMenuId);
this._showsAppMenuId = 0;
}
if (this._switchWorkspaceNotifyId > 0) { if (this._switchWorkspaceNotifyId > 0) {
global.window_manager.disconnect(this._switchWorkspaceNotifyId); global.window_manager.disconnect(this._switchWorkspaceNotifyId);
this._switchWorkspaceNotifyId = 0; this._switchWorkspaceNotifyId = 0;
@ -449,7 +459,8 @@ const ActivitiesButton = new Lang.Class({
if (event.type() == Clutter.EventType.TOUCH_END || if (event.type() == Clutter.EventType.TOUCH_END ||
event.type() == Clutter.EventType.BUTTON_RELEASE) event.type() == Clutter.EventType.BUTTON_RELEASE)
Main.overview.toggle(); if (Main.overview.shouldToggleByCornerOrButton())
Main.overview.toggle();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, },
@ -457,7 +468,8 @@ const ActivitiesButton = new Lang.Class({
_onKeyRelease: function(actor, event) { _onKeyRelease: function(actor, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) { if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
Main.overview.toggle(); if (Main.overview.shouldToggleByCornerOrButton())
Main.overview.toggle();
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, },
@ -642,14 +654,50 @@ const PanelCorner = new Lang.Class({
} }
}); });
const AggregateLayout = new Lang.Class({
Name: 'AggregateLayout',
Extends: Clutter.BoxLayout,
_init: function(params) {
if (!params)
params = {};
params['orientation'] = Clutter.Orientation.VERTICAL;
this.parent(params);
this._sizeChildren = [];
},
addSizeChild: function(actor) {
this._sizeChildren.push(actor);
this.layout_changed();
},
vfunc_get_preferred_width: function(container, forHeight) {
let themeNode = container.get_theme_node();
let minWidth = themeNode.get_min_width();
let natWidth = minWidth;
for (let i = 0; i < this._sizeChildren.length; i++) {
let child = this._sizeChildren[i];
let [childMin, childNat] = child.get_preferred_width(forHeight);
minWidth = Math.max(minWidth, childMin);
natWidth = Math.max(minWidth, childNat);
}
return [minWidth, natWidth];
}
});
const AggregateMenu = new Lang.Class({ const AggregateMenu = new Lang.Class({
Name: 'AggregateMenu', Name: 'AggregateMenu',
Extends: PanelMenu.Button, Extends: PanelMenu.Button,
_init: function() { _init: function() {
this.parent(0.0, _("Settings"), false); this.parent(0.0, C_("System menu in the top bar", "System"), false);
this.menu.actor.add_style_class_name('aggregate-menu'); this.menu.actor.add_style_class_name('aggregate-menu');
let menuLayout = new AggregateLayout();
this.menu.box.set_layout_manager(menuLayout);
this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' }); this._indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box' });
this.actor.add_child(this._indicators); this.actor.add_child(this._indicators);
@ -697,8 +745,12 @@ const AggregateMenu = new Lang.Class({
this.menu.addMenuItem(this._location.menu); this.menu.addMenuItem(this._location.menu);
this.menu.addMenuItem(this._rfkill.menu); this.menu.addMenuItem(this._rfkill.menu);
this.menu.addMenuItem(this._power.menu); this.menu.addMenuItem(this._power.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addMenuItem(this._system.menu); this.menu.addMenuItem(this._system.menu);
menuLayout.addSizeChild(this._location.menu.actor);
menuLayout.addSizeChild(this._rfkill.menu.actor);
menuLayout.addSizeChild(this._power.menu.actor);
menuLayout.addSizeChild(this._system.menu.actor);
}, },
}); });

View File

@ -396,6 +396,7 @@ const PopupImageMenuItem = new Lang.Class({
this.actor.add_child(this.label); this.actor.add_child(this.label);
this._icon = new St.Icon({ style_class: 'popup-menu-icon' }); this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
this.actor.add_child(this._icon, { align: St.Align.END }); this.actor.add_child(this._icon, { align: St.Align.END });
this.actor.label_actor = this.label;
this.setIcon(iconName); this.setIcon(iconName);
}, },
@ -1059,11 +1060,6 @@ const PopupSubMenuMenuItem = new Lang.Class({
let expander = new St.Bin({ style_class: 'popup-menu-item-expander' }); let expander = new St.Bin({ style_class: 'popup-menu-item-expander' });
this.actor.add(expander, { expand: true }); this.actor.add(expander, { expand: true });
this.status = new St.Label({ style_class: 'popup-status-menu-item',
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
this.actor.add_child(this.status);
this._triangle = arrowIcon(St.Side.RIGHT); this._triangle = arrowIcon(St.Side.RIGHT);
this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 }); this._triangle.pivot_point = new Clutter.Point({ x: 0.5, y: 0.6 });

View File

@ -46,7 +46,7 @@ const Indicator = new Lang.Class({
// The Bluetooth menu only appears when Bluetooth is in use, // The Bluetooth menu only appears when Bluetooth is in use,
// so just statically build it with a "Turn Off" menu item. // so just statically build it with a "Turn Off" menu item.
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true); this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
this._item.icon.icon_name = 'bluetooth-active-symbolic'; this._item.icon.icon_name = 'bluetooth-active-symbolic';
this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() { this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._proxy.BluetoothAirplaneMode = true; this._proxy.BluetoothAirplaneMode = true;
@ -101,8 +101,9 @@ const Indicator = new Lang.Class({
this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode; this._item.actor.visible = this._proxy.BluetoothHasAirplaneMode && !this._proxy.BluetoothAirplaneMode;
if (nDevices > 0) if (nDevices > 0)
this._item.status.text = ngettext("%d Connected Device", "%d Connected Devices", nDevices).format(nDevices); /* Translators: this is the number of connected bluetooth devices */
this._item.label.text = ngettext("%d Connected", "%d Connected", nDevices).format(nDevices);
else else
this._item.status.text = _("Not Connected"); this._item.label.text = _("Not In Use");
}, },
}); });

View File

@ -62,13 +62,13 @@ const Indicator = new Lang.Class({
this._indicator = this._addIndicator(); this._indicator = this._addIndicator();
this._indicator.icon_name = 'find-location-symbolic'; this._indicator.icon_name = 'find-location-symbolic';
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Location"), true); this._item = new PopupMenu.PopupSubMenuMenuItem('', true);
this._item.icon.icon_name = 'find-location-symbolic'; this._item.icon.icon_name = 'find-location-symbolic';
this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this); this._agent = Gio.DBusExportedObject.wrapJSObject(AgentIface, this);
this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent'); this._agent.export(Gio.DBus.system, '/org/freedesktop/GeoClue2/Agent');
this._item.status.text = _("Enabled"); this._item.label.text = _("Location Enabled");
this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction)); this._onOffAction = this._item.menu.addAction(_("Disable"), Lang.bind(this, this._onOnOffAction));
this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop'); this._item.menu.addSettingsAction(_("Privacy Settings"), 'gnome-privacy-panel.desktop');
@ -173,10 +173,11 @@ const Indicator = new Lang.Class({
_updateMenuLabels: function() { _updateMenuLabels: function() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED)) {
this._item.status.text = this._indicator.visible ? _("In Use") : _("Enabled"); this._item.label.text = this._indicator.visible ? _("Location In Use")
: _("Location Enabled");
this._onOffAction.label.text = _("Disable"); this._onOffAction.label.text = _("Disable");
} else { } else {
this._item.status.text = _("Disabled"); this._item.label.text = _("Location Disabled");
this._onOffAction.label.text = _("Enable"); this._onOffAction.label.text = _("Enable");
} }
}, },

View File

@ -257,16 +257,8 @@ const NMConnectionSection = new Lang.Class({
this._radioSection.actor.visible = (nItems > 1); this._radioSection.actor.visible = (nItems > 1);
this._labelSection.actor.visible = (nItems == 1); this._labelSection.actor.visible = (nItems == 1);
this.item.status.text = this._getStatus(); this.item.label.text = this._getStatus();
this.item.icon.icon_name = this._getMenuIcon(); this.item.icon.icon_name = this._getMenuIcon();
// desc can be undefined at cold-plug, before we called
// NMGtk.disambiguate_device_names() at least once
let desc = this._getDescription();
if (desc)
this.item.label.text = desc;
else
this.item.label.text = '';
}, },
_getMenuIcon: function() { _getMenuIcon: function() {
@ -355,6 +347,7 @@ const NMConnectionDevice = new Lang.Class({
this.parent(client); this.parent(client);
this._device = device; this._device = device;
this._settings = settings; this._settings = settings;
this._description = '';
this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect)); this._autoConnectItem = this.item.menu.addAction(_("Connect"), Lang.bind(this, this._autoConnect));
this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection)); this._deactivateItem = this._radioSection.addAction(_("Turn Off"), Lang.bind(this, this.deactivateConnection));
@ -454,38 +447,44 @@ const NMConnectionDevice = new Lang.Class({
switch(this._device.state) { switch(this._device.state) {
case NetworkManager.DeviceState.DISCONNECTED: case NetworkManager.DeviceState.DISCONNECTED:
return _("Off"); /* Translators: %s is a network identifier */
return _("%s Off").format(this._getDescription());
case NetworkManager.DeviceState.ACTIVATED: case NetworkManager.DeviceState.ACTIVATED:
return _("Connected"); /* Translators: %s is a network identifier */
return _("%s Connected").format(this._getDescription());
case NetworkManager.DeviceState.UNMANAGED: case NetworkManager.DeviceState.UNMANAGED:
/* Translators: this is for network devices that are physically present but are not /* Translators: this is for network devices that are physically present but are not
under NetworkManager's control (and thus cannot be used in the menu) */ under NetworkManager's control (and thus cannot be used in the menu);
return _("Unmanaged"); %s is a network identifier */
return _("%s Unmanaged").format(this._getDescription());
case NetworkManager.DeviceState.DEACTIVATING: case NetworkManager.DeviceState.DEACTIVATING:
return _("Disconnecting"); /* Translators: %s is a network identifier */
return _("%s Disconnecting").format(this._getDescription());
case NetworkManager.DeviceState.PREPARE: case NetworkManager.DeviceState.PREPARE:
case NetworkManager.DeviceState.CONFIG: case NetworkManager.DeviceState.CONFIG:
case NetworkManager.DeviceState.IP_CONFIG: case NetworkManager.DeviceState.IP_CONFIG:
case NetworkManager.DeviceState.IP_CHECK: case NetworkManager.DeviceState.IP_CHECK:
case NetworkManager.DeviceState.SECONDARIES: case NetworkManager.DeviceState.SECONDARIES:
return _("Connecting"); /* Translators: %s is a network identifier */
return _("%s Connecting").format(this._getDescription());
case NetworkManager.DeviceState.NEED_AUTH: case NetworkManager.DeviceState.NEED_AUTH:
/* 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; %s is a network identifier */
return _("Authentication required"); return _("%s Requires Authentication").format(this._getDescription());
case NetworkManager.DeviceState.UNAVAILABLE: case NetworkManager.DeviceState.UNAVAILABLE:
// This state is actually a compound of various states (generically unavailable, // This state is actually a compound of various states (generically unavailable,
// firmware missing), that are exposed by different properties (whose state may // firmware missing), that are exposed by different properties (whose state may
// or may not updated when we receive state-changed). // or may not updated when we receive state-changed).
if (this._device.firmware_missing) { if (this._device.firmware_missing) {
/* Translators: this is for devices that require some kind of firmware or kernel /* Translators: this is for devices that require some kind of firmware or kernel
module, which is missing */ module, which is missing; %s is a network identifier */
return _("Firmware missing"); return _("Firmware Missing For %s").format(this._getDescription());
} }
/* Translators: this is for a network device that cannot be activated (for example it /* Translators: this is for a network device that cannot be activated (for example it
is disabled by rfkill, or it has no coverage */ is disabled by rfkill, or it has no coverage; %s is a network identifier */
return _("Unavailable"); return _("%s Unavailable").format(this._getDescription());
case NetworkManager.DeviceState.FAILED: case NetworkManager.DeviceState.FAILED:
return _("Connection failed"); /* Translators: %s is a network identifier */
return _("%s Connection Failed").format(this._getDescription());
default: default:
log('Device state invalid, is %d'.format(this._device.state)); log('Device state invalid, is %d'.format(this._device.state));
return 'invalid'; return 'invalid';
@ -585,11 +584,12 @@ const NMDeviceModem = new Lang.Class({
_getStatus: function() { _getStatus: function() {
if (!this._client.wwan_hardware_enabled) if (!this._client.wwan_hardware_enabled)
return _("Hardware Disabled"); /* Translators: %s is a network identifier */
return _("%s Hardware Disabled").format(this._getDescription());
else if (!this._client.wwan_enabled) else if (!this._client.wwan_enabled)
/* Translators: this is for a network device that cannot be activated /* Translators: this is for a network device that cannot be activated
because it's disabled by rfkill (airplane mode) */ because it's disabled by rfkill (airplane mode); %s is a network identifier */
return _("Disabled"); return _("%s Disabled").format(this._getDescription());
else if (this._device.state == NetworkManager.DeviceState.ACTIVATED && else if (this._device.state == NetworkManager.DeviceState.ACTIVATED &&
this._mobileDevice && this._mobileDevice.operator_name) this._mobileDevice && this._mobileDevice.operator_name)
return this._mobileDevice.operator_name; return this._mobileDevice.operator_name;
@ -877,7 +877,7 @@ const NMWirelessDialog = new Lang.Class({
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
this._noNetworksSpinner = new Animation.AnimatedIcon(file, 24, 24); this._noNetworksSpinner = new Animation.AnimatedIcon(file, 16, 16);
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") }));
@ -917,10 +917,7 @@ const NMWirelessDialog = new Lang.Class({
key: Clutter.Escape }); key: Clutter.Escape });
this._connectButton = this.addButton({ action: Lang.bind(this, this._connect), this._connectButton = this.addButton({ action: Lang.bind(this, this._connect),
label: _("Connect"), label: _("Connect"),
key: Clutter.Return }, key: Clutter.Return });
{ expand: true,
x_fill: false,
x_align: St.Align.END });
}, },
_connect: function() { _connect: function() {
@ -1282,9 +1279,8 @@ const NMDeviceWireless = new Lang.Class({
this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On"); this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On");
this._toggleItem.actor.visible = this._client.wireless_hardware_enabled; this._toggleItem.actor.visible = this._client.wireless_hardware_enabled;
this.item.status.text = this._getStatus();
this.item.icon.icon_name = this._getMenuIcon(); this.item.icon.icon_name = this._getMenuIcon();
this.item.label.text = this._description; this.item.label.text = this._getStatus();
}, },
setDeviceDescription: function(desc) { setDeviceDescription: function(desc) {
@ -1296,18 +1292,23 @@ const NMDeviceWireless = new Lang.Class({
let ap = this._device.active_access_point; let ap = this._device.active_access_point;
if (this._isHotSpotMaster()) if (this._isHotSpotMaster())
return _("Hotspot Active"); /* Translators: %s is a network identifier */
return _("%s Hotspot Active").format(this._description);
else if (this._device.state >= NetworkManager.DeviceState.PREPARE && else if (this._device.state >= NetworkManager.DeviceState.PREPARE &&
this._device.state < NetworkManager.DeviceState.ACTIVATED) this._device.state < NetworkManager.DeviceState.ACTIVATED)
return _("Connecting"); /* Translators: %s is a network identifier */
return _("%s Connecting").format(this._description);
else if (ap) else if (ap)
return ssidToLabel(ap.get_ssid()); return ssidToLabel(ap.get_ssid());
else if (!this._client.wireless_hardware_enabled) else if (!this._client.wireless_hardware_enabled)
return _("Hardware Disabled"); /* Translators: %s is a network identifier */
return _("%s Hardware Disabled").format(this._description);
else if (!this._client.wireless_enabled) else if (!this._client.wireless_enabled)
return _("Off"); /* Translators: %s is a network identifier */
return _("%s Off").format(this._description);
else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED) else if (this._device.state == NetworkManager.DeviceState.DISCONNECTED)
return _("Not Connected"); /* Translators: %s is a network identifier */
return _("%s Not Connected").format(this._description);
else else
return ''; return '';
}, },
@ -1509,7 +1510,7 @@ const NMVPNSection = new Lang.Class({
return item.getName(); return item.getName();
} }
return _("Off"); return _("VPN Off");
}, },
_getMenuIcon: function() { _getMenuIcon: function() {

View File

@ -112,12 +112,6 @@ const Indicator = new Lang.Class({
this._item.icon.icon_name = icon; this._item.icon.icon_name = icon;
// The status label // The status label
this._item.status.text = this._getStatus(); this._item.label.text = this._getStatus();
// The sub-menu heading
if (this._proxy.Type == UPower.DeviceKind.UPS)
this._item.label.text = _("UPS");
else
this._item.label.text = _("Battery");
}, },
}); });

View File

@ -85,9 +85,8 @@ const Indicator = new Lang.Class({
// 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.
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode"), true); this._item = new PopupMenu.PopupSubMenuMenuItem(_("Airplane Mode On"), true);
this._item.icon.icon_name = 'airplane-mode-symbolic'; this._item.icon.icon_name = 'airplane-mode-symbolic';
this._item.status.text = _("On");
this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() { this._offItem = this._item.menu.addAction(_("Turn Off"), Lang.bind(this, function() {
this._manager.airplaneMode = false; this._manager.airplaneMode = false;
})); }));

View File

@ -251,8 +251,14 @@ const Indicator = new Lang.Class({
let file = Gio.File.new_for_path(iconFile); let file = Gio.File.new_for_path(iconFile);
let gicon = new Gio.FileIcon({ file: file }); let gicon = new Gio.FileIcon({ file: file });
this._switchUserSubMenu.icon.gicon = gicon; this._switchUserSubMenu.icon.gicon = gicon;
this._switchUserSubMenu.icon.add_style_class_name('user-icon');
this._switchUserSubMenu.icon.remove_style_class_name('default-icon');
} else { } else {
this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic'; this._switchUserSubMenu.icon.icon_name = 'avatar-default-symbolic';
this._switchUserSubMenu.icon.add_style_class_name('default-icon');
this._switchUserSubMenu.icon.remove_style_class_name('user-icon');
} }
}, },
@ -344,6 +350,9 @@ const Indicator = new Lang.Class({
this._switchUserSubMenu.menu.addMenuItem(item); this._switchUserSubMenu.menu.addMenuItem(item);
this._logoutItem = item; this._logoutItem = item;
this._switchUserSubMenu.menu.addSettingsAction(_("Account Settings"),
'gnome-user-accounts-panel.desktop');
this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu)); this._user.connect('notify::is-loaded', Lang.bind(this, this._updateSwitchUserSubMenu));
this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu)); this._user.connect('changed', Lang.bind(this, this._updateSwitchUserSubMenu));

View File

@ -465,6 +465,12 @@ const ViewSelector = new Lang.Class({
}, },
_shouldTriggerSearch: function(symbol) { _shouldTriggerSearch: function(symbol) {
if (symbol == Clutter.Multi_key)
return true;
if (symbol == Clutter.BackSpace && this._searchActive)
return true;
let unicode = Clutter.keysym_to_unicode(symbol); let unicode = Clutter.keysym_to_unicode(symbol);
if (unicode == 0) if (unicode == 0)
return false; return false;
@ -472,7 +478,7 @@ const ViewSelector = new Lang.Class({
if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0) if (getTermsForSearchString(String.fromCharCode(unicode)).length > 0)
return true; return true;
return symbol == Clutter.BackSpace && this._searchActive; return false;
}, },
startSearch: function(event) { startSearch: function(event) {

View File

@ -81,12 +81,10 @@ const DisplayChangeDialog = new Lang.Class({
*/ */
this._cancelButton = this.addButton({ label: _("Revert Settings"), this._cancelButton = this.addButton({ label: _("Revert Settings"),
action: Lang.bind(this, this._onFailure), action: Lang.bind(this, this._onFailure),
key: Clutter.Escape }, key: Clutter.Escape });
{ expand: true, x_fill: false, x_align: St.Align.START });
this._okButton = this.addButton({ label: _("Keep Changes"), this._okButton = this.addButton({ label: _("Keep Changes"),
action: Lang.bind(this, this._onSuccess), action: Lang.bind(this, this._onSuccess),
default: true }, default: true });
{ expand: false, x_fill: false, x_align: St.Align.END });
this._timeoutId = Mainloop.timeout_add(ONE_SECOND, Lang.bind(this, this._tick)); this._timeoutId = Mainloop.timeout_add(ONE_SECOND, Lang.bind(this, this._tick));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick'); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick');
@ -679,6 +677,7 @@ const WindowManager = new Lang.Class({
this._minimizing = []; this._minimizing = [];
this._unminimizing = []; this._unminimizing = [];
this._mapping = []; this._mapping = [];
this._resizing = [];
this._destroying = []; this._destroying = [];
this._movingWindow = null; this._movingWindow = null;
@ -694,6 +693,7 @@ const WindowManager = new Lang.Class({
this._minimizeWindowDone(shellwm, actor); this._minimizeWindowDone(shellwm, actor);
this._mapWindowDone(shellwm, actor); this._mapWindowDone(shellwm, actor);
this._destroyWindowDone(shellwm, actor); this._destroyWindowDone(shellwm, actor);
this._sizeChangeWindowDone(shellwm, actor);
})); }));
this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace)); this._shellwm.connect('switch-workspace', Lang.bind(this, this._switchWorkspace));
@ -1220,9 +1220,120 @@ const WindowManager = new Lang.Class({
}, },
_sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) { _sizeChangeWindow : function(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
let types = [Meta.WindowType.NORMAL];
if (!this._shouldAnimateActor(actor, types)) {
shellwm.completed_size_change(actor);
return;
}
if (whichChange == Meta.SizeChange.FULLSCREEN)
this._fullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
else if (whichChange == Meta.SizeChange.UNFULLSCREEN)
this._unfullscreenWindow(shellwm, actor, oldFrameRect, oldBufferRect);
else
shellwm.completed_size_change(actor);
},
_fullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
actor.translation_x = oldFrameRect.x - monitor.x;
actor.translation_y = oldFrameRect.y - monitor.y;
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
},
_unfullscreenWindow: function(shellwm, actor, oldFrameRect, oldBufferRect) {
let targetRect = actor.meta_window.get_frame_rect();
let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
actor.translation_x = -(targetRect.x - monitor.x);
actor.translation_y = -(targetRect.y - monitor.y);
this._fullscreenAnimation(shellwm, actor, oldFrameRect);
},
_fullscreenAnimation: function(shellwm, actor, oldFrameRect) {
this._resizing.push(actor);
// Position a clone of the window on top of the old position,
// while actor updates are frozen.
// Note that the MetaWindow has up to date sizing information for
// the new geometry already.
let targetRect = actor.meta_window.get_frame_rect();
let actorContent = Shell.util_get_content_for_window_actor(actor, oldFrameRect);
let actorClone = new St.Widget({ content: actorContent });
actorClone.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
actorClone.set_position(oldFrameRect.x, oldFrameRect.y);
actorClone.set_size(oldFrameRect.width, oldFrameRect.height);
Main.uiGroup.add_actor(actorClone);
actor.__fullscreenClone = actorClone;
let scaleX = targetRect.width / oldFrameRect.width;
let scaleY = targetRect.height / oldFrameRect.height;
// Now scale and fade out the clone
Tweener.addTween(actorClone,
{ x: targetRect.x,
y: targetRect.y,
scale_x: scaleX,
scale_y: scaleY,
opacity: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad'
});
// Now set scale the actor to size it as the clone.
// Note that the caller of this function already set a translation
// on the actor.
actor.scale_x = 1 / scaleX;
actor.scale_y = 1 / scaleY;
// Scale it to its actual new size
Tweener.addTween(actor,
{ scale_x: 1.0,
scale_y: 1.0,
translation_x: 0,
translation_y: 0,
time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete: this._sizeChangeWindowDone,
onCompleteScope: this,
onCompleteParams: [shellwm, actor],
onOverwrite: this._sizeChangeWindowOverwritten,
onOverwriteScope: this,
onOverwriteParams: [shellwm, actor]
});
// Now unfreeze actor updates, to get it to the new size.
// It's important that we don't wait until the animation is completed to
// do this, otherwise our scale will be applied to the old texture size.
shellwm.completed_size_change(actor); shellwm.completed_size_change(actor);
}, },
_sizeChangeWindowDone: function(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) {
Tweener.removeTweens(actor);
actor.scale_x = 1.0;
actor.scale_y = 1.0;
actor.translation_x = 0;
actor.translation_y = 0;
let actorClone = actor.__fullscreenClone;
if (actorClone) {
actorClone.destroy();
delete actor.__fullscreenClone;
}
}
},
_sizeChangeWindowOverwritten: function(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) {
let actorClone = actor.__fullscreenClone;
if (actorClone) {
actorClone.destroy();
delete actor.__fullscreenClone;
}
}
},
_hasAttachedDialogs: function(window, ignoreWindow) { _hasAttachedDialogs: function(window, ignoreWindow) {
var count = 0; var count = 0;
window.foreach_transient(function(win) { window.foreach_transient(function(win) {

View File

@ -214,7 +214,7 @@ const WindowMenuManager = new Lang.Class({
menu.close(); menu.close();
}); });
this._sourceActor.set_size(rect.width, rect.height); this._sourceActor.set_size(Math.max(1, rect.width), Math.max(1, rect.height));
this._sourceActor.set_position(rect.x, rect.y); this._sourceActor.set_position(rect.x, rect.y);
this._sourceActor.show(); this._sourceActor.show();

555
po/ar.po

File diff suppressed because it is too large Load Diff

524
po/ca.po

File diff suppressed because it is too large Load Diff

468
po/cs.po
View File

@ -1,8 +1,9 @@
# Czech translation of gnome-shell. # Czech translation of gnome-shell.
# Copyright (C) 2009, 2010, 2011 the author(s) of gnome-shell. # Copyright (C) 2009, 2010, 2011 the author(s) of gnome-shell.
# 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.
#
# Andre Klapper <ak-47@gmx.net>, 2009. # Andre Klapper <ak-47@gmx.net>, 2009.
# Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012, 2014. # Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012, 2014, 2015.
# Adam Matoušek <adamatousek@gmail.com>, 2012, 2013. # Adam Matoušek <adamatousek@gmail.com>, 2012, 2013.
# Marek Černocký <marek@manet.cz>, 2012, 2013, 2014, 2015. # Marek Černocký <marek@manet.cz>, 2012, 2013, 2014, 2015.
# #
@ -11,8 +12,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n" "shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2015-07-24 08:09+0000\n" "POT-Creation-Date: 2015-10-05 08:41+0000\n"
"PO-Revision-Date: 2015-07-24 22:04+0200\n" "PO-Revision-Date: 2015-10-04 11:42-0400\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"
@ -20,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Gtranslator 2.91.6\n" "X-Generator: Virtaal 0.7.1\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-system.xml.in.h:1 #: ../data/50-gnome-shell-system.xml.in.h:1
@ -309,15 +310,16 @@ msgid "GNOME Shell Extensions"
msgstr "Rozšíření GNOME Shell" msgstr "Rozšíření GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:179 ../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 "Zrušit" msgstr "Zrušit"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:447
msgid "Next" msgid "Next"
msgstr "Následující" msgstr "Další"
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403 #: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59 #: ../js/ui/unlockDialog.js:59
@ -333,21 +335,29 @@ msgstr "Přihlásit se"
msgid "Choose Session" msgid "Choose Session"
msgstr "Vybrat sezení" msgstr "Vybrat sezení"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:431 #: ../js/gdm/loginDialog.js:431
msgid "Not listed?" msgid "Not listed?"
msgstr "Nejste na seznamu?" msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:847 #. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:850
#, 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:852 ../js/ui/components/networkAgent.js:271 #. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:289 #: ../js/ui/components/networkAgent.js:289
msgid "Username: " msgid "Username: "
msgstr "Uživatelské jméno: " msgstr "Uživatelské jméno: "
#: ../js/gdm/loginDialog.js:1180 #: ../js/gdm/loginDialog.js:1184
msgid "Login Window" msgid "Login Window"
msgstr "Přihlašovací okno" msgstr "Přihlašovací okno"
@ -355,6 +365,11 @@ msgstr "Přihlašovací okno"
msgid "Authentication error" msgid "Authentication error"
msgstr "Chyba ověření" msgstr "Chyba ověření"
#. We don't show fingerprint messages directly since it's
#. not the main auth service. Instead we use the messages
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. 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 "(nebo otiskněte prst)" msgstr "(nebo otiskněte prst)"
@ -363,6 +378,8 @@ msgstr "(nebo otiskněte prst)"
msgid "Command not found" msgid "Command not found"
msgstr "Příkaz nenalezen" msgstr "Příkaz nenalezen"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:152 #: ../js/misc/util.js:152
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Nelze analyzovat příkaz:" msgstr "Nelze analyzovat příkaz:"
@ -372,99 +389,107 @@ msgstr "Nelze analyzovat příkaz:"
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "Vykonání „%s“ selhalo:" msgstr "Vykonání „%s“ selhalo:"
#. Translators: Time in 24h format */ #. Translators: Time in 24h format
#: ../js/misc/util.js:191 #: ../js/misc/util.js:191
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/misc/util.js:197 #: ../js/misc/util.js:197
#, no-c-format
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/misc/util.js:203 #: ../js/misc/util.js:203
#, no-c-format
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/misc/util.js:209 #: ../js/misc/util.js:209
#, no-c-format
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/misc/util.js:215 #: ../js/misc/util.js:215
#, no-c-format
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 12h format */ #. Translators: Time in 12h format
#: ../js/misc/util.js:220 #: ../js/misc/util.js:220
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/misc/util.js:226 #: ../js/misc/util.js:226
#, no-c-format
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/misc/util.js:232 #: ../js/misc/util.js:232
#, no-c-format
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/misc/util.js:238 #: ../js/misc/util.js:238
#, no-c-format
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/misc/util.js:244 #: ../js/misc/util.js:244
#, no-c-format
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 title of the wifi captive portal login #. TRANSLATORS: this is the title of the wifi captive portal login
#. * window, until we know the title of the actual login page */ #. * window, until we know the title of the actual login page
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
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:789 #: ../js/ui/appDisplay.js:794
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:909 #: ../js/ui/appDisplay.js:914
msgid "Frequent" msgid "Frequent"
msgstr "Časté" msgstr "Časté"
#: ../js/ui/appDisplay.js:916 #: ../js/ui/appDisplay.js:921
msgid "All" msgid "All"
msgstr "Všechny" msgstr "Všechny"
#: ../js/ui/appDisplay.js:1845 #: ../js/ui/appDisplay.js:1853
msgid "New Window" msgid "New Window"
msgstr "Nové okno" msgstr "Nové okno"
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1881 ../js/ui/dash.js:289
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených" msgstr "Odstranit z oblíbených"
#: ../js/ui/appDisplay.js:1879 #: ../js/ui/appDisplay.js:1887
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Přidat mezi oblíbené" msgstr "Přidat mezi oblíbené"
#: ../js/ui/appDisplay.js:1889 #: ../js/ui/appDisplay.js:1897
msgid "Show Details" msgid "Show Details"
msgstr "Zobrazit podrobnosti" msgstr "Zobrazit podrobnosti"
@ -486,13 +511,12 @@ msgstr "Změnit pozadí…"
msgid "Display Settings" msgid "Display Settings"
msgstr "Nastavení displeje" msgstr "Nastavení displeje"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650 #: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
#: ../js/ui/status/system.js:357
msgid "Settings" msgid "Settings"
msgstr "Nastavení" msgstr "Nastavení"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */ #. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:53 #: ../js/ui/calendar.js:55
msgctxt "calendar-no-work" msgctxt "calendar-no-work"
msgid "06" msgid "06"
msgstr "06" msgstr "06"
@ -501,95 +525,95 @@ msgstr "06"
#. * #. *
#. * 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:82 #: ../js/ui/calendar.js:84
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:84 #: ../js/ui/calendar.js:86
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:86 #: ../js/ui/calendar.js:88
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:88 #: ../js/ui/calendar.js:90
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:90 #: ../js/ui/calendar.js:92
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:92 #: ../js/ui/calendar.js:94
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:94 #: ../js/ui/calendar.js:96
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "So" msgstr "So"
#: ../js/ui/calendar.js:564 #: ../js/ui/calendar.js:566
msgid "Previous month" msgid "Previous month"
msgstr "Předchozí měsíc" msgstr "Předchozí měsíc"
#: ../js/ui/calendar.js:574 #: ../js/ui/calendar.js:576
msgid "Next month" msgid "Next month"
msgstr "Následující měsíc" msgstr "Následující měsíc"
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:783
msgid "Week %V" msgid "Week %V"
msgstr "Týden %V" msgstr "Týden %V"
#. 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:1187 #: ../js/ui/calendar.js:1188
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Celý den" msgstr "Celý den"
#: ../js/ui/calendar.js:1289 #: ../js/ui/calendar.js:1295
msgid "Clear section" msgid "Clear section"
msgstr "Vymazat část" msgstr "Vymazat část"
#: ../js/ui/calendar.js:1516 #: ../js/ui/calendar.js:1522
msgid "Events" msgid "Events"
msgstr "Události" msgstr "Události"
#: ../js/ui/calendar.js:1525 #: ../js/ui/calendar.js:1531
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %e. %B" msgstr "%A, %e. %B"
#: ../js/ui/calendar.js:1529 #: ../js/ui/calendar.js:1535
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:1614 #: ../js/ui/calendar.js:1620
msgid "Notifications" msgid "Notifications"
msgstr "Upozornění" msgstr "Upozornění"
#: ../js/ui/calendar.js:1765 #: ../js/ui/calendar.js:1771
msgid "No Notifications" msgid "No Notifications"
msgstr "Žádná upozornění" msgstr "Žádná upozornění"
#: ../js/ui/calendar.js:1768 #: ../js/ui/calendar.js:1774
msgid "No Events" msgid "No Events"
msgstr "Žádné události" msgstr "Žádné události"
@ -606,19 +630,20 @@ msgstr "Externí svazek odpojen"
msgid "Open with %s" msgid "Open with %s"
msgstr "Otevřít s %s" msgstr "Otevřít s %s"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 #: ../js/ui/components/keyring.js:120 ../js/ui/components/polkitAgent.js:315
msgid "Password:" msgid "Password:"
msgstr "Heslo:" msgstr "Heslo:"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:153
msgid "Type again:" msgid "Type again:"
msgstr "Napište znovu:" msgstr "Napište znovu:"
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:269
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919 #: ../js/ui/status/network.js:352 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Připojit" msgstr "Připojit"
#. Cisco LEAP
#: ../js/ui/components/networkAgent.js:233 #: ../js/ui/components/networkAgent.js:233
#: ../js/ui/components/networkAgent.js:245 #: ../js/ui/components/networkAgent.js:245
#: ../js/ui/components/networkAgent.js:273 #: ../js/ui/components/networkAgent.js:273
@ -627,6 +652,7 @@ msgstr "Připojit"
msgid "Password: " msgid "Password: "
msgstr "Heslo: " msgstr "Heslo: "
#. static WEP
#: ../js/ui/components/networkAgent.js:238 #: ../js/ui/components/networkAgent.js:238
msgid "Key: " msgid "Key: "
msgstr "Klíč: " msgstr "Klíč: "
@ -699,33 +725,33 @@ msgstr "Heslo k mobilní širokopásmové síti"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Pro připojení k „%s“ je vyžadováno heslo." msgstr "Pro připojení k „%s“ je vyžadováno heslo."
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1657 #: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1658
msgid "Network Manager" msgid "Network Manager"
msgstr "Network Manager" msgstr "Network Manager"
#: ../js/ui/components/polkitAgent.js:54 #: ../js/ui/components/polkitAgent.js:60
msgid "Authentication Required" msgid "Authentication Required"
msgstr "Je vyžadováno ověření" msgstr "Je vyžadováno ověření"
#: ../js/ui/components/polkitAgent.js:96 #: ../js/ui/components/polkitAgent.js:102
msgid "Administrator" msgid "Administrator"
msgstr "Správce" msgstr "Správce"
#: ../js/ui/components/polkitAgent.js:175 #: ../js/ui/components/polkitAgent.js:182
msgid "Authenticate" msgid "Authenticate"
msgstr "Ověřit" msgstr "Ověřit"
#. Translators: "that didn't work" refers to the fact that the #. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen #. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password), #. * because of an authentication error (like invalid password),
#. * for instance. */ #. * for instance.
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383 #: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
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."
#. 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:757 #: ../js/ui/components/telepathyClient.js:759
#, 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"
@ -738,6 +764,8 @@ msgstr "Okna"
msgid "Show Applications" msgid "Show Applications"
msgstr "Zobrazit aplikace" msgstr "Zobrazit aplikace"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:449 #: ../js/ui/dash.js:449
msgid "Dash" msgid "Dash"
msgstr "Oblíbené" msgstr "Oblíbené"
@ -745,7 +773,7 @@ msgstr "Oblíbené"
# Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A". # Not sure whether we've enough space for it, but anyway, looks more aesthetically with "%A".
#. 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:73 #: ../js/ui/dateMenu.js:73
msgid "%B %e %Y" msgid "%B %e %Y"
msgstr "%e. %B, %Y" msgstr "%e. %B, %Y"
@ -754,7 +782,7 @@ msgstr "%e. %B, %Y"
#. Translators: This is the accessible name of the date button shown #. Translators: This is the accessible name of the date button shown
#. * below the time in the shell; it should combine the weekday and the #. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015". #. * date, e.g. "Tuesday February 17 2015".
#. */ #.
#: ../js/ui/dateMenu.js:80 #: ../js/ui/dateMenu.js:80
msgid "%A %B %e %Y" msgid "%A %B %e %Y"
msgstr "%A, %e. %B, %Y" msgstr "%A, %e. %B, %Y"
@ -893,13 +921,13 @@ msgstr "Některé aplikace jsou zaneprázdněny nebo obsahují neuloženou prác
msgid "Other users are logged in." msgid "Other users are logged in."
msgstr "Jsou přihlášeni jiní uživatelé." msgstr "Jsou přihlášeni jiní uživatelé."
#. Translators: Remote here refers to a remote session, like a ssh login */ #. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:640 #: ../js/ui/endSessionDialog.js:640
#, javascript-format #, javascript-format
msgid "%s (remote)" msgid "%s (remote)"
msgstr "%s (vzdálený)" msgstr "%s (vzdálený)"
#. Translators: Console here refers to a tty like a VT console */ #. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:643 #: ../js/ui/endSessionDialog.js:643
#, javascript-format #, javascript-format
msgid "%s (console)" msgid "%s (console)"
@ -918,7 +946,7 @@ msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
msgid "Keyboard" msgid "Keyboard"
msgstr "Klávesnice" msgstr "Klávesnice"
#. translators: 'Hide' is a verb */ #. translators: 'Hide' is a verb
#: ../js/ui/legacyTray.js:66 #: ../js/ui/legacyTray.js:66
msgid "Hide tray" msgid "Hide tray"
msgstr "Skrýt pořadač" msgstr "Skrýt pořadač"
@ -931,7 +959,7 @@ msgstr "Stavové ikony"
msgid "No extensions installed" msgid "No extensions installed"
msgstr "Nejsou nainstalována žádná rozšíření" msgstr "Nejsou nainstalována žádná rozšíření"
#. Translators: argument is an extension UUID. */ #. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:697 #: ../js/ui/lookingGlass.js:697
#, javascript-format #, javascript-format
msgid "%s has not emitted any errors." msgid "%s has not emitted any errors."
@ -945,17 +973,13 @@ msgstr "Skrývat chyby"
msgid "Show Errors" msgid "Show Errors"
msgstr "Zobrazovat chyby" msgstr "Zobrazovat chyby"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716
#: ../js/ui/status/location.js:176
msgid "Enabled" msgid "Enabled"
msgstr "Povoleno" msgstr "Povoleno"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode) */
#. translators: #. translators:
#. * The device has been disabled #. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 #: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1828
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Zakázáno" msgstr "Zakázáno"
@ -994,7 +1018,7 @@ msgstr "Přehled"
#. Translators: this is the text displayed #. Translators: this is the text displayed
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. */ #. characters.
#: ../js/ui/overview.js:244 #: ../js/ui/overview.js:244
msgid "Type to search…" msgid "Type to search…"
msgstr "Vyhledávejte psaním…" msgstr "Vyhledávejte psaním…"
@ -1004,15 +1028,25 @@ msgid "Quit"
msgstr "Ukončit" msgstr "Ukončit"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */ #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:404 #: ../js/ui/panel.js:404
msgid "Activities" msgid "Activities"
msgstr "Činnosti" msgstr "Činnosti"
#: ../js/ui/panel.js:755 #: ../js/ui/panel.js:650
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Systém"
#: ../js/ui/panel.js:754
msgid "Top Bar" msgid "Top Bar"
msgstr "Horní lišta" msgstr "Horní lišta"
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:289 #: ../js/ui/popupMenu.js:289
msgid "toggle-switch-us" msgid "toggle-switch-us"
msgstr "toggle-switch-intl" msgstr "toggle-switch-intl"
@ -1030,7 +1064,7 @@ msgid "Restarting…"
msgstr "Restartuje se…" msgstr "Restartuje se…"
#. Translators: This is a time format for a date in #. Translators: This is a time format for a date in
#. long format */ #. long format
#: ../js/ui/screenShield.js:85 #: ../js/ui/screenShield.js:85
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, %e. %B" msgstr "%A, %e. %B"
@ -1051,7 +1085,7 @@ msgstr[0] "%d nové upozornění"
msgstr[1] "%d nová upozornění" msgstr[1] "%d nová upozornění"
msgstr[2] "%d nových upozornění" msgstr[2] "%d nových upozornění"
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:365 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374
msgid "Lock" msgid "Lock"
msgstr "Uzamknout" msgstr "Uzamknout"
@ -1059,6 +1093,13 @@ msgstr "Uzamknout"
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"
#. We could not become modal, so we can't activate the
#. screenshield. The user is probably very upset at this
#. point, but any application using global grabs is broken
#. Just tell him to stop using this app
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271 #: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
msgid "Unable to lock" msgid "Unable to lock"
msgstr "Nelze uzamknout obrazovku" msgstr "Nelze uzamknout obrazovku"
@ -1143,14 +1184,10 @@ msgstr "Vysoký kontrast"
msgid "Large Text" msgid "Large Text"
msgstr "Styl velkého textu" msgstr "Styl velkého textu"
#: ../js/ui/status/bluetooth.js:49
msgid "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:1282 #: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91 #: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
#: ../js/ui/status/rfkill.js:118 #: ../js/ui/status/rfkill.js:117
msgid "Turn Off" msgid "Turn Off"
msgstr "Vypnout" msgstr "Vypnout"
@ -1158,17 +1195,18 @@ msgstr "Vypnout"
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Nastavení Bluetooth" msgstr "Nastavení Bluetooth"
#: ../js/ui/status/bluetooth.js:104 #. Translators: this is the number of connected bluetooth devices
#: ../js/ui/status/bluetooth.js:105
#, javascript-format #, javascript-format
msgid "%d Connected Device" msgid "%d Connected"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected"
msgstr[0] "%d připojené zařízení" msgstr[0] "%d připojené"
msgstr[1] "%d připojená zařízení" msgstr[1] "%d připojená"
msgstr[2] "%d připojených zařízení" msgstr[2] "%d připojených"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310 #: ../js/ui/status/bluetooth.js:107
msgid "Not Connected" msgid "Not In Use"
msgstr "Nepřipojeno" msgstr "Nepoužívá se"
#: ../js/ui/status/brightness.js:44 #: ../js/ui/status/brightness.js:44
msgid "Brightness" msgid "Brightness"
@ -1178,85 +1216,112 @@ msgstr "Jas"
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Zobrazit rozložení klávesnice" msgstr "Zobrazit rozložení klávesnice"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
msgid "Location" msgid "Location Enabled"
msgstr "Poloha" msgstr "Zjišťování polohy je povoleno"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
msgid "Disable" msgid "Disable"
msgstr "Zakázáno" msgstr "Zakázat"
#: ../js/ui/status/location.js:73 #: ../js/ui/status/location.js:73
msgid "Privacy Settings" msgid "Privacy Settings"
msgstr "Nastavení ochrany osobních údajů" msgstr "Nastavení ochrany osobních údajů"
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:176
msgid "In Use" msgid "Location In Use"
msgstr "Používá se" msgstr "Zjišťování polohy se používá"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:180
msgid "Location Disabled"
msgstr "Zjišťování polohy je zakázáno"
#: ../js/ui/status/location.js:181
msgid "Enable" msgid "Enable"
msgstr "Povoleno" msgstr "Povolit"
#: ../js/ui/status/network.js:101 #: ../js/ui/status/network.js:101
msgid "<unknown>" msgid "<unknown>"
msgstr "<neznámé>" msgstr "<neznámé>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308 #. Translators: %s is a network identifier
#: ../js/ui/status/network.js:1512 #: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
msgid "Off" #, javascript-format
msgstr "Vypnuto" msgid "%s Off"
msgstr "%s je vypnuto"
#: ../js/ui/status/network.js:459 #. Translators: %s is a network identifier
msgid "Connected" #: ../js/ui/status/network.js:454
msgstr "Připojeno" #, javascript-format
msgid "%s Connected"
msgstr "%s je připojeno"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */ #. under NetworkManager's control (and thus cannot be used in the menu);
#: ../js/ui/status/network.js:463 #. %s is a network identifier
msgid "Unmanaged" #: ../js/ui/status/network.js:459
msgstr "Nespravováno" #, javascript-format
msgid "%s Unmanaged"
msgstr "%s není spravováno"
#: ../js/ui/status/network.js:465 #. Translators: %s is a network identifier
msgid "Disconnecting" #: ../js/ui/status/network.js:462
msgstr "Odpojuje se…" #, javascript-format
msgid "%s Disconnecting"
msgstr "%s se odpojuje"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302 #. Translators: %s is a network identifier
msgid "Connecting" #: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
msgstr "Připojuje se…" #, javascript-format
msgid "%s Connecting"
msgstr "%s se připojuje"
#. 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; %s is a network identifier
#: ../js/ui/status/network.js:474 #: ../js/ui/status/network.js:472
msgid "Authentication required" #, javascript-format
msgstr "Je vyžadováno ověření" msgid "%s Requires Authentication"
msgstr "%s požaduje ověření"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */ #. module, which is missing; %s is a network identifier
#: ../js/ui/status/network.js:482 #: ../js/ui/status/network.js:480
msgid "Firmware missing" #, javascript-format
msgstr "Schází firmware" msgid "Firmware Missing For %s"
msgstr "Schází firmware pro %s"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */ #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: ../js/ui/status/network.js:486 #: ../js/ui/status/network.js:484
msgid "Unavailable" #, javascript-format
msgstr "Nedostupné" msgid "%s Unavailable"
msgstr "%s je nedostupné"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696 #. Translators: %s is a network identifier
msgid "Connection failed" #: ../js/ui/status/network.js:487
msgstr "Připojení selhalo" #, javascript-format
msgid "%s Connection Failed"
msgstr "%s selhalo připojení"
#: ../js/ui/status/network.js:504 #: ../js/ui/status/network.js:503
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Nastavení připojení po drátu" msgstr "Nastavení připojení po drátu"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624 #: ../js/ui/status/network.js:545 ../js/ui/status/network.js:624
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:1306 #. Translators: %s is a network identifier
msgid "Hardware Disabled" #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
msgstr "Hardware zakázán" #, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s je hardwarově zakázáno"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: ../js/ui/status/network.js:592
#, javascript-format
msgid "%s Disabled"
msgstr "%s je zakázáno"
#: ../js/ui/status/network.js:632 #: ../js/ui/status/network.js:632
msgid "Use as Internet connection" msgid "Use as Internet connection"
@ -1298,52 +1363,68 @@ msgstr "Vyberte síť"
msgid "No Networks" msgid "No Networks"
msgstr "Žádné sítě" msgstr "Žádné sítě"
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:115
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:1174 #: ../js/ui/status/network.js:1171
msgid "Select Network" msgid "Select Network"
msgstr "Vybrat síť" msgstr "Vybrat síť"
#: ../js/ui/status/network.js:1180 #: ../js/ui/status/network.js:1177
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Nastavení WiFi" msgstr "Nastavení WiFi"
#: ../js/ui/status/network.js:1282 #: ../js/ui/status/network.js:1279
msgid "Turn On" msgid "Turn On"
msgstr "Zapnout" msgstr "Zapnout"
#: ../js/ui/status/network.js:1299 #. Translators: %s is a network identifier
msgid "Hotspot Active" #: ../js/ui/status/network.js:1296
msgstr "Hotspot aktivní" #, javascript-format
msgid "%s Hotspot Active"
msgstr "%s je aktivní přístupový bod"
#: ../js/ui/status/network.js:1410 #. Translators: %s is a network identifier
#: ../js/ui/status/network.js:1311
#, javascript-format
msgid "%s Not Connected"
msgstr "%s není připojeno"
#: ../js/ui/status/network.js:1411
msgid "connecting..." msgid "connecting..."
msgstr "připojování…" msgstr "připojuje se…"
#. 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:1414
msgid "authentication required" msgid "authentication required"
msgstr "je vyžadováno ověření" msgstr "je požadováno ověření"
#: ../js/ui/status/network.js:1415 #: ../js/ui/status/network.js:1416
msgid "connection failed" msgid "connection failed"
msgstr "připojení selhalo" msgstr "připojení selhalo"
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94 #: ../js/ui/status/network.js:1482 ../js/ui/status/rfkill.js:93
msgid "Network Settings" msgid "Network Settings"
msgstr "Nastavení sítě" msgstr "Nastavení sítě"
#: ../js/ui/status/network.js:1483 #: ../js/ui/status/network.js:1484
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Nastavení VPN" msgstr "Nastavení VPN"
#: ../js/ui/status/network.js:1502 #: ../js/ui/status/network.js:1503
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1513
msgid "VPN Off"
msgstr "VPN je vypnuta"
#: ../js/ui/status/network.js:1697 #: ../js/ui/status/network.js:1697
msgid "Connection failed"
msgstr "Připojení selhalo"
#: ../js/ui/status/network.js:1698
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"
@ -1355,53 +1436,52 @@ msgstr "Nastavení napájení"
msgid "Fully Charged" msgid "Fully Charged"
msgstr "Plně nabito" msgstr "Plně nabito"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78 #: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
msgid "Estimating…" msgid "Estimating…"
msgstr "Odhaduje se…" msgstr "Odhaduje se…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:86 #: ../js/ui/status/power.js:86
#, javascript-format #, javascript-format
msgid "%d%02d Remaining (%d%%)" msgid "%d%02d Remaining (%d%%)"
msgstr "Zbývá %d%02d (%d%%)" msgstr "Zbývá %d%02d (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:91 #: ../js/ui/status/power.js:91
#, javascript-format #, javascript-format
msgid "%d%02d Until Full (%d%%)" msgid "%d%02d Until Full (%d%%)"
msgstr "%d%02d do nabití (%d%%)" msgstr "%d%02d do nabití (%d%%)"
#: ../js/ui/status/power.js:119 #. The menu only appears when airplane mode is on, so just
msgid "UPS" #. statically build it as if it was on, rather than dynamically
msgstr "Záložní zdroj" #. changing the menu contents.
#: ../js/ui/status/power.js:121
msgid "Battery"
msgstr "Baterie"
#: ../js/ui/status/rfkill.js:88 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode On"
msgstr "Režim „letadlo“" msgstr "Režim „letadlo“ je zapnutý"
#: ../js/ui/status/rfkill.js:90 #: ../js/ui/status/system.js:343
msgid "On"
msgstr "Zapnuto"
#: ../js/ui/status/system.js:337
msgid "Switch User" msgid "Switch User"
msgstr "Přepnout uživatele" msgstr "Přepnout uživatele"
#: ../js/ui/status/system.js:342 #: ../js/ui/status/system.js:348
msgid "Log Out" msgid "Log Out"
msgstr "Odhlásit se" msgstr "Odhlásit se"
#: ../js/ui/status/system.js:361 #: ../js/ui/status/system.js:353
msgid "Account Settings"
msgstr "Nastavení účtu"
#: ../js/ui/status/system.js:370
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Zámek otočení" msgstr "Zámek otočení"
#: ../js/ui/status/system.js:369 #: ../js/ui/status/system.js:378
msgid "Suspend" msgid "Suspend"
msgstr "Uspat do paměti" msgstr "Uspat do paměti"
#: ../js/ui/status/system.js:372 #: ../js/ui/status/system.js:381
msgid "Power Off" msgid "Power Off"
msgstr "Vypnout" msgstr "Vypnout"
@ -1444,16 +1524,16 @@ msgstr "Chcete zachovat nastavení displeje?"
#. Translators: this and the following message should be limited in lenght, #. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. */ #.
#: ../js/ui/windowManager.js:82 #: ../js/ui/windowManager.js:82
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Obnovit původní" msgstr "Obnovit původní"
#: ../js/ui/windowManager.js:86 #: ../js/ui/windowManager.js:85
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Zachovat" msgstr "Zachovat"
#: ../js/ui/windowManager.js:105 #: ../js/ui/windowManager.js:103
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -1462,8 +1542,8 @@ msgstr[1] "Nastavení se obnoví na původní za %d sekundy"
msgstr[2] "Nastavení se obnoví na původní za %d sekund" msgstr[2] "Nastavení se obnoví na původní za %d sekund"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. */ #. * the width of the window and the second is the height.
#: ../js/ui/windowManager.js:660 #: ../js/ui/windowManager.js:658
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d×%d" msgstr "%d×%d"
@ -1538,7 +1618,7 @@ msgstr "Kalendář Evolution"
#. translators: #. translators:
#. * The number of sound outputs on a particular device #. * The number of sound outputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1837 #: ../src/gvc/gvc-mixer-control.c:1835
#, c-format #, c-format
msgid "%u Output" msgid "%u Output"
msgid_plural "%u Outputs" msgid_plural "%u Outputs"
@ -1548,7 +1628,7 @@ msgstr[2] "%u výstupů"
#. translators: #. translators:
#. * The number of sound inputs on a particular device #. * The number of sound inputs on a particular device
#: ../src/gvc/gvc-mixer-control.c:1847 #: ../src/gvc/gvc-mixer-control.c:1845
#, c-format #, c-format
msgid "%u Input" msgid "%u Input"
msgid_plural "%u Inputs" msgid_plural "%u Inputs"
@ -1556,23 +1636,23 @@ msgstr[0] "%u vstup"
msgstr[1] "%u vstupy" msgstr[1] "%u vstupy"
msgstr[2] "%u vstupů" msgstr[2] "%u vstupů"
#: ../src/gvc/gvc-mixer-control.c:2373 #: ../src/gvc/gvc-mixer-control.c:2371
msgid "System Sounds" msgid "System Sounds"
msgstr "Systémové zvuky" msgstr "Systémové zvuky"
#: ../src/main.c:373 #: ../src/main.c:381
msgid "Print version" msgid "Print version"
msgstr "Vypsat verzi" msgstr "Vypsat verzi"
#: ../src/main.c:379 #: ../src/main.c:387
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "Režim použitý GDM pro přihlašovací obrazovku" msgstr "Režim použitý GDM pro přihlašovací obrazovku"
#: ../src/main.c:385 #: ../src/main.c:393
msgid "Use a specific mode, e.g. \"gdm\" for login screen" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Použít pro přihlašovací obrazovku zadaný režim, např. „gdm“." msgstr "Použít pro přihlašovací obrazovku zadaný režim, např. „gdm“."
#: ../src/main.c:391 #: ../src/main.c:399
msgid "List possible modes" msgid "List possible modes"
msgstr "Vypsat možné režimy" msgstr "Vypsat možné režimy"

541
po/da.po

File diff suppressed because it is too large Load Diff

580
po/de.po

File diff suppressed because it is too large Load Diff

590
po/el.po

File diff suppressed because it is too large Load Diff

1591
po/eo.po

File diff suppressed because it is too large Load Diff

5621
po/es.po

File diff suppressed because it is too large Load Diff

664
po/eu.po

File diff suppressed because it is too large Load Diff

1650
po/fa.po

File diff suppressed because it is too large Load Diff

737
po/fi.po

File diff suppressed because it is too large Load Diff

1237
po/fr.po

File diff suppressed because it is too large Load Diff

1695
po/ga.po

File diff suppressed because it is too large Load Diff

538
po/gl.po

File diff suppressed because it is too large Load Diff

358
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: 2015-07-16 13:28+0300\n" "POT-Creation-Date: 2015-08-30 21:15+0300\n"
"PO-Revision-Date: 2015-08-30 21:16+0300\n" "PO-Revision-Date: 2015-08-30 21:16+0300\n"
"Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n" "Last-Translator: Yosef Or Boczko <yoseforb@gmail.com>\n"
"Language-Team: עברית <>\n" "Language-Team: עברית <>\n"
@ -307,13 +307,14 @@ msgid "GNOME Shell Extensions"
msgid "GNOME Shell Extensions" msgid "GNOME Shell Extensions"
msgstr "הרחבות GNOME Shell" msgstr "הרחבות GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
#: ../js/ui/components/polkitAgent.js:179 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:179 ../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 "ביטול"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:435 #: ../js/gdm/authPrompt.js:435
msgid "Next" msgid "Next"
msgstr "הבא" msgstr "הבא"
@ -353,7 +354,7 @@ msgstr "(משתמש או %s לדוגמה)"
#: ../js/ui/components/networkAgent.js:289 #: ../js/ui/components/networkAgent.js:289
msgid "Username: " msgid "Username: "
msgstr "שם משתמש:" msgstr "שם משתמש:"
#: ../js/gdm/loginDialog.js:1181 #: ../js/gdm/loginDialog.js:1181
msgid "Login Window" msgid "Login Window"
msgstr "חלון כניסה" msgstr "חלון כניסה"
@ -461,31 +462,31 @@ msgstr "%d ב%B %Y, %l%M %p"
#: ../js/portalHelper/main.js:85 #: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "אימות ניתוב הרשת" msgstr "אימות ניתוב הרשת"
#: ../js/ui/appDisplay.js:794 #: ../js/ui/appDisplay.js:794
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "יישומים בשימוש תדיר יופיעו כאן" msgstr "יישומים בשימוש תדיר יופיעו כאן"
#: ../js/ui/appDisplay.js:914 #: ../js/ui/appDisplay.js:914
msgid "Frequent" msgid "Frequent"
msgstr "תדיר" msgstr "תדיר"
#: ../js/ui/appDisplay.js:921 #: ../js/ui/appDisplay.js:921
msgid "All" msgid "All"
msgstr "הכול" msgstr "הכול"
#: ../js/ui/appDisplay.js:1853 #: ../js/ui/appDisplay.js:1853
msgid "New Window" msgid "New Window"
msgstr "חלון חדש" msgstr "חלון חדש"
#: ../js/ui/appDisplay.js:1881 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1881 ../js/ui/dash.js:289
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "הסרה מהמועדפים" msgstr "הסרה מהמועדפים"
#: ../js/ui/appDisplay.js:1887 #: ../js/ui/appDisplay.js:1887
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "הוספה למועדפים" msgstr "הוספה למועדפים"
#: ../js/ui/appDisplay.js:1897 #: ../js/ui/appDisplay.js:1897
msgid "Show Details" msgid "Show Details"
msgstr "הצגת פרטים" msgstr "הצגת פרטים"
@ -505,15 +506,15 @@ msgstr "החלפת הרקע…"
msgstr "החלפת הרקע…" msgstr "החלפת הרקע…"
#: ../js/ui/backgroundMenu.js:21 #: ../js/ui/backgroundMenu.js:21
msgid "Display Settings" msgid "Display Settings"
msgstr "הגדרות תצוגה" msgstr "הגדרות תצוגה"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650 #: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650
#: ../js/ui/status/system.js:366 #: ../js/ui/status/system.js:366
msgid "Settings" msgid "Settings"
msgstr "הגדרות" msgstr "הגדרות"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). #. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:55 #: ../js/ui/calendar.js:55
msgctxt "calendar-no-work" msgctxt "calendar-no-work"
msgid "06" msgid "06"
@ -523,94 +524,94 @@ msgstr "65"
#. * #. *
#. * 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:84 #: ../js/ui/calendar.js:84
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:86 #: ../js/ui/calendar.js:86
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:88 #: ../js/ui/calendar.js:88
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:90 #: ../js/ui/calendar.js:90
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:92 #: ../js/ui/calendar.js:92
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:94 #: ../js/ui/calendar.js:94
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:96 #: ../js/ui/calendar.js:96
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "ש" msgstr "ש"
#: ../js/ui/calendar.js:566 #: ../js/ui/calendar.js:566
msgid "Previous month" msgid "Previous month"
msgstr "חודש קודם" msgstr "חודש קודם"
#: ../js/ui/calendar.js:576 #: ../js/ui/calendar.js:576
msgid "Next month" msgid "Next month"
msgstr "חודש הבא" msgstr "חודש הבא"
#: ../js/ui/calendar.js:783 #: ../js/ui/calendar.js:783
msgid "Week %V" msgid "Week %V"
msgstr "שבוע %V" msgstr "שבוע %V"
#. 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:1188 #: ../js/ui/calendar.js:1188
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "יום שלם" msgstr "יום שלם"
#: ../js/ui/calendar.js:1291 #: ../js/ui/calendar.js:1291
msgid "Clear section" msgid "Clear section"
msgstr "ניקוי מקטע" msgstr "ניקוי מקטע"
#: ../js/ui/calendar.js:1518 #: ../js/ui/calendar.js:1518
msgid "Events" msgid "Events"
msgstr "אירועים" msgstr "אירועים"
#: ../js/ui/calendar.js:1527 #: ../js/ui/calendar.js:1527
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A, ה־%e ב%B" msgstr "%A, ה־%e ב%B"
#: ../js/ui/calendar.js:1531 #: ../js/ui/calendar.js:1531
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:1616 #: ../js/ui/calendar.js:1616
msgid "Notifications" msgid "Notifications"
msgstr "התרעות" msgstr "התרעות"
#: ../js/ui/calendar.js:1767 #: ../js/ui/calendar.js:1767
msgid "No Notifications" msgid "No Notifications"
msgstr "אין התרעות" msgstr "אין התרעות"
#: ../js/ui/calendar.js:1770 #: ../js/ui/calendar.js:1770
msgid "No Events" msgid "No Events"
msgstr "אין אירועים" msgstr "אין אירועים"
@ -627,16 +628,16 @@ msgstr "נותק כונן חיצוני"
#, javascript-format #, javascript-format
msgid "Open with %s" msgid "Open with %s"
msgstr "פתיחה באמצעות %s" msgstr "פתיחה באמצעות %s"
#: ../js/ui/components/keyring.js:120 ../js/ui/components/polkitAgent.js:315 #: ../js/ui/components/keyring.js:120 ../js/ui/components/polkitAgent.js:315
msgid "Password:" msgid "Password:"
msgstr "ססמה:" msgstr "ססמה:"
#: ../js/ui/components/keyring.js:153 #: ../js/ui/components/keyring.js:153
msgid "Type again:" msgid "Type again:"
msgstr "נא להקליד שוב:" msgstr "נא להקליד שוב:"
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:269
#: ../js/ui/status/network.js:352 ../js/ui/status/network.js:919 #: ../js/ui/status/network.js:352 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "התחברות" msgstr "התחברות"
@ -720,19 +721,19 @@ msgstr "ססמת רשת הפס הרחב הניידת"
#, javascript-format #, javascript-format
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "נדרשת ססמה כדי להתחבר אל „%s”" msgstr "נדרשת ססמה כדי להתחבר אל „%s”"
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1658 #: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1658
msgid "Network Manager" msgid "Network Manager"
msgstr "מנהל הרשתות" msgstr "מנהל הרשתות"
#: ../js/ui/components/polkitAgent.js:60 #: ../js/ui/components/polkitAgent.js:60
msgid "Authentication Required" msgid "Authentication Required"
msgstr "נדרש אימות" msgstr "נדרש אימות"
#: ../js/ui/components/polkitAgent.js:102 #: ../js/ui/components/polkitAgent.js:102
msgid "Administrator" msgid "Administrator"
msgstr "מנהל" msgstr "מנהל"
#: ../js/ui/components/polkitAgent.js:182 #: ../js/ui/components/polkitAgent.js:182
msgid "Authenticate" msgid "Authenticate"
msgstr "אימות" msgstr "אימות"
@ -740,13 +741,13 @@ msgstr "אימות"
#. Translators: "that didn't work" refers to the fact that the #. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen #. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password), #. * because of an authentication error (like invalid password),
#. * for instance. #. * for instance.
#: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383 #: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה." msgstr "פעולה זו לא הצליחה, נא לנסות שוב. עמך הסליחה."
#. Translators: this is 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:759 #: ../js/ui/components/telepathyClient.js:759
#, javascript-format #, javascript-format
msgid "%s is now known as %s" msgid "%s is now known as %s"
@ -923,7 +924,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:741 ../js/ui/status/keyboard.js:713 #: ../js/ui/keyboard.js:741 ../js/ui/status/keyboard.js:713
msgid "Keyboard" msgid "Keyboard"
msgstr "מקלדת" msgstr "מקלדת"
@ -954,17 +955,13 @@ msgstr "הסתרת השגיאות"
#: ../js/ui/lookingGlass.js:707 ../js/ui/lookingGlass.js:767 #: ../js/ui/lookingGlass.js:707 ../js/ui/lookingGlass.js:767
msgid "Show Errors" msgid "Show Errors"
msgstr "הצגת השגיאות" msgstr "הצגת השגיאות"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71
#: ../js/ui/lookingGlass.js:716 #: ../js/ui/lookingGlass.js:716
msgid "Enabled" msgid "Enabled"
msgstr "פעיל" msgstr "פעיל"
#. Translators: this is for a network device that cannot be activated
#. translators: #. translators:
#. * The device has been disabled #. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
#: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830 #: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "מנוטרל" msgstr "מנוטרל"
@ -996,7 +993,7 @@ msgstr "פרטי המערכת"
#: ../js/ui/overview.js:84 #: ../js/ui/overview.js:84
msgid "Undo" msgid "Undo"
msgstr "ביטול" msgstr "ביטול"
#: ../js/ui/overview.js:117 #: ../js/ui/overview.js:117
msgid "Overview" msgid "Overview"
msgstr "סקירה" msgstr "סקירה"
@ -1004,7 +1001,7 @@ msgstr "סקירה"
#. Translators: this is the text displayed #. Translators: this is the text displayed
#. in the search entry when no search is #. in the search entry when no search is
#. active; it should not exceed ~30 #. active; it should not exceed ~30
#. characters. #. characters.
#: ../js/ui/overview.js:244 #: ../js/ui/overview.js:244
msgid "Type to search…" msgid "Type to search…"
msgstr "יש להקליד כדי לחפש…" msgstr "יש להקליד כדי לחפש…"
@ -1018,7 +1015,7 @@ msgstr "יציאה"
#: ../js/ui/panel.js:404 #: ../js/ui/panel.js:404
msgid "Activities" msgid "Activities"
msgstr "פעילויות" msgstr "פעילויות"
#: ../js/ui/panel.js:754 #: ../js/ui/panel.js:754
msgid "Top Bar" msgid "Top Bar"
msgstr "הסרגל העליון" msgstr "הסרגל העליון"
@ -1065,7 +1062,7 @@ msgid_plural "%d new notifications"
msgid_plural "%d new notifications" msgid_plural "%d new notifications"
msgstr[0] "התרעה חדשה אחת" msgstr[0] "התרעה חדשה אחת"
msgstr[1] "%d התרעות חדשות" msgstr[1] "%d התרעות חדשות"
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374
msgid "Lock" msgid "Lock"
msgstr "נעילה" msgstr "נעילה"
@ -1164,16 +1161,10 @@ msgstr "ניגודיות גבוהה"
#: ../js/ui/status/accessibility.js:202 #: ../js/ui/status/accessibility.js:202
msgid "Large Text" msgid "Large Text"
msgstr "טקסט גדול" msgstr "טקסט גדול"
#. The Bluetooth menu only appears when Bluetooth is in use,
#. so just statically build it with a "Turn Off" menu item.
#: ../js/ui/status/bluetooth.js:49
msgid "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:1282 #: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91 #: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
#: ../js/ui/status/rfkill.js:117 #: ../js/ui/status/rfkill.js:117
msgid "Turn Off" msgid "Turn Off"
msgstr "כיבוי" msgstr "כיבוי"
@ -1181,17 +1172,17 @@ msgstr "כיבוי"
#: ../js/ui/status/bluetooth.js:54 #: ../js/ui/status/bluetooth.js:54
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "הגדרות Bluetooth" msgstr "הגדרות Bluetooth"
# javascript-format #. Translators: this is the number of connected bluetooth devices
#: ../js/ui/status/bluetooth.js:105 #: ../js/ui/status/bluetooth.js:105
#, c-format #, c-format
msgid "%d Connected Device" msgid "%d Connected"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected"
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:107
msgid "Not Connected" msgid "Not In Use"
msgstr "לא בשימוש" msgstr "לא בשימוש"
#: ../js/ui/status/brightness.js:44 #: ../js/ui/status/brightness.js:44
@ -1201,11 +1192,11 @@ msgstr "בהירות"
#: ../js/ui/status/keyboard.js:736 #: ../js/ui/status/keyboard.js:736
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "הצגת פריסת המקלדת" msgstr "הצגת פריסת המקלדת"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
msgid "Location" msgid "Location Enabled"
msgstr "איכון מאופשר" msgstr "איכון מאופשר"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178 #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
msgid "Disable" msgid "Disable"
msgstr "השבתה" msgstr "השבתה"
@ -1214,10 +1205,14 @@ msgid "Privacy Settings"
msgid "Privacy Settings" msgid "Privacy Settings"
msgstr "הגדרות פרטיות" msgstr "הגדרות פרטיות"
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:176
msgid "In Use" msgid "Location In Use"
msgstr "איכון בשימוש" msgstr "איכון בשימוש"
#: ../js/ui/status/location.js:180
msgid "Location Disabled"
msgstr "איכון מושבת"
#: ../js/ui/status/location.js:181 #: ../js/ui/status/location.js:181
msgid "Enable" msgid "Enable"
msgstr "אפשור" msgstr "אפשור"
@ -1225,61 +1220,84 @@ 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:1308 #. Translators: %s is a network identifier
#: ../js/ui/status/network.js:1512 #: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
msgid "Off" #, javascript-format
msgid "%s Off"
msgstr "%s כבוי" msgstr "%s כבוי"
#: ../js/ui/status/network.js:459 #. Translators: %s is a network identifier
msgid "Connected" #: ../js/ui/status/network.js:454
#, javascript-format
msgid "%s Connected"
msgstr "%s מחובר" msgstr "%s מחובר"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) #. under NetworkManager's control (and thus cannot be used in the menu);
#: ../js/ui/status/network.js:463 #. %s is a network identifier
msgid "Unmanaged" #: ../js/ui/status/network.js:459
#, javascript-format
msgid "%s Unmanaged"
msgstr "%s לא מנוהל" msgstr "%s לא מנוהל"
#: ../js/ui/status/network.js:465 #. Translators: %s is a network identifier
msgid "Disconnecting" #: ../js/ui/status/network.js:462
#, javascript-format
msgid "%s Disconnecting"
msgstr "%s בהליכי ניתוק" msgstr "%s בהליכי ניתוק"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302 #. Translators: %s is a network identifier
msgid "Connecting" #: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
#, javascript-format
msgid "%s Connecting"
msgstr "%s בהתחברות" msgstr "%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; %s is a network identifier
#: ../js/ui/status/network.js:474 #: ../js/ui/status/network.js:472
msgid "Authentication required" #, javascript-format
msgid "%s Requires Authentication"
msgstr "%s דורש אימות" msgstr "%s דורש אימות"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing #. module, which is missing; %s is a network identifier
#: ../js/ui/status/network.js:482 #: ../js/ui/status/network.js:480
msgid "Firmware missing" #, javascript-format
msgid "Firmware Missing For %s"
msgstr "חסרה קושחה עבור %s" msgstr "חסרה קושחה עבור %s"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: ../js/ui/status/network.js:486 #: ../js/ui/status/network.js:484
msgid "Unavailable" #, javascript-format
msgid "%s Unavailable"
msgstr "%s לא זמין" msgstr "%s לא זמין"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696 #. Translators: %s is a network identifier
msgid "Connection failed" #: ../js/ui/status/network.js:487
#, javascript-format
msgid "%s Connection Failed"
msgstr "נכשלה ההתחברות אל %s" msgstr "נכשלה ההתחברות אל %s"
#: ../js/ui/status/network.js:503 #: ../js/ui/status/network.js:503
msgid "Wired Settings" msgid "Wired Settings"
msgstr "הגדרות רשת קווית" msgstr "הגדרות רשת קווית"
#: ../js/ui/status/network.js:545 ../js/ui/status/network.js:624 #: ../js/ui/status/network.js:545 ../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 #. Translators: %s is a network identifier
msgid "Hardware Disabled" #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s נמנוטרל חומרתית"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: ../js/ui/status/network.js:592
#, javascript-format
msgid "%s Disabled"
msgstr "%s מושבת" msgstr "%s מושבת"
#: ../js/ui/status/network.js:632 #: ../js/ui/status/network.js:632
@ -1321,52 +1339,68 @@ 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:115 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:115
msgid "Use hardware switch to turn off" msgid "Use hardware switch to turn off"
msgstr "שימוש במתג של החומרה לכיבוי" msgstr "שימוש במתג של החומרה לכיבוי"
#: ../js/ui/status/network.js:1171 #: ../js/ui/status/network.js:1171
msgid "Select Network" msgid "Select Network"
msgstr "בחירת רשת" msgstr "בחירת רשת"
#: ../js/ui/status/network.js:1177 #: ../js/ui/status/network.js:1177
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "הגדרות רשת אלחוטית" msgstr "הגדרות רשת אלחוטית"
#: ../js/ui/status/network.js:1279 #: ../js/ui/status/network.js:1279
msgid "Turn On" msgid "Turn On"
msgstr "הפעלה" msgstr "הפעלה"
#: ../js/ui/status/network.js:1299 #. Translators: %s is a network identifier
msgid "Hotspot Active" #: ../js/ui/status/network.js:1296
#, javascript-format
msgid "%s Hotspot Active"
msgstr "נקודה חמה %s פעילה" msgstr "נקודה חמה %s פעילה"
#. Translators: %s is a network identifier
#: ../js/ui/status/network.js:1311
#, javascript-format
msgid "%s Not Connected"
msgstr "%s לא מחובר"
#: ../js/ui/status/network.js:1411 #: ../js/ui/status/network.js:1411
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:1414 #: ../js/ui/status/network.js:1414
msgid "authentication required" msgid "authentication required"
msgstr "נדרש אימות" msgstr "נדרש אימות"
#: ../js/ui/status/network.js:1416 #: ../js/ui/status/network.js:1416
msgid "connection failed" msgid "connection failed"
msgstr "ההתחברות נכשלה" msgstr "ההתחברות נכשלה"
#: ../js/ui/status/network.js:1482 ../js/ui/status/rfkill.js:93 #: ../js/ui/status/network.js:1482 ../js/ui/status/rfkill.js:93
msgid "Network Settings" msgid "Network Settings"
msgstr "הגדרות הרשת" msgstr "הגדרות הרשת"
#: ../js/ui/status/network.js:1484 #: ../js/ui/status/network.js:1484
msgid "VPN Settings" msgid "VPN Settings"
msgstr "הגדרות VPN" msgstr "הגדרות VPN"
#: ../js/ui/status/network.js:1503 #: ../js/ui/status/network.js:1503
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1513
msgid "VPN Off"
msgstr "VPN כבוי"
#: ../js/ui/status/network.js:1697
msgid "Connection failed"
msgstr "ההתחברות נכשלה"
#: ../js/ui/status/network.js:1698 #: ../js/ui/status/network.js:1698
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "הפעלת חיבור הרשת נכשלה" msgstr "הפעלת חיבור הרשת נכשלה"
@ -1396,42 +1430,34 @@ msgstr "%d%02d נותרו (%d%%)"
#, javascript-format #, javascript-format
msgid "%d%02d Until Full (%d%%)" msgid "%d%02d Until Full (%d%%)"
msgstr "%d:%02d עד לטעינה מלאה (%d%%)" msgstr "%d:%02d עד לטעינה מלאה (%d%%)"
#: ../js/ui/status/power.js:119
msgid "UPS"
msgstr "אל־פסק"
#: ../js/ui/status/power.js:121
msgid "Battery"
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 On"
msgstr "מצב טיסה מופעל" msgstr "מצב טיסה מופעל"
#: ../js/ui/status/rfkill.js:90
msgid "On"
msgstr "פועל"
#: ../js/ui/status/system.js:343 #: ../js/ui/status/system.js:343
msgid "Switch User" msgid "Switch User"
msgstr "החלפת משתמש" msgstr "החלפת משתמש"
#: ../js/ui/status/system.js:348 #: ../js/ui/status/system.js:348
msgid "Log Out" msgid "Log Out"
msgstr "יציאה" msgstr "יציאה"
#: ../js/ui/status/system.js:353
msgid "Account Settings"
msgstr "הגדרות חשבון"
#: ../js/ui/status/system.js:370 #: ../js/ui/status/system.js:370
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "נעילת כיוון" msgstr "נעילת כיוון"
#: ../js/ui/status/system.js:378 #: ../js/ui/status/system.js:378
msgid "Suspend" msgid "Suspend"
msgstr "השהיה" msgstr "השהיה"
#: ../js/ui/status/system.js:381 #: ../js/ui/status/system.js:381
msgid "Power Off" msgid "Power Off"
msgstr "כיבוי" msgstr "כיבוי"
@ -1479,12 +1505,12 @@ msgstr "האם ברצונך לשמור הגדרות תצוגה אלה?"
#: ../js/ui/windowManager.js:82 #: ../js/ui/windowManager.js:82
msgid "Revert Settings" msgid "Revert Settings"
msgstr "שחזור הגדרות" msgstr "שחזור הגדרות"
#: ../js/ui/windowManager.js:85 #: ../js/ui/windowManager.js:85
msgid "Keep Changes" msgid "Keep Changes"
msgstr "שמירת שינויים" msgstr "שמירת שינויים"
# javascript-format # javascript-format
#: ../js/ui/windowManager.js:103 #: ../js/ui/windowManager.js:103
#, c-format #, c-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
@ -1493,7 +1519,7 @@ msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות"
msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות" msgstr[1] "שינויי הגדרות ישוחזרו בעוד %d שניות"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: ../js/ui/windowManager.js:658 #: ../js/ui/windowManager.js:658
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
@ -1620,12 +1646,39 @@ msgstr "הססמאות אינן תואמות."
msgstr "הססמאות אינן תואמות." msgstr "הססמאות אינן תואמות."
#: ../src/shell-keyring-prompt.c:750 #: ../src/shell-keyring-prompt.c:750
msgid "Password cannot be blank" msgid "Password cannot be blank"
msgstr "הססמה אינה יכולה להישאר ריקה" 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 "Bluetooth"
#~ msgstr "Bluetooth"
# javascript-format
#~ msgid "%d Connected Device"
#~ msgid_plural "%d Connected Devices"
#~ msgstr[0] "התקן אחד מחובר"
#~ msgstr[1] "%d התקנים מחוברים"
#~ msgid "Off"
#~ msgstr "כבוי"
#~ msgid "Authentication required"
#~ msgstr "נדרש אימות"
#~ msgid "UPS"
#~ msgstr "אל־פסק"
#~ msgid "Battery"
#~ msgstr "סוללה"
#~ msgid "Airplane Mode"
#~ msgstr "מצב טיסה"
#~ msgid "On"
#~ msgstr "פועל"
#~ msgctxt "event list time" #~ msgctxt "event list time"
#~ msgid "%H%M" #~ msgid "%H%M"
@ -2138,9 +2191,6 @@ msgstr "המשתמש בחר להתעלם מתיבת דו־שיח האימות"
#~ msgid "Mouse Settings" #~ msgid "Mouse Settings"
#~ msgstr "הגדרות עכבר" #~ msgstr "הגדרות עכבר"
#~ msgid "Sound Settings"
#~ msgstr "הגדרות שמע"
#~ msgid "Region & Language Settings" #~ msgid "Region & Language Settings"
#~ msgstr "הגדרות אזור ושפה" #~ msgstr "הגדרות אזור ושפה"

884
po/hu.po

File diff suppressed because it is too large Load Diff

848
po/id.po

File diff suppressed because it is too large Load Diff

631
po/is.po

File diff suppressed because it is too large Load Diff

650
po/it.po

File diff suppressed because it is too large Load Diff

503
po/ja.po

File diff suppressed because it is too large Load Diff

649
po/kk.po

File diff suppressed because it is too large Load Diff

639
po/ko.po

File diff suppressed because it is too large Load Diff

653
po/lt.po

File diff suppressed because it is too large Load Diff

610
po/lv.po

File diff suppressed because it is too large Load Diff

354
po/nb.po
View File

@ -9,9 +9,9 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell 3.17.x\n" "Project-Id-Version: gnome-shell 3.17.x\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-07-30 11:36+0200\n" "POT-Creation-Date: 2015-10-16 18:11+0200\n"
"PO-Revision-Date: 2015-07-30 11:36+0200\n" "PO-Revision-Date: 2015-10-16 18:11+0200\n"
"Last-Translator: Åka Sikrom <a4NOSPAMPLEASETHANKYOU@hush.com>\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n" "Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: Norwegian bokmål\n" "Language: Norwegian bokmål\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -307,14 +307,14 @@ msgid "GNOME Shell Extensions"
msgstr "Utvidelser for GNOME Shell" msgstr "Utvidelser for GNOME Shell"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145 #: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452 #: ../js/ui/components/polkitAgent.js:179 ../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 "Avbryt" msgstr "Avbryt"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215 #: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:435 #: ../js/gdm/authPrompt.js:447
msgid "Next" msgid "Next"
msgstr "Neste" msgstr "Neste"
@ -341,7 +341,7 @@ 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:847 #: ../js/gdm/loginDialog.js:850
#, 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)"
@ -349,12 +349,12 @@ 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:852 ../js/ui/components/networkAgent.js:271 #: ../js/gdm/loginDialog.js:855 ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:289 #: ../js/ui/components/networkAgent.js:289
msgid "Username: " msgid "Username: "
msgstr "Brukernavn: " msgstr "Brukernavn: "
#: ../js/gdm/loginDialog.js:1180 #: ../js/gdm/loginDialog.js:1184
msgid "Login Window" msgid "Login Window"
msgstr "Innloggingsvindu" msgstr "Innloggingsvindu"
@ -462,31 +462,31 @@ msgstr "%d %B %Y, %H.%M"
msgid "Web Authentication Redirect" msgid "Web Authentication Redirect"
msgstr "Omdirigering av autentisering på nett" msgstr "Omdirigering av autentisering på nett"
#: ../js/ui/appDisplay.js:789 #: ../js/ui/appDisplay.js:794
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Ofte brukte programmer vises her" msgstr "Ofte brukte programmer vises her"
#: ../js/ui/appDisplay.js:909 #: ../js/ui/appDisplay.js:914
msgid "Frequent" msgid "Frequent"
msgstr "Ofte" msgstr "Ofte"
#: ../js/ui/appDisplay.js:916 #: ../js/ui/appDisplay.js:921
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: ../js/ui/appDisplay.js:1845 #: ../js/ui/appDisplay.js:1853
msgid "New Window" msgid "New Window"
msgstr "Nytt vindu" msgstr "Nytt vindu"
#: ../js/ui/appDisplay.js:1873 ../js/ui/dash.js:289 #: ../js/ui/appDisplay.js:1881 ../js/ui/dash.js:289
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Fjern fra favoritter" msgstr "Fjern fra favoritter"
#: ../js/ui/appDisplay.js:1879 #: ../js/ui/appDisplay.js:1887
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Legg til i favoritter" msgstr "Legg til i favoritter"
#: ../js/ui/appDisplay.js:1889 #: ../js/ui/appDisplay.js:1897
msgid "Show Details" msgid "Show Details"
msgstr "Vis detaljer" msgstr "Vis detaljer"
@ -508,13 +508,12 @@ msgstr "Bytt bakgrunn …"
msgid "Display Settings" msgid "Display Settings"
msgstr "Innstillinger for skjerm" msgstr "Innstillinger for skjerm"
#: ../js/ui/backgroundMenu.js:22 ../js/ui/panel.js:650 #: ../js/ui/backgroundMenu.js:22 ../js/ui/status/system.js:366
#: ../js/ui/status/system.js:357
msgid "Settings" msgid "Settings"
msgstr "Innstillinger" msgstr "Innstillinger"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). #. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:53 #: ../js/ui/calendar.js:55
msgctxt "calendar-no-work" msgctxt "calendar-no-work"
msgid "06" msgid "06"
msgstr "06" msgstr "06"
@ -524,94 +523,94 @@ msgstr "06"
#. * 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:82 #: ../js/ui/calendar.js:84
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:84 #: ../js/ui/calendar.js:86
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:86 #: ../js/ui/calendar.js:88
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:88 #: ../js/ui/calendar.js:90
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:90 #: ../js/ui/calendar.js:92
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:92 #: ../js/ui/calendar.js:94
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:94 #: ../js/ui/calendar.js:96
msgctxt "grid saturday" msgctxt "grid saturday"
msgid "S" msgid "S"
msgstr "L" msgstr "L"
#: ../js/ui/calendar.js:564 #: ../js/ui/calendar.js:566
msgid "Previous month" msgid "Previous month"
msgstr "Forrige måned" msgstr "Forrige måned"
#: ../js/ui/calendar.js:574 #: ../js/ui/calendar.js:576
msgid "Next month" msgid "Next month"
msgstr "Neste måned" msgstr "Neste måned"
#: ../js/ui/calendar.js:781 #: ../js/ui/calendar.js:783
msgid "Week %V" msgid "Week %V"
msgstr "Uke %V" msgstr "Uke %V"
#. 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:1187 #: ../js/ui/calendar.js:1188
msgctxt "event list time" msgctxt "event list time"
msgid "All Day" msgid "All Day"
msgstr "Hele dagen" msgstr "Hele dagen"
#: ../js/ui/calendar.js:1289 #: ../js/ui/calendar.js:1295
msgid "Clear section" msgid "Clear section"
msgstr "Tøm seksjon" msgstr "Tøm seksjon"
#: ../js/ui/calendar.js:1516 #: ../js/ui/calendar.js:1522
msgid "Events" msgid "Events"
msgstr "Hendelser" msgstr "Hendelser"
#: ../js/ui/calendar.js:1525 #: ../js/ui/calendar.js:1531
msgctxt "calendar heading" msgctxt "calendar heading"
msgid "%A, %B %d" msgid "%A, %B %d"
msgstr "%A %B %d" msgstr "%A %B %d"
#: ../js/ui/calendar.js:1529 #: ../js/ui/calendar.js:1535
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:1614 #: ../js/ui/calendar.js:1620
msgid "Notifications" msgid "Notifications"
msgstr "Varslinger" msgstr "Varslinger"
#: ../js/ui/calendar.js:1765 #: ../js/ui/calendar.js:1771
msgid "No Notifications" msgid "No Notifications"
msgstr "Ingen varslinger" msgstr "Ingen varslinger"
#: ../js/ui/calendar.js:1768 #: ../js/ui/calendar.js:1774
msgid "No Events" msgid "No Events"
msgstr "Ingen hendelser" msgstr "Ingen hendelser"
@ -623,21 +622,21 @@ msgstr "Ekstern stasjon koblet til"
msgid "External drive disconnected" msgid "External drive disconnected"
msgstr "Ekstern stasjon koblet fra" msgstr "Ekstern stasjon koblet fra"
#: ../js/ui/components/autorunManager.js:354 #: ../js/ui/components/autorunManager.js:351
#, javascript-format #, javascript-format
msgid "Open with %s" msgid "Open with %s"
msgstr "Åpne med %s" msgstr "Åpne med %s"
#: ../js/ui/components/keyring.js:94 ../js/ui/components/polkitAgent.js:285 #: ../js/ui/components/keyring.js:120 ../js/ui/components/polkitAgent.js:315
msgid "Password:" msgid "Password:"
msgstr "Passord:" msgstr "Passord:"
#: ../js/ui/components/keyring.js:120 #: ../js/ui/components/keyring.js:153
msgid "Type again:" msgid "Type again:"
msgstr "Skriv på nytt:" msgstr "Skriv på nytt:"
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277 #: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:269
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919 #: ../js/ui/status/network.js:352 ../js/ui/status/network.js:919
msgid "Connect" msgid "Connect"
msgstr "Koble til" msgstr "Koble til"
@ -723,19 +722,19 @@ msgstr "Nettverkspassord for mobilt bredbånd"
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Du må oppgi et passord for å koble til «%s»." msgstr "Du må oppgi et passord for å koble til «%s»."
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1657 #: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1658
msgid "Network Manager" msgid "Network Manager"
msgstr "Nettverkshåndtering" msgstr "Nettverkshåndtering"
#: ../js/ui/components/polkitAgent.js:54 #: ../js/ui/components/polkitAgent.js:60
msgid "Authentication Required" msgid "Authentication Required"
msgstr "Autentisering kreves" msgstr "Autentisering kreves"
#: ../js/ui/components/polkitAgent.js:96 #: ../js/ui/components/polkitAgent.js:102
msgid "Administrator" msgid "Administrator"
msgstr "Administrator" msgstr "Administrator"
#: ../js/ui/components/polkitAgent.js:175 #: ../js/ui/components/polkitAgent.js:182
msgid "Authenticate" msgid "Authenticate"
msgstr "Autentiser" msgstr "Autentiser"
@ -743,13 +742,13 @@ msgstr "Autentiser"
#. * requested authentication was not gained; this can happen #. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password), #. * because of an authentication error (like invalid password),
#. * for instance. #. * for instance.
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383 #: ../js/ui/components/polkitAgent.js:301 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again." msgid "Sorry, that didn't work. Please try again."
msgstr "Beklager, det virket ikke. Prøv igjen." msgstr "Beklager, det virket ikke. Prøv igjen."
#. 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:757 #: ../js/ui/components/telepathyClient.js:759
#, 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"
@ -962,17 +961,13 @@ msgstr "Skjul feil"
msgid "Show Errors" msgid "Show Errors"
msgstr "Vis feil" msgstr "Vis feil"
#: ../js/ui/lookingGlass.js:716 ../js/ui/status/location.js:71 #: ../js/ui/lookingGlass.js:716
#: ../js/ui/status/location.js:176
msgid "Enabled" msgid "Enabled"
msgstr "Slått på" msgstr "Slått på"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode)
#. translators: #. translators:
#. * The device has been disabled #. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179 #: ../js/ui/lookingGlass.js:719 ../src/gvc/gvc-mixer-control.c:1830
#: ../js/ui/status/network.js:592 ../src/gvc/gvc-mixer-control.c:1830
msgid "Disabled" msgid "Disabled"
msgstr "Slått av" msgstr "Slått av"
@ -1016,17 +1011,22 @@ msgstr "Oversikt"
msgid "Type to search…" msgid "Type to search…"
msgstr "Skriv for å søke …" msgstr "Skriv for å søke …"
#: ../js/ui/panel.js:352 #: ../js/ui/panel.js:358
msgid "Quit" msgid "Quit"
msgstr "Avslutt" msgstr "Avslutt"
#. Translators: If there is no suitable word for "Activities" #. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". #. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:404 #: ../js/ui/panel.js:414
msgid "Activities" msgid "Activities"
msgstr "Aktiviteter" msgstr "Aktiviteter"
#: ../js/ui/panel.js:755 #: ../js/ui/panel.js:693
msgctxt "System menu in the top bar"
msgid "System"
msgstr "System"
#: ../js/ui/panel.js:805
msgid "Top Bar" msgid "Top Bar"
msgstr "Topp-panel" msgstr "Topp-panel"
@ -1071,7 +1071,7 @@ 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:432 ../js/ui/status/system.js:365 #: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:374
msgid "Lock" msgid "Lock"
msgstr "Lås" msgstr "Lås"
@ -1170,16 +1170,10 @@ msgstr "Høy kontrast"
msgid "Large Text" msgid "Large Text"
msgstr "Stor tekst" msgstr "Stor tekst"
#. The Bluetooth menu only appears when Bluetooth is in use,
#. so just statically build it with a "Turn Off" menu item.
#: ../js/ui/status/bluetooth.js:49
msgid "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:1282 #: ../js/ui/status/network.js:353 ../js/ui/status/network.js:1279
#: ../js/ui/status/network.js:1393 ../js/ui/status/rfkill.js:91 #: ../js/ui/status/network.js:1394 ../js/ui/status/rfkill.js:90
#: ../js/ui/status/rfkill.js:118 #: ../js/ui/status/rfkill.js:117
msgid "Turn Off" msgid "Turn Off"
msgstr "Slå av" msgstr "Slå av"
@ -1187,16 +1181,17 @@ msgstr "Slå av"
msgid "Bluetooth Settings" msgid "Bluetooth Settings"
msgstr "Bluetooth-innstillinger" msgstr "Bluetooth-innstillinger"
#: ../js/ui/status/bluetooth.js:104 #. Translators: this is the number of connected bluetooth devices
#: ../js/ui/status/bluetooth.js:105
#, javascript-format #, javascript-format
msgid "%d Connected Device" msgid "%d Connected"
msgid_plural "%d Connected Devices" msgid_plural "%d Connected"
msgstr[0] "%d tilkoblet enhet" msgstr[0] "%d koblet til"
msgstr[1] "%d tilkoblede enheter" msgstr[1] "%d koblet til"
#: ../js/ui/status/bluetooth.js:106 ../js/ui/status/network.js:1310 #: ../js/ui/status/bluetooth.js:107
msgid "Not Connected" msgid "Not In Use"
msgstr "Ikke koblet til" msgstr "Ikke i bruk"
#: ../js/ui/status/brightness.js:44 #: ../js/ui/status/brightness.js:44
msgid "Brightness" msgid "Brightness"
@ -1206,11 +1201,11 @@ msgstr "Lysstyrke"
msgid "Show Keyboard Layout" msgid "Show Keyboard Layout"
msgstr "Vis tastaturutforming" msgstr "Vis tastaturutforming"
#: ../js/ui/status/location.js:65 #: ../js/ui/status/location.js:71 ../js/ui/status/location.js:177
msgid "Location" msgid "Location Enabled"
msgstr "Plassering" msgstr "Plassering slått på"
#: ../js/ui/status/location.js:72 ../js/ui/status/location.js:177 #: ../js/ui/status/location.js:72 ../js/ui/status/location.js:178
msgid "Disable" msgid "Disable"
msgstr "Slå av" msgstr "Slå av"
@ -1219,10 +1214,14 @@ msgid "Privacy Settings"
msgstr "Innstillinger for personvern" msgstr "Innstillinger for personvern"
#: ../js/ui/status/location.js:176 #: ../js/ui/status/location.js:176
msgid "In Use" msgid "Location In Use"
msgstr "I bruk" msgstr "Plassering i bruk"
#: ../js/ui/status/location.js:180 #: ../js/ui/status/location.js:180
msgid "Location Disabled"
msgstr "Plassering slått av"
#: ../js/ui/status/location.js:181
msgid "Enable" msgid "Enable"
msgstr "Slå på" msgstr "Slå på"
@ -1230,61 +1229,84 @@ msgstr "Slå på"
msgid "<unknown>" msgid "<unknown>"
msgstr "<ukjent>" msgstr "<ukjent>"
#: ../js/ui/status/network.js:457 ../js/ui/status/network.js:1308 #. Translators: %s is a network identifier
#: ../js/ui/status/network.js:1512 #: ../js/ui/status/network.js:451 ../js/ui/status/network.js:1308
msgid "Off" #, javascript-format
msgstr "Av" msgid "%s Off"
msgstr "%s av"
#: ../js/ui/status/network.js:459 #. Translators: %s is a network identifier
msgid "Connected" #: ../js/ui/status/network.js:454
msgstr "Koblet til" #, javascript-format
msgid "%s Connected"
msgstr "%s koblet til"
#. Translators: this is for network devices that are physically present but are not #. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) #. under NetworkManager's control (and thus cannot be used in the menu);
#: ../js/ui/status/network.js:463 #. %s is a network identifier
msgid "Unmanaged" #: ../js/ui/status/network.js:459
msgstr "Håndteres ikke" #, javascript-format
msgid "%s Unmanaged"
msgstr "%s håndteres ikke"
#: ../js/ui/status/network.js:465 #. Translators: %s is a network identifier
msgid "Disconnecting" #: ../js/ui/status/network.js:462
msgstr "Kobler fra" #, javascript-format
msgid "%s Disconnecting"
msgstr "%s kobler fra"
#: ../js/ui/status/network.js:471 ../js/ui/status/network.js:1302 #. Translators: %s is a network identifier
msgid "Connecting" #: ../js/ui/status/network.js:469 ../js/ui/status/network.js:1300
msgstr "Kobler til" #, javascript-format
msgid "%s Connecting"
msgstr "%s 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; %s is a network identifier
#: ../js/ui/status/network.js:474 #: ../js/ui/status/network.js:472
msgid "Authentication required" #, javascript-format
msgstr "Denne tilkoblingen krever autentisering" msgid "%s Requires Authentication"
msgstr "%s krever autentisering"
#. Translators: this is for devices that require some kind of firmware or kernel #. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing #. module, which is missing; %s is a network identifier
#: ../js/ui/status/network.js:482 #: ../js/ui/status/network.js:480
msgid "Firmware missing" #, javascript-format
msgstr "Fastvare mangler" msgid "Firmware Missing For %s"
msgstr "Fastvare mangler for %s"
#. Translators: this is for a network device that cannot be activated (for example it #. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage #. is disabled by rfkill, or it has no coverage; %s is a network identifier
#: ../js/ui/status/network.js:486 #: ../js/ui/status/network.js:484
msgid "Unavailable" #, javascript-format
msgstr "Ikke tilgjengelig" msgid "%s Unavailable"
msgstr "%s er ikke tilgjengelig"
#: ../js/ui/status/network.js:488 ../js/ui/status/network.js:1696 #. Translators: %s is a network identifier
msgid "Connection failed" #: ../js/ui/status/network.js:487
msgstr "Tilkobling mislyktes" #, javascript-format
msgid "%s Connection Failed"
msgstr "%s tilkobling mislyktes"
#: ../js/ui/status/network.js:504 #: ../js/ui/status/network.js:503
msgid "Wired Settings" msgid "Wired Settings"
msgstr "Innstillinger for trådbundet nettverk" msgstr "Innstillinger for trådbundet nettverk"
#: ../js/ui/status/network.js:546 ../js/ui/status/network.js:624 #: ../js/ui/status/network.js:545 ../js/ui/status/network.js:624
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:1306 #. Translators: %s is a network identifier
msgid "Hardware Disabled" #: ../js/ui/status/network.js:588 ../js/ui/status/network.js:1305
msgstr "Maskinvare slått av" #, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s maskinvare slått av"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode); %s is a network identifier
#: ../js/ui/status/network.js:592
#, javascript-format
msgid "%s Disabled"
msgstr "%s slått av"
#: ../js/ui/status/network.js:632 #: ../js/ui/status/network.js:632
msgid "Use as Internet connection" msgid "Use as Internet connection"
@ -1326,52 +1348,68 @@ msgstr "Velg et nettverk"
msgid "No Networks" msgid "No Networks"
msgstr "Ingen nettverk" msgstr "Ingen nettverk"
#: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:116 #: ../js/ui/status/network.js:904 ../js/ui/status/rfkill.js:115
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:1174 #: ../js/ui/status/network.js:1171
msgid "Select Network" msgid "Select Network"
msgstr "Velg nettverk" msgstr "Velg nettverk"
#: ../js/ui/status/network.js:1180 #: ../js/ui/status/network.js:1177
msgid "Wi-Fi Settings" msgid "Wi-Fi Settings"
msgstr "Innstillinger" msgstr "Innstillinger"
#: ../js/ui/status/network.js:1282 #: ../js/ui/status/network.js:1279
msgid "Turn On" msgid "Turn On"
msgstr "Slå på" msgstr "Slå på"
#: ../js/ui/status/network.js:1299 #. Translators: %s is a network identifier
msgid "Hotspot Active" #: ../js/ui/status/network.js:1296
msgstr "Trådløst aksesspunkt aktivt" #, javascript-format
msgid "%s Hotspot Active"
msgstr "%s aksesspunkt aktivt"
#: ../js/ui/status/network.js:1410 #. Translators: %s is a network identifier
#: ../js/ui/status/network.js:1311
#, javascript-format
msgid "%s Not Connected"
msgstr "%s ikke koblet til"
#: ../js/ui/status/network.js:1411
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:1413 #: ../js/ui/status/network.js:1414
msgid "authentication required" msgid "authentication required"
msgstr "autentisering kreves" msgstr "autentisering kreves"
#: ../js/ui/status/network.js:1415 #: ../js/ui/status/network.js:1416
msgid "connection failed" msgid "connection failed"
msgstr "tilkobling mislyktes" msgstr "tilkobling mislyktes"
#: ../js/ui/status/network.js:1481 ../js/ui/status/rfkill.js:94 #: ../js/ui/status/network.js:1482 ../js/ui/status/rfkill.js:93
msgid "Network Settings" msgid "Network Settings"
msgstr "Innstillinger for nettverk" msgstr "Innstillinger for nettverk"
#: ../js/ui/status/network.js:1483 #: ../js/ui/status/network.js:1484
msgid "VPN Settings" msgid "VPN Settings"
msgstr "Innstillinger for VPN" msgstr "Innstillinger for VPN"
#: ../js/ui/status/network.js:1502 #: ../js/ui/status/network.js:1503
msgid "VPN" msgid "VPN"
msgstr "VPN" msgstr "VPN"
#: ../js/ui/status/network.js:1513
msgid "VPN Off"
msgstr "VPN av"
#: ../js/ui/status/network.js:1697 #: ../js/ui/status/network.js:1697
msgid "Connection failed"
msgstr "Tilkobling mislyktes"
#: ../js/ui/status/network.js:1698
msgid "Activation of network connection failed" msgid "Activation of network connection failed"
msgstr "Aktivering av nettverkstilkobling mislyktes" msgstr "Aktivering av nettverkstilkobling mislyktes"
@ -1401,42 +1439,34 @@ msgstr "%d:%02d gjenstår (%d%%)"
msgid "%d%02d Until Full (%d%%)" msgid "%d%02d Until Full (%d%%)"
msgstr "%d:%02d til batteriet er fullt (%d%%)" msgstr "%d:%02d til batteriet er fullt (%d%%)"
#: ../js/ui/status/power.js:119
msgid "UPS"
msgstr "UPS"
#: ../js/ui/status/power.js:121
msgid "Battery"
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:88 #: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode" msgid "Airplane Mode On"
msgstr "Flymodus" msgstr "Flymodus er slått på"
#: ../js/ui/status/rfkill.js:90 #: ../js/ui/status/system.js:343
msgid "On"
msgstr "På"
#: ../js/ui/status/system.js:337
msgid "Switch User" msgid "Switch User"
msgstr "Bytt bruker" msgstr "Bytt bruker"
#: ../js/ui/status/system.js:342 #: ../js/ui/status/system.js:348
msgid "Log Out" msgid "Log Out"
msgstr "Logg ut" msgstr "Logg ut"
#: ../js/ui/status/system.js:361 #: ../js/ui/status/system.js:353
msgid "Account Settings"
msgstr "Innstillinger for konto"
#: ../js/ui/status/system.js:370
msgid "Orientation Lock" msgid "Orientation Lock"
msgstr "Lås for orientering" msgstr "Lås for orientering"
#: ../js/ui/status/system.js:369 #: ../js/ui/status/system.js:378
msgid "Suspend" msgid "Suspend"
msgstr "Hvilemodus" msgstr "Hvilemodus"
#: ../js/ui/status/system.js:372 #: ../js/ui/status/system.js:381
msgid "Power Off" msgid "Power Off"
msgstr "Slå av" msgstr "Slå av"
@ -1484,11 +1514,11 @@ msgstr "Vil du beholde disse skjerminnstillingene?"
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Forkast innstillinger" msgstr "Forkast innstillinger"
#: ../js/ui/windowManager.js:86 #: ../js/ui/windowManager.js:85
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Behold endringer" msgstr "Behold endringer"
#: ../js/ui/windowManager.js:105 #: ../js/ui/windowManager.js:103
#, javascript-format #, javascript-format
msgid "Settings changes will revert in %d second" msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds" msgid_plural "Settings changes will revert in %d seconds"
@ -1497,7 +1527,7 @@ msgstr[1] "Endringer i innstillingene forkastes om %d sekunder"
#. Translators: This represents the size of a window. The first number is #. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. #. * the width of the window and the second is the height.
#: ../js/ui/windowManager.js:660 #: ../js/ui/windowManager.js:658
#, javascript-format #, javascript-format
msgid "%d x %d" msgid "%d x %d"
msgstr "%d x %d" msgstr "%d x %d"
@ -1536,19 +1566,19 @@ msgstr "Alltid på synlig arbeidsområde"
#: ../js/ui/windowMenu.js:105 #: ../js/ui/windowMenu.js:105
msgid "Move to Workspace Left" msgid "Move to Workspace Left"
msgstr " til arbeidsområdet til venstre" msgstr "Flytt til arbeidsområdet til venstre"
#: ../js/ui/windowMenu.js:110 #: ../js/ui/windowMenu.js:110
msgid "Move to Workspace Right" msgid "Move to Workspace Right"
msgstr " til arbeidsområdet til høyre" msgstr "Flytt til arbeidsområdet til høyre"
#: ../js/ui/windowMenu.js:115 #: ../js/ui/windowMenu.js:115
msgid "Move to Workspace Up" msgid "Move to Workspace Up"
msgstr " til arbeidsområdet over" msgstr "Flytt til arbeidsområdet over"
#: ../js/ui/windowMenu.js:120 #: ../js/ui/windowMenu.js:120
msgid "Move to Workspace Down" msgid "Move to Workspace Down"
msgstr " til arbeidsområdet under" msgstr "Flytt til arbeidsområdet under"
#: ../js/ui/windowMenu.js:136 #: ../js/ui/windowMenu.js:136
msgid "Move to Monitor Up" msgid "Move to Monitor Up"
@ -1592,28 +1622,28 @@ msgstr[1] "%u innganger"
msgid "System Sounds" msgid "System Sounds"
msgstr "Systemlyder" msgstr "Systemlyder"
#: ../src/main.c:373 #: ../src/main.c:381
msgid "Print version" msgid "Print version"
msgstr "Vis versjon" msgstr "Vis versjon"
#: ../src/main.c:379 #: ../src/main.c:387
msgid "Mode used by GDM for login screen" msgid "Mode used by GDM for login screen"
msgstr "Modus som brukes av GDM for innloggingsskjermen" msgstr "Modus som brukes av GDM for innloggingsskjermen"
#: ../src/main.c:385 #: ../src/main.c:393
msgid "Use a specific mode, e.g. \"gdm\" for login screen" msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm" msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
#: ../src/main.c:391 #: ../src/main.c:399
msgid "List possible modes" msgid "List possible modes"
msgstr "Vis mulige modi" msgstr "Vis mulige modi"
#: ../src/shell-app.c:239 #: ../src/shell-app.c:246
msgctxt "program" msgctxt "program"
msgid "Unknown" msgid "Unknown"
msgstr "Ukjent" msgstr "Ukjent"
#: ../src/shell-app.c:480 #: ../src/shell-app.c:487
#, c-format #, c-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Klarte ikke å starte «%s»" msgstr "Klarte ikke å starte «%s»"

509
po/nl.po

File diff suppressed because it is too large Load Diff

556
po/pa.po

File diff suppressed because it is too large Load Diff

552
po/pl.po

File diff suppressed because it is too large Load Diff

569
po/pt.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1970
po/ro.po

File diff suppressed because it is too large Load Diff

560
po/ru.po

File diff suppressed because it is too large Load Diff

793
po/sk.po

File diff suppressed because it is too large Load Diff

609
po/sl.po

File diff suppressed because it is too large Load Diff

747
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

594
po/sv.po

File diff suppressed because it is too large Load Diff

466
po/tr.po

File diff suppressed because it is too large Load Diff

627
po/uk.po

File diff suppressed because it is too large Load Diff

691
po/vi.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -201,7 +201,7 @@ calendar_sources_init (CalendarSources *sources)
"/", "org.freedesktop.DBus", "/", "org.freedesktop.DBus",
"StartServiceByName", "StartServiceByName",
g_variant_new ("(su)", g_variant_new ("(su)",
"org.gnome.evolution.dataserver.Sources4", "org.gnome.evolution.dataserver.Sources5",
0), 0),
NULL, NULL,
G_DBUS_CALL_FLAGS_NONE, G_DBUS_CALL_FLAGS_NONE,

View File

@ -45,8 +45,8 @@ static void gnome_shell_plugin_unminimize (MetaPlugin *plugin,
static void gnome_shell_plugin_size_change (MetaPlugin *plugin, static void gnome_shell_plugin_size_change (MetaPlugin *plugin,
MetaWindowActor *actor, MetaWindowActor *actor,
MetaSizeChange which_change, MetaSizeChange which_change,
MetaRectangle *old_rect, MetaRectangle *old_frame_rect,
MetaRectangle *new_rect); MetaRectangle *old_buffer_rect);
static void gnome_shell_plugin_map (MetaPlugin *plugin, static void gnome_shell_plugin_map (MetaPlugin *plugin,
MetaWindowActor *actor); MetaWindowActor *actor);
static void gnome_shell_plugin_destroy (MetaPlugin *plugin, static void gnome_shell_plugin_destroy (MetaPlugin *plugin,

View File

@ -176,15 +176,15 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
if (subsection) if (subsection)
{ {
gboolean could_have_separator; gboolean section_could_have_separator;
could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label; section_could_have_separator = (section->with_separators && n_items > 0) || subsection->separator_label;
/* Only pass the parent_model and parent_index in case they may be used to create the separator. */ /* Only pass the parent_model and parent_index in case they may be used to create the separator. */
n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items, n_items += gtk_menu_tracker_section_sync_separators (subsection, tracker, offset + n_items,
could_have_separator, section_could_have_separator,
could_have_separator ? section->model : NULL, section_could_have_separator ? section->model : NULL,
could_have_separator ? i : 0); section_could_have_separator ? i : 0);
} }
else else
n_items++; n_items++;
@ -197,11 +197,11 @@ gtk_menu_tracker_section_sync_separators (GtkMenuTrackerSection *section,
if (should_have_separator > section->has_separator) if (should_have_separator > section->has_separator)
{ {
/* Add a separator */ /* Add a separator */
GtkMenuTrackerItem *item; GtkMenuTrackerItem *menuitem;
item = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE); menuitem = _gtk_menu_tracker_item_new (tracker->observable, parent_model, parent_index, NULL, TRUE);
(* tracker->insert_func) (item, offset, tracker->user_data); (* tracker->insert_func) (menuitem, offset, tracker->user_data);
g_object_unref (item); g_object_unref (menuitem);
section->has_separator = TRUE; section->has_separator = TRUE;
} }

Submodule src/gvc updated: fac3a900e5...0a79019088

View File

@ -51,11 +51,11 @@ enum {
static int _shell_debug; static int _shell_debug;
static void static void
shell_dbus_acquire_name (GDBusProxy *bus, shell_dbus_acquire_name (GDBusProxy *bus,
guint32 request_name_flags, guint32 request_name_flags,
guint32 *request_name_result, guint32 *request_name_result,
gchar *name, const gchar *name,
gboolean fatal) gboolean fatal)
{ {
GError *error = NULL; GError *error = NULL;
GVariant *request_name_variant; GVariant *request_name_variant;
@ -69,24 +69,26 @@ shell_dbus_acquire_name (GDBusProxy *bus,
&error))) &error)))
{ {
g_printerr ("failed to acquire %s: %s\n", name, error->message); g_printerr ("failed to acquire %s: %s\n", name, error->message);
g_clear_error (&error);
if (!fatal) if (!fatal)
return; return;
exit (1); exit (1);
} }
g_variant_get (request_name_variant, "(u)", request_name_result); g_variant_get (request_name_variant, "(u)", request_name_result);
g_variant_unref (request_name_variant);
} }
static void static void
shell_dbus_acquire_names (GDBusProxy *bus, shell_dbus_acquire_names (GDBusProxy *bus,
guint32 request_name_flags, guint32 request_name_flags,
gchar *name, const gchar *name,
gboolean fatal, ...) G_GNUC_NULL_TERMINATED; gboolean fatal, ...) G_GNUC_NULL_TERMINATED;
static void static void
shell_dbus_acquire_names (GDBusProxy *bus, shell_dbus_acquire_names (GDBusProxy *bus,
guint32 request_name_flags, guint32 request_name_flags,
gchar *name, const gchar *name,
gboolean fatal, ...) gboolean fatal, ...)
{ {
va_list al; va_list al;
guint32 request_name_result; guint32 request_name_result;
@ -130,6 +132,12 @@ shell_dbus_init (gboolean replace)
NULL, /* cancellable */ NULL, /* cancellable */
&error); &error);
if (!bus)
{
g_printerr ("Failed to get a session bus proxy: %s", error->message);
exit (1);
}
request_name_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT; request_name_flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT;
if (replace) if (replace)
request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING; request_name_flags |= DBUS_NAME_FLAG_REPLACE_EXISTING;
@ -454,7 +462,7 @@ main (int argc, char **argv)
/* Initialize the global object */ /* Initialize the global object */
if (session_mode == NULL) if (session_mode == NULL)
session_mode = is_gdm_mode ? "gdm" : "user"; session_mode = is_gdm_mode ? (char *)"gdm" : (char *)"user";
_shell_global_init ("session-mode", session_mode, NULL); _shell_global_init ("session-mode", session_mode, NULL);

View File

@ -182,7 +182,7 @@ shell_app_system_finalize (GObject *object)
* Return Value: (transfer none): The global #ShellAppSystem singleton * Return Value: (transfer none): The global #ShellAppSystem singleton
*/ */
ShellAppSystem * ShellAppSystem *
shell_app_system_get_default () shell_app_system_get_default (void)
{ {
static ShellAppSystem *instance = NULL; static ShellAppSystem *instance = NULL;
@ -348,6 +348,9 @@ _shell_app_system_notify_app_state_changed (ShellAppSystem *self,
case SHELL_APP_STATE_STOPPED: case SHELL_APP_STATE_STOPPED:
g_hash_table_remove (self->priv->running_apps, app); g_hash_table_remove (self->priv->running_apps, app);
break; break;
default:
g_warn_if_reached();
break;
} }
g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app); g_signal_emit (self, signals[APP_STATE_CHANGED], 0, app);
} }

View File

@ -996,7 +996,7 @@ on_enable_monitoring_key_changed (GSettings *settings,
* Return Value: (transfer none): The global #ShellAppUsage instance * Return Value: (transfer none): The global #ShellAppUsage instance
*/ */
ShellAppUsage * ShellAppUsage *
shell_app_usage_get_default () shell_app_usage_get_default (void)
{ {
static ShellAppUsage *instance; static ShellAppUsage *instance;

View File

@ -156,16 +156,20 @@ static MetaWindow *
window_backed_app_get_window (ShellApp *app) window_backed_app_get_window (ShellApp *app)
{ {
g_assert (app->info == NULL); g_assert (app->info == NULL);
g_assert (app->running_state); if (app->running_state)
g_assert (app->running_state->windows); {
return app->running_state->windows->data; g_assert (app->running_state->windows);
return app->running_state->windows->data;
}
else
return NULL;
} }
static ClutterActor * static ClutterActor *
window_backed_app_get_icon (ShellApp *app, window_backed_app_get_icon (ShellApp *app,
int size) int size)
{ {
MetaWindow *window; MetaWindow *window = NULL;
ClutterActor *actor; ClutterActor *actor;
gint scale; gint scale;
ShellGlobal *global; ShellGlobal *global;
@ -181,14 +185,16 @@ window_backed_app_get_icon (ShellApp *app,
* window-backend apps, it's possible we get a request for the icon. * window-backend apps, it's possible we get a request for the icon.
* Avoid asserting here and just return an empty image. * Avoid asserting here and just return an empty image.
*/ */
if (app->running_state == NULL) if (app->running_state != NULL)
window = window_backed_app_get_window (app);
if (window == NULL)
{ {
actor = clutter_texture_new (); actor = clutter_texture_new ();
g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL); g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL);
return actor; return actor;
} }
window = window_backed_app_get_window (app);
actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (), actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
G_OBJECT (window), G_OBJECT (window),
"icon"); "icon");
@ -232,9 +238,10 @@ shell_app_get_name (ShellApp *app)
else else
{ {
MetaWindow *window = window_backed_app_get_window (app); MetaWindow *window = window_backed_app_get_window (app);
const char *name; const char *name = NULL;
name = meta_window_get_wm_class (window); if (window)
name = meta_window_get_wm_class (window);
if (!name) if (!name)
name = C_("program", "Unknown"); name = C_("program", "Unknown");
return name; return name;
@ -491,6 +498,9 @@ shell_app_activate_full (ShellApp *app,
case SHELL_APP_STATE_RUNNING: case SHELL_APP_STATE_RUNNING:
shell_app_activate_window (app, NULL, timestamp); shell_app_activate_window (app, NULL, timestamp);
break; break;
default:
g_assert_not_reached();
break;
} }
} }
@ -699,7 +709,7 @@ static int
shell_app_get_last_user_time (ShellApp *app) shell_app_get_last_user_time (ShellApp *app)
{ {
GSList *iter; GSList *iter;
int last_user_time; guint32 last_user_time;
last_user_time = 0; last_user_time = 0;
@ -709,7 +719,7 @@ shell_app_get_last_user_time (ShellApp *app)
last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data)); last_user_time = MAX (last_user_time, meta_window_get_user_time (iter->data));
} }
return last_user_time; return (int)last_user_time;
} }
/** /**
@ -1151,7 +1161,13 @@ shell_app_launch (ShellApp *app,
if (app->info == NULL) if (app->info == NULL)
{ {
MetaWindow *window = window_backed_app_get_window (app); MetaWindow *window = window_backed_app_get_window (app);
meta_window_activate (window, timestamp); /* We don't use an error return if there no longer any windows, because the
* user attempting to activate a stale window backed app isn't something
* we would expect the caller to meaningfully handle or display an error
* message to the user.
*/
if (window)
meta_window_activate (window, timestamp);
return TRUE; return TRUE;
} }

View File

@ -867,7 +867,12 @@ update_scale_factor (GtkSettings *settings,
{ {
g_object_set (context, "scale-factor", g_value_get_int (&value), NULL); g_object_set (context, "scale-factor", g_value_get_int (&value), NULL);
if (meta_is_wayland_compositor ()) if (meta_is_wayland_compositor ())
g_object_set (clutter_settings_get_default (), "font-dpi", 96 * 1024 * g_value_get_int (&value), NULL); {
int xft_dpi;
g_object_get (settings, "gtk-xft-dpi", &xft_dpi, NULL);
g_object_set (clutter_settings_get_default (), "font-dpi", xft_dpi, NULL);
}
} }
/* Make sure clutter and gdk scaling stays disabled */ /* Make sure clutter and gdk scaling stays disabled */

View File

@ -139,6 +139,7 @@ shell_glsl_quad_constructed (GObject *object)
if (G_UNLIKELY (klass->base_pipeline == NULL)) if (G_UNLIKELY (klass->base_pipeline == NULL))
{ {
klass->base_pipeline = cogl_pipeline_new (ctx); klass->base_pipeline = cogl_pipeline_new (ctx);
cogl_pipeline_set_blend (klass->base_pipeline, "RGBA = ADD (SRC_COLOR * (SRC_COLOR[A]), DST_COLOR * (1-SRC_COLOR[A]))", NULL);
if (klass->build_pipeline != NULL) if (klass->build_pipeline != NULL)
klass->build_pipeline (self); klass->build_pipeline (self);

View File

@ -68,7 +68,6 @@ shell_gtk_embed_window_created_cb (MetaDisplay *display,
{ {
ClutterActor *window_actor = ClutterActor *window_actor =
CLUTTER_ACTOR (meta_window_get_compositor_private (window)); CLUTTER_ACTOR (meta_window_get_compositor_private (window));
MetaDisplay *display = shell_global_get_display (shell_global_get ());
GCallback remove_cb = G_CALLBACK (shell_gtk_embed_remove_window_actor); GCallback remove_cb = G_CALLBACK (shell_gtk_embed_remove_window_actor);
cairo_region_t *empty_region; cairo_region_t *empty_region;

View File

@ -315,8 +315,6 @@ get_secrets_keyring_cb (GObject *source,
secrets_found = TRUE; secrets_found = TRUE;
g_hash_table_unref (attributes);
secret_value_unref (secret);
break; break;
} }
} }
@ -366,8 +364,6 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
{ {
ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent); ShellNetworkAgent *self = SHELL_NETWORK_AGENT (agent);
ShellAgentRequest *request; ShellAgentRequest *request;
NMSettingConnection *setting_connection;
const char *connection_type;
GHashTable *attributes; GHashTable *attributes;
char *request_id; char *request_id;
@ -381,9 +377,6 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
shell_agent_request_cancel (request); shell_agent_request_cancel (request);
} }
setting_connection = nm_connection_get_setting_connection (connection);
connection_type = nm_setting_connection_get_connection_type (setting_connection);
request = g_slice_new (ShellAgentRequest); request = g_slice_new (ShellAgentRequest);
request->self = g_object_ref (self); request->self = g_object_ref (self);
request->cancellable = g_cancellable_new (); request->cancellable = g_cancellable_new ();
@ -393,7 +386,7 @@ shell_network_agent_get_secrets (NMSecretAgent *agent,
request->flags = flags; request->flags = flags;
request->callback = callback; request->callback = callback;
request->callback_data = callback_data; request->callback_data = callback_data;
request->is_vpn = !strcmp(connection_type, NM_SETTING_VPN_SETTING_NAME); request->is_vpn = !strcmp(setting_name, NM_SETTING_VPN_SETTING_NAME);
request->entries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, gvalue_destroy_notify); request->entries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, gvalue_destroy_notify);
if (request->is_vpn) if (request->is_vpn)

View File

@ -125,9 +125,10 @@ on_window_draw (GtkWidget *window,
WindowInfo *info) WindowInfo *info)
{ {
cairo_rectangle_int_t allocation; cairo_rectangle_int_t allocation;
gtk_widget_get_allocation (window, &allocation);
double x_offset, y_offset; double x_offset, y_offset;
gtk_widget_get_allocation (window, &allocation);
/* We draw an arbitrary pattern of red lines near the border of the /* We draw an arbitrary pattern of red lines near the border of the
* window to make it more clear than empty windows if something * window to make it more clear than empty windows if something
* is drastrically wrong. * is drastrically wrong.

View File

@ -626,7 +626,7 @@ shell_perf_log_collect_statistics (ShellPerfLog *perf_log)
{ {
gint64 event_time = get_time (); gint64 event_time = get_time ();
gint64 collection_time; gint64 collection_time;
int i; guint i;
if (!perf_log->enabled) if (!perf_log->enabled)
return; return;
@ -672,6 +672,9 @@ shell_perf_log_collect_statistics (ShellPerfLog *perf_log)
statistic->recorded = TRUE; statistic->recorded = TRUE;
} }
break; break;
default:
g_warning ("Unsupported signature in event");
break;
} }
} }
@ -819,7 +822,7 @@ shell_perf_log_dump_events (ShellPerfLog *perf_log,
GError **error) GError **error)
{ {
GString *output; GString *output;
int i; guint i;
output = g_string_new (NULL); output = g_string_new (NULL);
g_string_append (output, "[ "); g_string_append (output, "[ ");

View File

@ -156,17 +156,17 @@ shell_recorder_src_send_event (GstElement * element, GstEvent * event)
ShellRecorderSrc *src = SHELL_RECORDER_SRC (element); ShellRecorderSrc *src = SHELL_RECORDER_SRC (element);
gboolean res; gboolean res;
switch (GST_EVENT_TYPE (event)) { if (GST_EVENT_TYPE (event) == GST_EVENT_EOS)
case GST_EVENT_EOS: {
shell_recorder_src_close (src); shell_recorder_src_close (src);
gst_event_unref (event); gst_event_unref (event);
res = TRUE; res = TRUE;
break; }
default: else
{
res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element, res = GST_CALL_PARENT_WITH_DEFAULT (GST_ELEMENT_CLASS, send_event, (element,
event), FALSE); event), FALSE);
break; }
}
return res; return res;
} }

View File

@ -1182,23 +1182,20 @@ recorder_pipeline_bus_watch (GstBus *bus,
{ {
RecorderPipeline *pipeline = data; RecorderPipeline *pipeline = data;
switch (message->type) if (message->type == GST_MESSAGE_EOS)
{ {
case GST_MESSAGE_EOS:
recorder_pipeline_closed (pipeline); recorder_pipeline_closed (pipeline);
return FALSE; /* remove watch */ return FALSE; /* remove watch */
case GST_MESSAGE_ERROR: }
{ else if (message->type == GST_MESSAGE_ERROR)
GError *error; {
GError *error;
gst_message_parse_error (message, &error, NULL); gst_message_parse_error (message, &error, NULL);
g_warning ("Error in recording pipeline: %s\n", error->message); g_warning ("Error in recording pipeline: %s\n", error->message);
g_error_free (error); g_error_free (error);
recorder_pipeline_closed (pipeline); recorder_pipeline_closed (pipeline);
return FALSE; /* remove watch */ return FALSE; /* remove watch */
}
default:
break;
} }
/* Leave the watch in place */ /* Leave the watch in place */

View File

@ -13,6 +13,7 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h> #include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk/gdkx.h> #include <gdk/gdkx.h>
#include <meta/meta-shaped-texture.h>
#include <locale.h> #include <locale.h>
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY #ifdef HAVE__NL_TIME_FIRST_WEEKDAY
@ -84,7 +85,7 @@ shell_util_get_transformed_allocation (ClutterActor *actor,
*/ */
ClutterVertex v[4]; ClutterVertex v[4];
gfloat x_min, x_max, y_min, y_max; gfloat x_min, x_max, y_min, y_max;
gint i; guint i;
g_return_if_fail (CLUTTER_IS_ACTOR (actor)); g_return_if_fail (CLUTTER_IS_ACTOR (actor));
@ -165,7 +166,7 @@ shell_util_format_date (const char *format,
*/ */
/* Copied from gtkcalendar.c */ /* Copied from gtkcalendar.c */
int int
shell_util_get_week_start () shell_util_get_week_start (void)
{ {
int week_start; int week_start;
#ifdef HAVE__NL_TIME_FIRST_WEEKDAY #ifdef HAVE__NL_TIME_FIRST_WEEKDAY
@ -403,3 +404,57 @@ shell_util_text_insert_keyval (ClutterActor *actor,
clutter_actor_event (actor, &event, FALSE); clutter_actor_event (actor, &event, FALSE);
} }
static gboolean
canvas_draw_cb (ClutterContent *content,
cairo_t *cr,
gint width,
gint height,
gpointer user_data)
{
cairo_surface_t *surface = user_data;
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
return FALSE;
}
/**
* shell_util_get_content_for_window_actor:
* @window_actor: a #MetaWindowActor
* @window_rect: a #MetaRectangle
*
* Returns: (transfer full): a new #ClutterContent
*/
ClutterContent *
shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
MetaRectangle *window_rect)
{
ClutterActor *texture;
ClutterContent *content;
cairo_surface_t *surface;
cairo_rectangle_int_t clip;
gfloat actor_x, actor_y;
texture = meta_window_actor_get_texture (window_actor);
clutter_actor_get_position (CLUTTER_ACTOR (window_actor), &actor_x, &actor_y);
clip.x = window_rect->x - (gint) actor_x;
clip.y = window_rect->y - (gint) actor_y;
clip.width = window_rect->width;
clip.height = window_rect->height;
surface = meta_shaped_texture_get_image (META_SHAPED_TEXTURE (texture),
&clip);
content = clutter_canvas_new ();
clutter_canvas_set_size (CLUTTER_CANVAS (content),
clip.width, clip.height);
g_signal_connect (content, "draw",
G_CALLBACK (canvas_draw_cb), surface);
clutter_content_invalidate (content);
cairo_surface_destroy (surface);
return content;
}

View File

@ -8,6 +8,7 @@
#include <libsoup/soup.h> #include <libsoup/soup.h>
#include <gdk-pixbuf/gdk-pixbuf.h> #include <gdk-pixbuf/gdk-pixbuf.h>
#include <meta/meta-cursor-tracker.h> #include <meta/meta-cursor-tracker.h>
#include <meta/meta-window-actor.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -50,6 +51,9 @@ gboolean shell_util_need_background_refresh (void);
void shell_util_text_insert_keyval (ClutterActor *actor, void shell_util_text_insert_keyval (ClutterActor *actor,
guint keyval); guint keyval);
ClutterContent * shell_util_get_content_for_window_actor (MetaWindowActor *window_actor,
MetaRectangle *window_rect);
G_END_DECLS G_END_DECLS
#endif /* __SHELL_UTIL_H__ */ #endif /* __SHELL_UTIL_H__ */

View File

@ -865,7 +865,7 @@ shell_startup_sequence_create_icon (ShellStartupSequence *sequence, guint size)
* Return Value: (transfer none): The global #ShellWindowTracker instance * Return Value: (transfer none): The global #ShellWindowTracker instance
*/ */
ShellWindowTracker * ShellWindowTracker *
shell_window_tracker_get_default () shell_window_tracker_get_default (void)
{ {
static ShellWindowTracker *instance; static ShellWindowTracker *instance;

View File

@ -15,8 +15,8 @@ void _shell_wm_unminimize (ShellWM *wm,
void _shell_wm_size_change(ShellWM *wm, void _shell_wm_size_change(ShellWM *wm,
MetaWindowActor *actor, MetaWindowActor *actor,
MetaSizeChange which_change, MetaSizeChange which_change,
MetaRectangle *old_rect, MetaRectangle *old_frame_rect,
MetaRectangle *new_rect); MetaRectangle *old_buffer_rect);
void _shell_wm_map (ShellWM *wm, void _shell_wm_map (ShellWM *wm,
MetaWindowActor *actor); MetaWindowActor *actor);
void _shell_wm_destroy (ShellWM *wm, void _shell_wm_destroy (ShellWM *wm,

View File

@ -562,6 +562,24 @@ layout_notify (GObject *object,
g_object_notify (self, prop_name); g_object_notify (self, prop_name);
} }
static void
on_layout_manager_notify (GObject *object,
GParamSpec *pspec,
gpointer user_data)
{
ClutterActor *actor = CLUTTER_ACTOR (object);
ClutterLayoutManager *layout = clutter_actor_get_layout_manager (actor);
g_warn_if_fail (CLUTTER_IS_BOX_LAYOUT (layout));
if (layout == NULL)
return;
g_signal_connect_swapped (layout, "layout-changed",
G_CALLBACK (clutter_actor_queue_relayout), actor);
g_signal_connect (layout, "notify", G_CALLBACK (layout_notify), object);
}
static void static void
st_box_layout_class_init (StBoxLayoutClass *klass) st_box_layout_class_init (StBoxLayoutClass *klass)
{ {
@ -614,14 +632,11 @@ st_box_layout_class_init (StBoxLayoutClass *klass)
static void static void
st_box_layout_init (StBoxLayout *self) st_box_layout_init (StBoxLayout *self)
{ {
ClutterLayoutManager *layout;
self->priv = BOX_LAYOUT_PRIVATE (self); self->priv = BOX_LAYOUT_PRIVATE (self);
layout = clutter_box_layout_new ();
g_signal_connect_swapped (layout, "layout-changed", g_signal_connect (self, "notify::layout-manager",
G_CALLBACK (clutter_actor_queue_relayout), self); G_CALLBACK (on_layout_manager_notify), NULL);
g_signal_connect (layout, "notify", G_CALLBACK (layout_notify), self); clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), clutter_box_layout_new ());
clutter_actor_set_layout_manager (CLUTTER_ACTOR (self), layout);
} }
/** /**

View File

@ -211,7 +211,7 @@ st_button_button_release (ClutterActor *actor,
{ {
gboolean is_click; gboolean is_click;
is_click = button->priv->grabbed && st_widget_get_hover (ST_WIDGET (button)); is_click = button->priv->grabbed && clutter_actor_contains (actor, event->source);
st_button_release (button, device, mask, is_click ? event->button : 0, NULL); st_button_release (button, device, mask, is_click ? event->button : 0, NULL);
button->priv->grabbed &= ~mask; button->priv->grabbed &= ~mask;
@ -801,9 +801,6 @@ struct _StButtonAccessibleClass
StWidgetAccessibleClass parent_class; StWidgetAccessibleClass parent_class;
}; };
static void st_button_accessible_class_init (StButtonAccessibleClass *klass);
static void st_button_accessible_init (StButtonAccessible *button);
/* AtkObject */ /* AtkObject */
static void st_button_accessible_initialize (AtkObject *obj, static void st_button_accessible_initialize (AtkObject *obj,
gpointer data); gpointer data);

View File

@ -94,8 +94,8 @@ st_drawing_area_paint (ClutterActor *self)
} }
if (priv->texture != NULL && if (priv->texture != NULL &&
(width != cogl_texture_get_width (priv->texture) || (width != (int)cogl_texture_get_width (priv->texture) ||
height != cogl_texture_get_height (priv->texture))) height != (int)cogl_texture_get_height (priv->texture)))
{ {
cogl_object_unref (priv->texture); cogl_object_unref (priv->texture);
priv->texture = NULL; priv->texture = NULL;

View File

@ -144,8 +144,6 @@ st_generic_accessible_class_init (StGenericAccessibleClass *klass)
* Emitted when atk_value_set_current_value() is called on * Emitted when atk_value_set_current_value() is called on
* @self. Right now we only care about doubles, so the value is * @self. Right now we only care about doubles, so the value is
* directly returned by the signal. * directly returned by the signal.
*
* Return value: value of the current element.
*/ */
st_generic_accessible_signals[SET_CURRENT_VALUE] = st_generic_accessible_signals[SET_CURRENT_VALUE] =
g_signal_new ("set-current-value", g_signal_new ("set-current-value",

View File

@ -408,9 +408,6 @@ struct _StLabelAccessibleClass
StWidgetAccessibleClass parent_class; StWidgetAccessibleClass parent_class;
}; };
static void st_label_accessible_class_init (StLabelAccessibleClass *klass);
static void st_label_accessible_init (StLabelAccessible *label);
/* AtkObject */ /* AtkObject */
static void st_label_accessible_initialize (AtkObject *obj, static void st_label_accessible_initialize (AtkObject *obj,
gpointer data); gpointer data);

View File

@ -211,7 +211,7 @@ calculate_gaussian_kernel (gdouble sigma,
{ {
gdouble *ret, sum; gdouble *ret, sum;
gdouble exp_divisor; gdouble exp_divisor;
gint half, i; int half, i;
g_return_val_if_fail (sigma > 0, NULL); g_return_val_if_fail (sigma > 0, NULL);
@ -223,14 +223,14 @@ calculate_gaussian_kernel (gdouble sigma,
exp_divisor = 2 * sigma * sigma; exp_divisor = 2 * sigma * sigma;
/* n_values of 1D Gauss function */ /* n_values of 1D Gauss function */
for (i = 0; i < n_values; i++) for (i = 0; i < (int)n_values; i++)
{ {
ret[i] = exp (-(i - half) * (i - half) / exp_divisor); ret[i] = exp (-(i - half) * (i - half) / exp_divisor);
sum += ret[i]; sum += ret[i];
} }
/* normalize */ /* normalize */
for (i = 0; i < n_values; i++) for (i = 0; i < (int)n_values; i++)
ret[i] /= sum; ret[i] /= sum;
return ret; return ret;
@ -347,6 +347,7 @@ _st_create_shadow_pipeline (StShadow *shadow_spec,
{ {
ClutterBackend *backend = clutter_get_default_backend (); ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend); CoglContext *ctx = clutter_backend_get_cogl_context (backend);
CoglError *error = NULL;
static CoglPipeline *shadow_pipeline_template = NULL; static CoglPipeline *shadow_pipeline_template = NULL;
@ -377,15 +378,18 @@ _st_create_shadow_pipeline (StShadow *shadow_spec,
COGL_PIXEL_FORMAT_A_8, COGL_PIXEL_FORMAT_A_8,
rowstride_out, rowstride_out,
pixels_out, pixels_out,
NULL)); &error));
if (error)
{
g_warning ("Failed to allocate texture: %s", error->message);
cogl_error_free (error);
}
g_free (pixels_out); g_free (pixels_out);
if (G_UNLIKELY (shadow_pipeline_template == NULL)) if (G_UNLIKELY (shadow_pipeline_template == NULL))
{ {
CoglContext *ctx =
clutter_backend_get_cogl_context (clutter_get_default_backend ());
shadow_pipeline_template = cogl_pipeline_new (ctx); shadow_pipeline_template = cogl_pipeline_new (ctx);
/* We set up the pipeline to blend the shadow texture with the combine /* We set up the pipeline to blend the shadow texture with the combine
@ -398,7 +402,10 @@ _st_create_shadow_pipeline (StShadow *shadow_spec,
pipeline = cogl_pipeline_copy (shadow_pipeline_template); pipeline = cogl_pipeline_copy (shadow_pipeline_template);
cogl_pipeline_set_layer_texture (pipeline, 0, texture); cogl_pipeline_set_layer_texture (pipeline, 0, texture);
cogl_object_unref (texture);
if (texture)
cogl_object_unref (texture);
return pipeline; return pipeline;
} }
@ -445,6 +452,7 @@ _st_create_shadow_pipeline_from_actor (StShadow *shadow_spec,
if (!cogl_framebuffer_allocate (fb, &catch_error)) if (!cogl_framebuffer_allocate (fb, &catch_error))
{ {
cogl_error_free (catch_error); cogl_error_free (catch_error);
cogl_object_unref (offscreen);
cogl_object_unref (buffer); cogl_object_unref (buffer);
return NULL; return NULL;
} }
@ -515,7 +523,12 @@ _st_create_shadow_cairo_pattern (StShadow *shadow_spec,
g_return_val_if_fail (shadow_spec != NULL, NULL); g_return_val_if_fail (shadow_spec != NULL, NULL);
g_return_val_if_fail (src_pattern != NULL, NULL); g_return_val_if_fail (src_pattern != NULL, NULL);
cairo_pattern_get_surface (src_pattern, &src_surface); if (cairo_pattern_get_surface (src_pattern, &src_surface) != CAIRO_STATUS_SUCCESS)
/* The most likely reason we can't get the pattern is that sizing went hairwire
* and the caller tried to create a surface too big for memory, leaving us with
* a pattern in an error state; we return a transparent pattern for the shadow.
*/
return cairo_pattern_create_rgba(1.0, 1.0, 1.0, 0.0);
width_in = cairo_image_surface_get_width (src_surface); width_in = cairo_image_surface_get_width (src_surface);
height_in = cairo_image_surface_get_height (src_surface); height_in = cairo_image_surface_get_height (src_surface);

Some files were not shown because too many files have changed in this diff Show More