Compare commits

...

96 Commits

Author SHA1 Message Date
Florian Müllner
224ab2e543 extensions-tool: Add option to list updates
Now that we support extension updates, it may be useful to list
pending updates from the command line. It's easy enough to support,
so add a corresponding option to the list command.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/988
2020-02-10 22:43:00 +00:00
Georges Basile Stavracas Neto
dee738e24f background: Remove noise texture
Use the plain background color.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/2174

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
84c7890917 screenShield: Remove lock screen group from Crtl-Alt-Tab manager
There is nothing else to be focused in the lock screen itself -- the
top bar is already handled elsewhere, and the dialog manages itself
now.

Remove the lock screen group from the Ctrl-Alt-Tab manager.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
fd484099ae screenShield: Cleanup _ensureUnlockDialog
Just like on ScreenShield.activate(), we can just ensure the
unlock screen on ScreenShield.showDialog().

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
727c84251d screenShield: Rework key focus management
Instead of always grabbing key focus for the screen lock
group, do that for the unlock dialog itself.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
37e55df298 unlockDialog: Create auth prompt on demand
AuthPrompt is the set of actors that contain the user avatar,
the username, and the password entry. With the removal of the
screen shield, the unlock dialog (be it UnlockDialog or the
LoginDialog) is always created, and in the case of UnlockDialog,
so is the auth prompt.

This is problematic, though, since for passwordless accounts,
the simple act of creating AuthPrompt authenticates the user,
and lifts the lock screen.

Create the AuthPrompt on demand in UnlockDialog.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
2644f62318 unlockDialog: Add .critical CSS class to critical notifications
As per the latest lock screen mockups, critical notifications must have
a more prominent, solid color.

Add a .critical style class to critical notification bubbles, and make
them darker.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
893bde0ca1 theme: Adjust style of lock screen notifications
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
bd0bf3d3d0 unlockDialog: Line notification labels horizontally
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
05c918dc1a unlockDialog: Use just the counter to format notifications
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
3651cb2047 unlockDialog: Show clock when canceling or failing auth
There is still a problem of focus not going to the entry after the
first cancel, but it seems to work fine otherwise.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
b9c7631a55 unlockDialog: Toggle between clock and auth prompt
Toggle between them when (1) tapping anythere on the screen, and
(2) pressing any key.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
b59c9c6946 unlockDialog: Move auth prompt and clock to a ShellStack
We will toggle between each other in the next commit, so add
both to a ShellStack.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
f02313c1c6 screenShield: Remove key press event handler
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
6493789bc9 unlockDialog: Introduce UnlockDialogLayout
This is the layout manager responsible for ensuring
that the clock is always at the third of the screen
height, and the notifications can push it to above.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
4081b97462 theme: Adjust lock screen clock fonts
These values were decided during the GNOME Shell Hackfest, but
they're still subject to changes.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
c20451c2e7 sessionMode: Remove lock-screen mode
Now that the screen shield is gone (at least, as it used to
be), the corresponding session mode is not necessary anymore
as well.

Remove the 'lock-screen' session mode, and the corresponding
CSS.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
16dcb1ac15 screenShield: Move lock shield below dialog
Pretty much what the commit title says.

This gives the lock shield actor another role: instead of
being the interactive screen shield, make it the invisible
actor that prevents interacting with windows while the
unlock dialog is sliding down.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
c1ee656c35 screenShield: Only animate the unlock dialog
Remove the slide-up-down animation from the lock shield.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
cd09144069 screenShield: Rename _liftShield to _activateDialog
Lifting the shield is now what happens *after* successfully logging
in, not before. Now, what we do is activate the dialog before logging
in.

Rename the method to reflect that.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
7851069d9c screenShield: Activate dialog when necessary
Activating a dialog is slightly different from opening it; the
former is about showing the user authentication widgetry, while
the latter is about creating it and pre-allocating the necessary
resources.

Activate the screen shield dialog when necessary.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
e42700a308 screenShield: Lift the unlock dialog
Instead of scaling it, lift the unlock dialog when unlocking,
and vice-versa.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
febc0690c1 screenShield: Remove scrolling
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
308b4f81b5 screenShield: Cleanup unused method arguments
The 'velocity' argument is not used anymore, since the only
caller passing a different value than 0 was the drag motion
callback.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
66a3ad42da screenShield: Remove the drag action from the shield
This is start of the end of the screen shield; start by
removing the dragging action from it.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
1b84a3ecb2 unlockDialog: Don't destroy on cancel
Otherwise there will be no way to recover it in the future. Also
remove an else condition that assumed the dialog would destroy
itself on cancel.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
78fd9d9e4f screenShield: Always show session's unlock dialog
Instead of destroying the dialog when the screen shield is
visible, and creating it when lifting the shield, always show
the session's unlock dialog.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
baa5bfcf49 screenShield: Remove _lockScreenContents and family
It is not used anymore, and together with it, we don't need the
_ensureLockScreen() / _clearLockScreen() pair anymore too.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:52 +00:00
Georges Basile Stavracas Neto
5d88729fc1 unlockDialog: Blur background
Add a 200px blur with a 55% brightness to the unlock dialog
background.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
15b59414d6 screenShield: Move background to Unlock Dialog
In addition to that, remove the ClutterBoxLayout that is set as
the layout manager of the Unlock Dialog, and apply the primary
monitor constraint to the child St.BoxLayout instead.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
2b39d6e95a screenShield: Remove unused 'onPrimary' argument
The 'onPrimary' argument was being passed to dialog.open(). Turns out,
neither UnlockDialog nor LoginDialog use this parameter.

Remove the unnecessary 'onPrimary' parameter, and cleanup the related
code.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
73eaf0df9f screenShield: Move notifications to Unlock Dialog
Also adjust the CSS style classes names to match the new owner.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
54e2d3ceb7 unlockDialog, loginDialog: Add a 'wake-up-screen' signal
The signal is currently present in the notifications box, but next
commits will move the notifications box to the unlock dialog.

Add a 'wake-up-screen' signal to the dialogs.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
d3cfb5801b unlockDialog: Adjust date format
As per design feedback at FOSDEM, adjust the time format to
not have a comma, nor padding.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
143cda628e screenShield: Move clock to Unlock Dialog
Move the Screen Shield clock to Unlock Dialog. Also adjust
the CSS style classes names to match the new owner.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Georges Basile Stavracas Neto
e90940ae10 screenShield: Remove arrows
They are not present anywhere in the new mockups.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/872
2020-02-10 22:30:51 +00:00
Carlos Garnacho
34207cc457 keyboard: Only enable automatically if ClutterSeat::touch-mode is enabled
This defers the policy on backends about whether it makes sense to show
the OSK.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/872
2020-02-10 22:07:19 +00:00
Jiri Grönroos
cedcda0ccc Update Finnish translation 2020-02-10 21:31:42 +00:00
Emin Tufan Çetin
cfcf1d5192 Update Turkish translation 2020-02-10 20:24:58 +00:00
Kukuh Syafaat
8d9bc4bc4c Update Indonesian translation 2020-02-10 06:52:35 +00:00
Fran Dieguez
d456e938d2 Update Galician translation 2020-02-09 22:26:45 +00:00
sicklylife
f15208e26d Update Japanese translation 2020-02-08 20:44:46 +00:00
sicklylife
1999a359fa Update Japanese translation 2020-02-08 20:31:51 +00:00
Bruce Cowan
3c180bc8f7 Update British English translation 2020-02-08 13:03:04 +00:00
Aurimas Černius
8de42d1f63 Updated Lithuanian translation 2020-02-08 14:25:56 +02:00
Asier Sarasua Garmendia
1769a96362 Update Basque translation 2020-02-08 08:10:26 +00:00
Danial Behzadi
37a3d0d09a Update Persian translation 2020-02-07 22:06:14 +00:00
Carlos Garnacho
e16def0c43 magnifier: Make magnification factor changes animatable
So we can seamlessly change between them through eg. keybindings.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
83d083f189 magnifier: Implement pointer motion tracking differently
The use of the core idle monitor means that focus change events
are also delayed by keyboard interaction. Since the magnifier is
already in the business of pointer tracking, it's easy enough to
fire the pointer rest timeout from here, so focus changes are
accumulated and delayed.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
b1ea4f6c35 magnifier: Animate focus/caret position changes
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
60c540e93a magnifier: Add support for animating "scroll" on focus changes
This is nice in that it provides a hint of the relative position of
the new focus area, as opposed to a sudden jump.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
f3b56e0eb1 magnifier: Transform a11y events' coordinates by scale factor
We get those events in logical coordinates, which we have to transform
into actual pixels.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
c8d02be14a magnifier: Ignore repeated a11y events
We may get several a11y events setting the caret on the same
coordinates it previously was. Make focus tracking ignore those,
as we're jumping to the same coordinates again during eg. mouse
operation.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
42b50051ac magnifier: Sanity check coordinates in scrollContentsTo
We may receive a11y events with bogus coordinates (eg. x/y = minint),
so ensure the coordinates are sane before scrolling there.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
bda18888c0 magnifier: Clip all crosshair lines at even distances
If the crosshair is clipped so it doesn't cover the pointer cursor,
the clip rectangle is skewed towards the bottom/right. This was
made so to accomodate the default pointer, but the unevenness stays
on other pointer cursors, and it makes the crosshair look odd on
short crosshair length.

Make all lines clip to an even distance from the center instead.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
c150fe95b9 magnifier: Apply color inversion to crosshairs/pointer
It is somewhat unexpected that crosshair color and pointer cursor colors
remain the same across changes in color inversion settings, and may lead
to contrast issues. Apply the effect on the common container, so it
applies to these all.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Carlos Garnacho
8b4b9d396b magnifier: Apply scale factor to crosshair length
On hidpi displays the length is double as advertised, make it match
the advertised length.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/984
2020-02-07 18:18:25 +01:00
Anders Jonsson
9c0f069f86 Update Swedish translation 2020-02-07 15:02:26 +00:00
Daniel van Vugt
8929c89d1f workspace: Animate window clones using translation properties
Instead of position x/y properties. This reduces CPU-intensive relayouts
in JavaScript (`vfunc_allocate` etc).

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1271
since the other fix required already landed in 4c4846e9.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/936
2020-02-07 14:43:56 +00:00
Daniel van Vugt
881eab7669 dnd: Make DND translation-property-aware
Previously DND only worked properly for actors with zero translation.
But it only requires a small tweak to `this._dragOffsetX/Y` to support
non-zero translation values.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/936
2020-02-07 14:43:56 +00:00
Danial Behzadi
141652b7ec Update Persian translation 2020-02-07 13:04:10 +00:00
Daniel van Vugt
b5651e38c7 iconGrid: Avoid animating the same icon twice
If the icon proper has opacity of zero then that's probably because a
clone of it is animating. So avoid animating the source actor too.

And if there's any other reason for the opacity being zero, still don't
animate it because we can't see it :)

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/2167
2020-02-07 11:31:20 +00:00
Daniel van Vugt
33ae220ad2 appDisplay: Call super.vfunc_unmap last
So as to guarantee the unmapped state sticks and doesn't get toggled
back to mapped before we return.

Being in a mapped state when `FolderIcon.vfunc_unmap()` returned was
causing an assertion failure in `clutter_actor_set_mapped` and crashed
the shell.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/2170
2020-02-07 11:23:25 +00:00
Daniel Mustieles
6ec996e45b Updated Spanish translation 2020-02-07 11:54:07 +01:00
Daniel Mustieles
4f3e847897 Merge branch 'master' of gitlab.gnome.org:GNOME/gnome-shell 2020-02-07 11:54:07 +01:00
Rafael Fontenelle
07a1f107cc Update Brazilian Portuguese translation 2020-02-06 23:47:17 +00:00
Florian Müllner
e062f27edc Bump version to 3.35.90
Update NEWS.
2020-02-06 21:42:49 +01:00
nana-4
36c417e6d9 theme: Get back .weather-header-box styling
This introduced in f2df9f1a was lost in 9ea745bc.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
87ca1e034f theme: Move .world-clocks-button before .weather-button
As per the layout.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
dbf1ffc9d4 theme/calendar: Don't nest all card styles for code consistency
The inconsistent styling rules "some card styles are nested, but some
are not" and "some card styles are nested, but some of their descendant
styles are defined elsewhere" are very confusing.

This commit stops nesting all card styles to make the coding style
consistent and less confusing.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
c5bed7e963 theme: Adjust calendar popover sizing
- Remove bottom blank space on the right column of the calendar popover
  so that the weather card is bottom-aligned with the clear button on
  the left column.
- Remove top blank space on the left column of the calendar popover so
  that the message list is top-aligned with the today button on the
  right column.
- Adjust .message-list-controls sizing to align with other card-styled
  elements.
- Use regular `spacing` instead of margin for some spacing.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2088
Closes https://gitlab.gnome.org/GNOME/gnome-shell/issues/2120
2020-02-06 20:31:42 +00:00
nana-4
fa915ff7ea theme: Simplify .message styling
- Use fewer properties for layout.
- Use .message-body instead of .message-content to change the body
  color, and remove some color overrides.
- Fix border-radius for last .message-media-control, not only on hover.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
cbced1ce28 theme: Reorder selectors in .message
The order was messed up when the recent Sass reorganization.
This reorders the selectors in .message to make sense again.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
900d36d0ea theme/notifications: Remove some duplicate or pointless styling
Those styles are defined in .message and do not need to be overridden in
.notification-banner.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
62441ebeb4 theme/notifications: Remove some unused style classes
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
051f081db7 theme: Apply spacing to .overview-icon-with-label correctly
- Remove margin-bottom for StIcon, which is not only ineffective, but
  also created a bug in app folders.
- Remove ">" which is invalid for overview icons that are not app
  folders.
- Apply spacing to the correct target "StBoxLayout", not the parent
  .overview-icon.overview-icon-with-label.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/2129
2020-02-06 20:31:42 +00:00
nana-4
ddbc4ef42e theme/search-results: Use spacing instead of margin or padding
Those margin and padding broke spacing in RTL layout. We should use
regular `spacing` for them as before the refactoring.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
fc4dfa11c3 theme: Simplify .search-section-content items styling
This reduces duplicate code in .search-provider-icon and
.list-search-result by using %search-section-content-item
to improve maintainability.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
60f12da3cd theme: Simplify .overview-icon styling
This reduces duplicate code by using overview-icon() and %app-well-app
to improve maintainability.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
40f7d61524 theme: Add interactive styling to .events-section-title again
Since it's an interactive element, interactive styling is still needed.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2088
2020-02-06 20:31:42 +00:00
nana-4
1263f84c3f theme: Make %notification_bubble a mixin
And simplify .datemenu-today-button styling by using it.

This allows removing duplicate code for flat notification_bubble
styling.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
9d91b586d8 theme: Remove unnecessary !important rules
Using !important is a bad practice and should be avoided wherever
possible to make styling and debugging easier. See:

