Compare commits

..

205 Commits

Author SHA1 Message Date
Jasper St. Pierre
d8009fd826 Fix most of the Cogl deprecation warnings 2013-09-11 15:26:44 -04:00
Jasper St. Pierre
744749f2f3 dnd: Remove the queue updated ID for completed drags as well
I thought that cancelDrag was called for completed drags as well,
but it's not. Move the updateHoverId source removal to dragComplete.

This fixes "this._dragActor is undefined" warnings after completed
drags.

https://bugzilla.gnome.org/show_bug.cgi?id=707935
2013-09-11 15:11:23 -04:00
Jasper St. Pierre
db1c65970b Remove various E4X junk remove4x can't handle 2013-09-11 15:02:33 -04:00
Jasper St. Pierre
2d8ed4c77f Bind "this" for various methods
For extremely silly reasons with how the class framework works, the wrapper
method requires "this" to be bound in order for it to work, or else we'll
emit errors in strict mode.

https://bugzilla.gnome.org/show_bug.cgi?id=707892
2013-09-11 15:02:32 -04:00
Jasper St. Pierre
9ba970b83d lookingGlass: Fix newline replacing
text.replace() returns the new string as strings in JS are immutable.
2013-09-11 15:02:32 -04:00
Florian Müllner
954d262d67 st: Fix spacing on right icon in entry
https://bugzilla.gnome.org/show_bug.cgi?id=705779
2013-09-11 18:41:55 +02:00
Matthias Clasen
1b6090fe13 Make the search entry behave better in RTL locales
It is expected that the primary and secondary icons in entries
change places in RTL locales. When doing so, the edit-clear
icon must be replaced by an rtl variant too.

http://bugzilla.gnome.org/show_bug.cgi?id=705779
2013-09-11 18:41:55 +02:00
Jasper St. Pierre
f8234b07f8 workspacesView: Don't double-destroy workspaces
The WorkspaceView actors contain the Workspace actors, so destroying the
WorkspaceView actors should be enough.

https://bugzilla.gnome.org/show_bug.cgi?id=707889
2013-09-11 10:15:26 -04:00
Jasper St. Pierre
25318f696d workspace: Clean up a leftover later_add on destroy
https://bugzilla.gnome.org/show_bug.cgi?id=707889
2013-09-11 10:15:26 -04:00
Timo Jyrinki
1ab3d12bc7 Finnish translation update 2013-09-11 09:46:44 +03:00
Jasper St. Pierre
d66e0a0b45 Fix simple GTK+ deprecations 2013-09-10 20:43:17 -04:00
Jasper St. Pierre
d46ceead04 Fix simple, unused variable warnings 2013-09-10 20:43:17 -04:00
Rūdolfs Mazurs
1cc9480e56 Updated Latvian translation 2013-09-10 21:31:25 +03:00
Ihar Hrachyshka
c022b541f1 Updated Belarusian translation. 2013-09-10 20:02:46 +03:00
Neil Roberts
96588466d4 Don't pass on X events to Clutter
The Mutter plugin manager has now been changed so that it itself will
pass on the events through Clutter so there is no need to do this in
Gnome Shell anymore.

https://bugzilla.gnome.org/show_bug.cgi?id=707467
2013-09-10 17:27:18 +02:00
Nilamdyuti Goswami
dbde12f8bf Assamese Translation Updated 2013-09-10 20:47:49 +05:30
Jasper St. Pierre
660f0fec16 popupMenu: Fix algorithm for separator visibility to work with sections
Before, separators naively checked whether their siblings were visible
using actor visibility. However, if section actors are visible but have
no visible children, this will fail. Special-case separators when doing
visiblity checks.

https://bugzilla.gnome.org/show_bug.cgi?id=707801
2013-09-10 10:23:43 -04:00
Jasper St. Pierre
fd9401cc62 Revert "popupMenu: Make the section invisible if it has no visible children"
This reverts commit 5a0ac6c2ac.

https://bugzilla.gnome.org/show_bug.cgi?id=707801
2013-09-10 10:23:43 -04:00
Jasper St. Pierre
1edb9f7525 altTab: Only create one settings instance per window switcher popup
Every settings instance we create is a round-trip to the dconf
daemon, so we need to be careful of not creating them too haphazardly.

https://bugzilla.gnome.org/show_bug.cgi?id=707806
2013-09-10 10:23:43 -04:00
Giovanni Campagna
15cfb9d1d9 AppMenu: remove tweens before animating the actor visibility
When we show(), we need to make sure that the hiding animation
doesn't reach the end, otherwise we would hide the actor but
still have _visible = true.
We were relying on tweener overwriting to do this, but it
doesn't quite work, so better be explicit and do it ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=707814
2013-09-10 10:46:00 +02:00
Andika Triwidada
da6744da2d Updated Indonesian translation 2013-09-10 13:10:42 +07:00
Khaled Hosny
bd5aa66a5f Update Arabic translation 2013-09-09 23:15:20 +02:00
A S Alam
7c30fe7738 Punjabi Translation updated by Aman 2013-09-09 14:09:40 -05:00
Carlos Soriano
8ce599df38 theme: Change overview icon shadow inset opacity
In the commit 9a8bf3b was changed the background opacity of overview
icons. That cause that the shadow of the checked state of icons
was too hard, so it seems to be cut off.
Change the opacity of the shadow to solve this.
2013-09-09 13:37:36 +02:00
Мирослав Николић
75fe13f1df Updated Serbian translation 2013-09-08 16:26:18 +02:00
Victor Ibragimov
8ad6ded3ec Tajik translation updated 2013-09-08 15:45:21 +05:00
Victor Ibragimov
38d22c47f5 Tajik translation updated 2013-09-08 15:42:31 +05:00
Victor Ibragimov
956b6b89b6 Tajik translation updated 2013-09-08 15:38:46 +05:00
Kjartan Maraas
f27c2e6813 Updated Norwegian bokmål translation 2013-09-08 11:23:16 +02:00
Tobias Endrigkeit
d35c9f880a Updated German translation 2013-09-08 08:14:10 +02:00
Yuri Myasoedov
d62aacf301 Updated Russian translation 2013-09-07 23:11:29 +04:00
Jiro Matsuzawa
716ea64212 l10n: Update Japanese translation 2013-09-07 22:36:18 +09:00
Magdalen Berns
c9d6b13f6a Remove unused functions
Bug https://bugzilla.gnome.org/show_bug.cgi?id=707666
2013-09-07 15:05:59 +02:00
Florian Müllner
b437e68026 app: Removed unused function
https://bugzilla.gnome.org/show_bug.cgi?id=707663
2013-09-07 00:09:31 +02:00
Florian Müllner
1dfc38d078 app: Stop using window visibility when comparing apps
shell_app_compare() (which is only used as sort function for
shell_app_system_get_running() nowadays) currently takes the
visibility of an app's windows into account, e.g. applications
with visible windows (non-minimized windows on current workspace)
sort earlier than applications without.
This translate traditional window-switcher behavior to applications,
but we stopped sorting by workspace in the app-switcher a while ago,
and with the new auto-minimization behavior of fullscreen windows
it is more confusing than helpful - in fact, since mutter commit
7e61ef09369a we no longer do this for the window list, so it
makes sense to apply the same to application sorting.

https://bugzilla.gnome.org/show_bug.cgi?id=707663
2013-09-07 00:09:31 +02:00
Florian Müllner
387184b052 appDisplay: Increase fade offset in FolderView
Just as we do in AllView, we set the offset of FolderViews' fade
effect so that no icon is faded when a full page is visible.
This works fine in AllView, however in the FolderView case where
the popup's offsets eat away from the available fade height, the
effect ends up being barely noticeable at all.
While it is not ideal to apply the fade to the edge of a "full page",
it looks less ugly than the current state, so pick the lesser evil ...

https://bugzilla.gnome.org/show_bug.cgi?id=707662
2013-09-06 23:54:46 +02:00
Florian Müllner
beec47d7ad theme: Decrease padding on folder view popup
If a folder view is scrolled, its scrollbar ends up too close to the
content (even partially overlapping it) with the current padding.
Making it much smaller fixes the issue without affecting the content
position - the removed padding will just move to IconGrid's dynamic
padding.

https://bugzilla.gnome.org/show_bug.cgi?id=707662
2013-09-06 23:54:46 +02:00
Carlos Soriano
6b554337ff appDisplay: Make sure we don't clip folder view
If we round up the value, we make sure we don't clip in any
case neither the folder view or the close button.
2013-09-06 23:45:50 +02:00
Jasper St. Pierre
08f95264d6 embedded-window: Set as app-paintable to workaround opaque region issues
In specific cases, GTK+ does not have enough information to set a correct
opaque region, in which the recommended fix is to set your window as
app-paintable. In the tray icon case, the socket window was considered
opaque but GTK+ as it had a solid window background, but it cannot have an
opaque region set, as the plug isn't composited against the socket, but
instead punches through the socket window.

https://bugzilla.gnome.org/show_bug.cgi?id=707614
2013-09-06 16:28:41 -04:00
Luca Ferretti
2802920e93 Updated Italian translation 2013-09-06 22:15:53 +02:00
Florian Müllner
b04c47c15f focusCaretTracker: Minor cleanup 2013-09-06 19:14:53 +02:00
Florian Müllner
56d96383e2 st: Fix typo 2013-09-06 17:23:19 +02:00
Rico Tzschichholz
f2cbf846e7 build: Fix linker errors on Debian/Ubuntu 2013-09-06 16:21:55 +02:00
Marek Černocký
0088e94293 Updated Czech translation 2013-09-06 11:55:01 +02:00
Adam Matoušek
a03a077e3d Updated Czech translation 2013-09-06 11:50:44 +02:00
Carlos Soriano
85d2b9e32a appDisplay: Also scroll on focused indicators
Since now if you focus the indicators, you can't scroll and
change pages in the app picker. That was reported as odd from
some users/developers.
So allow to scroll when the focus is in the indicators.

https://bugzilla.gnome.org/show_bug.cgi?id=707609
2013-09-06 10:40:07 +02:00
Florian Müllner
aa6471b3cc messageTray: Reset clickedSummaryItem on ungrab
If we don't, we will pop up the summary again the next time
_updateState() is called.

https://bugzilla.gnome.org/show_bug.cgi?id=707600
2013-09-06 10:16:37 +02:00
Florian Müllner
b462a85c43 appDisplay: Fix obvious copy+paste error 2013-09-06 02:58:15 +02:00
Magdalen Berns
9d8f30f955 Magnifier: Implement focus and caret tracking
A11y users who use the magnifier may have trouble
focusing when they're typing or trying to keynav.
Implement a new system so that they can have the
magnifier track the caret and focus instead instead
of just the mouse.

Bug https://bugzilla.gnome.org/show_bug.cgi?id=647074
2013-09-05 13:18:54 -04:00
Florian Müllner
420db828e9 appDisplay: Also fade ScrollView in folders 2013-09-05 18:30:18 +02:00
Florian Müllner
fd8def705d appDisplay: Remove _updateAdjustment
Provided that PaginatedIconGrid's height request is correct, we
can rely on StBoxLayout to update the adjustment correctly.
2013-09-05 18:18:05 +02:00
Florian Müllner
39c4fa1bf0 iconGrid: Initialize properties in _init
While this is good style anyway, after the latest appDisplay changes
the first call to get_preferred_height() happens before we properly
compute those properties, resulting in a size request of NaN that
triggers a Clutter warning.
2013-09-05 18:18:05 +02:00
Jasper St. Pierre
32b964e9b7 power: Fix translations in the power section
This technically isn't a string freeze break, since xgettext already
picked up the string and translators have been translating it.

https://bugzilla.gnome.org/show_bug.cgi?id=707557
2013-09-05 12:03:26 -04:00
Florian Müllner
2980515c85 appDisplay: Fix return value for _onScroll
ClutterActor::scroll-event has a boolean return value to indicate
whether the event has been handled, or event emission should continue.
Now that we are using an StScrollView, we depend on this to avoid
propagating the event to the view's own handler.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:19 +02:00
Florian Müllner
36bee16781 appDisplay: Use a ScrollView for pages
While we obviously don't want any scrollbars, its fade effect
will give us some extra polish when switching pages.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:19 +02:00
Florian Müllner
4f5d3e00db st: Add StScrollViewFade:fade-edges
Add a new property which controls whether edge areas are excluded
from the effect (the default and current behavior), or not.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:18 +02:00
Florian Müllner
6fb044f351 st: Make st_scroll_view_update_fade_effect() public
Using fixed fade offsets is not always appropriate, this will allow
to set them from code instead.

https://bugzilla.gnome.org/show_bug.cgi?id=707409
2013-09-04 23:52:18 +02:00
Florian Müllner
b403845d03 st: Make StScrollViewFade a ClutterShaderEffect
The cogl_shader_XXX and cogl_program_YYY APIs have been deprecated
this cycle, so port to ClutterShaderEffect instead.

https://bugzilla.gnome.org/show_bug.cgi?id=707508
2013-09-04 23:13:30 +02:00
Dušan Kazik
9d0e00acce Updated slovak translation 2013-09-04 20:12:26 +02:00
Jasper St. Pierre
d5afe8f4f2 Update gvc 2013-09-04 13:00:31 -04:00
Daniel Korostil
3eb5ca3653 Updated Ukrainian 2013-09-04 18:47:00 +03:00
Olivier Blin
db07aa42ea panel: fix crash when bluetooth is disabled
https://bugzilla.gnome.org/show_bug.cgi?id=707430
2013-09-04 11:34:17 +02:00
Timo Jyrinki
081f51b9eb Finnish translation update 2013-09-04 11:04:49 +03:00
Carlos Soriano
38d9c16aba gnome-shell.css: typo replace tabs with spaces 2013-09-04 09:48:07 +02:00
Carlos Soriano
392a426ddf iconGrid: typo in iconGrid this._vItemSize to this._getVItemSize() 2013-09-04 09:43:10 +02:00
Chao-Hsiung Liao
d77b2751a6 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2013-09-04 15:06:39 +08:00
Piotr Drąg
3b28308291 Updated Polish translation 2013-09-04 02:08:10 +02:00
Luca Ferretti
574ecb5ad4 Updated Italian translation 2013-09-04 00:42:12 +02:00
Aurimas Černius
7a57a780d8 Updated Lithuanian translation 2013-09-04 00:34:30 +03:00
Jakub Steiner
cf9842433e search: "pushed in" :active state
https://bugzilla.gnome.org/show_bug.cgi?id=704714
2013-09-03 17:19:53 +02:00
Rico Tzschichholz
c6d089d701 build: Don't add version to private libgnome-shell-menu library 2013-09-03 16:17:06 +02:00
Daniel Mustieles
ec37e2d2b5 Updated Spanish translation 2013-09-03 16:10:59 +02:00
Florian Müllner
e68b648a33 appDisplay: Don't show page indicators if there's only one page
It doesn't make sense to show the indicators in that case, so
don't show them. This has been the design in the first place,
but the code that did that was lost at some point during review ...

https://bugzilla.gnome.org/show_bug.cgi?id=707363
2013-09-03 13:54:21 +02:00
Florian Müllner
56179d8a54 build: Fix building introspection for ShellRecorder
This is a regression from commit 21a85832b3, which resulted in
shell-recorder.[ch] not being included in gir generation.

https://bugzilla.gnome.org/show_bug.cgi?id=707308
2013-09-03 13:53:32 +02:00
Fran Diéguez
47d232f694 Updated Galician translations 2013-09-03 12:57:20 +02:00
Rafael Ferreira
fc26fb2149 Updated Brazilian Portuguese translation 2013-09-02 21:06:47 -03:00
Florian Müllner
92d828b04e Bump version to 3.9.91
Update NEWS.
2013-09-03 01:45:04 +02:00
Matej Urbančič
6f9dc913d4 Updated Slovenian translation 2013-09-02 23:01:58 +02:00
Giovanni Campagna
9ea0f7255f PageIndicators: extend the clickable area
Replace the inactive spacing with clickable padding inside the
buttons, for easier selection with a mouse.

https://bugzilla.gnome.org/show_bug.cgi?id=707314
2013-09-02 22:53:04 +02:00
Florian Müllner
938628a05f appDisplay: Default to All view when not enough usage data is available
The frequent view is not useful when it doesn't contain any applications
yet. While the previously added label makes this state appear less like
an error (OMG, my apps are gone!), it doesn't address the issue of
usefulness - default to the more helpful All view in this case.

https://bugzilla.gnome.org/show_bug.cgi?id=694710
2013-09-02 21:26:11 +02:00
Carlos Soriano
a765dfc52e appDisplay: Show label when frequent app view is empty.
Currently we show a empty view, that seems broken, so we add a label
showing that there's not enough frequent applications to show.

https://bugzilla.gnome.org/show_bug.cgi?id=694710
2013-09-02 21:25:03 +02:00
Carlos Soriano
d58f0646cf iconGrid: Also adapt icon size to available space
Similar to adapting the spacing dynamically to the available
space we already do, scale down icon sizes if the grid is too
small to fit the requested minimum number of rows/columns.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:36:39 +02:00
Florian Müllner
792b963bda iconGrid: Change IconGrid.addItem() to take an object instead of an actor
IconGrid has never really been a general purpose container, but has
always been used in conjunction with BaseIcon. IconGrid will soon
gain the ability to adjust the item size dynamically to adapt to the
available space, which will require that we can make some more
assumptions about the items added to the grid (namely: we need
access to BaseIcon's setIconSize() method).
So change addItem() to take an object instead, which should have
an actor and a (BaseIcon) icon property.

Based on a patch by Carlos Soriano.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:36:39 +02:00
Carlos Soriano
9a8bf3b881 theme: Change icons style to follow new design
Change the background, glow and labels of the Dash and AppDisplay
to follow the new design

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:36:39 +02:00
Carlos Soriano
1e02081cd2 appDisplay: Add pan action to FolderView
Since we have now a ScrollView in the FolderView,
add support for the pan action

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:36:39 +02:00
Carlos Soriano
3f24a87034 appDisplay: Make space on grid to fit collection when opening
Move icons out of the way to make place for the FolderView
popup before opening it.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:36:39 +02:00
Florian Müllner
dd9f8021ff iconGrid: Add openExtraSpace()/closeExtraSpace() methods
Add methods to open/close extra space for n rows. The app picker
will use those to make AppFolder popups appear inline with the
main grid rather than on top of it.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:36:39 +02:00
Carlos Soriano
74978e84f8 appDisplay: Start always at page 0 in AllView
Reset the AllView scroll adjustment between overview openings,
following design reasons

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:02:36 +02:00
Carlos Soriano
6ef775390f appDisplay: Start always at scroll 0 on FolderView
Reset the scroll adjustment between popups opennings,
following the same design we want to the AllView

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 20:02:36 +02:00
Carlos Soriano
1313c1b157 appDisplay: Align and contain collection grid with parent view
The popup of the FolderView is now contained inside
the parent view, solving the overflow of apps with a ScrollView.
Also, solved a lot of bugs in popup/FolderView calculation
of position and size.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:54:23 +02:00
Carlos Soriano
6d6c400b25 iconGrid: Add padWithSpacing property
Add a property to also add the calculated spacing
around the grid.
This will allow FolderView to be aligned with the
main grid without cutting off any of the surrounding
boxPointer decorations or the close button

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:51:28 +02:00
Carlos Soriano
46bd1b9b18 appDisplay: Add and rework pan action response
Add pan action to AllView and rework it to take
into account the velocity the user gives to the action

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:51:28 +02:00
Carlos Soriano
dcea8bed6d appDisplay: Add page indicators
Add indicators to the pagination in AllView, which displays
how many pages of apps we have and allows the user to
navigate through them.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:51:00 +02:00
Carlos Soriano
e8b35f4623 theme: Change app picker bottom padding
Increase the bottom padding between the views and the control buttons
of the AppDisplay to be more eye pleasant

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:47:05 +02:00
Carlos Soriano
ae263bb4db iconGrid: Add minRows/minColumns properties
When we adapt the grid to different display sizes,
we don't want the number of displayed items to get
too small. In the future we will scale down icons to
make sure that the grid fits add least minRows
x minColumns items, but for now we only take the
properties into account when calculating the dynamic spacing.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:43:49 +02:00
Carlos Soriano
754ca7c8f2 appDisplay: Paginate AllView
Organize applications in AllView by pages using the new PaginatedIconGrid
added previously. Pagination is generally a better pattern for collections
than scrolling, as it better suits spacial memory.
Hook into AppDisplay's allocation function to communicate the available
size to the different views before child allocations - this is only
required by the paginated view (as pages must be computed before
calling get_preferred_height/get_preferred_width), but doing it for
all views will guarantee that their dynamic spacing calculation is
based on the same values.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 19:06:35 +02:00
Carlos Soriano
804c02701a appDisplay: Animate _updateIconOpacities
Animate the transition between full opacity and partly opacity
to follow overall animations design of gnome-shell

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Carlos Soriano
fbb4077812 appDisplay: Rename AlphabeticalView to BaseAppView
Since the items are not ordered in an alphabetical
way, just rename the class to be consistent.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Carlos Soriano
961e1b89a2 appDisplay: Move FolderView near FolderIcon for better context
Since FolderView is closely related with FolderIcon, we
have more context while working if FolderView is near
FolderIcon

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Carlos Soriano
cc449228f3 iconGrid: Rename childrenInRow to columnsForWidth
Since the parameter of the function is the width, reflect that in
the function name. Also, since we are counting columns, not only
children for each row, reflect that in the function name also.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Carlos Soriano
3984c47867 iconGrid: Add PaginatedIconGrid
The new PaginatedIconGrid class acts as a container for pages.
So the new class provides  the container behaviour and some
useful functions like positions of pages, number of pages, etc.
But, it doesn't add indicators of the pages and doesn't manage
the scroll of the pages, neither any management of the pages
like in which page currently it is, etc.

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Carlos Soriano
cfb80266c2 iconGrid: Move spacing calculation to its own function
Move spacing calculation to a function, which makes
it reusable and overwritable by subclasses

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Carlos Soriano
cc5198205d iconGrid: Split out _calculateChildBox
Split out the calculation of the child box in allocation function
to be reusable by subclasses and let the code be more modular

https://bugzilla.gnome.org/show_bug.cgi?id=706081
2013-09-02 18:57:36 +02:00
Giovanni Campagna
a27b44a3c2 NetworkAgent: use g_close() instead of GUnixInputStream
We created the input stream just to close the FD, but GLib has
a handy close() wrapper, so we can use that instead.

https://bugzilla.gnome.org/show_bug.cgi?id=707269
2013-09-02 18:45:07 +02:00
Daniel Mustieles
937d064860 Updated Spanish translation 2013-09-02 18:11:03 +02:00
Giovanni Campagna
9c814d1584 ShellDBus: add ShowApplications method
Add a method to control the visibility of the applications view.
This can used by gnome-settings-daemon for special keys in
certain keyboards.

https://bugzilla.gnome.org/show_bug.cgi?id=698743
2013-09-02 11:02:18 +02:00
Giovanni Campagna
415563dc6e Add a FocusApp method to org.gnome.Shell
This method, which accepts a .desktop filename, is used to highlight
a specific application in the overview, for example because it has
just been created or installed.

https://bugzilla.gnome.org/show_bug.cgi?id=654086
2013-09-02 10:51:00 +02:00
Ihar Hrachyshka
bed653737b Updated Belarusian translation. 2013-09-01 19:10:57 +03:00
Jasper St. Pierre
b53be942d4 workspace: Make sure to sort the last row in the overview
We added special code to sort each row in the overview so that
windows were less likely to cross lines, but the awkward control
flow meant that everything but the last row got sorted.

https://bugzilla.gnome.org/show_bug.cgi?id=707197
2013-08-31 22:33:16 -04:00
Jasper St. Pierre
1d26161d23 network: Adapt to the new NetworkManager API names
"physical connection" has been replaced with "primary connection"
2013-08-31 22:33:16 -04:00
Florian Müllner
39afb58472 windowManager: Don't open overview after closing the last window on a workspace
Activating the overview is fairly easy (hot corner, <super>), so doing it
automatically after closing the last window on a workspace does not save
a lot of effort; it does result in a surprising context switch when the
user does not expect the behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=662581
2013-08-31 23:53:39 +02:00
Piotr Drąg
22cd18571b Updated Polish translation 2013-08-31 22:38:48 +02:00
Florian Müllner
5753eb6682 dash: Fix typo
Whoops, how did this make it through review?
2013-08-31 19:53:37 +02:00
Giovanni Campagna
e26a6ea71b dash: reload favorites when the installed app change
Force a reload of the favorite system, to pick apps that were
uninstalled.

https://bugzilla.gnome.org/show_bug.cgi?id=706878
2013-08-31 18:55:24 +02:00
Giovanni Campagna
6fbe765636 network: allow disconnecting while activation is in progress
While connecting, the item should read "Turn Off", not "Connect".
To do so, change the meaning of isActive() to be really "not isOff()"

https://bugzilla.gnome.org/show_bug.cgi?id=706262
2013-08-31 18:52:01 +02:00
Giovanni Campagna
22b2ccd83d network: fix signal name
There is no state-changed signal on NMActiveConnection

https://bugzilla.gnome.org/show_bug.cgi?id=706262
2013-08-31 18:52:01 +02:00
Giovanni Campagna
fc5aadd6dd network: use the VPN state to compute the icon for VPN items
We watch changes in the VPN state, not the active connection state,
so if we use the active connection state, we might miss an update
(because the VPN property is notified before the other one)

https://bugzilla.gnome.org/show_bug.cgi?id=706262
2013-08-31 18:52:01 +02:00
Giovanni Campagna
5a9f0c24b4 network: don't return null from NMConnectionDevice._getStatus()
StLabel complains set you set the text to NULL

https://bugzilla.gnome.org/show_bug.cgi?id=706262
2013-08-31 18:52:01 +02:00
Giovanni Campagna
0c12c072fa NMConnectionItem: fix typo
https://bugzilla.gnome.org/show_bug.cgi?id=706262
2013-08-31 18:52:01 +02:00
Giovanni Campagna
f7284caefd network: don't crash because a device doesn't have a description yet
Descriptions are only added after all devices are read (thanks
to the disambiguation in libnm-gtk), but we use them immediately
when we call _sync() in various points (such as checkConnection())

https://bugzilla.gnome.org/show_bug.cgi?id=706262
2013-08-31 18:52:01 +02:00
Baurzhan Muftakhidinov
4e7f317679 Update Kazakh translation 2013-08-31 19:49:03 +06:00
Jordi Mas
3534d6fddc Fix Catalan spelling mistakes 2013-08-30 21:38:19 +02:00
Jasper St. Pierre
0b79e9cc9e loginDialog: Remove "Session" subtitle heading
It doesn't really add any value at all.

https://bugzilla.gnome.org/show_bug.cgi?id=707072
2013-08-30 10:45:46 -04:00
Enrico Nicoletto
3ce97ccaa8 Updated Brazilian Portuguese translation 2013-08-30 11:08:02 -03:00
Giovanni Campagna
407a340b2b EndSessionDialog: don't show other logged in users at log out
We're not killing their session, so it's pointless to show them.

https://bugzilla.gnome.org/show_bug.cgi?id=707124
2013-08-30 15:59:13 +02:00
Andika Triwidada
532346ecfb Updated Indonesian translation 2013-08-30 14:40:37 +07:00
Fran Diéguez
cd25f5b6cb Updated Galician translations 2013-08-30 00:54:30 +02:00
Jasper St. Pierre
5a0ac6c2ac popupMenu: Make the section invisible if it has no visible children
https://bugzilla.gnome.org/show_bug.cgi?id=706852
2013-08-29 15:17:12 -04:00
Jasper St. Pierre
f0da08bbb1 system: Hide the AltSwitcher when we have nothing to show
https://bugzilla.gnome.org/show_bug.cgi?id=706852
2013-08-29 15:17:12 -04:00
Jasper St. Pierre
fb3f6e2238 Update gvc 2013-08-29 14:49:24 -04:00
Ray Strode
8b977252f3 loginDialog: show session menu button when in auth failed
Right now we only show the session menu button when verifying,
but we should also show it when verification is failed or we
can end up in situation where the session menu disappears during
an authentication retry.

https://bugzilla.gnome.org/show_bug.cgi?id=707064
2013-08-29 14:02:21 -04:00
Matej Urbančič
9582f9b6e5 Updated Slovenian translation 2013-08-29 18:24:43 +02:00
Jasper St. Pierre
3f15a41006 network: Use one notification globally for connection status
Rather than one per device.

https://bugzilla.gnome.org/show_bug.cgi?id=706098
2013-08-29 12:10:32 -04:00
Jasper St. Pierre
e1c4cfd7eb network: Update for new APIs
New network manager APIs mean we don't have to do any scanning
through the active networks and synchronize state ourselves.

https://bugzilla.gnome.org/show_bug.cgi?id=706098
2013-08-29 12:10:32 -04:00
Victor Ibragimov
a326f40bbf Tajik translation updated 2013-08-29 11:19:42 +05:00
Aurimas Černius
09c2fff8fc Updated Lithuanian translation 2013-08-28 23:32:03 +03:00
Alejandro Piñeiro
a4c1eb12b4 a11y: calendar: full date string should be navigable
Also moved the set of label_actor of the menu some lines before,
to improve readability.

https://bugzilla.gnome.org/show_bug.cgi?id=706903
2013-08-28 19:13:33 +02:00
Alejandro Piñeiro
4e80758970 a11y: calendar: Month name should be navigable
https://bugzilla.gnome.org/show_bug.cgi?id=706903
2013-08-28 16:23:09 +02:00
Alejandro Piñeiro
40ae408b3b a11y: calendar: add accessible name for next/prev month buttons
https://bugzilla.gnome.org/show_bug.cgi?id=706903
2013-08-28 16:23:05 +02:00
Alejandro Piñeiro
84d8d4f622 a11y: using generic accessible at slider
Needed in order to fill the AtkValue implementation using
signal callbacks (ala ShellGenericContainer).

https://bugzilla.gnome.org/show_bug.cgi?id=648623
2013-08-28 16:05:54 +02:00
Alejandro Piñeiro
5c04840312 a11y: add a generic accessible
Using the same idea that shell-generic-container. It implements
AtkValue with a dummy implementation based on signals. Javascript
code would connect to that and returns the proper value.

https://bugzilla.gnome.org/show_bug.cgi?id=648623
2013-08-28 16:05:54 +02:00
Alejandro Piñeiro
bd28d5c48a a11y: add the possibility to set the accessible object of a widget
In the common case, the accessible object is created by the
own widget. In some cases it is needed to specify a custom
accessible, as some of the logic will be implemented on the
javascript code (extend functionality using Components vs Hierarchy).

https://bugzilla.gnome.org/show_bug.cgi?id=648623
2013-08-28 16:05:54 +02:00
Allan Day
f176d890c0 Increase padding between system status icons
Makes the icons easier to read, and increases the size of the
click target a bit.

https://bugzilla.gnome.org/show_bug.cgi?id=706796
2013-08-28 14:36:50 +01:00
Emmanuele Bassi
3b158a96b7 build: Ensure that we provide CFLAGS and LIBS for Wayland builds
We need to use PKG_CHECK_MODULES, not PKG_CHECK_EXISTS. We make it
non-fatal by passing a final argument to the m4 macro.
2013-08-28 11:12:23 +01:00
Victor Ibragimov
dcd0b2bf66 Tajik translation updated 2013-08-28 10:38:46 +05:00
Jasper St. Pierre
edd1c89ea1 configure: Make wayland entirely optional 2013-08-27 23:59:16 -04:00
Jasper St. Pierre
32d858dce3 configure: Remove a badly defined and unused variable 2013-08-27 23:59:16 -04:00
Dušan Kazik
1e4bb53a34 Updated slovak translation 2013-08-27 22:44:51 +02:00
Kjartan Maraas
f5f94097bf Updated Norwegian bokmål translation 2013-08-27 20:19:55 +02:00
Daniel Mustieles
77a3218db3 Updated Spanish Translation 2013-08-27 19:48:08 +02:00
Daniel Mustieles
c3ed40905a Updated Spanish translation 2013-08-27 19:44:54 +02:00
Ray Strode
268ac0bde8 theme: add bottom badding for login dialog hint
Since we're getting rid of the top padding, we need to add what we
take away to the bottom padding to keep the size the same.

https://bugzilla.gnome.org/show_bug.cgi?id=706670
2013-08-27 10:31:26 -04:00
Ray Strode
88e3f6af47 authPrompt: give message label an initial style
This commit consolidates the styles of the various
message types into one 'login-dialog-message' style
and then adds additional styles on top to cover the
differences.

This allows us to give the message label an initial
style so that is padded properly before any messages
are displayed.

https://bugzilla.gnome.org/show_bug.cgi?id=706670
2013-08-27 10:20:16 -04:00
Giovanni Campagna
21a85832b3 Implementing building two separate binaries for x11 and wayland
Build gnome-shell for x11, and gnome-shell-wayland for wayland
(as well as the associated libgnome-shell and libgnome-shell-wayland).
The first one links to libmutter, the second to libmutter-wayland.

libgnome-shell and libgnome-shell-wayland are now compiled from
libgnome-shell-base (with all sources that are independent of mutter),
libgnome-shell-menu (with the copy-pasted gtk sources), plus the
sources that use mutter API

https://bugzilla.gnome.org/show_bug.cgi?id=705497
2013-08-27 09:46:01 +02:00
Giovanni Campagna
254efdd122 Remove the jhbuild wrapper script
It's mostly equivalent to "jhbuild run gnome-shell", which is
the preferred way. Also, running from the source tree can't be
supported at this point, and the wrapper is getting in the way
of having two binaries, one for wayland and one for X11.

https://bugzilla.gnome.org/show_bug.cgi?id=705497
2013-08-27 09:46:01 +02:00
Fran Diéguez
62ac6e74d9 Updated Galician translations 2013-08-27 02:55:06 +02:00
Jasper St. Pierre
2c2268b39d gnome-shell-plugin: Fix unused variable warning 2013-08-26 20:06:34 -04:00
Jasper St. Pierre
41aa14eaf0 gdm: Remove constraints from authPrompt / loginDialog as well
https://bugzilla.gnome.org/show_bug.cgi?id=706843
2013-08-26 19:05:15 -04:00
Jasper St. Pierre
1f50f4658d unlockDialog: Remove clutter constraints from the code
These cause annoying allocation cycle warnings, and it's simpler to
just express our desired layout in terms of nested containers.
Adapt the theme to match as well.

https://bugzilla.gnome.org/show_bug.cgi?id=706843
2013-08-26 19:05:15 -04:00
Seán de Búrca
d31481fd8b Updated Irish translation 2013-08-26 16:35:25 -06:00
Jasper St. Pierre
80ab28bc3a loginDialog: Fade in the gdm auth prompt on login 2013-08-26 18:17:35 -04:00
Jasper St. Pierre
48b7ebe1c0 loginDialog: Remove useless style class manipulation
StWidget already does this for us.
2013-08-26 18:17:35 -04:00
Jasper St. Pierre
c59cf18337 loginDialog: Provide a finish method
The screenShield expects to be able to call finish on the dialog.
2013-08-26 18:04:20 -04:00
Jasper St. Pierre
b7b1260540 screenShield: Don't fade in the lock dialog
We slide the shield over it, so the animation is rarely seen, and
since no other actor is under the lock screen, the not-cleared stage
can show through, causing weird issues when trying to blend.

https://bugzilla.gnome.org/show_bug.cgi?id=706841
2013-08-26 17:52:57 -04:00
Seán de Búrca
897c5634b0 Fix autogen with latest gnome-common
Side-by-side use of IT_PROG_INTLTOOL and AM_GNU_GETTEXT is unsupported and breaks build.
2013-08-26 14:50:28 -06:00
Aurimas Černius
78e3a05e14 Updated Lithuanian translation 2013-08-26 22:54:19 +03:00
Jasper St. Pierre
1bb6367b79 schema: Remove some now unused gsettings keys 2013-08-26 13:42:11 -04:00
Enrico Nicoletto
f5512ef21b Updated Brazilian Portuguese translation 2013-08-26 12:02:09 -03:00
Matthias Clasen
a0fa9937ba Add a variant of the Restart dialog for offline updates
Detect when an offline update is pending, and show a more
suitable message in the Restart dialog.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-26 10:46:45 -04:00
Jasper St. Pierre
ef2345ea85 system: Add a way to suspend from the system menu
When we implemented the new designs, we lost the ability to suspend
from the system menu. Re-enable this ability by re-adding the hidden
"Alt" shortcut item.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-26 10:02:44 -04:00
Jasper St. Pierre
dd8fd09470 endSessionDialog: Split into two sections
https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-26 10:02:44 -04:00
Jasper St. Pierre
a779e2aeca endSessionDialog: Don't stop the timer when we have inhibitors
https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-26 10:02:44 -04:00
Jasper St. Pierre
aaaf25d578 endSessionDialog: Convert to the standard _sync pattern
... for starting and stopping the timer. This helps clean up the
state transitions in the code when caring about multiple things.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-26 10:02:44 -04:00
Jasper St. Pierre
2e65c852c3 endSessionDialog: List other users and sessions in with the inhibitors
Instead of in a separate dialog. This does not meet the designs right
now, but it's a good first start.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-26 10:02:44 -04:00
Giovanni Campagna
1b206fe94c Dash: don't show a tooltip over an application with a popup menu
If the popup menu associated with the application icon is open,
make sure that the tooltip is hidden.

https://bugzilla.gnome.org/show_bug.cgi?id=705611
2013-08-26 13:52:49 +02:00
Baurzhan Muftakhidinov
8b93c97a09 Update Kazakh translation 2013-08-25 22:08:57 +06:00
Benjamin Steinwender
6247b55fc3 Updated German translation 2013-08-25 00:30:01 +02:00
Enrico Nicoletto
12d9d49fa4 Updated Brazilian Portuguese translation 2013-08-23 21:26:10 -03:00
Adel Gadllah
aef3f097e4 build: Switch to 3.10 moduleset 2013-08-23 23:40:03 +02:00
Jasper St. Pierre
1a415d5fa7 userWidget: Actually respect the iconSize parameter
The iconSize parameter was only being respected if it was the
default icon fallback.

https://bugzilla.gnome.org/show_bug.cgi?id=706681
2013-08-23 13:25:11 -04:00
Jasper St. Pierre
e4d46aee97 endSessionDialog: Remove the interactivity of the end session dialog
This was always sort of a hidden feature, and with the new designs
it's going to get unclear about what's clickable, and what's not.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-23 13:25:11 -04:00
Jasper St. Pierre
d3a88e59b9 src: Eliminate compiler warnings 2013-08-23 12:34:42 -04:00
Ray Strode
44e3811520 loginDialog: ask for username up front if disable-user-list==TRUE
Right now, we rely on PAM to ask for the username if disable-user-list
is TRUE.  This is suboptimal because it means we can't check if we
should show a session menu.

This commit changes disable-user-list==TRUE to ask for a username up
front, rather than have PAM do it.

https://bugzilla.gnome.org/show_bug.cgi?id=706607
2013-08-23 11:40:35 -04:00
Giovanni Campagna
e0574d2861 Replace GnomeIdleMonitor with MetaIdleMonitor
Now that GnomeIdleMonitor is a DBus API for mutter, we need to
use own in-process thing, to avoid dead locks.

https://bugzilla.gnome.org/show_bug.cgi?id=706005
2013-08-23 16:22:44 +02:00
Jakub Steiner
d4f66da793 theme: small round button for system menu actions
- got freeze break from release team (2) and the docs team

https://bugzilla.gnome.org/show_bug.cgi?id=706638
2013-08-23 15:49:01 +02:00
Giovanni Campagna
c7e3289396 ScreenShield: hide the lightboxes when resuming from suspend
We show a lightbox when we suspend, to animate the fading to black
caused by turning off the monitors, but we need to hide it when
coming back, otherwise the user is just staring at a black screen
it until he moves the mouse or presses a key.

https://bugzilla.gnome.org/show_bug.cgi?id=706654
2013-08-23 14:21:02 +02:00
Victor Ibragimov
9cb7aeb32d Tajik translation updated 2013-08-23 12:48:11 +05:00
Piotr Drąg
4537370a54 Updated POTFILES.in 2013-08-23 00:23:25 +02:00
Jasper St. Pierre
9d2bc1142f endSessionDialog: Fix syntax error
That's what I get for not testing my changes before I push :(
2013-08-22 17:27:47 -04:00
Jasper St. Pierre
c44caa5c96 endSessionDialog: Don't error out if gnome-session hands us a dead inhibitor
Sometimes gnome-session hands us a bad object path for JIT inhibitors
it creates for XSMP clients. While this is a bug in gnome-session, we
shouldn't show an empty-looking dialog here.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-22 17:16:38 -04:00
Jasper St. Pierre
77dc587686 endSessionDialog: Fix a warning
If _timerId is undefined/null, as it is by default, we will take this
path, and fail when trying to remove a source ID for undefined.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-22 17:15:03 -04:00
Jasper St. Pierre
ce768241da loginManager: Remove login manager versions of PowerOff/Reboot
These don't go through gnome-session, so they don't properly update
its state machine. We should use these in the future when we want to
use logind user sessions, but for now, they're just a trap.

https://bugzilla.gnome.org/show_bug.cgi?id=706612
2013-08-22 16:40:52 -04:00
Ray Strode
5f9e50175f loginDialog: add support for auth without username / fix Not Listed?
commit 93f072d1fc attempted to
add support for auth without a username to the login screen, but
do to a messed up rebase only partially added it.

This commit fixes that.

https://bugzilla.gnome.org/show_bug.cgi?id=706607
2013-08-22 15:40:55 -04:00
Jasper St. Pierre
34ec457a47 popupMenu: Fix indentation and style 2013-08-22 14:09:04 -04:00
Alejandro Piñeiro
dd1651f2d1 Setting proper name and role for system menu sliders
https://bugzilla.gnome.org/show_bug.cgi?id=706391
2013-08-22 17:18:33 +02:00
Jakub Steiner
c3c529b001 Merge branch 'menu-arrow' 2013-08-22 16:37:40 +02:00
Alejandro Piñeiro
aa569304bc Fix key navigation on system menu sliders
Rely key press events management if the menu item contains
a slider.

https://bugzilla.gnome.org/show_bug.cgi?id=706386
2013-08-22 16:02:35 +02:00
Alejandro Piñeiro
3d57fd3227 slider: fix wrong variable name for own actor
https://bugzilla.gnome.org/show_bug.cgi?id=706386
2013-08-22 16:02:35 +02:00
Jakub Steiner
c18a6a6577 theme: darken open submenu items
- avoid the clash of adjacent open and selected items

https://bugzilla.gnome.org/show_bug.cgi?id=706037
2013-08-22 15:42:49 +02:00
Ray Strode
9720301d01 gdmUtil: make _startService support no username
commit fd11ad95f6 factored
out duplicated code, but unintentionally dropped support
for beginning verification without a username.

This commit brings it back.

https://bugzilla.gnome.org/show_bug.cgi?id=706542
2013-08-22 09:40:51 -04:00
Ray Strode
5ea75499fe objectManager: fix indentation 2013-08-22 09:40:12 -04:00
Jakub Steiner
b45bbb77ef theme: don't do harsh gradients for submenus
- use a more flat gradient for submenus. nothing is as curved
  and it doesn't help legibility.

https://bugzilla.gnome.org/show_bug.cgi?id=706037
2013-08-22 15:38:29 +02:00
Ray Strode
d29b86baf0 objectManager: clear inhibitor on unregistered interfaces
A D-Bus service can export more supported interfaces than the
shell cares about.  In those cases, we avoid creating proxies,
but neglect to finish things up so the object manager class
knows it can mark itself loaded.

This commit makes sure we do the proper finishing, so the object
manager still loads in the face of unsupported interfaces.

https://bugzilla.gnome.org/show_bug.cgi?id=706542
2013-08-22 09:38:15 -04:00
Kjartan Maraas
1730aff2b9 Updated Norwegian bokmål translation 2013-08-22 15:21:22 +02:00
Piotr Drąg
1b03484b04 Updated Polish translation 2013-08-22 02:16:10 +02:00
125 changed files with 16231 additions and 15875 deletions

42
NEWS
View File

@@ -1,3 +1,45 @@
3.9.91
======
* Improve submenu styling [Jakub; #706037]
* Fix changing slider values via keyboard [Alejandro; #706386]
* Fix accessibility of sliders [Alejandro; #706391]
* Tweak system actions style [Jakub; #706638]
* Add support for auth without username / fix Not Listed? [Ray; #706607]
* Dash: Don't show tooltips for apps with open popups [Giovanni; #705611]
* Implement new end-session/power-off dialog design [Jasper, Matthias; #706612]
* Implement building separate binaries for x11 and wayland [Giovanni; #705497]
* authPrompt: Fix controls moving when showing messages [Ray; #706670]
* Tweak padding between system status icons [Allan; #706796]
* Add a generic accessible usable by JS code [Alejandro; #648623]
* Improve keynav and accessibility of the calendar [Alejandro; #706903]
* Update to new NetworkManager APIs [Jasper; #706098]
* Hide system actions section in the lock screen [Jasper; #706852]
* Don't show other logged in users at log out [Giovanni; #707124]
* Remove "Session" subtitle heading in login dialog [Jasper; #707072]
* dash: Reload favorites when installed apps change [Giovanni; #706878]
* Don't open overview after closing last window on workspace [Florian; #662581]
* Add FocusApp DBus method [Giovanni; #654086]
* Add ShowApplications DBus method [Giovanni; #698743]
* Implement new app picker design [Carlos, Florian; #706081]
* Improve frequent apps being empty by default [Carlos, Florian; #694710]
* Extend clickable area of page indicators [Giovanni; #707314]
* Misc bug fixes [Ray, Giovanni, Jasper, Emmanuele; #706542, #706654, #706005,
#706681, #706841, #706843, #707064, #706262, #707197, #707269]
Contributors:
Emmanuele Bassi, Giovanni Campagna, Matthias Clasen, Allan Day, Adel Gadllah,
Florian Müllner, Alejandro Piñeiro, Carlos Soriano, Jasper St. Pierre,
Jakub Steiner, Ray Strode, Seán de Búrca
Translations:
Piotr Drąg [pl], Kjartan Maraas [nb], Victor Ibragimov [tg],
Enrico Nicoletto [pt_BR], Benjamin Steinwender [de],
Baurzhan Muftakhidinov [kk], Aurimas Černius [lt], Seán de Búrca [ga],
Fran Diéguez [gl], Daniel Mustieles [es], Dušan Kazik [sk],
Matej Urbančič [sl], Andika Triwidada [id], Jordi Mas [ca],
Ihar Hrachyshka [be]
3.9.90
======
* workspaceThumbnails: Exclude transient windows when shifting workspaces

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.9.90],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.9.91],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@@ -24,9 +24,6 @@ LT_INIT([disable-static])
# i18n
IT_PROG_INTLTOOL([0.40])
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.17])
GETTEXT_PACKAGE=gnome-shell
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
@@ -63,7 +60,7 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.13.4
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.35.4
MUTTER_MIN_VERSION=3.9.90
MUTTER_MIN_VERSION=3.9.91
GTK_MIN_VERSION=3.7.9
GIO_MIN_VERSION=2.37.0
LIBECAL_MIN_VERSION=3.5.3
@@ -78,26 +75,35 @@ NETWORKMANAGER_MIN_VERSION=0.9.8
PULSE_MIN_VERS=2.0
# Collect more than 20 libraries for a prize!
PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
libxml-2.0
gtk+-3.0 >= $GTK_MIN_VERSION
atk-bridge-2.0
libmutter >= $MUTTER_MIN_VERSION
gjs-internals-1.0 >= $GJS_MIN_VERSION
libgnome-menu-3.0 >= $GNOME_MENUS_REQUIRED_VERSION
$recorder_modules
gdk-x11-3.0 libsoup-2.4
xtst
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
libcanberra libcanberra-gtk3
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
polkit-agent-1 >= $POLKIT_MIN_VERSION
libnm-glib libnm-util >= $NETWORKMANAGER_MIN_VERSION
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
libsecret-unstable gcr-base-3 >= $GCR_MIN_VERSION)
SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
libxml-2.0
gtk+-3.0 >= $GTK_MIN_VERSION
atk-bridge-2.0
gjs-internals-1.0 >= $GJS_MIN_VERSION
libgnome-menu-3.0 >= $GNOME_MENUS_REQUIRED_VERSION
$recorder_modules
gdk-x11-3.0 libsoup-2.4
xtst
clutter-x11-1.0 >= $CLUTTER_MIN_VERSION
clutter-glx-1.0 >= $CLUTTER_MIN_VERSION
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
libcanberra libcanberra-gtk3
telepathy-glib >= $TELEPATHY_GLIB_MIN_VERSION
polkit-agent-1 >= $POLKIT_MIN_VERSION
libnm-glib libnm-util >= $NETWORKMANAGER_MIN_VERSION
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
libsecret-unstable gcr-base-3 >= $GCR_MIN_VERSION"
PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)
PKG_CHECK_MODULES(MUTTER, libmutter >= $MUTTER_MIN_VERSION)
PKG_CHECK_MODULES(MUTTER_WAYLAND, [libmutter-wayland >= $MUTTER_MIN_VERSION],
[MUTTER_WAYLAND_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter-wayland`
AC_SUBST(MUTTER_WAYLAND_TYPELIB_DIR)
have_mutter_wayland=yes],
[have_mutter_wayland=no])
AM_CONDITIONAL(HAVE_MUTTER_WAYLAND, test $have_mutter_wayland != no)
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-internals-1.0 >= $GJS_MIN_VERSION)
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
@@ -133,8 +139,9 @@ AC_SUBST([GNOME_KEYBINDINGS_KEYSDIR])
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir libmutter`
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter`
AC_SUBST(MUTTER_GIR_DIR)
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir libmutter`
AC_SUBST(MUTTER_TYPELIB_DIR)
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
@@ -174,10 +181,6 @@ AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
GNOME_COMPILE_WARNINGS([error])
AC_ARG_ENABLE(jhbuild-wrapper-script,
AS_HELP_STRING([--enable-jhbuild-wrapper-script],[Make "gnome-shell" script work for jhbuild]),,enable_jhbuild_wrapper_script=no)
AM_CONDITIONAL(USE_JHBUILD_WRAPPER_SCRIPT, test "x$enable_jhbuild_wrapper_script" = xyes)
BROWSER_PLUGIN_DIR="${BROWSER_PLUGIN_DIR:-"\${libdir}/mozilla/plugins"}"
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])

View File

@@ -41,6 +41,8 @@ dist_theme_DATA = \
theme/message-tray-background.png \
theme/more-results.svg \
theme/noise-texture.png \
theme/page-indicator-active.svg \
theme/page-indicator-inactive.svg \
theme/panel-button-border.svg \
theme/panel-button-highlight-narrow.svg \
theme/panel-button-highlight-wide.svg \

View File

@@ -45,16 +45,6 @@
<default>[]</default>
<_summary>History for the looking glass dialog</_summary>
</key>
<key name="saved-im-presence" type="i">
<default>1</default>
<_summary>Internally used to store the last IM presence explicitly set by the user. The
value here is from the TpConnectionPresenceType enumeration.</_summary>
</key>
<key name="saved-session-presence" type="i">
<default>0</default>
<_summary>Internally used to store the last session presence status for the user. The
value here is from the GsmPresenceStatus enumeration.</_summary>
</key>
<key name="always-show-log-out" type="b">
<default>false</default>
<_summary>Always show the 'Log out' menuitem in the user menu.</_summary>

View File

@@ -162,12 +162,12 @@ StScrollBar StButton#vhandle:active {
}
.popup-submenu-menu-item:open {
background-color: #4c4c4c;
background-color: #333333;
}
.popup-sub-menu {
background-gradient-start: rgba(80,80,80,0.3);
background-gradient-end: rgba(80,80,80,0.7);
background-gradient-end: rgba(80,80,80,0.4);
background-gradient-direction: vertical;
box-shadow: inset 0px 2px 4px rgba(0,0,0,0.9);
}
@@ -633,11 +633,12 @@ StScrollBar StButton#vhandle:active {
.panel-status-indicators-box,
.panel-status-menu-box {
spacing: 8px;
spacing: 2px;
}
.system-status-icon {
icon-size: 1.09em;
padding: 0 5px;
}
.aggregate-menu {
@@ -655,18 +656,27 @@ StScrollBar StButton#vhandle:active {
.system-menu-action {
color: #e6e6e6;
border-radius: 4px;
padding: 6px;
border-radius: 32px; /* wish we could do 50% */
padding: 13px;
border: 1px solid #5f5f5f; /* using rgba() is flaky unfortunately */
}
.system-menu-action:hover,
.system-menu-action:focus {
color: white;
background-color: rgba(255,255,255,0.1);
background-color: #4c4c4c;
border: none;
padding: 14px;
}
.system-menu-action:active {
color: black;
background-color: #6f6f6f;
}
.system-menu-action > StIcon {
icon-size: 32px;
icon-size: 16px;
}
.screencast-indicator {
@@ -898,9 +908,9 @@ StScrollBar StButton#vhandle:active {
/* Application Launchers, Grid and List results */
.icon-grid {
spacing: 36px;
-shell-grid-horizontal-item-size: 118px;
-shell-grid-vertical-item-size: 118px;
spacing: 30px;
-shell-grid-horizontal-item-size: 136px;
-shell-grid-vertical-item-size: 136px;
}
.icon-grid .overview-icon {
@@ -924,12 +934,31 @@ StScrollBar StButton#vhandle:active {
padding: 3px 31px;
}
.search-display > StBoxLayout,
.all-apps > StBoxLayout,
.all-apps,
.frequent-apps > StBoxLayout {
/* horizontal padding to make sure scrollbars or dash don't overlap content */
padding: 0px 88px;
padding: 0px 88px 10px 88px;
}
.page-indicator {
padding: 15px 30px;
}
.page-indicator .page-indicator-icon {
width: 18px;
height: 18px;
background-image: url(page-indicator-inactive.svg);
}
.page-indicator:hover .page-indicator-icon,
.page-indicator:checked .page-indicator-icon {
background-image: url(page-indicator-active.svg);
}
.no-frequent-applications-label {
font-size: 18pt;
color: #999999;
}
.app-folder-icon {
@@ -961,13 +990,21 @@ StScrollBar StButton#vhandle:active {
background-image: url("more-results.svg");
}
.app-well-app > .overview-icon.overview-icon-with-label,
.grid-search-result .overview-icon.overview-icon-with-label {
/* since the label controls its own spacing, it is visually more
consistent to use different padding values for top and bottom */
padding: 10px 8px 5px 8px;
spacing: 4px;
}
.app-well-app > .overview-icon,
.show-apps > .overview-icon,
.search-provider-icon,
.list-search-result,
.grid-search-result .overview-icon {
border-radius: 4px;
padding: 3px;
padding: 6px;
border: 1px rgba(0,0,0,0);
transition-duration: 100ms;
text-align: center;
@@ -979,13 +1016,13 @@ StScrollBar StButton#vhandle:active {
.app-folder-popup {
-arrow-border-radius: 8px;
-arrow-background-color: black;
-arrow-background-color: rgba(0,0,0,0.3);
-arrow-base: 24px;
-arrow-rise: 11px;
}
.app-folder-popup-bin {
padding: 15px;
padding: 5px;
}
.app-well-app.running > .overview-icon {
@@ -995,7 +1032,7 @@ StScrollBar StButton#vhandle:active {
}
.app-well-app.app-folder > .overview-icon {
background-color: rgba(0,0,0,0.5);
background-color: rgba(0,0,0,0.3);
}
.app-well-app:hover > .overview-icon,
@@ -1010,7 +1047,7 @@ StScrollBar StButton#vhandle:active {
}
.app-display .app-well-app > .overview-icon {
border-radius: 10px;
border-radius: 4px;
}
.list-search-result:hover .list-search-result-description {
@@ -1032,12 +1069,14 @@ StScrollBar StButton#vhandle:active {
.app-well-app:checked > .overview-icon,
.app-well-app:active > .overview-icon,
.show-apps:checked > .overview-icon,
.show-apps:active > .overview-icon {
.show-apps:active > .overview-icon,
.search-provider-icon:active,
.list-search-result:active {
background-gradient-start: rgba(255, 255, 255, .05);
background-gradient-end: rgba(255, 255, 255, .15);
background-gradient-direction: vertical;
border-radius: 4px;
box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 1);
box-shadow: inset 0px 1px 2px 0px rgba(0, 0, 0, 0.7);
transition-duration: 100ms;
}
@@ -1202,6 +1241,10 @@ StScrollBar StButton#vhandle:active {
padding-top: 8px;
}
.calendar-month-label:focus {
background-color: #999999;
}
.calendar-change-month-back {
width: 18px;
height: 12px;
@@ -1247,6 +1290,10 @@ StScrollBar StButton#vhandle:active {
color: #eeeeec;
}
.datemenu-date-label:focus {
background-color: #999999;
}
.calendar-day-base {
font-size: 9pt;
text-align: center;
@@ -1617,7 +1664,7 @@ StScrollBar StButton#vhandle:active {
}
.chat-notification-scrollview{
max-height: 22em;
max-height: 22em;
}
.subscription-message {
@@ -1875,6 +1922,10 @@ StScrollBar StButton#vhandle:active {
spacing: 42px;
}
.end-session-dialog-list {
padding-top: 20px;
}
.end-session-dialog-subject {
padding-left: 17px;
padding-bottom: 20px;
@@ -1908,50 +1959,30 @@ StScrollBar StButton#vhandle:active {
height: 32px;
}
.end-session-dialog-app-list {
font-size: 10pt;
.end-session-dialog-inhibitor-layout {
spacing: 16px;
max-height: 200px;
padding-top: 42px;
padding-left: 49px;
padding-right: 32px;
padding-right: 50px;
padding-left: 50px;
}
.end-session-dialog-app-list:rtl {
padding-right: 49px;
padding-left: 32px;
.end-session-dialog-list-header {
font-weight: bold;
}
.end-session-dialog-app-list-item {
color: #ccc;
.end-session-dialog-app-list-item,
.end-session-dialog-session-list-item {
spacing: 1em;
}
.end-session-dialog-app-list-item:hover {
color: white;
}
.end-session-dialog-app-list-item:ltr {
padding-right: 1em;
}
.end-session-dialog-app-list-item:rtl {
padding-left: 1em;
}
.end-session-dialog-app-list-item-icon:ltr {
padding-right: 17px;
}
.end-session-dialog-app-list-item-icon:rtl {
padding-left: 17px;
}
.end-session-dialog-app-list-item-name {
font-size: 10pt;
.end-session-dialog-app-list-item-name,
.end-session-dialog-session-list-item-name {
font-weight: bold;
}
.end-session-dialog-app-list-item-description {
font-size: 8pt;
color: #444444;
color: #cccccc;
font-size: 10pt;
}
/* ShellMountOperation Dialogs */
@@ -2239,8 +2270,6 @@ StScrollBar StButton#vhandle:active {
.framed-user-icon {
border: 2px solid #8b8b8b;
border-radius: 5px;
width: 48pt;
height: 48pt;
background-size: contain;
}
@@ -2267,14 +2296,6 @@ StScrollBar StButton#vhandle:active {
/* Reset border and background */
border: none;
background-color: transparent;
padding-bottom: 80px;
padding-top: 80px;
border-radius: 16px;
min-height: 150px;
max-height: 700px;
min-width: 350px;
}
.login-dialog-button-box {
@@ -2288,6 +2309,7 @@ StScrollBar StButton#vhandle:active {
.login-dialog-user-list {
spacing: 12px;
padding: .2em;
width: 23em;
}
.login-dialog-user-list-item {
@@ -2449,8 +2471,7 @@ StScrollBar StButton#vhandle:active {
background-color: rgba(102, 102, 102, 0.15);
}
.login-dialog-message-warning,
.login-dialog-message-info {
.login-dialog-message {
padding-top: 4px;
padding-bottom: 16px;
min-height: 2em;
@@ -2461,8 +2482,8 @@ StScrollBar StButton#vhandle:active {
}
.login-dialog-message-hint {
padding-bottom: 16px;
min-height: 2em;
padding-top: 0px;
padding-bottom: 20px;
}
.user-widget-label {

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18"
height="18"
id="svg4703"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="page-indicator-active.svg">
<defs
id="defs4705" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.197802"
inkscape:cx="2.1522887"
inkscape:cy="16.782904"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1920"
inkscape:window-height="1021"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata4708">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,2)">
<path
transform="matrix(0.72823872,0,0,0.8336417,-1512.2872,-525.55618)"
d="m 2099.9808,638.83099 c 0,5.29998 -4.9184,9.59645 -10.9854,9.59645 -6.0671,0 -10.9854,-4.29647 -10.9854,-9.59645 0,-5.29997 4.9183,-9.59645 10.9854,-9.59645 6.067,0 10.9854,4.29648 10.9854,9.59645 z"
sodipodi:ry="9.5964489"
sodipodi:rx="10.985409"
sodipodi:cy="638.83099"
sodipodi:cx="2088.9954"
id="path4711"
style="fill:#fdffff;fill-opacity:0.94117647;stroke:none"
sodipodi:type="arc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="18"
height="18"
id="svg5266"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="page-indicator-inactive.svg">
<defs
id="defs5268" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="11.313709"
inkscape:cx="13.381365"
inkscape:cy="17.859535"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1920"
inkscape:window-height="1021"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata5271">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,2)">
<path
sodipodi:type="arc"
style="fill:#ffffff;fill-opacity:0;stroke:#ffffff;stroke-width:2.93356276;stroke-miterlimit:4;stroke-opacity:0.39215686;stroke-dasharray:none"
id="path5274"
sodipodi:cx="2088.9954"
sodipodi:cy="638.83099"
sodipodi:rx="10.985409"
sodipodi:ry="9.5964489"
d="m 2099.9808,638.83099 c 0,5.29998 -4.9184,9.59645 -10.9854,9.59645 -6.0671,0 -10.9854,-4.29647 -10.9854,-9.59645 0,-5.29997 4.9183,-9.59645 10.9854,-9.59645 6.067,0 10.9854,4.29648 10.9854,9.59645 z"
transform="matrix(0.63720887,0,0,0.72943648,-1322.1264,-458.98661)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -112,7 +112,7 @@ expand_content_files=
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(BLUETOOTH_LIBS) $(top_builddir)/src/libgnome-shell.la
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(BLUETOOTH_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell-base.la $(top_builddir)/src/libgnome-shell.la
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make

View File

@@ -55,6 +55,7 @@ nobase_dist_js_DATA = \
ui/extensionSystem.js \
ui/extensionDownloader.js \
ui/environment.js \
ui/focusCaretTracker.js\
ui/ibusCandidatePopup.js\
ui/grabHelper.js \
ui/iconGrid.js \

View File

@@ -36,8 +36,6 @@ const BeginRequestType = {
DONT_PROVIDE_USERNAME: 1
};
let _messageStyleMap;
const AuthPrompt = new Lang.Class({
Name: 'AuthPrompt',
@@ -109,7 +107,8 @@ const AuthPrompt = new Lang.Class({
this._entry.grab_key_focus();
this._message = new St.Label({ opacity: 0 });
this._message = new St.Label({ opacity: 0,
styleClass: 'login-dialog-message' });
this._message.clutter_text.line_wrap = true;
this.actor.add(this._message, { x_fill: true, y_align: St.Align.START });
@@ -120,7 +119,7 @@ const AuthPrompt = new Lang.Class({
x_align: St.Align.MIDDLE,
y_align: St.Align.END });
this._defaultButtonWell = new St.Widget();
this._defaultButtonWell = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._defaultButtonWellActor = null;
this._initButtons();
@@ -265,10 +264,6 @@ const AuthPrompt = new Lang.Class({
addActorToDefaultButtonWell: function(actor) {
this._defaultButtonWell.add_child(actor);
actor.add_constraint(new Clutter.AlignConstraint({ source: this._spinner.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
},
setActorInDefaultButtonWell: function(actor, animate) {
@@ -375,27 +370,22 @@ const AuthPrompt = new Lang.Class({
});
},
_initMessageStyleMap: function() {
if (_messageStyleMap)
return;
_messageStyleMap = {};
_messageStyleMap[GdmUtil.MessageType.NONE] = '';
_messageStyleMap[GdmUtil.MessageType.ERROR] = 'login-dialog-message-warning';
_messageStyleMap[GdmUtil.MessageType.INFO] = 'login-dialog-message-info';
_messageStyleMap[GdmUtil.MessageType.HINT] = 'login-dialog-message-hint';
},
setMessage: function(message, type) {
this._initMessageStyleMap();
if (type == GdmUtil.MessageType.ERROR)
this._message.add_style_class_name('login-dialog-message-warning');
else
this._message.remove_style_class_name('login-dialog-message-warning');
if (type == GdmUtil.MessageType.HINT)
this._message.add_style_class_name('login-dialog-message-hint');
else
this._message.remove_style_class_name('login-dialog-message-hint');
if (message) {
Tweener.removeTweens(this._message);
this._message.text = message;
this._message.styleClass = _messageStyleMap[type];
this._message.opacity = 255;
} else {
this._message.styleClass = null;
this._message.opacity = 0;
}
},

View File

@@ -102,11 +102,6 @@ const UserListItem = new Lang.Class({
syncStyleClasses: function() {
this._updateLoggedIn();
if (global.stage.get_key_focus() == this.actor)
this.actor.add_style_pseudo_class('focus');
else
this.actor.remove_style_pseudo_class('focus');
},
_updateLoggedIn: function() {
@@ -314,10 +309,6 @@ const SessionMenuButton = new Lang.Class({
this._button.remove_style_pseudo_class('active');
}));
let subtitle = new PopupMenu.PopupMenuItem(_("Session"), { style_class: 'popup-subtitle-menu-item',
reactive: false });
this._menu.addMenuItem(subtitle);
this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
this._manager.addMenu(this._menu);
@@ -393,6 +384,7 @@ const LoginDialog = new Lang.Class({
_init: function(parentActor) {
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW,
layout_manager: new Clutter.BinLayout(),
style_class: 'login-dialog',
visible: false });
@@ -431,11 +423,12 @@ const LoginDialog = new Lang.Class({
Lang.bind(this, this._updateLogoTexture));
this._userSelectionBox = new St.BoxLayout({ style_class: 'login-dialog-user-selection-box',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_expand: true,
vertical: true,
visible: false });
this._userSelectionBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
this.actor.add_child(this._userSelectionBox);
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
@@ -453,14 +446,7 @@ const LoginDialog = new Lang.Class({
this._authPrompt.connect('prompted', Lang.bind(this, this._onPrompted));
this._authPrompt.connect('reset', Lang.bind(this, this._onReset));
this._authPrompt.hide();
this._authPrompt.actor.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
this.actor.add_child(this._authPrompt.actor);
this._userList.actor.add_constraint(new Clutter.BindConstraint({ source: this._authPrompt.actor,
coordinate: Clutter.BindCoordinate.WIDTH }));
// translators: this message is shown below the user list on the
// login screen. It can be activated to reveal an entry for
@@ -475,11 +461,7 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START,
x_fill: true });
this._notListedButton.connect('clicked',
Lang.bind(this, function() {
this._authPrompt.cancelButton.show();
this._hideUserListAndLogIn();
}));
this._notListedButton.connect('clicked', Lang.bind(this, this._hideUserListAskForUsernameAndBeginVerification));
this._notListedButton.hide();
@@ -488,14 +470,11 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START,
x_fill: true });
this._logoBin = new St.Bin({ style_class: 'login-dialog-logo-bin', y_expand: true });
this._logoBin.set_y_align(Clutter.ActorAlign.END);
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.X_AXIS,
factor: 0.5 }));
this._logoBin.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.Y_AXIS,
factor: 1.0 }));
this._logoBin = new St.Widget({ style_class: 'login-dialog-logo-bin',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.END,
x_expand: true,
y_expand: true });
this.actor.add_child(this._logoBin);
this._updateLogo();
@@ -568,11 +547,10 @@ const LoginDialog = new Lang.Class({
if (this._logoFileUri != uri)
return;
let icon = null;
this._logoBin.destroy_all_children();
if (this._logoFileUri)
icon = this._textureCache.load_uri_async(this._logoFileUri,
-1, _LOGO_ICON_HEIGHT);
this._logoBin.set_child(icon);
this._logoBin.add_child(this._textureCache.load_uri_async(this._logoFileUri,
-1, _LOGO_ICON_HEIGHT));
},
_updateLogo: function() {
@@ -595,11 +573,13 @@ const LoginDialog = new Lang.Class({
this._user = null;
if (this._disableUserList) {
this._authPrompt.cancelButton.hide();
this._hideUserListAndLogIn();
if (beginRequest == AuthPrompt.BeginRequestType.PROVIDE_USERNAME) {
if (!this._disableUserList)
this._showUserList();
else
this._hideUserListAskForUsernameAndBeginVerification();
} else {
this._showUserList();
this._hideUserListAndBeginVerification();
}
},
@@ -608,10 +588,11 @@ const LoginDialog = new Lang.Class({
},
_shouldShowSessionMenuButton: function() {
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFYING)
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFYING &&
this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_FAILED)
return false;
if (this._user && this._user.is_logged_in())
if (this._user && this._user.is_loaded && this._user.is_logged_in())
return false;
return true;
@@ -655,6 +636,7 @@ const LoginDialog = new Lang.Class({
this._authPrompt.disconnect(nextSignalId);
this._authPrompt.updateSensitivity(false);
let answer = this._authPrompt.getAnswer();
this._user = this._userManager.get_user(answer);
this._authPrompt.clear();
this._authPrompt.startSpinning();
this._authPrompt.begin({ userName: answer });
@@ -911,6 +893,12 @@ const LoginDialog = new Lang.Class({
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE });
this._userList.actor.grab_key_focus();
this.actor.show();
this.actor.opacity = 0;
Tweener.addTween(this.actor,
{ opacity: 255,
time: 1,
transition: 'easeInQuad' });
return true;
},
@@ -922,5 +910,9 @@ const LoginDialog = new Lang.Class({
addCharacter: function(unichar) {
this._authPrompt.addCharacter(unichar);
},
finish: function(onComplete) {
this._authPrompt.finish(onComplete);
},
});
Signals.addSignalMethods(LoginDialog.prototype);

View File

@@ -381,21 +381,38 @@ const ShellUserVerifier = new Lang.Class({
_startService: function(serviceName) {
this._hold.acquire();
this._userVerifier.call_begin_verification_for_user(serviceName,
this._userName,
this._cancellable,
Lang.bind(this, function(obj, result) {
try {
obj.call_begin_verification_for_user_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
return;
} catch(e) {
this._reportInitError('Failed to start verification for user', e);
return;
}
if (this._userName) {
this._userVerifier.call_begin_verification_for_user(serviceName,
this._userName,
this._cancellable,
Lang.bind(this, function(obj, result) {
try {
obj.call_begin_verification_for_user_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
return;
} catch(e) {
this._reportInitError('Failed to start verification for user', e);
return;
}
this._hold.release();
}));
this._hold.release();
}));
} else {
this._userVerifier.call_begin_verification(serviceName,
this._cancellable,
Lang.bind(this, function(obj, result) {
try {
obj.call_begin_verification_finish(result);
} catch(e if e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) {
return;
} catch(e) {
this._reportInitError('Failed to start verification', e);
return;
}
this._hold.release();
}));
}
},
_beginVerification: function() {

View File

@@ -8,21 +8,9 @@ const Shell = imports.gi.Shell;
const Signals = imports.signals;
const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
<method name='PowerOff'>
<arg type='b' direction='in'/>
</method>
<method name='Reboot'>
<arg type='b' direction='in'/>
</method>
<method name='Suspend'>
<arg type='b' direction='in'/>
</method>
<method name='CanPowerOff'>
<arg type='s' direction='out'/>
</method>
<method name='CanReboot'>
<arg type='s' direction='out'/>
</method>
<method name='CanSuspend'>
<arg type='s' direction='out'/>
</method>
@@ -159,24 +147,6 @@ const LoginManagerSystemd = new Lang.Class({
}));
},
canPowerOff: function(asyncCallback) {
this._proxy.CanPowerOffRemote(function(result, error) {
if (error)
asyncCallback(false);
else
asyncCallback(result[0] != 'no');
});
},
canReboot: function(asyncCallback) {
this._proxy.CanRebootRemote(function(result, error) {
if (error)
asyncCallback(false);
else
asyncCallback(result[0] != 'no');
});
},
canSuspend: function(asyncCallback) {
this._proxy.CanSuspendRemote(function(result, error) {
if (error)
@@ -195,14 +165,6 @@ const LoginManagerSystemd = new Lang.Class({
});
},
powerOff: function() {
this._proxy.PowerOffRemote(true);
},
reboot: function() {
this._proxy.RebootRemote(true);
},
suspend: function() {
this._proxy.SuspendRemote(true);
},
@@ -264,24 +226,6 @@ const LoginManagerConsoleKit = new Lang.Class({
}));
},
canPowerOff: function(asyncCallback) {
this._proxy.CanStopRemote(function(result, error) {
if (error)
asyncCallback(false);
else
asyncCallback(result[0]);
});
},
canReboot: function(asyncCallback) {
this._proxy.CanRestartRemote(function(result, error) {
if (error)
asyncCallback(false);
else
asyncCallback(result[0]);
});
},
canSuspend: function(asyncCallback) {
asyncCallback(false);
},
@@ -290,14 +234,6 @@ const LoginManagerConsoleKit = new Lang.Class({
asyncCallback([]);
},
powerOff: function() {
this._proxy.StopRemote();
},
reboot: function() {
this._proxy.RestartRemote();
},
suspend: function() {
this.emit('prepare-for-sleep', true);
this.emit('prepare-for-sleep', false);

View File

@@ -20,7 +20,7 @@ const ObjectManagerIface = <interface name="org.freedesktop.DBus.ObjectManager">
<arg name="objectPath" type="o"/>
<arg name="interfaces" type="as" />
</signal>
</interface>
</interface>;
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
@@ -71,21 +71,24 @@ const ObjectManager = new Lang.Class({
},
_addInterface: function(objectPath, interfaceName, onFinished) {
let info = this._interfaceInfos[interfaceName];
let info = this._interfaceInfos[interfaceName];
if (!info)
return;
if (!info) {
if (onFinished)
onFinished();
return;
}
let proxy = new Gio.DBusProxy({ g_connection: this._connection,
g_name: this._serviceName,
g_object_path: objectPath,
g_interface_name: interfaceName,
g_interface_info: info,
g_flags: Gio.DBusProxyFlags.NONE });
let proxy = new Gio.DBusProxy({ g_connection: this._connection,
g_name: this._serviceName,
g_object_path: objectPath,
g_interface_name: interfaceName,
g_interface_info: info,
g_flags: Gio.DBusProxyFlags.NONE });
proxy.init_async(GLib.PRIORITY_DEFAULT,
this._cancellable,
Lang.bind(this, function(initable, result) {
proxy.init_async(GLib.PRIORITY_DEFAULT,
this._cancellable,
Lang.bind(this, function(initable, result) {
let error = null;
try {
initable.init_finish(result);

View File

@@ -355,10 +355,13 @@ const WindowSwitcherPopup = new Lang.Class({
Name: 'WindowSwitcherPopup',
Extends: SwitcherPopup.SwitcherPopup,
_init: function(items) {
this.parent(items);
this._settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
},
_getWindowList: function() {
let settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
let workspace = settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace()
: null;
let workspace = this._settings.get_boolean('current-workspace-only') ? global.screen.get_active_workspace() : null;
return global.display.get_tab_list(Meta.TabList.NORMAL, global.screen, workspace);
},
@@ -368,7 +371,8 @@ const WindowSwitcherPopup = new Lang.Class({
if (windows.length == 0)
return false;
this._switcherList = new WindowList(windows);
let mode = this._settings.get_enum('app-icon-mode');
this._switcherList = new WindowList(windows, mode);
this._items = this._switcherList.icons;
return true;
@@ -663,7 +667,7 @@ const ThumbnailList = new Lang.Class({
const WindowIcon = new Lang.Class({
Name: 'WindowIcon',
_init: function(window) {
_init: function(window, mode) {
this.window = window;
this.actor = new St.BoxLayout({ style_class: 'alt-tab-app',
@@ -681,8 +685,7 @@ const WindowIcon = new Lang.Class({
this._icon.destroy_all_children();
let settings = new Gio.Settings({ schema: 'org.gnome.shell.window-switcher' });
switch (settings.get_enum('app-icon-mode')) {
switch (mode) {
case AppIconMode.THUMBNAIL_ONLY:
size = WINDOW_PREVIEW_SIZE;
this._icon.add_actor(_createWindowClone(mutterWindow, WINDOW_PREVIEW_SIZE));
@@ -720,7 +723,7 @@ const WindowList = new Lang.Class({
Name: 'WindowList',
Extends: SwitcherPopup.SwitcherList,
_init : function(windows) {
_init : function(windows, mode) {
this.parent(true);
this._label = new St.Label({ x_align: Clutter.ActorAlign.CENTER,
@@ -732,7 +735,7 @@ const WindowList = new Lang.Class({
for (let i = 0; i < windows.length; i++) {
let win = windows[i];
let icon = new WindowIcon(win);
let icon = new WindowIcon(win, mode);
this.addItem(icon.actor, icon.label);
this.icons.push(icon);

File diff suppressed because it is too large Load Diff

View File

@@ -14,15 +14,15 @@ const AppFavorites = new Lang.Class({
_init: function() {
this._favorites = {};
global.settings.connect('changed::' + this.FAVORITE_APPS_KEY, Lang.bind(this, this._onFavsChanged));
this._reload();
this.reload();
},
_onFavsChanged: function() {
this._reload();
this.reload();
this.emit('changed');
},
_reload: function() {
reload: function() {
let ids = global.settings.get_strv(this.FAVORITE_APPS_KEY);
let appSys = Shell.AppSystem.get_default();
let apps = ids.map(function (id) {

View File

@@ -639,5 +639,18 @@ const BoxPointer = new Lang.Class({
get opacity() {
return this.actor.opacity;
},
updateArrowSide: function(side) {
this._arrowSide = side;
this._border.queue_repaint();
},
getPadding: function(side) {
return this.bin.get_theme_node().get_padding(side);
},
getArrowHeight: function() {
return this.actor.get_theme_node().get_length('-arrow-rise');
}
});

View File

@@ -444,14 +444,17 @@ const Calendar = new Lang.Class({
{ row: 0, col: 0, col_span: offsetCols + 7 });
this._backButton = new St.Button({ style_class: 'calendar-change-month-back',
accessible_name: _("Previous month"),
can_focus: true });
this._topBox.add(this._backButton);
this._backButton.connect('clicked', Lang.bind(this, this._onPrevMonthButtonClicked));
this._monthLabel = new St.Label({style_class: 'calendar-month-label'});
this._monthLabel = new St.Label({style_class: 'calendar-month-label',
can_focus: true });
this._topBox.add(this._monthLabel, { expand: true, x_fill: false, x_align: St.Align.MIDDLE });
this._forwardButton = new St.Button({ style_class: 'calendar-change-month-forward',
accessible_name: _("Next month"),
can_focus: true });
this._topBox.add(this._forwardButton);
this._forwardButton.connect('clicked', Lang.bind(this, this._onNextMonthButtonClicked));

View File

@@ -380,11 +380,7 @@ const VPNRequestHandler = new Lang.Class({
this._childPid = pid;
this._stdin = new Gio.UnixOutputStream({ fd: stdin, close_fd: true });
this._stdout = new Gio.UnixInputStream({ fd: stdout, close_fd: true });
// We need this one too, even if don't actually care of what the process
// has to say on stderr, because otherwise the fd opened by g_spawn_async_with_pipes
// is kept open indefinitely
let stderrStream = new Gio.UnixInputStream({ fd: stderr, close_fd: true });
stderrStream.close(null);
GLib.close(stderr);
this._dataStdout = new Gio.DataInputStream({ base_stream: this._stdout });
if (this._newStylePlugin)

View File

@@ -423,7 +423,10 @@ const Dash = new Lang.Class({
this._appSystem = Shell.AppSystem.get_default();
this._appSystem.connect('installed-changed', Lang.bind(this, this._queueRedisplay));
this._appSystem.connect('installed-changed', Lang.bind(this, function() {
AppFavorites.getAppFavorites().reload();
this._queueRedisplay();
}));
AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
this._appSystem.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
@@ -502,15 +505,21 @@ const Dash = new Lang.Class({
Main.queueDeferredWork(this._workId);
},
_hookUpLabel: function(item) {
_hookUpLabel: function(item, appIcon) {
item.child.connect('notify::hover', Lang.bind(this, function() {
this._onHover(item);
this._syncLabel(item, appIcon);
}));
Main.overview.connect('hiding', Lang.bind(this, function() {
this._labelShowing = false;
item.hideLabel();
}));
if (appIcon) {
appIcon.connect('sync-tooltip', Lang.bind(this, function() {
this._syncLabel(item, appIcon);
}));
}
},
_createAppItem: function(app) {
@@ -539,7 +548,7 @@ const Dash = new Lang.Class({
item.setLabelText(app.get_name());
appIcon.icon.setIconSize(this.iconSize);
this._hookUpLabel(item);
this._hookUpLabel(item, appIcon);
return item;
},
@@ -557,8 +566,10 @@ const Dash = new Lang.Class({
}
},
_onHover: function (item) {
if (item.child.get_hover()) {
_syncLabel: function (item, appIcon) {
let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover();
if (shouldShow) {
if (this._showLabelTimeoutId == 0) {
let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
this._showLabelTimeoutId = Mainloop.timeout_add(timeout,

View File

@@ -50,6 +50,7 @@ const DateMenuButton = new Lang.Class({
this.parent(menuAlignment);
this._clockDisplay = new St.Label({ y_align: Clutter.ActorAlign.CENTER });
this.actor.label_actor = this._clockDisplay;
this.actor.add_actor(this._clockDisplay);
this.actor.add_style_class_name ('clock-display');
@@ -62,9 +63,8 @@ const DateMenuButton = new Lang.Class({
hbox.add(vbox);
// Date
this._date = new St.Label();
this.actor.label_actor = this._clockDisplay;
this._date.style_class = 'datemenu-date-label';
this._date = new St.Label({ style_class: 'datemenu-date-label',
can_focus: true });
vbox.add(this._date);
this._eventList = new Calendar.EventsList();

View File

@@ -517,11 +517,6 @@ const _Draggable = new Lang.Class({
},
_cancelDrag: function(eventTime) {
if (this._updateHoverId) {
GLib.source_remove(this._updateHoverId);
this._updateHoverId = 0;
}
this.emit('drag-cancelled', eventTime);
this._dragInProgress = false;
let [snapBackX, snapBackY, snapBackScale] = this._getRestoreLocation();
@@ -617,6 +612,11 @@ const _Draggable = new Lang.Class({
this._lastEnterActor = null;
}
if (this._updateHoverId) {
GLib.source_remove(this._updateHoverId);
this._updateHoverId = 0;
}
this._dragActor = undefined;
currentDraggable = null;
}

View File

@@ -20,7 +20,6 @@
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Signals = imports.signals;
const AccountsService = imports.gi.AccountsService;
const Clutter = imports.gi.Clutter;
@@ -32,7 +31,7 @@ const St = imports.gi.St;
const Shell = imports.gi.Shell;
const GnomeSession = imports.misc.gnomeSession;
const Main = imports.ui.main;
const LoginManager = imports.misc.loginManager;
const ModalDialog = imports.ui.modalDialog;
const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget;
@@ -62,63 +61,96 @@ const EndSessionDialogIface = <interface name="org.gnome.SessionManager.EndSessi
const logoutDialogContent = {
subjectWithUser: C_("title", "Log Out %s"),
subject: C_("title", "Log Out"),
inhibitedDescription: _("Click Log Out to quit these applications and log out of the system."),
uninhibitedDescriptionWithUser: function(user, seconds) {
descriptionWithUser: function(user, seconds) {
return ngettext("%s will be logged out automatically in %d second.",
"%s will be logged out automatically in %d seconds.",
seconds).format(user, seconds);
},
uninhibitedDescription: function(seconds) {
description: function(seconds) {
return ngettext("You will be logged out automatically in %d second.",
"You will be logged out automatically in %d seconds.",
seconds).format(seconds);
},
endDescription: _("Logging out of the system."),
confirmButtons: [{ signal: 'ConfirmedLogout',
label: C_("button", "Log Out") }],
iconStyleClass: 'end-session-dialog-logout-icon'
iconStyleClass: 'end-session-dialog-logout-icon',
showOtherSessions: false,
};
const shutdownDialogContent = {
subject: C_("title", "Power Off"),
inhibitedDescription: _("Click Power Off to quit these applications and power off the system."),
uninhibitedDescription: function(seconds) {
description: function(seconds) {
return ngettext("The system will power off automatically in %d second.",
"The system will power off automatically in %d seconds.",
seconds).format(seconds);
},
endDescription: _("Powering off the system."),
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart") },
{ signal: 'ConfirmedShutdown',
label: C_("button", "Power Off") }],
iconName: 'system-shutdown-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon'
iconStyleClass: 'end-session-dialog-shutdown-icon',
showOtherSessions: true,
};
const restartDialogContent = {
subject: C_("title", "Restart"),
inhibitedDescription: _("Click Restart to quit these applications and restart the system."),
uninhibitedDescription: function(seconds) {
description: function(seconds) {
return ngettext("The system will restart automatically in %d second.",
"The system will restart automatically in %d seconds.",
seconds).format(seconds);
},
endDescription: _("Restarting the system."),
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart") }],
iconName: 'view-refresh-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon'
iconStyleClass: 'end-session-dialog-shutdown-icon',
showOtherSessions: true,
};
const restartInstallDialogContent = {
subject: C_("title", "Restart & Install Updates"),
description: function(seconds) {
return ngettext("The system will automatically restart and install updates in %d second.",
"The system will automatically restart and install updates in %d seconds.",
seconds).format(seconds);
},
confirmButtons: [{ signal: 'ConfirmedReboot',
label: C_("button", "Restart & Install") }],
iconName: 'view-refresh-symbolic',
iconStyleClass: 'end-session-dialog-shutdown-icon',
showOtherSessions: true,
};
const DialogContent = {
0 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_LOGOUT */: logoutDialogContent,
1 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_SHUTDOWN */: shutdownDialogContent,
2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent
2 /* GSM_SHELL_END_SESSION_DIALOG_TYPE_RESTART */: restartDialogContent,
3: restartInstallDialogContent
};
const MAX_USERS_IN_SESSION_DIALOG = 5;
const LogindSessionIface = <interface name='org.freedesktop.login1.Session'>
<property name="Id" type="s" access="read"/>
<property name="Remote" type="b" access="read"/>
<property name="Class" type="s" access="read"/>
<property name="Type" type="s" access="read"/>
<property name="State" type="s" access="read"/>
</interface>;
const LogindSession = Gio.DBusProxy.makeProxyWrapper(LogindSessionIface);
function findAppFromInhibitor(inhibitor) {
let [desktopFile] = inhibitor.GetAppIdSync();
let desktopFile;
try {
[desktopFile] = inhibitor.GetAppIdSync();
} catch(e) {
// XXX -- sometimes JIT inhibitors generated by gnome-session
// get removed too soon. Don't fail in this case.
log('gnome-session gave us a dead inhibitor: %s'.format(inhibitor.get_object_path()));
return null;
}
if (!GLib.str_has_suffix(desktopFile, '.desktop'))
desktopFile += '.desktop';
@@ -126,58 +158,6 @@ function findAppFromInhibitor(inhibitor) {
return Shell.AppSystem.get_default().lookup_heuristic_basename(desktopFile);
}
const ListItem = new Lang.Class({
Name: 'ListItem',
_init: function(app, reason) {
this._app = app;
this._reason = reason;
if (this._reason == null)
this._reason = '';
let layout = new St.BoxLayout({ vertical: false});
this.actor = new St.Button({ style_class: 'end-session-dialog-app-list-item',
can_focus: true,
child: layout,
reactive: true,
x_align: St.Align.START,
x_fill: true });
this._icon = this._app.create_icon_texture(_ITEM_ICON_SIZE);
let iconBin = new St.Bin({ style_class: 'end-session-dialog-app-list-item-icon',
child: this._icon });
layout.add(iconBin);
let textLayout = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item-text-box',
vertical: true });
layout.add(textLayout);
this._nameLabel = new St.Label({ text: this._app.get_name(),
style_class: 'end-session-dialog-app-list-item-name' });
textLayout.add(this._nameLabel,
{ expand: false,
x_fill: true });
this._descriptionLabel = new St.Label({ text: this._reason,
style_class: 'end-session-dialog-app-list-item-description' });
this.actor.label_actor = this._nameLabel;
textLayout.add(this._descriptionLabel,
{ expand: true,
x_fill: true });
this.actor.connect('clicked', Lang.bind(this, this._onClicked));
},
_onClicked: function() {
this.emit('activate');
this._app.activate();
}
});
Signals.addSignalMethods(ListItem.prototype);
// The logout timer only shows updates every 10 seconds
// until the last 10 seconds, then it shows updates every
// second. This function takes a given time and returns
@@ -228,22 +208,23 @@ const EndSessionDialog = new Lang.Class({
this.parent({ styleClass: 'end-session-dialog',
destroyOnClose: false });
this._user = AccountsService.UserManager.get_default().get_user(GLib.get_user_name());
this._loginManager = LoginManager.getLoginManager();
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
this._updatesFile = Gio.File.new_for_path('/system-update');
this._secondsLeft = 0;
this._totalSecondsToStayOpen = 0;
this._inhibitors = [];
this._applications = [];
this._sessions = [];
this.connect('destroy',
Lang.bind(this, this._onDestroy));
this.connect('opened',
Lang.bind(this, this._onOpened));
this._userLoadedId = this._user.connect('notify::is_loaded',
Lang.bind(this, this._updateContent));
this._userChangedId = this._user.connect('changed',
Lang.bind(this, this._updateContent));
this._userLoadedId = this._user.connect('notify::is_loaded', Lang.bind(this, this._sync));
this._userChangedId = this._user.connect('changed', Lang.bind(this, this._sync));
let mainContentLayout = new St.BoxLayout({ vertical: false });
this.contentLayout.add(mainContentLayout,
@@ -275,28 +256,28 @@ const EndSessionDialog = new Lang.Class({
{ y_fill: true,
y_align: St.Align.START });
let scrollView = new St.ScrollView({ style_class: 'end-session-dialog-app-list'});
scrollView.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this.contentLayout.add(scrollView,
this._scrollView = new St.ScrollView({ style_class: 'end-session-dialog-list' });
this._scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
this.contentLayout.add(this._scrollView,
{ x_fill: true,
y_fill: true });
scrollView.hide();
this._scrollView.hide();
this._inhibitorSection = new St.BoxLayout({ vertical: true,
style_class: 'end-session-dialog-inhibitor-layout' });
this._scrollView.add_actor(this._inhibitorSection);
this._applicationHeader = new St.Label({ style_class: 'end-session-dialog-list-header',
text: _("Some applications are busy or have unsaved work.") });
this._applicationList = new St.BoxLayout({ vertical: true });
scrollView.add_actor(this._applicationList);
this._inhibitorSection.add_actor(this._applicationHeader);
this._inhibitorSection.add_actor(this._applicationList);
this._applicationList.connect('actor-added',
Lang.bind(this, function() {
if (this._applicationList.get_n_children() == 1)
scrollView.show();
}));
this._applicationList.connect('actor-removed',
Lang.bind(this, function() {
if (this._applicationList.get_n_children() == 0)
scrollView.hide();
}));
this._sessionHeader = new St.Label({ style_class: 'end-session-dialog-list-header',
text: _("Other users are logged in.") });
this._sessionList = new St.BoxLayout({ vertical: true });
this._inhibitorSection.add_actor(this._sessionHeader);
this._inhibitorSection.add_actor(this._sessionList);
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog');
@@ -307,52 +288,42 @@ const EndSessionDialog = new Lang.Class({
this._user.disconnect(this._userChangedId);
},
_updateDescription: function() {
if (this.state != ModalDialog.State.OPENING &&
this.state != ModalDialog.State.OPENED)
_sync: function() {
let open = (this.state == ModalDialog.State.OPENING || this.state == ModalDialog.State.OPENED);
if (!open)
return;
if (this._type == 2 && this._updatesFile.query_exists(null))
this._type = 3;
let dialogContent = DialogContent[this._type];
let subject = dialogContent.subject;
let description;
let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
this._secondsLeft,
10);
if (this._inhibitors.length > 0) {
this._stopTimer();
description = dialogContent.inhibitedDescription;
} else if (this._secondsLeft > 0 && this._inhibitors.length == 0) {
let displayTime = _roundSecondsToInterval(this._totalSecondsToStayOpen,
this._secondsLeft,
10);
if (this._user.is_loaded) {
let realName = this._user.get_real_name();
if (this._user.is_loaded) {
let realName = this._user.get_real_name();
if (realName != null) {
if (dialogContent.subjectWithUser)
subject = dialogContent.subjectWithUser.format(realName);
if (realName != null) {
if (dialogContent.subjectWithUser)
subject = dialogContent.subjectWithUser.format(realName);
if (dialogContent.uninhibitedDescriptionWithUser)
description = dialogContent.uninhibitedDescriptionWithUser(realName, displayTime);
else
description = dialogContent.uninhibitedDescription(displayTime);
}
if (dialogContent.descriptionWithUser)
description = dialogContent.descriptionWithUser(realName, displayTime);
else
description = dialogContent.description(displayTime);
}
if (!description)
description = dialogContent.uninhibitedDescription(displayTime);
} else {
description = dialogContent.endDescription;
}
_setLabelText(this._subjectLabel, subject);
_setLabelText(this._descriptionLabel, description);
},
if (!description)
description = dialogContent.description(displayTime);
_updateContent: function() {
if (this.state != ModalDialog.State.OPENING &&
this.state != ModalDialog.State.OPENED)
return;
_setLabelText(this._descriptionLabel, description);
_setLabelText(this._subjectLabel, subject);
let dialogContent = DialogContent[this._type];
if (dialogContent.iconName) {
@@ -367,7 +338,11 @@ const EndSessionDialog = new Lang.Class({
avatarWidget.update();
}
this._updateDescription();
let hasApplications = this._applications.length > 0;
let hasSessions = this._sessions.length > 0;
this._scrollView.visible = hasApplications || hasSessions;
this._applicationHeader.visible = hasApplications;
this._sessionHeader.visible = hasSessions;
},
_updateButtons: function() {
@@ -413,14 +388,12 @@ const EndSessionDialog = new Lang.Class({
},
_onOpened: function() {
if (this._inhibitors.length == 0)
this._startTimer();
this._sync();
},
_startTimer: function() {
let startTime = GLib.get_monotonic_time();
this._secondsLeft = this._totalSecondsToStayOpen;
this._updateDescription();
this._timerId = Mainloop.timeout_add_seconds(1, Lang.bind(this,
function() {
@@ -429,7 +402,7 @@ const EndSessionDialog = new Lang.Class({
this._secondsLeft = this._totalSecondsToStayOpen - secondsElapsed;
if (this._secondsLeft > 0) {
this._updateDescription();
this._sync();
return true;
}
@@ -442,7 +415,7 @@ const EndSessionDialog = new Lang.Class({
},
_stopTimer: function() {
if (this._timerId != 0) {
if (this._timerId > 0) {
Mainloop.source_remove(this._timerId);
this._timerId = 0;
}
@@ -450,8 +423,33 @@ const EndSessionDialog = new Lang.Class({
this._secondsLeft = 0;
},
_constructListItemForApp: function(inhibitor, app) {
let actor = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item',
can_focus: true });
actor.add(app.create_icon_texture(_ITEM_ICON_SIZE));
let textLayout = new St.BoxLayout({ vertical: true,
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
actor.add(textLayout);
let nameLabel = new St.Label({ text: app.get_name(),
style_class: 'end-session-dialog-app-list-item-name' });
textLayout.add(nameLabel);
actor.label_actor = nameLabel;
let [reason] = inhibitor.GetReasonSync();
if (reason) {
let reasonLabel = new St.Label({ text: reason,
style_class: 'end-session-dialog-app-list-item-description' });
textLayout.add(reasonLabel);
}
return actor;
},
_onInhibitorLoaded: function(inhibitor) {
if (this._inhibitors.indexOf(inhibitor) < 0) {
if (this._applications.indexOf(inhibitor) < 0) {
// Stale inhibitor
return;
}
@@ -459,29 +457,92 @@ const EndSessionDialog = new Lang.Class({
let app = findAppFromInhibitor(inhibitor);
if (app) {
let [reason] = inhibitor.GetReasonSync();
let item = new ListItem(app, reason);
item.connect('activate',
Lang.bind(this, function() {
this.close();
}));
this._applicationList.add(item.actor, { x_fill: true });
this._stopTimer();
let actor = this._constructListItemForApp(inhibitor, app);
this._applicationList.add(actor);
} else {
// inhibiting app is a service, not an application
this._inhibitors.splice(this._inhibitors.indexOf(inhibitor), 1);
this._applications.splice(this._applications.indexOf(inhibitor), 1);
}
this._updateContent();
this._sync();
},
_constructListItemForSession: function(session) {
let avatar = new UserWidget.Avatar(session.user, { iconSize: _ITEM_ICON_SIZE });
avatar.update();
let userName = session.user.get_real_name() ? session.user.get_real_name() : session.username;
let userLabelText;
if (session.remote)
/* Translators: Remote here refers to a remote session, like a ssh login */
userLabelText = _("%s (remote)").format(userName);
else if (session.type == "tty")
/* Translators: Console here refers to a tty like a VT console */
userLabelText = _("%s (console)").format(userName);
else
userLabelText = userName;
let actor = new St.BoxLayout({ style_class: 'end-session-dialog-session-list-item',
can_focus: true });
actor.add(avatar.actor);
let nameLabel = new St.Label({ text: userLabelText,
style_class: 'end-session-dialog-session-list-item-name',
y_expand: true,
y_align: Clutter.ActorAlign.CENTER });
actor.add(nameLabel);
actor.label_actor = nameLabel;
return actor;
},
_loadSessions: function() {
this._loginManager.listSessions(Lang.bind(this, function(result) {
let n = 0;
for (let i = 0; i < result.length; i++) {
let[id, uid, userName, seat, sessionPath] = result[i];
let proxy = new LogindSession(Gio.DBus.system, 'org.freedesktop.login1', sessionPath);
if (proxy.Class != 'user')
continue;
if (proxy.State == 'closing')
continue;
if (proxy.Id == GLib.getenv('XDG_SESSION_ID'))
continue;
let session = { user: this._userManager.get_user(userName),
username: userName,
type: proxy.Type,
remote: proxy.Remote };
this._sessions.push(session);
let actor = this._constructListItemForSession(session);
this._sessionList.add(actor);
// limit the number of entries
n++;
if (n == MAX_USERS_IN_SESSION_DIALOG)
break;
}
this._sync();
}));
},
OpenAsync: function(parameters, invocation) {
let [type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths] = parameters;
this._totalSecondsToStayOpen = totalSecondsToStayOpen;
this._inhibitors = [];
this._applicationList.destroy_all_children();
this._type = type;
this._applications = [];
this._applicationList.destroy_all_children();
this._sessions = [];
this._sessionList.destroy_all_children();
if (!(this._type in DialogContent)) {
invocation.return_dbus_error('org.gnome.Shell.ModalDialog.TypeError',
"Unknown dialog type requested");
@@ -493,9 +554,12 @@ const EndSessionDialog = new Lang.Class({
this._onInhibitorLoaded(proxy);
}));
this._inhibitors.push(inhibitor);
this._applications.push(inhibitor);
}
if (DialogContent[type].showOtherSessions)
this._loadSessions();
this._updateButtons();
if (!this.open(timestamp)) {
@@ -504,7 +568,8 @@ const EndSessionDialog = new Lang.Class({
return;
}
this._updateContent();
this._startTimer();
this._sync();
let signalId = this.connect('opened',
Lang.bind(this, function() {

View File

@@ -0,0 +1,64 @@
/** -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
/*
* Copyright 2012 Inclusive Design Research Centre, OCAD University.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Author:
* Joseph Scheuhammer <clown@alum.mit.edu>
* Contributor:
* Magdalen Berns <m.berns@sms.ed.ac.uk>
*/
const Atspi = imports.gi.Atspi;
const Lang = imports.lang;
const Signals = imports.signals;
const CARETMOVED = 'object:text-caret-moved';
const STATECHANGED = 'object:state-changed';
const FocusCaretTracker = new Lang.Class({
Name: 'FocusCaretTracker',
_init: function() {
Atspi.init();
this._atspiListener = Atspi.EventListener.new(Lang.bind(this, this._onChanged));
},
_onChanged: function(event) {
if (event.type.indexOf(STATECHANGED) == 0)
this.emit('focus-changed', event);
else if (event.type == CARETMOVED)
this.emit('caret-moved', event);
},
registerFocusListener: function() {
return this._atspiListener.register(STATECHANGED + ':focused') &&
this._atspiListener.register(STATECHANGED + ':selected');
},
registerCaretListener: function() {
return this._atspiListener.register(CARETMOVED);
},
deregisterFocusListener: function() {
return this._atspiListener.deregister(STATECHANGED + ':focused') &&
this._atspiListener.deregister(STATECHANGED + ':selected');
},
deregisterCaretListener: function() {
return this._atspiListener.deregister(CARETMOVED);
}
});
Signals.addSignalMethods(FocusCaretTracker.prototype);

View File

@@ -1,14 +1,20 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
const St = imports.gi.St;
const Lang = imports.lang;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const ICON_SIZE = 48;
const ICON_SIZE = 96;
const MIN_ICON_SIZE = 16;
const EXTRA_SPACE_ANIMATION_TIME = 0.25;
const BaseIcon = new Lang.Class({
Name: 'BaseIcon',
@@ -17,7 +23,12 @@ const BaseIcon = new Lang.Class({
params = Params.parse(params, { createIcon: null,
setSizeManually: false,
showLabel: true });
this.actor = new St.Bin({ style_class: 'overview-icon',
let styleClass = 'overview-icon';
if (params.showLabel)
styleClass += ' overview-icon-with-label';
this.actor = new St.Bin({ style_class: styleClass,
x_fill: true,
y_fill: true });
this.actor._delegate = this;
@@ -176,19 +187,31 @@ const IconGrid = new Lang.Class({
_init: function(params) {
params = Params.parse(params, { rowLimit: null,
columnLimit: null,
minRows: 1,
minColumns: 1,
fillParent: false,
xAlign: St.Align.MIDDLE });
xAlign: St.Align.MIDDLE,
padWithSpacing: false });
this._rowLimit = params.rowLimit;
this._colLimit = params.columnLimit;
this._minRows = params.minRows;
this._minColumns = params.minColumns;
this._xAlign = params.xAlign;
this._fillParent = params.fillParent;
this._padWithSpacing = params.padWithSpacing;
this.topPadding = 0;
this.bottomPadding = 0;
this.rightPadding = 0;
this.leftPadding = 0;
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
vertical: true });
this._items = [];
// Pulled from CSS, but hardcode some defaults here
this._spacing = 0;
this._hItemSize = this._vItemSize = ICON_SIZE;
this._fixedHItemSize = this._fixedVItemSize = undefined;
this._grid = new Shell.GenericContainer();
this.actor.add(this._grid, { expand: true, y_align: St.Align.START });
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
@@ -208,12 +231,12 @@ const IconGrid = new Lang.Class({
let nColumns = this._colLimit ? Math.min(this._colLimit,
nChildren)
: nChildren;
let totalSpacing = Math.max(0, nColumns - 1) * this._spacing;
let totalSpacing = Math.max(0, nColumns - 1) * this._getSpacing();
// Kind of a lie, but not really an issue right now. If
// we wanted to support some sort of hidden/overflow that would
// need higher level design
alloc.min_size = this._hItemSize;
alloc.natural_size = nColumns * this._hItemSize + totalSpacing;
alloc.min_size = this._getHItemSize() + this.leftPadding + this.rightPadding;
alloc.natural_size = nColumns * this._getHItemSize() + totalSpacing + this.leftPadding + this.rightPadding;
},
_getVisibleChildren: function() {
@@ -231,13 +254,11 @@ const IconGrid = new Lang.Class({
return;
let children = this._getVisibleChildren();
let nColumns, spacing;
if (forWidth < 0) {
let nColumns;
if (forWidth < 0)
nColumns = children.length;
spacing = this._spacing;
} else {
[nColumns, , spacing] = this._computeLayout(forWidth);
}
else
[nColumns, ] = this._computeLayout(forWidth);
let nRows;
if (nColumns > 0)
@@ -246,8 +267,8 @@ const IconGrid = new Lang.Class({
nRows = 0;
if (this._rowLimit)
nRows = Math.min(nRows, this._rowLimit);
let totalSpacing = Math.max(0, nRows - 1) * spacing;
let height = nRows * this._vItemSize + totalSpacing;
let totalSpacing = Math.max(0, nRows - 1) * this._getSpacing();
let height = nRows * this._getVItemSize() + totalSpacing + this.topPadding + this.bottomPadding;
alloc.min_size = height;
alloc.natural_size = height;
},
@@ -263,48 +284,30 @@ const IconGrid = new Lang.Class({
let children = this._getVisibleChildren();
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
let spacing = this._getSpacing();
let [nColumns, usedWidth] = this._computeLayout(availWidth);
let [nColumns, usedWidth, spacing] = this._computeLayout(availWidth);
let leftPadding;
let leftEmptySpace;
switch(this._xAlign) {
case St.Align.START:
leftPadding = 0;
leftEmptySpace = 0;
break;
case St.Align.MIDDLE:
leftPadding = Math.floor((availWidth - usedWidth) / 2);
leftEmptySpace = Math.floor((availWidth - usedWidth) / 2);
break;
case St.Align.END:
leftPadding = availWidth - usedWidth;
leftEmptySpace = availWidth - usedWidth;
}
let x = box.x1 + leftPadding;
let y = box.y1;
let x = box.x1 + leftEmptySpace + this.leftPadding;
let y = box.y1 + this.topPadding;
let columnIndex = 0;
let rowIndex = 0;
for (let i = 0; i < children.length; i++) {
let [childMinWidth, childMinHeight, childNaturalWidth, childNaturalHeight]
= children[i].get_preferred_size();
/* Center the item in its allocation horizontally */
let width = Math.min(this._hItemSize, childNaturalWidth);
let childXSpacing = Math.max(0, width - childNaturalWidth) / 2;
let height = Math.min(this._vItemSize, childNaturalHeight);
let childYSpacing = Math.max(0, height - childNaturalHeight) / 2;
let childBox = new Clutter.ActorBox();
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
let _x = box.x2 - (x + width);
childBox.x1 = Math.floor(_x - childXSpacing);
} else {
childBox.x1 = Math.floor(x + childXSpacing);
}
childBox.y1 = Math.floor(y + childYSpacing);
childBox.x2 = childBox.x1 + width;
childBox.y2 = childBox.y1 + height;
let childBox = this._calculateChildBox(children[i], x, y, box);
if (this._rowLimit && rowIndex >= this._rowLimit ||
this._fillParent && childBox.y2 > availHeight) {
this._fillParent && childBox.y2 > availHeight - this.bottomPadding) {
this._grid.set_skip_paint(children[i], true);
} else {
children[i].allocate(childBox, flags);
@@ -318,15 +321,38 @@ const IconGrid = new Lang.Class({
}
if (columnIndex == 0) {
y += this._vItemSize + spacing;
x = box.x1 + leftPadding;
y += this._getVItemSize() + spacing;
x = box.x1 + leftEmptySpace + this.leftPadding;
} else {
x += this._hItemSize + spacing;
x += this._getHItemSize() + spacing;
}
}
},
childrenInRow: function(rowWidth) {
_calculateChildBox: function(child, x, y, box) {
let [childMinWidth, childMinHeight, childNaturalWidth, childNaturalHeight] =
child.get_preferred_size();
/* Center the item in its allocation horizontally */
let width = Math.min(this._getHItemSize(), childNaturalWidth);
let childXSpacing = Math.max(0, width - childNaturalWidth) / 2;
let height = Math.min(this._getVItemSize(), childNaturalHeight);
let childYSpacing = Math.max(0, height - childNaturalHeight) / 2;
let childBox = new Clutter.ActorBox();
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
let _x = box.x2 - (x + width);
childBox.x1 = Math.floor(_x - childXSpacing);
} else {
childBox.x1 = Math.floor(x + childXSpacing);
}
childBox.y1 = Math.floor(y + childYSpacing);
childBox.x2 = childBox.x1 + width;
childBox.y2 = childBox.y1 + height;
return childBox;
},
columnsForWidth: function(rowWidth) {
return this._computeLayout(rowWidth)[0];
},
@@ -336,26 +362,19 @@ const IconGrid = new Lang.Class({
_computeLayout: function (forWidth) {
let nColumns = 0;
let usedWidth = 0;
let spacing = this._spacing;
if (this._colLimit) {
let itemWidth = this._hItemSize * this._colLimit;
let emptyArea = forWidth - itemWidth;
spacing = Math.max(this._spacing, emptyArea / (2 * this._colLimit));
spacing = Math.round(spacing);
}
let usedWidth = this.leftPadding + this.rightPadding;
let spacing = this._getSpacing();
while ((this._colLimit == null || nColumns < this._colLimit) &&
(usedWidth + this._hItemSize <= forWidth)) {
usedWidth += this._hItemSize + spacing;
(usedWidth + this._getHItemSize() <= forWidth)) {
usedWidth += this._getHItemSize() + spacing;
nColumns += 1;
}
if (nColumns > 0)
usedWidth -= spacing;
return [nColumns, usedWidth, spacing];
return [nColumns, usedWidth];
},
_onStyleChanged: function() {
@@ -366,15 +385,49 @@ const IconGrid = new Lang.Class({
this._grid.queue_relayout();
},
nRows: function(forWidth) {
let children = this._getVisibleChildren();
let nColumns = (forWidth < 0) ? children.length : this._computeLayout(forWidth)[0];
let nRows = (nColumns > 0) ? Math.ceil(children.length / nColumns) : 0;
if (this._rowLimit)
nRows = Math.min(nRows, this._rowLimit);
return nRows;
},
rowsForHeight: function(forHeight) {
return Math.floor((forHeight - (this.topPadding + this.bottomPadding) + this._getSpacing()) / (this._getVItemSize() + this._getSpacing()));
},
usedHeightForNRows: function(nRows) {
return (this._getVItemSize() + this._getSpacing()) * nRows - this._getSpacing() + this.topPadding + this.bottomPadding;
},
usedWidth: function(forWidth) {
return this.usedWidthForNColumns(this.columnsForWidth(forWidth));
},
usedWidthForNColumns: function(columns) {
let usedWidth = columns * (this._getHItemSize() + this._getSpacing());
usedWidth -= this._getSpacing();
return usedWidth + this.leftPadding + this.rightPadding;
},
removeAll: function() {
this._items = [];
this._grid.destroy_all_children();
},
addItem: function(actor, index) {
addItem: function(item, index) {
if (!item.icon || !item.icon instanceof BaseIcon) {
log('Only items with a BaseIcon icon property can be added to IconGrid');
return;
}
this._items.push(item);
if (index !== undefined)
this._grid.insert_child_at_index(actor, index);
this._grid.insert_child_at_index(item.actor, index);
else
this._grid.add_actor(actor);
this._grid.add_actor(item.actor);
},
getItemAtIndex: function(index) {
@@ -383,5 +436,311 @@ const IconGrid = new Lang.Class({
visibleItemsCount: function() {
return this._grid.get_n_children() - this._grid.get_n_skip_paint();
},
setSpacing: function(spacing) {
this._fixedSpacing = spacing;
},
_getSpacing: function() {
return this._fixedSpacing ? this._fixedSpacing : this._spacing;
},
_getHItemSize: function() {
return this._fixedHItemSize ? this._fixedHItemSize : this._hItemSize;
},
_getVItemSize: function() {
return this._fixedVItemSize ? this._fixedVItemSize : this._vItemSize;
},
_updateSpacingForSize: function(availWidth, availHeight) {
let maxEmptyVArea = availHeight - this._minRows * this._getVItemSize();
let maxEmptyHArea = availWidth - this._minColumns * this._getHItemSize();
let maxHSpacing, maxVSpacing;
if (this._padWithSpacing) {
// minRows + 1 because we want to put spacing before the first row, so it is like we have one more row
// to divide the empty space
maxVSpacing = Math.floor(maxEmptyVArea / (this._minRows +1));
maxHSpacing = Math.floor(maxEmptyHArea / (this._minColumns +1));
} else {
if (this._minRows <= 1)
maxVSpacing = maxEmptyVArea;
else
maxVSpacing = Math.floor(maxEmptyVArea / (this._minRows - 1));
if (this._minColumns <= 1)
maxHSpacing = maxEmptyHArea;
else
maxHSpacing = Math.floor(maxEmptyHArea / (this._minColumns - 1));
}
let maxSpacing = Math.min(maxHSpacing, maxVSpacing);
// Limit spacing to the item size
maxSpacing = Math.min(maxSpacing, Math.min(this._getVItemSize(), this._getHItemSize()));
// The minimum spacing, regardless of whether it satisfies the row/columng minima,
// is the spacing we get from CSS.
let spacing = Math.max(this._spacing, maxSpacing);
this.setSpacing(spacing);
if (this._padWithSpacing)
this.topPadding = this.rightPadding = this.bottomPadding = this.leftPadding = spacing;
},
/**
* This function must to be called before iconGrid allocation,
* to know how much spacing can the grid has
*/
adaptToSize: function(availWidth, availHeight) {
this._fixedHItemSize = this._hItemSize;
this._fixedVItemSize = this._vItemSize;
this._updateSpacingForSize(availWidth, availHeight);
let spacing = this._getSpacing();
if (this.columnsForWidth(availWidth) < this._minColumns || this.rowsForHeight(availHeight) < this._minRows) {
let neededWidth = this.usedWidthForNColumns(this._minColumns) - availWidth ;
let neededHeight = this.usedHeightForNRows(this._minRows) - availHeight ;
let neededSpacePerItem = (neededWidth > neededHeight) ? Math.ceil(neededWidth / this._minColumns)
: Math.ceil(neededHeight / this._minRows);
this._fixedHItemSize = Math.max(this._hItemSize - neededSpacePerItem, MIN_ICON_SIZE);
this._fixedVItemSize = Math.max(this._vItemSize - neededSpacePerItem, MIN_ICON_SIZE);
if (this._fixedHItemSize < MIN_ICON_SIZE)
this._fixedHItemSize = MIN_ICON_SIZE;
if (this._fixedVItemSize < MIN_ICON_SIZE)
this._fixedVItemSize = MIN_ICON_SIZE;
this._updateSpacingForSize(availWidth, availHeight);
}
let scale = Math.min(this._fixedHItemSize, this._fixedVItemSize) / Math.max(this._hItemSize, this._vItemSize);
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { this._updateChildrenScale(scale); }));
},
// Note that this is ICON_SIZE as used by BaseIcon, not elsewhere in IconGrid; it's a bit messed up
_updateChildrenScale: function(scale) {
for (let i in this._items) {
let newIconSize = Math.floor(ICON_SIZE * scale);
this._items[i].icon.setIconSize(newIconSize);
}
}
});
const PaginatedIconGrid = new Lang.Class({
Name: 'PaginatedIconGrid',
Extends: IconGrid,
_init: function(params) {
this.parent(params);
this._nPages = 0;
this._rowsPerPage = 0;
this._spaceBetweenPages = 0;
this._childrenPerPage = 0;
},
_getPreferredHeight: function (grid, forWidth, alloc) {
alloc.min_size = (this._availableHeightPerPageForItems() + this.bottomPadding + this.topPadding) * this._nPages + this._spaceBetweenPages * this._nPages;
alloc.natural_size = (this._availableHeightPerPageForItems() + this.bottomPadding + this.topPadding) * this._nPages + this._spaceBetweenPages * this._nPages;
},
_allocate: function (grid, box, flags) {
if (this._childrenPerPage == 0)
log('computePages() must be called before allocate(); pagination will not work.');
if (this._fillParent) {
// Reset the passed in box to fill the parent
let parentBox = this.actor.get_parent().allocation;
let gridBox = this.actor.get_theme_node().get_content_box(parentBox);
box = this._grid.get_theme_node().get_content_box(gridBox);
}
let children = this._getVisibleChildren();
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
let spacing = this._getSpacing();
let [nColumns, usedWidth] = this._computeLayout(availWidth);
let leftEmptySpace;
switch(this._xAlign) {
case St.Align.START:
leftEmptySpace = 0;
break;
case St.Align.MIDDLE:
leftEmptySpace = Math.floor((availWidth - usedWidth) / 2);
break;
case St.Align.END:
leftEmptySpace = availWidth - usedWidth;
}
let x = box.x1 + leftEmptySpace + this.leftPadding;
let y = box.y1 + this.topPadding;
let columnIndex = 0;
let rowIndex = 0;
for (let i = 0; i < children.length; i++) {
let childBox = this._calculateChildBox(children[i], x, y, box);
children[i].allocate(childBox, flags);
this._grid.set_skip_paint(children[i], false);
columnIndex++;
if (columnIndex == nColumns) {
columnIndex = 0;
rowIndex++;
}
if (columnIndex == 0) {
y += this._getVItemSize() + spacing;
if ((i + 1) % this._childrenPerPage == 0)
y += this._spaceBetweenPages - spacing + this.bottomPadding + this.topPadding;
x = box.x1 + leftEmptySpace + this.leftPadding;
} else
x += this._getHItemSize() + spacing;
}
},
_computePages: function (availWidthPerPage, availHeightPerPage) {
let [nColumns, usedWidth] = this._computeLayout(availWidthPerPage);
let nRows;
let children = this._getVisibleChildren();
if (nColumns > 0)
nRows = Math.ceil(children.length / nColumns);
else
nRows = 0;
if (this._rowLimit)
nRows = Math.min(nRows, this._rowLimit);
let spacing = this._getSpacing();
// We want to contain the grid inside the parent box with padding
this._rowsPerPage = this.rowsForHeight(availHeightPerPage);
this._nPages = Math.ceil(nRows / this._rowsPerPage);
this._spaceBetweenPages = availHeightPerPage - (this.topPadding + this.bottomPadding) - this._availableHeightPerPageForItems();
this._childrenPerPage = nColumns * this._rowsPerPage;
},
adaptToSize: function(availWidth, availHeight) {
this.parent(availWidth, availHeight);
this._computePages(availWidth, availHeight);
},
_availableHeightPerPageForItems: function() {
return this.usedHeightForNRows(this._rowsPerPage) - (this.topPadding + this.bottomPadding);
},
nPages: function() {
return this._nPages;
},
getPageY: function(pageNumber) {
if (!this._nPages)
return 0;
let firstPageItem = pageNumber * this._childrenPerPage
let childBox = this._getVisibleChildren()[firstPageItem].get_allocation_box();
return childBox.y1 - this.topPadding;
},
getItemPage: function(item) {
let children = this._getVisibleChildren();
let index = children.indexOf(item);
if (index == -1) {
throw new Error('Item not found.');
return 0;
}
return Math.floor(index / this._childrenPerPage);
},
/**
* openExtraSpace:
* @sourceItem: the item for which to create extra space
* @side: where @sourceItem should be located relative to the created space
* @nRows: the amount of space to create
*
* Pan view to create extra space for @nRows above or below @sourceItem.
*/
openExtraSpace: function(sourceItem, side, nRows) {
let children = this._getVisibleChildren();
let index = children.indexOf(sourceItem.actor);
if (index == -1) {
throw new Error('Item not found.');
return;
}
let pageIndex = Math.floor(index / this._childrenPerPage);
let pageOffset = pageIndex * this._childrenPerPage;
let childrenPerRow = this._childrenPerPage / this._rowsPerPage;
let sourceRow = Math.floor((index - pageOffset) / childrenPerRow);
let nRowsAbove = (side == St.Side.TOP) ? sourceRow + 1
: sourceRow;
let nRowsBelow = this._rowsPerPage - nRowsAbove;
let nRowsUp, nRowsDown;
if (side == St.Side.TOP) {
nRowsDown = Math.min(nRowsBelow, nRows);
nRowsUp = nRows - nRowsDown;
} else {
nRowsUp = Math.min(nRowsAbove, nRows);
nRowsDown = nRows - nRowsUp;
}
let childrenDown = children.splice(pageOffset +
nRowsAbove * childrenPerRow,
nRowsBelow * childrenPerRow);
let childrenUp = children.splice(pageOffset,
nRowsAbove * childrenPerRow);
// Special case: On the last row with no rows below the icon,
// there's no need to move any rows either up or down
if (childrenDown.length == 0 && nRowsUp == 0) {
this._translatedChildren = [];
this.emit('space-opened');
} else {
this._translateChildren(childrenUp, Gtk.DirectionType.UP, nRowsUp);
this._translateChildren(childrenDown, Gtk.DirectionType.DOWN, nRowsDown);
this._translatedChildren = childrenUp.concat(childrenDown);
}
},
_translateChildren: function(children, direction, nRows) {
let translationY = nRows * (this._getVItemSize() + this._getSpacing());
if (translationY == 0)
return;
if (direction == Gtk.DirectionType.UP)
translationY *= -1;
for (let i = 0; i < children.length; i++) {
children[i].translation_y = 0;
let params = { translation_y: translationY,
time: EXTRA_SPACE_ANIMATION_TIME,
transition: 'easeInOutQuad'
};
if (i == (children.length - 1))
params.onComplete = Lang.bind(this,
function() {
this.emit('space-opened');
});
Tweener.addTween(children[i], params);
}
},
closeExtraSpace: function() {
if (!this._translatedChildren || !this._translatedChildren.length) {
this.emit('space-closed');
return;
}
for (let i = 0; i < this._translatedChildren.length; i++) {
if (!this._translatedChildren[i].translation_y)
continue;
Tweener.addTween(this._translatedChildren[i],
{ translation_y: 0,
time: EXTRA_SPACE_ANIMATION_TIME,
transition: 'easeInOutQuad',
onComplete: Lang.bind(this,
function() {
this.emit('space-closed');
})
});
}
}
});
Signals.addSignalMethods(PaginatedIconGrid.prototype);

View File

@@ -920,7 +920,7 @@ const LookingGlass = new Lang.Class({
let text = o.get_text();
// Ensure we don't get newlines in the command; the history file is
// newline-separated.
text.replace('\n', ' ');
text = text.replace('\n', ' ');
// Strip leading and trailing whitespace
text = text.replace(/^\s+/g, '').replace(/\s+$/g, '');
if (text == '')

View File

@@ -1,5 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Atspi = imports.gi.Atspi;
const Clutter = imports.gi.Clutter;
const GDesktopEnums = imports.gi.GDesktopEnums;
const Gio = imports.gi.Gio;
@@ -10,6 +11,7 @@ const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const FocusCaretTracker = imports.ui.focusCaretTracker;
const Main = imports.ui.main;
const MagnifierDBus = imports.ui.magnifierDBus;
const Params = imports.misc.params;
@@ -37,6 +39,8 @@ const CONTRAST_BLUE_KEY = 'contrast-blue';
const LENS_MODE_KEY = 'lens-mode';
const CLAMP_MODE_KEY = 'scroll-at-edges';
const MOUSE_TRACKING_KEY = 'mouse-tracking';
const FOCUS_TRACKING_KEY = 'focus-tracking';
const CARET_TRACKING_KEY = 'caret-tracking';
const SHOW_CROSS_HAIRS_KEY = 'show-cross-hairs';
const CROSS_HAIRS_THICKNESS_KEY = 'cross-hairs-thickness';
const CROSS_HAIRS_COLOR_KEY = 'cross-hairs-color';
@@ -449,6 +453,14 @@ const Magnifier = new Lang.Class({
if (aPref)
zoomRegion.setMouseTrackingMode(aPref);
aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
if (aPref)
zoomRegion.setFocusTrackingMode(aPref);
aPref = this._settings.get_enum(CARET_TRACKING_KEY);
if (aPref)
zoomRegion.setCaretTrackingMode(aPref);
aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
if (aPref)
zoomRegion.setInvertLightness(aPref);
@@ -488,6 +500,10 @@ const Magnifier = new Lang.Class({
Lang.bind(this, this._updateClampMode));
this._settings.connect('changed::' + MOUSE_TRACKING_KEY,
Lang.bind(this, this._updateMouseTrackingMode));
this._settings.connect('changed::' + FOCUS_TRACKING_KEY,
Lang.bind(this, this._updateFocusTrackingMode));
this._settings.connect('changed::' + CARET_TRACKING_KEY,
Lang.bind(this, this._updateCaretTrackingMode));
this._settings.connect('changed::' + INVERT_LIGHTNESS_KEY,
Lang.bind(this, this._updateInvertLightness));
@@ -585,6 +601,24 @@ const Magnifier = new Lang.Class({
}
},
_updateFocusTrackingMode: function() {
// Applies only to the first zoom region.
if (this._zoomRegions.length) {
this._zoomRegions[0].setFocusTrackingMode(
this._settings.get_enum(FOCUS_TRACKING_KEY)
);
}
},
_updateCaretTrackingMode: function() {
// Applies only to the first zoom region.
if (this._zoomRegions.length) {
this._zoomRegions[0].setCaretTrackingMode(
this._settings.get_enum(CARET_TRACKING_KEY)
);
}
},
_updateInvertLightness: function() {
// Applies only to the first zoom region.
if (this._zoomRegions.length) {
@@ -623,7 +657,7 @@ const Magnifier = new Lang.Class({
contrast.b = this._settings.get_double(CONTRAST_BLUE_KEY);
this._zoomRegions[0].setContrast(contrast);
}
},
}
});
Signals.addSignalMethods(Magnifier.prototype);
@@ -632,8 +666,11 @@ const ZoomRegion = new Lang.Class({
_init: function(magnifier, mouseSourceActor) {
this._magnifier = magnifier;
this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
this._mouseTrackingMode = GDesktopEnums.MagnifierMouseTrackingMode.NONE;
this._focusTrackingMode = GDesktopEnums.MagnifierFocusTrackingMode.NONE;
this._caretTrackingMode = GDesktopEnums.MagnifierCaretTrackingMode.NONE;
this._clampScrollingAtEdges = false;
this._lensMode = false;
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN;
@@ -659,9 +696,35 @@ const ZoomRegion = new Lang.Class({
this._xMagFactor = 1;
this._yMagFactor = 1;
this._followingCursor = false;
this._xFocus = 0;
this._yFocus = 0;
this._xCaret = 0;
this._yCaret = 0;
Main.layoutManager.connect('monitors-changed',
Lang.bind(this, this._monitorsChanged));
this._focusCaretTracker.connect('caret-moved',
Lang.bind(this, this._updateCaret));
this._focusCaretTracker.connect('focus-changed',
Lang.bind(this, this._updateFocus));
},
_updateFocus: function(caller, event) {
let component = event.source.get_component_iface();
if (!component || event.detail1 != 1)
return;
let extents = component.get_extents(Atspi.CoordType.SCREEN);
[this._xFocus, this._yFocus] = [extents.x, extents.y]
this._centerFromFocusPosition();
},
_updateCaret: function(caller, event) {
let text = event.source.get_text_iface();
if (!text)
return;
let extents = text.get_character_extents(text.get_caret_offset(), 0);
[this._xCaret, this._yCaret] = [extents.x, extents.y];
this._centerFromCaretPosition();
},
/**
@@ -732,6 +795,30 @@ const ZoomRegion = new Lang.Class({
return this._mouseTrackingMode;
},
/**
* setFocusTrackingMode
* @mode: One of the enum FocusTrackingMode values.
*/
setFocusTrackingMode: function(mode) {
this._focusTrackingMode = mode;
if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.NONE)
this._focusCaretTracker.deregisterFocusListener();
else
this._focusCaretTracker.registerFocusListener();
},
/**
* setCaretTrackingMode
* @mode: One of the enum CaretTrackingMode values.
*/
setCaretTrackingMode: function(mode) {
this._caretTrackingMode = mode;
if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.NONE)
this._focusCaretTracker.deregisterCaretListener();
else
this._focusCaretTracker.registerCaretListener();
},
/**
* setViewPort
* Sets the position and size of the ZoomRegion on screen.
@@ -1023,20 +1110,6 @@ const ZoomRegion = new Lang.Class({
this._magShaderEffects.setBrightness(this._brightness);
},
/**
* getBrightness:
* Retrive the current brightness of the Zoom Region.
* @return Object containing the brightness change for the red, green,
* and blue channels.
*/
getBrightness: function() {
let brightness = {};
brightness.r = this._brightness.r;
brightness.g = this._brightness.g;
brightness.b = this._brightness.b;
return brightness;
},
/**
* setContrast:
* Alter the contrast of the magnified view.
@@ -1243,19 +1316,47 @@ const ZoomRegion = new Lang.Class({
let yMouse = this._magnifier.yMouse;
if (this._mouseTrackingMode == GDesktopEnums.MagnifierMouseTrackingMode.PROPORTIONAL) {
return this._centerFromMouseProportional(xMouse, yMouse);
return this._centerFromPointProportional(xMouse, yMouse);
}
else if (this._mouseTrackingMode == GDesktopEnums.MagnifierMouseTrackingMode.PUSH) {
return this._centerFromMousePush(xMouse, yMouse);
return this._centerFromPointPush(xMouse, yMouse);
}
else if (this._mouseTrackingMode == GDesktopEnums.MagnifierMouseTrackingMode.CENTERED) {
return this._centerFromMouseCentered(xMouse, yMouse);
return this._centerFromPointCentered(xMouse, yMouse);
}
return null; // Should never be hit
},
_centerFromMousePush: function(xMouse, yMouse) {
_centerFromCaretPosition: function() {
let xCaret = this._xCaret;
let yCaret = this._yCaret;
if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.PROPORTIONAL)
[xCaret, yCaret] = this._centerFromPointProportional(xCaret, yCaret);
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.PUSH)
[xCaret, yCaret] = this._centerFromPointPush(xCaret, yCaret);
else if (this._caretTrackingMode == GDesktopEnums.MagnifierCaretTrackingMode.CENTERED)
[xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret);
this.scrollContentsTo(xCaret, yCaret);
},
_centerFromFocusPosition: function() {
let xFocus = this._xFocus;
let yFocus = this._yFocus;
if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.PROPORTIONAL)
[xFocus, yFocus] = this._centerFromPointProportional(xFocus, yFocus);
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.PUSH)
[xFocus, yFocus] = this._centerFromPointPush(xFocus, yFocus);
else if (this._focusTrackingMode == GDesktopEnums.MagnifierFocusTrackingMode.CENTERED)
[xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus);
this.scrollContentsTo(xFocus, yFocus);
},
_centerFromPointPush: function(xPoint, yPoint) {
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
let [cursorWidth, cursorHeight] = this._mouseSourceActor.get_size();
let xPos = xRoi + widthRoi / 2;
@@ -1263,20 +1364,20 @@ const ZoomRegion = new Lang.Class({
let xRoiRight = xRoi + widthRoi - cursorWidth;
let yRoiBottom = yRoi + heightRoi - cursorHeight;
if (xMouse < xRoi)
xPos -= (xRoi - xMouse);
else if (xMouse > xRoiRight)
xPos += (xMouse - xRoiRight);
if (xPoint < xRoi)
xPos -= (xRoi - xPoint);
else if (xPoint > xRoiRight)
xPos += (xPoint - xRoiRight);
if (yMouse < yRoi)
yPos -= (yRoi - yMouse);
else if (yMouse > yRoiBottom)
yPos += (yMouse - yRoiBottom);
if (yPoint < yRoi)
yPos -= (yRoi - yPoint);
else if (yPoint > yRoiBottom)
yPos += (yPoint - yRoiBottom);
return [xPos, yPos];
},
_centerFromMouseProportional: function(xMouse, yMouse) {
_centerFromPointProportional: function(xPoint, yPoint) {
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
let halfScreenWidth = global.screen_width / 2;
let halfScreenHeight = global.screen_height / 2;
@@ -1285,16 +1386,16 @@ const ZoomRegion = new Lang.Class({
let unscaledPadding = Math.min(this._viewPortWidth, this._viewPortHeight) / 5;
let xPadding = unscaledPadding / this._xMagFactor;
let yPadding = unscaledPadding / this._yMagFactor;
let xProportion = (xMouse - halfScreenWidth) / halfScreenWidth; // -1 ... 1
let yProportion = (yMouse - halfScreenHeight) / halfScreenHeight; // -1 ... 1
let xPos = xMouse - xProportion * (widthRoi / 2 - xPadding);
let yPos = yMouse - yProportion * (heightRoi /2 - yPadding);
let xProportion = (xPoint - halfScreenWidth) / halfScreenWidth; // -1 ... 1
let yProportion = (yPoint - halfScreenHeight) / halfScreenHeight; // -1 ... 1
let xPos = xPoint - xProportion * (widthRoi / 2 - xPadding);
let yPos = yPoint - yProportion * (heightRoi /2 - yPadding);
return [xPos, yPos];
},
_centerFromMouseCentered: function(xMouse, yMouse) {
return [xMouse, yMouse];
_centerFromPointCentered: function(xPoint, yPoint) {
return [xPoint, yPoint];
},
_screenToViewPort: function(screenX, screenY) {
@@ -1511,15 +1612,6 @@ const Crosshairs = new Lang.Class({
this._vertBottomHair.set_opacity(opacity);
},
/**
* getOpacity:
* Retriev how opaque the crosshairs are.
* @return: A value between 0 (transparent) and 255 (opaque).
*/
getOpacity: function() {
return this._horizLeftHair.get_opacity();
},
/**
* setLength:
* Set the length of the vertical and horizontal lines in the crosshairs.
@@ -1563,15 +1655,6 @@ const Crosshairs = new Lang.Class({
}
},
/**
* getClip:
* Get the dimensions of the clip rectangle.
* @return: An array of the form [width, height].
*/
getClip: function() {
return this._clipSize;
},
/**
* show:
* Show the crosshairs.
@@ -1667,23 +1750,10 @@ const MagShaderEffects = new Lang.Class({
this._inverse.set_enabled(invertFlag);
},
/**
* getInvertLightness:
* Report whether the inversion effect is enabled.
* @return: Boolean.
*/
getInvertLightness: function() {
return this._inverse.get_enabled();
},
setColorSaturation: function(factor) {
this._colorDesaturation.set_factor(1.0 - factor);
},
getColorSaturation: function() {
return 1.0 - this._colorDesaturation.get_factor();
},
/**
* setBrightness:
* Set the brightness of the magnified view.
@@ -1708,24 +1778,6 @@ const MagShaderEffects = new Lang.Class({
);
},
/**
* getBrightness:
* Retrieve current brightness of the magnified view.
* @return: Object containing the brightness for the red, green,
* and blue channels. Values of 0.0 represent "standard"
* brightness (no change), whereas values less or greater than
* 0.0 indicate decreased or incresaed brightness, respectively.
*/
getBrightness: function() {
let result = {};
let [bRed, bGreen, bBlue] = this._brightnessContrast.get_brightness();
result.r = bRed;
result.g = bGreen;
result.b = bBlue;
return result;
},
/**
* Set the contrast of the magnified view.
* @contrast: Object containing the contrast for the red, green,
@@ -1750,21 +1802,4 @@ const MagShaderEffects = new Lang.Class({
bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE
);
},
/**
* Retrieve current contrast of the magnified view.
* @return: Object containing the contrast for the red, green,
* and blue channels. Values of 0.0 represent "standard"
* contrast (no change), whereas values less or greater than
* 0.0 indicate decreased or incresaed contrast, respectively.
*/
getContrast: function() {
let resutl = {};
let [cRed, cGreen, cBlue] = this._brightnessContrast.get_contrast();
result.r = cRed;
result.g = cGreen;
result.b = cBlue;
return result;
}
});

View File

@@ -4,14 +4,12 @@ const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main;
const MAG_SERVICE_NAME = 'org.gnome.Magnifier';
const MAG_SERVICE_PATH = '/org/gnome/Magnifier';
const ZOOM_SERVICE_NAME = 'org.gnome.Magnifier.ZoomRegion';
const ZOOM_SERVICE_PATH = '/org/gnome/Magnifier/ZoomRegion';
// Subset of gnome-mag's Magnifier dbus interface -- to be expanded. See:
// http://git.gnome.org/browse/gnome-mag/tree/xml/...Magnifier.xml
const MagnifierIface = <interface name={MAG_SERVICE_NAME}>
const MagnifierIface = <interface name="org.gnome.Magnifier">
<method name="setActive">
<arg type="b" direction="in" />
</method>
@@ -66,7 +64,7 @@ const MagnifierIface = <interface name={MAG_SERVICE_NAME}>
// Subset of gnome-mag's ZoomRegion dbus interface -- to be expanded. See:
// http://git.gnome.org/browse/gnome-mag/tree/xml/...ZoomRegion.xml
const ZoomRegionIface = <interface name={ZOOM_SERVICE_NAME}>
const ZoomRegionIface = <interface name="org.gnome.Magnifier.ZoomRegion">
<method name="setMagFactor">
<arg type="d" direction="in" />
<arg type="d" direction="in" />

View File

@@ -99,6 +99,9 @@ function start() {
global.logError = window.log;
global.log = window.log;
if (!Meta.is_wayland_compositor)
Meta.is_wayland_compositor = function () { return false; };
// Chain up async errors reported from C
global.connect('notify-error', function (global, msg, detail) { notifyError(msg, detail); });

View File

@@ -1685,7 +1685,7 @@ const MessageTray = new Lang.Class({
this._userActiveWhileNotificationShown = false;
this.idleMonitor = new GnomeDesktop.IdleMonitor();
this.idleMonitor = Meta.IdleMonitor.get_core();
this._grabHelper = new GrabHelper.GrabHelper(this.actor,
{ keybindingMode: Shell.KeyBindingMode.MESSAGE_TRAY });
@@ -2732,6 +2732,7 @@ const MessageTray = new Lang.Class({
_onSummaryBoxPointerUngrabbed: function() {
this._summaryBoxPointerState = State.HIDING;
this._setClickedSummaryItem(null);
if (this._summaryBoxPointerContentUpdatedId) {
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);

View File

@@ -265,7 +265,7 @@ const Overview = new Lang.Class({
// Create controls
this._controls = new OverviewControls.ControlsManager(this._searchEntry);
this._dash = this._controls.dash;
this._viewSelector = this._controls.viewSelector;
this.viewSelector = this._controls.viewSelector;
// Add our same-line elements after the search entry
this._overview.add(this._controls.actor, { y_fill: true, expand: true });
@@ -285,11 +285,11 @@ const Overview = new Lang.Class({
},
addSearchProvider: function(provider) {
this._viewSelector.addSearchProvider(provider);
this.viewSelector.addSearchProvider(provider);
},
removeSearchProvider: function(provider) {
this._viewSelector.removeSearchProvider(provider);
this.viewSelector.removeSearchProvider(provider);
},
//
@@ -513,7 +513,7 @@ const Overview = new Lang.Class({
this._activationTime = Date.now() / 1000;
Meta.disable_unredirect_for_screen(global.screen);
this._viewSelector.show();
this.viewSelector.show();
this._stack.opacity = 0;
Tweener.addTween(this._stack,
@@ -620,7 +620,7 @@ const Overview = new Lang.Class({
this.animationInProgress = true;
this.visibleTarget = false;
this._viewSelector.zoomFromOverview();
this.viewSelector.zoomFromOverview();
// Make other elements fade out.
Tweener.addTween(this._stack,
@@ -655,7 +655,7 @@ const Overview = new Lang.Class({
// Re-enable unredirection
Meta.enable_unredirect_for_screen(global.screen);
this._viewSelector.hide();
this.viewSelector.hide();
this._desktopFade.hide();
this._coverPane.hide();

View File

@@ -249,6 +249,7 @@ const AppMenuButton = new Lang.Class({
this._visible = true;
this.actor.reactive = true;
this.actor.show();
Tweener.removeTweens(this.actor);
Tweener.addTween(this.actor,
{ opacity: 255,
time: Overview.ANIMATION_TIME,
@@ -261,6 +262,7 @@ const AppMenuButton = new Lang.Class({
this._visible = false;
this.actor.reactive = false;
Tweener.removeTweens(this.actor);
Tweener.addTween(this.actor,
{ opacity: 0,
time: Overview.ANIMATION_TIME,
@@ -809,7 +811,12 @@ const AggregateMenu = new Lang.Class({
this.actor.add_child(this._indicators);
this._network = new imports.ui.status.network.NMApplet();
this._bluetooth = new imports.ui.status.bluetooth.Indicator();
if (Config.HAVE_BLUETOOTH) {
this._bluetooth = new imports.ui.status.bluetooth.Indicator();
} else {
this._bluetooth = null;
}
this._power = new imports.ui.status.power.Indicator();
this._rfkill = new imports.ui.status.rfkill.Indicator();
this._volume = new imports.ui.status.volume.Indicator();
@@ -819,7 +826,9 @@ const AggregateMenu = new Lang.Class({
this._indicators.add_child(this._screencast.indicators);
this._indicators.add_child(this._network.indicators);
this._indicators.add_child(this._bluetooth.indicators);
if (this._bluetooth) {
this._indicators.add_child(this._bluetooth.indicators);
}
this._indicators.add_child(this._rfkill.indicators);
this._indicators.add_child(this._volume.indicators);
this._indicators.add_child(this._power.indicators);
@@ -831,7 +840,9 @@ const AggregateMenu = new Lang.Class({
this.menu.addMenuItem(this._brightness.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addMenuItem(this._network.menu);
this.menu.addMenuItem(this._bluetooth.menu);
if (this._bluetooth) {
this.menu.addMenuItem(this._bluetooth.menu);
}
this.menu.addMenuItem(this._rfkill.menu);
this.menu.addMenuItem(this._power.menu);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());

View File

@@ -2,6 +2,7 @@
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Shell = imports.gi.Shell;
@@ -41,7 +42,7 @@ const PointerWatcher = new Lang.Class({
Name: 'PointerWatcher',
_init: function() {
this._idleMonitor = new GnomeDesktop.IdleMonitor();
this._idleMonitor = Meta.IdleMonitor.get_core();
this._idleMonitor.add_idle_watch(IDLE_TIME, Lang.bind(this, this._onIdleMonitorBecameIdle));
this._idle = this._idleMonitor.get_idletime() > IDLE_TIME;
this._watches = [];

View File

@@ -35,6 +35,13 @@ function _ensureStyle(actor) {
actor.ensure_style();
}
function isPopupMenuItemVisible(child) {
if (child._delegate instanceof PopupMenuSection)
if (child._delegate.isEmpty())
return false;
return child.visible;
}
const PopupBaseMenuItem = new Lang.Class({
Name: 'PopupBaseMenuItem',
@@ -437,7 +444,7 @@ const PopupMenuBase = new Lang.Class({
let hasVisibleChildren = this.box.get_children().some(function(child) {
if (child._delegate instanceof PopupSeparatorMenuItem)
return false;
return child.visible;
return isPopupMenuItemVisible(child);
});
return !hasVisibleChildren;
@@ -518,7 +525,7 @@ const PopupMenuBase = new Lang.Class({
let childBeforeIndex = index - 1;
while (childBeforeIndex >= 0 && !children[childBeforeIndex].visible)
while (childBeforeIndex >= 0 && !isPopupMenuItemVisible(children[childBeforeIndex]))
childBeforeIndex--;
if (childBeforeIndex < 0
@@ -529,7 +536,7 @@ const PopupMenuBase = new Lang.Class({
let childAfterIndex = index + 1;
while (childAfterIndex < children.length && !children[childAfterIndex].visible)
while (childAfterIndex < children.length && !isPopupMenuItemVisible(children[childAfterIndex]))
childAfterIndex++;
if (childAfterIndex >= children.length
@@ -872,20 +879,20 @@ const PopupSubMenu = new Lang.Class({
{ _arrow_rotation: 0,
height: 0,
time: 0.25,
onUpdateScope: this,
onUpdate: function() {
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
},
onCompleteScope: this,
onComplete: function() {
this.actor.hide();
this.actor.set_height(-1);
},
onUpdateScope: this,
onUpdate: function() {
this._arrow.rotation_angle_z = this.actor._arrow_rotation;
}
});
} else {
this._arrow.rotation_angle_z = 0;
this.actor.hide();
}
} else {
this._arrow.rotation_angle_z = 0;
this.actor.hide();
}
},
_onKeyPressEvent: function(actor, event) {

View File

@@ -52,12 +52,10 @@ const SUMMARY_ICON_SIZE = 48;
// or when cancelling the dialog
// - BACKGROUND_FADE_TIME is used when the background changes to crossfade to new background
// - CURTAIN_SLIDE_TIME is used when raising the shield before unlocking
// - INITIAL_FADE_IN_TIME is used for the initial fade in at startup
const STANDARD_FADE_TIME = 10;
const MANUAL_FADE_TIME = 0.3;
const BACKGROUND_FADE_TIME = 1.0;
const CURTAIN_SLIDE_TIME = 0.3;
const INITIAL_FADE_IN_TIME = 0.25;
const Clock = new Lang.Class({
Name: 'ScreenShieldClock',
@@ -520,16 +518,9 @@ const ScreenShield = new Lang.Class({
this._lockDialogGroup = new St.Widget({ x_expand: true,
y_expand: true,
reactive: true,
opacity: 0,
pivot_point: new Clutter.Point({ x: 0.5, y: 0.5 }),
name: 'lockDialogGroup' });
Tweener.addTween(this._lockDialogGroup,
{ opacity: 255,
time: INITIAL_FADE_IN_TIME,
transition: 'easeInQuad',
});
this.actor.add_actor(this._lockDialogGroup);
this.actor.add_actor(this._lockScreenGroup);
@@ -592,7 +583,7 @@ const ScreenShield = new Lang.Class({
fadeFactor: 1 });
this._shortLightbox.connect('shown', Lang.bind(this, this._onShortLightboxShown));
this.idleMonitor = new GnomeDesktop.IdleMonitor();
this.idleMonitor = Meta.IdleMonitor.get_core();
},
_createBackground: function(monitorIndex) {
@@ -732,6 +723,8 @@ const ScreenShield = new Lang.Class({
this.lock(true);
} else {
this._inhibitSuspend();
this._onUserBecameActive();
}
},
@@ -993,7 +986,6 @@ const ScreenShield = new Lang.Class({
_onUnlockFailed: function() {
this._resetLockScreen({ animateLockScreen: true,
animateLockDialog: false,
fadeToBlack: false });
},
@@ -1033,17 +1025,6 @@ const ScreenShield = new Lang.Class({
animateFade: false });
}
if (params.animateLockDialog) {
this._lockDialogGroup.opacity = 0;
Tweener.removeTweens(this._lockDialogGroup);
Tweener.addTween(this._lockDialogGroup,
{ opacity: 255,
time: MANUAL_FADE_TIME,
transition: 'easeOutQuad' });
} else {
this._lockDialogGroup.opacity = 255;
}
this._lockScreenGroup.grab_key_focus();
if (Main.sessionMode.currentMode != 'lock-screen')
@@ -1294,7 +1275,6 @@ const ScreenShield = new Lang.Class({
}
this._resetLockScreen({ animateLockScreen: animate,
animateLockDialog: animate,
fadeToBlack: true });
global.set_runtime_state(LOCKED_STATE_STR, GLib.Variant.new('b', true));

View File

@@ -126,23 +126,25 @@ const GridSearchResult = new Lang.Class({
this.actor.style_class = 'grid-search-result';
let content = provider.createResultActor(metaInfo, terms);
let content = provider.createResultObject(metaInfo, terms);
let dragSource = null;
if (content == null) {
content = new St.Bin();
let actor = new St.Bin();
let icon = new IconGrid.BaseIcon(this.metaInfo['name'],
{ createIcon: this.metaInfo['createIcon'] });
content.set_child(icon.actor);
content.label_actor = icon.label;
actor.set_child(icon.actor);
actor.label_actor = icon.label;
dragSource = icon.icon;
content = { actor: actor, icon: icon };
} else {
if (content._delegate && content._delegate.getDragActorSource)
dragSource = content._delegate.getDragActorSource();
}
this.actor.set_child(content);
this.actor.label_actor = content.label_actor;
this.actor.set_child(content.actor);
this.actor.label_actor = content.actor.label_actor;
this.icon = content.icon;
let draggable = DND.makeDraggable(this.actor);
draggable.connect('drag-begin',
@@ -320,14 +322,14 @@ const GridSearchResults = new Lang.Class({
},
_getMaxDisplayedResults: function() {
return this._grid.childrenInRow(this._bin.width) * this._grid.getRowLimit();
return this._grid.columnsForWidth(this._bin.width) * this._grid.getRowLimit();
},
_renderResults: function(metas) {
for (let i = 0; i < metas.length; i++) {
let display = new GridSearchResult(this.provider, metas[i], this._terms);
display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
this._grid.addItem(display.actor);
this._grid.addItem(display);
}
},

View File

@@ -13,6 +13,7 @@ const ExtensionUtils = imports.misc.extensionUtils;
const Hash = imports.misc.hash;
const Main = imports.ui.main;
const Screenshot = imports.ui.screenshot;
const ViewSelector = imports.ui.viewSelector;
const GnomeShellIface = <interface name="org.gnome.Shell">
<method name="Eval">
@@ -24,6 +25,10 @@ const GnomeShellIface = <interface name="org.gnome.Shell">
<method name="ShowOSD">
<arg type="a{sv}" direction="in" name="params"/>
</method>
<method name="FocusApp">
<arg type="s" direction="in" name="id"/>
</method>
<method name="ShowApplications" />
<method name="GrabAccelerator">
<arg type="s" direction="in" name="accelerator"/>
<arg type="u" direction="in" name="flags"/>
@@ -135,6 +140,15 @@ const GnomeShell = new Lang.Class({
Main.osdWindow.show();
},
FocusApp: function(id) {
this.ShowApplications();
Main.overview.viewSelector.appDisplay.selectApp(id);
},
ShowApplications: function() {
Main.overview.viewSelector.showApps();
},
GrabAcceleratorAsync: function(params, invocation) {
let [accel, flags] = params;
let sender = invocation.get_sender();

View File

@@ -5,6 +5,7 @@ const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const St = imports.gi.St;
const Signals = imports.signals;
const Atk = imports.gi.Atk;
const SLIDER_SCROLL_STEP = 0.05; /* Slider scrolling step in % */
@@ -19,14 +20,26 @@ const Slider = new Lang.Class({
this.actor = new St.DrawingArea({ style_class: 'slider',
can_focus: true,
reactive: true });
reactive: true,
accessible_role: Atk.Role.SLIDER });
this.actor.connect('repaint', Lang.bind(this, this._sliderRepaint));
this.actor.connect('button-press-event', Lang.bind(this, this._startDragging));
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
this.actor.connect('key-press-event', Lang.bind(this, this.onKeyPressEvent));
this._releaseId = this._motionId = 0;
this._dragging = false;
this._customAccessible = St.GenericAccessible.new_for_actor(this.actor);
this.actor.set_accessible(this._customAccessible);
this._customAccessible.connect('get-current-value', Lang.bind(this, this._getCurrentValue));
this._customAccessible.connect('get-minimum-value', Lang.bind(this, this._getMinimumValue));
this._customAccessible.connect('get-maximum-value', Lang.bind(this, this._getMaximumValue));
this._customAccessible.connect('get-minimum-increment', Lang.bind(this, this._getMinimumIncrement));
this._customAccessible.connect('set-current-value', Lang.bind(this, this._setCurrentValue));
this.connect('value-changed', Lang.bind(this, this._valueChanged));
},
setValue: function(value) {
@@ -168,12 +181,12 @@ const Slider = new Lang.Class({
return true;
},
_onKeyPressEvent: function (actor, event) {
onKeyPressEvent: function (actor, event) {
let key = event.get_key_symbol();
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
this._value = Math.max(0, Math.min(this._value + delta, 1));
this._slider.queue_repaint();
this.actor.queue_repaint();
this.emit('value-changed', this._value);
this.emit('drag-end');
return true;
@@ -202,6 +215,30 @@ const Slider = new Lang.Class({
this.emit('value-changed', this._value);
},
_getCurrentValue: function (actor) {
return this._value;
},
_getMinimumValue: function (actor) {
return 0;
},
_getMaximumValue: function (actor) {
return 1;
},
_getMinimumIncrement: function (actor) {
return 0.1;
},
_setCurrentValue: function (actor, value) {
this._value = value;
},
_valueChanged: function (slider, value, property) {
this._customAccessible.notify ("accessible-value");
},
get value() {
return this._value;
}

View File

@@ -39,6 +39,7 @@ const Indicator = new Lang.Class({
this._slider = new Slider.Slider(0);
this._slider.connect('value-changed', Lang.bind(this, this._sliderChanged));
this._slider.actor.accessible_name = _("Brightness");
let icon = new St.Icon({ icon_name: 'display-brightness-symbolic',
style_class: 'popup-menu-icon' });
@@ -47,6 +48,10 @@ const Indicator = new Lang.Class({
this._item.actor.connect('button-press-event', Lang.bind(this, function(actor, event) {
this._slider.startDragging(event);
}));
this._item.actor.connect('key-press-event', Lang.bind(this, function(actor, event) {
return this._slider.onKeyPressEvent(actor, event);
}));
},
_sliderChanged: function(slider, value) {

View File

@@ -41,8 +41,7 @@ const MAX_INPUT_SOURCE_ACTIVATION_TIME = 4000; // ms
const BUS_NAME = 'org.gnome.SettingsDaemon.Keyboard';
const OBJECT_PATH = '/org/gnome/SettingsDaemon/Keyboard';
const KeyboardManagerInterface =
<interface name="org.gnome.SettingsDaemon.Keyboard">
const KeyboardManagerInterface = <interface name="org.gnome.SettingsDaemon.Keyboard">
<method name="SetInputSource">
<arg type="u" direction="in" />
</method>

View File

@@ -97,14 +97,14 @@ const NMConnectionItem = new Lang.Class({
},
getName: function() {
return this.connection.get_id();
return this._connection.get_id();
},
isActive: function() {
if (this._activeConnection == null)
return false;
return this._activeConnection.state == NetworkManager.ActiveConnectionState.ACTIVATED;
return this._activeConnection.state <= NetworkManager.ActiveConnectionState.ACTIVATED;
},
_sync: function() {
@@ -141,7 +141,7 @@ const NMConnectionItem = new Lang.Class({
this._activeConnection = activeConnection;
if (this._activeConnection)
this._activeConnectionChangedId = this._activeConnection.connect('state-changed',
this._activeConnectionChangedId = this._activeConnection.connect('notify::state',
Lang.bind(this, this._connectionStateChanged));
this._sync();
@@ -182,7 +182,14 @@ const NMConnectionSection = new Lang.Class({
this.item.status.text = this._getStatus();
this.item.icon.icon_name = this._getMenuIcon();
this.item.label.text = this._getDescription();
// desc can be undefined at cold-plug, before we called
// NMGtk.disambiguate_device_names() at least once
let desc = this._getDescription();
if (desc)
this.item.label.text = desc;
else
this.item.label.text = '';
},
_getStatus: function() {
@@ -237,7 +244,7 @@ const NMConnectionSection = new Lang.Class({
this.emit('activation-failed', reason);
}));
let pos = Util.insertSorted(this._connections, connection, this._connectionSortFunction);
let pos = Util.insertSorted(this._connections, connection, Lang.bind(this, this._connectionSortFunction));
this._labelSection.addMenuItem(item.labelItem, pos);
this._switchSection.addMenuItem(item.switchItem, pos);
this._connectionItems.set(connection.get_uuid(), item);
@@ -345,12 +352,12 @@ const NMConnectionDevice = new Lang.Class({
_getStatus: function() {
if (!this._device)
return null;
return '';
switch(this._device.state) {
case NetworkManager.DeviceState.DISCONNECTED:
case NetworkManager.DeviceState.ACTIVATED:
return null;
return '';
case NetworkManager.DeviceState.UNMANAGED:
/* Translators: this is for network devices that are physically present but are not
under NetworkManager's control (and thus cannot be used in the menu) */
@@ -1076,7 +1083,7 @@ const NMVPNConnectionItem = new Lang.Class({
if (this._activeConnection == null)
return false;
return this._activeConnection.vpn_state == NetworkManager.VPNConnectionState.ACTIVATED;
return this._activeConnection.vpn_state != NetworkManager.VPNConnectionState.DISCONNECTED;
},
_getStatus: function() {
@@ -1130,7 +1137,7 @@ const NMVPNConnectionItem = new Lang.Class({
getIndicatorIcon: function() {
if (this._activeConnection) {
if (this._activeConnection.state == NetworkManager.ActiveConnectionState.ACTIVATING)
if (this._activeConnection.vpn_state < NetworkManager.VPNConnectionState.ACTIVATED)
return 'network-vpn-acquiring-symbolic';
else
return 'network-vpn-symbolic';
@@ -1172,14 +1179,14 @@ const NMVPNSection = new Lang.Class({
this._client.deactivate_connection(activeConnection);
},
addActiveConnection: function(activeConnection) {
let item = this._connectionItems.get(activeConnection._connection.get_uuid());
item.setActiveConnection(activeConnection);
},
removeActiveConnection: function(activeConnection) {
let item = this._connectionItems.get(activeConnection._connection.get_uuid());
item.setActiveConnection(null);
setActiveConnections: function(vpnConnections) {
this._connectionItems.values().forEach(function(item) {
item.setActiveConnection(null);
});
vpnConnections.forEach(Lang.bind(this, function(a) {
let item = this._connectionItems.get(a._connection.get_uuid());
item.setActiveConnection(a);
}));
},
_makeConnectionItem: function(connection) {
@@ -1250,6 +1257,8 @@ const NMApplet = new Lang.Class({
this._mainConnection = null;
this._mainConnectionIconChangedId = 0;
this._notification = null;
this._nmDevices = [];
this._devices = { };
@@ -1277,7 +1286,8 @@ const NMApplet = new Lang.Class({
this._client.connect('notify::manager-running', Lang.bind(this, this._syncNMState));
this._client.connect('notify::networking-enabled', Lang.bind(this, this._syncNMState));
this._client.connect('notify::state', Lang.bind(this, this._syncNMState));
this._client.connect('notify::active-connections', Lang.bind(this, this._syncActiveConnections));
this._client.connect('notify::primary-connection', Lang.bind(this, this._syncMainConnection));
this._client.connect('notify::active-connections', Lang.bind(this, this._syncVPNConnections));
this._client.connect('device-added', Lang.bind(this, this._deviceAdded));
this._client.connect('device-removed', Lang.bind(this, this._deviceRemoved));
this._settings.connect('new-connection', Lang.bind(this, this._newConnection));
@@ -1312,32 +1322,29 @@ const NMApplet = new Lang.Class({
this._syncDeviceNames();
},
_notifyForDevice: function(device, iconName, title, text, urgency) {
if (device._notification)
device._notification.destroy();
_notify: function(iconName, title, text, urgency) {
if (this._notification)
this._notification.destroy();
/* must call after destroying previous notification,
or this._source will be cleared */
this._ensureSource();
let gicon = new Gio.ThemedIcon({ name: iconName });
device._notification = new MessageTray.Notification(this._source, title, text,
{ gicon: gicon });
device._notification.setUrgency(urgency);
device._notification.setTransient(true);
device._notification.connect('destroy', function() {
device._notification = null;
this._notification = new MessageTray.Notification(this._source, title, text, { gicon: gicon });
this._notification.setUrgency(urgency);
this._notification.setTransient(true);
this._notification.connect('destroy', function() {
this._notification = null;
});
this._source.notify(device._notification);
this._source.notify(this._notification);
},
_onActivationFailed: function(device, reason) {
// XXX: nm-applet has no special text depending on reason
// but I'm not sure of this generic message
this._notifyForDevice(device, 'network-error-symbolic',
_("Connection failed"),
_("Activation of network connection failed"),
MessageTray.Urgency.HIGH);
this._notify('network-error-symbolic',
_("Connection failed"),
_("Activation of network connection failed"),
MessageTray.Urgency.HIGH);
},
_syncDeviceNames: function() {
@@ -1410,136 +1417,73 @@ const NMApplet = new Lang.Class({
devices.splice(pos, 1);
},
_getSupportedActiveConnections: function() {
let activeConnections = this._client.get_active_connections() || [ ];
let supportedConnections = [];
_ensureActiveConnectionProps: function(a) {
if (!a._connection) {
a._connection = this._settings.get_connection_by_path(a.connection);
for (let i = 0; i < activeConnections.length; i++) {
let devices = activeConnections[i].get_devices();
if (!devices || !devices[0])
continue;
// Ignore connections via unrecognized device types
if (!this._dtypes[devices[0].device_type])
continue;
// Ignore slave connections
let connectionPath = activeConnections[i].connection;
let connection = this._settings.get_connection_by_path(connectionPath);
// connection might be null, if libnm-glib fails to create
// the object due to version incompatibility, or if the
// connection is not visible to the current user
if (connection && this._ignoreConnection(connection))
continue;
supportedConnections.push(activeConnections[i]);
// This list is guaranteed to have only one device in it.
let device = a.get_devices()[0]._delegate;
a._primaryDevice = device;
}
return supportedConnections;
},
_syncActiveConnections: function() {
let closedConnections = [ ];
let newActiveConnections = this._getSupportedActiveConnections();
for (let i = 0; i < this._activeConnections.length; i++) {
let a = this._activeConnections[i];
if (newActiveConnections.indexOf(a) == -1) // connection is removed
closedConnections.push(a);
_getMainConnection: function() {
let connection;
connection = this._client.get_primary_connection();
if (connection) {
this._ensureActiveConnectionProps(connection);
return connection;
}
for (let i = 0; i < closedConnections.length; i++) {
let a = closedConnections[i];
if (a._type == NetworkManager.SETTING_VPN_SETTING_NAME)
this._vpnSection.removeActiveConnection(a);
if (a._inited) {
a.disconnect(a._notifyStateId);
a.disconnect(a._notifyDefaultId);
a.disconnect(a._notifyDefault6Id);
a._inited = false;
}
connection = this._client.get_activating_connection();
if (connection) {
this._ensureActiveConnectionProps(connection);
return connection;
}
return null;
},
_syncMainConnection: function() {
if (this._mainConnectionIconChangedId > 0) {
this._mainConnection._primaryDevice.disconnect(this._mainConnectionIconChangedId);
this._mainConnectionIconChangedId = 0;
}
this._activeConnections = newActiveConnections;
this._mainConnection = null;
let activating = null;
let default_ip4 = null;
let default_ip6 = null;
let active_any = null;
for (let i = 0; i < this._activeConnections.length; i++) {
let a = this._activeConnections[i];
if (!a._inited) {
a._notifyDefaultId = a.connect('notify::default', Lang.bind(this, this._syncActiveConnections));
a._notifyDefault6Id = a.connect('notify::default6', Lang.bind(this, this._syncActiveConnections));
a._notifyStateId = a.connect('notify::state', Lang.bind(this, this._notifyActivated));
a._inited = true;
}
if (!a._connection) {
a._connection = this._settings.get_connection_by_path(a.connection);
if (a._connection) {
a._type = a._connection._type;
a._section = this._ctypes[a._type];
} else {
a._connection = null;
a._type = null;
a._section = null;
log('Cannot find connection for active (or connection cannot be read)');
}
}
if (a['default'])
default_ip4 = a;
if (a.default6)
default_ip6 = a;
if (a.state == NetworkManager.ActiveConnectionState.ACTIVATING)
activating = a;
else if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED)
active_any = a;
if (!a._primaryDevice) {
if (a._type != NetworkManager.SETTING_VPN_SETTING_NAME) {
// This list is guaranteed to have one device in it.
a._primaryDevice = a.get_devices()[0]._delegate;
} else {
a._primaryDevice = this._vpnSection;
this._vpnSection.addActiveConnection(a);
}
if (a.state == NetworkManager.ActiveConnectionState.ACTIVATED
&& a._primaryDevice && a._primaryDevice._notification) {
a._primaryDevice._notification.destroy();
a._primaryDevice._notification = null;
}
}
if (this._mainConnectionStateChangedId > 0) {
this._mainConnection.disconnect(this._mainConnectionStateChangedId);
this._mainConnectionStateChangedId = 0;
}
this._mainConnection = default_ip4 || default_ip6 || active_any || activating || null;
this._mainConnection = this._getMainConnection();
if (this._mainConnection) {
let dev = this._mainConnection._primaryDevice;
this._mainConnectionIconChangedId = dev.connect('icon-changed', Lang.bind(this, this._updateIcon));
if (this._mainConnection._primaryDevice)
this._mainConnectionIconChangedId = this._mainConnection._primaryDevice.connect('icon-changed', Lang.bind(this, this._updateIcon));
this._mainConnectionStateChangedId = this._mainConnection.connect('notify::state', Lang.bind(this, this._mainConnectionStateChanged));
this._mainConnectionStateChanged();
}
this._updateIcon();
},
_notifyActivated: function(activeConnection) {
if (activeConnection.state == NetworkManager.ActiveConnectionState.ACTIVATED
&& activeConnection._primaryDevice && activeConnection._primaryDevice._notification) {
activeConnection._primaryDevice._notification.destroy();
activeConnection._primaryDevice._notification = null;
}
_syncVPNConnections: function() {
let activeConnections = this._client.get_active_connections() || [];
let vpnConnections = activeConnections.filter(function(a) {
return (a instanceof NMClient.VPNConnection);
});
vpnConnections.forEach(Lang.bind(this, function(a) {
this._ensureActiveConnectionProps(a);
}));
this._vpnSection.setActiveConnections(vpnConnections);
this._syncActiveConnections();
this._updateIcon();
},
_mainConnectionStateChanged: function() {
if (this._mainConnection.state == NetworkManager.ActiveConnectionState.ACTIVATED && this._notification)
this._notification.destroy();
},
_ignoreConnection: function(connection) {
@@ -1576,7 +1520,6 @@ const NMApplet = new Lang.Class({
_newConnection: function(settings, connection) {
this._addConnection(connection);
this._syncActiveConnections();
},
_connectionRemoved: function(connection) {
@@ -1627,24 +1570,18 @@ const NMApplet = new Lang.Class({
},
_syncNMState: function() {
this._syncActiveConnections();
this.indicators.visible = this._client.manager_running;
this.menu.actor.visible = this._client.networking_enabled;
},
_updateIcon: function() {
let mc = this._mainConnection;
if (!this._client.networking_enabled || !mc) {
if (!this._client.networking_enabled || !this._mainConnection) {
this._primaryIndicator.icon_name = 'network-offline-symbolic';
} else {
let dev = this._mainConnection._primaryDevice;
if (!dev) {
log('Active connection with no primary device?');
return;
}
this._primaryIndicator.icon_name = dev.getIndicatorIcon(mc);
this._primaryIndicator.visible = (dev != null);
if (dev)
this._primaryIndicator.icon_name = dev.getIndicatorIcon();
}
this._vpnIndicator.icon_name = this._vpnSection.getIndicatorIcon();

View File

@@ -74,12 +74,12 @@ const Indicator = new Lang.Class({
if (state == UPower.DeviceState.DISCHARGING) {
// Translators: this is <hours>:<minutes> Remaining (<percentage>)
return _("%d\u2236%02d Remaining (%d%%)".format(hours, minutes, percentage));
return _("%d\u2236%02d Remaining (%d%%)").format(hours, minutes, percentage);
}
if (state == UPower.DeviceState.CHARGING) {
// Translators: this is <hours>:<minutes> Until Full (<percentage>)
return _("%d\u2236%02d Until Full (%d%%)".format(hours, minutes, percentage));
return _("%d\u2236%02d Until Full (%d%%)").format(hours, minutes, percentage);
}
// state is one of PENDING_CHARGING, PENDING_DISCHARGING

View File

@@ -1,24 +1,20 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const AccountsService = imports.gi.AccountsService;
const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const BoxPointer = imports.ui.boxpointer;
const GnomeSession = imports.misc.gnomeSession;
const LoginManager = imports.misc.loginManager;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
const UserWidget = imports.ui.userWidget;
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
@@ -28,17 +24,64 @@ const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
const MAX_USERS_IN_SESSION_DIALOG = 5;
const AltSwitcher = new Lang.Class({
Name: 'AltSwitcher',
const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session'>
<property name="Id" type="s" access="read"/>
<property name="Remote" type="b" access="read"/>
<property name="Class" type="s" access="read"/>
<property name="Type" type="s" access="read"/>
<property name="State" type="s" access="read"/>
</interface>;
_init: function(standard, alternate) {
this._standard = standard;
this._standard.connect('notify::visible', Lang.bind(this, this._sync));
const SystemdLoginSession = Gio.DBusProxy.makeProxyWrapper(SystemdLoginSessionIface);
this._alternate = alternate;
this._alternate.connect('notify::visible', Lang.bind(this, this._sync));
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
this.actor = new St.Bin();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
},
_sync: function() {
let childToShow = null;
if (this._standard.visible && this._alternate.visible) {
let [x, y, mods] = global.get_pointer();
let altPressed = (mods & Clutter.ModifierType.MOD1_MASK) != 0;
childToShow = altPressed ? this._alternate : this._standard;
} else if (this._standard.visible) {
childToShow = this._standard;
} else if (this._alternate.visible) {
childToShow = this._alternate;
}
if (this.actor.get_child() != childToShow) {
this.actor.set_child(childToShow);
// The actors might respond to hover, so
// sync the pointer to make sure they update.
global.sync_pointer();
}
this.actor.visible = (childToShow != null);
},
_onDestroy: function() {
if (this._capturedEventId > 0) {
global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0;
}
},
_onCapturedEvent: function(actor, event) {
let type = event.type();
if (type == Clutter.EventType.KEY_PRESS || type == Clutter.EventType.KEY_RELEASE) {
let key = event.get_key_symbol();
if (key == Clutter.KEY_Alt_L || key == Clutter.KEY_Alt_R)
this._sync();
}
return false;
},
});
const Indicator = new Lang.Class({
Name: 'SystemIndicator',
@@ -53,9 +96,10 @@ const Indicator = new Lang.Class({
this._orientationSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.peripherals.touchscreen' });
this._session = new GnomeSession.SessionManager();
this._haveShutdown = true;
this._loginManager = LoginManager.getLoginManager();
this._haveShutdown = true;
this._haveSuspend = true;
this._userManager = AccountsService.UserManager.get_default();
this._user = this._userManager.get_user(GLib.get_user_name());
@@ -90,6 +134,7 @@ const Indicator = new Lang.Class({
return;
this._updateHaveShutdown();
this._updateHaveSuspend();
}));
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
Lang.bind(this, this._updateHaveShutdown));
@@ -117,7 +162,7 @@ const Indicator = new Lang.Class({
let visible = (this._settingsAction.visible ||
this._orientationLockAction.visible ||
this._lockScreenAction.visible ||
this._powerOffAction.visible);
this._altSwitcher.actor.visible);
this._actionsItem.actor.visible = visible;
},
@@ -125,6 +170,7 @@ const Indicator = new Lang.Class({
_sessionUpdated: function() {
this._updateLockScreen();
this._updatePowerOff();
this._updateSuspend();
this._updateMultiUser();
this._settingsAction.visible = Main.sessionMode.allowSettings;
this._updateActionsVisibility();
@@ -205,13 +251,13 @@ const Indicator = new Lang.Class({
},
_updateHaveShutdown: function() {
this._session.CanShutdownRemote(Lang.bind(this,
function(result, error) {
if (!error) {
this._haveShutdown = result[0];
this._updatePowerOff();
}
}));
this._session.CanShutdownRemote(Lang.bind(this, function(result, error) {
if (error)
return;
this._haveShutdown = result[0];
this._updatePowerOff();
}));
},
_updatePowerOff: function() {
@@ -219,6 +265,18 @@ const Indicator = new Lang.Class({
this._updateActionsVisibility();
},
_updateHaveSuspend: function() {
this._loginManager.canSuspend(Lang.bind(this, function(result) {
this._haveSuspend = result;
this._updateSuspend();
}));
},
_updateSuspend: function() {
this._suspendAction.visible = this._haveSuspend && !Main.sessionMode.isLocked;
this._updateActionsVisibility();
},
_createActionButton: function(iconName, accessibleName) {
let icon = new St.Button({ reactive: true,
can_focus: true,
@@ -276,9 +334,14 @@ const Indicator = new Lang.Class({
this._lockScreenAction.connect('clicked', Lang.bind(this, this._onLockScreenClicked));
item.actor.add(this._lockScreenAction, { expand: true, x_fill: false });
this._suspendAction = this._createActionButton('media-playback-pause-symbolic', _("Suspend"));
this._suspendAction.connect('clicked', Lang.bind(this, this._onSuspendClicked));
this._powerOffAction = this._createActionButton('system-shutdown-symbolic', _("Power Off"));
this._powerOffAction.connect('clicked', Lang.bind(this, this._onPowerOffClicked));
item.actor.add(this._powerOffAction, { expand: true, x_fill: false });
this._altSwitcher = new AltSwitcher(this._powerOffAction, this._suspendAction);
item.actor.add(this._altSwitcher.actor, { expand: true, x_fill: false });
this._actionsItem = item;
this.menu.addMenuItem(item);
@@ -317,110 +380,14 @@ const Indicator = new Lang.Class({
this._session.LogoutRemote(0);
},
_openSessionWarnDialog: function(sessions) {
let dialog = new ModalDialog.ModalDialog();
let subjectLabel = new St.Label({ style_class: 'end-session-dialog-subject',
text: _("Other users are logged in.") });
dialog.contentLayout.add(subjectLabel, { y_fill: true,
y_align: St.Align.START });
let descriptionLabel = new St.Label({ style_class: 'end-session-dialog-description'});
descriptionLabel.set_text(_("Shutting down might cause them to lose unsaved work."));
descriptionLabel.clutter_text.line_wrap = true;
dialog.contentLayout.add(descriptionLabel, { x_fill: true,
y_fill: true,
y_align: St.Align.START });
let scrollView = new St.ScrollView({ style_class: 'end-session-dialog-app-list' });
scrollView.add_style_class_name('vfade');
scrollView.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
dialog.contentLayout.add(scrollView, { x_fill: true, y_fill: true });
let userList = new St.BoxLayout({ vertical: true });
scrollView.add_actor(userList);
for (let i = 0; i < sessions.length; i++) {
let session = sessions[i];
let userEntry = new St.BoxLayout({ style_class: 'login-dialog-user-list-item',
vertical: false });
let avatar = new UserWidget.Avatar(session.user);
avatar.update();
userEntry.add(avatar.actor);
let userLabelText = "";;
let userName = session.user.get_real_name() ?
session.user.get_real_name() : session.username;
if (session.info.remote)
/* Translators: Remote here refers to a remote session, like a ssh login */
userLabelText = _("%s (remote)").format(userName);
else if (session.info.type == "tty")
/* Translators: Console here refers to a tty like a VT console */
userLabelText = _("%s (console)").format(userName);
else
userLabelText = userName;
let textLayout = new St.BoxLayout({ style_class: 'login-dialog-user-list-item-text-box',
vertical: true });
textLayout.add(new St.Label({ text: userLabelText }),
{ y_fill: false,
y_align: St.Align.MIDDLE,
expand: true });
userEntry.add(textLayout, { expand: true });
userList.add(userEntry, { x_fill: true });
}
let cancelButton = { label: _("Cancel"),
action: function() { dialog.close(); },
key: Clutter.Escape };
let powerOffButton = { label: _("Power Off"), action: Lang.bind(this, function() {
dialog.close();
this._session.ShutdownRemote();
}), default: true };
dialog.setButtons([cancelButton, powerOffButton]);
dialog.open();
},
_onPowerOffClicked: function() {
this.menu.itemActivated();
Main.overview.hide();
this._loginManager.listSessions(Lang.bind(this, function(result) {
let sessions = [];
let n = 0;
for (let i = 0; i < result.length; i++) {
let[id, uid, userName, seat, sessionPath] = result[i];
let proxy = new SystemdLoginSession(Gio.DBus.system,
'org.freedesktop.login1',
sessionPath);
this._session.ShutdownRemote(0);
},
if (proxy.Class != 'user')
continue;
if (proxy.State == 'closing')
continue;
if (proxy.Id == GLib.getenv('XDG_SESSION_ID'))
continue;
sessions.push({ user: this._userManager.get_user(userName),
username: userName,
info: { type: proxy.Type,
remote: proxy.Remote }
});
// limit the number of entries
n++;
if (n == MAX_USERS_IN_SESSION_DIALOG)
break;
}
if (n != 0)
this._openSessionWarnDialog(sessions);
else
this._session.ShutdownRemote();
}));
}
_onSuspendClicked: function() {
this.menu.itemActivated();
this._loginManager.suspend();
},
});

View File

@@ -44,6 +44,9 @@ const StreamSlider = new Lang.Class({
this.item.actor.connect('button-press-event', Lang.bind(this, function(actor, event) {
this._slider.startDragging(event);
}));
this.item.actor.connect('key-press-event', Lang.bind(this, function(actor, event) {
return this._slider.onKeyPressEvent(actor, event);
}));
this._stream = null;
},
@@ -154,6 +157,11 @@ const OutputStreamSlider = new Lang.Class({
Name: 'OutputStreamSlider',
Extends: StreamSlider,
_init: function(control) {
this.parent(control);
this._slider.actor.accessible_name = _("Volume");
},
_connectStream: function(stream) {
this.parent(stream);
this._portChangedId = stream.connect('notify::port', Lang.bind(this, this._portChanged));
@@ -202,6 +210,7 @@ const InputStreamSlider = new Lang.Class({
_init: function(control) {
this.parent(control);
this._slider.actor.accessible_name = _("Microphone");
this._control.connect('stream-added', Lang.bind(this, this._maybeShowInput));
this._control.connect('stream-removed', Lang.bind(this, this._maybeShowInput));
this._icon.icon_name = 'audio-input-microphone-symbolic';

View File

@@ -9,6 +9,7 @@ const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
@@ -33,6 +34,7 @@ const UnlockDialog = new Lang.Class({
_init: function(parentActor) {
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW,
style_class: 'login-dialog',
layout_manager: new Clutter.BoxLayout(),
visible: false });
this.actor.add_constraint(new Layout.MonitorConstraint({ primary: true }));
@@ -42,11 +44,12 @@ const UnlockDialog = new Lang.Class({
this._userName = GLib.get_user_name();
this._user = this._userManager.get_user(this._userName);
this._promptBox = new St.BoxLayout({ vertical: true });
this._promptBox = new St.BoxLayout({ vertical: true,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
x_expand: true,
y_expand: true });
this.actor.add_child(this._promptBox);
this._promptBox.add_constraint(new Clutter.AlignConstraint({ source: this.actor,
align_axis: Clutter.AlignAxis.BOTH,
factor: 0.5 }));
this._authPrompt = new AuthPrompt.AuthPrompt(new Gdm.Client(), AuthPrompt.AuthPromptMode.UNLOCK_ONLY);
this._authPrompt.connect('failed', Lang.bind(this, this._fail));
@@ -80,7 +83,7 @@ const UnlockDialog = new Lang.Class({
Main.ctrlAltTabManager.addGroup(this.actor, _("Unlock Window"), 'dialog-password-symbolic');
this._idleMonitor = new GnomeDesktop.IdleMonitor();
this._idleMonitor = Meta.IdleMonitor.get_core();
this._idleWatchId = this._idleMonitor.add_idle_watch(IDLE_TIMEOUT * 1000, Lang.bind(this, this._escape));
},

View File

@@ -29,7 +29,9 @@ const Avatar = new Lang.Class({
this.actor = new St.Bin({ style_class: params.styleClass,
track_hover: params.reactive,
reactive: params.reactive });
reactive: params.reactive,
width: this._iconSize,
height: this._iconSize });
},
setSensitive: function(sensitive) {

View File

@@ -85,8 +85,12 @@ const ViewSelector = new Lang.Class({
this._entry.set_primary_icon(new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-find-symbolic' }));
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-clear-symbolic' });
if (this._entry.get_text_direction() == Clutter.TextDirection.RTL)
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-clear-rtl-symbolic' });
else
this._clearIcon = new St.Icon({ style_class: 'search-entry-icon',
icon_name: 'edit-clear-symbolic' });
this._iconClickedId = 0;
this._capturedEventId = 0;
@@ -95,8 +99,8 @@ const ViewSelector = new Lang.Class({
this._workspacesPage = this._addPage(this._workspacesDisplay.actor,
_("Windows"), 'emblem-documents-symbolic');
this._appDisplay = new AppDisplay.AppDisplay();
this._appsPage = this._addPage(this._appDisplay.actor,
this.appDisplay = new AppDisplay.AppDisplay();
this._appsPage = this._addPage(this.appDisplay.actor,
_("Applications"), 'view-grid-symbolic');
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem);
@@ -165,6 +169,11 @@ const ViewSelector = new Lang.Class({
this._showAppsButton.checked = !this._showAppsButton.checked;
},
showApps: function() {
Main.overview.show();
this._showAppsButton.checked = true;
},
show: function() {
this._activePage = this._workspacesPage;
@@ -525,6 +534,13 @@ const ViewSelector = new Lang.Class({
return ViewPage.SEARCH;
},
setActivePage: function(page) {
if (page == ViewPage.WINDOWS)
this._showPage(this._workspacesPage);
else
this._showPage(this._appsPage);
},
fadeIn: function() {
let actor = this._activePage;
Tweener.addTween(actor, { opacity: 255,

View File

@@ -150,8 +150,7 @@ const WandaSearchProvider = new Lang.Class({
this._dialog = new FortuneDialog(capitalize(fish), FISH_COMMAND);
},
createResultActor: function (resultMeta, terms) {
let icon = new WandaIconBin(resultMeta.id, resultMeta.name);
return icon.actor;
createResultObject: function (resultMeta, terms) {
return new WandaIconBin(resultMeta.id, resultMeta.name);
}
});

View File

@@ -250,9 +250,6 @@ const WorkspaceTracker = new Lang.Class({
let activeWorkspaceIndex = global.screen.get_active_workspace_index();
let removingCurrentWorkspace = (emptyWorkspaces[activeWorkspaceIndex] &&
activeWorkspaceIndex < emptyWorkspaces.length - 1);
// Don't enter the overview when removing multiple empty workspaces at startup
let showOverview = (removingCurrentWorkspace &&
!emptyWorkspaces.every(function(x) { return x; }));
if (removingCurrentWorkspace) {
// "Merge" the empty workspace we are removing with the one at the end
@@ -268,9 +265,6 @@ const WorkspaceTracker = new Lang.Class({
if (removingCurrentWorkspace) {
global.screen.get_workspace_by_index(global.screen.n_workspaces - 1).activate(global.get_current_time());
this._wm.unblockAnimations();
if (!Main.overview.visible && showOverview)
Main.overview.show();
}
this._checkWorkspacesId = 0;

View File

@@ -876,7 +876,6 @@ const UnalignedLayoutStrategy = new Lang.Class({
row.windows.push(window);
row.fullWidth += width;
} else {
this._sortRow(row);
break;
}
}
@@ -886,6 +885,8 @@ const UnalignedLayoutStrategy = new Lang.Class({
let maxRow;
for (let i = 0; i < numRows; i++) {
let row = rows[i];
this._sortRow(row);
if (!maxRow || row.fullWidth > maxRow.fullWidth)
maxRow = row;
gridHeight += row.fullHeight;
@@ -1433,6 +1434,10 @@ const Workspace = new Lang.Class({
if (this._positionWindowsId > 0)
Meta.later_remove(this._positionWindowsId);
if (this._actualGeometryLater > 0)
Meta.later_remove(this._actualGeometryLater);
this._windows = [];
},

View File

@@ -540,12 +540,6 @@ const WorkspacesDisplay = new Lang.Class({
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].destroy();
this._workspacesViews = [];
for (let i = 0; i < this._workspaces.length; i++)
for (let w = 0; w < this._workspaces[i].length; w++) {
this._workspaces[i][w].disconnectAll();
this._workspaces[i][w].destroy();
}
},
_workspacesOnlyOnPrimaryChanged: function() {
@@ -561,10 +555,6 @@ const WorkspacesDisplay = new Lang.Class({
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].destroy();
for (let i = 0; i < this._workspaces.length; i++)
for (let w = 0; w < this._workspaces[i].length; w++)
this._workspaces[i][w].destroy();
this._workspacesViews = [];
this._workspaces = [];
let monitors = Main.layoutManager.monitors;

View File

@@ -42,6 +42,7 @@ js/ui/shellEntry.js
js/ui/shellMountOperation.js
js/ui/status/accessibility.js
js/ui/status/bluetooth.js
js/ui/status/brightness.js
js/ui/status/keyboard.js
js/ui/status/network.js
js/ui/status/power.js

745
po/ar.po

File diff suppressed because it is too large Load Diff

1571
po/as.po

File diff suppressed because it is too large Load Diff

1201
po/be.po

File diff suppressed because it is too large Load Diff

View File

@@ -160,7 +160,7 @@ msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"S'utilitza internament per desar l'últim estat de presencia de la sessió de "
"S'utilitza internament per desar l'últim estat de presència de la sessió de "
"l'usuari. El valor prové de l'enumeració «GsmPresenceStatus»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
@@ -994,7 +994,7 @@ msgstr "S'ha revocat el certificat"
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificat utilitza un algorisme criptògraf no segur o la seva fortalesa "
"El certificat utilitza un algorisme criptogràfic no segur o la seva fortalesa "
"criptogràfica és feble"
#: ../js/ui/components/telepathyClient.js:1342

530
po/cs.po

File diff suppressed because it is too large Load Diff

1029
po/de.po

File diff suppressed because it is too large Load Diff

484
po/es.po

File diff suppressed because it is too large Load Diff

1621
po/fi.po

File diff suppressed because it is too large Load Diff

656
po/ga.po

File diff suppressed because it is too large Load Diff

393
po/gl.po
View File

@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-08-21 01:10+0200\n"
"PO-Revision-Date: 2013-08-21 01:12+0200\n"
"POT-Creation-Date: 2013-09-03 12:56+0200\n"
"PO-Revision-Date: 2013-09-03 12:57+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
@@ -127,27 +127,10 @@ msgid "History for the looking glass dialog"
msgstr "Historial do diálogo de «looking glass»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
msgstr ""
"Usado internamente para gardar o último IM de presenza estabelecido "
"explícitamente polo usuario. O valor aquí é da enumeración "
"TpConnectionPresenceType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"Usado internamente para gardar o último estado de presenza da sesión do "
"usuario. O valor aquí é da GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Mostrar sempre o elemento de menú «Saír da sesión» no menú de usuario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@@ -156,14 +139,14 @@ msgstr ""
"sesión» en situacións de existir un único usuario ou existir unha única "
"sesión. "
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Indica se se debe lembrar o contrasinal para montar os sistemas de ficheiros "
"cifrados ou remotos"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@@ -175,70 +158,70 @@ msgstr ""
"futuro aparecerá a opción «Lembrar contrasinal» Esta chave estabelece o "
"estado por omisión da opción. "
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Mostrar a data da semana no calendario"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Se é verdadeiro, móstrase a data da semana ISO no calendario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Combinación de teclas para abrir o menú de aplicativo"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Combinación de teclas para abrir o menú de aplicativo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Combinación de teclas para abrir a vista «Mostrar aplicativos»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Combinación de teclas para abrir a vista \"Mostrar aplicativos\" da Vista "
"xera de Actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Combinación de teclas para abrir a Vista xeral"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Combinación de teclas para abrir a Vista de actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Combinación de teclas para enfocar a notificación activa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Combinación de teclas para enfocar a notificación activa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Que teclado usar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "O tipo de teclado a usar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "O modo da icona do aplicativo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@@ -248,21 +231,21 @@ msgstr ""
"son «thumbnail-only» (mostra unha miniatura da xanela, «app-icon-only» (só "
"mostra a icona do aplicativo) ou «both» (móstranse ambas cosas)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Anexar o diálogo modal á xanela pai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Esta chave sobrescribe a chave en org.gnome.mutter cando executa GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Distribución dos botóns na barra de títulos"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@@ -270,15 +253,15 @@ msgstr ""
"Esta chave sobrescribe a chave en org.gnome.wm.preferences cando executa "
"GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Activar o mosaico nos bordos ao arrastrar xanelas aos bordos da xanela"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Os espazos de traballo xestiónanse dinamicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Espazos de traballo só no monitor primario"
@@ -296,46 +279,41 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Seleccione unha extensión que configurar usando a caixa combinada de arriba."
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
#: ../js/ui/status/system.js:373
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Seguinte"
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:56
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Desbloquear"
#: ../js/gdm/authPrompt.js:214
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Iniciar sesión"
#: ../js/gdm/loginDialog.js:299
#: ../js/gdm/loginDialog.js:294
msgid "Choose Session"
msgstr "Escolla unha sesión"
#: ../js/gdm/loginDialog.js:317
msgid "Session"
msgstr "Sesión"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:468
#: ../js/gdm/loginDialog.js:454
msgid "Not listed?"
msgstr "Non está na lista?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:641
#: ../js/gdm/loginDialog.js:622
#, c-format
msgid "(e.g., user or %s)"
msgstr "(p.ex., usuario ou %s)"
@@ -343,12 +321,12 @@ msgstr "(p.ex., usuario ou %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:646 ../js/ui/components/networkAgent.js:255
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Nome de usuario: "
#: ../js/gdm/loginDialog.js:909
#: ../js/gdm/loginDialog.js:891
msgid "Login Window"
msgstr "Xanela de inicio de sesión"
@@ -361,7 +339,7 @@ msgstr "Erro de autenticación"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:419
#: ../js/gdm/util.js:436
msgid "(or swipe finger)"
msgstr "(ou pase o dedo)"
@@ -380,23 +358,27 @@ msgstr "Non foi posíbel analizar a orde:"
msgid "Execution of '%s' failed:"
msgstr "Produciuse un fallo na execución de «%s»:"
#: ../js/ui/appDisplay.js:386
#: ../js/ui/appDisplay.js:579
msgid "Frequently used applications will appear here"
msgstr "Os aplicativos usados recentemente aparecerán aquí"
#: ../js/ui/appDisplay.js:695
msgid "Frequent"
msgstr "Frecuentes"
#: ../js/ui/appDisplay.js:393
#: ../js/ui/appDisplay.js:702
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:986
#: ../js/ui/appDisplay.js:1489
msgid "New Window"
msgstr "Xanela nova"
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1492 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Retirar dos marcadores"
#: ../js/ui/appDisplay.js:990
#: ../js/ui/appDisplay.js:1493
msgid "Add to Favorites"
msgstr "Engadir aos favoritos"
@@ -410,7 +392,7 @@ msgstr "%s foi engadido aos seus favoritos."
msgid "%s has been removed from your favorites."
msgstr "%s retirouse dos seus marcadores."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Preferencias"
@@ -534,36 +516,44 @@ msgctxt "list saturday"
msgid "S"
msgstr "S"
#: ../js/ui/calendar.js:447
msgid "Previous month"
msgstr "Anterior mes"
#: ../js/ui/calendar.js:457
msgid "Next month"
msgstr "Seguinte mes"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:753
msgid "Nothing Scheduled"
msgstr "Nada programado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:785
msgid "Today"
msgstr "Hoxe"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Mañá"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:800
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:808
msgid "Next week"
msgstr "A vindeira semana"
@@ -597,7 +587,7 @@ msgid "Type again:"
msgstr "Escriba de novo:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Conectar"
@@ -945,7 +935,7 @@ msgstr "Mostrar aplicativos"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:442
msgid "Dash"
msgstr "Taboleiro"
@@ -968,95 +958,111 @@ msgstr "Preferencias de data e hora"
msgid "%A %B %e, %Y"
msgstr "%a, %e de %B, %Y"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:62
#, c-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Saír da sesión %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:63
msgctxt "title"
msgid "Log Out"
msgstr "Saír da sesión"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr ""
"Prema en «Saír da sesión» para pechar estes aplicativos e saír da sesión do "
"sistema."
#: ../js/ui/endSessionDialog.js:67
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "Vaise pechar a sesión de %s en %d segundo."
msgstr[1] "Vaise pechar a sesión de %s en %d segundos."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:70
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "A súa sesión pecharase automaticamente en %d segundo."
msgstr[1] "A súa sesión pecharase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system."
msgstr "Saíndo da sesión do sistema."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:75
msgctxt "button"
msgid "Log Out"
msgstr "Saír da sesión"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:81
msgctxt "title"
msgid "Power Off"
msgstr "Apagar"
#: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Prema sobre «Apagar» para pechar estes aplicativos e apagar o sistema."
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "O sistema apagarase automaticamente en %d segundo."
msgstr[1] "O sistema apagarase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:90
msgid "Powering off the system."
msgstr "Apagando o sistema."
#: ../js/ui/endSessionDialog.js:92 ../js/ui/endSessionDialog.js:109
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:94
#: ../js/ui/endSessionDialog.js:90
msgctxt "button"
msgid "Power Off"
msgstr "Apagar"
#: ../js/ui/endSessionDialog.js:100
#: ../js/ui/endSessionDialog.js:97
msgctxt "title"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system."
msgstr "Prema «Reiniciar» para pechar estes aplicativos e reiniciar o sistema."
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:99
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "O sistema reiniciarase automaticamente en %d segundo."
msgstr[1] "O sistema reiniciarase automaticamente en %d segundos."
#: ../js/ui/endSessionDialog.js:107
msgid "Restarting the system."
msgstr "Reiniciando o sistema."
#: ../js/ui/endSessionDialog.js:112
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Reiniciar e instalar actualizacións"
#: ../js/ui/endSessionDialog.js:114
#, c-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"O sistema reiniciarase automaticamente e instalará as actualizacións en %d "
"segundo."
msgstr[1] ""
"O sistema reiniciarase automaticamente e instalará as actualizacións en %d "
"segundos."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
msgid "Restart & Install"
msgstr "Reiniciar e instalar"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr "Algúns aplicativos están ocupados ou teñen traballo sen gardar."
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
msgstr "Hai outros usuarios conectados."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:479
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:482
#, c-format
msgid "%s (console)"
msgstr "%s (consola)"
#: ../js/ui/extensionDownloader.js:199
msgid "Install"
@@ -1156,7 +1162,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Descoñecido"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1216,22 +1222,22 @@ msgstr "Pechar"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:90
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:156
#: ../js/ui/screenShield.js:154
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d notificación nova"
msgstr[1] "%d notificacións novas"
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:712
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a pantalla"
@@ -1242,19 +1248,19 @@ msgstr "GNOME precisa bloquear a pantalla"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1316
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Non foi posíbel bloquear"
#: ../js/ui/screenShield.js:838 ../js/ui/screenShield.js:1317
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Un aplicativo impediu o bloqueo"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:447
msgid "Searching…"
msgstr "Buscando…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:491
msgid "No results."
msgstr "Sen resultados."
@@ -1335,7 +1341,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Apagar"
@@ -1421,6 +1427,10 @@ msgstr "Escriba o PIN mencionado no dispositivo."
msgid "OK"
msgstr "Aceptar"
#: ../js/ui/status/brightness.js:42
msgid "Brightness"
msgstr "Brillo"
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Mostrar a distribución do teclado"
@@ -1429,83 +1439,83 @@ msgstr "Mostrar a distribución do teclado"
msgid "<unknown>"
msgstr "<descoñecido>"
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Desactivar"
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Preferencias da rede"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:357
#: ../js/ui/status/network.js:364
msgid "unmanaged"
msgstr "non xestionada"
#: ../js/ui/status/network.js:359
#: ../js/ui/status/network.js:366
msgid "disconnecting..."
msgstr "desconectando…"
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "conectando…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "requírese autenticación"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:376
#: ../js/ui/status/network.js:383
msgid "firmware missing"
msgstr "falta o «firmware»"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:380
#: ../js/ui/status/network.js:387
msgid "unavailable"
msgstr "non dispoñíbel"
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "conexión fallada"
#: ../js/ui/status/network.js:647
#: ../js/ui/status/network.js:654
msgid "Wi-Fi Networks"
msgstr "Redes WiFi"
#: ../js/ui/status/network.js:649
#: ../js/ui/status/network.js:656
msgid "Select a network"
msgstr "Seleccione unha rede"
#: ../js/ui/status/network.js:673
#: ../js/ui/status/network.js:680
msgid "No Networks"
msgstr "Sen redes"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Seleccione unha rede"
#: ../js/ui/status/network.js:1027
#: ../js/ui/status/network.js:1034
msgid "Turn On"
msgstr "Activar"
#: ../js/ui/status/network.js:1160
#: ../js/ui/status/network.js:1167
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1296
#: ../js/ui/status/network.js:1306
msgid "Network Manager"
msgstr "Xestor da rede"
#: ../js/ui/status/network.js:1338
#: ../js/ui/status/network.js:1345
msgid "Connection failed"
msgstr "Produciuse un fallo na conexión"
#: ../js/ui/status/network.js:1339
#: ../js/ui/status/network.js:1346
msgid "Activation of network connection failed"
msgstr "Produciuse un fallo na activación da conexión de rede"
@@ -1551,51 +1561,43 @@ msgstr "Modo avión"
msgid "On"
msgstr "Activado"
#: ../js/ui/status/system.js:247
#: ../js/ui/status/system.js:305
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/status/system.js:252
#: ../js/ui/status/system.js:310
msgid "Log Out"
msgstr "Saír da sesión"
#: ../js/ui/status/system.js:271
#: ../js/ui/status/system.js:329
msgid "Orientation Lock"
msgstr "Bloqueo de orientación"
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
#: ../js/ui/status/system.js:337
msgid "Suspend"
msgstr "Suspender"
#: ../js/ui/status/system.js:340
msgid "Power Off"
msgstr "Apagar"
#: ../js/ui/status/system.js:323
msgid "Other users are logged in."
msgstr "Hai outros usuarios conectados."
#: ../js/ui/status/system.js:328
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Se apaga o computador pode perder o traballo que non gardou."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/status/system.js:356
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/status/system.js:359
#, c-format
msgid "%s (console)"
msgstr "%s (consola)"
#: ../js/ui/status/volume.js:124
#: ../js/ui/status/volume.js:127
msgid "Volume changed"
msgstr "Volume cambiado"
#: ../js/ui/unlockDialog.js:64
#: ../js/ui/status/volume.js:162
msgid "Volume"
msgstr "Volume"
#: ../js/ui/status/volume.js:213
msgid "Microphone"
msgstr "Micrófono"
#: ../js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Iniciar sesión como outro usuario"
#: ../js/ui/unlockDialog.js:81
#: ../js/ui/unlockDialog.js:84
msgid "Unlock Window"
msgstr "Desbloquear xanela"
@@ -1709,6 +1711,49 @@ msgstr "O contrasinal non pode estar baleiro"
msgid "Authentication dialog was dismissed by the user"
msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "Session"
#~ msgstr "Sesión"
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. "
#~ "The value here is from the TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "Usado internamente para gardar o último IM de presenza estabelecido "
#~ "explícitamente polo usuario. O valor aquí é da enumeración "
#~ "TpConnectionPresenceType."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. "
#~ "The value here is from the GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "Usado internamente para gardar o último estado de presenza da sesión do "
#~ "usuario. O valor aquí é da GsmPresenceStatus."
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr ""
#~ "Prema en «Saír da sesión» para pechar estes aplicativos e saír da sesión "
#~ "do sistema."
#~ msgid "Logging out of the system."
#~ msgstr "Saíndo da sesión do sistema."
#~ msgid "Click Power Off to quit these applications and power off the system."
#~ msgstr ""
#~ "Prema sobre «Apagar» para pechar estes aplicativos e apagar o sistema."
#~ msgid "Powering off the system."
#~ msgstr "Apagando o sistema."
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "Prema «Reiniciar» para pechar estes aplicativos e reiniciar o sistema."
#~ msgid "Restarting the system."
#~ msgstr "Reiniciando o sistema."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr "Se apaga o computador pode perder o traballo que non gardou."
#~ msgid "Screenshots"
#~ msgstr "Capturas de pantalla"
@@ -1776,9 +1821,6 @@ msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "Power"
#~ msgstr "Apagar"
#~ msgid "Suspend"
#~ msgstr "Suspender"
#~ msgid "Restart"
#~ msgstr "Reiniciar"
@@ -1788,9 +1830,6 @@ msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "Volume, network, battery"
#~ msgstr "Volume, rede, batería"
#~ msgid "Volume"
#~ msgstr "Volume"
#~ msgid "Universal Access Settings"
#~ msgstr "Preferencias do acceso universal"
@@ -1903,9 +1942,6 @@ msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "Unknown"
#~ msgstr "Descoñecido"
#~ msgid "Microphone"
#~ msgstr "Micrófono"
#~ msgid "Available"
#~ msgstr "Dispoñíbel"
@@ -1924,9 +1960,6 @@ msgstr "O usuario rexeitou o diálogo de autenticación"
#~ msgid "Notifications"
#~ msgstr "Notificacións"
#~ msgid "Install Updates & Restart"
#~ msgstr "Instalar actualizacións e reiniciar"
#~ msgid "Your chat status will be set to busy"
#~ msgstr "O seu estado de conversa estabelecerase a «ocupado»"

342
po/id.po
View File

@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-08-20 18:21+0000\n"
"PO-Revision-Date: 2013-08-21 17:36+0700\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-10 13:06+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome@i15n.org>\n"
"Language: id\n"
@@ -126,27 +126,10 @@ msgid "History for the looking glass dialog"
msgstr "Riwayat untuk dialog yang berpenampilan gelas kaca"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
msgstr ""
"Secara internal dipakai untuk menyimpan kehadiran PI terakhir yang "
"ditentukan oleh pengguna. Nilainya berasal dari enumerasi "
"TpConnectionPresemceType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"Secara internal dipakai untuk menyimpan status sesi terakhir bagi pengguna. "
"Nilainya berasal dari enumerasi GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Selalku tampilkan butir menu 'Log keluar' dalam menu pengguna."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@@ -154,14 +137,14 @@ msgstr ""
"Kunci ini menimpa penyembunyian otomatis dari butir menu 'Log keluar' dalam "
"situasi pengguna tunggal, sesi tunggal."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Apakah mengingat sandi untuk mengait sistem berkas terenkripsi atau jarak "
"jauh"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@@ -173,70 +156,70 @@ msgstr ""
"dimasa depan, suatu kotak contreng 'Ingat Sandi' akan tampil. Kunci ini "
"menata keadaan baku dari kontak contreng."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Menampilkan tanggal pada kalender"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Jika \"true\", menampilkan tanggal berformat ISO pada kalender."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Kombinasi tombol untuk membuka menu aplikasi"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Kombinasi tombol untuk membuka tilikan \"Tampilkan Aplikasi\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Kombinasi tombol untuk membuka tilikan Ringkasan Aktivitas \"Tampilkan "
"Aplikasi\"."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Kombinasi tombol untuk membuka ringkasan"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Kombinasi tombol untuk membuka Ringkasan Aktivitas."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Kombinasi tombol untuk kenampakan baki pesan"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Kombinasi tombol untuk kenampakan baki pesan."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Kombinasi tombol untuk fokus pada pemberitahuan yang aktif"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Kombinasi tombol untuk fokus pada pemberitahuan yang aktif."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Papan tik mana yang akan dipakai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Jenis papan tik yang akan dipakai."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "Mode ikon aplikasi."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@@ -246,22 +229,22 @@ msgstr ""
"adalah 'thumbnail-only' (menampilkan gambar mini dari jendela), 'app-icon-"
"only' (hanya menampilkan ikon aplikasi), atau 'both' (keduanya)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Mencantolkan dialog modal ke jendela induk"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Kunci ini menimpa kunci dalam org.gnome.mutter ketika menjalankan GNOME "
"Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Pengaturan tombol pada bilah judul"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@@ -269,16 +252,16 @@ msgstr ""
"Kunci ini menimpa kunci dalam org.gnome.desktop.wm.preferences ketika "
"menjalankan GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Memfungsikan pengubinan tepi ketika menjatuhkan jendela pada tepi layar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Ruang kerja dikelola secara dinamis"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Ruang kerja hanya pada monitor primer"
@@ -295,46 +278,41 @@ msgstr "Ekstensi"
msgid "Select an extension to configure using the combobox above."
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
#: ../js/ui/status/system.js:373
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Batal"
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Selanjutnya"
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:56
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Buka Kunci"
#: ../js/gdm/authPrompt.js:214
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Masuk"
#: ../js/gdm/loginDialog.js:299
#: ../js/gdm/loginDialog.js:294
msgid "Choose Session"
msgstr "Pilih Sesi"
#: ../js/gdm/loginDialog.js:317
msgid "Session"
msgstr "Sesi"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:468
#: ../js/gdm/loginDialog.js:454
msgid "Not listed?"
msgstr "Tak masuk daftar?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:641
#: ../js/gdm/loginDialog.js:622
#, c-format
msgid "(e.g., user or %s)"
msgstr "(cth., pengguna dari %s)"
@@ -342,12 +320,12 @@ msgstr "(cth., pengguna dari %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:646 ../js/ui/components/networkAgent.js:255
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Nama pengguna: "
#: ../js/gdm/loginDialog.js:909
#: ../js/gdm/loginDialog.js:891
msgid "Login Window"
msgstr "Jendela Log Masuk"
@@ -360,7 +338,7 @@ msgstr "Galat otentikasi"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:419
#: ../js/gdm/util.js:436
msgid "(or swipe finger)"
msgstr "(atau gesekkan jari)"
@@ -379,23 +357,27 @@ msgstr "Tidak dapat mengurai perintah:"
msgid "Execution of '%s' failed:"
msgstr "Eksekusi '%s' gagal:"
#: ../js/ui/appDisplay.js:386
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Aplikasi yang sering dipakai akan muncul di sini"
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Sering"
#: ../js/ui/appDisplay.js:393
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Semua"
#: ../js/ui/appDisplay.js:986
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Jendela Baru"
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Hapus dari Favorit"
#: ../js/ui/appDisplay.js:990
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Tambah ke Favorit"
@@ -409,7 +391,7 @@ msgstr "%s telah ditambahkan ke favorit Anda."
msgid "%s has been removed from your favorites."
msgstr "%s telah dihapus dari favorit Anda."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Pengaturan"
@@ -533,36 +515,44 @@ msgctxt "list saturday"
msgid "S"
msgstr "Sab"
#: ../js/ui/calendar.js:447
msgid "Previous month"
msgstr "Bulan sebelumnya"
#: ../js/ui/calendar.js:457
msgid "Next month"
msgstr "Bulan selanjutnya"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:753
msgid "Nothing Scheduled"
msgstr "Tidak Ada Jadwal"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d %B %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:785
msgid "Today"
msgstr "Hari ini"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Besok"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:800
msgid "This week"
msgstr "Minggu ini"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:808
msgid "Next week"
msgstr "Minggu depan"
@@ -596,7 +586,7 @@ msgid "Type again:"
msgstr "Ketik lagi:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Sambung"
@@ -942,7 +932,7 @@ msgstr "Tampilkan Aplikasi"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:442
msgid "Dash"
msgstr "Dash"
@@ -965,91 +955,104 @@ msgstr "Pengaturan Waktu & Tanggal"
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:62
#, c-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Keluar %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:63
msgctxt "title"
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr "Klik Keluar untuk menutup aplikasi ini serta keluar dari sistem."
#: ../js/ui/endSessionDialog.js:67
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s akan log keluar otomatis dalam %d detik.\t\t"
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:70
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Anda akan log keluar otomatis dalam %d detik."
#: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system."
msgstr "Keluar dari sistem."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:75
msgctxt "button"
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:81
msgctxt "title"
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Klik Matikan untuk keluar dari aplikasi dan mematikan sistem."
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Sistem ini akan otomatis dimatikan dalam %d detik."
#: ../js/ui/endSessionDialog.js:90
msgid "Powering off the system."
msgstr "Mematikan sistem."
#: ../js/ui/endSessionDialog.js:92 ../js/ui/endSessionDialog.js:109
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/ui/endSessionDialog.js:94
#: ../js/ui/endSessionDialog.js:90
msgctxt "button"
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/endSessionDialog.js:100
#: ../js/ui/endSessionDialog.js:97
msgctxt "title"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Klik Nyalakan Ulang untuk menutup aplikasi ini serta menyalakan kembali "
"sistem."
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:99
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Sistem ini akan otomatis dimulai ulang dalam %d detik."
#: ../js/ui/endSessionDialog.js:107
msgid "Restarting the system."
msgstr "Menyalan ulang sistem."
#: ../js/ui/endSessionDialog.js:112
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Start Ulang & Pasang Pemutakhiran"
#: ../js/ui/endSessionDialog.js:114
#, c-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"Sistem ini akan otomatis dimulai ulang dan memasang pemutakhiran dalam %d "
"detik."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
msgid "Restart & Install"
msgstr "Start Ulang & Pasang"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr "Beberapa aplikasi sedang sibuk atau belum disimpan perubahannya."
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
msgstr "Pengguna lain sedang log masuk."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:479
#, c-format
msgid "%s (remote)"
msgstr "%s (jarak jauh)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:482
#, c-format
msgid "%s (console)"
msgstr "%s (konsol)"
#: ../js/ui/extensionDownloader.js:199
msgid "Install"
@@ -1132,15 +1135,15 @@ msgstr "Pengaturan Pemberitahuan"
msgid "Tray Menu"
msgstr "Menu Baki"
#: ../js/ui/messageTray.js:1777
#: ../js/ui/messageTray.js:1775
msgid "No Messages"
msgstr "Tiada Pesan"
#: ../js/ui/messageTray.js:1814
#: ../js/ui/messageTray.js:1812
msgid "Message Tray"
msgstr "Baki Pesan"
#: ../js/ui/messageTray.js:2788
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Informasi Sistem"
@@ -1149,7 +1152,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Tak dikenal"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1209,21 +1212,21 @@ msgstr "Tutup"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:90
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:156
#: ../js/ui/screenShield.js:154
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d pemberitahuan baru"
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Kunci"
#: ../js/ui/screenShield.js:706
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME perlu mengunci layar"
@@ -1234,19 +1237,19 @@ msgstr "GNOME perlu mengunci layar"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1279
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Tak bisa mengunci"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1280
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Kunci diblokir oleh suatu aplikasi"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:447
msgid "Searching…"
msgstr "Mencari…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:491
msgid "No results."
msgstr "Tidak ada yang cocok."
@@ -1327,7 +1330,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Matikan"
@@ -1412,6 +1415,10 @@ msgstr "Ketikkan PIN yang disebutkan oleh perangkat."
msgid "OK"
msgstr "Oke"
#: ../js/ui/status/brightness.js:42
msgid "Brightness"
msgstr "Kecerahan"
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Tampilkan Tata Letak Papan Tik"
@@ -1420,83 +1427,83 @@ msgstr "Tampilkan Tata Letak Papan Tik"
msgid "<unknown>"
msgstr "<tak dikenal>"
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Mati"
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Pengaturan Jaringan"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:357
#: ../js/ui/status/network.js:364
msgid "unmanaged"
msgstr "tak dikelola"
#: ../js/ui/status/network.js:359
#: ../js/ui/status/network.js:366
msgid "disconnecting..."
msgstr "memutus..."
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "menghubungi..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "diperlukan otentikasi"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:376
#: ../js/ui/status/network.js:383
msgid "firmware missing"
msgstr "firmware hilang"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:380
#: ../js/ui/status/network.js:387
msgid "unavailable"
msgstr "tidak tersedia"
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "koneksi gagal"
#: ../js/ui/status/network.js:647
#: ../js/ui/status/network.js:654
msgid "Wi-Fi Networks"
msgstr "Jaringan Wi-Fi"
#: ../js/ui/status/network.js:649
#: ../js/ui/status/network.js:656
msgid "Select a network"
msgstr "Pilih jaringan"
#: ../js/ui/status/network.js:673
#: ../js/ui/status/network.js:680
msgid "No Networks"
msgstr "Tiada Jaringan"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Pilih Jaringan"
#: ../js/ui/status/network.js:1027
#: ../js/ui/status/network.js:1034
msgid "Turn On"
msgstr "Nyalakan"
#: ../js/ui/status/network.js:1160
#: ../js/ui/status/network.js:1167
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1296
#: ../js/ui/status/network.js:1306
msgid "Network Manager"
msgstr "Manajer Jaringan"
#: ../js/ui/status/network.js:1338
#: ../js/ui/status/network.js:1345
msgid "Connection failed"
msgstr "Koneksi gagal"
#: ../js/ui/status/network.js:1339
#: ../js/ui/status/network.js:1346
msgid "Activation of network connection failed"
msgstr "Aktivasi koneksi jaringan gagal"
@@ -1542,52 +1549,43 @@ msgstr "Mode Pesawat Terbang"
msgid "On"
msgstr "Nyala"
#: ../js/ui/status/system.js:247
#: ../js/ui/status/system.js:305
msgid "Switch User"
msgstr "Ganti Pengguna"
#: ../js/ui/status/system.js:252
#: ../js/ui/status/system.js:310
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/status/system.js:271
#: ../js/ui/status/system.js:329
msgid "Orientation Lock"
msgstr "Kunci Orientasi"
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
#: ../js/ui/status/system.js:337
msgid "Suspend"
msgstr "Suspensi"
#: ../js/ui/status/system.js:340
msgid "Power Off"
msgstr "Matikan"
#: ../js/ui/status/system.js:323
msgid "Other users are logged in."
msgstr "Pengguna lain sedang log masuk."
#: ../js/ui/status/system.js:328
msgid "Shutting down might cause them to lose unsaved work."
msgstr ""
"Mematikan dapat menyebabkan mereka kehilangan pekerjaan yang belum disimpan."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/status/system.js:356
#, c-format
msgid "%s (remote)"
msgstr "%s (jarak jauh)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/status/system.js:359
#, c-format
msgid "%s (console)"
msgstr "%s (konsol)"
#: ../js/ui/status/volume.js:124
#: ../js/ui/status/volume.js:127
msgid "Volume changed"
msgstr "Volume diubah"
#: ../js/ui/unlockDialog.js:64
#: ../js/ui/status/volume.js:162
msgid "Volume"
msgstr "Volume"
#: ../js/ui/status/volume.js:213
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Masuk sebagai pengguna lain"
#: ../js/ui/unlockDialog.js:81
#: ../js/ui/unlockDialog.js:84
msgid "Unlock Window"
msgstr "Buka Kunci Jendela"

1287
po/it.po

File diff suppressed because it is too large Load Diff

1171
po/ja.po

File diff suppressed because it is too large Load Diff

1098
po/kk.po

File diff suppressed because it is too large Load Diff

729
po/lt.po

File diff suppressed because it is too large Load Diff

1616
po/lv.po

File diff suppressed because it is too large Load Diff

591
po/nb.po

File diff suppressed because it is too large Load Diff

475
po/pa.po

File diff suppressed because it is too large Load Diff

1203
po/pl.po

File diff suppressed because it is too large Load Diff

View File

@@ -19,16 +19,16 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-08-21 00:22+0000\n"
"PO-Revision-Date: 2013-08-03 10:03-0300\n"
"Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-02 20:50-0300\n"
"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list@gnome.org>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n>1);\n"
"X-Generator: Poedit 1.5.4\n"
"X-Generator: Poedit 1.5.7\n"
"X-Project-Style: gnome\n"
#: ../data/50-gnome-shell-system.xml.in.h:1
@@ -57,7 +57,7 @@ msgstr "Abre o menu do aplicativo"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "Shell do GNOME"
msgstr "GNOME Shell"
#: ../data/gnome-shell.desktop.in.in.h:2
msgid "Window management and application launching"
@@ -66,11 +66,11 @@ msgstr "Gerenciamento de janelas e lançador de aplicativos"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
#: ../js/extensionPrefs/main.js:153
msgid "GNOME Shell Extension Preferences"
msgstr "Preferências de extensões do Shell do GNOME"
msgstr "Preferências de extensões do GNOME Shell"
#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
msgid "Configure GNOME Shell Extensions"
msgstr "Configurar extensões do Shell do GNOME"
msgstr "Configurar extensões do GNOME Shell"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
msgid "Enable internal tools useful for developers and testers from Alt-F2"
@@ -97,7 +97,7 @@ msgid ""
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension DBus methods on org.gnome.Shell."
msgstr ""
"As extensões do Shell do GNOME tem uma propriedade uuid; esta chave lista as "
"As extensões do GNOME Shell tem uma propriedade uuid; esta chave lista as "
"extensões que devem ser carregadas. Qualquer extensão que quiser ser "
"carregada precisa estar nessa lista. Você pode também manipular essa lista "
"com os métodos EnableExtension e DisableExtensions do DBus em org.gnome."
@@ -137,27 +137,10 @@ msgid "History for the looking glass dialog"
msgstr "Histórico do diálogo do shell looking glass"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
msgstr ""
"Usado internamente para armazenar a última presença de MI explicitamente "
"definida pelo usuário. O valor aqui é de uma enumeração "
"TpConnectionPresenceType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"Usado internamente para armazenar o último status de presença de sessão "
"definida pelo usuário. O valor aqui é de uma enumeração GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Sempre mostrar o item de menu \"Encerrar sessão\" no menu do usuário."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@@ -166,14 +149,14 @@ msgstr ""
"sessão\" quando houver somente um usuário, em situações de somente uma "
"sessão."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Se lembra ou não as senhas para montar sistemas de arquivos criptografados "
"ou remotos"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@@ -185,70 +168,70 @@ msgstr ""
"posterior, a caixa de seleção 'Lembrar senha' estará presente. Esta chave "
"ajusta o estado padrão da caixa de seleção."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Mostrar o número da semana na agenda"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Se verdadeiro, exibe o número da semana na agenda."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Atalho de teclado para abrir um menu de aplicativo"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Atalho de teclado para abrir um menu de aplicativo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Atalho de teclado para abrir a visualização \"Mostrar aplicativos\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Atalho de teclado para abrir a visualização \"Mostrar aplicativos\" do "
"panorama de atividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Atalho de teclado para abrir o panorama"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Atalho de teclado para abrir o panorama de atividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Atalho de teclado para alternar a visibilidade da área de notificação"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Atalho de teclado para alternar a visibilidade da área de notificação."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Atalho de teclado para ativar a notificação ativa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Atalho de teclado para ativar a notificação ativa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Qual teclado usar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "O tipo do teclado para usar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "O modo ícone do aplicativo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@@ -258,22 +241,22 @@ msgstr ""
"válidas são 'thumbnail-only' (mostra uma miniatura da janela), 'app-icon-"
"only' (mostra apenas o ícone do aplicativo) ou 'both'."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Anexar diálogo modal à janela pai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Esta chave sobrescreve a chave em org.gnome.mutter ao executar o Shell do "
"GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Organização dos botões na barra de título"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@@ -281,16 +264,16 @@ msgstr ""
"Esta chave sobrescreve a chave em org.gnome.desktop.wm.preferences ao "
"executar o Shell do GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Habilitar contorno ladrilhado ao arrastar janelas sobre as bordas da tela"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Espaços de trabalho são gerenciados dinamicamente"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Espaços de trabalho apenas no monitor primário"
@@ -308,46 +291,41 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Selecione uma extensão para configurar usando a caixa de seleção abaixo."
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
#: ../js/ui/status/system.js:373
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Cancelar"
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Próximo"
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:56
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Desbloquear"
#: ../js/gdm/authPrompt.js:214
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Entrar"
#: ../js/gdm/loginDialog.js:299
#: ../js/gdm/loginDialog.js:294
msgid "Choose Session"
msgstr "Escolher sessão"
#: ../js/gdm/loginDialog.js:317
msgid "Session"
msgstr "Sessão"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:468
#: ../js/gdm/loginDialog.js:454
msgid "Not listed?"
msgstr "Não está listado?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:641
#: ../js/gdm/loginDialog.js:622
#, c-format
msgid "(e.g., user or %s)"
msgstr "(ex.: usuário ou %s)"
@@ -355,12 +333,12 @@ msgstr "(ex.: usuário ou %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:646 ../js/ui/components/networkAgent.js:255
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Nome de usuário: "
#: ../js/gdm/loginDialog.js:909
#: ../js/gdm/loginDialog.js:891
msgid "Login Window"
msgstr "Janela de sessão"
@@ -373,7 +351,7 @@ msgstr "Erro de autenticação"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:419
#: ../js/gdm/util.js:436
msgid "(or swipe finger)"
msgstr "(ou deslize o dedo)"
@@ -392,23 +370,27 @@ msgstr "Não foi possível analisar comando:"
msgid "Execution of '%s' failed:"
msgstr "A execução de \"%s\" falhou:"
#: ../js/ui/appDisplay.js:386
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Aplicativos usados frequentemente vão aparecer aqui"
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Frequente"
#: ../js/ui/appDisplay.js:393
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Todos"
#: ../js/ui/appDisplay.js:986
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Nova janela"
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Remover dos favoritos"
#: ../js/ui/appDisplay.js:990
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Adicionar aos favoritos"
@@ -422,7 +404,7 @@ msgstr "%s foi adicionado aos seus favoritos."
msgid "%s has been removed from your favorites."
msgstr "%s foi removido dos seus favoritos."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Configurações"
@@ -546,36 +528,44 @@ msgctxt "list saturday"
msgid "S"
msgstr "Sab"
#: ../js/ui/calendar.js:447
msgid "Previous month"
msgstr "Mês anterior"
#: ../js/ui/calendar.js:457
msgid "Next month"
msgstr "Próximo mês"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:753
msgid "Nothing Scheduled"
msgstr "Nada agendado"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d de %B de %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:785
msgid "Today"
msgstr "Hoje"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Amanhã"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:800
msgid "This week"
msgstr "Esta semana"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:808
msgid "Next week"
msgstr "Próxima semana"
@@ -609,7 +599,7 @@ msgid "Type again:"
msgstr "Digite novamente:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Conectar"
@@ -954,7 +944,7 @@ msgstr "Mostrar aplicativos"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:442
msgid "Dash"
msgstr "Dash"
@@ -978,94 +968,111 @@ msgstr "Configurações de data & hora"
msgid "%A %B %e, %Y"
msgstr "%A, %e de %B de %Y"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:62
#, c-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Encerrar sessão de %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:63
msgctxt "title"
msgid "Log Out"
msgstr "Encerrar sessão"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr ""
"Clique em Encerrar sessão para finalizar estes aplicativos e sair do sistema."
#: ../js/ui/endSessionDialog.js:67
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s encerrará a sessão automaticamente em %d segundo."
msgstr[1] "%s encerrará a sessão automaticamente em %d segundos."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:70
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Sua sessão será encerrada automaticamente em %d segundo."
msgstr[1] "Sua sessão será encerrada automaticamente em %d segundos."
#: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system."
msgstr "Encerrando sessão do sistema."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:75
msgctxt "button"
msgid "Log Out"
msgstr "Encerrar sessão"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:81
msgctxt "title"
msgid "Power Off"
msgstr "Desligar"
#: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Clique em Desligar para fechar os aplicativos e desligar o sistema."
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "O sistema será desligado automaticamente em %d segundo."
msgstr[1] "O sistema será desligado automaticamente em %d segundos."
#: ../js/ui/endSessionDialog.js:90
msgid "Powering off the system."
msgstr "Desligando o sistema."
#: ../js/ui/endSessionDialog.js:92 ../js/ui/endSessionDialog.js:109
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:94
#: ../js/ui/endSessionDialog.js:90
msgctxt "button"
msgid "Power Off"
msgstr "Desligar"
#: ../js/ui/endSessionDialog.js:100
#: ../js/ui/endSessionDialog.js:97
msgctxt "title"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system."
msgstr "Clique em Reiniciar para fechar os aplicativos e reiniciar o sistema."
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:99
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "O sistema irá reiniciar automaticamente em %d segundo."
msgstr[1] "O sistema irá reiniciar automaticamente em %d segundos."
#: ../js/ui/endSessionDialog.js:107
msgid "Restarting the system."
msgstr "Reiniciando o sistema."
#: ../js/ui/endSessionDialog.js:112
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Reiniciar & Instalar atualizações"
#: ../js/ui/endSessionDialog.js:114
#, c-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"O sistema irá reiniciar e instalar atualizações automaticamente em %d "
"segundo."
msgstr[1] ""
"O sistema irá reiniciar e instalar atualizações automaticamente em %d "
"segundos."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
msgid "Restart & Install"
msgstr "Reiniciar & Instalar"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr "Alguns aplicativos estão ocupados ou possuem trabalhos não salvos."
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
msgstr "Outros usuários estão com sessão aberta."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:479
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:482
#, c-format
msgid "%s (console)"
msgstr "%s (console)"
#: ../js/ui/extensionDownloader.js:199
msgid "Install"
@@ -1165,7 +1172,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Desconhecido"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1225,22 +1232,22 @@ msgstr "Fechar"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:90
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:156
#: ../js/ui/screenShield.js:154
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d nova notificação"
msgstr[1] "%d novas notificações"
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/screenShield.js:712
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME precisa bloquear a tela"
@@ -1251,19 +1258,19 @@ msgstr "GNOME precisa bloquear a tela"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1316
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Não foi possível bloquear"
#: ../js/ui/screenShield.js:838 ../js/ui/screenShield.js:1317
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "O bloqueio foi impedido por um aplicativo"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:447
msgid "Searching…"
msgstr "Pesquisando…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:491
msgid "No results."
msgstr "Nenhum resultado."
@@ -1344,7 +1351,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Desligar"
@@ -1431,6 +1438,10 @@ msgstr "Por favor, informe o PIN mencionado no dispositivo."
msgid "OK"
msgstr "OK"
#: ../js/ui/status/brightness.js:42
msgid "Brightness"
msgstr "Brilho"
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Exibir disposição de teclado"
@@ -1439,83 +1450,83 @@ msgstr "Exibir disposição de teclado"
msgid "<unknown>"
msgstr "<desconhecido>"
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Desligar"
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Configurações de rede"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:357
#: ../js/ui/status/network.js:364
msgid "unmanaged"
msgstr "não gerenciado"
#: ../js/ui/status/network.js:359
#: ../js/ui/status/network.js:366
msgid "disconnecting..."
msgstr "desconectando..."
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "conectando..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "autenticação necessária"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:376
#: ../js/ui/status/network.js:383
msgid "firmware missing"
msgstr "firmware faltando"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:380
#: ../js/ui/status/network.js:387
msgid "unavailable"
msgstr "indisponível"
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "conexão falhou"
#: ../js/ui/status/network.js:647
#: ../js/ui/status/network.js:654
msgid "Wi-Fi Networks"
msgstr "Redes Wi-Fi"
#: ../js/ui/status/network.js:649
#: ../js/ui/status/network.js:656
msgid "Select a network"
msgstr "Selecione uma rede"
#: ../js/ui/status/network.js:673
#: ../js/ui/status/network.js:680
msgid "No Networks"
msgstr "Nenhuma rede"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Selecione a rede"
#: ../js/ui/status/network.js:1027
#: ../js/ui/status/network.js:1034
msgid "Turn On"
msgstr "Ligar"
#: ../js/ui/status/network.js:1160
#: ../js/ui/status/network.js:1167
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1296
#: ../js/ui/status/network.js:1306
msgid "Network Manager"
msgstr "Gerenciador de rede"
#: ../js/ui/status/network.js:1338
#: ../js/ui/status/network.js:1345
msgid "Connection failed"
msgstr "Falha de conexão"
#: ../js/ui/status/network.js:1339
#: ../js/ui/status/network.js:1346
msgid "Activation of network connection failed"
msgstr "Falha ao ativar a conexão da rede"
@@ -1561,52 +1572,43 @@ msgstr "Modo avião"
msgid "On"
msgstr "On"
#: ../js/ui/status/system.js:247
#: ../js/ui/status/system.js:305
msgid "Switch User"
msgstr "Alternar usuário"
#: ../js/ui/status/system.js:252
#: ../js/ui/status/system.js:310
msgid "Log Out"
msgstr "Encerrar sessão"
#: ../js/ui/status/system.js:271
#: ../js/ui/status/system.js:329
msgid "Orientation Lock"
msgstr "Bloqueio da orientação"
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
#: ../js/ui/status/system.js:337
msgid "Suspend"
msgstr "Suspender"
#: ../js/ui/status/system.js:340
msgid "Power Off"
msgstr "Desligar"
#: ../js/ui/status/system.js:323
msgid "Other users are logged in."
msgstr "Outros usuários estão com sessão aberta."
#: ../js/ui/status/system.js:328
msgid "Shutting down might cause them to lose unsaved work."
msgstr ""
"O desligamento pode fazer com que eles percam seus trabalhos não salvos."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/status/system.js:356
#, c-format
msgid "%s (remote)"
msgstr "%s (remoto)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/status/system.js:359
#, c-format
msgid "%s (console)"
msgstr "%s (console)"
#: ../js/ui/status/volume.js:124
#: ../js/ui/status/volume.js:127
msgid "Volume changed"
msgstr "Volume alterado"
#: ../js/ui/unlockDialog.js:64
#: ../js/ui/status/volume.js:162
msgid "Volume"
msgstr "Volume"
#: ../js/ui/status/volume.js:213
msgid "Microphone"
msgstr "Microfone"
#: ../js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Iniciar sessão como outro usuário"
#: ../js/ui/unlockDialog.js:81
#: ../js/ui/unlockDialog.js:84
msgid "Unlock Window"
msgstr "Desbloquear janela"
@@ -1718,6 +1720,49 @@ msgstr "A senha não pode estar em branco"
msgid "Authentication dialog was dismissed by the user"
msgstr "O diálogo de autenticação foi descartado pelo usuário"
#~ msgid "Session"
#~ msgstr "Sessão"
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. "
#~ "The value here is from the TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "Usado internamente para armazenar a última presença de MI explicitamente "
#~ "definida pelo usuário. O valor aqui é de uma enumeração "
#~ "TpConnectionPresenceType."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. "
#~ "The value here is from the GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "Usado internamente para armazenar o último status de presença de sessão "
#~ "definida pelo usuário. O valor aqui é de uma enumeração GsmPresenceStatus."
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr ""
#~ "Clique em Encerrar sessão para finalizar estes aplicativos e sair do "
#~ "sistema."
#~ msgid "Logging out of the system."
#~ msgstr "Encerrando sessão do sistema."
#~ msgid "Click Power Off to quit these applications and power off the system."
#~ msgstr "Clique em Desligar para fechar os aplicativos e desligar o sistema."
#~ msgid "Powering off the system."
#~ msgstr "Desligando o sistema."
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "Clique em Reiniciar para fechar os aplicativos e reiniciar o sistema."
#~ msgid "Restarting the system."
#~ msgstr "Reiniciando o sistema."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr ""
#~ "O desligamento pode fazer com que eles percam seus trabalhos não salvos."
#~ msgid "Screenshots"
#~ msgstr "Capturas de tela"
@@ -1784,9 +1829,6 @@ msgstr "O diálogo de autenticação foi descartado pelo usuário"
#~ msgid "Power"
#~ msgstr "Desligar"
#~ msgid "Suspend"
#~ msgstr "Suspender"
#~ msgid "Restart"
#~ msgstr "Reiniciar"
@@ -1796,9 +1838,6 @@ msgstr "O diálogo de autenticação foi descartado pelo usuário"
#~ msgid "Volume, network, battery"
#~ msgstr "Volume, rede, bateria"
#~ msgid "Volume"
#~ msgstr "Volume"
#~ msgid "Visibility"
#~ msgstr "Visibilidade"

1052
po/ru.po

File diff suppressed because it is too large Load Diff

482
po/sk.po
View File

@@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: gnome-shell\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-08-20 19:53+0000\n"
"PO-Revision-Date: 2013-08-01 18:49+0100\n"
"POT-Creation-Date: 2013-09-04 09:34+0000\n"
"PO-Revision-Date: 2013-08-29 20:44+0100\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
"Language: sk\n"
@@ -135,28 +135,10 @@ msgid "History for the looking glass dialog"
msgstr "História dialógového okna integrovaného odlaďovača"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
msgstr ""
"Vnútorne použité na uloženie posledného stavu prítomnosti internetového "
"komunikátora výlučne nastavenej používateľom. Táto hodnota je z vymenovaných "
"hodnôt typu TpConnectionPresenceType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"Vnútorne použité na uloženie posledného stavu prítomnosti relácie "
"používateľa. Táto hodnota je z vymenovaných hodnôt typu "
"GsmPresenceStatusType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Vždy zobraziť položku „Odhlásiť sa“ v ponuke používateľa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@@ -165,7 +147,7 @@ msgstr ""
"s jedným používateľom alebo jednou reláciou."
# summary
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
@@ -173,7 +155,7 @@ msgstr ""
"prenosných súborových systémov"
# description
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@@ -185,71 +167,71 @@ msgstr ""
"zobrazí sa zaškrtávacie pole „Zapamätať heslo“. Tento kľúč nastaví "
"predvolený stav zaškrtávacieho poľa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Zobraziť čísla týždňov v kalendári"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr ""
"Ak je true, zobrazí v kalendári poradie dní v týždni podľa štandardu ISO."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Klávesová skratka na otvorenie ponuky aplikácií"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Klávesová skratka na otvorenie ponuky aplikácií."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“ v prehľade "
"aktivít."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Klávesová skratka na otvorenie prehľadu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Klávesová skratka na otvorenie prehľadu aktivít."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Klávesová skratka na prepnutie viditeľnosti lišty správ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Klávesová skratka na prepnutie viditeľnosti lišty správ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Klávesová skratka na zameranie aktívnych oznámení"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Klávesová skratka, s ktorou sa zamerá na aktívne oznámenia."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Ktorú klávesnicu používať"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Typ klávesnice, ktorá sa má používať."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "Režim ikonizácie aplikácií."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@@ -259,22 +241,22 @@ msgstr ""
"„thumbnail-only“ (zobrazí miniatúru okna), „app-icon-only“ (zobrazí iba "
"ikonu aplikácie) alebo „both“ (zobrazí oboje)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Pripojiť modálne dialógové okno k rodičovskému oknu"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Tento kľúč preváži kľúč v org.gnome.mutter po spustení Shellu prostredia "
"GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Usporiadanie tlačidiel na titulku okna"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@@ -282,15 +264,15 @@ msgstr ""
"Tento kľúč preváži kľúč v org.gnome.desktop.wm.preferences po spustení "
"Shellu prostredia GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Povoliť natiahnutie k okraju pri pustení okien na okrajoch obrazovky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Pracovné priestory sú spravované dynamicky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Pracovné priestory sú iba na primárnom monitore"
@@ -307,50 +289,43 @@ msgstr "Rozšírenie"
msgid "Select an extension to configure using the combobox above."
msgstr "Použitím ponuky vyberte rozšírenie na nastavenie"
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
#: ../js/ui/status/system.js:373
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Zrušiť"
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Ďalej"
# PM: prečo nie odomknúť?
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:56
#, fuzzy
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Odblokovať"
msgstr "Odomknúť"
#: ../js/gdm/authPrompt.js:214
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Prihlásiť sa"
# button
#: ../js/gdm/loginDialog.js:299
#: ../js/gdm/loginDialog.js:294
msgid "Choose Session"
msgstr "Vybrať reláciu"
#: ../js/gdm/loginDialog.js:317
msgid "Session"
msgstr "Relácia"
# https://bugzilla.gnome.org/show_bug.cgi?id=659972
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:468
#: ../js/gdm/loginDialog.js:454
msgid "Not listed?"
msgstr "Nie ste v zozname?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:641
#: ../js/gdm/loginDialog.js:622
#, c-format
msgid "(e.g., user or %s)"
msgstr "(napr., používateľ alebo %s)"
@@ -358,12 +333,12 @@ msgstr "(napr., používateľ alebo %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:646 ../js/ui/components/networkAgent.js:255
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Používateľské meno: "
#: ../js/gdm/loginDialog.js:909
#: ../js/gdm/loginDialog.js:891
msgid "Login Window"
msgstr "Prihlasovacie okno"
@@ -376,7 +351,7 @@ msgstr "Chyba pri overovaní totožnosti"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:419
#: ../js/gdm/util.js:436
msgid "(or swipe finger)"
msgstr "(alebo prejdite prstom)"
@@ -395,23 +370,27 @@ msgstr "Nepodarilo sa analyzovať príkaz:"
msgid "Execution of '%s' failed:"
msgstr "Spustenie „%s“ zlyhalo:"
#: ../js/ui/appDisplay.js:386
#: ../js/ui/appDisplay.js:580
msgid "Frequently used applications will appear here"
msgstr "Tu sa objavia často používané aplikácie"
#: ../js/ui/appDisplay.js:696
msgid "Frequent"
msgstr "Často používané"
#: ../js/ui/appDisplay.js:393
#: ../js/ui/appDisplay.js:703
msgid "All"
msgstr "Všetky"
#: ../js/ui/appDisplay.js:986
#: ../js/ui/appDisplay.js:1490
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1493 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Odstrániť z obľúbených"
#: ../js/ui/appDisplay.js:990
#: ../js/ui/appDisplay.js:1494
msgid "Add to Favorites"
msgstr "Pridať do obľúbených"
@@ -425,7 +404,7 @@ msgstr "Program %s bol pridaný medzi obľúbené."
msgid "%s has been removed from your favorites."
msgstr "Program %s bol odstránený z obľúbených."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Nastavenia"
@@ -549,36 +528,44 @@ msgctxt "list saturday"
msgid "S"
msgstr "So"
#: ../js/ui/calendar.js:447
msgid "Previous month"
msgstr "Predchádzajúci mesiac"
#: ../js/ui/calendar.js:457
msgid "Next month"
msgstr "Nasledujúci mesiac"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:753
msgid "Nothing Scheduled"
msgstr "Žiadne naplánované udalosti"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %e. %B"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %e. %B %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:785
msgid "Today"
msgstr "Dnes"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Zajtra"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:800
msgid "This week"
msgstr "Tento týždeň"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:808
msgid "Next week"
msgstr "Ďalší týždeň"
@@ -613,7 +600,7 @@ msgid "Type again:"
msgstr "Zadajte znovu:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Pripojiť"
@@ -960,7 +947,7 @@ msgstr "Zobrazí aplikácie"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:442
msgid "Dash"
msgstr "Dok"
@@ -983,24 +970,18 @@ msgstr "Nastavenia dátumu a času"
msgid "%A %B %e, %Y"
msgstr "%A, %e. %B %Y"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:62
#, c-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Odhlásenie používateľa %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:63
msgctxt "title"
msgid "Log Out"
msgstr "Odhlásenie"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr ""
"Po kliknutí na „Odhlásiť sa“ sa ukončia tieto aplikácie a budete odhlásení "
"zo systému."
#: ../js/ui/endSessionDialog.js:67
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
@@ -1008,7 +989,7 @@ msgstr[0] "Používateľ %s bude automaticky odhlásený o %d sekúnd."
msgstr[1] "Používateľ %s bude automaticky odhlásený o %d sekundu."
msgstr[2] "Používateľ %s bude automaticky odhlásený o %d sekundy."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:70
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
@@ -1016,25 +997,17 @@ msgstr[0] "Budete automaticky odhlásený o %d sekúnd."
msgstr[1] "Budete automaticky odhlásený o %d sekundu."
msgstr[2] "Budete automaticky odhlásený o %d sekundy."
#: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system."
msgstr "Prebieha odhlásenie zo systému."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:75
msgctxt "button"
msgid "Log Out"
msgstr "Odhlásiť sa"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:81
msgctxt "title"
msgid "Power Off"
msgstr "Vypnutie"
#: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system."
msgstr "Po kliknutí na „Vypnúť“ sa ukončia tieto aplikácie a systém sa vypne."
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
@@ -1042,32 +1015,22 @@ msgstr[0] "Systém sa automaticky vypne o %d sekúnd."
msgstr[1] "Systém sa automaticky vypne o %d sekundu."
msgstr[2] "Systém sa automaticky vypne o %d sekundy."
#: ../js/ui/endSessionDialog.js:90
msgid "Powering off the system."
msgstr "Vypína sa systém."
#: ../js/ui/endSessionDialog.js:92 ../js/ui/endSessionDialog.js:109
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Reštartovať"
#: ../js/ui/endSessionDialog.js:94
#: ../js/ui/endSessionDialog.js:90
msgctxt "button"
msgid "Power Off"
msgstr "Vypnúť"
#: ../js/ui/endSessionDialog.js:100
#: ../js/ui/endSessionDialog.js:97
msgctxt "title"
msgid "Restart"
msgstr "Reštart"
#: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Po kliknutí na „Reštartovať“ sa ukončia tieto aplikácie a systém sa "
"reštartuje."
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:99
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
@@ -1075,9 +1038,47 @@ msgstr[0] "Systém sa automaticky reštartuje o %d sekúnd."
msgstr[1] "Systém sa automaticky reštartuje o %d sekundu."
msgstr[2] "Systém sa automaticky reštartuje o %d sekundy."
#: ../js/ui/endSessionDialog.js:107
msgid "Restarting the system."
msgstr "Reštartuje sa systém."
#: ../js/ui/endSessionDialog.js:112
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Reštart a inštalácia aktualizácií"
#: ../js/ui/endSessionDialog.js:114
#, c-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"Systém sa automaticky reštartuje a nainštaluje aktualizácie o %d sekúnd."
msgstr[1] ""
"Systém sa automaticky reštartuje a nainštaluje aktualizácie o %d sekundu."
msgstr[2] ""
"Systém sa automaticky reštartuje a nainštaluje aktualizácie o %d sekundy."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
msgid "Restart & Install"
msgstr "Reštartovať a inštalovať"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr "Niektoré aplikácie sú zaneprázdnené, alebo obsahujú neuloženú prácu."
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
msgstr "Sú prihlásení iní používatelia."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:479
#, c-format
msgid "%s (remote)"
msgstr "%s (vzdialená relácia)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:482
#, c-format
msgid "%s (console)"
msgstr "%s (konzola)"
#: ../js/ui/extensionDownloader.js:199
msgid "Install"
@@ -1157,9 +1158,10 @@ msgstr "Vymazať správy"
msgid "Notification Settings"
msgstr "Nastavenia oznámení"
# MČ" zd sa mi to čudné. tuším som videl preklady „oznamovacia oblasť“, čo mi viac sedí. Toto je trošku akoby zavádzajúce, ale možno to s okolím ozrejmuje výsledok. Možno by som tam ponechal len „ponuka“ ak akolie jednoznačne naznačuje, že ide o „lištu správ“
#: ../js/ui/messageTray.js:1559
msgid "Tray Menu"
msgstr ""
msgstr "Ponuka v lište"
#: ../js/ui/messageTray.js:1775
msgid "No Messages"
@@ -1180,7 +1182,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Neznámy"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1216,11 +1218,10 @@ msgid "Activities"
msgstr "Aktivity"
#: ../js/ui/panel.js:805
#| msgid "Settings"
msgid "Settings Menu"
msgstr "Ponuka nastavení"
#: ../js/ui/panel.js:892
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Horná lišta"
@@ -1246,11 +1247,11 @@ msgstr "Zavrieť"
# v ostatnych retazcoch je pouzite %e, tak to bude asi OK
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:90
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %e. %B"
#: ../js/ui/screenShield.js:156
#: ../js/ui/screenShield.js:154
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@@ -1258,11 +1259,11 @@ msgstr[0] "%d nových oznámení"
msgstr[1] "%d nové oznámenie"
msgstr[2] "%d nové oznámenia"
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Uzamknúť"
#: ../js/ui/screenShield.js:712
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "Prostredie GNOME vyžaduje uzamknutie obrazovky"
@@ -1273,19 +1274,19 @@ msgstr "Prostredie GNOME vyžaduje uzamknutie obrazovky"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:837 ../js/ui/screenShield.js:1316
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Nepodarilo sa uzamknúť obrazovku"
#: ../js/ui/screenShield.js:838 ../js/ui/screenShield.js:1317
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Uzamknutie bolo zablokované aplikáciou"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:447
msgid "Searching…"
msgstr "Hľadá sa…"
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:491
msgid "No results."
msgstr "Žiadne výsledky."
@@ -1369,7 +1370,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Vypnúť"
@@ -1457,6 +1458,10 @@ msgstr "Zadajte PIN, ktoré je uvedené na zariadení."
msgid "OK"
msgstr "Ok"
#: ../js/ui/status/brightness.js:42
msgid "Brightness"
msgstr "Jas"
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Zobraziť rozloženie klávesnice"
@@ -1466,87 +1471,85 @@ msgstr "Zobraziť rozloženie klávesnice"
msgid "<unknown>"
msgstr "<neznáme>"
# PM: je v oboch prípadoch správny rod? mne sa zdá že raz sa to vzťahuje k sieti a druhý raz k zariadeniu
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
#, fuzzy
# DK: pripojenie, zariadenie
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Vypnuté"
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Nastavenia siete"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:357
#: ../js/ui/status/network.js:364
msgid "unmanaged"
msgstr "nespravované"
#: ../js/ui/status/network.js:359
#: ../js/ui/status/network.js:366
msgid "disconnecting..."
msgstr "odpája sa…"
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "pripája sa…"
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "požaduje sa overenie totožnosti"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:376
#: ../js/ui/status/network.js:383
msgid "firmware missing"
msgstr "chýba firmvér"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:380
#: ../js/ui/status/network.js:387
msgid "unavailable"
msgstr "nedostupné"
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "pripojenie zlyhalo"
#: ../js/ui/status/network.js:647
#: ../js/ui/status/network.js:654
msgid "Wi-Fi Networks"
msgstr "Siete Wi-Fi"
#: ../js/ui/status/network.js:649
#: ../js/ui/status/network.js:656
msgid "Select a network"
msgstr "Vyberte sieť"
#: ../js/ui/status/network.js:673
#| msgid "Wi-Fi Networks"
#: ../js/ui/status/network.js:680
msgid "No Networks"
msgstr "Žiadne siete"
# item menu
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Vybrať sieť"
#: ../js/ui/status/network.js:1027
#: ../js/ui/status/network.js:1034
msgid "Turn On"
msgstr "Zapnúť"
#: ../js/ui/status/network.js:1160
#: ../js/ui/status/network.js:1167
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1296
#: ../js/ui/status/network.js:1306
msgid "Network Manager"
msgstr "Správca siete"
#: ../js/ui/status/network.js:1338
#: ../js/ui/status/network.js:1345
msgid "Connection failed"
msgstr "Pripojenie zlyhalo"
#: ../js/ui/status/network.js:1339
#: ../js/ui/status/network.js:1346
msgid "Activation of network connection failed"
msgstr "Aktivácia pripojenia k sieti zlyhala"
@@ -1572,14 +1575,12 @@ msgstr "Odhaduje sa…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:77
#, c-format
#| msgid "%d\\u2236%d Remaining (%d%%)"
msgid "%d\\u2236%02d Remaining (%d%%)"
msgstr "%d\\u2236%02d Zostáva (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:82
#, c-format
#| msgid "%d\\u2236%d Until Full (%d%%)"
msgid "%d\\u2236%02d Until Full (%d%%)"
msgstr "%d\\u2236%02d Do plného nabitia (%d%%)"
@@ -1592,56 +1593,47 @@ msgstr "Režim v lietadle"
# režim v lietadle
#: ../js/ui/status/rfkill.js:45
#| msgid "Open"
msgid "On"
msgstr "Zapnutý"
#: ../js/ui/status/system.js:247
#: ../js/ui/status/system.js:305
msgid "Switch User"
msgstr "Prepnúť používateľa"
#: ../js/ui/status/system.js:252
#: ../js/ui/status/system.js:310
msgid "Log Out"
msgstr "Odhlásiť sa"
# action button
#: ../js/ui/status/system.js:271
#: ../js/ui/status/system.js:329
msgid "Orientation Lock"
msgstr "Uzamknutie orientácie"
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
#: ../js/ui/status/system.js:337
msgid "Suspend"
msgstr "Uspať"
#: ../js/ui/status/system.js:340
msgid "Power Off"
msgstr "Vypnúť"
#: ../js/ui/status/system.js:323
msgid "Other users are logged in."
msgstr "Sú prihlásení iní používatelia."
#: ../js/ui/status/system.js:328
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Vypnutie môže spôsobiť stratu neuloženej práce."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/status/system.js:356
#, c-format
msgid "%s (remote)"
msgstr "%s (vzdialená relácia)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/status/system.js:359
#, c-format
msgid "%s (console)"
msgstr "%s (konzola)"
#: ../js/ui/status/volume.js:124
#: ../js/ui/status/volume.js:127
msgid "Volume changed"
msgstr "Hlasitosť bola zmenená"
#: ../js/ui/unlockDialog.js:64
#: ../js/ui/status/volume.js:162
msgid "Volume"
msgstr "Hlasitosť"
#: ../js/ui/status/volume.js:213
msgid "Microphone"
msgstr "Mikrofón"
#: ../js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Prihlásiť ako iný používateľ"
#: ../js/ui/unlockDialog.js:81
#: ../js/ui/unlockDialog.js:84
msgid "Unlock Window"
msgstr "Odomykacie okno"
@@ -1682,7 +1674,6 @@ msgstr "Chcete ponechať tieto nastavenia displeja?"
#. to avoid ellipsizing the labels.
#.
#: ../js/ui/windowManager.js:75
#| msgid "Power Settings"
msgid "Revert Settings"
msgstr "Vrátiť nastavenia"
@@ -1760,6 +1751,51 @@ msgstr "Heslo nemôže byť prázdne"
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialógové okno overenia totožnosti bolo zatvorené používateľom"
#~ msgid "Session"
#~ msgstr "Relácia"
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. "
#~ "The value here is from the TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "Vnútorne použité na uloženie posledného stavu prítomnosti internetového "
#~ "komunikátora výlučne nastavenej používateľom. Táto hodnota je z "
#~ "vymenovaných hodnôt typu TpConnectionPresenceType."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. "
#~ "The value here is from the GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "Vnútorne použité na uloženie posledného stavu prítomnosti relácie "
#~ "používateľa. Táto hodnota je z vymenovaných hodnôt typu "
#~ "GsmPresenceStatusType."
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr ""
#~ "Po kliknutí na „Odhlásiť sa“ sa ukončia tieto aplikácie a budete "
#~ "odhlásení zo systému."
#~ msgid "Logging out of the system."
#~ msgstr "Prebieha odhlásenie zo systému."
#~ msgid "Click Power Off to quit these applications and power off the system."
#~ msgstr ""
#~ "Po kliknutí na „Vypnúť“ sa ukončia tieto aplikácie a systém sa vypne."
#~ msgid "Powering off the system."
#~ msgstr "Vypína sa systém."
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "Po kliknutí na „Reštartovať“ sa ukončia tieto aplikácie a systém sa "
#~ "reštartuje."
#~ msgid "Restarting the system."
#~ msgstr "Reštartuje sa systém."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr "Vypnutie môže spôsobiť stratu neuloženej práce."
#~ msgid "Screenshots"
#~ msgstr "Snímky obrazovky"
@@ -1788,81 +1824,3 @@ msgstr "Dialógové okno overenia totožnosti bolo zatvorené používateľom"
#~ msgstr ""
#~ "Zreťazenie systému gstreamer, určená na kódovanie záznamu diania na "
#~ "obrazovke"
# PK: rura, skor zretazenie, alebo take nec; viackrat
# Peter: vo všetkých prekladoch je myslím rúra - oprav ma ak sa mýlim
# PK: to neviem, len ak obezny user by som to nepochopil (mam sice IQ 103 :-D); nechavam na PŠ
# PŠ: zreťazenie je pekný preklad, zišlo by sa to použiť (zmeniť?) aj v iných moduloch
#~ msgid ""
#~ "Sets the GStreamer pipeline used to encode recordings. It follows the "
#~ "syntax used for gst-launch. The pipeline should have an unconnected sink "
#~ "pad where the recorded video is recorded. It will normally have a "
#~ "unconnected source pad; output from that pad will be written into the "
#~ "output file. However the pipeline can also take care of its own output - "
#~ "this might be used to send the output to an icecast server via shout2send "
#~ "or similar. When unset or set to an empty value, the default pipeline "
#~ "will be used. This is currently 'vp8enc min_quantizer=13 max_quantizer=13 "
#~ "cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux' and records to "
#~ "WEBM using the VP8 codec. %T is used as a placeholder for a guess at the "
#~ "optimal thread count on the system."
#~ msgstr ""
#~ "Nastavuje zreťazenie systému GStreamer určené pre kódované nahrávok. "
#~ "Používa rovnakú syntax ako gst-launch. Zreťazenie by malo mať ďalej "
#~ "nepripojený cieľ, v ktorom sa video nahráva. Obvykle má nepripojený "
#~ "zdroj; výstup z takého zdroja sa bude zapisovať do výstupného súboru. "
#~ "Zreťazenie je ale schopné zabezpečiť i vlastný výstup, čo sa dá využiť na "
#~ "odosielanie výstupu na server icecast cez shout2send a pod. Ak toto nie "
#~ "je nastavené, alebo je to nastavené na prázdnu hodnotu, použije sa "
#~ "predvolené zreťazenie. Teraz je to „vp8enc min_quantizer=13 "
#~ "max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! "
#~ "webmmux“, čo nahráva do WEBM použitím kodeku VP8. %T sa použije ako "
#~ "zástupný symbol odhadu najvhodnejšieho počtu vlákien v systéme."
#~ msgid "File extension used for storing the screencast"
#~ msgstr "Prípona súboru použitá na ukladanie záznamu diania na obrazovke"
#~ msgid ""
#~ "The filename for recorded screencasts will be a unique filename based on "
#~ "the current date, and use this extension. It should be changed when "
#~ "recording to a different container format."
#~ msgstr ""
#~ "Súbor pre nahrané záznamy diania na obrazovke bude mať jedinečný názov na "
#~ "základe aktuálneho dátumu a použije túto príponu. Pri nahrávaní do iného "
#~ "formátu kontajneru by mala byť zmenená."
#~ msgid "Power"
#~ msgstr "Napájanie"
#~ msgid "Suspend"
#~ msgstr "Uspať"
#~ msgid "Restart"
#~ msgstr "Reštartovať"
# %d je datum, %t je cas
#~ msgid "Screencast from %d %t"
#~ msgstr "Záznam videa obrazovky dňa %d o %t"
#~ msgid "Volume, network, battery"
#~ msgstr "Hlasitosť, sieť, batéria"
#~ msgid "Volume"
#~ msgstr "Hlasitosť"
#~ msgid "Universal Access Settings"
#~ msgstr "Nastavenia bezbariérového prístupu"
#~ msgid "Visibility"
#~ msgstr "Viditeľnosť"
#~ msgid "Send Files to Device…"
#~ msgstr "Odoslať súbory do zariadenia…"
#~ msgid "Set Up a New Device…"
#~ msgstr "Nastaviť nové zariadenie…"
#~ msgid "hardware disabled"
#~ msgstr "hardvér zakázaný"
#~ msgid "Connection"
#~ msgstr "Pripojenie"

465
po/sl.po
View File

@@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-08-19 19:13+0000\n"
"PO-Revision-Date: 2013-08-19 21:49+0100\n"
"POT-Creation-Date: 2013-09-02 19:28+0000\n"
"PO-Revision-Date: 2013-09-02 22:41+0100\n"
"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
"Language: Slovenian\n"
@@ -125,26 +125,10 @@ msgid "History for the looking glass dialog"
msgstr "Zgodovina za pogovorno okno povečevalnega stekla"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
msgstr ""
"Uporabljeno za shranjevanje stanja prisotnosti na hipnem sporočanju na "
"zahtevo uporabnika. Vrednost določa števec predmeta TpConnectionPresenceType."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"Uporabljeno za shranjevanje stanja prisotnosti zadnje seje uporabnika. "
"Vrednost določa števec predmeta GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Vedno pokaži možnost 'Odjava' v meniju uporabnika."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@@ -152,14 +136,14 @@ msgstr ""
"Ključ prepiše možnost samodejnega skrivanja predmeta menija 'Odjava' na "
"enouporabniški in enosejni namestitvi."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Ali naj se geslo za priklapljanje šifriranih in oddaljenih datotečnih "
"sistemov shrani"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@@ -170,70 +154,70 @@ msgstr ""
"izbiri možnosti zahtevano geslo. Na pogovornem oknu bo prikazana možnost "
"'Shrani geslo'. S tem bo nastavljeno privzeto stanje za uporabo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Pokaži tedenski datum v koledarju"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Izbrana možnost določa prikaz ISO tedenski datum v koledarju."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Tipkovna bližnjica, ki odpre meni programov"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Tipkovna bližnjica, ki odpre meni programov."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Tipkovna bližnjica, ki odpre pogled \"Pokaži programe\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Tipkovna bližnjica, ki odpre pogled \"Pokaži programe\" v pregledu "
"dejavnosti."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Tipkovna bližnjica, ki odpre pogled pregleda"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Tipkovna bližnjica, ki odpre pogled pregleda dejavnosti."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Tipkovna bližnjica za preklop vidnosti sistemske sporočilne vrstice"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Tipkovna bližnjica za preklop vidnosti sistemske sporočilne vrstice."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Tipkovna bližnjica za prikaz dejavnega obvestila"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Tipkovna bližnjica za prikaz dejavnega obvestila."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Katera tipkovnica naj bo uporabljena?"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Vrsta tipkovnice za uporabo."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "Ikonski način programa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@@ -243,21 +227,21 @@ msgstr ""
"sličice' (pokaže le sličice oken), 'le ikona' (pokaže ikono programa) in pa "
"možnost 'oboje'."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Pripni modalno pogovorno okno na glavno okno"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Ključ prepiše vrednost v org.gnome.mutter med zaganjanjem lupine GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Razporeditev gumbov v nazivni vrstici"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@@ -265,15 +249,15 @@ msgstr ""
"Ključ prepiše vrednost v org.gnome.desktop.wm.preferences med zaganjanjem "
"lupine GNOME."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr "Omogoči utripanje črte med spuščanjem okna na robove zaslona"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Delovne površine se obravnavajo dinamično"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Delovne površine so le na osnovnem zaslonu"
@@ -291,46 +275,41 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Razširitev za nastavljanje je mogoče izbrati iz spustnega seznama zgoraj."
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
#: ../js/ui/status/system.js:373
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Prekliči"
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Naslednji"
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:56
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Odkleni"
#: ../js/gdm/authPrompt.js:214
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Prijava"
#: ../js/gdm/loginDialog.js:299
#: ../js/gdm/loginDialog.js:294
msgid "Choose Session"
msgstr "Izbor seje"
#: ../js/gdm/loginDialog.js:317
msgid "Session"
msgstr "Seja"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:468
#: ../js/gdm/loginDialog.js:454
msgid "Not listed?"
msgstr "Ali je ni na seznamu?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:641
#: ../js/gdm/loginDialog.js:622
#, c-format
msgid "(e.g., user or %s)"
msgstr "(na primer, uporabnika ali %s)"
@@ -338,12 +317,12 @@ msgstr "(na primer, uporabnika ali %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:646 ../js/ui/components/networkAgent.js:260
#: ../js/ui/components/networkAgent.js:278
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Uporabniško ime: "
#: ../js/gdm/loginDialog.js:909
#: ../js/gdm/loginDialog.js:891
msgid "Login Window"
msgstr "Prijavno okno"
@@ -356,7 +335,7 @@ msgstr "Napaka overitve"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:419
#: ../js/gdm/util.js:436
msgid "(or swipe finger)"
msgstr "(ali pa povlecite prst)"
@@ -375,23 +354,27 @@ msgstr "Ukaza ni mogoče razčleniti:"
msgid "Execution of '%s' failed:"
msgstr "Izvedba '%s' je spodletela:"
#: ../js/ui/appDisplay.js:386
#: ../js/ui/appDisplay.js:578
msgid "Frequently used applications will appear here"
msgstr "Pogosto uporabljeni programi bodo prikazani tu"
#: ../js/ui/appDisplay.js:694
msgid "Frequent"
msgstr "Pogosto"
#: ../js/ui/appDisplay.js:393
#: ../js/ui/appDisplay.js:701
msgid "All"
msgstr "Vse"
#: ../js/ui/appDisplay.js:986
#: ../js/ui/appDisplay.js:1488
msgid "New Window"
msgstr "Novo okno"
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1491 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Odstrani iz priljubljenih"
#: ../js/ui/appDisplay.js:990
#: ../js/ui/appDisplay.js:1492
msgid "Add to Favorites"
msgstr "Dodaj med priljubljene"
@@ -405,7 +388,7 @@ msgstr "Program \"%s\" je dodan med priljubljeno."
msgid "%s has been removed from your favorites."
msgstr "Program \"%s\" je odstranjen iz priljubljenih."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Nastavitve"
@@ -529,36 +512,44 @@ msgctxt "list saturday"
msgid "S"
msgstr "S"
#: ../js/ui/calendar.js:447
msgid "Previous month"
msgstr "Predhodni mesec"
#: ../js/ui/calendar.js:457
msgid "Next month"
msgstr "Naslednji mesec"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:753
msgid "Nothing Scheduled"
msgstr "Nič ni razporejeno"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %d. %m."
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %d %B %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:785
msgid "Today"
msgstr "Danes"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Jutri"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:800
msgid "This week"
msgstr "Ta teden"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:808
msgid "Next week"
msgstr "Naslednji teden"
@@ -591,42 +582,42 @@ msgstr "Geslo:"
msgid "Type again:"
msgstr "Vpišite znova:"
#: ../js/ui/components/networkAgent.js:132 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Poveži"
#. Cisco LEAP
#: ../js/ui/components/networkAgent.js:223
#: ../js/ui/components/networkAgent.js:235
#: ../js/ui/components/networkAgent.js:262
#: ../js/ui/components/networkAgent.js:282
#: ../js/ui/components/networkAgent.js:292
#: ../js/ui/components/networkAgent.js:218
#: ../js/ui/components/networkAgent.js:230
#: ../js/ui/components/networkAgent.js:257
#: ../js/ui/components/networkAgent.js:277
#: ../js/ui/components/networkAgent.js:287
msgid "Password: "
msgstr "Geslo:"
#. static WEP
#: ../js/ui/components/networkAgent.js:228
#: ../js/ui/components/networkAgent.js:223
msgid "Key: "
msgstr "Ključ:"
#: ../js/ui/components/networkAgent.js:266
#: ../js/ui/components/networkAgent.js:261
msgid "Identity: "
msgstr "_Istovetnost:"
#: ../js/ui/components/networkAgent.js:268
#: ../js/ui/components/networkAgent.js:263
msgid "Private key password: "
msgstr "Geslo zasebnega ključa:"
#: ../js/ui/components/networkAgent.js:280
#: ../js/ui/components/networkAgent.js:275
msgid "Service: "
msgstr "Storitev:"
#: ../js/ui/components/networkAgent.js:309
#: ../js/ui/components/networkAgent.js:304
msgid "Authentication required by wireless network"
msgstr "Zahtevana overitev za brezžično omrežje"
#: ../js/ui/components/networkAgent.js:310
#: ../js/ui/components/networkAgent.js:305
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
@@ -635,35 +626,35 @@ msgstr ""
"Za povezavo v brezžično omrežje '%s' je zahtevana overitev ali nastavitev "
"šifrirnega ključa."
#: ../js/ui/components/networkAgent.js:314
#: ../js/ui/components/networkAgent.js:309
msgid "Wired 802.1X authentication"
msgstr "Žična overitev 802.1X"
#: ../js/ui/components/networkAgent.js:316
#: ../js/ui/components/networkAgent.js:311
msgid "Network name: "
msgstr "Ime omrežja:"
#: ../js/ui/components/networkAgent.js:321
#: ../js/ui/components/networkAgent.js:316
msgid "DSL authentication"
msgstr "DSL overitev"
#: ../js/ui/components/networkAgent.js:328
#: ../js/ui/components/networkAgent.js:323
msgid "PIN code required"
msgstr "Zahtevana koda PIN"
#: ../js/ui/components/networkAgent.js:329
#: ../js/ui/components/networkAgent.js:324
msgid "PIN code is needed for the mobile broadband device"
msgstr "Za napravo mobilnega širokopasovnega dostopa je zahtevana koda PIN."
#: ../js/ui/components/networkAgent.js:330
#: ../js/ui/components/networkAgent.js:325
msgid "PIN: "
msgstr "PIN: "
#: ../js/ui/components/networkAgent.js:336
#: ../js/ui/components/networkAgent.js:331
msgid "Mobile broadband network password"
msgstr "Geslo mobilnega širokopasovnega dostopa"
#: ../js/ui/components/networkAgent.js:337
#: ../js/ui/components/networkAgent.js:332
#, c-format
msgid "A password is required to connect to '%s'."
msgstr "Za povezavo z omrežjem '%s' je zahtevano geslo."
@@ -936,7 +927,7 @@ msgstr "Pokaži programe"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:442
msgid "Dash"
msgstr "Pregledna plošča"
@@ -959,22 +950,18 @@ msgstr "Nastavitve časa in datuma"
msgid "%A %B %e, %Y"
msgstr "%a, %e. %b., %R"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:62
#, c-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Odjava %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:63
msgctxt "title"
msgid "Log Out"
msgstr "Odjava"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr "Kliknite Odjava za končanje teh programov in odjavo iz sistema."
#: ../js/ui/endSessionDialog.js:67
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
@@ -983,7 +970,7 @@ msgstr[1] "Uporabnik %s bo samodejno odjavljen čez %d sekundo."
msgstr[2] "Uporabnik %s bo samodejno odjavljen čez %d sekundi."
msgstr[3] "Uporabnik %s bo samodejno odjavljen čez %d sekunde."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:70
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
@@ -992,26 +979,17 @@ msgstr[1] "Uporabnik bo samodejno odjavljen čez %d sekundo."
msgstr[2] "Uporabnik bo samodejno odjavljen čez %d sekundi."
msgstr[3] "Uporabnik bo samodejno odjavljen čez %d sekunde."
#: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system."
msgstr "Odjavljanje iz sistema."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:75
msgctxt "button"
msgid "Log Out"
msgstr "Odjava"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:81
msgctxt "title"
msgid "Power Off"
msgstr "Izklop"
#: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
"Kliknite na gumb za izklop za končanje teh programov in izklop iz sistema."
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
@@ -1020,31 +998,22 @@ msgstr[1] "Sistem se bo samodejno izklopil čez %d sekundo."
msgstr[2] "Sistem se bo samodejno izklopil čez %d sekundi."
msgstr[3] "Sistem se bo samodejno izklopil čez %d sekunde."
#: ../js/ui/endSessionDialog.js:90
msgid "Powering off the system."
msgstr "Izklapljanje sistema"
#: ../js/ui/endSessionDialog.js:92 ../js/ui/endSessionDialog.js:109
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Ponoven zagon"
#: ../js/ui/endSessionDialog.js:94
#: ../js/ui/endSessionDialog.js:90
msgctxt "button"
msgid "Power Off"
msgstr "Izklop"
#: ../js/ui/endSessionDialog.js:100
#: ../js/ui/endSessionDialog.js:97
msgctxt "title"
msgid "Restart"
msgstr "Ponoven zagon"
#: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Kliknite Zaženi znova za končanje teh programov in ponoven zagon sistema. "
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:99
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
@@ -1053,9 +1022,50 @@ msgstr[1] "Sistem se bo samodejno ponovno zagnal čez %d sekundo."
msgstr[2] "Sistem se bo samodejno ponovno zagnal čez %d sekundi."
msgstr[3] "Sistem se bo samodejno ponovno zagnal čez %d sekunde."
#: ../js/ui/endSessionDialog.js:107
msgid "Restarting the system."
msgstr "Ponoven zagon sistema."
#: ../js/ui/endSessionDialog.js:112
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Namesti posodobitve in ponovno zaženi"
#: ../js/ui/endSessionDialog.js:114
#, c-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"Sistem bo samodejno namestil pakete in se nato ponovno zagnal čez %d sekund."
msgstr[1] ""
"Sistem bo samodejno namestil pakete in se nato ponovno zagnal %d sekundo."
msgstr[2] ""
"Sistem bo samodejno namestil pakete in se nato ponovno zagnal %d sekundi."
msgstr[3] ""
"Sistem bo samodejno namestil pakete in se nato ponovno zagnal %d sekunde."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
msgid "Restart & Install"
msgstr "Namesti in ponovno zaženi"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr ""
"Nekateri programi se ne odzivajo ali pa so odprte neshranjene datoteke."
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
msgstr "Prijavljeni so tudi drugi uporabniki."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:479
#, c-format
msgid "%s (remote)"
msgstr "%s (oddaljeno)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:482
#, c-format
msgid "%s (console)"
msgstr "%s (konzola)"
#: ../js/ui/extensionDownloader.js:199
msgid "Install"
@@ -1139,15 +1149,15 @@ msgstr "Nastavitve obvestil"
msgid "Tray Menu"
msgstr "Meni sistemske vrstice"
#: ../js/ui/messageTray.js:1777
#: ../js/ui/messageTray.js:1775
msgid "No Messages"
msgstr "Ni sporočil"
#: ../js/ui/messageTray.js:1814
#: ../js/ui/messageTray.js:1812
msgid "Message Tray"
msgstr "Sporočilna vrstica"
#: ../js/ui/messageTray.js:2788
#: ../js/ui/messageTray.js:2786
msgid "System Information"
msgstr "Podrobnosti sistema"
@@ -1156,7 +1166,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Neznano"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1218,11 +1228,11 @@ msgstr "Zapri"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:90
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %d. %m."
#: ../js/ui/screenShield.js:156
#: ../js/ui/screenShield.js:154
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@@ -1231,11 +1241,11 @@ msgstr[1] "%d novo obvestilo"
msgstr[2] "%d novi obvestili"
msgstr[3] "%d nova obvestila"
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Zakleni"
#: ../js/ui/screenShield.js:705
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "Zakleniti je treba zaslon"
@@ -1246,19 +1256,19 @@ msgstr "Zakleniti je treba zaslon"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1278
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Zaklep ni mogoč"
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1279
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Zaklep je preprečil program"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:447
msgid "Searching…"
msgstr "Iskanje ..."
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:491
msgid "No results."
msgstr "Ni najdenih zadetkov."
@@ -1339,7 +1349,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Onemogoči"
@@ -1426,6 +1436,10 @@ msgstr "Vnesite PIN, ki je naveden na napravi."
msgid "OK"
msgstr "V redu"
#: ../js/ui/status/brightness.js:42
msgid "Brightness"
msgstr "Svetlost"
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Pokaži razporeditev tipkovnice"
@@ -1434,83 +1448,83 @@ msgstr "Pokaži razporeditev tipkovnice"
msgid "<unknown>"
msgstr "<neznano>"
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Nepovezano"
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Omrežne nastavitve"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:357
#: ../js/ui/status/network.js:364
msgid "unmanaged"
msgstr "neupravljano"
#: ../js/ui/status/network.js:359
#: ../js/ui/status/network.js:366
msgid "disconnecting..."
msgstr "prekinjanje povezave ..."
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "povezovanje ..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "zahtevana je overitev"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:376
#: ../js/ui/status/network.js:383
msgid "firmware missing"
msgstr "manjka strojna programska oprema"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:380
#: ../js/ui/status/network.js:387
msgid "unavailable"
msgstr "ni na voljo"
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "povezovanje je spodletelo"
#: ../js/ui/status/network.js:647
#: ../js/ui/status/network.js:654
msgid "Wi-Fi Networks"
msgstr "Omrežja Wi-Fi"
#: ../js/ui/status/network.js:649
#: ../js/ui/status/network.js:656
msgid "Select a network"
msgstr "Izbor omrežja"
#: ../js/ui/status/network.js:673
#: ../js/ui/status/network.js:680
msgid "No Networks"
msgstr "Ni omrežij"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Izbor omrežja"
#: ../js/ui/status/network.js:1027
#: ../js/ui/status/network.js:1034
msgid "Turn On"
msgstr "Omogoči"
#: ../js/ui/status/network.js:1160
#: ../js/ui/status/network.js:1167
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1296
#: ../js/ui/status/network.js:1306
msgid "Network Manager"
msgstr "Upravljalnik omrežij"
#: ../js/ui/status/network.js:1338
#: ../js/ui/status/network.js:1345
msgid "Connection failed"
msgstr "Povezava je spodletela"
#: ../js/ui/status/network.js:1339
#: ../js/ui/status/network.js:1346
msgid "Activation of network connection failed"
msgstr "Omogočanje omrežne povezave je spodletelo."
@@ -1556,51 +1570,43 @@ msgstr "Način letala"
msgid "On"
msgstr "Povezano"
#: ../js/ui/status/system.js:247
#: ../js/ui/status/system.js:305
msgid "Switch User"
msgstr "Preklopi uporabnika"
#: ../js/ui/status/system.js:252
#: ../js/ui/status/system.js:310
msgid "Log Out"
msgstr "Odjava"
#: ../js/ui/status/system.js:271
#: ../js/ui/status/system.js:329
msgid "Orientation Lock"
msgstr "Zaklep položaja"
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
#: ../js/ui/status/system.js:337
msgid "Suspend"
msgstr "Zaustavi"
#: ../js/ui/status/system.js:340
msgid "Power Off"
msgstr "Izklop"
#: ../js/ui/status/system.js:323
msgid "Other users are logged in."
msgstr "Prijavljeni so tudi drugi uporabniki."
#: ../js/ui/status/system.js:328
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Z izklopom je njihovo delo lahko izgubljeno."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/status/system.js:356
#, c-format
msgid "%s (remote)"
msgstr "%s (oddaljeno)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/status/system.js:359
#, c-format
msgid "%s (console)"
msgstr "%s (konzola)"
#: ../js/ui/status/volume.js:124
#: ../js/ui/status/volume.js:127
msgid "Volume changed"
msgstr "Glasnost je spremenjena"
#: ../js/ui/unlockDialog.js:64
#: ../js/ui/status/volume.js:162
msgid "Volume"
msgstr "Glasnost"
#: ../js/ui/status/volume.js:213
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Prijava kot drug uporabnik"
#: ../js/ui/unlockDialog.js:81
#: ../js/ui/unlockDialog.js:84
msgid "Unlock Window"
msgstr "Odkleni okno"
@@ -1631,6 +1637,30 @@ msgstr "Riba %s pravi"
msgid "'%s' is ready"
msgstr "'%s' storitev je pripravljena"
#: ../js/ui/windowManager.js:56
msgid "Do you want to keep these display settings?"
msgstr "Ali želite ohraniti te nastavitve zaslona?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#.
#: ../js/ui/windowManager.js:75
msgid "Revert Settings"
msgstr "Povrni nastavitve"
#: ../js/ui/windowManager.js:79
msgid "Keep Changes"
msgstr "Sledi spremembam"
#: ../js/ui/windowManager.js:97
#, c-format
msgid "Settings changes will revert in %d second"
msgid_plural "Settings changes will revert in %d seconds"
msgstr[0] "Spremembe nastavitev bodo povrnjene v %d sekundah."
msgstr[1] "Spremembe nastavitev bodo povrnjene v %d sekundi."
msgstr[2] "Spremembe nastavitev bodo povrnjene v %d sekundah."
msgstr[3] "Spremembe nastavitev bodo povrnjene v %d sekundah."
#: ../src/calendar-server/evolution-calendar.desktop.in.in.h:1
msgid "Evolution Calendar"
msgstr "Koledar Evolution "
@@ -1694,6 +1724,47 @@ msgstr "Geslo ne more biti prazno"
msgid "Authentication dialog was dismissed by the user"
msgstr "Uporabnik je zavrnil pogovorno okno overitve"
#~ msgid "Session"
#~ msgstr "Seja"
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. "
#~ "The value here is from the TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "Uporabljeno za shranjevanje stanja prisotnosti na hipnem sporočanju na "
#~ "zahtevo uporabnika. Vrednost določa števec predmeta "
#~ "TpConnectionPresenceType."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. "
#~ "The value here is from the GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "Uporabljeno za shranjevanje stanja prisotnosti zadnje seje uporabnika. "
#~ "Vrednost določa števec predmeta GsmPresenceStatus."
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr "Kliknite Odjava za končanje teh programov in odjavo iz sistema."
#~ msgid "Logging out of the system."
#~ msgstr "Odjavljanje iz sistema."
#~ msgid "Click Power Off to quit these applications and power off the system."
#~ msgstr ""
#~ "Kliknite na gumb za izklop za končanje teh programov in izklop iz sistema."
#~ msgid "Powering off the system."
#~ msgstr "Izklapljanje sistema"
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "Kliknite Zaženi znova za končanje teh programov in ponoven zagon sistema. "
#~ msgid "Restarting the system."
#~ msgstr "Ponoven zagon sistema."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr "Z izklopom je njihovo delo lahko izgubljeno."
#~ msgid "Screenshots"
#~ msgstr "Zajete slike"
@@ -1760,9 +1831,6 @@ msgstr "Uporabnik je zavrnil pogovorno okno overitve"
#~ msgid "Power"
#~ msgstr "Napajanje"
#~ msgid "Suspend"
#~ msgstr "Zaustavi"
#~ msgid "Restart"
#~ msgstr "Zaženi znova"
@@ -1895,12 +1963,6 @@ msgstr "Uporabnik je zavrnil pogovorno okno overitve"
#~ msgid "Unknown"
#~ msgstr "Neznano"
#~ msgid "Volume"
#~ msgstr "Glasnost"
#~ msgid "Microphone"
#~ msgstr "Mikrofon"
#~ msgid "Available"
#~ msgstr "Na voljo"
@@ -1919,9 +1981,6 @@ msgstr "Uporabnik je zavrnil pogovorno okno overitve"
#~ msgid "Notifications"
#~ msgstr "Obvestila"
#~ msgid "Install Updates & Restart"
#~ msgstr "Namesti posodobitve in ponovno zaženi"
#~ msgid "Your chat status will be set to busy"
#~ msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"

1224
po/sr.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

410
po/tg.po
View File

@@ -8,8 +8,8 @@ msgstr ""
"Project-Id-Version: Tajik Gnome\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2013-08-20 18:21+0000\n"
"PO-Revision-Date: 2013-08-21 12:07+0500\n"
"POT-Creation-Date: 2013-09-08 10:42+0000\n"
"PO-Revision-Date: 2013-09-08 15:44+0500\n"
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
"Language-Team: \n"
"Language: Tajik\n"
@@ -124,28 +124,10 @@ msgid "History for the looking glass dialog"
msgstr "Таърих барои равзанаи гуфтугӯи оина"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
msgid ""
"Internally used to store the last IM presence explicitly set by the user. "
"The value here is from the TpConnectionPresenceType enumeration."
msgstr ""
"Ба таври дохилӣ барои нигоҳ доштани мавҷудияти охирини IM, ки бо корбар ба "
"таври бевосита таъин шудааст, истифода мешавад. Дар ин ҷо қимат аз шумориши "
"TpConnectionPresenceType ба вуҷуд меояд."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"Internally used to store the last session presence status for the user. The "
"value here is from the GsmPresenceStatus enumeration."
msgstr ""
"Ба таври дохилӣ барои нигоҳ доштани вазъияти мавҷудияти ҷаласаи охирин барои "
"корбар истифода мешавад. Дар ин ҷо қимат аз шумориши GsmPresenceStatus ба "
"вуҷуд меояд."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Ҳамеша намоиш додани объекти менюи \"Баромадан\" дар менюи корбар."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
@@ -153,14 +135,14 @@ msgstr ""
"Ин калид пинҳонкунии худкори объекти менюи \"Баромадан\"-ро дар вазъиятҳои "
"корбари ягона ва ҷаласаи ягона бекор мекунад."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid ""
"Whether to remember password for mounting encrypted or remote filesystems"
msgstr ""
"Дар ёд доштан ё дар ёд надоштани парол барои васл кардани системаҳои файлии "
"рамздор ё дурдаст"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"The shell will request a password when an encrypted device or a remote "
"filesystem is mounted. If the password can be saved for future use a "
@@ -172,69 +154,69 @@ msgstr ""
"доштани парол\" мавҷуд мешавад. Ин калид ҳолати пешфарзи байрақчаро таъин "
"мекунад."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Намоиш додани ҳафта дар тақвим"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "If true, display the ISO week date in the calendar."
msgstr "Агар дуруст бошад, санаи ҳафтаи ISO дар тақвим намоиш дода мешавад."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the application menu"
msgstr "Тугма барои кушодани менюи барнома"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Тугма барои кушодани менюи барнома."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Тугма барои кушодани намуди \"Намоиш додани барномаҳо\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Тугма барои кушодани намуди \"Намоиш додани барномаҳо\"-и Хулосаи фаъолият."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to open the overview"
msgstr "Тугмабандӣ барои кушодани хулоса"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to open the Activities Overview."
msgstr "Тугмабандӣ барои кушодани хулосаи фаъолият."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Тугма барои иваз кардани намоёнии қуттии паёмҳо"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Тугма барои иваз кардани намоёнии қуттии паёмҳо."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Keybinding to focus the active notification"
msgstr "Тугма барои гузоштани фокус ба огоҳии фаъол"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid "Keybinding to focus the active notification."
msgstr "Тугма барои гузоштани фокус ба огоҳии фаъол."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "Which keyboard to use"
msgstr "Клавиатураро интихоб кунед"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "The type of keyboard to use."
msgstr "Намуди клавиатура барои истифода."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
msgid "The application icon mode."
msgstr "Ҳолати нишонаи барнома."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid ""
"Configures how the windows are shown in the switcher. Valid possibilities "
"are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-"
@@ -245,22 +227,22 @@ msgstr ""
"равзанаро намоиш медиҳад), \"танҳо нишонаи барнома\" (танҳо нишонаи "
"барномаро намоиш медиҳад) ё \"ҳар ду\"."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
msgid "Attach modal dialog to the parent window"
msgstr "Замима кардани равзанаи гуфтугӯи модалӣ ба равзанаи асосӣ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Ин калид ҳангоми иҷроиши GNOME Shell калиди дар org.gnome.mutter "
"ҷойгирбударо бекор мекунад."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
msgid "Arrangement of buttons on the titlebar"
msgstr "Мураттабсозии тугмаҳо дар сарлавҳаи равзана"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
@@ -268,17 +250,17 @@ msgstr ""
"Ин калид ҳангоми иҷроиши GNOME Shell калиди дар org.gnome.desktop.wm."
"preferences ҷойгирбударо бекор мекунад."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Фаъол кардани лавҳабандии канорӣ ҳангоми гузоштани равзанаҳо ба канорҳои "
"экран"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Workspaces are managed dynamically"
msgstr "Фазоҳои корӣ ба таври серамалӣ идора мешаванд"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces only on primary monitor"
msgstr "Танҳо фазоҳои корӣ дар монитори асосӣ"
@@ -299,46 +281,41 @@ msgstr ""
"Пасвандеро интихоб кунед, то ин ки бо ҷаъбаи мураккаби боло онро "
"конфигуратсия кунед."
#: ../js/gdm/authPrompt.js:146 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:376
#: ../js/gdm/authPrompt.js:145 ../js/ui/components/networkAgent.js:132
#: ../js/ui/components/polkitAgent.js:161 ../js/ui/endSessionDialog.js:351
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:679
#: ../js/ui/status/system.js:373
#: ../js/ui/status/bluetooth.js:221 ../js/ui/status/network.js:686
msgid "Cancel"
msgstr "Бекор кардан"
#: ../js/gdm/authPrompt.js:168 ../js/gdm/authPrompt.js:216
#: ../js/gdm/authPrompt.js:167 ../js/gdm/authPrompt.js:215
msgid "Next"
msgstr "Навбатӣ"
#: ../js/gdm/authPrompt.js:212 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:56
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Кушодан"
#: ../js/gdm/authPrompt.js:214
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Ворид шудан"
#: ../js/gdm/loginDialog.js:299
#: ../js/gdm/loginDialog.js:294
msgid "Choose Session"
msgstr "Интихоби ҷаласа"
#: ../js/gdm/loginDialog.js:317
msgid "Session"
msgstr "Ҷаласа"
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:468
#: ../js/gdm/loginDialog.js:454
msgid "Not listed?"
msgstr "Вуҷуд надора?"
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:641
#: ../js/gdm/loginDialog.js:622
#, c-format
msgid "(e.g., user or %s)"
msgstr "(масалан, корбар ё %s)"
@@ -346,12 +323,12 @@ msgstr "(масалан, корбар ё %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:646 ../js/ui/components/networkAgent.js:255
#: ../js/gdm/loginDialog.js:627 ../js/ui/components/networkAgent.js:255
#: ../js/ui/components/networkAgent.js:273
msgid "Username: "
msgstr "Номи корбар:"
#: ../js/gdm/loginDialog.js:909
#: ../js/gdm/loginDialog.js:891
msgid "Login Window"
msgstr "Равзанаи воридшавӣ"
@@ -364,7 +341,7 @@ msgstr "Хатои санҷиши ҳаққоният"
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:419
#: ../js/gdm/util.js:436
msgid "(or swipe finger)"
msgstr "(ё бо ангут ламс кунед)"
@@ -383,23 +360,27 @@ msgstr "Фармон иҷро нашудааст:"
msgid "Execution of '%s' failed:"
msgstr "Иҷрокунии '%s' қатъ шудааст:"
#: ../js/ui/appDisplay.js:386
#: ../js/ui/appDisplay.js:573
msgid "Frequently used applications will appear here"
msgstr "Барномаҳои бештар истифодашуда ин ҷо намоиш дода мешаванд"
#: ../js/ui/appDisplay.js:689
msgid "Frequent"
msgstr "Роиҷ"
#: ../js/ui/appDisplay.js:393
#: ../js/ui/appDisplay.js:696
msgid "All"
msgstr "Ҳама"
#: ../js/ui/appDisplay.js:986
#: ../js/ui/appDisplay.js:1491
msgid "New Window"
msgstr "Равзанаи нав"
#: ../js/ui/appDisplay.js:989 ../js/ui/dash.js:284
#: ../js/ui/appDisplay.js:1494 ../js/ui/dash.js:284
msgid "Remove from Favorites"
msgstr "Тоза кардан аз Баргузидаҳо"
#: ../js/ui/appDisplay.js:990
#: ../js/ui/appDisplay.js:1495
msgid "Add to Favorites"
msgstr "Илова кардан ба Баргузидаҳо"
@@ -413,7 +394,7 @@ msgstr "%s ба баргузидаҳои шумо илова шудааст."
msgid "%s has been removed from your favorites."
msgstr "%s аз баргузидаҳои шумо тоза шудааст."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:267
#: ../js/ui/backgroundMenu.js:19 ../js/ui/status/system.js:325
msgid "Settings"
msgstr "Танзимот"
@@ -537,36 +518,44 @@ msgctxt "list saturday"
msgid "S"
msgstr "Ш"
#: ../js/ui/calendar.js:447
msgid "Previous month"
msgstr "Моҳи қаблӣ"
#: ../js/ui/calendar.js:457
msgid "Next month"
msgstr "Моҳи навбатӣ"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:750
#: ../js/ui/calendar.js:753
msgid "Nothing Scheduled"
msgstr "Ягон чиз ба нақша нагирифтааст"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:768
#: ../js/ui/calendar.js:771
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %B %d"
#. Translators: Shown on calendar heading when selected day occurs on different year
#: ../js/ui/calendar.js:771
#: ../js/ui/calendar.js:774
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %B %d, %Y"
#: ../js/ui/calendar.js:782
#: ../js/ui/calendar.js:785
msgid "Today"
msgstr "Имрӯз"
#: ../js/ui/calendar.js:786
#: ../js/ui/calendar.js:789
msgid "Tomorrow"
msgstr "Фардо"
#: ../js/ui/calendar.js:797
#: ../js/ui/calendar.js:800
msgid "This week"
msgstr "Ҳафтаи ҷорӣ"
#: ../js/ui/calendar.js:805
#: ../js/ui/calendar.js:808
msgid "Next week"
msgstr "Ҳафтаи навбатӣ"
@@ -600,7 +589,7 @@ msgid "Type again:"
msgstr "Аз нав ворид кунед:"
#: ../js/ui/components/networkAgent.js:127 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:268 ../js/ui/status/network.js:682
#: ../js/ui/status/network.js:275 ../js/ui/status/network.js:689
msgid "Connect"
msgstr "Пайваст шудан"
@@ -945,7 +934,7 @@ msgstr "Намоиш додани барномаҳо"
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:439
#: ../js/ui/dash.js:442
msgid "Dash"
msgstr "Рах"
@@ -968,99 +957,111 @@ msgstr "Танзимоти сана ва вақт"
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
#: ../js/ui/endSessionDialog.js:63
#: ../js/ui/endSessionDialog.js:62
#, c-format
msgctxt "title"
msgid "Log Out %s"
msgstr "Баромадан аз %s"
#: ../js/ui/endSessionDialog.js:64
#: ../js/ui/endSessionDialog.js:63
msgctxt "title"
msgid "Log Out"
msgstr "Баромад"
#: ../js/ui/endSessionDialog.js:65
msgid "Click Log Out to quit these applications and log out of the system."
msgstr ""
"Барои баромадан аз ин барномаҳо ва баромадан аз система, \"Баромадан\"-ро "
"зер кунед."
#: ../js/ui/endSessionDialog.js:67
#, c-format
msgid "%s will be logged out automatically in %d second."
msgid_plural "%s will be logged out automatically in %d seconds."
msgstr[0] "%s аз система баъд аз %d сония ба таври худкор мебарояд."
msgstr[1] "%s аз система баъд аз %d сония ба таври худкор мебарояд."
#: ../js/ui/endSessionDialog.js:72
#: ../js/ui/endSessionDialog.js:70
#, c-format
msgid "You will be logged out automatically in %d second."
msgid_plural "You will be logged out automatically in %d seconds."
msgstr[0] "Шумо аз система баъд аз %d сония ба таври худкор мебароед."
msgstr[1] "Шумо аз система баъд аз %d сония ба таври худкор мебароед."
#: ../js/ui/endSessionDialog.js:76
msgid "Logging out of the system."
msgstr "Баромад аз система."
#: ../js/ui/endSessionDialog.js:78
#: ../js/ui/endSessionDialog.js:75
msgctxt "button"
msgid "Log Out"
msgstr "Баромад"
#: ../js/ui/endSessionDialog.js:83
#: ../js/ui/endSessionDialog.js:81
msgctxt "title"
msgid "Power Off"
msgstr "Хомӯш кардан"
#: ../js/ui/endSessionDialog.js:84
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
"Барои баромадан аз ин барномаҳо ва анҷом додани кори система, \"Анҷоми кор\"-"
"ро зер кунед."
#: ../js/ui/endSessionDialog.js:86
#: ../js/ui/endSessionDialog.js:83
#, c-format
msgid "The system will power off automatically in %d second."
msgid_plural "The system will power off automatically in %d seconds."
msgstr[0] "Система ба таври худкор баъд аз %d сония корро анҷом медиҳад."
msgstr[1] "Система ба таври худкор баъд аз %d сония корро анҷом медиҳад."
#: ../js/ui/endSessionDialog.js:90
msgid "Powering off the system."
msgstr "Хомӯш кардани система."
#: ../js/ui/endSessionDialog.js:92 ../js/ui/endSessionDialog.js:109
#: ../js/ui/endSessionDialog.js:88 ../js/ui/endSessionDialog.js:104
msgctxt "button"
msgid "Restart"
msgstr "Бозоғозидан"
#: ../js/ui/endSessionDialog.js:94
#: ../js/ui/endSessionDialog.js:90
msgctxt "button"
msgid "Power Off"
msgstr "Хомӯш кардан"
#: ../js/ui/endSessionDialog.js:100
#: ../js/ui/endSessionDialog.js:97
msgctxt "title"
msgid "Restart"
msgstr "Бозоғозидан"
#: ../js/ui/endSessionDialog.js:101
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
"Барои баромадан аз ин барномаҳо ва бозоғозидани система, \"Бозоғозидан\"-ро "
"зер кунед."
#: ../js/ui/endSessionDialog.js:103
#: ../js/ui/endSessionDialog.js:99
#, c-format
msgid "The system will restart automatically in %d second."
msgid_plural "The system will restart automatically in %d seconds."
msgstr[0] "Система ба таври худкор баъд аз %d сония бозоғозӣ мешавад."
msgstr[1] "Система ба таври худкор баъд аз %d сония бозоғозӣ мешавад."
#: ../js/ui/endSessionDialog.js:107
msgid "Restarting the system."
msgstr "Бозоғозии система."
#: ../js/ui/endSessionDialog.js:112
msgctxt "title"
msgid "Restart & Install Updates"
msgstr "Бозоғозӣ кардан ва насб кардани навсозиҳо"
#: ../js/ui/endSessionDialog.js:114
#, c-format
msgid "The system will automatically restart and install updates in %d second."
msgid_plural ""
"The system will automatically restart and install updates in %d seconds."
msgstr[0] ""
"Система баъд аз %d сония ба таври худкор бозоғозӣ мешавад ва навсозиҳоро "
"насб мекунад."
msgstr[1] ""
"Система баъд аз %d сония ба таври худкор бозоғозӣ мешавад ва навсозиҳоро "
"насб мекунад."
#: ../js/ui/endSessionDialog.js:119
msgctxt "button"
msgid "Restart & Install"
msgstr "Бозоғозӣ ва насб кардан"
#: ../js/ui/endSessionDialog.js:271
msgid "Some applications are busy or have unsaved work."
msgstr "Баъзе барномаҳо банданд ё дорои корҳои захиранашуда мебошанд."
#: ../js/ui/endSessionDialog.js:277
msgid "Other users are logged in."
msgstr "Корбарони дигар ворид шудаанд."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:479
#, c-format
msgid "%s (remote)"
msgstr "%s (дурдаст)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:482
#, c-format
msgid "%s (console)"
msgstr "%s (консол)"
#: ../js/ui/extensionDownloader.js:199
msgid "Install"
@@ -1143,15 +1144,15 @@ msgstr "Танзимоти огоҳиҳо"
msgid "Tray Menu"
msgstr "Менюи қуттӣ"
#: ../js/ui/messageTray.js:1777
#: ../js/ui/messageTray.js:1775
msgid "No Messages"
msgstr "Ягон паём нест"
#: ../js/ui/messageTray.js:1814
#: ../js/ui/messageTray.js:1812
msgid "Message Tray"
msgstr "Қуттии паёмҳо"
#: ../js/ui/messageTray.js:2788
#: ../js/ui/messageTray.js:2787
msgid "System Information"
msgstr "Маълумоти система"
@@ -1160,7 +1161,7 @@ msgctxt "program"
msgid "Unknown"
msgstr "Номаълум"
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:154
#: ../js/ui/overviewControls.js:491 ../js/ui/screenShield.js:152
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@@ -1197,7 +1198,7 @@ msgstr "Фаъолиятҳо"
msgid "Settings Menu"
msgstr "Менюи танзимот"
#: ../js/ui/panel.js:892
#: ../js/ui/panel.js:901
msgid "Top Bar"
msgstr "Панели боло"
@@ -1220,22 +1221,22 @@ msgstr "Пӯшидан"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:90
#: ../js/ui/screenShield.js:88
msgid "%A, %B %d"
msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:156
#: ../js/ui/screenShield.js:154
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d огоҳии нав"
msgstr[1] "%d огоҳии нав"
#: ../js/ui/screenShield.js:479 ../js/ui/status/system.js:275
#: ../js/ui/screenShield.js:477 ../js/ui/status/system.js:333
msgid "Lock"
msgstr "Қулф кардан"
#: ../js/ui/screenShield.js:706
#: ../js/ui/screenShield.js:703
msgid "GNOME needs to lock the screen"
msgstr "GNOME бояд экранро қулф кунад"
@@ -1246,19 +1247,19 @@ msgstr "GNOME бояд экранро қулф кунад"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1279
#: ../js/ui/screenShield.js:830 ../js/ui/screenShield.js:1296
msgid "Unable to lock"
msgstr "Қулф карда намешавад"
#: ../js/ui/screenShield.js:832 ../js/ui/screenShield.js:1280
#: ../js/ui/screenShield.js:831 ../js/ui/screenShield.js:1297
msgid "Lock was blocked by an application"
msgstr "Қулф аз тарави барнома баста шудааст"
#: ../js/ui/searchDisplay.js:445
#: ../js/ui/searchDisplay.js:447
msgid "Searching…"
msgstr "Ҷустуҷӯ рафта истодааст..."
#: ../js/ui/searchDisplay.js:489
#: ../js/ui/searchDisplay.js:491
msgid "No results."
msgstr "Ягон натиҷа нест."
@@ -1339,7 +1340,7 @@ msgid "Bluetooth"
msgstr "Bluetooth"
#: ../js/ui/status/bluetooth.js:30 ../js/ui/status/network.js:112
#: ../js/ui/status/network.js:1027 ../js/ui/status/rfkill.js:46
#: ../js/ui/status/network.js:1034 ../js/ui/status/rfkill.js:46
msgid "Turn Off"
msgstr "Хомӯш кардан"
@@ -1426,6 +1427,10 @@ msgstr "Лутфан, рамзи PIN-ро, ки дар дастгоҳ гуфта
msgid "OK"
msgstr "OK"
#: ../js/ui/status/brightness.js:42
msgid "Brightness"
msgstr "Дурахшонӣ"
#: ../js/ui/status/keyboard.js:404
msgid "Show Keyboard Layout"
msgstr "Намоиш додани тарҳбандии клавиатура"
@@ -1434,83 +1439,83 @@ msgstr "Намоиш додани тарҳбандии клавиатура"
msgid "<unknown>"
msgstr "<номаълум>"
#: ../js/ui/status/network.js:196 ../js/ui/status/network.js:1042
#: ../js/ui/status/network.js:203 ../js/ui/status/network.js:1049
msgid "Off"
msgstr "Хомӯш"
#: ../js/ui/status/network.js:269 ../js/ui/status/network.js:948
#: ../js/ui/status/network.js:276 ../js/ui/status/network.js:955
#: ../js/ui/status/rfkill.js:49
msgid "Network Settings"
msgstr "Танзимоти шабака"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:357
#: ../js/ui/status/network.js:364
msgid "unmanaged"
msgstr "идоранашуда"
#: ../js/ui/status/network.js:359
#: ../js/ui/status/network.js:366
msgid "disconnecting..."
msgstr "қатъ кардани пайваст..."
#: ../js/ui/status/network.js:365 ../js/ui/status/network.js:1093
#: ../js/ui/status/network.js:372 ../js/ui/status/network.js:1100
msgid "connecting..."
msgstr "пайвастшавӣ..."
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:368 ../js/ui/status/network.js:1096
#: ../js/ui/status/network.js:375 ../js/ui/status/network.js:1103
msgid "authentication required"
msgstr "санҷиши ҳаққоният лозим аст"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing
#: ../js/ui/status/network.js:376
#: ../js/ui/status/network.js:383
msgid "firmware missing"
msgstr "нармафзори дарунсохт вуҷуд надорад"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:380
#: ../js/ui/status/network.js:387
msgid "unavailable"
msgstr "дастнорас"
#: ../js/ui/status/network.js:382 ../js/ui/status/network.js:1098
#: ../js/ui/status/network.js:389 ../js/ui/status/network.js:1105
msgid "connection failed"
msgstr "пайваст қатъ шудааст"
#: ../js/ui/status/network.js:647
#: ../js/ui/status/network.js:654
msgid "Wi-Fi Networks"
msgstr "Шабакаҳои Wi-Fi"
#: ../js/ui/status/network.js:649
#: ../js/ui/status/network.js:656
msgid "Select a network"
msgstr "Интихоб кардани шабака"
#: ../js/ui/status/network.js:673
#: ../js/ui/status/network.js:680
msgid "No Networks"
msgstr "Ягон шабака нест"
#: ../js/ui/status/network.js:942
#: ../js/ui/status/network.js:949
msgid "Select Network"
msgstr "Интихоби шабака"
#: ../js/ui/status/network.js:1027
#: ../js/ui/status/network.js:1034
msgid "Turn On"
msgstr "Фаъол кардан"
#: ../js/ui/status/network.js:1160
#: ../js/ui/status/network.js:1167
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1296
#: ../js/ui/status/network.js:1306
msgid "Network Manager"
msgstr "Мудири шабака"
#: ../js/ui/status/network.js:1338
#: ../js/ui/status/network.js:1345
msgid "Connection failed"
msgstr "Пайваст қатъ шудааст"
#: ../js/ui/status/network.js:1339
#: ../js/ui/status/network.js:1346
msgid "Activation of network connection failed"
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
@@ -1556,51 +1561,43 @@ msgstr "Ҳолати ҳавопаймо"
msgid "On"
msgstr "Фаъол"
#: ../js/ui/status/system.js:247
#: ../js/ui/status/system.js:305
msgid "Switch User"
msgstr "Таъвизи корбар"
#: ../js/ui/status/system.js:252
#: ../js/ui/status/system.js:310
msgid "Log Out"
msgstr "Баромад"
#: ../js/ui/status/system.js:271
#: ../js/ui/status/system.js:329
msgid "Orientation Lock"
msgstr "Қулфи самт"
#: ../js/ui/status/system.js:279 ../js/ui/status/system.js:377
#: ../js/ui/status/system.js:337
msgid "Suspend"
msgstr "Таваққуф"
#: ../js/ui/status/system.js:340
msgid "Power Off"
msgstr "Хомӯш кардан"
#: ../js/ui/status/system.js:323
msgid "Other users are logged in."
msgstr "Корбарони дигар ворид шудаанд."
#: ../js/ui/status/system.js:328
msgid "Shutting down might cause them to lose unsaved work."
msgstr "Анҷоми кор метавонад сабаби гум шудани кори захиранашуда гардад."
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/status/system.js:356
#, c-format
msgid "%s (remote)"
msgstr "%s (дурдаст)"
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/status/system.js:359
#, c-format
msgid "%s (console)"
msgstr "%s (консол)"
#: ../js/ui/status/volume.js:124
#: ../js/ui/status/volume.js:127
msgid "Volume changed"
msgstr "Ҳаҷм тағйир ёфт"
#: ../js/ui/unlockDialog.js:64
#: ../js/ui/status/volume.js:162
msgid "Volume"
msgstr "Баландии садо"
#: ../js/ui/status/volume.js:213
msgid "Microphone"
msgstr "Микрофон"
#: ../js/ui/unlockDialog.js:67
msgid "Log in as another user"
msgstr "Ворид шудан бо корбари дигар"
#: ../js/ui/unlockDialog.js:81
#: ../js/ui/unlockDialog.js:84
msgid "Unlock Window"
msgstr "Кушодани равзана"
@@ -1639,7 +1636,6 @@ msgstr "Шумо мехоҳед, ки ин танзимоти дисплейро
#. to avoid ellipsizing the labels.
#.
#: ../js/ui/windowManager.js:75
#| msgid "Power Settings"
msgid "Revert Settings"
msgstr "Барқарор кардани тағйирот"
@@ -1714,6 +1710,52 @@ msgstr "Парол бояд холӣ набошад"
msgid "Authentication dialog was dismissed by the user"
msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо корбар бекор карда шуд"
#~ msgid "Session"
#~ msgstr "Ҷаласа"
#~ msgid ""
#~ "Internally used to store the last IM presence explicitly set by the user. "
#~ "The value here is from the TpConnectionPresenceType enumeration."
#~ msgstr ""
#~ "Ба таври дохилӣ барои нигоҳ доштани мавҷудияти охирини IM, ки бо корбар "
#~ "ба таври бевосита таъин шудааст, истифода мешавад. Дар ин ҷо қимат аз "
#~ "шумориши TpConnectionPresenceType ба вуҷуд меояд."
#~ msgid ""
#~ "Internally used to store the last session presence status for the user. "
#~ "The value here is from the GsmPresenceStatus enumeration."
#~ msgstr ""
#~ "Ба таври дохилӣ барои нигоҳ доштани вазъияти мавҷудияти ҷаласаи охирин "
#~ "барои корбар истифода мешавад. Дар ин ҷо қимат аз шумориши "
#~ "GsmPresenceStatus ба вуҷуд меояд."
#~ msgid "Click Log Out to quit these applications and log out of the system."
#~ msgstr ""
#~ "Барои баромадан аз ин барномаҳо ва баромадан аз система, \"Баромадан\"-ро "
#~ "зер кунед."
#~ msgid "Logging out of the system."
#~ msgstr "Баромад аз система."
#~ msgid "Click Power Off to quit these applications and power off the system."
#~ msgstr ""
#~ "Барои баромадан аз ин барномаҳо ва анҷом додани кори система, \"Анҷоми кор"
#~ "\"-ро зер кунед."
#~ msgid "Powering off the system."
#~ msgstr "Хомӯш кардани система."
#~ msgid "Click Restart to quit these applications and restart the system."
#~ msgstr ""
#~ "Барои баромадан аз ин барномаҳо ва бозоғозидани система, \"Бозоғозидан\"-"
#~ "ро зер кунед."
#~ msgid "Restarting the system."
#~ msgstr "Бозоғозии система."
#~ msgid "Shutting down might cause them to lose unsaved work."
#~ msgstr "Анҷоми кор метавонад сабаби гум шудани кори захиранашуда гардад."
#~ msgid "Screenshots"
#~ msgstr "Суратҳои экран"
@@ -1790,18 +1832,12 @@ msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо
#~ msgid "Power"
#~ msgstr "Барқ"
#~ msgid "Suspend"
#~ msgstr "Таваққуф"
#~ msgid "Restart"
#~ msgstr "Бозоғозидан"
#~ msgid "Volume, network, battery"
#~ msgstr "Ҳаҷм, шабака, батарея"
#~ msgid "Volume"
#~ msgstr "Баландии садо"
#~ msgid "Wi-Fi"
#~ msgstr "Wi-Fi"
@@ -1913,9 +1949,6 @@ msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо
#~ msgid "Unknown"
#~ msgstr "Номаълум"
#~ msgid "Microphone"
#~ msgstr "Микрофон"
#~ msgid "Available"
#~ msgstr "Дастрас"
@@ -1934,9 +1967,6 @@ msgstr "Равзанаи гуфтугӯи санҷиши ҳакконият бо
#~ msgid "Notifications"
#~ msgstr "Огоҳиҳо"
#~ msgid "Install Updates & Restart"
#~ msgstr "Насб кардани навсозиҳо ва бозоғозидан"
#~ msgid "Your chat status will be set to busy"
#~ msgstr "Вазъияти чати шумо ба \"машғул\" тағйир дода мешавад"

1751
po/uk.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,7 @@
st_cflags = \
-DCLUTTER_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_2_0_API \
-I$(top_srcdir)/src \
-DPREFIX=\""$(prefix)"\" \
-DLIBDIR=\""$(libdir)"\" \
@@ -52,6 +55,7 @@ st_source_h = \
st/st-drawing-area.h \
st/st-entry.h \
st/st-focus-manager.h \
st/st-generic-accessible.h \
st/st-icon.h \
st/st-icon-colors.h \
st/st-im-text.h \
@@ -120,6 +124,7 @@ st_source_c = \
st/st-drawing-area.c \
st/st-entry.c \
st/st-focus-manager.c \
st/st-generic-accessible.c \
st/st-icon.c \
st/st-icon-colors.c \
st/st-im-text.c \

View File

@@ -33,23 +33,11 @@ bin_SCRIPTS += gnome-shell-extension-tool gnome-shell-extension-prefs \
gnome-shell-perf-tool
EXTRA_DIST += gnome-shell-extension-tool.in gnome-shell-extension-prefs.in \
gnome-shell-perf-tool.in
bin_PROGRAMS = gnome-shell-real
bin_PROGRAMS = gnome-shell
if USE_JHBUILD_WRAPPER_SCRIPT
gnome_shell = gnome-shell-jhbuild
bin_SCRIPTS += gnome-shell-jhbuild
else
gnome_shell = gnome-shell-real
endif
EXTRA_DIST += gnome-shell-jhbuild.in
noinst_DATA = gnome-shell
gnome-shell: $(gnome_shell) Makefile
$(AM_V_GEN) cp $< $@.tmp && mv $@.tmp $@
install-exec-hook:
mv $(DESTDIR)$(bindir)/$(gnome_shell) $(DESTDIR)$(bindir)/gnome-shell
uninstall-hook:
rm -f $(DESTDIR)$(bindir)/gnome-shell
if HAVE_MUTTER_WAYLAND
bin_PROGRAMS += gnome-shell-wayland
endif HAVE_MUTTER_WAYLAND
generated_script_substitutions = \
-e "s|@bindir[@]|$(bindir)|g" \
@@ -63,11 +51,6 @@ generated_script_substitutions = \
-e "s|@sysconfdir[@]|$(sysconfdir)|g" \
-e "s|@GJS_CONSOLE[@]|$(GJS_CONSOLE)|g"
gnome-shell-jhbuild: gnome-shell-jhbuild.in gnome-shell-real Makefile
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
@# Regenerate libtool wrapper so Alt+F2 restart will work
@$(LIBTOOL) --mode=execute test -f gnome-shell-real
gnome-shell-extension-tool: gnome-shell-extension-tool.in Makefile
$(AM_V_GEN) sed $(generated_script_substitutions) $< > $@.tmp && mv $@.tmp $@ && chmod a+x $@
@@ -85,6 +68,9 @@ include Makefile-calendar-server.am
include Makefile-hotplug-sniffer.am
gnome_shell_cflags = \
-DCLUTTER_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_API \
-DCOGL_ENABLE_EXPERIMENTAL_2_0_API \
$(GNOME_SHELL_CFLAGS) \
-I$(srcdir)/tray \
-DVERSION=\"$(VERSION)\" \
@@ -93,11 +79,15 @@ gnome_shell_cflags = \
-DGNOME_SHELL_LIBEXECDIR=\"$(libexecdir)\" \
-DGNOME_SHELL_DATADIR=\"$(pkgdatadir)\" \
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\" \
-DJSDIR=\"$(pkgdatadir)/js\" \
-DMUTTER_TYPELIB_DIR=\"$(MUTTER_TYPELIB_DIR)\"
-DJSDIR=\"$(pkgdatadir)/js\"
privlibdir = $(pkglibdir)
privlib_LTLIBRARIES = libgnome-shell.la libgnome-shell-js.la
privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell.la
noinst_LTLIBRARIES += libgnome-shell-base.la
if HAVE_MUTTER_WAYLAND
privlib_LTLIBRARIES += libgnome-shell-wayland.la
endif HAVE_MUTTER_WAYLAND
shell_built_sources = \
shell-enum-types.h \
@@ -128,7 +118,7 @@ shell_public_headers_h = \
shell-window-tracker.h \
shell-wm.h
shell_private_sources = \
libgnome_shell_menu_la_SOURCES = \
gtkactionmuxer.h \
gtkactionmuxer.c \
gtkactionobservable.h \
@@ -141,24 +131,12 @@ shell_private_sources = \
gtkmenutracker.h \
$(NULL)
libgnome_shell_la_SOURCES = \
$(shell_built_sources) \
libgnome_shell_base_la_SOURCES = \
$(shell_public_headers_h) \
$(shell_private_sources) \
shell-app-private.h \
shell-app-system-private.h \
shell-embedded-window-private.h \
shell-global-private.h \
shell-window-tracker-private.h \
shell-wm-private.h \
gnome-shell-plugin.c \
shell-app.c \
shell-app-system.c \
shell-app-usage.c \
shell-embedded-window.c \
shell-generic-container.c \
shell-gtk-embed.c \
shell-global.c \
shell-invert-lightness-effect.c \
shell-keyring-prompt.h \
shell-keyring-prompt.c \
@@ -169,12 +147,28 @@ libgnome_shell_la_SOURCES = \
shell-perf-log.c \
shell-polkit-authentication-agent.h \
shell-polkit-authentication-agent.c \
shell-screenshot.c \
shell-secure-text-buffer.c \
shell-secure-text-buffer.h \
shell-slicer.c \
shell-stack.c \
shell-tp-client.c \
shell-tp-client.c \
$(NULL)
libgnome_shell_sources = \
$(shell_built_sources) \
$(shell_public_headers_h) \
shell-app-private.h \
shell-app-system-private.h \
shell-global-private.h \
shell-window-tracker-private.h \
shell-wm-private.h \
gnome-shell-plugin.c \
shell-app.c \
shell-app-system.c \
shell-app-usage.c \
shell-global.c \
shell-gtk-embed.c \
shell-screenshot.c \
shell-tray-icon.c \
shell-tray-manager.c \
shell-util.c \
@@ -182,14 +176,35 @@ libgnome_shell_la_SOURCES = \
shell-wm.c \
$(NULL)
libgnome_shell_la_gir_sources = \
$(filter-out %-private.h $(shell_private_sources), $(shell_public_headers_h) $(libgnome_shell_la_SOURCES))
libgnome_shell_la_SOURCES = $(libgnome_shell_sources)
gnome_shell_real_SOURCES = \
main.c
gnome_shell_real_CPPFLAGS = $(gnome_shell_cflags)
gnome_shell_real_LDADD = libgnome-shell.la libgnome-shell-js.la $(libgnome_shell_la_LIBADD)
gnome_shell_real_DEPENDENCIES = libgnome-shell.la
libgnome_shell_la_gir_sources = \
$(filter-out %-private.h $(shell_private_sources), $(shell_public_headers_h) $(libgnome_shell_base_la_SOURCES) $(libgnome_shell_sources))
gnome_shell_SOURCES = main.c
gnome_shell_CPPFLAGS = \
-DMUTTER_TYPELIB_DIR=\"$(MUTTER_TYPELIB_DIR)\" \
$(MUTTER_CFLAGS) \
$(gnome_shell_cflags)
# Here, and after, we repeat mutter and bluetooth libraries just for the rpath
# The dependency is already pulled in by libtool
gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) $(BLUETOOTH_LIBS)
gnome_shell_DEPENDENCIES = libgnome-shell.la
if HAVE_MUTTER_WAYLAND
libgnome_shell_wayland_la_SOURCES = $(libgnome_shell_sources)
gnome_shell_wayland_SOURCES = main.c
gnome_shell_wayland_CPPFLAGS = \
-DHAVE_WAYLAND \
-DMUTTER_TYPELIB_DIR=\"$(MUTTER_WAYLAND_TYPELIB_DIR)\" \
$(MUTTER_WAYLAND_CFLAGS) \
$(gnome_shell_cflags)
gnome_shell_wayland_LDADD = libgnome-shell-wayland.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_WAYLAND_LIBS) $(BLUETOOTH_LIBS)
gnome_shell_wayland_DEPENDENCIES = libgnome-shell-wayland.la
endif HAVE_MUTTER_WAYLAND
########################################
@@ -217,14 +232,14 @@ shell_recorder_sources = \
# Custom element is an internal detail
if BUILD_RECORDER
libgnome_shell_la_SOURCES += $(shell_recorder_sources)
libgnome_shell_sources += $(shell_recorder_sources)
shell_recorder_private_sources = \
shell-recorder-src.c \
shell-recorder-src.h \
$(NULL)
shell_private_sources += $(shell_recorder_private_sources)
shell_private_sources = $(shell_recorder_private_sources)
endif BUILD_RECORDER
@@ -240,8 +255,8 @@ gnome_shell_perf_helper_LDADD = $(SHELL_PERF_HELPER_LIBS)
noinst_PROGRAMS += run-js-test
run_js_test_CPPFLAGS = $(gnome_shell_cflags)
run_js_test_LDADD = libgnome-shell.la $(libgnome_shell_la_LIBADD)
run_js_test_CPPFLAGS = $(MUTTER_CFLAGS) $(gnome_shell_cflags)
run_js_test_LDADD = libgnome-shell.la $(GNOME_SHELL_JS_LIBS) $(MUTTER_LIBS) $(BLUETOOTH_LIBS)
run_js_test_LDFLAGS = -export-dynamic
run_js_test_SOURCES = \
@@ -271,22 +286,37 @@ shell-enum-types.c: $(srcdir)/shell-enum-types.c.in stamp-shell-enum-types.h
rm -f $(@F).tmp
EXTRA_DIST += shell-enum-types.c.in
libgnome_shell_la_LDFLAGS = -avoid-version
libgnome_shell_la_LIBADD = \
libgnome_shell_ldflags = -avoid-version
libgnome_shell_libadd = \
-lm \
$(GNOME_SHELL_LIBS) \
$(BLUETOOTH_LIBS) \
libgnome-shell-menu.la \
libst-1.0.la \
libtray.la \
gvc/libgvc.la \
$(NULL)
libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags)
libgnome_shell_menu_la_LDFLAGS = $(libgnome_shell_ldflags)
libgnome_shell_menu_la_LIBADD = $(GNOME_SHELL_LIBS)
libgnome_shell_menu_la_CPPFLAGS = $(GNOME_SHELL_CFLAGS)
ShellMenu-0.1.gir: libgnome-shell.la
libgnome_shell_base_la_LIBADD = $(libgnome_shell_libadd)
libgnome_shell_base_la_CPPFLAGS = $(gnome_shell_cflags)
libgnome_shell_la_LDFLAGS = $(libgnome_shell_ldflags)
libgnome_shell_la_LIBADD = $(GNOME_SHELL_LIBS) $(MUTTER_LIBS) libgnome-shell-base.la
libgnome_shell_la_CPPFLAGS = $(MUTTER_CFLAGS) $(gnome_shell_cflags)
if HAVE_MUTTER_WAYLAND
libgnome_shell_wayland_la_LDFLAGS = $(libgnome_shell_ldflags)
libgnome_shell_wayland_la_LIBADD = $(MUTTER_WAYLAND_LIBS) libgnome-shell-base.la
libgnome_shell_wayland_la_CPPFLAGS = $(MUTTER_WAYLAND_CFLAGS) -DHAVE_WAYLAND $(gnome_shell_cflags)
endif HAVE_MUTTER_WAYLAND
ShellMenu-0.1.gir: libgnome-shell-menu.la
ShellMenu_0_1_gir_INCLUDES = Gio-2.0
ShellMenu_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
ShellMenu_0_1_gir_LIBS = libgnome-shell.la
ShellMenu_0_1_gir_CFLAGS = $(libgnome_shell_menu_la_CPPFLAGS) -I $(srcdir)
ShellMenu_0_1_gir_LIBS = libgnome-shell-menu.la
ShellMenu_0_1_gir_FILES = \
gtkactionmuxer.h \
gtkactionmuxer.c \
@@ -303,10 +333,14 @@ ShellMenu_0_1_gir_SCANNERFLAGS = \
INTROSPECTION_GIRS += ShellMenu-0.1.gir
CLEANFILES += ShellMenu-0.1.gir
Shell-0.1.gir: libgnome-shell.la St-1.0.gir ShellMenu-0.1.gir
Shell-0.1.gir: gnome-shell St-1.0.gir ShellMenu-0.1.gir
Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 Soup-2.4 GMenu-3.0 NetworkManager-1.0 NMClient-1.0
Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
Shell_0_1_gir_LIBS = libgnome-shell.la
# Hack! we use PROGRAM instead of LIBS so that the soname is not included
# in the typelib. This way the symbols will be resolved with the libgnome-shell
# linked against the executable (which will be libgnome-shell-wayland for
# gnome-shell-wayland)
Shell_0_1_gir_PROGRAM = $(builddir)/gnome-shell
Shell_0_1_gir_FILES = $(libgnome_shell_la_gir_sources)
Shell_0_1_gir_SCANNERFLAGS = \
--include-uninstalled=$(builddir)/St-1.0.gir \

View File

@@ -1,175 +0,0 @@
#!@PYTHON@
# -*- mode: Python; indent-tabs-mode: nil; -*-
import optparse
import os
import re
import signal
import subprocess
import sys
import termios
def show_version(option, opt_str, value, parser):
print "GNOME Shell @VERSION@"
sys.exit()
def get_running_session_environs():
wanted_environment = ['DBUS_SESSION_BUS_ADDRESS', 'DISPLAY', 'XDG_DATA_DIRS',
'XAUTHORITY', 'XDG_SESSION_COOKIE', 'ORBIT_SOCKETDIR',
'SESSION_MANAGER']
num_re = re.compile('^[0-9]+$')
myuid = os.getuid()
if not os.path.isdir('/proc'):
return {}
for filename in os.listdir('/proc'):
if not num_re.match(filename):
continue
piddir = '/proc/' + filename
try:
stat = os.stat(piddir)
except OSError, e:
continue
if not stat.st_uid == myuid:
continue
try:
f = open(piddir + "/cmdline")
command = f.read()
f.close()
except IOError, e:
continue
# /proc/cmdline is separated and terminated by NULs
command = command.split("\x00")[0]
command = os.path.basename(command)
if command != 'gnome-session':
continue
try:
f = open(os.path.join(piddir, 'environ'))
except OSError, e:
continue
environ_data = f.read()
f.close()
# There's a trailing null at the last one, so remove the
# empty string
environs = environ_data.split('\0')[:-1]
# Rumor has it the presence of just FOO (instead of FOO=bar)
# represents a deleted environment variable
environs = filter(lambda x: '=' in x, environs)
# Turn it into a dictionary
environs = dict(map(lambda x: x.split('=', 1), environs))
result = {}
for key in wanted_environment:
if key in environs:
result[key] = environs[key]
return result
def start_shell():
self_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
running_from_source_tree = os.path.exists(os.path.join(self_dir, 'gnome-shell-jhbuild.in'))
# Set up environment
env = dict(os.environ)
if running_from_source_tree:
top_dir = os.path.dirname(self_dir)
typelib_dir = os.path.join(top_dir, "src")
if 'GI_TYPELIB_PATH' in os.environ:
typelib_dir += ':%s' % (os.environ['GI_TYPELIB_PATH'],)
env.update({'GI_TYPELIB_PATH' : typelib_dir,
'GNOME_SHELL_JS' : os.path.join(top_dir, "js"),
'GNOME_SHELL_DATADIR' : os.path.join(top_dir, "data"),
'GSETTINGS_SCHEMA_DIR' : os.path.join(top_dir, "data") })
args = []
if options.debug:
debug_command = options.debug_command.split()
if running_from_source_tree:
args += [os.path.join(top_dir, 'libtool'), '--mode=execute']
args += debug_command
args.append(os.path.join(self_dir, 'gnome-shell-real'))
if options.replace:
args.append('--replace')
if options.sync:
args.append('--sync')
args += params
return subprocess.Popen(args, env=env)
def run_shell():
if options.debug:
# Record initial terminal state so we can reset it to that
# later, in case we kill gdb at a bad time
termattrs = termios.tcgetattr(0);
normal_exit = False
if options.verbose:
print "Starting shell"
shell = None
try:
shell = start_shell()
# Wait for shell to exit
if options.verbose:
print "Waiting for shell to exit"
shell.wait()
except KeyboardInterrupt, e:
try:
os.kill(shell.pid, signal.SIGKILL)
except:
pass
shell.wait()
finally:
if shell is None:
print "Failed to start shell"
elif shell.returncode == 0:
normal_exit = True
if options.verbose:
print "Shell exited normally"
elif shell.returncode < 0:
# Python has no mapping for strsignal; not worth using
# ctypes for this.
print "Shell killed with signal %d" % - shell.returncode
else:
# Normal reason here would be losing connection the X server
if options.verbose:
print "Shell exited with return code %d" % shell.returncode
if options.debug:
termios.tcsetattr(0, termios.TCSANOW, termattrs);
return normal_exit
# Main program
parser = optparse.OptionParser()
parser.add_option("-r", "--replace", action="store_true",
help="Replace the running metacity/gnome-panel")
parser.add_option("-g", "--debug", action="store_true",
help="Run under a debugger")
parser.add_option("", "--debug-command", metavar="COMMAND",
help="Command to use for debugging (defaults to 'gdb --args')")
parser.add_option("-v", "--verbose", action="store_true")
parser.add_option("", "--sync", action="store_true")
parser.add_option("", "--version", action="callback", callback=show_version,
help="Display version and exit")
options, params = parser.parse_args()
# Handle ssh logins
if 'DISPLAY' not in os.environ:
running_env = get_running_session_environs()
os.environ.update(running_env)
if options.debug_command:
options.debug = True
elif options.debug:
options.debug_command = "gdb --args"
normal_exit = run_shell()
if normal_exit:
sys.exit(0)
else:
sys.exit(1)

View File

@@ -28,8 +28,6 @@
#include <stdlib.h>
#include <string.h>
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#define COGL_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include <clutter/x11/clutter-x11.h>
#include <gjs/gjs.h>
@@ -324,10 +322,8 @@ static gboolean
gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *xev)
{
MetaScreen *screen = meta_plugin_get_screen (plugin);
MetaDisplay *display = meta_screen_get_display (screen);
GnomeShellPlugin *shell_plugin = GNOME_SHELL_PLUGIN (plugin);
#ifdef GLX_INTEL_swap_event
if (shell_plugin->have_swap_event &&
xev->type == (shell_plugin->glx_event_base + GLX_BufferSwapComplete))
@@ -351,7 +347,7 @@ gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
if (_shell_global_check_xdnd_event (shell_plugin->global, xev))
return TRUE;
return clutter_x11_handle_event (xev) != CLUTTER_X11_FILTER_CONTINUE;
return FALSE;
}
static gboolean

Submodule src/gvc updated: 6826d0a5fe...e14dbe8aa6

View File

@@ -388,6 +388,7 @@ main (int argc, char **argv)
ctx = meta_get_option_context ();
g_option_context_add_main_entries (ctx, gnome_shell_options, GETTEXT_PACKAGE);
g_option_context_add_group (ctx, g_irepository_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &error))
{
g_printerr ("%s: %s\n", argv[0], error->message);

View File

@@ -419,14 +419,13 @@ shell_app_usage_init (ShellAppUsage *self)
self->currently_idle = FALSE;
self->enable_monitoring = FALSE;
g_object_get (shell_global_get(), "userdatadir", &shell_userdata_dir, NULL),
g_object_get (global, "userdatadir", &shell_userdata_dir, NULL),
path = g_build_filename (shell_userdata_dir, DATA_FILENAME, NULL);
g_free (shell_userdata_dir);
self->configfile = g_file_new_for_path (path);
g_free (path);
restore_from_file (self);
self->privacy_settings = g_settings_new(PRIVACY_SCHEMA);
g_signal_connect (self->privacy_settings,
"changed::" ENABLE_MONITORING_KEY,

View File

@@ -217,7 +217,7 @@ typedef struct {
ClutterTextDirection direction;
} CreateFadedIconData;
static CoglHandle
static CoglTexture *
shell_app_create_faded_icon_cpu (StTextureCache *cache,
const char *key,
void *datap,
@@ -227,7 +227,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
ShellApp *app;
GdkPixbuf *pixbuf;
int size;
CoglHandle texture;
CoglTexture *texture;
gint width, height, rowstride;
guint8 n_channels;
gboolean have_alpha;
@@ -263,13 +263,13 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
}
if (info == NULL)
return COGL_INVALID_HANDLE;
return NULL;
pixbuf = gtk_icon_info_load_icon (info, NULL);
gtk_icon_info_free (info);
g_object_unref (info);
if (pixbuf == NULL)
return COGL_INVALID_HANDLE;
return NULL;
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
@@ -338,7 +338,7 @@ shell_app_create_faded_icon_cpu (StTextureCache *cache,
ClutterActor *
shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection direction)
{
CoglHandle texture;
CoglTexture *texture;
ClutterActor *result;
char *cache_key;
CreateFadedIconData data;
@@ -367,7 +367,7 @@ shell_app_get_faded_icon (ShellApp *app, int size, ClutterTextDirection directio
NULL);
g_free (cache_key);
if (texture != COGL_INVALID_HANDLE)
if (texture != NULL)
{
result = clutter_texture_new ();
clutter_texture_set_cogl_texture (CLUTTER_TEXTURE (result), texture);
@@ -771,25 +771,6 @@ shell_app_get_n_windows (ShellApp *app)
return g_slist_length (app->running_state->windows);
}
static gboolean
shell_app_has_visible_windows (ShellApp *app)
{
GSList *iter;
if (app->running_state == NULL)
return FALSE;
for (iter = app->running_state->windows; iter; iter = iter->next)
{
MetaWindow *window = iter->data;
if (meta_window_showing_on_its_workspace (window))
return TRUE;
}
return FALSE;
}
gboolean
shell_app_is_on_workspace (ShellApp *app,
MetaWorkspace *workspace)
@@ -841,17 +822,13 @@ shell_app_get_last_user_time (ShellApp *app)
*
* Compare one #ShellApp instance to another, in the following way:
* - Running applications sort before not-running applications.
* - If one of them has visible windows and the other does not, the one
* with visible windows is first.
* - Finally, the application which the user interacted with most recently
* - The application which the user interacted with most recently
* compares earlier.
*/
int
shell_app_compare (ShellApp *app,
ShellApp *other)
{
gboolean vis_app, vis_other;
if (app->state != other->state)
{
if (app->state == SHELL_APP_STATE_RUNNING)
@@ -859,14 +836,6 @@ shell_app_compare (ShellApp *app,
return 1;
}
vis_app = shell_app_has_visible_windows (app);
vis_other = shell_app_has_visible_windows (other);
if (vis_app && !vis_other)
return -1;
else if (!vis_app && vis_other)
return 1;
if (app->state == SHELL_APP_STATE_RUNNING)
{
if (app->running_state->windows && !other->running_state->windows)

View File

@@ -119,6 +119,7 @@ shell_embedded_window_constructor (GType gtype,
* idle resize anyways.
*/
g_object_set (object,
"app-paintable", TRUE,
"resize-mode", GTK_RESIZE_IMMEDIATE,
"type", GTK_WINDOW_POPUP,
NULL);

View File

@@ -1018,8 +1018,6 @@ void
shell_global_end_modal (ShellGlobal *global,
guint32 timestamp)
{
ClutterActor *actor;
if (!global->has_modal)
return;

View File

@@ -35,8 +35,6 @@
#define SHELL_IS_INVERT_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_INVERT_LIGHTNESS_EFFECT))
#define SHELL_INVERT_LIGHTNESS_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_INVERT_LIGHTNESS_EFFEC, ShellInvertLightnessEffectClass))
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include "shell-invert-lightness-effect.h"
#include <cogl/cogl.h>
@@ -124,6 +122,7 @@ shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect)
ShellInvertLightnessEffect *self = SHELL_INVERT_LIGHTNESS_EFFECT (effect);
ClutterActor *actor;
guint8 paint_opacity;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
paint_opacity = clutter_actor_get_paint_opacity (actor);
@@ -133,11 +132,8 @@ shell_invert_lightness_effect_paint_target (ClutterOffscreenEffect *effect)
paint_opacity,
paint_opacity,
paint_opacity);
cogl_push_source (self->pipeline);
cogl_rectangle (0, 0, self->tex_width, self->tex_height);
cogl_pop_source ();
cogl_framebuffer_draw_rectangle (fb, self->pipeline,
0, 0, self->tex_width, self->tex_height);
}
static void

View File

@@ -21,7 +21,6 @@
#ifndef __SHELL_INVERT_LIGHTNESS_EFFECT_H__
#define __SHELL_INVERT_LIGHTNESS_EFFECT_H__
#define COGL_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
G_BEGIN_DECLS

View File

@@ -441,15 +441,19 @@ recorder_record_frame (ShellRecorder *recorder)
recorder->last_frame_time = now;
size = recorder->area.width * recorder->area.height * 4;
data = g_malloc (recorder->area.width * 4 * recorder->area.height);
cogl_read_pixels (recorder->area.x,
recorder->area.y,
recorder->area.width,
recorder->area.height,
COGL_READ_PIXELS_COLOR_BUFFER,
CLUTTER_CAIRO_FORMAT_ARGB32,
data);
data = g_malloc (size);
if (!cogl_framebuffer_read_pixels (cogl_get_draw_framebuffer (),
recorder->area.x,
recorder->area.y,
recorder->area.width,
recorder->area.height,
CLUTTER_CAIRO_FORMAT_ARGB32,
data))
{
g_warning ("Could not retrieve pixel data");
g_free (data);
return;
}
buffer = gst_buffer_new();
gst_buffer_insert_memory (buffer, -1,

View File

@@ -1,8 +1,5 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#define COGL_ENABLE_EXPERIMENTAL_API
#define CLUTTER_ENABLE_EXPERIMENTAL_API
#include <clutter/clutter.h>
#include <cogl/cogl.h>
#include <meta/display.h>

View File

@@ -97,6 +97,7 @@ shell_slicer_paint_child (ShellSlicer *self)
float width, height, child_width, child_height;
StAlign x_align, y_align;
double x_align_factor, y_align_factor;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
child = st_bin_get_child (ST_BIN (self));
@@ -115,18 +116,17 @@ shell_slicer_paint_child (ShellSlicer *self)
child_width = child_box.x2 - child_box.x1;
child_height = child_box.y2 - child_box.y1;
cogl_push_matrix ();
cogl_clip_push_rectangle (0, 0, width, height);
cogl_translate ((int)(0.5 + x_align_factor * (width - child_width)),
(int)(0.5 + y_align_factor * (height - child_height)),
0);
cogl_framebuffer_push_matrix (fb);
cogl_framebuffer_push_rectangle_clip (fb, 0, 0, width, height);
cogl_framebuffer_translate (fb,
(int)(0.5 + x_align_factor * (width - child_width)),
(int)(0.5 + y_align_factor * (height - child_height)),
0);
clutter_actor_paint (child);
cogl_clip_pop ();
cogl_pop_matrix ();
cogl_framebuffer_pop_clip (fb);
cogl_framebuffer_pop_matrix (fb);
}
static void

View File

@@ -4,7 +4,6 @@
#include "shell-tray-icon.h"
#include "shell-gtk-embed.h"
#include "shell-window-tracker.h"
#include "tray/na-tray-child.h"
#include <gdk/gdkx.h>
#include <X11/Xatom.h>

View File

@@ -191,10 +191,8 @@ get_app_from_window_wmclass (MetaWindow *window)
{
ShellApp *app;
ShellAppSystem *appsys;
char *appid;
const char *wm_class;
const char *wm_instance;
char *with_desktop;
appsys = shell_app_system_get_default ();
@@ -372,12 +370,9 @@ static ShellApp *
get_app_for_window (ShellWindowTracker *tracker,
MetaWindow *window)
{
ShellAppSystem *app_system;
ShellApp *result = NULL;
const char *startup_id;
app_system = shell_app_system_get_default ();
/* First, we check whether we already know about this window,
* if so, just return that.
*/

View File

@@ -189,7 +189,6 @@ st_box_layout_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (object)->priv;
ClutterLayoutManager *layout;
StAdjustment *adjustment;
ClutterOrientation orientation;
@@ -388,19 +387,20 @@ st_box_layout_paint (ClutterActor *actor)
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)
{
cogl_push_matrix ();
cogl_translate ((int)x, (int)y, 0);
cogl_framebuffer_push_matrix (fb);
cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
}
st_widget_paint_background (ST_WIDGET (actor));
if (x != 0 || y != 0)
{
cogl_pop_matrix ();
cogl_framebuffer_pop_matrix (fb);
}
if (clutter_actor_get_n_children (actor) == 0)
@@ -418,10 +418,11 @@ st_box_layout_paint (ClutterActor *actor)
* the borders and background stay in place; after drawing the borders and
* background, we clip to the content area */
if (priv->hadjustment || priv->vadjustment)
cogl_clip_push_rectangle ((int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
cogl_framebuffer_push_rectangle_clip (fb,
(int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
for (child = clutter_actor_get_first_child (actor);
child != NULL;
@@ -429,7 +430,7 @@ st_box_layout_paint (ClutterActor *actor)
clutter_actor_paint (child);
if (priv->hadjustment || priv->vadjustment)
cogl_clip_pop ();
cogl_framebuffer_pop_clip (fb);
}
static void
@@ -443,19 +444,20 @@ st_box_layout_pick (ClutterActor *actor,
ClutterActorBox allocation_box;
ClutterActorBox content_box;
ClutterActor *child;
CoglFramebuffer *fb = cogl_get_draw_framebuffer ();
get_border_paint_offsets (self, &x, &y);
if (x != 0 || y != 0)
{
cogl_push_matrix ();
cogl_translate ((int)x, (int)y, 0);
cogl_framebuffer_push_matrix (fb);
cogl_framebuffer_translate (fb, (int)x, (int)y, 0);
}
CLUTTER_ACTOR_CLASS (st_box_layout_parent_class)->pick (actor, color);
if (x != 0 || y != 0)
{
cogl_pop_matrix ();
cogl_framebuffer_pop_matrix (fb);
}
if (clutter_actor_get_n_children (actor) == 0)
@@ -470,10 +472,11 @@ st_box_layout_pick (ClutterActor *actor,
content_box.y2 += y;
if (priv->hadjustment || priv->vadjustment)
cogl_clip_push_rectangle ((int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
cogl_framebuffer_push_rectangle_clip (fb,
(int)content_box.x1,
(int)content_box.y1,
(int)content_box.x2,
(int)content_box.y2);
for (child = clutter_actor_get_first_child (actor);
child != NULL;
@@ -481,7 +484,7 @@ st_box_layout_pick (ClutterActor *actor,
clutter_actor_paint (child);
if (priv->hadjustment || priv->vadjustment)
cogl_clip_pop ();
cogl_framebuffer_pop_clip (fb);
}
static gboolean
@@ -531,7 +534,6 @@ st_box_layout_get_paint_volume (ClutterActor *actor,
static void
st_box_layout_style_changed (StWidget *self)
{
StBoxLayoutPrivate *priv = ST_BOX_LAYOUT (self)->priv;
StThemeNode *theme_node = st_widget_get_theme_node (self);
ClutterBoxLayout *layout;
double spacing;

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