https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity#The_!important_exception

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
nana-4
ab8bce35f1 theme: Remove some unsupported CSS properties
CSS opacity and border-{top,bottom}-{left,right}-radius are not
supported by St.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/957
2020-02-06 20:31:42 +00:00
Sebastian Keller
7287ee3651 texture-cache: Fix invalid reads when storing used resource scales
The used_scales hash table uses g_double_hash and g_double_equal which
try to read a double from the passed pointers. The pointers however were
pointing to a float, leading to an invalid read.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/974
2020-02-06 19:47:24 +00:00
Florian Müllner
9d7a319721 extensionPrefs: Remove stray > in .ui file
This slipped through as GtkBuilder still accepts it, but let's
not rely on that and fix our XML.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2180
2020-02-06 20:05:32 +01:00
Piotr Drąg
b7df1133b8 extensionPrefs: Make the Log Out button a proper verb
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/981
2020-02-06 18:56:00 +00:00
Alexander Mikhaylenko
dfb8737007 appDisplay: Disable swipe tracker during swarm animation
Eensures it resets when an animation starts.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2177
2020-02-06 17:36:05 +00:00
Alexander Mikhaylenko
a06a418ac1 swipeTracker: Reset scroll gesture state on disabling
Ensure that scrolling works correctly next time it's enabled.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2177
2020-02-06 17:36:05 +00:00
Michael Catanzaro
35063c9e7c portalHelper: Enable WebKit sandbox if available
The portal helper is rather sensitive because potentially-hostile Wi-Fi
networks can decide to launch it whenever they want (by blocking the
user's connection to the nmcheck domain) and load whatever web content
they want into it. So having this unsandboxed is really extraordinarily
risky. Previously it was a risk we had to accept, because WebKit did not
have a web process sandbox, but now it does. So let's bubblewrap all the
things!

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/983
2020-02-06 18:28:40 +01:00
Jakub Steiner
ded4586781 theme: revert app grid button styling
- the plan was to drop the frequent/all view switcher, thus sam didn't
  pay too much attention to the button styling for those. Sadly the view
  switcher remains, so we should keep the old subtle styling intact.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/979
2020-02-06 16:41:04 +01:00
Daniel Mustieles
89790ac723 Updated Spanish translation 2020-02-06 11:40:07 +01:00
Daniel Mustieles
d253b0671b Updated Spanish translation 2020-02-06 11:39:36 +01:00
Aurimas Černius
e58dcd3040 Updated Lithuanian translation 2020-02-05 22:49:34 +02:00
Piotr Drąg
050a1898ab extensionPrefs: Add a translator comment to the .desktop file
So that Damned Lies filters out the Icon key from translation.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/980
2020-02-05 20:40:54 +01:00
Piotr Drąg
79a8fa2ede Update POTFILES.in 2020-02-05 20:31:50 +01:00
Anders Jonsson
7819f8f82e Update Swedish translation 2020-02-05 17:25:53 +00:00
48 changed files with 5890 additions and 4904 deletions

42
NEWS
View File

@@ -1,3 +1,45 @@
3.35.90
=======
* Update default favorite apps [Michael; !907]
* Add Shell.Blur effect [Georges; !864, !924]
* Overhaul scroll/swipe gestures [Alexander; !821, !825, !826]
* Fix VPN connections when delaying request [Florian; #2008]
* Overhaul theme [Sam, Jakub, nana-4; !904, !931, !957]
* Improve visual appearance of Weather integration [Florian; #1143]
* Implement new system dialog designs [Jonas; #1343]
* Animate position changes of app icons [Georges; !882]
* Add St.Viewport [Georges; !929]
* Make app folders behave as dialogs [Georges; !896]
* Add do-not-disturb functionality to calendar popup [Florian; #239]
* Show hint actor in focused entries [Jonas; !944]
* Switch screen-recorder back to VP8 [Björn; #256]
* Allow to run perf-tool as wayland compositor [Olivier; !941]
* Handle extension updates [Florian; !945]
* Animate showing and hiding caps-lock warning [Jonas; !952]
* Support "auto" lengths in CSS [Florian; !971]
* Turn extension-prefs into the offical Extensions app [Florian; #1968]
* Sandbox the portal helper [Michael; !983]
* Misc. bug fixes and cleanups [Florian, Björn, Jakub, Alexander, Daniel V.,
Jonas, nana-4, Carlos, Sebastian, Daniel G., Georges, Piotr; !918, !917,
!919, !920, #763, #791659, !927, #2091, !930, !926, !888, !934, !168, #2133,
#682, #2142, #2131, !943, #2132, #1958, #2146, !951, #1779, #2130, !964,
!965, !948, #2151, #1746, !967, !760, !968, !970, !973, #2169, #2176, !978,
!980, !979, #2177, !981, #2180, !974]
Contributors:
Michael Catanzaro, Björn Daase, Jonas Dreßler, Piotr Drąg, Olivier Fourdan,
Carlos Garnacho, Sam Hewitt, Sebastian Keller, Andre Klapper,
Alexander Mikhaylenko, Daniel García Moreno, Florian Müllner,
Georges Basile Stavracas Neto, Jakub Steiner, Daniel van Vugt, nana-4
Translators:
Asier Sarasua Garmendia [eu], Daniel Mustieles [es], Andrej Shadura [sk],
Carmen Bianca BAKKER [eo], Sucipto [id], Dušan Kazik [sk], Goran Vidović [hr],
sicklylife [ja], Kukuh Syafaat [id], Yi-Jyun Pan [zh_TW],
Rafael Fontenelle [pt_BR], Jordi Mas [ca], Jiri Grönroos [fi],
Fabio Tomat [fur], Umarzuki Bin Mochlis Moktar [ms], Daniel Korostil [uk],
Jor Teron [mjw], Anders Jonsson [sv], Aurimas Černius [lt]
3.35.3 3.35.3
====== ======
* Add discrete GPU support for NVidia drivers [Bastien; #1810] * Add discrete GPU support for NVidia drivers [Bastien; #1810]

View File

@@ -18,7 +18,6 @@
<file alias="icons/message-indicator-symbolic.svg">message-indicator-symbolic.svg</file> <file alias="icons/message-indicator-symbolic.svg">message-indicator-symbolic.svg</file>
<file>no-events.svg</file> <file>no-events.svg</file>
<file>no-notifications.svg</file> <file>no-notifications.svg</file>
<file>noise-texture.png</file>
<file>pad-osd.css</file> <file>pad-osd.css</file>
<file alias="icons/eye-open-negative-filled-symbolic.svg">eye-open-negative-filled-symbolic.svg</file> <file alias="icons/eye-open-negative-filled-symbolic.svg">eye-open-negative-filled-symbolic.svg</file>
<file alias="icons/eye-not-looking-symbolic.svg">eye-not-looking-symbolic.svg</file> <file alias="icons/eye-not-looking-symbolic.svg">eye-not-looking-symbolic.svg</file>

View File

@@ -1,6 +1,7 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
Name=Extensions Name=Extensions
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
Icon=org.gnome.Extensions Icon=org.gnome.Extensions
Comment=Configure GNOME Shell Extensions Comment=Configure GNOME Shell Extensions
Exec=@bindir@/gnome-shell-extension-prefs %u Exec=@bindir@/gnome-shell-extension-prefs %u

View File

@@ -91,13 +91,9 @@ stage {
// icon tiles // icon tiles
%icon_tile { %icon_tile {
background-color: transparent; // no background
color: $osd_fg_color;
border-radius: $base_border_radius + 4px; border-radius: $base_border_radius + 4px;
padding: $base_padding; padding: $base_padding;
border-width: 2px; border: 2px solid transparent;
border-style: solid;
border-color: transparent;
transition-duration: 100ms; transition-duration: 100ms;
text-align: center; text-align: center;
} }
@@ -155,14 +151,17 @@ stage {
// notification styling // notification styling
%notification_bubble { @mixin notification_bubble($flat: false) {
border-width: 1px; border-width: 1px;
border-style: solid; border-style: solid;
border-radius:$base_border_radius + 2px; border-radius: $base_border_radius + 2px;
padding: 0;
margin: $base_margin; margin: $base_margin;
@include button(normal); @if $flat {
@include button(undecorated);
} @else {
@include button(normal);
}
&:focus { &:focus {
@include button(focus); @include button(focus);

View File

@@ -137,7 +137,7 @@
// normal button // normal button
@if $t==normal { @if $t==normal {
color: $tc; color: $tc;
background-color: lighten($c, 3%) !important; background-color: lighten($c, 3%);
border-color: draw_border_color($c); border-color: draw_border_color($c);
@include draw_shadows($button_shadow); @include draw_shadows($button_shadow);
// box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1); // box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
@@ -157,7 +157,7 @@
// hover button // hover button
@else if $t==hover { @else if $t==hover {
color: $tc; color: $tc;
background-color: lighten($c, if($variant == 'light', 8%, 5%)) !important; background-color: lighten($c, if($variant == 'light', 8%, 5%));
border-color: if($variant == 'light', draw_border_color(lighten($c, 7%)), draw_border_color($c)); border-color: if($variant == 'light', draw_border_color(lighten($c, 7%)), draw_border_color($c));
@include draw_shadows($button_shadow); @include draw_shadows($button_shadow);
text-shadow: 0 1px $text_shadow_color; text-shadow: 0 1px $text_shadow_color;
@@ -167,7 +167,7 @@
// active button // active button
@else if $t==active { @else if $t==active {
color: $tc; color: $tc;
background-color: darken($c,3%) !important; background-color: darken($c,3%);
border-color: draw_border_color(if($variant == 'light', $c, darken($c,7%))); border-color: draw_border_color(if($variant == 'light', $c, darken($c,7%)));
text-shadow: none; text-shadow: none;
icon-shadow: none; icon-shadow: none;
@@ -178,7 +178,7 @@
@else if $t==insensitive { @else if $t==insensitive {
color: $insensitive_fg_color; color: $insensitive_fg_color;
border-color: $insensitive_borders_color; border-color: $insensitive_borders_color;
background-color: $insensitive_bg_color !important; background-color: $insensitive_bg_color;
box-shadow: none; box-shadow: none;
text-shadow: none; text-shadow: none;
icon-shadow: none; icon-shadow: none;
@@ -194,3 +194,38 @@
icon-shadow: none; icon-shadow: none;
} }
} }
// overview icons
@mixin overview-icon($color) {
.overview-icon {
@extend %icon_tile;
color: $color;
}
&:hover,
&:selected {
.overview-icon {
background-color: transparentize($color, .9);
}
}
&:focus {
.overview-icon {
background-color: transparentize($color, .7);
// border-color: $selected_bg_color;
}
}
&:drop {
.overview-icon {
background-color: transparentize($selected_bg_color, .15);
}
}
&:active,
&:checked {
.overview-icon {
background-color: transparentize(darken($osd_bg_color, 10%), .5);
}
}
}

View File

@@ -11,7 +11,6 @@ $app_icon_padding: 24px;
.overview-icon { .overview-icon {
icon-size: $app_icon_size; icon-size: $app_icon_size;
StIcon { margin-bottom: $base_margin; } // margin on icon so label isn't close
} }
} }
@@ -33,47 +32,14 @@ $app_grid_fg_color: #fff;
// Icon tiles in the app grid // Icon tiles in the app grid
.app-well-app, .app-well-app,
.app-folder { %app-well-app {
@include overview-icon($app_grid_fg_color);
.overview-icon { .overview-icon.overview-icon-with-label {
@extend %icon_tile; padding: 10px 8px 5px 8px;
color: $app_grid_fg_color !important;
}
&:selected { > StBoxLayout {
.overview-icon { spacing: $base_spacing;
background-color: transparentize($osd_bg_color,0.7);
color: $app_grid_fg_color;
}
}
&:hover,
&:focus,
&:selected {
.overview-icon {
background-color: transparentize($osd_fg_color,0.9);
color: $osd_fg_color;
}
}
&:focus {
.overview-icon {
background-color: transparentize($osd_fg_color,0.7 );
// border-color: $selected_bg_color;
color: $app_grid_fg_color;
}
}
&:drop {
.overview-icon {
background-color: transparentize($selected_bg_color,.15);
}
}
&:active,
&:checked {
.overview-icon {
background-color: transparentize(darken($osd_bg_color,10%), 0.5);
} }
} }
} }
@@ -81,7 +47,6 @@ $app_grid_fg_color: #fff;
/* App Folders */ /* App Folders */
.app-folder { .app-folder {
.overview-icon { .overview-icon {
@extend %icon_tile;
} }
} }
@@ -178,11 +143,6 @@ $app_grid_fg_color: #fff;
padding: 0px 88px 10px 88px; padding: 0px 88px 10px 88px;
} }
.app-well-app > .overview-icon.overview-icon-with-label {
padding: 10px 8px 5px 8px;
spacing: $base_spacing;
}
// Label when no frequent apps // Label when no frequent apps
.no-frequent-applications-label { @extend %status_text; } .no-frequent-applications-label { @extend %status_text; }
@@ -202,41 +162,35 @@ $app_grid_fg_color: #fff;
} }
// buttons // buttons
.app-view-control { .app-view-control {
padding: $base_padding $base_padding*5; padding: 4px 32px;
margin: 0; margin: 0 4px;
background-color: transparentize($osd_bg_color, 0.5);
border-width: 1px;
color: darken($osd_fg_color, 25%);
&:hover { &, &:hover, &:checked {
background-color: transparentize($osd_bg_color, 0.5) !important; @include button(undecorated);
box-shadow:none !important;
color: darken($osd_fg_color, 25%); color: darken($osd_fg_color, 25%);
} }
&:hover {
color: $osd_fg_color;
box-shadow: inset 0 -2px darken($osd_fg_color, 25%);
}
&:active { &:active {
box-shadow: none; box-shadow: inset 0 -2px $osd_fg_color;
background-color: $selected_bg_color !important;
&:hover {
background-color: lighten($selected_bg_color, 11%) !important;
}
} }
&:checked { &:checked {
background-color: $selected_bg_color !important; color: $osd_fg_color;
color: $selected_fg_color; box-shadow: inset 0 -2px $selected_bg_color;
box-shadow: none;
&:active { background-color: darken($selected_bg_color, 4%) !important; }
&:hover { background-color: lighten($selected_bg_color, 7%) !important; }
} }
&:first-child { &:first-child {
border-right-width: 0 !important; border-right-width: 0;
border-radius: $base_border_radius 0 0 $base_border_radius; border-radius: 0;
} }
&:last-child { &:last-child {
border-radius: 0 $base_border_radius $base_border_radius 0; border-radius: 0;
} }
} }

View File

@@ -5,83 +5,54 @@
// overall menu // overall menu
#calendarArea { #calendarArea {
padding:0; padding:0;
margin:0;
} }
// Calendar menu side column // Calendar menu side column
.datemenu-calendar-column { .datemenu-calendar-column {
spacing: 0; spacing: $base_spacing;
border: 0 solid $bubble_borders_color; border: 0 solid $bubble_borders_color;
padding: $base_padding * 2; padding: 0 $base_padding * 2;
padding-bottom: 3em; // account for the notifications clear button
padding-top:0;
&:ltr {margin-right: $base_margin * 2; border-left-width: 1px; } &:ltr {margin-right: $base_margin * 2; border-left-width: 1px; }
&:rtl {margin-left: $base_margin * 2; border-right-width: 1px; } &:rtl {margin-left: $base_margin * 2; border-right-width: 1px; }
// today button (the date)
.datemenu-today-button {
padding: $base_padding * 1.5;
margin: $base_margin;
border: 1px solid transparent;
border-radius: $base_border_radius + 2px;
&:hover { @include button(hover);}
&:focus { @include button(focus);}
&:active {
@include button(active);
}
// weekday label
.day-label {
@include fontsize($base_font_size+1);
font-weight: bold;
}
// date label
.date-label {
@include fontsize($base_font_size+7);
font-weight: 1000;
}
}
// calendar
.calendar {
@extend %notification_bubble;
margin:$base_margin !important;
margin-bottom: $base_padding + $base_margin !important;
padding:$base_padding !important;
// more below for sub-elements
}
.datemenu-displays-section { .datemenu-displays-section {
margin:0;
} }
.datemenu-displays-box { .datemenu-displays-box {
spacing: $base_spacing; spacing: $base_spacing;
margin:0;
// world clocks and weather
.world-clocks-button,
.weather-button {
@extend %notification_bubble;
padding:$base_padding !important;
}
} }
} }
.events-section-title { .events-section-title {
@include notification_bubble($flat: true);
color: desaturate(darken($fg_color,40%), 10%); color: desaturate(darken($fg_color,40%), 10%);
font-weight: bold; font-weight: bold;
border-radius: 4px;
padding: .4em; padding: .4em;
} }
/* today button (the date) */
.datemenu-today-button {
@include notification_bubble($flat: true);
padding: $base_padding * 1.5;
// weekday label
.day-label {
@include fontsize($base_font_size+1);
font-weight: bold;
}
// date label
.date-label {
@include fontsize($base_font_size+7);
font-weight: 1000;
}
}
/* Calendar */ /* Calendar */
.calendar { .calendar {
@include notification_bubble;
padding: $base_padding;
// month // month
.calendar-month-label { .calendar-month-label {
@@ -132,6 +103,7 @@
@include fontsize($base_font_size - 4); @include fontsize($base_font_size - 4);
} }
} }
.calendar-day { //border collapse hack - see calendar.js .calendar-day { //border collapse hack - see calendar.js
border-width: 0; border-width: 0;
} }
@@ -140,8 +112,12 @@
border-top-width: 1px; border-top-width: 1px;
} }
.calendar-day-left { border-left-width: 1px; } .calendar-day-left {
border-left-width: 1px;
}
.calendar-work-day {} .calendar-work-day {}
.calendar-nonwork-day { .calendar-nonwork-day {
color: $insensitive_fg_color; color: $insensitive_fg_color;
} }
@@ -161,13 +137,14 @@
&:active,&:selected { &:active,&:selected {
background-color: $selected_bg_color; background-color: $selected_bg_color;
color: $selected_fg_color; color: $selected_fg_color;
&:hover,&:focus { &:hover,&:focus {
background-color:lighten($selected_bg_color, 3%); background-color:lighten($selected_bg_color, 3%);
color: $selected_fg_color; color: $selected_fg_color;
} }
} }
} }
.calendar-day-with-events { .calendar-day-with-events {
color: lighten($fg_color,10%); color: lighten($fg_color,10%);
font-weight: bold; font-weight: bold;
@@ -176,7 +153,6 @@
.calendar-other-month-day { .calendar-other-month-day {
color: transparentize($fg_color ,0.5); color: transparentize($fg_color ,0.5);
opacity: 0.5;
} }
.calendar-week-number { .calendar-week-number {
@@ -192,51 +168,16 @@
} }
} }
/* World clocks */
.world-clocks-button {
@include notification_bubble;
padding: $base_padding * 2;
/* Weather */ .world-clocks-grid {
.weather-box {
spacing: $base_spacing;
padding:$base_padding;
.weather-header {
color: desaturate(darken($fg_color,40%), 10%);
font-weight: bold;
&.location {
font-weight: normal;
@include fontsize($base_font_size - 1);
}
}
.weather-grid {
margin-top: $base_margin;
spacing-rows: $base_spacing; spacing-rows: $base_spacing;
spacing-columns: $base_spacing * 2; spacing-columns: $base_spacing * 2;
} }
.weather-forecast-time {
color: darken($fg_color,30%);
font-feature-settings: "tnum";
@include fontsize($base_font_size - 2);
font-weight: normal;
padding-top: 0.2em;
padding-bottom: 0.4em;
}
.weather-forecast-icon {
icon-size: $base_icon_size * 2;
}
.weather-forecast-temp {
font-weight: bold;
}
}
/* World clocks */
.world-clocks-grid {
padding:$base_padding;
spacing-rows: $base_spacing;
spacing-columns: $base_spacing * 2;
// title // title
.world-clocks-header { .world-clocks-header {
color: desaturate(darken($fg_color,40%), 10%); color: desaturate(darken($fg_color,40%), 10%);
@@ -266,3 +207,49 @@
@include fontsize($base_font_size - 1); @include fontsize($base_font_size - 1);
} }
} }
/* Weather */
.weather-button {
@include notification_bubble;
padding: $base_padding * 2;
.weather-box {
spacing: $base_spacing + $base_margin;
}
.weather-header-box {
spacing: $base_spacing;
}
.weather-header {
color: desaturate(darken($fg_color,40%), 10%);
font-weight: bold;
&.location {
font-weight: normal;
@include fontsize($base_font_size - 1);
}
}
.weather-grid {
spacing-rows: $base_spacing;
spacing-columns: $base_spacing * 2;
}
.weather-forecast-time {
color: darken($fg_color,30%);
font-feature-settings: "tnum";
@include fontsize($base_font_size - 2);
font-weight: normal;
padding-top: 0.2em;
padding-bottom: 0.4em;
}
.weather-forecast-icon {
icon-size: $base_icon_size * 2;
}
.weather-forecast-temp {
font-weight: bold;
}
}

View File

@@ -9,12 +9,11 @@ $dash_border_radius: $modal_radius * 1.5;
@include fontsize($base_font_size - 2); @include fontsize($base_font_size - 2);
padding: ($dash_spacing / 2) 0; padding: ($dash_spacing / 2) 0;
//fixme: can't have non uniform borders :(
border-radius: 0 $dash_border_radius $dash_border_radius 0; border-radius: 0 $dash_border_radius $dash_border_radius 0;
border-left-width: 0 !important; border-left-width: 0;
&:rtl { &:rtl {
border-radius: $dash_border_radius 0 0 $dash_border_radius; border-radius: $dash_border_radius 0 0 $dash_border_radius;
border-right-width: 0 !important; border-right-width: 0;
} }
.placeholder { .placeholder {
@@ -49,36 +48,13 @@ $dash_border_radius: $modal_radius * 1.5;
// Show apps button // Show apps button
.show-apps { .show-apps {
color: $osd_fg_color; @include overview-icon($osd_fg_color);
& .overview-icon {
@extend %icon_tile;
color: $osd_fg_color;
}
&:hover,
&:focus, &:focus,
&:selected { &:checked {
.overview-icon {
background-color: transparentize($osd_fg_color,0.9);
color: $osd_fg_color;
}
}
&:drop .overview-icon {
background-color: transparentize($selected_bg_color,.15);
}
&:active, &:checked {
.overview-icon { .overview-icon {
background-color: darken($osd_bg_color,10%); background-color: darken($osd_bg_color,10%);
}
}
&:checked, &:focus {
.show-apps-icon {
color: $fg_color; color: $fg_color;
transition-duration: 100ms;
} }
} }
} }

View File

@@ -10,7 +10,7 @@ $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten
// draw keys using button function // draw keys using button function
#keyboard { #keyboard {
background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1); background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1);
box-shadow: inset 0 1px 0 0 $osd_outer_borders_color !important; box-shadow: inset 0 1px 0 0 $osd_outer_borders_color;
.page-indicator { .page-indicator {
padding: $base_padding; padding: $base_padding;
@@ -121,4 +121,4 @@ $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten
@include fontsize($base_font_size + 3); @include fontsize($base_font_size + 3);
spacing: 12px; spacing: 12px;
min-height: 20pt; min-height: 20pt;
} }

View File

@@ -11,7 +11,7 @@
.message-list-sections { .message-list-sections {
spacing: $base_spacing; spacing: $base_spacing;
margin: $base_margin * 4; // to account for scrollbar margin: 0 $base_margin * 4; // to account for scrollbar
} }
.message-list-section, .message-list-section,
@@ -19,40 +19,61 @@
spacing: $base_spacing; spacing: $base_spacing;
} }
.message-list-section-list {
&:ltr {padding:0;}
&:rtl {padding:0;}
}
// do-not-disturb + clear button // do-not-disturb + clear button
.message-list-controls { .message-list-controls {
margin: $base_margin $base_margin*2; margin: ($base_margin * 2) ($base_margin * 4) 0;
// NOTE: remove the padding if notification_bubble could remove margin for drop shadow
padding: $base_margin;
spacing: $base_spacing; spacing: $base_spacing;
} }
// message bubbles // message bubbles
.message { .message {
@extend %notification_bubble; @include notification_bubble;
// title // icon container
.message-title { .message-icon-bin {
color: $fg_color; padding: ($base_padding * 3) 0 ($base_padding * 3) ($base_padding * 2);
font-weight: bold;
margin-bottom:4px; &:rtl {
padding: ($base_padding * 3) ($base_padding * 2) ($base_padding * 3) 0;
}
// icon size and color
> StIcon {
icon-size: $base_icon_size*2; // 32px
-st-icon-style: symbolic;
}
// fallback
> .fallback-app-icon {
width: $base_icon_size;
height: $base_icon_size;
}
} }
// content // content
.message-content { .message-content {
color: darken($fg_color, 10%); padding: $base_padding + $base_margin * 2;
padding: $base_padding 0; spacing: 4px;
margin:$base_margin * 2; }
&:ltr {
margin-left: $base_margin; // title
padding-right:$base_padding; .message-title {
} font-weight: bold;
&:rtl { }
margin-right: $base_margin;
padding-left:$base_padding; // secondary container in title box
.message-secondary-bin {
padding: 0 $base_margin * 2;
// notification time stamp
> .event-time {
color: transparentize($fg_color, 0.5);
@include fontsize($base_font_size - 2);
text-align: right;
/* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
padding-bottom: 0.13em;
} }
} }
@@ -63,48 +84,10 @@
&:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); } &:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); }
} }
// body
// icon container .message-body {
.message-icon-bin { color: darken($fg_color, 10%);
padding: $base_padding;
margin:$base_padding 0;
&:rtl {
// padding: $base_padding;
}
// icon size and color
> StIcon {
color: $fg_color;
icon-size: $base_icon_size*2; // 32px
-st-icon-style: symbolic;
padding:0;
margin:$base_padding;
}
// fallback
> .fallback-app-icon {
width: $base_icon_size;
height: $base_icon_size;
}
} }
// secondary container in title box
.message-secondary-bin {
padding: 0;
// notification time stamp
> .event-time {
color: transparentize($fg_color, 0.5);
@include fontsize($base_font_size - 2);
text-align: right;
margin: 0 $base_margin * 2;
/* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
padding-bottom: $base_padding;
}
}
} }
/* Media Controls */ /* Media Controls */
@@ -125,9 +108,9 @@
&:insensitive { color: darken($fg_color,40%); } &:insensitive { color: darken($fg_color,40%); }
// fix border-radius for last button on hover // fix border-radius for last button
&:last-child:ltr { &:hover {border-radius: 0 $base_border_radius+2 $base_border_radius+2 0;} } &:last-child:ltr { border-radius: 0 $base_border_radius+2 $base_border_radius+2 0; }
&:last-child:rtl { &:hover {border-radius: $base_border_radius+2 0 0 $base_border_radius+2;} } &:last-child:rtl { border-radius: $base_border_radius+2 0 0 $base_border_radius+2; }
} }
// album-art // album-art
@@ -142,6 +125,5 @@
border: 1px solid transparent; border: 1px solid transparent;
border-radius: $base_border_radius; border-radius: $base_border_radius;
icon-size: $base_icon_size * 2 !important; icon-size: $base_icon_size * 2 !important;
padding: $base_padding * 2;
} }
} }

View File

@@ -7,39 +7,8 @@ $notification_banner_width: 34em;
.notification-banner { .notification-banner {
min-height: $notification_banner_height; min-height: $notification_banner_height;
width: $notification_banner_width; width: $notification_banner_width;
@include fontsize($base_font_size);
margin: $base_margin;
border-radius: $modal_radius;
.message-title { color: $fg_color }
.message-content { color: $fg_color; }
&:hover { background: $bg_color; }
&, &:focus, &:active {
background-color: $bg_color;
.message-title { color: $fg_color }
.message-content { color: $fg_color; }
}
// icon
.message-icon-bin > StIcon {
icon-size: $base_icon_size * 2;
color: $fg_color;
}
.notification-icon {
padding: 5px;
}
.notification-content {
padding: 5px;
spacing: 5px;
}
.secondary-icon { icon-size: $base_icon_size; }
.notification-actions { .notification-actions {
padding-top: 0;
spacing: 0; spacing: 0;
} }
@@ -63,8 +32,6 @@ $notification_banner_width: 34em;
border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%; border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%;
} }
.secondary-icon { icon-size: $base_icon_size; }
// chat bubbles // chat bubbles
.chat-body { spacing: 5px; } .chat-body { spacing: 5px; }
.chat-response { margin: 5px; } .chat-response { margin: 5px; }
@@ -87,4 +54,4 @@ $notification_banner_width: 34em;
font-weight: bold; font-weight: bold;
color: lighten($fg_color,18%); color: lighten($fg_color,18%);
&:rtl { padding-left: 0; padding-right: 4px; } &:rtl { padding-left: 0; padding-right: 4px; }
} }

View File

@@ -15,8 +15,7 @@ $panel_height: 1.86em;
// transparent panel on lock & login screens // transparent panel on lock & login screens
&.unlock-screen, &.unlock-screen,
&.login-screen, &.login-screen {
&.lock-screen {
background-color: transparent; background-color: transparent;
.panel-corner { .panel-corner {
@@ -77,8 +76,7 @@ $panel_height: 1.86em;
// lock & login screen styles // lock & login screen styles
.unlock-screen &, .unlock-screen &,
.login-screen &, .login-screen & {
.lock-screen & {
color: lighten($fg_color, 10%); color: lighten($fg_color, 10%);
&:focus, &:hover, &:active { color: lighten($fg_color, 10%); } &:focus, &:hover, &:active { color: lighten($fg_color, 10%); }
} }

View File

@@ -87,7 +87,6 @@ $popover_arrow_height: 12px;
height: 1px; //not really the whole box height: 1px; //not really the whole box
margin: 6px 64px; margin: 6px 64px;
background-color: lighten($borders_color, 2%); background-color: lighten($borders_color, 2%);
border: none !important;
} }
// desktop background menu // desktop background menu
@@ -118,4 +117,4 @@ $popover_arrow_height: 12px;
margin-right: $base_icon_size; margin-right: $base_icon_size;
} }
} }
} }

View File

@@ -1,68 +1,53 @@
/* Screen Shield */ /* Screen Shield */
$_screenshield_shadow: 0px 0px 6px rgba(0, 0, 0, 0.726); .unlock-dialog-clock {
.screen-shield-arrows {
padding-bottom: 3em;
}
.screen-shield-arrows Gjs_Arrow {
color: white; color: white;
width: 80px; font-weight: 300;
height: 48px;
-arrow-thickness: 12px;
-arrow-shadow: $_screenshield_shadow;
}
.screen-shield-clock {
color: white;
text-shadow: $_screenshield_shadow;
font-weight: bold;
text-align: center; text-align: center;
padding-bottom: 1.5em; padding-bottom: 2.5em;
} }
.screen-shield-clock-time { .unlock-dialog-clock-time {
font-size: 72pt; font-size: 64pt;
text-shadow: $_screenshield_shadow; padding-bottom: 24px;
font-feature-settings: "tnum"; font-feature-settings: "tnum";
} }
.screen-shield-clock-date { .unlock-dialog-clock-date {
font-size: 28pt; font-size: 16pt;
font-weight: normal; font-weight: normal;
} }
.screen-shield-notifications-container { .unlock-dialog-notifications-container {
margin: 12px 0;
spacing: 6px; spacing: 6px;
width: 30em; width: 23em;
background-color: transparent; background-color: transparent;
max-height: 500px;
.summary-notification-stack-scrollview { .summary-notification-stack-scrollview {
padding-top: 0; padding-top: 0;
padding-bottom: 0; padding-bottom: 0;
} }
.notification, .notification,
.screen-shield-notification-source { .unlock-dialog-notification-source {
padding: 12px 6px; padding: 12px 6px;
border: 1px solid $osd_outer_borders_color; border: 1px solid $osd_outer_borders_color;
background-color: transparentize($osd_bg_color,0.5); background-color: transparentize($osd_bg_color,0.5);
color: $osd_fg_color; color: $osd_fg_color;
border-radius: 4px; border-radius: 4px;
&.critical { background-color: transparentize($osd_bg_color,0.1) }
} }
.notification { margin-right: 15px; } //compensate for space allocated to the scrollbar
} }
.unlock-dialog-notification-label {
.screen-shield-notification-label {
font-weight: bold;
padding: 0px 0px 0px 12px; padding: 0px 0px 0px 12px;
} }
.screen-shield-notification-count-text { padding: 0px 0px 0px 12px; } .unlock-dialog-notification-count-text {
weight: bold;
#panel.lock-screen { background-color: transparentize($osd_bg_color, 0.5); } padding: 0px 12px;
}
.screen-shield-background { //just the shadow, really .screen-shield-background { //just the shadow, really
background: black; background: black;
@@ -70,14 +55,13 @@ $_screenshield_shadow: 0px 0px 6px rgba(0, 0, 0, 0.726);
} }
#lockDialogGroup { #lockDialogGroup {
background: lighten(#2e3436, 8%) url(resource:///org/gnome/shell/theme/noise-texture.png); background-color: lighten(#2e3436, 8%);
background-repeat: repeat;
} }
#screenShieldNotifications { #unlockDialogNotifications {
StButton#vhandle, StButton#hhandle { StButton#vhandle, StButton#hhandle {
background-color: transparentize($bg_color,0.7); background-color: transparentize($bg_color,0.7);
&:hover, &:focus { background-color: transparentize($bg_color,0.5); } &:hover, &:focus { background-color: transparentize($bg_color,0.5); }
&:active { background-color: transparentize($selected_bg_color,0.5); } &:active { background-color: transparentize($selected_bg_color,0.5); }
} }
} }

View File

@@ -3,19 +3,16 @@
// search overview container // search overview container
#searchResultsContent { #searchResultsContent {
max-width: 1024px; max-width: 1024px;
spacing: $base_margin * 2;
} }
// search results sections "the boxes" // search results sections "the boxes"
.search-section { .search-section {
// This should be equal to #searchResultsContent spacing
spacing: $base_margin * 2; spacing: $base_margin * 2;
padding:0 !important;
margin:0 !important;
background-color:transparent;
box-shadow:none;
border:none;
// separator // separator
.search-section-separator { .search-section-separator {
// margin-top: $base_padding * 2;
// height: 1px; // height: 1px;
// background-color: $osd_outer_borders_color; // background-color: $osd_outer_borders_color;
height: 0; height: 0;
@@ -32,8 +29,24 @@
text-shadow: 0 1px if($variant == 'light', rgba(255,255,255,0.2), rgba(0,0,0,0.2)); text-shadow: 0 1px if($variant == 'light', rgba(255,255,255,0.2), rgba(0,0,0,0.2));
color: $osd_fg_color; color: $osd_fg_color;
padding: $base_padding * 3; padding: $base_padding * 3;
margin: $base_margin 0; // This is the space between the provider icon and the results container
spacing: 0; spacing: $base_margin * 2;
}
%search-section-content-item {
@extend %icon_tile;
&:focus,
&:hover,
&:selected {
background-color: transparentize($osd_fg_color, .9);
transition-duration: 200ms;
}
&:active,
&:checked {
background-color: transparentize(darken($osd_bg_color, 10%), .1);
}
} }
// "no results" text // "no results" text
@@ -43,54 +56,12 @@
// Search results with icons // Search results with icons
.grid-search-result { .grid-search-result {
> .overview-icon { @extend %app-well-app;
@extend %icon_tile;
color: $osd_fg_color;
}
> .overview-icon.overview-icon-with-label {
padding: 10px 8px 5px 8px;
spacing: $base_spacing;
}
&:hover,
&:focus,
&:selected {
.overview-icon {
background-color: transparentize($osd_bg_color,0.8);
color: $osd_fg_color;
}
}
&:drop .overview-icon {
background-color: transparentize($selected_bg_color,.15);
}
&:active .overview-icon,
&:checked .overview-icon {
background-color: transparentize(darken($osd_bg_color,10%), 0.5);
}
} }
// search result provider // search result provider
.search-provider-icon { .search-provider-icon {
@extend %icon_tile; @extend %search-section-content-item;
padding: $base_padding;
spacing: 0;
margin-right: $base_margin * 2;
&:focus,
&:selected,
&:hover {
background-color: transparentize($osd_fg_color,.9);
transition-duration: 200ms;
}
&:active,
&:checked {
background-color: transparentize(darken($osd_bg_color,10%),.1);
}
// content // content
.list-search-provider-content { .list-search-provider-content {
@@ -113,34 +84,16 @@
// search result listitem // search result listitem
.list-search-result { .list-search-result {
@extend %icon_tile; @extend %search-section-content-item;
spacing: 0;
padding: $base_padding;
color: $osd_fg_color;
border-radius: $base_border_radius + 2px !important;
&:focus,
&:selected,
&:hover {
background-color: transparentize($osd_fg_color,.9);
transition-duration: 200ms;
}
&:active,
&:checked {
background-color: transparentize(darken($osd_bg_color,10%),.1);
}
// content // content
.list-search-result-content { .list-search-result-content {
spacing: 0; spacing: $base_padding;
} }
// list item title // list item title (with leading icon)
.list-search-result-title { .list-search-result-title {
color: $osd_fg_color;
spacing: $base_spacing * 2; spacing: $base_spacing * 2;
padding-right: $base_padding;
// font-weight: bold; // font-weight: bold;
} }

View File

@@ -45,14 +45,11 @@
padding: $base_padding; padding: $base_padding;
border-radius: $modal_radius 0 0 $modal_radius; border-radius: $modal_radius 0 0 $modal_radius;
border-right-width: 0 !important; border-right-width: 0;
//fixme: can't have non uniform borders :(
border-top-left-radius:0 !important;
border-bottom-left-radius:0 !important;
&:rtl { &:rtl {
border-radius: 0 $modal_radius $modal_radius 0; border-radius: 0 $modal_radius $modal_radius 0;
border-left-width: 0 !important; border-left-width: 0;
} }
// drag and drop indicator // drag and drop indicator
@@ -69,4 +66,4 @@
border-radius: 3px; border-radius: 3px;
padding: 0px; padding: 0px;
// background-color: transparentize($selected_bg_color, 0.9); // background-color: transparentize($selected_bg_color, 0.9);
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

View File

@@ -256,7 +256,7 @@
<property name="margin">6</property> <property name="margin">6</property>
<property name="icon_name">software-update-available-symbolic</property> <property name="icon_name">software-update-available-symbolic</property>
<style> <style>
<class name="warning"/>> <class name="warning"/>
</style> </style>
</object> </object>
</child> </child>
@@ -284,7 +284,7 @@
</child> </child>
<child> <child>
<object class="GtkButton"> <object class="GtkButton">
<property name="label" translatable="yes">Logout…</property> <property name="label" translatable="yes">Log Out…</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="action-name">win.logout</property> <property name="action-name">win.logout</property>

View File

@@ -409,7 +409,10 @@ var SessionMenuButton = GObject.registerClass({
}); });
var LoginDialog = GObject.registerClass({ var LoginDialog = GObject.registerClass({
Signals: { 'failed': {} }, Signals: {
'failed': {},
'wake-up-screen': {},
},
}, class LoginDialog extends St.Widget { }, class LoginDialog extends St.Widget {
_init(parentActor) { _init(parentActor) {
super._init({ style_class: 'login-dialog', visible: false }); super._init({ style_class: 'login-dialog', visible: false });
@@ -1225,13 +1228,18 @@ var LoginDialog = GObject.registerClass({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
} }
activate() {
this._userList.grab_key_focus();
this.show();
}
open() { open() {
Main.ctrlAltTabManager.addGroup(this, Main.ctrlAltTabManager.addGroup(this,
_("Login Window"), _("Login Window"),
'dialog-password-symbolic', 'dialog-password-symbolic',
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE }); { sortGroup: CtrlAltTab.SortGroup.MIDDLE });
this._userList.grab_key_focus(); this.activate();
this.show();
this.opacity = 0; this.opacity = 0;
Main.pushModal(this, { actionMode: Shell.ActionMode.LOGIN_SCREEN }); Main.pushModal(this, { actionMode: Shell.ActionMode.LOGIN_SCREEN });

View File

@@ -118,6 +118,10 @@ class PortalWindow extends Gtk.ApplicationWindow {
this._webContext = WebKit.WebContext.new_ephemeral(); this._webContext = WebKit.WebContext.new_ephemeral();
this._webContext.set_cache_model(WebKit.CacheModel.DOCUMENT_VIEWER); this._webContext.set_cache_model(WebKit.CacheModel.DOCUMENT_VIEWER);
this._webContext.set_network_proxy_settings(WebKit.NetworkProxyMode.NO_PROXY, null); this._webContext.set_network_proxy_settings(WebKit.NetworkProxyMode.NO_PROXY, null);
if (this._webContext.set_sandbox_enabled) {
// We have WebKitGTK 2.26 or newer.
this._webContext.set_sandbox_enabled(true);
}
this._webView = WebKit.WebView.new_with_context(this._webContext); this._webView = WebKit.WebView.new_with_context(this._webContext);
this._webView.connect('decide-policy', this._onDecidePolicy.bind(this)); this._webView.connect('decide-policy', this._onDecidePolicy.bind(this));

View File

@@ -530,8 +530,10 @@ var AllView = GObject.registerClass({
// Overridden from BaseAppView // Overridden from BaseAppView
animate(animationDirection, onComplete) { animate(animationDirection, onComplete) {
this._scrollView.reactive = false; this._scrollView.reactive = false;
this._swipeTracker.enabled = false;
let completionFunc = () => { let completionFunc = () => {
this._scrollView.reactive = true; this._scrollView.reactive = true;
this._swipeTracker.enabled = this.mapped;
if (onComplete) if (onComplete)
onComplete(); onComplete();
}; };
@@ -1523,10 +1525,10 @@ var FolderIcon = GObject.registerClass({
} }
vfunc_unmap() { vfunc_unmap() {
super.vfunc_unmap();
if (this._dialog) if (this._dialog)
this._dialog.popdown(); this._dialog.popdown();
super.vfunc_unmap();
} }
open() { open() {

View File

@@ -504,12 +504,9 @@ var SystemBackground = GObject.registerClass({
Signals: { 'loaded': {} }, Signals: { 'loaded': {} },
}, class SystemBackground extends Meta.BackgroundActor { }, class SystemBackground extends Meta.BackgroundActor {
_init() { _init() {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png');
if (_systemBackground == null) { if (_systemBackground == null) {
_systemBackground = new Meta.Background({ meta_display: global.display }); _systemBackground = new Meta.Background({ meta_display: global.display });
_systemBackground.set_color(DEFAULT_BACKGROUND_COLOR); _systemBackground.set_color(DEFAULT_BACKGROUND_COLOR);
_systemBackground.set_file(file, GDesktopEnums.BackgroundStyle.WALLPAPER);
} }
super._init({ super._init({
@@ -518,22 +515,11 @@ var SystemBackground = GObject.registerClass({
background: _systemBackground, background: _systemBackground,
}); });
let cache = Meta.BackgroundImageCache.get_default(); let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
let image = cache.load(file); this.emit('loaded');
if (image.is_loaded()) { return GLib.SOURCE_REMOVE;
image = null; });
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { GLib.Source.set_name_by_id(id, '[gnome-shell] SystemBackground.loaded');
this.emit('loaded');
return GLib.SOURCE_REMOVE;
});
GLib.Source.set_name_by_id(id, '[gnome-shell] SystemBackground.loaded');
} else {
let id = image.connect('loaded', () => {
this.emit('loaded');
image.disconnect(id);
image = null;
});
}
} }
}); });

View File

@@ -411,14 +411,18 @@ var _Draggable = class _Draggable {
this._snapBackY = this._dragStartY + this._dragOffsetY; this._snapBackY = this._dragStartY + this._dragOffsetY;
this._snapBackScale = this._dragActor.scale_x; this._snapBackScale = this._dragActor.scale_x;
let origDragOffsetX = this._dragOffsetX;
let origDragOffsetY = this._dragOffsetY;
let [transX, transY] = this._dragActor.get_translation();
this._dragOffsetX -= transX;
this._dragOffsetY -= transY;
if (this._dragActorMaxSize != undefined) { if (this._dragActorMaxSize != undefined) {
let [scaledWidth, scaledHeight] = this._dragActor.get_transformed_size(); let [scaledWidth, scaledHeight] = this._dragActor.get_transformed_size();
let currentSize = Math.max(scaledWidth, scaledHeight); let currentSize = Math.max(scaledWidth, scaledHeight);
if (currentSize > this._dragActorMaxSize) { if (currentSize > this._dragActorMaxSize) {
let scale = this._dragActorMaxSize / currentSize; let scale = this._dragActorMaxSize / currentSize;
let origScale = this._dragActor.scale_x; let origScale = this._dragActor.scale_x;
let origDragOffsetX = this._dragOffsetX;
let origDragOffsetY = this._dragOffsetY;
// The position of the actor changes as we scale // The position of the actor changes as we scale
// around the drag position, but we can't just tween // around the drag position, but we can't just tween
@@ -435,8 +439,8 @@ var _Draggable = class _Draggable {
this._dragActor.get_transition('scale-x').connect('new-frame', () => { this._dragActor.get_transition('scale-x').connect('new-frame', () => {
let currentScale = this._dragActor.scale_x / origScale; let currentScale = this._dragActor.scale_x / origScale;
this._dragOffsetX = currentScale * origDragOffsetX; this._dragOffsetX = currentScale * origDragOffsetX - transX;
this._dragOffsetY = currentScale * origDragOffsetY; this._dragOffsetY = currentScale * origDragOffsetY - transY;
this._dragActor.set_position( this._dragActor.set_position(
this._dragX + this._dragOffsetX, this._dragX + this._dragOffsetX,
this._dragY + this._dragOffsetY); this._dragY + this._dragOffsetY);

View File

@@ -195,7 +195,7 @@ function zoomOutActorAtPos(actor, x, y) {
} }
function animateIconPosition(icon, box, flags, nChangedIcons) { function animateIconPosition(icon, box, flags, nChangedIcons) {
if (!icon.has_allocation() || icon.allocation.equal(box)) { if (!icon.has_allocation() || icon.allocation.equal(box) || icon.opacity === 0) {
icon.allocate(box, flags); icon.allocate(box, flags);
return false; return false;
} }

View File

@@ -1102,6 +1102,9 @@ var KeyboardManager = class KeyBoardManager {
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA }); this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings.connect('changed', this._syncEnabled.bind(this)); this._a11yApplicationsSettings.connect('changed', this._syncEnabled.bind(this));
this._seat = Clutter.get_default_backend().get_default_seat();
this._seat.connect('notify::touch-mode', this._syncEnabled.bind(this));
this._lastDevice = null; this._lastDevice = null;
Meta.get_backend().connect('last-device-changed', (backend, device) => { Meta.get_backend().connect('last-device-changed', (backend, device) => {
if (device.get_device_name().indexOf('XTEST') < 0) { if (device.get_device_name().indexOf('XTEST') < 0) {
@@ -1122,7 +1125,9 @@ var KeyboardManager = class KeyBoardManager {
_syncEnabled() { _syncEnabled() {
let enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD); let enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD);
let enabled = enableKeyboard || this._lastDeviceIsTouchscreen(); let autoEnabled = this._seat.get_touch_mode() && this._lastDeviceIsTouchscreen();
let enabled = enableKeyboard || autoEnabled;
if (!enabled && !this._keyboard) if (!enabled && !this._keyboard)
return; return;

View File

@@ -430,8 +430,10 @@ var Magnifier = class Magnifier {
* lines making up the crosshairs. * lines making up the crosshairs.
*/ */
setCrosshairsLength(length) { setCrosshairsLength(length) {
if (this._crossHairs) if (this._crossHairs) {
this._crossHairs.setLength(length); let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._crossHairs.setLength(length / scaleFactor);
}
} }
/** /**
@@ -797,9 +799,14 @@ var ZoomRegion = class ZoomRegion {
return; return;
} }
[this._xFocus, this._yFocus] = [extents.x + (extents.width / 2), let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
extents.y + (extents.height / 2)]; let [xFocus, yFocus] = [(extents.x + (extents.width / 2)) * scaleFactor,
this._centerFromFocusPosition(); (extents.y + (extents.height / 2)) * scaleFactor];
if (this._xFocus !== xFocus || this._yFocus !== yFocus) {
[this._xFocus, this._yFocus] = [xFocus, yFocus];
this._centerFromFocusPosition();
}
} }
_updateCaret(caller, event) { _updateCaret(caller, event) {
@@ -814,8 +821,13 @@ var ZoomRegion = class ZoomRegion {
return; return;
} }
[this._xCaret, this._yCaret] = [extents.x, extents.y]; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this._centerFromCaretPosition(); let [xCaret, yCaret] = [extents.x * scaleFactor, extents.y * scaleFactor];
if (this._xCaret !== xCaret || this._yCaret !== yCaret) {
[this._xCaret, this._yCaret] = [xCaret, yCaret];
this._centerFromCaretPosition();
}
} }
/** /**
@@ -863,7 +875,8 @@ var ZoomRegion = class ZoomRegion {
setMagFactor(xMagFactor, yMagFactor) { setMagFactor(xMagFactor, yMagFactor) {
this._changeROI({ xMagFactor, this._changeROI({ xMagFactor,
yMagFactor, yMagFactor,
redoCursorTracking: this._followingCursor }); redoCursorTracking: this._followingCursor,
animate: true });
} }
/** /**
@@ -1121,6 +1134,13 @@ var ZoomRegion = class ZoomRegion {
return this._screenPosition; return this._screenPosition;
} }
_clearScrollContentsTimer() {
if (this._scrollContentsTimerId !== 0) {
GLib.source_remove(this._scrollContentsTimerId);
this._scrollContentsTimerId = 0;
}
}
/** /**
* scrollToMousePos: * scrollToMousePos:
* Set the region of interest based on the position of the system pointer. * Set the region of interest based on the position of the system pointer.
@@ -1134,28 +1154,29 @@ var ZoomRegion = class ZoomRegion {
else else
this._updateMousePosition(); this._updateMousePosition();
this._clearScrollContentsTimer();
this._scrollContentsTimerId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, POINTER_REST_TIME, () => {
this._followingCursor = false;
if (this._xDelayed !== null && this._yDelayed !== null) {
this._scrollContentsToDelayed(this._xDelayed, this._yDelayed);
this._xDelayed = null;
this._yDelayed = null;
}
return GLib.SOURCE_REMOVE;
});
// Determine whether the system mouse pointer is over this zoom region. // Determine whether the system mouse pointer is over this zoom region.
return this._isMouseOverRegion(); return this._isMouseOverRegion();
} }
_clearScrollContentsTimer() {
if (this._scrollContentsTimerId != 0) {
GLib.source_remove(this._scrollContentsTimerId);
this._scrollContentsTimerId = 0;
}
}
_scrollContentsToDelayed(x, y) { _scrollContentsToDelayed(x, y) {
if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) { if (this._followingCursor) {
this._xDelayed = x;
this._yDelayed = y;
} else {
this.scrollContentsTo(x, y); this.scrollContentsTo(x, y);
return;
} }
this._clearScrollContentsTimer();
this._scrollContentsTimerId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, POINTER_REST_TIME, () => {
this._scrollContentsToDelayed(x, y);
return GLib.SOURCE_REMOVE;
});
} }
/** /**
@@ -1166,11 +1187,16 @@ var ZoomRegion = class ZoomRegion {
* @param {number} y: The y-coord of the point to center on. * @param {number} y: The y-coord of the point to center on.
*/ */
scrollContentsTo(x, y) { scrollContentsTo(x, y) {
if (x < 0 || x > global.screen_width ||
y < 0 || y > global.screen_height)
return;
this._clearScrollContentsTimer(); this._clearScrollContentsTimer();
this._followingCursor = false; this._followingCursor = false;
this._changeROI({ xCenter: x, this._changeROI({ xCenter: x,
yCenter: y }); yCenter: y,
animate: true });
} }
/** /**
@@ -1322,7 +1348,7 @@ var ZoomRegion = class ZoomRegion {
this._crossHairsActor = null; this._crossHairsActor = null;
// Contrast and brightness effects. // Contrast and brightness effects.
this._magShaderEffects = new MagShaderEffects(this._uiGroupClone); this._magShaderEffects = new MagShaderEffects(mainGroup);
this._magShaderEffects.setColorSaturation(this._colorSaturation); this._magShaderEffects.setColorSaturation(this._colorSaturation);
this._magShaderEffects.setInvertLightness(this._invertLightness); this._magShaderEffects.setInvertLightness(this._invertLightness);
this._magShaderEffects.setBrightness(this._brightness); this._magShaderEffects.setBrightness(this._brightness);
@@ -1379,7 +1405,8 @@ var ZoomRegion = class ZoomRegion {
yMagFactor: this._yMagFactor, yMagFactor: this._yMagFactor,
xCenter: this._xCenter, xCenter: this._xCenter,
yCenter: this._yCenter, yCenter: this._yCenter,
redoCursorTracking: false }); redoCursorTracking: false,
animate: false });
if (params.xMagFactor <= 0) if (params.xMagFactor <= 0)
params.xMagFactor = this._xMagFactor; params.xMagFactor = this._xMagFactor;
@@ -1418,8 +1445,7 @@ var ZoomRegion = class ZoomRegion {
height: this._viewPortHeight }, true); height: this._viewPortHeight }, true);
} }
this._updateCloneGeometry(); this._updateCloneGeometry(params.animate);
this._updateMousePosition();
} }
_isMouseOverRegion() { _isMouseOverRegion() {
@@ -1557,38 +1583,64 @@ var ZoomRegion = class ZoomRegion {
this._magView.set_position(this._viewPortX, this._viewPortY); this._magView.set_position(this._viewPortX, this._viewPortY);
} }
_updateCloneGeometry() { _updateCloneGeometry(animate = false) {
if (!this.isActive()) if (!this.isActive())
return; return;
this._uiGroupClone.set_scale(this._xMagFactor, this._yMagFactor);
this._mouseActor.set_scale(this._xMagFactor, this._yMagFactor);
let [x, y] = this._screenToViewPort(0, 0); let [x, y] = this._screenToViewPort(0, 0);
this._uiGroupClone.set_position(Math.round(x), Math.round(y)); this._uiGroupClone.ease({
x: Math.round(x),
y: Math.round(y),
scale_x: this._xMagFactor,
scale_y: this._yMagFactor,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: animate ? 100 : 0,
});
this._updateMousePosition(); let [mouseX, mouseY] = this._getMousePosition();
this._mouseActor.ease({
x: mouseX,
y: mouseY,
scale_x: this._xMagFactor,
scale_y: this._yMagFactor,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: animate ? 100 : 0,
});
if (this._crossHairsActor) {
let [crossX, crossY] = this._getCrossHairsPosition();
this._crossHairsActor.ease({
x: crossX,
y: crossY,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: animate ? 100 : 0,
});
}
} }
_updateMousePosition() { _updateMousePosition() {
if (!this.isActive()) let [xMagMouse, yMagMouse] = this._getMousePosition();
return;
let [xMagMouse, yMagMouse] = this._screenToViewPort(this._magnifier.xMouse,
this._magnifier.yMouse);
xMagMouse = Math.round(xMagMouse);
yMagMouse = Math.round(yMagMouse);
this._mouseActor.set_position(xMagMouse, yMagMouse); this._mouseActor.set_position(xMagMouse, yMagMouse);
if (this._crossHairsActor) { if (this._crossHairsActor) {
let [groupWidth, groupHeight] = this._crossHairsActor.get_size(); let [crossX, crossY] = this._getCrossHairsPosition();
this._crossHairsActor.set_position(xMagMouse - groupWidth / 2, this._crossHairsActor.set_position(crossX, crossY);
yMagMouse - groupHeight / 2);
} }
} }
_getMousePosition() {
let [xMagMouse, yMagMouse] = this._screenToViewPort(
this._magnifier.xMouse, this._magnifier.yMouse);
return [Math.round(xMagMouse), Math.round(yMagMouse)];
}
_getCrossHairsPosition() {
let [xMagMouse, yMagMouse] = this._getMousePosition();
let [groupWidth, groupHeight] = this._crossHairsActor.get_size();
return [xMagMouse - groupWidth / 2, yMagMouse - groupHeight / 2];
}
_monitorsChanged() { _monitorsChanged() {
this._background.set_size(global.screen_width, global.screen_height); this._background.set_size(global.screen_width, global.screen_height);
this._updateScreenPosition(); this._updateScreenPosition();
@@ -1807,12 +1859,10 @@ class Crosshairs extends Clutter.Actor {
let clipWidth = this._clipSize[0]; let clipWidth = this._clipSize[0];
let clipHeight = this._clipSize[1]; let clipHeight = this._clipSize[1];
// Note that clip, if present, is not centred on the cross hair let left = groupWidth / 2 - clipWidth / 2 - leftLength - thickness / 2;
// intersection, but biased towards the top left. let right = groupWidth / 2 + clipWidth / 2 + thickness / 2;
let left = groupWidth / 2 - clipWidth * 0.25 - leftLength; let top = groupHeight / 2 - clipHeight / 2 - topLength - thickness / 2;
let right = groupWidth / 2 + clipWidth * 0.75; let bottom = groupHeight / 2 + clipHeight / 2 + thickness / 2;
let top = groupHeight / 2 - clipHeight * 0.25 - topLength - thickness / 2;
let bottom = groupHeight / 2 + clipHeight * 0.75 + thickness / 2;
this._horizLeftHair.set_position(left, (groupHeight - thickness) / 2); this._horizLeftHair.set_position(left, (groupHeight - thickness) / 2);
this._horizRightHair.set_position(right, (groupHeight - thickness) / 2); this._horizRightHair.set_position(right, (groupHeight - thickness) / 2);
this._vertTopHair.set_position((groupWidth - thickness) / 2, top); this._vertTopHair.set_position((groupWidth - thickness) / 2, top);

View File

@@ -1,13 +1,10 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { AccountsService, Clutter, Gio, GLib, const { AccountsService, Clutter, Gio,
GnomeDesktop, GObject, Graphene, Meta, Shell, St } = imports.gi; GLib, Graphene, Meta, Shell, St } = imports.gi;
const Cairo = imports.cairo;
const Signals = imports.signals; const Signals = imports.signals;
const Background = imports.ui.background;
const GnomeSession = imports.misc.gnomeSession; const GnomeSession = imports.misc.gnomeSession;
const Layout = imports.ui.layout;
const OVirt = imports.gdm.oVirt; const OVirt = imports.gdm.oVirt;
const LoginManager = imports.misc.loginManager; const LoginManager = imports.misc.loginManager;
const Lightbox = imports.ui.lightbox; const Lightbox = imports.ui.lightbox;
@@ -27,17 +24,6 @@ const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const DISABLE_LOCK_KEY = 'disable-lock-screen'; const DISABLE_LOCK_KEY = 'disable-lock-screen';
const LOCKED_STATE_STR = 'screenShield.locked'; const LOCKED_STATE_STR = 'screenShield.locked';
// fraction of screen height the arrow must reach before completing
// the slide up automatically
var ARROW_DRAG_THRESHOLD = 0.1;
// Parameters for the arrow animation
var N_ARROWS = 3;
var ARROW_ANIMATION_TIME = 600;
var ARROW_ANIMATION_PEAK_OPACITY = 0.4;
var ARROW_IDLE_TIME = 30000; // ms
var SUMMARY_ICON_SIZE = 48;
// ScreenShield animation time // ScreenShield animation time
// - STANDARD_FADE_TIME is used when the session goes idle // - STANDARD_FADE_TIME is used when the session goes idle
@@ -48,384 +34,6 @@ var STANDARD_FADE_TIME = 10000;
var MANUAL_FADE_TIME = 300; var MANUAL_FADE_TIME = 300;
var CURTAIN_SLIDE_TIME = 300; var CURTAIN_SLIDE_TIME = 300;
var Clock = GObject.registerClass(
class ScreenShieldClock extends St.BoxLayout {
_init() {
super._init({ style_class: 'screen-shield-clock', vertical: true });
this._time = new St.Label({
style_class: 'screen-shield-clock-time',
x_align: Clutter.ActorAlign.CENTER,
});
this._date = new St.Label({
style_class: 'screen-shield-clock-date',
x_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this._time);
this.add_child(this._date);
this._wallClock = new GnomeDesktop.WallClock({ time_only: true });
this._wallClock.connect('notify::clock', this._updateClock.bind(this));
this._updateClock();
this.connect('destroy', this._onDestroy.bind(this));
}
_updateClock() {
this._time.text = this._wallClock.clock;
let date = new Date();
/* Translators: This is a time format for a date in
long format */
let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
this._date.text = date.toLocaleFormat(dateFormat);
}
_onDestroy() {
this._wallClock.run_dispose();
}
});
var NotificationsBox = GObject.registerClass({
Signals: { 'wake-up-screen': {} },
}, class NotificationsBox extends St.BoxLayout {
_init() {
super._init({
vertical: true,
name: 'screenShieldNotifications',
style_class: 'screen-shield-notifications-container',
});
this._scrollView = new St.ScrollView({ hscrollbar_policy: St.PolicyType.NEVER });
this._notificationBox = new St.BoxLayout({ vertical: true,
style_class: 'screen-shield-notifications-container' });
this._scrollView.add_actor(this._notificationBox);
this.add_child(this._scrollView);
this._sources = new Map();
Main.messageTray.getSources().forEach(source => {
this._sourceAdded(Main.messageTray, source, true);
});
this._updateVisibility();
this._sourceAddedId = Main.messageTray.connect('source-added', this._sourceAdded.bind(this));
this.connect('destroy', this._onDestroy.bind(this));
}
_onDestroy() {
if (this._sourceAddedId) {
Main.messageTray.disconnect(this._sourceAddedId);
this._sourceAddedId = 0;
}
let items = this._sources.entries();
for (let [source, obj] of items)
this._removeSource(source, obj);
}
_updateVisibility() {
this._notificationBox.visible =
this._notificationBox.get_children().some(a => a.visible);
this.visible = this._notificationBox.visible;
}
_makeNotificationCountText(count, isChat) {
if (isChat)
return ngettext("%d new message", "%d new messages", count).format(count);
else
return ngettext("%d new notification", "%d new notifications", count).format(count);
}
_makeNotificationSource(source, box) {
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
box.add_child(sourceActor);
let textBox = new St.BoxLayout({ vertical: true });
box.add_child(textBox);
let title = new St.Label({ text: source.title,
style_class: 'screen-shield-notification-label' });
textBox.add(title);
let count = source.unseenCount;
let countLabel = new St.Label({ text: this._makeNotificationCountText(count, source.isChat),
style_class: 'screen-shield-notification-count-text' });
textBox.add(countLabel);
box.visible = count != 0;
return [title, countLabel];
}
_makeNotificationDetailedSource(source, box) {
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
let sourceBin = new St.Bin({ child: sourceActor });
box.add(sourceBin);
let textBox = new St.BoxLayout({ vertical: true });
box.add_child(textBox);
let title = new St.Label({ text: source.title,
style_class: 'screen-shield-notification-label' });
textBox.add(title);
let visible = false;
for (let i = 0; i < source.notifications.length; i++) {
let n = source.notifications[i];
if (n.acknowledged)
continue;
let body = '';
if (n.bannerBodyText) {
body = n.bannerBodyMarkup
? n.bannerBodyText
: GLib.markup_escape_text(n.bannerBodyText, -1);
}
let label = new St.Label({ style_class: 'screen-shield-notification-count-text' });
label.clutter_text.set_markup(`<b>${n.title}</b> ${body}`);
textBox.add(label);
visible = true;
}
box.visible = visible;
return [title, null];
}
_shouldShowDetails(source) {
return source.policy.detailsInLockScreen ||
source.narrowestPrivacyScope == MessageTray.PrivacyScope.SYSTEM;
}
_showSource(source, obj, box) {
if (obj.detailed)
[obj.titleLabel, obj.countLabel] = this._makeNotificationDetailedSource(source, box);
else
[obj.titleLabel, obj.countLabel] = this._makeNotificationSource(source, box);
box.visible = obj.visible && (source.unseenCount > 0);
}
_sourceAdded(tray, source, initial) {
let obj = {
visible: source.policy.showInLockScreen,
detailed: this._shouldShowDetails(source),
sourceDestroyId: 0,
sourceCountChangedId: 0,
sourceTitleChangedId: 0,
sourceUpdatedId: 0,
sourceBox: null,
titleLabel: null,
countLabel: null,
};
obj.sourceBox = new St.BoxLayout({ style_class: 'screen-shield-notification-source',
x_expand: true });
this._showSource(source, obj, obj.sourceBox);
this._notificationBox.add_child(obj.sourceBox);
obj.sourceCountChangedId = source.connect('notify::count', () => {
this._countChanged(source, obj);
});
obj.sourceTitleChangedId = source.connect('notify::title', () => {
this._titleChanged(source, obj);
});
obj.policyChangedId = source.policy.connect('notify', (policy, pspec) => {
if (pspec.name == 'show-in-lock-screen')
this._visibleChanged(source, obj);
else
this._detailedChanged(source, obj);
});
obj.sourceDestroyId = source.connect('destroy', () => {
this._onSourceDestroy(source, obj);
});
this._sources.set(source, obj);
if (!initial) {
// block scrollbars while animating, if they're not needed now
let boxHeight = this._notificationBox.height;
if (this._scrollView.height >= boxHeight)
this._scrollView.vscrollbar_policy = St.PolicyType.NEVER;
let widget = obj.sourceBox;
let [, natHeight] = widget.get_preferred_height(-1);
widget.height = 0;
widget.ease({
height: natHeight,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: 250,
onComplete: () => {
this._scrollView.vscrollbar_policy = St.PolicyType.AUTOMATIC;
widget.set_height(-1);
},
});
this._updateVisibility();
if (obj.sourceBox.visible)
this.emit('wake-up-screen');
}
}
_titleChanged(source, obj) {
obj.titleLabel.text = source.title;
}
_countChanged(source, obj) {
// A change in the number of notifications may change whether we show
// details.
let newDetailed = this._shouldShowDetails(source);
let oldDetailed = obj.detailed;
obj.detailed = newDetailed;
if (obj.detailed || oldDetailed != newDetailed) {
// A new notification was pushed, or a previous notification was destroyed.
// Give up, and build the list again.
obj.sourceBox.destroy_all_children();
obj.titleLabel = obj.countLabel = null;
this._showSource(source, obj, obj.sourceBox);
} else {
let count = source.unseenCount;
obj.countLabel.text = this._makeNotificationCountText(count, source.isChat);
}
obj.sourceBox.visible = obj.visible && (source.unseenCount > 0);
this._updateVisibility();
if (obj.sourceBox.visible)
this.emit('wake-up-screen');
}
_visibleChanged(source, obj) {
if (obj.visible == source.policy.showInLockScreen)
return;
obj.visible = source.policy.showInLockScreen;
obj.sourceBox.visible = obj.visible && source.unseenCount > 0;
this._updateVisibility();
if (obj.sourceBox.visible)
this.emit('wake-up-screen');
}
_detailedChanged(source, obj) {
let newDetailed = this._shouldShowDetails(source);
if (obj.detailed == newDetailed)
return;
obj.detailed = newDetailed;
obj.sourceBox.destroy_all_children();
obj.titleLabel = obj.countLabel = null;
this._showSource(source, obj, obj.sourceBox);
}
_onSourceDestroy(source, obj) {
this._removeSource(source, obj);
this._updateVisibility();
}
_removeSource(source, obj) {
obj.sourceBox.destroy();
obj.sourceBox = obj.titleLabel = obj.countLabel = null;
source.disconnect(obj.sourceDestroyId);
source.disconnect(obj.sourceCountChangedId);
source.disconnect(obj.sourceTitleChangedId);
source.policy.disconnect(obj.policyChangedId);
this._sources.delete(source);
}
});
var Arrow = GObject.registerClass(
class ScreenShieldArrow extends St.Bin {
_init(params) {
super._init(params);
this._drawingArea = new St.DrawingArea({
x_expand: true,
y_expand: true,
});
this._drawingArea.connect('repaint', this._drawArrow.bind(this));
this.child = this._drawingArea;
this._shadowHelper = null;
this._shadowWidth = this._shadowHeight = 0;
}
_drawArrow(arrow) {
let cr = arrow.get_context();
let [w, h] = arrow.get_surface_size();
let node = this.get_theme_node();
let thickness = node.get_length('-arrow-thickness');
Clutter.cairo_set_source_color(cr, node.get_foreground_color());
cr.setLineCap(Cairo.LineCap.ROUND);
cr.setLineWidth(thickness);
cr.moveTo(thickness / 2, h - thickness / 2);
cr.lineTo(w / 2, thickness);
cr.lineTo(w - thickness / 2, h - thickness / 2);
cr.stroke();
cr.$dispose();
}
vfunc_get_paint_volume(volume) {
if (!super.vfunc_get_paint_volume(volume))
return false;
if (!this._shadow)
return true;
let shadowBox = new Clutter.ActorBox();
this._shadow.get_box(this._drawingArea.get_allocation_box(), shadowBox);
volume.set_width(Math.max(shadowBox.x2 - shadowBox.x1, volume.get_width()));
volume.set_height(Math.max(shadowBox.y2 - shadowBox.y1, volume.get_height()));
return true;
}
vfunc_style_changed() {
let node = this.get_theme_node();
this._shadow = node.get_shadow('-arrow-shadow');
if (this._shadow)
this._shadowHelper = St.ShadowHelper.new(this._shadow);
else
this._shadowHelper = null;
super.vfunc_style_changed();
}
vfunc_paint(paintContext) {
if (this._shadowHelper) {
this._shadowHelper.update(this._drawingArea);
let allocation = this._drawingArea.get_allocation_box();
let paintOpacity = this._drawingArea.get_paint_opacity();
let framebuffer = paintContext.get_framebuffer();
this._shadowHelper.paint(framebuffer, allocation, paintOpacity);
}
this._drawingArea.paint(paintContext);
}
});
function clamp(value, min, max) {
return Math.max(min, Math.min(max, value));
}
/** /**
* If you are setting org.gnome.desktop.session.idle-delay directly in dconf, * If you are setting org.gnome.desktop.session.idle-delay directly in dconf,
* rather than through System Settings, you also need to set * rather than through System Settings, you also need to set
@@ -447,59 +55,18 @@ var ScreenShield = class {
name: 'lockScreenGroup', name: 'lockScreenGroup',
visible: false, visible: false,
}); });
this._lockScreenGroup.connect('key-press-event',
this._onLockScreenKeyPress.bind(this));
this._lockScreenGroup.connect('scroll-event',
this._onLockScreenScroll.bind(this));
Main.ctrlAltTabManager.addGroup(this._lockScreenGroup, _("Lock"), 'changes-prevent-symbolic');
this._lockScreenContents = new St.Widget({ layout_manager: new Clutter.BinLayout(), this._lockDialogGroup = new St.Widget({
name: 'lockScreenContents' }); x_expand: true,
this._lockScreenContents.add_constraint(new Layout.MonitorConstraint({ primary: true })); y_expand: true,
reactive: true,
can_focus: true,
pivot_point: new Graphene.Point({ x: 0.5, y: 0.5 }),
name: 'lockDialogGroup',
});
this._lockScreenGroup.add_actor(this._lockScreenContents);
this._backgroundGroup = new Clutter.Actor();
this._lockScreenGroup.add_actor(this._backgroundGroup);
this._lockScreenGroup.set_child_below_sibling(this._backgroundGroup, null);
this._bgManagers = [];
this._updateBackgrounds();
Main.layoutManager.connect('monitors-changed', this._updateBackgrounds.bind(this));
this._arrowAnimationId = 0;
this._arrowWatchId = 0;
this._arrowActiveWatchId = 0;
this._arrowContainer = new St.BoxLayout({ style_class: 'screen-shield-arrows',
vertical: true,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.END,
// HACK: without these, ClutterBinLayout
// ignores alignment properties on the actor
x_expand: true,
y_expand: true });
for (let i = 0; i < N_ARROWS; i++) {
let arrow = new Arrow({ opacity: 0 });
this._arrowContainer.add_actor(arrow);
}
this._lockScreenContents.add_actor(this._arrowContainer);
this._dragAction = new Clutter.GestureAction();
this._dragAction.connect('gesture-begin', this._onDragBegin.bind(this));
this._dragAction.connect('gesture-progress', this._onDragMotion.bind(this));
this._dragAction.connect('gesture-end', this._onDragEnd.bind(this));
this._lockScreenGroup.add_action(this._dragAction);
this._lockDialogGroup = new St.Widget({ x_expand: true,
y_expand: true,
reactive: true,
pivot_point: new Graphene.Point({ x: 0.5, y: 0.5 }),
name: 'lockDialogGroup' });
this.actor.add_actor(this._lockDialogGroup);
this.actor.add_actor(this._lockScreenGroup); this.actor.add_actor(this._lockScreenGroup);
this.actor.add_actor(this._lockDialogGroup);
this._presence = new GnomeSession.Presence((proxy, error) => { this._presence = new GnomeSession.Presence((proxy, error) => {
if (error) { if (error) {
@@ -519,14 +86,14 @@ var ScreenShield = class {
this._smartcardManager.connect('smartcard-inserted', this._smartcardManager.connect('smartcard-inserted',
(manager, token) => { (manager, token) => {
if (this._isLocked && token.UsedToLogin) if (this._isLocked && token.UsedToLogin)
this._liftShield(true, 0); this._activateDialog();
}); });
this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager(); this._oVirtCredentialsManager = OVirt.getOVirtCredentialsManager();
this._oVirtCredentialsManager.connect('user-authenticated', this._oVirtCredentialsManager.connect('user-authenticated',
() => { () => {
if (this._isLocked) if (this._isLocked)
this._liftShield(true, 0); this._activateDialog();
}); });
this._loginManager = LoginManager.getLoginManager(); this._loginManager = LoginManager.getLoginManager();
@@ -551,7 +118,6 @@ var ScreenShield = class {
this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this)); this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this));
this._isModal = false; this._isModal = false;
this._hasLockScreen = false;
this._isGreeter = false; this._isGreeter = false;
this._isActive = false; this._isActive = false;
this._isLocked = false; this._isLocked = false;
@@ -591,39 +157,10 @@ var ScreenShield = class {
this._syncInhibitor(); this._syncInhibitor();
} }
_createBackground(monitorIndex) { _activateDialog() {
let monitor = Main.layoutManager.monitors[monitorIndex];
let widget = new St.Widget({ style_class: 'screen-shield-background',
x: monitor.x,
y: monitor.y,
width: monitor.width,
height: monitor.height });
let bgManager = new Background.BackgroundManager({ container: widget,
monitorIndex,
controlPosition: false,
settingsSchema: SCREENSAVER_SCHEMA });
this._bgManagers.push(bgManager);
this._backgroundGroup.add_child(widget);
}
_updateBackgrounds() {
for (let i = 0; i < this._bgManagers.length; i++)
this._bgManagers[i].destroy();
this._bgManagers = [];
this._backgroundGroup.destroy_all_children();
for (let i = 0; i < Main.layoutManager.monitors.length; i++)
this._createBackground(i);
}
_liftShield(onPrimary, velocity) {
if (this._isLocked) { if (this._isLocked) {
if (this._ensureUnlockDialog(onPrimary, true /* allowCancel */)) this._ensureUnlockDialog(true /* allowCancel */);
this._hideLockScreen(true /* animate */, velocity); this._dialog.activate();
} else { } else {
this.deactivate(true /* animate */); this.deactivate(true /* animate */);
} }
@@ -638,9 +175,7 @@ var ScreenShield = class {
// LoginDialog.cancel() will grab the key focus // LoginDialog.cancel() will grab the key focus
// on its own, so ensure it stays on lock screen // on its own, so ensure it stays on lock screen
// instead // instead
this._lockScreenGroup.grab_key_focus(); this._dialog.grab_key_focus();
} else {
this._dialog = null;
} }
} }
@@ -659,55 +194,6 @@ var ScreenShield = class {
return this._isModal; return this._isModal;
} }
_onLockScreenKeyPress(actor, event) {
let symbol = event.get_key_symbol();
let unichar = event.get_key_unicode();
// Do nothing if the lock screen is not fully shown.
// This avoids reusing the previous (and stale) unlock
// dialog if esc is pressed while the curtain is going
// down after cancel.
if (this._lockScreenState != MessageTray.State.SHOWN)
return Clutter.EVENT_PROPAGATE;
let isEnter = symbol == Clutter.KEY_Return ||
symbol == Clutter.KEY_KP_Enter ||
symbol == Clutter.KEY_ISO_Enter;
let isEscape = symbol == Clutter.KEY_Escape;
let isLiftChar = GLib.unichar_isprint(unichar) &&
(this._isLocked || !GLib.unichar_isgraph(unichar));
if (!isEnter && !isEscape && !isLiftChar)
return Clutter.EVENT_PROPAGATE;
if (this._isLocked &&
this._ensureUnlockDialog(true, true) &&
GLib.unichar_isgraph(unichar))
this._dialog.addCharacter(unichar);
this._liftShield(true, 0);
return Clutter.EVENT_STOP;
}
_onLockScreenScroll(actor, event) {
if (this._lockScreenState != MessageTray.State.SHOWN)
return Clutter.EVENT_PROPAGATE;
let delta = 0;
if (event.get_scroll_direction() == Clutter.ScrollDirection.SMOOTH)
delta = Math.abs(event.get_scroll_delta()[0]);
else
delta = 5;
this._lockScreenScrollCounter += delta;
// 7 standard scrolls to lift up
if (this._lockScreenScrollCounter > 35)
this._liftShield(true, 0);
return Clutter.EVENT_STOP;
}
_syncInhibitor() { _syncInhibitor() {
let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY); let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY);
let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY); let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);
@@ -736,78 +222,6 @@ var ScreenShield = class {
} }
} }
_animateArrows() {
let arrows = this._arrowContainer.get_children();
let unitaryDelay = ARROW_ANIMATION_TIME / (arrows.length + 1);
let maxOpacity = 255 * ARROW_ANIMATION_PEAK_OPACITY;
for (let i = 0; i < arrows.length; i++) {
arrows[i].opacity = 0;
arrows[i].ease({
opacity: maxOpacity,
delay: unitaryDelay * (N_ARROWS - (i + 1)),
duration: ARROW_ANIMATION_TIME / 2,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
arrows[i].ease({
opacity: 0,
duration: ARROW_ANIMATION_TIME / 2,
mode: Clutter.AnimationMode.EASE_IN_QUAD,
});
},
});
}
return GLib.SOURCE_CONTINUE;
}
_onDragBegin() {
this._lockScreenGroup.remove_all_transitions();
this._lockScreenState = MessageTray.State.HIDING;
if (this._isLocked)
this._ensureUnlockDialog(false, false);
return true;
}
_onDragMotion() {
let [, origY] = this._dragAction.get_press_coords(0);
let [, currentY] = this._dragAction.get_motion_coords(0);
let newY = currentY - origY;
newY = clamp(newY, -global.stage.height, 0);
this._lockScreenGroup.translation_y = newY;
return true;
}
_onDragEnd(_action, _actor, _eventX, _eventY, _modifiers) {
if (this._lockScreenState != MessageTray.State.HIDING)
return;
if (this._lockScreenGroup.translation_y < -(ARROW_DRAG_THRESHOLD * global.stage.height)) {
// Complete motion automatically
let [velocity_, velocityX_, velocityY] = this._dragAction.get_velocity(0);
this._liftShield(true, -velocityY);
} else {
// restore the lock screen to its original place
// try to use the same speed as the normal animation
let h = global.stage.height;
let duration = MANUAL_FADE_TIME * -this._lockScreenGroup.translation_y / h;
this._lockScreenGroup.remove_all_transitions();
this._lockScreenGroup.ease({
translation_y: 0,
duration,
mode: Clutter.AnimationMode.EASE_IN_QUAD,
onComplete: () => {
this._lockScreenState = MessageTray.State.SHOWN;
},
});
this._maybeCancelDialog();
}
}
_onStatusChanged(status) { _onStatusChanged(status) {
if (status != GnomeSession.PresenceStatus.IDLE) if (status != GnomeSession.PresenceStatus.IDLE)
return; return;
@@ -913,14 +327,10 @@ var ScreenShield = class {
this.actor.show(); this.actor.show();
this._isGreeter = Main.sessionMode.isGreeter; this._isGreeter = Main.sessionMode.isGreeter;
this._isLocked = true; this._isLocked = true;
if (this._ensureUnlockDialog(true, true)) this._ensureUnlockDialog(true);
this._hideLockScreen(false, 0);
} }
_hideLockScreenComplete() { _hideLockScreenComplete() {
if (Main.sessionMode.currentMode == 'lock-screen')
Main.sessionMode.popMode('lock-screen');
this._lockScreenState = MessageTray.State.HIDDEN; this._lockScreenState = MessageTray.State.HIDDEN;
this._lockScreenGroup.hide(); this._lockScreenGroup.hide();
@@ -930,13 +340,13 @@ var ScreenShield = class {
} }
} }
_hideLockScreen(animate, velocity) { _hideLockScreen(animate) {
if (this._lockScreenState == MessageTray.State.HIDDEN) if (this._lockScreenState == MessageTray.State.HIDDEN)
return; return;
this._lockScreenState = MessageTray.State.HIDING; this._lockScreenState = MessageTray.State.HIDING;
this._lockScreenGroup.remove_all_transitions(); this._lockDialogGroup.remove_all_transitions();
if (animate) { if (animate) {
// Tween the lock screen out of screen // Tween the lock screen out of screen
@@ -944,16 +354,14 @@ var ScreenShield = class {
// use the same speed regardless of original position // use the same speed regardless of original position
// if velocity is specified, it's in pixels per milliseconds // if velocity is specified, it's in pixels per milliseconds
let h = global.stage.height; let h = global.stage.height;
let delta = h + this._lockScreenGroup.translation_y; let delta = h + this._lockDialogGroup.translation_y;
let minVelocity = global.stage.height / CURTAIN_SLIDE_TIME; let velocity = global.stage.height / CURTAIN_SLIDE_TIME;
velocity = Math.max(minVelocity, velocity);
let duration = delta / velocity; let duration = delta / velocity;
this._lockScreenGroup.ease({ this._lockDialogGroup.ease({
translation_y: -h, translation_y: -h,
duration, duration,
mode: Clutter.AnimationMode.EASE_IN_QUAD, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => this._hideLockScreenComplete(), onComplete: () => this._hideLockScreenComplete(),
}); });
} else { } else {
@@ -963,7 +371,7 @@ var ScreenShield = class {
this._cursorTracker.set_pointer_visible(true); this._cursorTracker.set_pointer_visible(true);
} }
_ensureUnlockDialog(onPrimary, allowCancel) { _ensureUnlockDialog(allowCancel) {
if (!this._dialog) { if (!this._dialog) {
let constructor = Main.sessionMode.unlockDialog; let constructor = Main.sessionMode.unlockDialog;
if (!constructor) { if (!constructor) {
@@ -975,7 +383,7 @@ var ScreenShield = class {
this._dialog = new constructor(this._lockDialogGroup); this._dialog = new constructor(this._lockDialogGroup);
let time = global.get_current_time(); let time = global.get_current_time();
if (!this._dialog.open(time, onPrimary)) { if (!this._dialog.open(time)) {
// This is kind of an impossible error: we're already modal // This is kind of an impossible error: we're already modal
// by the time we reach this... // by the time we reach this...
log('Could not open login dialog: failed to acquire grab'); log('Could not open login dialog: failed to acquire grab');
@@ -984,9 +392,12 @@ var ScreenShield = class {
} }
this._dialog.connect('failed', this._onUnlockFailed.bind(this)); this._dialog.connect('failed', this._onUnlockFailed.bind(this));
this._wakeUpScreenId = this._dialog.connect(
'wake-up-screen', this._wakeUpScreen.bind(this));
} }
this._dialog.allowCancel = allowCancel; this._dialog.allowCancel = allowCancel;
this._dialog.grab_key_focus();
return true; return true;
} }
@@ -1003,21 +414,17 @@ var ScreenShield = class {
if (this._lockScreenState != MessageTray.State.HIDDEN) if (this._lockScreenState != MessageTray.State.HIDDEN)
return; return;
this._ensureLockScreen();
this._lockDialogGroup.scale_x = 1;
this._lockDialogGroup.scale_y = 1;
this._lockScreenGroup.show(); this._lockScreenGroup.show();
this._lockScreenState = MessageTray.State.SHOWING; this._lockScreenState = MessageTray.State.SHOWING;
let fadeToBlack = params.fadeToBlack; let fadeToBlack = params.fadeToBlack;
if (params.animateLockScreen) { if (params.animateLockScreen) {
this._lockScreenGroup.translation_y = -global.screen_height; this._lockDialogGroup.translation_y = -global.screen_height;
this._lockScreenGroup.remove_all_transitions(); this._lockDialogGroup.remove_all_transitions();
this._lockScreenGroup.ease({ this._lockDialogGroup.ease({
translation_y: 0, translation_y: 0,
duration: MANUAL_FADE_TIME, duration: Overview.ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => { onComplete: () => {
this._lockScreenShown({ fadeToBlack, animateFade: true }); this._lockScreenShown({ fadeToBlack, animateFade: true });
@@ -1028,69 +435,10 @@ var ScreenShield = class {
this._lockScreenShown({ fadeToBlack, animateFade: false }); this._lockScreenShown({ fadeToBlack, animateFade: false });
} }
this._lockScreenGroup.grab_key_focus(); this._dialog.grab_key_focus();
if (Main.sessionMode.currentMode != 'lock-screen')
Main.sessionMode.pushMode('lock-screen');
}
_startArrowAnimation() {
this._arrowActiveWatchId = 0;
if (!this._arrowAnimationId) {
this._arrowAnimationId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 6000, this._animateArrows.bind(this));
GLib.Source.set_name_by_id(this._arrowAnimationId, '[gnome-shell] this._animateArrows');
this._animateArrows();
}
if (!this._arrowWatchId) {
this._arrowWatchId = this.idleMonitor.add_idle_watch(ARROW_IDLE_TIME,
this._pauseArrowAnimation.bind(this));
}
}
_pauseArrowAnimation() {
if (this._arrowAnimationId) {
GLib.source_remove(this._arrowAnimationId);
this._arrowAnimationId = 0;
}
if (!this._arrowActiveWatchId)
this._arrowActiveWatchId = this.idleMonitor.add_user_active_watch(this._startArrowAnimation.bind(this));
}
_stopArrowAnimation() {
if (this._arrowAnimationId) {
GLib.source_remove(this._arrowAnimationId);
this._arrowAnimationId = 0;
}
if (this._arrowActiveWatchId) {
this.idleMonitor.remove_watch(this._arrowActiveWatchId);
this._arrowActiveWatchId = 0;
}
if (this._arrowWatchId) {
this.idleMonitor.remove_watch(this._arrowWatchId);
this._arrowWatchId = 0;
}
}
_checkArrowAnimation() {
let idleTime = this.idleMonitor.get_idletime();
if (idleTime < ARROW_IDLE_TIME)
this._startArrowAnimation();
else
this._pauseArrowAnimation();
} }
_lockScreenShown(params) { _lockScreenShown(params) {
if (this._dialog && !this._isGreeter) {
this._dialog.destroy();
this._dialog = null;
}
this._checkArrowAnimation();
let motionId = global.stage.connect('captured-event', (stage, event) => { let motionId = global.stage.connect('captured-event', (stage, event) => {
if (event.type() == Clutter.EventType.MOTION) { if (event.type() == Clutter.EventType.MOTION) {
this._cursorTracker.set_pointer_visible(true); this._cursorTracker.set_pointer_visible(true);
@@ -1102,7 +450,6 @@ var ScreenShield = class {
this._cursorTracker.set_pointer_visible(false); this._cursorTracker.set_pointer_visible(false);
this._lockScreenState = MessageTray.State.SHOWN; this._lockScreenState = MessageTray.State.SHOWN;
this._lockScreenScrollCounter = 0;
if (params.fadeToBlack && params.animateFade) { if (params.fadeToBlack && params.animateFade) {
// Take a beat // Take a beat
@@ -1125,52 +472,11 @@ var ScreenShield = class {
this.emit('lock-screen-shown'); this.emit('lock-screen-shown');
} }
// Some of the actors in the lock screen are heavy in
// resources, so we only create them when needed
_ensureLockScreen() {
if (this._hasLockScreen)
return;
this._lockScreenContentsBox = new St.BoxLayout({ x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_expand: true,
vertical: true,
style_class: 'screen-shield-contents-box' });
this._clock = new Clock();
this._lockScreenContentsBox.add_child(this._clock);
this._lockScreenContents.add_actor(this._lockScreenContentsBox);
this._notificationsBox = new NotificationsBox();
this._wakeUpScreenId = this._notificationsBox.connect('wake-up-screen', this._wakeUpScreen.bind(this));
this._lockScreenContentsBox.add_child(this._notificationsBox);
this._hasLockScreen = true;
}
_wakeUpScreen() { _wakeUpScreen() {
this._onUserBecameActive(); this._onUserBecameActive();
this.emit('wake-up-screen'); this.emit('wake-up-screen');
} }
_clearLockScreen() {
this._clock.destroy();
this._clock = null;
if (this._notificationsBox) {
this._notificationsBox.disconnect(this._wakeUpScreenId);
this._notificationsBox.destroy();
this._notificationsBox = null;
}
this._stopArrowAnimation();
this._lockScreenContentsBox.destroy();
this._hasLockScreen = false;
}
get locked() { get locked() {
return this._isLocked; return this._isLocked;
} }
@@ -1191,13 +497,8 @@ var ScreenShield = class {
} }
_continueDeactivate(animate) { _continueDeactivate(animate) {
this._hideLockScreen(animate, 0); this._hideLockScreen(animate);
if (this._hasLockScreen)
this._clearLockScreen();
if (Main.sessionMode.currentMode == 'lock-screen')
Main.sessionMode.popMode('lock-screen');
if (Main.sessionMode.currentMode == 'unlock-dialog') if (Main.sessionMode.currentMode == 'unlock-dialog')
Main.sessionMode.popMode('unlock-dialog'); Main.sessionMode.popMode('unlock-dialog');
@@ -1223,9 +524,8 @@ var ScreenShield = class {
} }
this._lockDialogGroup.ease({ this._lockDialogGroup.ease({
scale_x: 0, translation_y: -global.screen_height,
scale_y: 0, duration: Overview.ANIMATION_TIME,
duration: animate ? Overview.ANIMATION_TIME : 0,
mode: Clutter.AnimationMode.EASE_OUT_QUAD, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => this._completeDeactivate(), onComplete: () => this._completeDeactivate(),
}); });
@@ -1262,10 +562,11 @@ var ScreenShield = class {
if (this._activationTime == 0) if (this._activationTime == 0)
this._activationTime = GLib.get_monotonic_time(); this._activationTime = GLib.get_monotonic_time();
this._ensureUnlockDialog(true);
this.actor.show(); this.actor.show();
if (Main.sessionMode.currentMode != 'unlock-dialog' && if (Main.sessionMode.currentMode !== 'unlock-dialog') {
Main.sessionMode.currentMode != 'lock-screen') {
this._isGreeter = Main.sessionMode.isGreeter; this._isGreeter = Main.sessionMode.isGreeter;
if (!this._isGreeter) if (!this._isGreeter)
Main.sessionMode.pushMode('unlock-dialog'); Main.sessionMode.pushMode('unlock-dialog');

View File

@@ -53,19 +53,6 @@ const _modes = {
panelStyle: 'login-screen', panelStyle: 'login-screen',
}, },
'lock-screen': {
isLocked: true,
isGreeter: undefined,
unlockDialog: undefined,
components: ['polkitAgent', 'telepathyClient'],
panel: {
left: [],
center: [],
right: ['aggregateMenu'],
},
panelStyle: 'lock-screen',
},
'unlock-dialog': { 'unlock-dialog': {
isLocked: true, isLocked: true,
unlockDialog: undefined, unlockDialog: undefined,

View File

@@ -270,6 +270,8 @@ const ScrollGesture = GObject.registerClass({
return; return;
this._enabled = enabled; this._enabled = enabled;
this._began = false;
this.notify('enabled'); this.notify('enabled');
} }

View File

@@ -1,41 +1,539 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported UnlockDialog */ /* exported UnlockDialog */
const { AccountsService, Atk, Clutter, const { AccountsService, Atk, Clutter, Gdm, Gio,
Gdm, Gio, GLib, GObject, Meta, Shell, St } = imports.gi; GnomeDesktop, GLib, GObject, Meta, Shell, St } = imports.gi;
const Background = imports.ui.background;
const Layout = imports.ui.layout; const Layout = imports.ui.layout;
const Main = imports.ui.main; const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const AuthPrompt = imports.gdm.authPrompt; const AuthPrompt = imports.gdm.authPrompt;
// The timeout before going back automatically to the lock screen (in seconds) // The timeout before going back automatically to the lock screen (in seconds)
const IDLE_TIMEOUT = 2 * 60; const IDLE_TIMEOUT = 2 * 60;
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
const CROSSFADE_TIME = 300;
const BLUR_BRIGHTNESS = 0.55;
const BLUR_RADIUS = 200;
const SUMMARY_ICON_SIZE = 32;
var NotificationsBox = GObject.registerClass({
Signals: { 'wake-up-screen': {} },
}, class NotificationsBox extends St.BoxLayout {
_init() {
super._init({
vertical: true,
name: 'unlockDialogNotifications',
style_class: 'unlock-dialog-notifications-container',
});
this._scrollView = new St.ScrollView({ hscrollbar_policy: St.PolicyType.NEVER });
this._notificationBox = new St.BoxLayout({
vertical: true,
style_class: 'unlock-dialog-notifications-container',
});
this._scrollView.add_actor(this._notificationBox);
this.add_child(this._scrollView);
this._sources = new Map();
Main.messageTray.getSources().forEach(source => {
this._sourceAdded(Main.messageTray, source, true);
});
this._updateVisibility();
this._sourceAddedId = Main.messageTray.connect('source-added', this._sourceAdded.bind(this));
this.connect('destroy', this._onDestroy.bind(this));
}
_onDestroy() {
if (this._sourceAddedId) {
Main.messageTray.disconnect(this._sourceAddedId);
this._sourceAddedId = 0;
}
let items = this._sources.entries();
for (let [source, obj] of items)
this._removeSource(source, obj);
}
_updateVisibility() {
this._notificationBox.visible =
this._notificationBox.get_children().some(a => a.visible);
this.visible = this._notificationBox.visible;
}
_makeNotificationSource(source, box) {
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
box.add_child(sourceActor);
let textBox = new St.BoxLayout({
x_expand: true,
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
box.add_child(textBox);
let title = new St.Label({
text: source.title,
style_class: 'unlock-dialog-notification-label',
x_expand: true,
x_align: Clutter.ActorAlign.START,
});
textBox.add(title);
let count = source.unseenCount;
let countLabel = new St.Label({
text: `${count}`,
style_class: 'unlock-dialog-notification-count-text',
});
textBox.add(countLabel);
box.visible = count !== 0;
return [title, countLabel];
}
_makeNotificationDetailedSource(source, box) {
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
let sourceBin = new St.Bin({ child: sourceActor });
box.add(sourceBin);
let textBox = new St.BoxLayout({ vertical: true });
box.add_child(textBox);
let title = new St.Label({
text: source.title,
style_class: 'unlock-dialog-notification-label',
});
textBox.add(title);
let visible = false;
for (let i = 0; i < source.notifications.length; i++) {
let n = source.notifications[i];
if (n.acknowledged)
continue;
let body = '';
if (n.bannerBodyText) {
body = n.bannerBodyMarkup
? n.bannerBodyText
: GLib.markup_escape_text(n.bannerBodyText, -1);
}
let label = new St.Label({ style_class: 'unlock-dialog-notification-count-text' });
label.clutter_text.set_markup(`<b>${n.title}</b> ${body}`);
textBox.add(label);
visible = true;
}
box.visible = visible;
return [title, null];
}
_shouldShowDetails(source) {
return source.policy.detailsInLockScreen ||
source.narrowestPrivacyScope === MessageTray.PrivacyScope.SYSTEM;
}
_updateSourceBoxStyle(source, obj, box) {
let hasCriticalNotification =
source.notifications.some(n => n.urgency === MessageTray.Urgency.CRITICAL);
if (hasCriticalNotification !== obj.hasCriticalNotification) {
obj.hasCriticalNotification = hasCriticalNotification;
if (hasCriticalNotification)
box.add_style_class_name('critical');
else
box.remove_style_class_name('critical');
}
}
_showSource(source, obj, box) {
if (obj.detailed)
[obj.titleLabel, obj.countLabel] = this._makeNotificationDetailedSource(source, box);
else
[obj.titleLabel, obj.countLabel] = this._makeNotificationSource(source, box);
box.visible = obj.visible && (source.unseenCount > 0);
this._updateSourceBoxStyle(source, obj, box);
}
_sourceAdded(tray, source, initial) {
let obj = {
visible: source.policy.showInLockScreen,
detailed: this._shouldShowDetails(source),
sourceDestroyId: 0,
sourceCountChangedId: 0,
sourceTitleChangedId: 0,
sourceUpdatedId: 0,
sourceBox: null,
titleLabel: null,
countLabel: null,
hasCriticalNotification: false,
};
obj.sourceBox = new St.BoxLayout({
style_class: 'unlock-dialog-notification-source',
x_expand: true,
});
this._showSource(source, obj, obj.sourceBox);
this._notificationBox.add_child(obj.sourceBox);
obj.sourceCountChangedId = source.connect('notify::count', () => {
this._countChanged(source, obj);
});
obj.sourceTitleChangedId = source.connect('notify::title', () => {
this._titleChanged(source, obj);
});
obj.policyChangedId = source.policy.connect('notify', (policy, pspec) => {
if (pspec.name === 'show-in-lock-screen')
this._visibleChanged(source, obj);
else
this._detailedChanged(source, obj);
});
obj.sourceDestroyId = source.connect('destroy', () => {
this._onSourceDestroy(source, obj);
});
this._sources.set(source, obj);
if (!initial) {
// block scrollbars while animating, if they're not needed now
let boxHeight = this._notificationBox.height;
if (this._scrollView.height >= boxHeight)
this._scrollView.vscrollbar_policy = St.PolicyType.NEVER;
let widget = obj.sourceBox;
let [, natHeight] = widget.get_preferred_height(-1);
widget.height = 0;
widget.ease({
height: natHeight,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
duration: 250,
onComplete: () => {
this._scrollView.vscrollbar_policy = St.PolicyType.AUTOMATIC;
widget.set_height(-1);
},
});
this._updateVisibility();
if (obj.sourceBox.visible)
this.emit('wake-up-screen');
}
}
_titleChanged(source, obj) {
obj.titleLabel.text = source.title;
}
_countChanged(source, obj) {
// A change in the number of notifications may change whether we show
// details.
let newDetailed = this._shouldShowDetails(source);
let oldDetailed = obj.detailed;
obj.detailed = newDetailed;
if (obj.detailed || oldDetailed !== newDetailed) {
// A new notification was pushed, or a previous notification was destroyed.
// Give up, and build the list again.
obj.sourceBox.destroy_all_children();
obj.titleLabel = obj.countLabel = null;
this._showSource(source, obj, obj.sourceBox);
} else {
let count = source.unseenCount;
obj.countLabel.text = `${count}`;
}
obj.sourceBox.visible = obj.visible && (source.unseenCount > 0);
this._updateVisibility();
if (obj.sourceBox.visible)
this.emit('wake-up-screen');
}
_visibleChanged(source, obj) {
if (obj.visible === source.policy.showInLockScreen)
return;
obj.visible = source.policy.showInLockScreen;
obj.sourceBox.visible = obj.visible && source.unseenCount > 0;
this._updateVisibility();
if (obj.sourceBox.visible)
this.emit('wake-up-screen');
}
_detailedChanged(source, obj) {
let newDetailed = this._shouldShowDetails(source);
if (obj.detailed === newDetailed)
return;
obj.detailed = newDetailed;
obj.sourceBox.destroy_all_children();
obj.titleLabel = obj.countLabel = null;
this._showSource(source, obj, obj.sourceBox);
}
_onSourceDestroy(source, obj) {
this._removeSource(source, obj);
this._updateVisibility();
}
_removeSource(source, obj) {
obj.sourceBox.destroy();
obj.sourceBox = obj.titleLabel = obj.countLabel = null;
source.disconnect(obj.sourceDestroyId);
source.disconnect(obj.sourceCountChangedId);
source.disconnect(obj.sourceTitleChangedId);
source.policy.disconnect(obj.policyChangedId);
this._sources.delete(source);
}
});
var Clock = GObject.registerClass(
class UnlockDialogClock extends St.BoxLayout {
_init() {
super._init({ style_class: 'unlock-dialog-clock', vertical: true });
this._time = new St.Label({
style_class: 'unlock-dialog-clock-time',
x_align: Clutter.ActorAlign.CENTER,
});
this._date = new St.Label({
style_class: 'unlock-dialog-clock-date',
x_align: Clutter.ActorAlign.CENTER,
});
this.add_child(this._time);
this.add_child(this._date);
this._wallClock = new GnomeDesktop.WallClock({ time_only: true });
this._wallClock.connect('notify::clock', this._updateClock.bind(this));
this._updateClock();
this.connect('destroy', this._onDestroy.bind(this));
}
_updateClock() {
this._time.text = this._wallClock.clock;
let date = new Date();
/* Translators: This is a time format for a date in
long format */
let dateFormat = Shell.util_translate_time_string(N_('%A %B %-d'));
this._date.text = date.toLocaleFormat(dateFormat);
}
_onDestroy() {
this._wallClock.run_dispose();
}
});
var UnlockDialogLayout = GObject.registerClass(
class UnlockDialogLayout extends Clutter.LayoutManager {
_init(stack, notifications) {
super._init();
this._stack = stack;
this._notifications = notifications;
}
vfunc_get_preferred_width(container, forHeight) {
return this._stack.get_preferred_width(forHeight);
}
vfunc_get_preferred_height(container, forWidth) {
return this._stack.get_preferred_height(forWidth);
}
vfunc_allocate(container, box, flags) {
let [width, height] = box.get_size();
let tenthOfHeight = height / 10.0;
let thirdOfHeight = height / 3.0;
let [, , stackWidth, stackHeight] =
this._stack.get_preferred_size();
let [, , notificationsWidth, notificationsHeight] =
this._notifications.get_preferred_size();
let columnWidth = Math.max(stackWidth, notificationsWidth);
let columnX1 = Math.floor((width - columnWidth) / 2.0);
let actorBox = new Clutter.ActorBox();
// Notifications
let maxNotificationsHeight = Math.min(
notificationsHeight,
height - tenthOfHeight - stackHeight);
actorBox.x1 = columnX1;
actorBox.y1 = height - maxNotificationsHeight;
actorBox.x2 = columnX1 + columnWidth;
actorBox.y2 = actorBox.y1 + maxNotificationsHeight;
this._notifications.allocate(actorBox, flags);
// Authentication Box
let stackY = Math.min(
thirdOfHeight,
height - stackHeight - maxNotificationsHeight);
actorBox.x1 = columnX1;
actorBox.y1 = stackY;
actorBox.x2 = columnX1 + columnWidth;
actorBox.y2 = stackY + stackHeight;
this._stack.allocate(actorBox, flags);
}
});
var UnlockDialog = GObject.registerClass({ var UnlockDialog = GObject.registerClass({
Signals: { 'failed': {} }, Signals: {
'failed': {},
'wake-up-screen': {},
},
}, class UnlockDialog extends St.Widget { }, class UnlockDialog extends St.Widget {
_init(parentActor) { _init(parentActor) {
super._init({ super._init({
accessible_role: Atk.Role.WINDOW, accessible_role: Atk.Role.WINDOW,
style_class: 'login-dialog', style_class: 'login-dialog',
layout_manager: new Clutter.BoxLayout(),
visible: false, visible: false,
can_focus: true,
reactive: true,
}); });
this.add_constraint(new Layout.MonitorConstraint({ primary: true }));
parentActor.add_child(this); parentActor.add_child(this);
this._activePage = null;
let tapAction = new Clutter.TapAction();
tapAction.connect('tap', this._showPrompt.bind(this));
this.add_action(tapAction);
// Background
this._backgroundGroup = new Clutter.Actor();
this.add_child(this._backgroundGroup);
this._bgManagers = [];
this._updateBackgrounds();
this._monitorsChangedId =
Main.layoutManager.connect('monitors-changed', this._updateBackgrounds.bind(this));
this._userManager = AccountsService.UserManager.get_default(); this._userManager = AccountsService.UserManager.get_default();
this._userName = GLib.get_user_name(); this._userName = GLib.get_user_name();
this._user = this._userManager.get_user(this._userName); this._user = this._userManager.get_user(this._userName);
this._promptBox = new St.BoxLayout({ vertical: true, // Authentication & Clock stack
x_align: Clutter.ActorAlign.CENTER, let stack = new Shell.Stack();
y_align: Clutter.ActorAlign.CENTER,
x_expand: true, this._promptBox = new St.BoxLayout({ vertical: true });
y_expand: true }); stack.add_child(this._promptBox);
this.add_child(this._promptBox);
this._clock = new Clock();
stack.add_child(this._clock);
this._showClock();
this.allowCancel = false;
Main.ctrlAltTabManager.addGroup(this, _('Unlock Window'), 'dialog-password-symbolic');
// Notifications
this._notificationsBox = new NotificationsBox();
this._notificationsBox.connect('wake-up-screen', () => this.emit('wake-up-screen'));
// Main Box
let mainBox = new Clutter.Actor();
mainBox.add_constraint(new Layout.MonitorConstraint({ primary: true }));
mainBox.add_child(stack);
mainBox.add_child(this._notificationsBox);
mainBox.layout_manager = new UnlockDialogLayout(
stack,
this._notificationsBox);
this.add_child(mainBox);
this._idleMonitor = Meta.IdleMonitor.get_core();
this._idleWatchId = this._idleMonitor.add_idle_watch(IDLE_TIMEOUT * 1000, this._escape.bind(this));
this.connect('destroy', this._onDestroy.bind(this));
}
vfunc_key_press_event(keyEvent) {
if (this._activePage === this._promptBox ||
(this._promptBox && this._promptBox.visible))
return Clutter.EVENT_PROPAGATE;
let unichar = keyEvent.unicode_value;
this._showPrompt();
if (GLib.unichar_isgraph(unichar))
this.addCharacter(unichar);
return Clutter.EVENT_PROPAGATE;
}
_createBackground(monitorIndex) {
let monitor = Main.layoutManager.monitors[monitorIndex];
let widget = new St.Widget({
style_class: 'screen-shield-background',
x: monitor.x,
y: monitor.y,
width: monitor.width,
height: monitor.height,
});
let bgManager = new Background.BackgroundManager({
container: widget,
monitorIndex,
controlPosition: false,
settingsSchema: SCREENSAVER_SCHEMA,
});
this._bgManagers.push(bgManager);
this._backgroundGroup.add_child(widget);
widget.add_effect(new Shell.BlurEffect({
brightness: BLUR_BRIGHTNESS,
blur_radius: BLUR_RADIUS,
}));
}
_updateBackgrounds() {
for (let i = 0; i < this._bgManagers.length; i++)
this._bgManagers[i].destroy();
this._bgManagers = [];
this._backgroundGroup.destroy_all_children();
for (let i = 0; i < Main.layoutManager.monitors.length; i++)
this._createBackground(i);
}
_ensureAuthPrompt() {
if (this._authPrompt)
return;
this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY); this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
this._authPrompt.connect('failed', this._fail.bind(this)); this._authPrompt.connect('failed', this._fail.bind(this));
@@ -45,16 +543,18 @@ var UnlockDialog = GObject.registerClass({
this._promptBox.add_child(this._authPrompt); this._promptBox.add_child(this._authPrompt);
this.allowCancel = false;
let screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' }); let screenSaverSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.screensaver' });
if (screenSaverSettings.get_boolean('user-switch-enabled')) { if (screenSaverSettings.get_boolean('user-switch-enabled')) {
let otherUserLabel = new St.Label({ text: _("Log in as another user"), let otherUserLabel = new St.Label({
style_class: 'login-dialog-not-listed-label' }); text: _('Log in as another user'),
this._otherUserButton = new St.Button({ style_class: 'login-dialog-not-listed-button', style_class: 'login-dialog-not-listed-label',
can_focus: true, });
child: otherUserLabel, this._otherUserButton = new St.Button({
reactive: true }); style_class: 'login-dialog-not-listed-button',
can_focus: true,
child: otherUserLabel,
reactive: true,
});
this._otherUserButton.connect('clicked', this._otherUserClicked.bind(this)); this._otherUserButton.connect('clicked', this._otherUserClicked.bind(this));
this._promptBox.add_child(this._otherUserButton); this._promptBox.add_child(this._otherUserButton);
} else { } else {
@@ -63,13 +563,24 @@ var UnlockDialog = GObject.registerClass({
this._authPrompt.reset(); this._authPrompt.reset();
this._updateSensitivity(true); this._updateSensitivity(true);
}
Main.ctrlAltTabManager.addGroup(this, _("Unlock Window"), 'dialog-password-symbolic'); _maybeDestroyAuthPrompt() {
let focus = global.stage.key_focus;
if (focus === null ||
(this._authPrompt && this._authPrompt.contains(focus)) ||
(this._otherUserButton && focus === this._otherUserButton))
this.grab_key_focus();
this._idleMonitor = Meta.IdleMonitor.get_core(); if (this._authPrompt) {
this._idleWatchId = this._idleMonitor.add_idle_watch(IDLE_TIMEOUT * 1000, this._escape.bind(this)); this._authPrompt.destroy();
this._authPrompt = null;
}
this.connect('destroy', this._onDestroy.bind(this)); if (this._otherUserButton) {
this._otherUserButton.destroy();
this._otherUserButton = null;
}
} }
_updateSensitivity(sensitive) { _updateSensitivity(sensitive) {
@@ -81,7 +592,55 @@ var UnlockDialog = GObject.registerClass({
} }
} }
_showClock() {
if (this._activePage === this._clock)
return;
this._activePage = this._clock;
this._clock.show();
this._promptBox.ease({
opacity: 0,
duration: CROSSFADE_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => {
this._promptBox.hide();
this._maybeDestroyAuthPrompt();
},
});
this._clock.ease({
opacity: 255,
duration: CROSSFADE_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
});
}
_showPrompt() {
this._ensureAuthPrompt();
if (this._activePage === this._promptBox)
return;
this._activePage = this._promptBox;
this._promptBox.show();
this._clock.ease({
opacity: 0,
duration: CROSSFADE_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
onComplete: () => this._clock.hide(),
});
this._promptBox.ease({
opacity: 255,
duration: CROSSFADE_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
});
}
_fail() { _fail() {
this._showClock();
this.emit('failed'); this.emit('failed');
} }
@@ -115,19 +674,25 @@ var UnlockDialog = GObject.registerClass({
this._idleMonitor.remove_watch(this._idleWatchId); this._idleMonitor.remove_watch(this._idleWatchId);
this._idleWatchId = 0; this._idleWatchId = 0;
} }
if (this._monitorsChangedId) {
Main.layoutManager.disconnect(this._monitorsChangedId);
delete this._monitorsChangedId;
}
} }
cancel() { cancel() {
this._authPrompt.cancel(); if (this._authPrompt)
this._authPrompt.cancel();
this.destroy();
} }
addCharacter(unichar) { addCharacter(unichar) {
this._showPrompt();
this._authPrompt.addCharacter(unichar); this._authPrompt.addCharacter(unichar);
} }
finish(onComplete) { finish(onComplete) {
this._ensureAuthPrompt();
this._authPrompt.finish(onComplete); this._authPrompt.finish(onComplete);
} }
@@ -149,6 +714,10 @@ var UnlockDialog = GObject.registerClass({
return true; return true;
} }
activate() {
this._showPrompt();
}
popModal(timestamp) { popModal(timestamp) {
if (this._isModal) { if (this._isModal) {
Main.popModal(this, timestamp); Main.popModal(this, timestamp);

View File

@@ -155,8 +155,7 @@ var WindowClone = GObject.registerClass({
this._updateAttachedDialogs(); this._updateAttachedDialogs();
this._computeBoundingBox(); this._computeBoundingBox();
this.x = this._boundingBox.x; this.set_translation(this._boundingBox.x, this._boundingBox.y, 0);
this.y = this._boundingBox.y;
this._computeWindowCenter(); this._computeWindowCenter();
@@ -1364,8 +1363,8 @@ class Workspace extends St.Widget {
if (!clone.positioned) { if (!clone.positioned) {
// This window appeared after the overview was already up // This window appeared after the overview was already up
// Grow the clone from the center of the slot // Grow the clone from the center of the slot
clone.x = x + cloneWidth / 2; clone.translation_x = x + cloneWidth / 2;
clone.y = y + cloneHeight / 2; clone.translation_y = y + cloneHeight / 2;
clone.scale_x = 0; clone.scale_x = 0;
clone.scale_y = 0; clone.scale_y = 0;
clone.positioned = true; clone.positioned = true;
@@ -1380,8 +1379,8 @@ class Workspace extends St.Widget {
clone.opacity = 0; clone.opacity = 0;
clone.scale_x = 0; clone.scale_x = 0;
clone.scale_y = 0; clone.scale_y = 0;
clone.x = x; clone.translation_x = x;
clone.y = y; clone.translation_y = y;
} }
clone.ease({ clone.ease({
@@ -1395,7 +1394,7 @@ class Workspace extends St.Widget {
} else { } else {
// cancel any active tweens (otherwise they might override our changes) // cancel any active tweens (otherwise they might override our changes)
clone.remove_all_transitions(); clone.remove_all_transitions();
clone.set_position(x, y); clone.set_translation(x, y, 0);
clone.set_scale(scale, scale); clone.set_scale(scale, scale);
clone.set_opacity(255); clone.set_opacity(255);
clone.overlay.relayout(false); clone.overlay.relayout(false);
@@ -1425,7 +1424,8 @@ class Workspace extends St.Widget {
_animateClone(clone, overlay, x, y, scale) { _animateClone(clone, overlay, x, y, scale) {
clone.ease({ clone.ease({
x, y, translation_x: x,
translation_y: y,
scale_x: scale, scale_x: scale,
scale_y: scale, scale_y: scale,
duration: Overview.ANIMATION_TIME, duration: Overview.ANIMATION_TIME,
@@ -1570,7 +1570,7 @@ class Workspace extends St.Widget {
clone.slot = [x, y, clone.width * scale, clone.height * scale]; clone.slot = [x, y, clone.width * scale, clone.height * scale];
clone.positioned = true; clone.positioned = true;
clone.set_position(x, y); clone.set_translation(x, y, 0);
clone.set_scale(scale, scale); clone.set_scale(scale, scale);
clone.overlay.relayout(false); clone.overlay.relayout(false);
} }
@@ -1725,8 +1725,8 @@ class Workspace extends St.Widget {
let [origX, origY] = clone.getOriginalPosition(); let [origX, origY] = clone.getOriginalPosition();
clone.scale_x = 1; clone.scale_x = 1;
clone.scale_y = 1; clone.scale_y = 1;
clone.x = origX; clone.translation_x = origX;
clone.y = origY; clone.translation_y = origY;
clone.ease({ clone.ease({
opacity, opacity,
duration, duration,
@@ -1776,8 +1776,8 @@ class Workspace extends St.Widget {
if (clone.metaWindow.showing_on_its_workspace()) { if (clone.metaWindow.showing_on_its_workspace()) {
let [origX, origY] = clone.getOriginalPosition(); let [origX, origY] = clone.getOriginalPosition();
clone.ease({ clone.ease({
x: origX, translation_x: origX,
y: origY, translation_y: origY,
scale_x: 1, scale_x: 1,
scale_y: 1, scale_y: 1,
opacity: 255, opacity: 255,

View File

@@ -1,5 +1,5 @@
project('gnome-shell', 'c', project('gnome-shell', 'c',
version: '3.35.3', version: '3.35.90',
meson_version: '>= 0.47.0', meson_version: '>= 0.47.0',
license: 'GPLv2+' license: 'GPLv2+'
) )
@@ -25,7 +25,7 @@ gio_req = '>= 2.56.0'
gi_req = '>= 1.49.1' gi_req = '>= 1.49.1'
gjs_req = '>= 1.63.2' gjs_req = '>= 1.63.2'
gtk_req = '>= 3.15.0' gtk_req = '>= 3.15.0'
mutter_req = '>= 3.35.3' mutter_req = '>= 3.35.90'
polkit_req = '>= 0.100' polkit_req = '>= 0.100'
schemas_req = '>= 3.33.1' schemas_req = '>= 3.33.1'
startup_req = '>= 0.11' startup_req = '>= 0.11'

View File

@@ -6,6 +6,7 @@ data/org.gnome.Shell.desktop.in.in
data/org.gnome.shell.gschema.xml.in data/org.gnome.shell.gschema.xml.in
data/org.gnome.Shell.PortalHelper.desktop.in.in data/org.gnome.Shell.PortalHelper.desktop.in.in
js/extensionPrefs/main.js js/extensionPrefs/main.js
js/extensionPrefs/ui/extension-row.ui
js/extensionPrefs/ui/extensions-window.ui js/extensionPrefs/ui/extensions-window.ui
js/gdm/authPrompt.js js/gdm/authPrompt.js
js/gdm/loginDialog.js js/gdm/loginDialog.js

File diff suppressed because it is too large Load Diff

View File

@@ -9,8 +9,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell.master\n" "Project-Id-Version: gnome-shell.master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-02-04 18:00+0000\n" "POT-Creation-Date: 2020-02-06 19:01+0000\n"
"PO-Revision-Date: 2020-02-05 11:16+0100\n" "PO-Revision-Date: 2020-02-07 10:20+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" "Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n" "Language-Team: Spanish - Spain <gnome-es-list@gnome.org>\n"
"Language: es_ES\n" "Language: es_ES\n"
@@ -49,11 +49,7 @@ msgstr "Abrir el menú de la aplicación"
msgid "Extensions" msgid "Extensions"
msgstr "Extensiones" msgstr "Extensiones"
#: data/org.gnome.Extensions.desktop.in.in:5 #: data/org.gnome.Extensions.desktop.in.in:7
msgid "org.gnome.Extensions"
msgstr "org.gnome.Extensions"
#: data/org.gnome.Extensions.desktop.in.in:6
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Configurar las extensiones de GNOME Shell" msgstr "Configurar las extensiones de GNOME Shell"
@@ -481,13 +477,34 @@ msgstr "Visitar la página web de la extensión"
#: js/extensionPrefs/main.js:449 #: js/extensionPrefs/main.js:449
#, javascript-format #, javascript-format
#| msgid "%d extension will be updated on next login."
#| msgid_plural "%d extensions will be updated on next login.e"
msgid "%d extension will be updated on next login." msgid "%d extension will be updated on next login."
msgid_plural "%d extensions will be updated on next login." msgid_plural "%d extensions will be updated on next login."
msgstr[0] "la próxima vez que inicie sesión se actualizará %d extensión" msgstr[0] "la próxima vez que inicie sesión se actualizará %d extensión"
msgstr[1] "la próxima vez que inicie sesión se actualizarán %d extensiones" msgstr[1] "la próxima vez que inicie sesión se actualizarán %d extensiones"
#: js/extensionPrefs/ui/extension-row.ui:100
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Descripción"
#: js/extensionPrefs/ui/extension-row.ui:123
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versión"
#: js/extensionPrefs/ui/extension-row.ui:151
msgid "Author"
msgstr "Autor"
#: js/extensionPrefs/ui/extension-row.ui:175
msgid "Website"
msgstr "Página web"
#: js/extensionPrefs/ui/extension-row.ui:192
msgid "Remove…"
msgstr "Quitar…"
#: js/extensionPrefs/ui/extensions-window.ui:8 #: js/extensionPrefs/ui/extensions-window.ui:8
msgid "Help" msgid "Help"
msgstr "Ayuda" msgstr "Ayuda"
@@ -539,8 +556,9 @@ msgstr ""
"ha iniciado sesión en GNOME e inténtelo de nuevo." "ha iniciado sesión en GNOME e inténtelo de nuevo."
#: js/extensionPrefs/ui/extensions-window.ui:287 #: js/extensionPrefs/ui/extensions-window.ui:287
msgid "Logout" #| msgid "Log Out"
msgstr "Cerrar sesión…" msgid "Log Out…"
msgstr "Cerrar la sesión…"
#: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468 #: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468
msgid "Next" msgid "Next"
@@ -826,44 +844,44 @@ msgstr "Denegar acceso"
msgid "Grant Access" msgid "Grant Access"
msgstr "Conceder acceso" msgstr "Conceder acceso"
#: js/ui/appDisplay.js:904 #: js/ui/appDisplay.js:906
msgid "Unnamed Folder" msgid "Unnamed Folder"
msgstr "Carpeta sin nombre" msgstr "Carpeta sin nombre"
#: js/ui/appDisplay.js:927 #: js/ui/appDisplay.js:929
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí" msgstr "Las aplicaciones usadas frecuentemente aparecerán aquí"
#: js/ui/appDisplay.js:1062 #: js/ui/appDisplay.js:1064
msgid "Frequent" msgid "Frequent"
msgstr "Frecuentes" msgstr "Frecuentes"
#: js/ui/appDisplay.js:1069 #: js/ui/appDisplay.js:1071
msgid "All" msgid "All"
msgstr "Todas" msgstr "Todas"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2452 js/ui/panel.js:75 #: js/ui/appDisplay.js:2454 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Ventanas abiertas" msgstr "Ventanas abiertas"
#: js/ui/appDisplay.js:2472 js/ui/panel.js:82 #: js/ui/appDisplay.js:2474 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Ventana nueva" msgstr "Ventana nueva"
#: js/ui/appDisplay.js:2483 #: js/ui/appDisplay.js:2485
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Lanzar usando la tarjeta gráfica dedicada" msgstr "Lanzar usando la tarjeta gráfica dedicada"
#: js/ui/appDisplay.js:2511 js/ui/dash.js:239 #: js/ui/appDisplay.js:2513 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Quitar de los favoritos" msgstr "Quitar de los favoritos"
#: js/ui/appDisplay.js:2517 #: js/ui/appDisplay.js:2519
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Añadir a los favoritos" msgstr "Añadir a los favoritos"
#: js/ui/appDisplay.js:2527 js/ui/panel.js:93 #: js/ui/appDisplay.js:2529 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalles" msgstr "Mostrar detalles"
@@ -2526,11 +2544,6 @@ msgstr ""
"La descripción es una única frase para explicar qué hace su extensión.\n" "La descripción es una única frase para explicar qué hace su extensión.\n"
"Algunos ejemplos: %s" "Algunos ejemplos: %s"
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Descripción"
#: subprojects/extensions-tool/src/command-create.c:222 #: subprojects/extensions-tool/src/command-create.c:222
msgid "" msgid ""
"UUID is a globally-unique identifier for your extension.\n" "UUID is a globally-unique identifier for your extension.\n"
@@ -2733,10 +2746,6 @@ msgstr "URL"
msgid "Original author" msgid "Original author"
msgstr "Autor original" msgstr "Autor original"
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versión"
#: subprojects/extensions-tool/src/main.c:188 #: subprojects/extensions-tool/src/main.c:188
msgid "State" msgid "State"
msgstr "Estado" msgstr "Estado"
@@ -2839,6 +2848,12 @@ msgstr[1] "%u entradas"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sonidos del sistema" msgstr "Sonidos del sistema"
#~ msgid "Logout…"
#~ msgstr "Cerrar sesión…"
#~ msgid "org.gnome.Extensions"
#~ msgstr "org.gnome.Extensions"
#~ msgid "Browse in Software" #~ msgid "Browse in Software"
#~ msgstr "Buscar en Software" #~ msgstr "Buscar en Software"

625
po/eu.po

File diff suppressed because it is too large Load Diff

1607
po/fa.po

File diff suppressed because it is too large Load Diff

538
po/fi.po

File diff suppressed because it is too large Load Diff

628
po/gl.po

File diff suppressed because it is too large Load Diff

View File

@@ -11,8 +11,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-02-03 20:34+0000\n" "POT-Creation-Date: 2020-02-06 19:01+0000\n"
"PO-Revision-Date: 2020-02-04 13:57+0700\n" "PO-Revision-Date: 2020-02-07 13:32+0700\n"
"Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n" "Last-Translator: Kukuh Syafaat <kukuhsyafaat@gnome.org>\n"
"Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n" "Language-Team: Indonesian <gnome-l10n-id@googlegroups.com>\n"
"Language: id\n" "Language: id\n"
@@ -53,11 +53,7 @@ msgstr "Buka menu aplikasi"
msgid "Extensions" msgid "Extensions"
msgstr "Ekstensi" msgstr "Ekstensi"
#: data/org.gnome.Extensions.desktop.in.in:5 #: data/org.gnome.Extensions.desktop.in.in:7
msgid "org.gnome.Extensions"
msgstr "org.gnome.Extensions"
#: data/org.gnome.Extensions.desktop.in.in:6
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Konfigurasi Ekstensi GNOME Shell" msgstr "Konfigurasi Ekstensi GNOME Shell"
@@ -480,10 +476,33 @@ msgstr "Kunjungi halaman web ekstensi"
#: js/extensionPrefs/main.js:449 #: js/extensionPrefs/main.js:449
#, javascript-format #, javascript-format
msgid "%d extension will be updated on next login." msgid "%d extension will be updated on next login."
msgid_plural "%d extensions will be updated on next login.e" msgid_plural "%d extensions will be updated on next login."
msgstr[0] "%d ekstensi akan diperbarui pada log masuk berikutnya." msgstr[0] "%d ekstensi akan diperbarui pada log masuk berikutnya."
msgstr[1] "%d ekstensi akan diperbarui pada log masuk berikutnya." msgstr[1] "%d ekstensi akan diperbarui pada log masuk berikutnya."
#: js/extensionPrefs/ui/extension-row.ui:100
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Deskripsi"
#: js/extensionPrefs/ui/extension-row.ui:123
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versi"
#: js/extensionPrefs/ui/extension-row.ui:151
msgid "Author"
msgstr "Penulis"
#: js/extensionPrefs/ui/extension-row.ui:175
msgid "Website"
msgstr "Situs Web"
#: js/extensionPrefs/ui/extension-row.ui:192
msgid "Remove…"
msgstr "Hapus…"
#: js/extensionPrefs/ui/extensions-window.ui:8 #: js/extensionPrefs/ui/extensions-window.ui:8
msgid "Help" msgid "Help"
msgstr "Bantuan" msgstr "Bantuan"
@@ -535,7 +554,7 @@ msgstr ""
"dipasang. Pastikan Anda masuk ke GNOME dan coba lagi." "dipasang. Pastikan Anda masuk ke GNOME dan coba lagi."
#: js/extensionPrefs/ui/extensions-window.ui:287 #: js/extensionPrefs/ui/extensions-window.ui:287
msgid "Logout…" msgid "Log Out…"
msgstr "Keluar…" msgstr "Keluar…"
#: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468 #: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468
@@ -823,44 +842,44 @@ msgstr "Tolak Akses"
msgid "Grant Access" msgid "Grant Access"
msgstr "Beri Akses" msgstr "Beri Akses"
#: js/ui/appDisplay.js:904 #: js/ui/appDisplay.js:906
msgid "Unnamed Folder" msgid "Unnamed Folder"
msgstr "Folder Tanpa Nama" msgstr "Folder Tanpa Nama"
#: js/ui/appDisplay.js:927 #: js/ui/appDisplay.js:929
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Aplikasi yang sering dipakai akan muncul di sini" msgstr "Aplikasi yang sering dipakai akan muncul di sini"
#: js/ui/appDisplay.js:1062 #: js/ui/appDisplay.js:1064
msgid "Frequent" msgid "Frequent"
msgstr "Sering" msgstr "Sering"
#: js/ui/appDisplay.js:1069 #: js/ui/appDisplay.js:1071
msgid "All" msgid "All"
msgstr "Semua" msgstr "Semua"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2452 js/ui/panel.js:75 #: js/ui/appDisplay.js:2454 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Buka Jendela" msgstr "Buka Jendela"
#: js/ui/appDisplay.js:2472 js/ui/panel.js:82 #: js/ui/appDisplay.js:2474 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Jendela Baru" msgstr "Jendela Baru"
#: js/ui/appDisplay.js:2483 #: js/ui/appDisplay.js:2485
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi" msgstr "Luncurkan menggunakan Kartu Grafis Terdedikasi"
#: js/ui/appDisplay.js:2511 js/ui/dash.js:239 #: js/ui/appDisplay.js:2513 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Hapus dari Favorit" msgstr "Hapus dari Favorit"
#: js/ui/appDisplay.js:2517 #: js/ui/appDisplay.js:2519
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Tambah ke Favorit" msgstr "Tambah ke Favorit"
#: js/ui/appDisplay.js:2527 js/ui/panel.js:93 #: js/ui/appDisplay.js:2529 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Tampilkan Rincian" msgstr "Tampilkan Rincian"
@@ -1719,7 +1738,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d pemberitahuan baru" msgstr[0] "%d pemberitahuan baru"
msgstr[1] "%d pemberitahuan baru" msgstr[1] "%d pemberitahuan baru"
#: js/ui/screenShield.js:454 js/ui/status/system.js:98 #: js/ui/screenShield.js:454 js/ui/status/system.js:103
msgid "Lock" msgid "Lock"
msgstr "Kunci" msgstr "Kunci"
@@ -2237,23 +2256,23 @@ msgstr "Matikan"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Mode Pesawat Terbang Aktif" msgstr "Mode Pesawat Terbang Aktif"
#: js/ui/status/system.js:111 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Matikan / Log Keluar" msgstr "Matikan / Log Keluar"
#: js/ui/status/system.js:114 #: js/ui/status/system.js:119
msgid "Log Out" msgid "Log Out"
msgstr "Keluar" msgstr "Keluar"
#: js/ui/status/system.js:126 #: js/ui/status/system.js:131
msgid "Switch User…" msgid "Switch User…"
msgstr "Beralih Pengguna…" msgstr "Beralih Pengguna…"
#: js/ui/status/system.js:140 #: js/ui/status/system.js:145
msgid "Suspend" msgid "Suspend"
msgstr "Suspensi" msgstr "Suspensi"
#: js/ui/status/system.js:152 #: js/ui/status/system.js:157
msgid "Power Off…" msgid "Power Off…"
msgstr "Matikan…" msgstr "Matikan…"
@@ -2519,11 +2538,6 @@ msgstr ""
"Anda.\n" "Anda.\n"
"Contohnya adalah: %s" "Contohnya adalah: %s"
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Deskripsi"
#: subprojects/extensions-tool/src/command-create.c:222 #: subprojects/extensions-tool/src/command-create.c:222
msgid "" msgid ""
"UUID is a globally-unique identifier for your extension.\n" "UUID is a globally-unique identifier for your extension.\n"
@@ -2725,10 +2739,6 @@ msgstr "URL"
msgid "Original author" msgid "Original author"
msgstr "Penulis asli" msgstr "Penulis asli"
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versi"
#: subprojects/extensions-tool/src/main.c:188 #: subprojects/extensions-tool/src/main.c:188
msgid "State" msgid "State"
msgstr "Kondisi" msgstr "Kondisi"
@@ -2831,6 +2841,12 @@ msgstr[1] "%u Masukan"
msgid "System Sounds" msgid "System Sounds"
msgstr "Suara Sistem" msgstr "Suara Sistem"
#~ msgid "org.gnome.Extensions"
#~ msgstr "org.gnome.Extensions"
#~ msgid "Logout…"
#~ msgstr "Keluar…"
#~ msgid "Browse in Software" #~ msgid "Browse in Software"
#~ msgstr "Ramban di Perangkat Lunak" #~ msgstr "Ramban di Perangkat Lunak"

569
po/ja.po

File diff suppressed because it is too large Load Diff

232
po/lt.po
View File

@@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell master\n" "Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-02-01 07:15+0000\n" "POT-Creation-Date: 2020-02-06 19:01+0000\n"
"PO-Revision-Date: 2020-02-02 22:10+0200\n" "PO-Revision-Date: 2020-02-08 14:25+0200\n"
"Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n" "Last-Translator: Aurimas Černius <aurisc4@gmail.com>\n"
"Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n" "Language-Team: Lietuvių <gnome-lt@lists.akl.lt>\n"
"Language: lt\n" "Language: lt\n"
@@ -47,12 +47,12 @@ msgstr "Rodyti visas programas"
msgid "Open the application menu" msgid "Open the application menu"
msgstr "Atverti programų meniu" msgstr "Atverti programų meniu"
#: data/gnome-shell-extension-prefs.desktop.in.in:4 #: data/org.gnome.Extensions.desktop.in.in:4 js/extensionPrefs/main.js:218
#: js/extensionPrefs/main.js:209 #: js/extensionPrefs/ui/extensions-window.ui:61
msgid "Shell Extensions" msgid "Extensions"
msgstr "Shell plėtiniai" msgstr "Plėtiniai"
#: data/gnome-shell-extension-prefs.desktop.in.in:5 #: data/org.gnome.Extensions.desktop.in.in:7
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Konfigūruoti GNOME Shell plėtinius" msgstr "Konfigūruoti GNOME Shell plėtinius"
@@ -397,11 +397,46 @@ msgstr "Atidėti fokuso pakeitimus pelei iki žymiklis nustos judėti"
msgid "Network Login" msgid "Network Login"
msgstr "Tinklo prisijungimas" msgstr "Tinklo prisijungimas"
#: js/extensionPrefs/main.js:102 js/extensionPrefs/main.js:525 #: js/extensionPrefs/main.js:140
#, javascript-format
msgid "Remove “%s”?"
msgstr "Pašalinti „%s“?"
#: js/extensionPrefs/main.js:141
msgid ""
"If you remove the extension, you need to return to download it if you want "
"to enable it again"
msgstr ""
"Jei pašalinsite plėtinį, reikės grįžti prie jo atsisiuntimo, jei norėsite jį "
"vėl įjungti"
#: js/extensionPrefs/main.js:144 js/gdm/authPrompt.js:170
#: js/ui/audioDeviceSelection.js:57 js/ui/components/networkAgent.js:107
#: js/ui/components/polkitAgent.js:139 js/ui/endSessionDialog.js:374
#: js/ui/extensionDownloader.js:166 js/ui/shellMountOperation.js:376
#: js/ui/shellMountOperation.js:386 js/ui/status/network.js:910
msgid "Cancel"
msgstr "Atsisakyti"
#: js/extensionPrefs/main.js:145
msgid "Remove"
msgstr "Pašalinti"
#: js/extensionPrefs/main.js:217
msgid "translator-credits"
msgstr ""
"Išvertė:\n"
"Aurimas Černius <aurisc4@gmail.com>"
#: js/extensionPrefs/main.js:219
msgid "Manage your GNOME Extensions"
msgstr "Tvarkyti GNOME plėtinius"
#: js/extensionPrefs/main.js:261 js/extensionPrefs/ui/extensions-window.ui:222
msgid "Somethings gone wrong" msgid "Somethings gone wrong"
msgstr "Atsitiko kažkas negero" msgstr "Atsitiko kažkas negero"
#: js/extensionPrefs/main.js:109 #: js/extensionPrefs/main.js:268
msgid "" msgid ""
"Were very sorry, but theres been a problem: the settings for this " "Were very sorry, but theres been a problem: the settings for this "
"extension cant be displayed. We recommend that you report the issue to the " "extension cant be displayed. We recommend that you report the issue to the "
@@ -410,39 +445,95 @@ msgstr ""
"Atsiprašome, bet kilo problema: šio plėtinio nustatymų parodyti nepavyksta. " "Atsiprašome, bet kilo problema: šio plėtinio nustatymų parodyti nepavyksta. "
"Rekomenduojame pranešti apie problemą plėtinio autoriams." "Rekomenduojame pranešti apie problemą plėtinio autoriams."
#: js/extensionPrefs/main.js:116 #: js/extensionPrefs/main.js:275
msgid "Technical Details" msgid "Technical Details"
msgstr "Techninė informacija" msgstr "Techninė informacija"
#: js/extensionPrefs/main.js:151 #: js/extensionPrefs/main.js:310
msgid "Copy Error" msgid "Copy Error"
msgstr "Kopijuoti klaidą" msgstr "Kopijuoti klaidą"
#: js/extensionPrefs/main.js:178 #: js/extensionPrefs/main.js:337
msgid "Homepage" msgid "Homepage"
msgstr "Namų tinklalapis" msgstr "Namų tinklalapis"
#: js/extensionPrefs/main.js:179 #: js/extensionPrefs/main.js:338
msgid "Visit extension homepage" msgid "Visit extension homepage"
msgstr "Aplankyti plėtinio namų tinklalapį" msgstr "Aplankyti plėtinio namų tinklalapį"
#: js/extensionPrefs/main.js:467 #: js/extensionPrefs/main.js:449
msgid "No Extensions Installed" #, javascript-format
msgstr "Nėra įdiegtų plėtinių" msgid "%d extension will be updated on next login."
msgid_plural "%d extensions will be updated on next login."
msgstr[0] "%d plėtinys bus atnaujintas kitą kartą prisijungus."
msgstr[1] "%d plėtiniai bus atnaujintas kitą kartą prisijungus."
msgstr[2] "%d plėtinių bus atnaujintas kitą kartą prisijungus."
#: js/extensionPrefs/main.js:477 #: js/extensionPrefs/ui/extension-row.ui:100
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Aprašymas"
#: js/extensionPrefs/ui/extension-row.ui:123
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versija"
#: js/extensionPrefs/ui/extension-row.ui:151
msgid "Author"
msgstr "Autorius"
#: js/extensionPrefs/ui/extension-row.ui:175
msgid "Website"
msgstr "Tinklalapis"
#: js/extensionPrefs/ui/extension-row.ui:192
msgid "Remove…"
msgstr "Pašalinti…"
#: js/extensionPrefs/ui/extensions-window.ui:8
msgid "Help"
msgstr "Žinynas"
#: js/extensionPrefs/ui/extensions-window.ui:12
msgid "About Extensions"
msgstr "Apie plėtinius"
#: js/extensionPrefs/ui/extensions-window.ui:27
msgid "" msgid ""
"Extensions can be installed through Software or <a href=\"https://extensions." "To find and add extensions, visit <a href=\"https://extensions.gnome.org"
"gnome.org\">extensions.gnome.org</a>." "\">extensions.gnome.org</a>."
msgstr "" msgstr ""
"Plėtinius galima įdiegti per Programinę įrangą arba <a href=\"https://" "Plėtinius galima rasti ir įdiegti per apsilankius <a href=\"https://"
"extensions.gnome.org\">extensions.gnome.org</a>." "extensions.gnome.org\">extensions.gnome.org</a>."
#: js/extensionPrefs/main.js:492 #: js/extensionPrefs/ui/extensions-window.ui:35
msgid "Browse in Software" msgid "Warning"
msgstr "Naršyti Programinėje įrangoje" msgstr "Įspėjimas"
#: js/extensionPrefs/main.js:532 #: js/extensionPrefs/ui/extensions-window.ui:46
msgid ""
"Extensions can cause system issues, including performance problems. If you "
"encounter problems with your system, it is recommended to disable all "
"extensions."
msgstr ""
"Plėtiniai gali sukelti sistemai problemų, įskaitant našumo problemas. Jei su "
"tokiomis susidursite, rekomenduojama išjungti visus plėtinius."
#: js/extensionPrefs/ui/extensions-window.ui:133
msgid "Manually Installed"
msgstr "Įdiegtas rankomis"
#: js/extensionPrefs/ui/extensions-window.ui:157
msgid "Built-In"
msgstr "Vidinis"
#: js/extensionPrefs/ui/extensions-window.ui:198
msgid "No Installed Extensions"
msgstr "Nėra įdiegtų plėtinių"
#: js/extensionPrefs/ui/extensions-window.ui:234
msgid "" msgid ""
"Were very sorry, but it was not possible to get the list of installed " "Were very sorry, but it was not possible to get the list of installed "
"extensions. Make sure you are logged into GNOME and try again." "extensions. Make sure you are logged into GNOME and try again."
@@ -450,13 +541,10 @@ msgstr ""
"Atsiprašome, bet nepavyko gauti įdiegtų plėtinių sąrašo. Įsitikinkite, kad " "Atsiprašome, bet nepavyko gauti įdiegtų plėtinių sąrašo. Įsitikinkite, kad "
"esate prisijungęs prie GNOME ir bandykite vėl." "esate prisijungęs prie GNOME ir bandykite vėl."
#: js/gdm/authPrompt.js:170 js/ui/audioDeviceSelection.js:57 #: js/extensionPrefs/ui/extensions-window.ui:287
#: js/ui/components/networkAgent.js:107 js/ui/components/polkitAgent.js:139 #| msgid "Log Out"
#: js/ui/endSessionDialog.js:374 js/ui/extensionDownloader.js:166 msgid "Log Out…"
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386 msgstr "Atsijungti…"
#: js/ui/status/network.js:910
msgid "Cancel"
msgstr "Atsisakyti"
#: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468 #: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468
msgid "Next" msgid "Next"
@@ -520,7 +608,6 @@ msgstr "Išjungti"
#. Translators: A list of keywords that match the power-off action, separated by semicolons #. Translators: A list of keywords that match the power-off action, separated by semicolons
#: js/misc/systemActions.js:92 #: js/misc/systemActions.js:92
#| msgid "power off;shutdown;reboot;restart"
msgid "power off;shutdown;reboot;restart;halt;stop" msgid "power off;shutdown;reboot;restart;halt;stop"
msgstr "išjungti;perleisti;perkrauti;sustabdyti" msgstr "išjungti;perleisti;perkrauti;sustabdyti"
@@ -570,20 +657,15 @@ msgstr "keisti naudotoją"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:131 #: js/misc/systemActions.js:131
#| msgid "lock orientation;screen;rotation"
msgid "lock orientation;unlock orientation;screen;rotation" msgid "lock orientation;unlock orientation;screen;rotation"
msgstr "orientacijos užrakinimas;orientacijos atrakinimas;ekranas;pasukimas" msgstr "orientacijos užrakinimas;orientacijos atrakinimas;ekranas;pasukimas"
#: js/misc/systemActions.js:251 #: js/misc/systemActions.js:251
#| msgctxt "search-result"
#| msgid "Lock Orientation"
msgctxt "search-result" msgctxt "search-result"
msgid "Unlock Screen Rotation" msgid "Unlock Screen Rotation"
msgstr "Atrakinti ekrano orientaciją" msgstr "Atrakinti ekrano orientaciją"
#: js/misc/systemActions.js:252 #: js/misc/systemActions.js:252
#| msgctxt "search-result"
#| msgid "Lock Orientation"
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen Rotation" msgid "Lock Screen Rotation"
msgstr "Užrakinti ekrano orientaciją" msgstr "Užrakinti ekrano orientaciją"
@@ -754,44 +836,44 @@ msgstr "Atmesti prieigą"
msgid "Grant Access" msgid "Grant Access"
msgstr "Suteikti prieigą" msgstr "Suteikti prieigą"
#: js/ui/appDisplay.js:904 #: js/ui/appDisplay.js:906
msgid "Unnamed Folder" msgid "Unnamed Folder"
msgstr "Nepavadintas aplankas" msgstr "Nepavadintas aplankas"
#: js/ui/appDisplay.js:927 #: js/ui/appDisplay.js:929
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Čia bus matomos dažnai naudojamos programos" msgstr "Čia bus matomos dažnai naudojamos programos"
#: js/ui/appDisplay.js:1062 #: js/ui/appDisplay.js:1064
msgid "Frequent" msgid "Frequent"
msgstr "Dažnai naudojamos" msgstr "Dažnai naudojamos"
#: js/ui/appDisplay.js:1069 #: js/ui/appDisplay.js:1071
msgid "All" msgid "All"
msgstr "Visos" msgstr "Visos"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2452 js/ui/panel.js:75 #: js/ui/appDisplay.js:2454 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Atverti langai" msgstr "Atverti langai"
#: js/ui/appDisplay.js:2472 js/ui/panel.js:82 #: js/ui/appDisplay.js:2474 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Naujas langas" msgstr "Naujas langas"
#: js/ui/appDisplay.js:2483 #: js/ui/appDisplay.js:2485
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Paleisti naudojant dedikuotą grafikos kortą" msgstr "Paleisti naudojant dedikuotą grafikos kortą"
#: js/ui/appDisplay.js:2511 js/ui/dash.js:239 #: js/ui/appDisplay.js:2513 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Pašalinti iš mėgstamų" msgstr "Pašalinti iš mėgstamų"
#: js/ui/appDisplay.js:2517 #: js/ui/appDisplay.js:2519
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Pridėti prie mėgstamų" msgstr "Pridėti prie mėgstamų"
#: js/ui/appDisplay.js:2527 js/ui/panel.js:93 #: js/ui/appDisplay.js:2529 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Rodyti detalią informaciją" msgstr "Rodyti detalią informaciją"
@@ -1094,7 +1176,6 @@ msgid "Network Manager"
msgstr "Tinklo tvarkymas" msgstr "Tinklo tvarkymas"
#: js/ui/components/networkAgent.js:706 #: js/ui/components/networkAgent.js:706
#| msgid "Password"
msgid "VPN password" msgid "VPN password"
msgstr "VPN slaptažodis" msgstr "VPN slaptažodis"
@@ -1119,7 +1200,6 @@ msgid "Sorry, that didnt work. Please try again."
msgstr "Atsiprašome, tai nesuveikė. Bandykite dar kartą." msgstr "Atsiprašome, tai nesuveikė. Bandykite dar kartą."
#: js/ui/components/polkitAgent.js:277 js/ui/shellMountOperation.js:326 #: js/ui/components/polkitAgent.js:277 js/ui/shellMountOperation.js:326
#| msgid "Remember Password"
msgid "Enter Password…" msgid "Enter Password…"
msgstr "Įveskite slaptažodį…" msgstr "Įveskite slaptažodį…"
@@ -1318,19 +1398,16 @@ msgstr ""
"yra įjungtas į elektros tinklą." "yra įjungtas į elektros tinklą."
#: js/ui/endSessionDialog.js:259 #: js/ui/endSessionDialog.js:259
#| msgid "Running on battery power: please plug in before installing updates."
msgid "Running on battery power: Please plug in before installing updates." msgid "Running on battery power: Please plug in before installing updates."
msgstr "" msgstr ""
"Veikia naudojant baterijos energiją: įjunkite į elektros tinklą prieš " "Veikia naudojant baterijos energiją: įjunkite į elektros tinklą prieš "
"įdiegdami atnaujinimus." "įdiegdami atnaujinimus."
#: js/ui/endSessionDialog.js:268 #: js/ui/endSessionDialog.js:268
#| msgid "Some applications are busy or have unsaved work."
msgid "Some applications are busy or have unsaved work" msgid "Some applications are busy or have unsaved work"
msgstr "Kai kurios programos dirba arba turi neįrašyto darbo." msgstr "Kai kurios programos dirba arba turi neįrašyto darbo."
#: js/ui/endSessionDialog.js:273 #: js/ui/endSessionDialog.js:273
#| msgid "Other users are logged in."
msgid "Other users are logged in" msgid "Other users are logged in"
msgstr "Yra prisijungusių kitų naudotojų" msgstr "Yra prisijungusių kitų naudotojų"
@@ -1351,7 +1428,6 @@ msgid "Install"
msgstr "Įdiegti" msgstr "Įdiegti"
#: js/ui/extensionDownloader.js:176 #: js/ui/extensionDownloader.js:176
#| msgid "Uninstall extension"
msgid "Install Extension" msgid "Install Extension"
msgstr "Išdiegti plėtinį" msgstr "Išdiegti plėtinį"
@@ -1360,20 +1436,25 @@ msgstr "Išdiegti plėtinį"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Parsiųsti ir įdiegti „%s“ iš extensions.gnome.org?" msgstr "Parsiųsti ir įdiegti „%s“ iš extensions.gnome.org?"
#: js/ui/extensionSystem.js:228
msgid "Extension Updates Available"
msgstr "Yra plėtinių atnaujinimų"
#: js/ui/extensionSystem.js:229
msgid "Extension updates are ready to be installed."
msgstr "Plėtinių atnaujinimai paruošti diegimui."
#: js/ui/inhibitShortcutsDialog.js:79 #: js/ui/inhibitShortcutsDialog.js:79
#| msgid "%s wants to inhibit shortcuts"
msgid "Allow inhibiting shortcuts" msgid "Allow inhibiting shortcuts"
msgstr "Leisti talpinti trumpinius" msgstr "Leisti talpinti trumpinius"
#. Translators: %s is an application name like "Settings" #. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:82 #: js/ui/inhibitShortcutsDialog.js:82
#, javascript-format #, javascript-format
#| msgid "Application wants to inhibit shortcuts"
msgid "The application %s wants to inhibit shortcuts" msgid "The application %s wants to inhibit shortcuts"
msgstr "Programa %s nori talpinti trumpinius" msgstr "Programa %s nori talpinti trumpinius"
#: js/ui/inhibitShortcutsDialog.js:83 #: js/ui/inhibitShortcutsDialog.js:83
#| msgid "Application wants to inhibit shortcuts"
msgid "An application wants to inhibit shortcuts" msgid "An application wants to inhibit shortcuts"
msgstr "Programa nori talpinti trumpinius" msgstr "Programa nori talpinti trumpinius"
@@ -1507,7 +1588,6 @@ msgid "Web Page"
msgstr "Tinklalapis" msgstr "Tinklalapis"
#: js/ui/main.js:267 #: js/ui/main.js:267
#| msgid "Log in as another user"
msgid "Logged in as a privileged user" msgid "Logged in as a privileged user"
msgstr "Prisijungta privilegijuotu naudotoju" msgstr "Prisijungta privilegijuotu naudotoju"
@@ -1621,12 +1701,10 @@ msgid "Top Bar"
msgstr "Viršutinė juosta" msgstr "Viršutinė juosta"
#: js/ui/runDialog.js:58 #: js/ui/runDialog.js:58
#| msgid "Enter a Command"
msgid "Run a Command" msgid "Run a Command"
msgstr "Vykdyti komandą" msgstr "Vykdyti komandą"
#: js/ui/runDialog.js:73 #: js/ui/runDialog.js:73
#| msgid "Press Esc to exit"
msgid "Press ESC to close" msgid "Press ESC to close"
msgstr "Spauskit ESC užvėrimui" msgstr "Spauskit ESC užvėrimui"
@@ -1660,7 +1738,7 @@ msgstr[0] "%d naujas pranešimas"
msgstr[1] "%d nauji pranešimai" msgstr[1] "%d nauji pranešimai"
msgstr[2] "%d naujų pranešimų" msgstr[2] "%d naujų pranešimų"
#: js/ui/screenShield.js:454 js/ui/status/system.js:98 #: js/ui/screenShield.js:454 js/ui/status/system.js:103
msgid "Lock" msgid "Lock"
msgstr "Užrakinti" msgstr "Užrakinti"
@@ -1741,7 +1819,6 @@ msgstr ""
"įrankį." "įrankį."
#: js/ui/shellMountOperation.js:306 #: js/ui/shellMountOperation.js:306
#| msgid "PIM Number"
msgid "Enter PIM Number…" msgid "Enter PIM Number…"
msgstr "Įveskite PIM numerį…" msgstr "Įveskite PIM numerį…"
@@ -1903,7 +1980,6 @@ msgstr "Leisti vietos informacijos prieigą"
#. Translators: %s is an application name #. Translators: %s is an application name
#: js/ui/status/location.js:357 #: js/ui/status/location.js:357
#, javascript-format #, javascript-format
#| msgid "Give %s access to your location?"
msgid "The app %s wants to access your location" msgid "The app %s wants to access your location"
msgstr "Programa %s nori prieigos prie jūsų būvimo vietos" msgstr "Programa %s nori prieigos prie jūsų būvimo vietos"
@@ -2185,26 +2261,23 @@ msgstr "Išjungti"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Skrydžio veiksena įjungta" msgstr "Skrydžio veiksena įjungta"
#: js/ui/status/system.js:111 #: js/ui/status/system.js:116
#| msgid "Power Off"
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Išjungti / Atsijungti" msgstr "Išjungti / Atsijungti"
#: js/ui/status/system.js:114 #: js/ui/status/system.js:119
msgid "Log Out" msgid "Log Out"
msgstr "Atsijungti" msgstr "Atsijungti"
#: js/ui/status/system.js:126 #: js/ui/status/system.js:131
#| msgid "Switch User"
msgid "Switch User…" msgid "Switch User…"
msgstr "Keisti naudotoją…" msgstr "Keisti naudotoją…"
#: js/ui/status/system.js:140 #: js/ui/status/system.js:145
msgid "Suspend" msgid "Suspend"
msgstr "Pristabdyti" msgstr "Pristabdyti"
#: js/ui/status/system.js:152 #: js/ui/status/system.js:157
#| msgid "Power Off"
msgid "Power Off…" msgid "Power Off…"
msgstr "Išjungti…" msgstr "Išjungti…"
@@ -2301,7 +2374,6 @@ msgstr "„%s“ yra pasirengusi"
#. Translators: This string should be shorter than 30 characters #. Translators: This string should be shorter than 30 characters
#: js/ui/windowManager.js:55 #: js/ui/windowManager.js:55
#| msgid "Do you want to keep these display settings?"
msgid "Keep these display settings?" msgid "Keep these display settings?"
msgstr "Ar norite įrašyti šiuos vaizduoklio nustatymus?" msgstr "Ar norite įrašyti šiuos vaizduoklio nustatymus?"
@@ -2470,11 +2542,6 @@ msgstr ""
"Aprašymas yra vieno sakinio paaiškinimas, ką daro plėtinys.\n" "Aprašymas yra vieno sakinio paaiškinimas, ką daro plėtinys.\n"
"Pavyzdžiai: %s" "Pavyzdžiai: %s"
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Aprašymas"
#: subprojects/extensions-tool/src/command-create.c:222 #: subprojects/extensions-tool/src/command-create.c:222
msgid "" msgid ""
"UUID is a globally-unique identifier for your extension.\n" "UUID is a globally-unique identifier for your extension.\n"
@@ -2676,10 +2743,6 @@ msgstr "URL"
msgid "Original author" msgid "Original author"
msgstr "Pradinis autorius" msgstr "Pradinis autorius"
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versija"
#: subprojects/extensions-tool/src/main.c:188 #: subprojects/extensions-tool/src/main.c:188
msgid "State" msgid "State"
msgstr "Būsena" msgstr "Būsena"
@@ -2784,6 +2847,12 @@ msgstr[2] "%u įvesčių"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sistemos garsai" msgstr "Sistemos garsai"
#~ msgid "Logout…"
#~ msgstr "Atsijungti…"
#~ msgid "Browse in Software"
#~ msgstr "Naršyti Programinėje įrangoje"
#~| msgid "Username: " #~| msgid "Username: "
#~ msgid "Rename" #~ msgid "Rename"
#~ msgstr "Pervadinti" #~ msgstr "Pervadinti"
@@ -3107,9 +3176,6 @@ msgstr "Sistemos garsai"
#~ msgid "Open" #~ msgid "Open"
#~ msgstr "Atverti" #~ msgstr "Atverti"
#~ msgid "Remove"
#~ msgstr "Pašalinti"
#~ msgid "Clear Messages" #~ msgid "Clear Messages"
#~ msgstr "Išvalyti pranešimus" #~ msgstr "Išvalyti pranešimus"

View File

@@ -24,8 +24,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-01-28 15:54+0000\n" "POT-Creation-Date: 2020-02-06 19:01+0000\n"
"PO-Revision-Date: 2020-01-28 18:42-0300\n" "PO-Revision-Date: 2020-02-06 20:40-0300\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n" "Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n" "Language: pt_BR\n"
@@ -60,12 +60,13 @@ msgstr "Mostrar todos os aplicativos"
msgid "Open the application menu" msgid "Open the application menu"
msgstr "Abre o menu do aplicativo" msgstr "Abre o menu do aplicativo"
#: data/gnome-shell-extension-prefs.desktop.in.in:4 #: data/org.gnome.Extensions.desktop.in.in:4 js/extensionPrefs/main.js:218
#: js/extensionPrefs/main.js:209 #: js/extensionPrefs/ui/extensions-window.ui:61
msgid "Shell Extensions" #| msgid "Shell Extensions"
msgstr "Extensões do shell" msgid "Extensions"
msgstr "Extensões"
#: data/gnome-shell-extension-prefs.desktop.in.in:5 #: data/org.gnome.Extensions.desktop.in.in:7
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Configurar extensões do Shell do GNOME" msgstr "Configurar extensões do Shell do GNOME"
@@ -422,11 +423,45 @@ msgstr "Atrasar foco altera o modo do mouse até o ponteiro parar de mover"
msgid "Network Login" msgid "Network Login"
msgstr "Sessão de Rede" msgstr "Sessão de Rede"
#: js/extensionPrefs/main.js:102 js/extensionPrefs/main.js:525 #: js/extensionPrefs/main.js:140
#, javascript-format
msgid "Remove “%s”?"
msgstr "Remover “%s”?"
#: js/extensionPrefs/main.js:141
msgid ""
"If you remove the extension, you need to return to download it if you want "
"to enable it again"
msgstr ""
"Se você remover a extensão, você precisa voltar a baixá-la se você quiser "
"habilitá-la novamente"
#: js/extensionPrefs/main.js:144 js/gdm/authPrompt.js:170
#: js/ui/audioDeviceSelection.js:57 js/ui/components/networkAgent.js:107
#: js/ui/components/polkitAgent.js:139 js/ui/endSessionDialog.js:374
#: js/ui/extensionDownloader.js:166 js/ui/shellMountOperation.js:376
#: js/ui/shellMountOperation.js:386 js/ui/status/network.js:910
msgid "Cancel"
msgstr "Cancelar"
#: js/extensionPrefs/main.js:145
msgid "Remove"
msgstr "Remover"
#: js/extensionPrefs/main.js:217
msgid "translator-credits"
msgstr "Rafael Fontenelle <rafaelff@gnome.org>"
#: js/extensionPrefs/main.js:219
#| msgid "Configure GNOME Shell Extensions"
msgid "Manage your GNOME Extensions"
msgstr "Gerenciar suas extensões do GNOME"
#: js/extensionPrefs/main.js:261 js/extensionPrefs/ui/extensions-window.ui:222
msgid "Somethings gone wrong" msgid "Somethings gone wrong"
msgstr "Algo deu errado" msgstr "Algo deu errado"
#: js/extensionPrefs/main.js:109 #: js/extensionPrefs/main.js:268
msgid "" msgid ""
"Were very sorry, but theres been a problem: the settings for this " "Were very sorry, but theres been a problem: the settings for this "
"extension cant be displayed. We recommend that you report the issue to the " "extension cant be displayed. We recommend that you report the issue to the "
@@ -436,39 +471,101 @@ msgstr ""
"ser exibidas. Recomendamos que você relate o problema aos autores da " "ser exibidas. Recomendamos que você relate o problema aos autores da "
"extensão." "extensão."
#: js/extensionPrefs/main.js:116 #: js/extensionPrefs/main.js:275
msgid "Technical Details" msgid "Technical Details"
msgstr "Detalhes técnicos" msgstr "Detalhes técnicos"
#: js/extensionPrefs/main.js:151 #: js/extensionPrefs/main.js:310
msgid "Copy Error" msgid "Copy Error"
msgstr "Copiar erro" msgstr "Copiar erro"
#: js/extensionPrefs/main.js:178 #: js/extensionPrefs/main.js:337
msgid "Homepage" msgid "Homepage"
msgstr "Site" msgstr "Site"
#: js/extensionPrefs/main.js:179 #: js/extensionPrefs/main.js:338
msgid "Visit extension homepage" msgid "Visit extension homepage"
msgstr "Visita a página web da extensão" msgstr "Visita a página web da extensão"
#: js/extensionPrefs/main.js:467 #: js/extensionPrefs/main.js:449
msgid "No Extensions Installed" #, javascript-format
msgid "%d extension will be updated on next login."
msgid_plural "%d extensions will be updated on next login."
msgstr[0] "%d extensão será atualizada na próxima sessão."
msgstr[1] "%d extensões serão atualizadas na próxima sessão."
#: js/extensionPrefs/ui/extension-row.ui:100
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Descrição"
#: js/extensionPrefs/ui/extension-row.ui:123
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versão"
#: js/extensionPrefs/ui/extension-row.ui:151
msgid "Author"
msgstr "Autor"
#: js/extensionPrefs/ui/extension-row.ui:175
msgid "Website"
msgstr "Site"
#: js/extensionPrefs/ui/extension-row.ui:192
msgid "Remove…"
msgstr "Remover…"
#: js/extensionPrefs/ui/extensions-window.ui:8
msgid "Help"
msgstr "Ajuda"
#: js/extensionPrefs/ui/extensions-window.ui:12
#| msgid "List extensions"
msgid "About Extensions"
msgstr "Sobre as Extensões"
#: js/extensionPrefs/ui/extensions-window.ui:27
#| msgid ""
#| "Extensions can be installed through Software or <a href=\"https://"
#| "extensions.gnome.org\">extensions.gnome.org</a>."
msgid ""
"To find and add extensions, visit <a href=\"https://extensions.gnome.org"
"\">extensions.gnome.org</a>."
msgstr ""
"Para encontrar e adicionar extensões, visite <a href=\"https://extensions."
"gnome.org\">extensions.gnome.org</a>."
#: js/extensionPrefs/ui/extensions-window.ui:35
msgid "Warning"
msgstr "Aviso"
#: js/extensionPrefs/ui/extensions-window.ui:46
msgid ""
"Extensions can cause system issues, including performance problems. If you "
"encounter problems with your system, it is recommended to disable all "
"extensions."
msgstr ""
"Extensões podem causar problemas no sistema, incluindo problemas de "
"desempenho. Se você encontrar problemas com o seu sistema, é recomendável "
"desativar todas as extensões."
#: js/extensionPrefs/ui/extensions-window.ui:133
msgid "Manually Installed"
msgstr "Instalada manualmente"
#: js/extensionPrefs/ui/extensions-window.ui:157
#| msgid "Built-in Only"
msgid "Built-In"
msgstr "Interna"
#: js/extensionPrefs/ui/extensions-window.ui:198
#| msgid "Install Extension"
msgid "No Installed Extensions"
msgstr "Nenhuma extensão instalada" msgstr "Nenhuma extensão instalada"
#: js/extensionPrefs/main.js:477 #: js/extensionPrefs/ui/extensions-window.ui:234
msgid ""
"Extensions can be installed through Software or <a href=\"https://extensions."
"gnome.org\">extensions.gnome.org</a>."
msgstr ""
"Extensões podem ser instaladas por meio do Software ou <a href=\"https://"
"extensions.gnome.org\">extensions.gnome.org</a>."
#: js/extensionPrefs/main.js:492
msgid "Browse in Software"
msgstr "Navegar no Software"
#: js/extensionPrefs/main.js:532
msgid "" msgid ""
"Were very sorry, but it was not possible to get the list of installed " "Were very sorry, but it was not possible to get the list of installed "
"extensions. Make sure you are logged into GNOME and try again." "extensions. Make sure you are logged into GNOME and try again."
@@ -476,24 +573,21 @@ msgstr ""
"Sentimos muito, mas não foi possível obter a lista de extensões instaladas. " "Sentimos muito, mas não foi possível obter a lista de extensões instaladas. "
"Certifique-se de estar em uma sessão do GNOME e tente novamente." "Certifique-se de estar em uma sessão do GNOME e tente novamente."
#: js/gdm/authPrompt.js:174 js/ui/audioDeviceSelection.js:57 #: js/extensionPrefs/ui/extensions-window.ui:287
#: js/ui/components/networkAgent.js:129 js/ui/components/polkitAgent.js:138 #| msgid "Log Out"
#: js/ui/endSessionDialog.js:374 js/ui/extensionDownloader.js:190 msgid "Log Out…"
#: js/ui/shellMountOperation.js:381 js/ui/shellMountOperation.js:391 msgstr "Encerrar sessão…"
#: js/ui/status/network.js:910
msgid "Cancel"
msgstr "Cancelar"
#: js/gdm/authPrompt.js:188 js/gdm/authPrompt.js:241 js/gdm/authPrompt.js:476 #: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468
msgid "Next" msgid "Next"
msgstr "Próximo" msgstr "Próximo"
#: js/gdm/authPrompt.js:237 js/ui/shellMountOperation.js:385 #: js/gdm/authPrompt.js:233 js/ui/shellMountOperation.js:380
#: js/ui/unlockDialog.js:44 #: js/ui/unlockDialog.js:44
msgid "Unlock" msgid "Unlock"
msgstr "Desbloquear" msgstr "Desbloquear"
#: js/gdm/authPrompt.js:239 #: js/gdm/authPrompt.js:235
msgctxt "button" msgctxt "button"
msgid "Sign In" msgid "Sign In"
msgstr "Entrar" msgstr "Entrar"
@@ -516,8 +610,8 @@ msgstr "(ex.: usuário ou %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:899 js/ui/components/networkAgent.js:256 #: js/gdm/loginDialog.js:899 js/ui/components/networkAgent.js:234
#: js/ui/components/networkAgent.js:279 js/ui/components/networkAgent.js:297 #: js/ui/components/networkAgent.js:257 js/ui/components/networkAgent.js:275
msgid "Username: " msgid "Username: "
msgstr "Nome de usuário: " msgstr "Nome de usuário: "
@@ -595,81 +689,78 @@ msgstr "alternar usuário;trocar de usuário"
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons #. Translators: A list of keywords that match the lock orientation action, separated by semicolons
#: js/misc/systemActions.js:131 #: js/misc/systemActions.js:131
#| msgid "lock orientation;screen;rotation"
msgid "lock orientation;unlock orientation;screen;rotation" msgid "lock orientation;unlock orientation;screen;rotation"
msgstr "bloqueio de orientação;desbloqueio de orientação;tela;rotação" msgstr "bloqueio de orientação;desbloqueio de orientação;tela;rotação"
#: js/misc/systemActions.js:251 #: js/misc/systemActions.js:251
#| msgid "Lock Screen Rotation"
msgctxt "search-result" msgctxt "search-result"
msgid "Unlock Screen Rotation" msgid "Unlock Screen Rotation"
msgstr "Desbloquear rotação de tela" msgstr "Desbloquear rotação de tela"
#: js/misc/systemActions.js:252 #: js/misc/systemActions.js:252
#| msgid "Lock Screen Rotation"
msgctxt "search-result" msgctxt "search-result"
msgid "Lock Screen Rotation" msgid "Lock Screen Rotation"
msgstr "Bloquear rotação de tela" msgstr "Bloquear rotação de tela"
#: js/misc/util.js:116 #: js/misc/util.js:120
msgid "Command not found" msgid "Command not found"
msgstr "Comando não encontrado" msgstr "Comando não encontrado"
#. Replace "Error invoking GLib.shell_parse_argv: " with #. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer #. something nicer
#: js/misc/util.js:152 #: js/misc/util.js:156
msgid "Could not parse command:" msgid "Could not parse command:"
msgstr "Não foi possível analisar comando:" msgstr "Não foi possível analisar comando:"
#: js/misc/util.js:160 #: js/misc/util.js:164
#, javascript-format #, javascript-format
msgid "Execution of “%s” failed:" msgid "Execution of “%s” failed:"
msgstr "A execução de “%s” falhou:" msgstr "A execução de “%s” falhou:"
#: js/misc/util.js:177 #: js/misc/util.js:181
msgid "Just now" msgid "Just now"
msgstr "Agora mesmo" msgstr "Agora mesmo"
#: js/misc/util.js:179 #: js/misc/util.js:183
#, javascript-format #, javascript-format
msgid "%d minute ago" msgid "%d minute ago"
msgid_plural "%d minutes ago" msgid_plural "%d minutes ago"
msgstr[0] "%d minuto atrás" msgstr[0] "%d minuto atrás"
msgstr[1] "%d minutos atrás" msgstr[1] "%d minutos atrás"
#: js/misc/util.js:183 #: js/misc/util.js:187
#, javascript-format #, javascript-format
msgid "%d hour ago" msgid "%d hour ago"
msgid_plural "%d hours ago" msgid_plural "%d hours ago"
msgstr[0] "%d hora atrás" msgstr[0] "%d hora atrás"
msgstr[1] "%d horas atrás" msgstr[1] "%d horas atrás"
#: js/misc/util.js:187 #: js/misc/util.js:191
msgid "Yesterday" msgid "Yesterday"
msgstr "Ontem" msgstr "Ontem"
#: js/misc/util.js:189 #: js/misc/util.js:193
#, javascript-format #, javascript-format
msgid "%d day ago" msgid "%d day ago"
msgid_plural "%d days ago" msgid_plural "%d days ago"
msgstr[0] "%d dia atrás" msgstr[0] "%d dia atrás"
msgstr[1] "%d dias atrás" msgstr[1] "%d dias atrás"
#: js/misc/util.js:193 #: js/misc/util.js:197
#, javascript-format #, javascript-format
msgid "%d week ago" msgid "%d week ago"
msgid_plural "%d weeks ago" msgid_plural "%d weeks ago"
msgstr[0] "%d semana atrás" msgstr[0] "%d semana atrás"
msgstr[1] "%d semanas atrás" msgstr[1] "%d semanas atrás"
#: js/misc/util.js:197 #: js/misc/util.js:201
#, javascript-format #, javascript-format
msgid "%d month ago" msgid "%d month ago"
msgid_plural "%d months ago" msgid_plural "%d months ago"
msgstr[0] "%d mês atrás" msgstr[0] "%d mês atrás"
msgstr[1] "%d meses atrás" msgstr[1] "%d meses atrás"
#: js/misc/util.js:200 #: js/misc/util.js:204
#, javascript-format #, javascript-format
msgid "%d year ago" msgid "%d year ago"
msgid_plural "%d years ago" msgid_plural "%d years ago"
@@ -677,20 +768,20 @@ msgstr[0] "%d ano atrás"
msgstr[1] "%d anos atrás" msgstr[1] "%d anos atrás"
#. Translators: Time in 24h format #. Translators: Time in 24h format
#: js/misc/util.js:233 #: js/misc/util.js:237
msgid "%H%M" msgid "%H%M"
msgstr "%H%M" msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a #. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" #. time string in 24h format. i.e. "Yesterday, 14:30"
#: js/misc/util.js:239 #: js/misc/util.js:243
#, no-c-format #, no-c-format
msgid "Yesterday, %H%M" msgid "Yesterday, %H%M"
msgstr "Ontem, %H%M" msgstr "Ontem, %H%M"
#. Translators: this is the week day name followed by a time #. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" #. string in 24h format. i.e. "Monday, 14:30"
#: js/misc/util.js:245 #: js/misc/util.js:249
#, no-c-format #, no-c-format
msgid "%A, %H%M" msgid "%A, %H%M"
msgstr "%A, %H%M" msgstr "%A, %H%M"
@@ -698,7 +789,7 @@ msgstr "%A, %H%M"
#. Translators: this is the month name and day number #. Translators: this is the month name and day number
#. followed by a time string in 24h format. #. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" #. i.e. "May 25, 14:30"
#: js/misc/util.js:251 #: js/misc/util.js:255
#, no-c-format #, no-c-format
msgid "%B %-d, %H%M" msgid "%B %-d, %H%M"
msgstr "%-d de %B, %H%M" msgstr "%-d de %B, %H%M"
@@ -706,7 +797,7 @@ msgstr "%-d de %B, %H%M"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format. #. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" #. i.e. "May 25 2012, 14:30"
#: js/misc/util.js:257 #: js/misc/util.js:261
#, no-c-format #, no-c-format
msgid "%B %-d %Y, %H%M" msgid "%B %-d %Y, %H%M"
msgstr "%-d de %B de %Y, %H%M" msgstr "%-d de %B de %Y, %H%M"
@@ -714,20 +805,20 @@ msgstr "%-d de %B de %Y, %H%M"
#. Show only the time if date is on today #. Show only the time if date is on today
#. eslint-disable-line no-lonely-if #. eslint-disable-line no-lonely-if
#. Translators: Time in 12h format #. Translators: Time in 12h format
#: js/misc/util.js:262 #: js/misc/util.js:266
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:268 #: js/misc/util.js:272
#, no-c-format #, no-c-format
msgid "Yesterday, %l%M %p" msgid "Yesterday, %l%M %p"
msgstr "Ontem, %l%M %p" msgstr "Ontem, %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:274 #: js/misc/util.js:278
#, no-c-format #, no-c-format
msgid "%A, %l%M %p" msgid "%A, %l%M %p"
msgstr "%A, %l%M %p" msgstr "%A, %l%M %p"
@@ -735,7 +826,7 @@ 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:280 #: js/misc/util.js:284
#, no-c-format #, no-c-format
msgid "%B %-d, %l%M %p" msgid "%B %-d, %l%M %p"
msgstr "%-d de %B, %l%M %p" msgstr "%-d de %B, %l%M %p"
@@ -743,17 +834,17 @@ msgstr "%-d de %B, %l%M %p"
#. Translators: this is the month name, day number, year #. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format. #. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm" #. i.e. "May 25 2012, 2:30 pm"
#: js/misc/util.js:286 #: js/misc/util.js:290
#, no-c-format #, no-c-format
msgid "%B %-d %Y, %l%M %p" msgid "%B %-d %Y, %l%M %p"
msgstr "%-d de %B de %Y, %l%M %p" msgstr "%-d de %B de %Y, %l%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login window #. TRANSLATORS: this is the title of the wifi captive portal login window
#: js/portalHelper/main.js:40 #: js/portalHelper/main.js:42
msgid "Hotspot Login" msgid "Hotspot Login"
msgstr "Autenticação de ponto de acesso" msgstr "Autenticação de ponto de acesso"
#: js/portalHelper/main.js:86 #: js/portalHelper/main.js:88
msgid "" msgid ""
"Your connection to this hotspot login is not secure. Passwords or other " "Your connection to this hotspot login is not secure. Passwords or other "
"information you enter on this page can be viewed by people nearby." "information you enter on this page can be viewed by people nearby."
@@ -772,44 +863,44 @@ msgstr "Negar acesso"
msgid "Grant Access" msgid "Grant Access"
msgstr "Conceder acesso" msgstr "Conceder acesso"
#: js/ui/appDisplay.js:904 #: js/ui/appDisplay.js:906
msgid "Unnamed Folder" msgid "Unnamed Folder"
msgstr "Pasta sem nome" msgstr "Pasta sem nome"
#: js/ui/appDisplay.js:927 #: js/ui/appDisplay.js:929
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Aplicativos usados frequentemente vão aparecer aqui" msgstr "Aplicativos usados frequentemente vão aparecer aqui"
#: js/ui/appDisplay.js:1062 #: js/ui/appDisplay.js:1064
msgid "Frequent" msgid "Frequent"
msgstr "Frequente" msgstr "Frequente"
#: js/ui/appDisplay.js:1069 #: js/ui/appDisplay.js:1071
msgid "All" msgid "All"
msgstr "Todos" msgstr "Todos"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2452 js/ui/panel.js:75 #: js/ui/appDisplay.js:2454 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Janelas abertas" msgstr "Janelas abertas"
#: js/ui/appDisplay.js:2472 js/ui/panel.js:82 #: js/ui/appDisplay.js:2474 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Nova janela" msgstr "Nova janela"
#: js/ui/appDisplay.js:2483 #: js/ui/appDisplay.js:2485
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Inicia usando placa de vídeo dedicada" msgstr "Inicia usando placa de vídeo dedicada"
#: js/ui/appDisplay.js:2511 js/ui/dash.js:239 #: js/ui/appDisplay.js:2513 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Remover dos favoritos" msgstr "Remover dos favoritos"
#: js/ui/appDisplay.js:2517 #: js/ui/appDisplay.js:2519
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Adicionar aos favoritos" msgstr "Adicionar aos favoritos"
#: js/ui/appDisplay.js:2527 js/ui/panel.js:93 #: js/ui/appDisplay.js:2529 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Mostrar detalhes" msgstr "Mostrar detalhes"
@@ -1027,55 +1118,48 @@ msgstr "A versão do udisks instalado não possui suporte à configuração do P
msgid "Open with %s" msgid "Open with %s"
msgstr "Abrir com %s" msgstr "Abrir com %s"
#: js/ui/components/keyring.js:70 js/ui/components/polkitAgent.js:278 #: js/ui/components/networkAgent.js:89
msgid "Password:"
msgstr "Senha:"
#: js/ui/components/keyring.js:104
msgid "Type again:"
msgstr "Digite novamente:"
#: js/ui/components/networkAgent.js:115
msgid "" msgid ""
"Alternatively you can connect by pushing the “WPS” button on your router." "Alternatively you can connect by pushing the “WPS” button on your router."
msgstr "" msgstr ""
"Alternativamente, você pode conectar pressionando o botão “WPS” em seu " "Alternativamente, você pode conectar pressionando o botão “WPS” em seu "
"roteador." "roteador."
#: js/ui/components/networkAgent.js:123 js/ui/status/network.js:223 #: js/ui/components/networkAgent.js:101 js/ui/status/network.js:223
#: js/ui/status/network.js:314 js/ui/status/network.js:913 #: js/ui/status/network.js:314 js/ui/status/network.js:913
msgid "Connect" msgid "Connect"
msgstr "Conectar" msgstr "Conectar"
#. Cisco LEAP #. Cisco LEAP
#: js/ui/components/networkAgent.js:224 js/ui/components/networkAgent.js:236 #: js/ui/components/networkAgent.js:202 js/ui/components/networkAgent.js:214
#: js/ui/components/networkAgent.js:260 js/ui/components/networkAgent.js:281 #: js/ui/components/networkAgent.js:238 js/ui/components/networkAgent.js:259
#: js/ui/components/networkAgent.js:301 js/ui/components/networkAgent.js:311 #: js/ui/components/networkAgent.js:279 js/ui/components/networkAgent.js:289
msgid "Password: " msgid "Password: "
msgstr "Senha: " msgstr "Senha: "
#. static WEP #. static WEP
#: js/ui/components/networkAgent.js:229 #: js/ui/components/networkAgent.js:207
msgid "Key: " msgid "Key: "
msgstr "Chave: " msgstr "Chave: "
#: js/ui/components/networkAgent.js:264 js/ui/components/networkAgent.js:287 #: js/ui/components/networkAgent.js:242 js/ui/components/networkAgent.js:265
msgid "Private key password: " msgid "Private key password: "
msgstr "Senha da chave privada: " msgstr "Senha da chave privada: "
#: js/ui/components/networkAgent.js:285 #: js/ui/components/networkAgent.js:263
msgid "Identity: " msgid "Identity: "
msgstr "Identidade: " msgstr "Identidade: "
#: js/ui/components/networkAgent.js:299 #: js/ui/components/networkAgent.js:277
msgid "Service: " msgid "Service: "
msgstr "Serviço: " msgstr "Serviço: "
#: js/ui/components/networkAgent.js:328 js/ui/components/networkAgent.js:703 #: js/ui/components/networkAgent.js:306 js/ui/components/networkAgent.js:334
msgid "Authentication required by wireless network" #: js/ui/components/networkAgent.js:681 js/ui/components/networkAgent.js:702
msgstr "Autenticação requisitada pela rede sem fio" msgid "Authentication required"
msgstr "Autenticação necessária"
#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:704 #: js/ui/components/networkAgent.js:307 js/ui/components/networkAgent.js:682
#, javascript-format #, javascript-format
msgid "" msgid ""
"Passwords or encryption keys are required to access the wireless network " "Passwords or encryption keys are required to access the wireless network "
@@ -1084,58 +1168,54 @@ msgstr ""
"Senhas ou chaves criptografadas são necessárias para acessar a rede sem fio " "Senhas ou chaves criptografadas são necessárias para acessar a rede sem fio "
"“%s”." "“%s”."
#: js/ui/components/networkAgent.js:333 js/ui/components/networkAgent.js:708 #: js/ui/components/networkAgent.js:311 js/ui/components/networkAgent.js:686
msgid "Wired 802.1X authentication" msgid "Wired 802.1X authentication"
msgstr "Autenticação 802.1X cabeada" msgstr "Autenticação 802.1X cabeada"
#: js/ui/components/networkAgent.js:335 #: js/ui/components/networkAgent.js:313
msgid "Network name: " msgid "Network name: "
msgstr "Nome da rede: " msgstr "Nome da rede: "
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:712 #: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:690
msgid "DSL authentication" msgid "DSL authentication"
msgstr "Autenticação DSL" msgstr "Autenticação DSL"
#: js/ui/components/networkAgent.js:347 js/ui/components/networkAgent.js:717 #: js/ui/components/networkAgent.js:325 js/ui/components/networkAgent.js:695
msgid "PIN code required" msgid "PIN code required"
msgstr "Código PIN requisitado" msgstr "Código PIN requisitado"
#: js/ui/components/networkAgent.js:348 js/ui/components/networkAgent.js:718 #: js/ui/components/networkAgent.js:326 js/ui/components/networkAgent.js:696
msgid "PIN code is needed for the mobile broadband device" msgid "PIN code is needed for the mobile broadband device"
msgstr "O código PIN é necessário para o dispositivo móvel de banda larga" msgstr "O código PIN é necessário para o dispositivo móvel de banda larga"
#: js/ui/components/networkAgent.js:349 #: js/ui/components/networkAgent.js:327
msgid "PIN: " msgid "PIN: "
msgstr "PIN: " msgstr "PIN: "
#: js/ui/components/networkAgent.js:356 js/ui/components/networkAgent.js:724 #: js/ui/components/networkAgent.js:335 js/ui/components/networkAgent.js:687
msgid "Mobile broadband network password" #: js/ui/components/networkAgent.js:691 js/ui/components/networkAgent.js:703
msgstr "Senha da rede de banda larga móvel" #: js/ui/components/networkAgent.js:707
#: js/ui/components/networkAgent.js:357 js/ui/components/networkAgent.js:709
#: js/ui/components/networkAgent.js:713 js/ui/components/networkAgent.js:725
#: js/ui/components/networkAgent.js:729
#, javascript-format #, javascript-format
msgid "A password is required to connect to “%s”." msgid "A password is required to connect to “%s”."
msgstr "Uma senha é necessária para se conectar a “%s”." msgstr "Uma senha é necessária para se conectar a “%s”."
#: js/ui/components/networkAgent.js:692 js/ui/status/network.js:1688 #: js/ui/components/networkAgent.js:670 js/ui/status/network.js:1688
msgid "Network Manager" msgid "Network Manager"
msgstr "Gerenciador de rede" msgstr "Gerenciador de rede"
#: js/ui/components/networkAgent.js:728 #: js/ui/components/networkAgent.js:706
msgid "VPN password" msgid "VPN password"
msgstr "Senha de VPN" msgstr "Senha de VPN"
#: js/ui/components/polkitAgent.js:41 #: js/ui/components/polkitAgent.js:39
msgid "Authentication Required" msgid "Authentication Required"
msgstr "Autenticação necessária" msgstr "Autenticação necessária"
#: js/ui/components/polkitAgent.js:81 #: js/ui/components/polkitAgent.js:80
msgid "Administrator" msgid "Administrator"
msgstr "Administrador" msgstr "Administrador"
#: js/ui/components/polkitAgent.js:141 #: js/ui/components/polkitAgent.js:142
msgid "Authenticate" msgid "Authenticate"
msgstr "Autenticação" msgstr "Autenticação"
@@ -1143,10 +1223,15 @@ msgstr "Autenticação"
#. * 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:259 js/ui/shellMountOperation.js:365 #: js/ui/components/polkitAgent.js:254 js/ui/shellMountOperation.js:402
msgid "Sorry, that didnt work. Please try again." msgid "Sorry, that didnt work. Please try again."
msgstr "Desculpe, isto não funcionou. Por favor, tente novamente." msgstr "Desculpe, isto não funcionou. Por favor, tente novamente."
#: js/ui/components/polkitAgent.js:277 js/ui/shellMountOperation.js:326
#| msgid "Remember Password"
msgid "Enter Password…"
msgstr "Lembrar senha…"
#. 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:787 #: js/ui/components/telepathyClient.js:787
@@ -1362,34 +1447,39 @@ msgstr "%s (remoto)"
msgid "%s (console)" msgid "%s (console)"
msgstr "%s (console)" msgstr "%s (console)"
#: js/ui/extensionDownloader.js:194 #: js/ui/extensionDownloader.js:170
msgid "Install" msgid "Install"
msgstr "Instalar" msgstr "Instalar"
#: js/ui/extensionDownloader.js:200 #: js/ui/extensionDownloader.js:176
#| msgid "Uninstall extension"
msgid "Install Extension" msgid "Install Extension"
msgstr "Instalar extensão" msgstr "Instalar extensão"
#: js/ui/extensionDownloader.js:201 #: js/ui/extensionDownloader.js:177
#, javascript-format #, javascript-format
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Baixar e instalar “%s” de extensions.gnome.org?" msgstr "Baixar e instalar “%s” de extensions.gnome.org?"
#: js/ui/extensionSystem.js:228
#| msgid "No Extensions Installed"
msgid "Extension Updates Available"
msgstr "Atualizações de extensões disponíveis"
#: js/ui/extensionSystem.js:229
msgid "Extension updates are ready to be installed."
msgstr "Atualizações de extensões estão prontas para serem instaladas."
#: js/ui/inhibitShortcutsDialog.js:79 #: js/ui/inhibitShortcutsDialog.js:79
#| msgid "%s wants to inhibit shortcuts"
msgid "Allow inhibiting shortcuts" msgid "Allow inhibiting shortcuts"
msgstr "Permitir inibir atalhos" msgstr "Permitir inibir atalhos"
#. Translators: %s is an application name like "Settings" #. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:82 #: js/ui/inhibitShortcutsDialog.js:82
#, javascript-format #, javascript-format
#| msgid "Application wants to inhibit shortcuts"
msgid "The application %s wants to inhibit shortcuts" msgid "The application %s wants to inhibit shortcuts"
msgstr "O aplicativo %s deseja inibir atalhos" msgstr "O aplicativo %s deseja inibir atalhos"
#: js/ui/inhibitShortcutsDialog.js:83 #: js/ui/inhibitShortcutsDialog.js:83
#| msgid "Application wants to inhibit shortcuts"
msgid "An application wants to inhibit shortcuts" msgid "An application wants to inhibit shortcuts"
msgstr "Um aplicativo deseja inibir atalhos" msgstr "Um aplicativo deseja inibir atalhos"
@@ -1638,12 +1728,10 @@ msgid "Top Bar"
msgstr "Barra superior" msgstr "Barra superior"
#: js/ui/runDialog.js:58 #: js/ui/runDialog.js:58
#| msgid "Enter a Command"
msgid "Run a Command" msgid "Run a Command"
msgstr "Executar um comando" msgstr "Executar um comando"
#: js/ui/runDialog.js:73 #: js/ui/runDialog.js:73
#| msgid "Press Esc to exit"
msgid "Press ESC to close" msgid "Press ESC to close"
msgstr "Pressione Esc para fechar" msgstr "Pressione Esc para fechar"
@@ -1675,7 +1763,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d nova notificação" msgstr[0] "%d nova notificação"
msgstr[1] "%d novas notificações" msgstr[1] "%d novas notificações"
#: js/ui/screenShield.js:454 js/ui/status/system.js:98 #: js/ui/screenShield.js:454 js/ui/status/system.js:103
msgid "Lock" msgid "Lock"
msgstr "Bloquear" msgstr "Bloquear"
@@ -1733,20 +1821,20 @@ msgstr "Ocultar texto"
msgid "Caps lock is on." msgid "Caps lock is on."
msgstr "Caps lock está ligado." msgstr "Caps lock está ligado."
#: js/ui/shellMountOperation.js:287 #: js/ui/shellMountOperation.js:285
msgid "Hidden Volume" msgid "Hidden Volume"
msgstr "Volume oculto" msgstr "Volume oculto"
#: js/ui/shellMountOperation.js:290 #: js/ui/shellMountOperation.js:288
msgid "Windows System Volume" msgid "Windows System Volume"
msgstr "Volume de sistema Windows" msgstr "Volume de sistema Windows"
#: js/ui/shellMountOperation.js:293 #: js/ui/shellMountOperation.js:291
msgid "Uses Keyfiles" msgid "Uses Keyfiles"
msgstr "Usa arquivos de chave" msgstr "Usa arquivos de chave"
#. Translators: %s is the Disks application #. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:299 #: js/ui/shellMountOperation.js:298
#, javascript-format #, javascript-format
msgid "" msgid ""
"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead." "To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
@@ -1755,35 +1843,32 @@ msgstr ""
"%s</i>." "%s</i>."
#: js/ui/shellMountOperation.js:306 #: js/ui/shellMountOperation.js:306
msgid "PIM Number" #| msgid "PIM Number"
msgstr "Número PIM" msgid "Enter PIM Number…"
msgstr "Insira um número PIM…"
#: js/ui/shellMountOperation.js:325 #: js/ui/shellMountOperation.js:365
msgid "The PIM must be a number or empty."
msgstr "O PIM deve ser um número ou vazio."
#: js/ui/shellMountOperation.js:336
msgid "Password"
msgstr "Senha"
#: js/ui/shellMountOperation.js:372
msgid "Remember Password" msgid "Remember Password"
msgstr "Lembrar senha" msgstr "Lembrar senha"
#. Translators: %s is the Disks application #. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:396 #: js/ui/shellMountOperation.js:391
#, javascript-format #, javascript-format
msgid "Open %s" msgid "Open %s"
msgstr "Abrir o %s" msgstr "Abrir o %s"
#: js/ui/shellMountOperation.js:423
msgid "The PIM must be a number or empty."
msgstr "O PIM deve ser um número ou vazio."
#. Translators: %s is the Disks application #. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:468 #: js/ui/shellMountOperation.js:469
#, javascript-format #, javascript-format
msgid "Unable to start %s" msgid "Unable to start %s"
msgstr "Não foi possível iniciar o %s" msgstr "Não foi possível iniciar o %s"
#. Translators: %s is the Disks application #. Translators: %s is the Disks application
#: js/ui/shellMountOperation.js:470 #: js/ui/shellMountOperation.js:471
#, javascript-format #, javascript-format
msgid "Couldnt find the %s application" msgid "Couldnt find the %s application"
msgstr "Não foi possível localizar o aplicativo %s" msgstr "Não foi possível localizar o aplicativo %s"
@@ -1919,7 +2004,6 @@ msgstr "Permitir acesso a localização"
#. Translators: %s is an application name #. Translators: %s is an application name
#: js/ui/status/location.js:357 #: js/ui/status/location.js:357
#, javascript-format #, javascript-format
#| msgid "Give %s access to your location?"
msgid "The app %s wants to access your location" msgid "The app %s wants to access your location"
msgstr "O aplicativo %s deseja acesso a sua localização" msgstr "O aplicativo %s deseja acesso a sua localização"
@@ -2201,23 +2285,23 @@ msgstr "Desativar"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Modo avião ligado" msgstr "Modo avião ligado"
#: js/ui/status/system.js:111 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Desligar / encerrar sessão" msgstr "Desligar / encerrar sessão"
#: js/ui/status/system.js:114 #: js/ui/status/system.js:119
msgid "Log Out" msgid "Log Out"
msgstr "Encerrar sessão" msgstr "Encerrar sessão"
#: js/ui/status/system.js:126 #: js/ui/status/system.js:131
msgid "Switch User…" msgid "Switch User…"
msgstr "Alternar usuário…" msgstr "Alternar usuário…"
#: js/ui/status/system.js:140 #: js/ui/status/system.js:145
msgid "Suspend" msgid "Suspend"
msgstr "Suspender" msgstr "Suspender"
#: js/ui/status/system.js:152 #: js/ui/status/system.js:157
msgid "Power Off…" msgid "Power Off…"
msgstr "Desligar…" msgstr "Desligar…"
@@ -2316,22 +2400,24 @@ msgstr "“%s” está pronto"
# Título de janela de confirmação; Se grande demais, pode ser exibida com "..." # Título de janela de confirmação; Se grande demais, pode ser exibida com "..."
# Vide: https://bugzilla.gnome.org/show_bug.cgi?id=786331 # Vide: https://bugzilla.gnome.org/show_bug.cgi?id=786331
#: js/ui/windowManager.js:54 #. Translators: This string should be shorter than 30 characters
msgid "Do you want to keep these display settings?" #: js/ui/windowManager.js:55
msgstr "Deseja manter essas configurações da tela?" #| msgid "Do you want to keep these display settings?"
msgid "Keep these display settings?"
msgstr "Manter essas configurações da tela?"
#. Translators: this and the following message should be limited in length, #. Translators: this and the following message should be limited in length,
#. to avoid ellipsizing the labels. #. to avoid ellipsizing the labels.
#. #.
#: js/ui/windowManager.js:68 #: js/ui/windowManager.js:64
msgid "Revert Settings" msgid "Revert Settings"
msgstr "Reverter configurações" msgstr "Reverter configurações"
#: js/ui/windowManager.js:71 #: js/ui/windowManager.js:67
msgid "Keep Changes" msgid "Keep Changes"
msgstr "Manter alterações" msgstr "Manter alterações"
#: js/ui/windowManager.js:89 #: js/ui/windowManager.js:85
#, 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"
@@ -2340,7 +2426,7 @@ msgstr[1] "Alterações nas configurações serão revertidas em %d segundos"
#. 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:546 #: js/ui/windowManager.js:542
#, javascript-format #, javascript-format
msgid "%d × %d" msgid "%d × %d"
msgstr "%d × %d" msgstr "%d × %d"
@@ -2485,11 +2571,6 @@ msgstr ""
"Descrição é uma explicação uma só frase do que sua extensão faz.\n" "Descrição é uma explicação uma só frase do que sua extensão faz.\n"
"Exemplos são: %s" "Exemplos são: %s"
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Descrição"
#: subprojects/extensions-tool/src/command-create.c:222 #: subprojects/extensions-tool/src/command-create.c:222
msgid "" msgid ""
"UUID is a globally-unique identifier for your extension.\n" "UUID is a globally-unique identifier for your extension.\n"
@@ -2692,10 +2773,6 @@ msgstr "URL"
msgid "Original author" msgid "Original author"
msgstr "Autor original" msgstr "Autor original"
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Versão"
#: subprojects/extensions-tool/src/main.c:188 #: subprojects/extensions-tool/src/main.c:188
msgid "State" msgid "State"
msgstr "Estado" msgstr "Estado"
@@ -2798,6 +2875,24 @@ msgstr[1] "%u entradas"
msgid "System Sounds" msgid "System Sounds"
msgstr "Sons do sistema" msgstr "Sons do sistema"
#~ msgid "Browse in Software"
#~ msgstr "Navegar no Software"
#~ msgid "Password:"
#~ msgstr "Senha:"
#~ msgid "Type again:"
#~ msgstr "Digite novamente:"
#~ msgid "Authentication required by wireless network"
#~ msgstr "Autenticação requisitada pela rede sem fio"
#~ msgid "Mobile broadband network password"
#~ msgstr "Senha da rede de banda larga móvel"
#~ msgid "Password"
#~ msgstr "Senha"
#~ msgctxt "search-result" #~ msgctxt "search-result"
#~ msgid "Lock Orientation" #~ msgid "Lock Orientation"
#~ msgstr "Bloquear orientação" #~ msgstr "Bloquear orientação"
@@ -2913,9 +3008,6 @@ msgstr "Sons do sistema"
#~ msgstr[0] "%d dispositivo conectado" #~ msgstr[0] "%d dispositivo conectado"
#~ msgstr[1] "%d dispositivos conectados" #~ msgstr[1] "%d dispositivos conectados"
#~ msgid "Authentication required"
#~ msgstr "Autenticação necessária"
# UPS significa uninterruptible power supply, mas no Brasil vejo usando mais # UPS significa uninterruptible power supply, mas no Brasil vejo usando mais
# "No-break", que é a mesma coisa, então optei pela segunda. -- Rafael Fontenelle # "No-break", que é a mesma coisa, então optei pela segunda. -- Rafael Fontenelle
#~ msgid "UPS" #~ msgid "UPS"

208
po/sv.po
View File

@@ -11,8 +11,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell\n" "Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2020-02-01 07:15+0000\n" "POT-Creation-Date: 2020-02-06 19:01+0000\n"
"PO-Revision-Date: 2020-02-02 15:53+0100\n" "PO-Revision-Date: 2020-02-06 23:56+0100\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n" "Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
"Language: sv\n" "Language: sv\n"
@@ -46,12 +46,12 @@ msgstr "Visa alla program"
msgid "Open the application menu" msgid "Open the application menu"
msgstr "Öppna programmenyn" msgstr "Öppna programmenyn"
#: data/gnome-shell-extension-prefs.desktop.in.in:4 #: data/org.gnome.Extensions.desktop.in.in:4 js/extensionPrefs/main.js:218
#: js/extensionPrefs/main.js:209 #: js/extensionPrefs/ui/extensions-window.ui:61
msgid "Shell Extensions" msgid "Extensions"
msgstr "Skaltillägg" msgstr "Tillägg"
#: data/gnome-shell-extension-prefs.desktop.in.in:5 #: data/org.gnome.Extensions.desktop.in.in:7
msgid "Configure GNOME Shell Extensions" msgid "Configure GNOME Shell Extensions"
msgstr "Konfigurera tillägg för GNOME-skal" msgstr "Konfigurera tillägg för GNOME-skal"
@@ -396,11 +396,48 @@ msgstr "Fördröj fokusändringar i musläge tills pekare slutar röra sig"
msgid "Network Login" msgid "Network Login"
msgstr "Nätverksinloggning" msgstr "Nätverksinloggning"
#: js/extensionPrefs/main.js:102 js/extensionPrefs/main.js:525 #: js/extensionPrefs/main.js:140
#, javascript-format
msgid "Remove “%s”?"
msgstr "Ta bort ”%s”?"
#: js/extensionPrefs/main.js:141
msgid ""
"If you remove the extension, you need to return to download it if you want "
"to enable it again"
msgstr ""
"Om du tar bort tillägget kommer du att behöva återvända för att hämta det om "
"du vill aktivera det igen"
#: js/extensionPrefs/main.js:144 js/gdm/authPrompt.js:170
#: js/ui/audioDeviceSelection.js:57 js/ui/components/networkAgent.js:107
#: js/ui/components/polkitAgent.js:139 js/ui/endSessionDialog.js:374
#: js/ui/extensionDownloader.js:166 js/ui/shellMountOperation.js:376
#: js/ui/shellMountOperation.js:386 js/ui/status/network.js:910
msgid "Cancel"
msgstr "Avbryt"
#: js/extensionPrefs/main.js:145
msgid "Remove"
msgstr "Ta bort"
#: js/extensionPrefs/main.js:217
msgid "translator-credits"
msgstr ""
"Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"\n"
"Skicka synpunkter på översättningen till\n"
"<tp-sv@listor.tp-sv.se>."
#: js/extensionPrefs/main.js:219
msgid "Manage your GNOME Extensions"
msgstr "Hantera dina GNOME-tillägg"
#: js/extensionPrefs/main.js:261 js/extensionPrefs/ui/extensions-window.ui:222
msgid "Somethings gone wrong" msgid "Somethings gone wrong"
msgstr "Något har gått fel" msgstr "Något har gått fel"
#: js/extensionPrefs/main.js:109 #: js/extensionPrefs/main.js:268
msgid "" msgid ""
"Were very sorry, but theres been a problem: the settings for this " "Were very sorry, but theres been a problem: the settings for this "
"extension cant be displayed. We recommend that you report the issue to the " "extension cant be displayed. We recommend that you report the issue to the "
@@ -410,39 +447,94 @@ msgstr ""
"tillägg kan inte visas. Vi rekommenderar att du rapporterar problemet till " "tillägg kan inte visas. Vi rekommenderar att du rapporterar problemet till "
"tilläggets skapare." "tilläggets skapare."
#: js/extensionPrefs/main.js:116 #: js/extensionPrefs/main.js:275
msgid "Technical Details" msgid "Technical Details"
msgstr "Tekniska detaljer" msgstr "Tekniska detaljer"
#: js/extensionPrefs/main.js:151 #: js/extensionPrefs/main.js:310
msgid "Copy Error" msgid "Copy Error"
msgstr "Kopiera fel" msgstr "Kopiera fel"
#: js/extensionPrefs/main.js:178 #: js/extensionPrefs/main.js:337
msgid "Homepage" msgid "Homepage"
msgstr "Webbsida" msgstr "Webbsida"
#: js/extensionPrefs/main.js:179 #: js/extensionPrefs/main.js:338
msgid "Visit extension homepage" msgid "Visit extension homepage"
msgstr "Besök webbsida för tillägg" msgstr "Besök webbsida för tillägg"
#: js/extensionPrefs/main.js:467 #: js/extensionPrefs/main.js:449
msgid "No Extensions Installed" #, javascript-format
msgstr "Inga tillägg installerade" msgid "%d extension will be updated on next login."
msgid_plural "%d extensions will be updated on next login."
msgstr[0] "%d inlägg kommer att uppdateras vid nästa inloggning."
msgstr[1] "%d inlägg kommer att uppdateras vid nästa inloggning."
#: js/extensionPrefs/main.js:477 #: js/extensionPrefs/ui/extension-row.ui:100
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Beskrivning"
#: js/extensionPrefs/ui/extension-row.ui:123
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Version"
#: js/extensionPrefs/ui/extension-row.ui:151
msgid "Author"
msgstr "Upphovsman"
#: js/extensionPrefs/ui/extension-row.ui:175
msgid "Website"
msgstr "Webbplats"
#: js/extensionPrefs/ui/extension-row.ui:192
msgid "Remove…"
msgstr "Ta bort…"
#: js/extensionPrefs/ui/extensions-window.ui:8
msgid "Help"
msgstr "Hjälp"
#: js/extensionPrefs/ui/extensions-window.ui:12
msgid "About Extensions"
msgstr "Om tillägg"
#: js/extensionPrefs/ui/extensions-window.ui:27
msgid "" msgid ""
"Extensions can be installed through Software or <a href=\"https://extensions." "To find and add extensions, visit <a href=\"https://extensions.gnome.org"
"gnome.org\">extensions.gnome.org</a>." "\">extensions.gnome.org</a>."
msgstr "" msgstr ""
"Tillägg kan installeras genom Programvara eller <a href=\"https://extensions." "För att hitta och lägga till tillägg, besök <a href=\"https://extensions."
"gnome.org\">extensions.gnome.org</a>." "gnome.org\">extensions.gnome.org</a>."
#: js/extensionPrefs/main.js:492 #: js/extensionPrefs/ui/extensions-window.ui:35
msgid "Browse in Software" msgid "Warning"
msgstr "Bläddra i Programvara" msgstr "Varning"
#: js/extensionPrefs/main.js:532 #: js/extensionPrefs/ui/extensions-window.ui:46
msgid ""
"Extensions can cause system issues, including performance problems. If you "
"encounter problems with your system, it is recommended to disable all "
"extensions."
msgstr ""
"Tillägg kan orsaka systemproblem, även prestandaproblem. Om du stöter på "
"problem med ditt system så rekommenderas du att inaktivera alla tillägg."
#: js/extensionPrefs/ui/extensions-window.ui:133
msgid "Manually Installed"
msgstr "Manuellt installerade"
#: js/extensionPrefs/ui/extensions-window.ui:157
msgid "Built-In"
msgstr "Inbyggda"
#: js/extensionPrefs/ui/extensions-window.ui:198
msgid "No Installed Extensions"
msgstr "Inga installerade tillägg"
#: js/extensionPrefs/ui/extensions-window.ui:234
msgid "" msgid ""
"Were very sorry, but it was not possible to get the list of installed " "Were very sorry, but it was not possible to get the list of installed "
"extensions. Make sure you are logged into GNOME and try again." "extensions. Make sure you are logged into GNOME and try again."
@@ -450,13 +542,9 @@ msgstr ""
"Vi är ledsna, men det var inte möjligt att erhålla listan över installerade " "Vi är ledsna, men det var inte möjligt att erhålla listan över installerade "
"tillägg. Säkerställ att du är inloggad i GNOME och försök igen." "tillägg. Säkerställ att du är inloggad i GNOME och försök igen."
#: js/gdm/authPrompt.js:170 js/ui/audioDeviceSelection.js:57 #: js/extensionPrefs/ui/extensions-window.ui:287
#: js/ui/components/networkAgent.js:107 js/ui/components/polkitAgent.js:139 msgid "Log Out…"
#: js/ui/endSessionDialog.js:374 js/ui/extensionDownloader.js:166 msgstr "Logga ut…"
#: js/ui/shellMountOperation.js:376 js/ui/shellMountOperation.js:386
#: js/ui/status/network.js:910
msgid "Cancel"
msgstr "Avbryt"
#: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468 #: js/gdm/authPrompt.js:184 js/gdm/authPrompt.js:237 js/gdm/authPrompt.js:468
msgid "Next" msgid "Next"
@@ -745,44 +833,44 @@ msgstr "Neka åtkomst"
msgid "Grant Access" msgid "Grant Access"
msgstr "Bevilja åtkomst" msgstr "Bevilja åtkomst"
#: js/ui/appDisplay.js:904 #: js/ui/appDisplay.js:906
msgid "Unnamed Folder" msgid "Unnamed Folder"
msgstr "Namnlös mapp" msgstr "Namnlös mapp"
#: js/ui/appDisplay.js:927 #: js/ui/appDisplay.js:929
msgid "Frequently used applications will appear here" msgid "Frequently used applications will appear here"
msgstr "Ofta använda program kommer visas här" msgstr "Ofta använda program kommer visas här"
#: js/ui/appDisplay.js:1062 #: js/ui/appDisplay.js:1064
msgid "Frequent" msgid "Frequent"
msgstr "Ofta använda" msgstr "Ofta använda"
#: js/ui/appDisplay.js:1069 #: js/ui/appDisplay.js:1071
msgid "All" msgid "All"
msgstr "Alla" msgstr "Alla"
#. Translators: This is the heading of a list of open windows #. Translators: This is the heading of a list of open windows
#: js/ui/appDisplay.js:2452 js/ui/panel.js:75 #: js/ui/appDisplay.js:2454 js/ui/panel.js:75
msgid "Open Windows" msgid "Open Windows"
msgstr "Öppna fönster" msgstr "Öppna fönster"
#: js/ui/appDisplay.js:2472 js/ui/panel.js:82 #: js/ui/appDisplay.js:2474 js/ui/panel.js:82
msgid "New Window" msgid "New Window"
msgstr "Nytt fönster" msgstr "Nytt fönster"
#: js/ui/appDisplay.js:2483 #: js/ui/appDisplay.js:2485
msgid "Launch using Dedicated Graphics Card" msgid "Launch using Dedicated Graphics Card"
msgstr "Kör med diskret grafikkort" msgstr "Kör med diskret grafikkort"
#: js/ui/appDisplay.js:2511 js/ui/dash.js:239 #: js/ui/appDisplay.js:2513 js/ui/dash.js:239
msgid "Remove from Favorites" msgid "Remove from Favorites"
msgstr "Ta bort från favoriter" msgstr "Ta bort från favoriter"
#: js/ui/appDisplay.js:2517 #: js/ui/appDisplay.js:2519
msgid "Add to Favorites" msgid "Add to Favorites"
msgstr "Lägg till som favorit" msgstr "Lägg till som favorit"
#: js/ui/appDisplay.js:2527 js/ui/panel.js:93 #: js/ui/appDisplay.js:2529 js/ui/panel.js:93
msgid "Show Details" msgid "Show Details"
msgstr "Visa detaljer" msgstr "Visa detaljer"
@@ -1341,6 +1429,14 @@ msgstr "Installera tillägg"
msgid "Download and install “%s” from extensions.gnome.org?" msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Hämta och installera ”%s” från extensions.gnome.org?" msgstr "Hämta och installera ”%s” från extensions.gnome.org?"
#: js/ui/extensionSystem.js:228
msgid "Extension Updates Available"
msgstr "Uppdateringar för tillägg finns tillgängliga"
#: js/ui/extensionSystem.js:229
msgid "Extension updates are ready to be installed."
msgstr "Uppdateringar för tillägg är redo att installeras."
#: js/ui/inhibitShortcutsDialog.js:79 #: js/ui/inhibitShortcutsDialog.js:79
msgid "Allow inhibiting shortcuts" msgid "Allow inhibiting shortcuts"
msgstr "Tillåt förhindrande av kortkommandon" msgstr "Tillåt förhindrande av kortkommandon"
@@ -1634,7 +1730,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d ny avisering" msgstr[0] "%d ny avisering"
msgstr[1] "%d nya aviseringar" msgstr[1] "%d nya aviseringar"
#: js/ui/screenShield.js:454 js/ui/status/system.js:98 #: js/ui/screenShield.js:454 js/ui/status/system.js:103
msgid "Lock" msgid "Lock"
msgstr "Lås" msgstr "Lås"
@@ -2153,23 +2249,23 @@ msgstr "Stäng av"
msgid "Airplane Mode On" msgid "Airplane Mode On"
msgstr "Flygplansläge påslaget" msgstr "Flygplansläge påslaget"
#: js/ui/status/system.js:111 #: js/ui/status/system.js:116
msgid "Power Off / Log Out" msgid "Power Off / Log Out"
msgstr "Stäng av / Logga ut" msgstr "Stäng av / Logga ut"
#: js/ui/status/system.js:114 #: js/ui/status/system.js:119
msgid "Log Out" msgid "Log Out"
msgstr "Logga ut" msgstr "Logga ut"
#: js/ui/status/system.js:126 #: js/ui/status/system.js:131
msgid "Switch User…" msgid "Switch User…"
msgstr "Växla användare…" msgstr "Växla användare…"
#: js/ui/status/system.js:140 #: js/ui/status/system.js:145
msgid "Suspend" msgid "Suspend"
msgstr "Vänteläge" msgstr "Vänteläge"
#: js/ui/status/system.js:152 #: js/ui/status/system.js:157
msgid "Power Off…" msgid "Power Off…"
msgstr "Stäng av…" msgstr "Stäng av…"
@@ -2434,11 +2530,6 @@ msgstr ""
"Beskrivning är en ensam mening som förklarar vad ditt tillägg gör.\n" "Beskrivning är en ensam mening som förklarar vad ditt tillägg gör.\n"
"Exempel: %s" "Exempel: %s"
#: subprojects/extensions-tool/src/command-create.c:211
#: subprojects/extensions-tool/src/main.c:173
msgid "Description"
msgstr "Beskrivning"
#: subprojects/extensions-tool/src/command-create.c:222 #: subprojects/extensions-tool/src/command-create.c:222
msgid "" msgid ""
"UUID is a globally-unique identifier for your extension.\n" "UUID is a globally-unique identifier for your extension.\n"
@@ -2641,10 +2732,6 @@ msgstr "URL"
msgid "Original author" msgid "Original author"
msgstr "Ursprunglig upphovsman" msgstr "Ursprunglig upphovsman"
#: subprojects/extensions-tool/src/main.c:185
msgid "Version"
msgstr "Version"
#: subprojects/extensions-tool/src/main.c:188 #: subprojects/extensions-tool/src/main.c:188
msgid "State" msgid "State"
msgstr "Tillstånd" msgstr "Tillstånd"
@@ -2747,6 +2834,15 @@ msgstr[1] "%u ingångar"
msgid "System Sounds" msgid "System Sounds"
msgstr "Systemljud" msgstr "Systemljud"
#~ msgid "org.gnome.Extensions"
#~ msgstr "org.gnome.Extensions"
#~ msgid "Logout…"
#~ msgstr "Logga ut…"
#~ msgid "Browse in Software"
#~ msgstr "Bläddra i Programvara"
#~ msgctxt "search-result" #~ msgctxt "search-result"
#~ msgid "Lock Orientation" #~ msgid "Lock Orientation"
#~ msgstr "Skärmrotation" #~ msgstr "Skärmrotation"

1624
po/tr.po

File diff suppressed because it is too large Load Diff

View File

@@ -1443,8 +1443,9 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache,
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
{ {
double resource_scale_double = resource_scale;
g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), image); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), image);
g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale); g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double);
} }
} }
@@ -1491,10 +1492,11 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache,
if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER)
{ {
double resource_scale_double = resource_scale;
cairo_surface_reference (surface); cairo_surface_reference (surface);
g_hash_table_insert (cache->priv->keyed_surface_cache, g_hash_table_insert (cache->priv->keyed_surface_cache,
g_strdup (key), surface); g_strdup (key), surface);
g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale); g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double);
} }
} }
else else

View File

@@ -96,6 +96,9 @@ Displays a list of installed extensions.
*--prefs*;; *--prefs*;;
Only include extensions with preferences Only include extensions with preferences
*--updates*;;
Only include extensions with pending updates
*-d*;; *-d*;;
*--details*;; *--details*;;
Show some extra information for each extension Show some extra information for each extension

View File

@@ -32,7 +32,8 @@ typedef enum {
LIST_FLAGS_SYSTEM = 1 << 1, LIST_FLAGS_SYSTEM = 1 << 1,
LIST_FLAGS_ENABLED = 1 << 2, LIST_FLAGS_ENABLED = 1 << 2,
LIST_FLAGS_DISABLED = 1 << 3, LIST_FLAGS_DISABLED = 1 << 3,
LIST_FLAGS_NO_PREFS = 1 << 4 LIST_FLAGS_NO_PREFS = 1 << 4,
LIST_FLAGS_NO_UPDATES = 1 << 5,
} ListFilterFlags; } ListFilterFlags;
static gboolean static gboolean
@@ -69,11 +70,13 @@ list_extensions (ListFilterFlags filter, DisplayFormat format)
g_autoptr (GVariantDict) info = NULL; g_autoptr (GVariantDict) info = NULL;
double type, state; double type, state;
gboolean has_prefs; gboolean has_prefs;
gboolean has_update;
info = g_variant_dict_new (value); info = g_variant_dict_new (value);
g_variant_dict_lookup (info, "type", "d", &type); g_variant_dict_lookup (info, "type", "d", &type);
g_variant_dict_lookup (info, "state", "d", &state); g_variant_dict_lookup (info, "state", "d", &state);
g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs); g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs);
g_variant_dict_lookup (info, "hasUpdate", "b", &has_update);
if (type == TYPE_USER && (filter & LIST_FLAGS_USER) == 0) if (type == TYPE_USER && (filter & LIST_FLAGS_USER) == 0)
continue; continue;
@@ -90,6 +93,9 @@ list_extensions (ListFilterFlags filter, DisplayFormat format)
if (!has_prefs && (filter & LIST_FLAGS_NO_PREFS) == 0) if (!has_prefs && (filter & LIST_FLAGS_NO_PREFS) == 0)
continue; continue;
if (!has_update && (filter & LIST_FLAGS_NO_UPDATES) == 0)
continue;
if (needs_newline) if (needs_newline)
g_print ("\n"); g_print ("\n");
@@ -112,6 +118,7 @@ handle_list (int argc, char *argv[], gboolean do_help)
gboolean enabled = FALSE; gboolean enabled = FALSE;
gboolean disabled = FALSE; gboolean disabled = FALSE;
gboolean has_prefs = FALSE; gboolean has_prefs = FALSE;
gboolean has_updates = FALSE;
GOptionEntry entries[] = { GOptionEntry entries[] = {
{ .long_name = "user", { .long_name = "user",
.arg = G_OPTION_ARG_NONE, .arg_data = &user, .arg = G_OPTION_ARG_NONE, .arg_data = &user,
@@ -128,6 +135,9 @@ handle_list (int argc, char *argv[], gboolean do_help)
{ .long_name = "prefs", { .long_name = "prefs",
.arg = G_OPTION_ARG_NONE, .arg_data = &has_prefs, .arg = G_OPTION_ARG_NONE, .arg_data = &has_prefs,
.description = _("Show extensions with preferences") }, .description = _("Show extensions with preferences") },
{ .long_name = "updates",
.arg = G_OPTION_ARG_NONE, .arg_data = &has_updates,
.description = _("Show extensions with updates") },
{ .long_name = "details", .short_name = 'd', { .long_name = "details", .short_name = 'd',
.arg = G_OPTION_ARG_NONE, .arg_data = &details, .arg = G_OPTION_ARG_NONE, .arg_data = &details,
.description = _("Print extension details") }, .description = _("Print extension details") },
@@ -174,6 +184,9 @@ handle_list (int argc, char *argv[], gboolean do_help)
if (!has_prefs) if (!has_prefs)
flags |= LIST_FLAGS_NO_PREFS; flags |= LIST_FLAGS_NO_PREFS;
if (!has_updates)
flags |= LIST_FLAGS_NO_UPDATES;
return list_extensions (flags, details ? DISPLAY_DETAILED return list_extensions (flags, details ? DISPLAY_DETAILED
: DISPLAY_ONELINE) ? 0 : 2; : DISPLAY_ONELINE) ? 0 : 2;
} }