Compare commits

..

130 Commits

Author SHA1 Message Date
555d45f06c wip center layout garbage 2012-11-01 12:58:12 -04:00
0a8713770b overview, viewSelector: Don't use two signals for checking the app button
Just one will do.
2012-11-01 12:58:12 -04:00
7d3ea1ac68 overview, viewSelector: show/hide workspaces and message tray on apps button 2012-11-01 12:58:12 -04:00
7785710964 messageTray: Always show message tray upon entering overview
We hide the message tray while searching, but it should always be visible when
not searching, including when initially entering overview.
2012-11-01 12:58:12 -04:00
3730dc01cf viewSelector: remove switching from search results on app-drag-begin
https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:12 -04:00
66bf0df737 viewSelector: this.active --> this.entryNonEmpty
'active' isn't terribly clear about just what is active, this variable is
true/false depending on whether or not the search entry has text.

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:12 -04:00
4590b33f2e messageTray, viewSelector: show/hide message tray on search signals
https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:12 -04:00
6538f60322 overview: Connect app-drag signals to show/hide overview elements
Anytime we begin dragging an app launcher, ensure the overview elements are
showing. While searching, if an app-drag ends or is cancelled, hide the
overview elements, but don't switch back to windows (which was the old
behavior).

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:12 -04:00
4b0ba8b7b8 viewSelector, overview: Add search signals and connect them to hide/show
Hide the elements when the search entry is non-empty. Show them if the search
is cancelled.

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:11 -04:00
bc8965fe63 overview: Center the main overview group accordingly
Using the same logic as the panel which smartly centers everything,
smartly center the overview contents if we have enough space to do so.
2012-11-01 12:58:11 -04:00
e7fcce3484 overview, workspacesView: Use ThumbnailsBox for independent workspace thumbnails
Both WorkspacesDisplay and ThumbnailsBox need to know when windows have been
restacked. Instead of each tracking changes on their own or trying to call
each other, have the overview keep track and do the calculations, emitting
a signal with the result.

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:11 -04:00
b1e4d3335c workspaceThumbnail: Add keyboard nav to ThumbnailsBox
https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:11 -04:00
a3a3f24ed3 workspaceThumbnail: Rename show(), hide() and add new methods
show() and hide() now slide the thumbnails in and out, respectively. The old
show and hide are now _createThumbnails and _destroyThumbnails. We only care
about these thumbnails while in the overview, so create them when entering and
destroy them on exit.

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:11 -04:00
96191a9c96 workspaceThumbnail: React to scroll event
https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:11 -04:00
f4814d200b workspaceThumbnail: Make ThumbnailsBox track workspace changes itself
https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:11 -04:00
52156930d3 overview: Respect multi-monitor situations 2012-11-01 12:58:11 -04:00
cbaa999ced overview: overview as boxlayouts
https://bugzilla.gnome.org/show_bug.cgi?id=682286
2012-11-01 12:58:10 -04:00
9491f6bd23 dash: fix for shrinking dash while animating
The this.actor.height > this._maxHeight check is needed because animating the
dash out causes constant notify::height signals and so after each one the max
height would shrink to the actor height causing the icons to shrink until
eventually we get to 16px icons. This way, only increase maxHeight if the
actor can be drawn bigger than it is currently set.

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:10 -04:00
afe8198d4b dash: Add show/hide methods
https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:10 -04:00
6aa8f14285 overview and others: Rename item-drag signals to app-drag
Since results other than apps should not be draggable, be more descriptive and
rename item-drag signals to app-drag signals.

https://bugzilla.gnome.org/show_bug.cgi?id=682050
2012-11-01 12:58:09 -04:00
e073670c4d workspace: Don't recalculate window positions when leaving the overview
https://bugzilla.gnome.org/show_bug.cgi?id=682286
2012-11-01 12:58:09 -04:00
17a3d2c63f searchDisplay: Put the grid search results in the middle
This is still "off-balance" due to the dash on the left.
2012-11-01 12:58:09 -04:00
ca38e05ed4 appDisplay: Don't use icons in results for settings
The search results are not necessarily improved by including icons, so don't.

https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
9841e56ebf remoteSearch: We do not need a fallback for createIcon
Remote providers no longer have access to a grid layout, where an icon is
a requirement. If they don't specify an icon, don't create one.

https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
c0d3a14ac2 popupMenu: Break separator drawing code out of PopupSeparatorMenuItem
https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
d485fcf9ec appDisplay: Add provider icons for the search system
Only temporary, to test with, unless a remote provider for Settings doesn't
materialize. this.icon should be a GIcon since that is what remote providers
will return.

https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
ce2c5106f8 theme: Update for search redesign
https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
5e96c3dfb4 searchDisplay: Set can_focus on provider icon only if its results have focus
This way, the search results take priority, but while the user is in the
search section, they can navigate to that provider icon to launch a search.

https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
a72b642f3e searchDisplay: Add ListSearchResult and ListSearchResults
These are for all search results except apps.

https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
8507d3c4e4 searchDisplay, and others: Switch from provider title to provider icon
Display a '+' icon on the provider icon if there are more results that are
hidden. If the provider icon is clicked, ask the provider to launch itself and
perform a search with the current terms.

https://bugzilla.gnome.org/show_bug.cgi?id=681797
2012-11-01 12:58:09 -04:00
c985fdccba iconGrid: Handle preferred height requests for infinite widths
Request enough height to fit all children in a single line instead of
requesting 0.

https://bugzilla.gnome.org/show_bug.cgi?id=679168
2012-11-01 12:58:08 -04:00
1d7c2b1c26 centerLayout: Add some utilities to connect us up to CSS
This allows us to automatically adjust the "spacing" property of the
layout manager whenever the CSS changes.
2012-11-01 12:58:07 -04:00
ab60c628e7 panel: Abstract the centered panel logic out into a ClutterLayoutManager
Since we want to use this in the overview as well, put it into centerLayout.js

Panel corners are disabled for now. They'll be added back eventually.
2012-11-01 12:58:07 -04:00
2c34c8e20f Overview search box is too subtle
When it isn't focused, the search box can be quite hard to see.

The text/icon/border color is changed to be brighter in order to increase
contrast with the dark background and this works well with various
wallpapers.

https://bugzilla.gnome.org/show_bug.cgi?id=686479
2012-11-01 11:32:40 +00:00
d19fa731d6 Updated Polish translation 2012-10-31 19:15:34 +01:00
59bb1cc387 Add a setting to force the 'Log out' menuitem
I've heard quite a bit of feedback from people who want to log out,
even if they are the sole user on their system. It doesn't seem worth
alienating them over this; so add a setting to make the 'Log out' item
always show up.
https://bugzilla.gnome.org/show_bug.cgi?id=686057
2012-10-31 12:46:49 -04:00
56909d0646 Show 'Log out' in more situations
When the current user is a remote account, or a we are logged in
as root, we should always show 'Log out'.

https://bugzilla.gnome.org/show_bug.cgi?id=686736
2012-10-31 12:45:08 -04:00
04da29c939 appMenu: Update on icon theme changes
While we recreate icons on style changes elsewhere, the faded
icon in the application menu will stick around after icon theme
changes until another application is focused.

https://bugzilla.gnome.org/show_bug.cgi?id=687224
2012-10-31 00:06:46 +01:00
307f7a3024 IM status menu: adjust the combo popup background
The transparent background for available/unavailable IM status menu
makes the text difficult to read.

Simplifies that by using the default combo-popup background instead of a
custom one.

https://bugzilla.gnome.org/show_bug.cgi?id=658091
2012-10-30 22:51:50 +00:00
e80bfa39f5 userMenu: Use "offline" instead of "unavailable"
https://bugzilla.gnome.org/show_bug.cgi?id=687226
2012-10-30 23:01:22 +01:00
29714922ea calendar: Drop unnecessary libedataserverui dependency
The libedataserverui dependency is a relic of the old E-D-S API.
As of 3.6.0, E-D-S now centralizes authentication prompts so clients
don't have to display their own.  This also allows trading the GTK+
main loop for a plain GMainLoop in gnome-shell-calendar-server.c.

https://bugzilla.gnome.org/show_bug.cgi?id=687189
2012-10-30 14:18:39 -04:00
88192114ac NetworkAgent: cancel requests when disabling component
When the NetworkAgent is disabled (for example because the lock screen
is being activated), cancel all modal dialogs.

https://bugzilla.gnome.org/show_bug.cgi?id=685239
2012-10-30 16:34:13 +01:00
9d78208b76 NetworkMenu: don't use a global switch for all VPN connections
Stop pretending that VPN is a NMDevice, and split the useful bits into
a NMConnectionBased interface.
Make each connection have its own switch menu item and handle its own
status, and remove the VPN section title, which is no longer needed.

https://bugzilla.gnome.org/show_bug.cgi?id=682929
2012-10-30 16:08:33 +01:00
d817bf0395 theme: standardize the run dialog text styles a bit
Use the standard color for dialog headings, and use the standard
text style for the entry field. These tweaks make the dialog easier
to read.

https://bugzilla.gnome.org/show_bug.cgi?id=687127
2012-10-30 15:50:05 +01:00
4d51056226 runDialog: Remove "Run" button again
While not in the mockups, it was introduced during review of commit
0c807bddaf after discussion on IRC, but the designers disagree;
remove it again.

https://bugzilla.gnome.org/show_bug.cgi?id=687127
2012-10-30 15:50:05 +01:00
a607174a25 runDialog: Add entry to focus chain
Currently the entry takes the intial key focus, but is not actually
part of the focus chain. Fix that, even though keynav does not work
too well for the dialog anyway, due to the entry consuming tab for
command completion.

https://bugzilla.gnome.org/show_bug.cgi?id=687127
2012-10-30 15:50:05 +01:00
37d6a624b7 Improve the button insensitive style
The current insensitive style for buttons needs to be improved. Right
now we just change the text color: this doesn't make it clear that the
button is actually insensitive.

Instead of just changing the text color, we make the button background
almost transparent. We also make the text color the same as the border
color, use a thinner border.

This patch also simplifies some border rule overwrites to emphasis
only the border width is changed on focus, and makes the button look
closer to the mockups.

https://bugzilla.gnome.org/show_bug.cgi?id=687110
2012-10-30 12:35:48 +00:00
0c807bddaf runDialog: Better match style of other modal dialogs
Update the run dialog to
 - use a proper title
 - use dialog buttons
 - use the standard entry style

https://bugzilla.gnome.org/show_bug.cgi?id=687127
2012-10-29 19:12:12 +01:00
a0470bfc66 UnlockDialog: clear the password on failure
It is wrong, and the user can't correct it because it's obfuscated.
Just let him type it again.

https://bugzilla.gnome.org/show_bug.cgi?id=687132
2012-10-29 17:54:12 +01:00
b9463d23e8 ShellUserVerifier: fix fail counter
If it is updated after checking, it counts the number of failures
not including the current one, so it allows one extra attempt. Instead,
by updating it before checking, we get the expected result of dropping the
curtain at the third password.

https://bugzilla.gnome.org/show_bug.cgi?id=687132
2012-10-29 17:54:12 +01:00
04debd1623 LoginDialog: clear previous auth failed messages when trying again
When the user has the entered the password for the second time
and clicked OK, clear messages from the previous attempt, so any
new failure is shown clearly.

https://bugzilla.gnome.org/show_bug.cgi?id=687132
2012-10-29 17:54:11 +01:00
9d31576cf5 App search: Match GenericName too
This is making shell search results more useful in many cases,
such as 'web', 'browser', spreadsheet'.
https://bugzilla.gnome.org/show_bug.cgi?id=687121
2012-10-29 11:24:36 -04:00
8daca28a90 Updated Slovak translation 2012-10-28 19:50:05 +00:00
9899604261 Updated Slovak translation 2012-10-28 18:27:51 +00:00
687e1eabed Overview: Resize the window title labels on content change
Reposition the window overlay when the title changes, using the current
transformed size of the window clone.
Includes a test that changes title to a string of random length every 3 seconds.

Based on a patch by Alex Hultman <alexhultman@gmail.com>

https://bugzilla.gnome.org/show_bug.cgi?id=620874
2012-10-27 18:18:48 +02:00
eb09f34114 recorder: save recorded video as recent item
Often the first thing a user wants to do after making a recording
is post it somewhere.

This commit adds the video to recently used items, so that it shows
up prominently in open file choosers.

https://bugzilla.gnome.org/show_bug.cgi?id=680647
2012-10-26 13:29:30 -04:00
fbeb446ed7 recorder: rename "filename" property to "file-template"
The filename property is actually a template string with
substitution variables, not a filename.

This commit renames for clarity.

https://bugzilla.gnome.org/show_bug.cgi?id=680647
2012-10-26 13:29:30 -04:00
92033ce0f5 recorder: keep test-recorder alive until done recording
Recording continues for some time after the recorder object
is closed, since closing isn't a synchronous operation.

This commit defers quiting the test-recorder application until
the recording is finished.

https://bugzilla.gnome.org/show_bug.cgi?id=680647
2012-10-26 13:29:30 -04:00
9171bab5e5 recorder: keep recorder object alive until pipeline finishes
We want to make sure the recorder isn't finalized until the
saved recording hits disk.  This means the pipeline object needs
a hard reference on the recorder.

https://bugzilla.gnome.org/show_bug.cgi?id=680647
2012-10-26 13:29:30 -04:00
f9819eb7b0 recorder: Clean up stage lifetime handling
The stage is a floating object. We don't own a reference
to it, so we shouldn't unref it.

This commit removes the erroneous unref call and makes sure
we call clutter_actor_destroy on the stage when we're done
with it.

https://bugzilla.gnome.org/show_bug.cgi?id=680647
2012-10-26 13:29:30 -04:00
85728f0d15 layout: Use a MetaBackgroundActor, not a custom ClutterX11TexturePixmap
While looking at how the plymouth implementation was built, I was so
short-sighted and focused on the string "_XROOTPMAP_ID" that I didn't
realize it was the name of the standard background on the root window.
Remove our own implementation, and switch to using a standard mutter
MetaBackgroundActor.

https://bugzilla.gnome.org/show_bug.cgi?id=682428
2012-10-26 11:54:25 -04:00
9396849d56 message-tray: Restore Fittsability of summary items
The reactive area of tray items should extend to the screen edge. This
regressed when implementing the new tray design, make it work again.

https://bugzilla.gnome.org/show_bug.cgi?id=686474
2012-10-26 16:32:07 +02:00
6f5e5672bb panelMenu: Fix exception when destroying menuless button
There's explicit API to create PanelMenu.Buttons with no menu, so
guard against this case in destroy().

https://bugzilla.gnome.org/show_bug.cgi?id=686763
2012-10-26 15:49:26 +02:00
b936e60876 screenShield: Tweak curtain animation timings
Rationale:
 - Getting something out of the way should be quick;

 - Very few things in the real world move linearly so, linear
   animations, especially for something as big and visible as this,
   felt too artificial;

 - Moving the curtain out should start slower to make it feel like
   having weight (it fills the whole screen after all) but quickly
   accelerate towards the end to make it snappy too.

https://bugzilla.gnome.org/show_bug.cgi?id=686745
2012-10-26 12:56:17 +02:00
fa4bd91213 build: Stop linking gnome-desktop
Since commit 80eac7370e removed the last build-time dependency ages
ago, we only use GnomeDesktop via introspection.
2012-10-26 12:37:33 +02:00
81eeef7d3c messageTray: Hide summary notification immediately when closing the tray
When the summary notification is open when the tray is closed, we end
up with two concurrent animations: the notification fading out, and the
tray moving away from underneath it. Sliding out the tray should be the
primary transition here, so hide the notification immediately to not
draw the user's attention away from it.

https://bugzilla.gnome.org/show_bug.cgi?id=686888
2012-10-25 22:45:36 +02:00
a7b5134820 messageTray: Hide notification close button immediately on click
Having the close button move away from under the pointer after
clicking it is confusing and distracts from the main transition,
which is hiding the notification. Just hide it immediately.

https://bugzilla.gnome.org/show_bug.cgi?id=682237
2012-10-25 22:41:32 +02:00
92a01c67ba messageTray: Don't destroy the notification when clicking on the close button
Clicking on the close button should simply hide the notification.

https://bugzilla.gnome.org/show_bug.cgi?id=682237
2012-10-25 22:41:32 +02:00
71c23613b5 messageTray: Only hide the notification stack on clicking close
Rather than destroying the entire source, which is unintuitive, simply
close the notification. Removing the entire source is still possible
by right-clicking on the summary item and choosing "Remove".

https://bugzilla.gnome.org/show_bug.cgi?id=682237
2012-10-25 22:41:05 +02:00
4f876995de messageTray: make SummaryItem._closeButton public
Use this to show/hide the close button instead of closeButtonVisible.

https://bugzilla.gnome.org/show_bug.cgi?id=682237
2012-10-25 21:45:18 +02:00
9cf4a76196 po: Enforce RTL in fa/ug for messages that might end up as LTR
See commit 8b796d80a7.

https://bugzilla.gnome.org/show_bug.cgi?id=686630
2012-10-25 20:12:25 +02:00
9efe5287e4 gdm: Move logo into the panel
GDM has a 'logo' key in its schema to allow distributors to add
some branding. It is currently placed above the user list, which
no longer works too well since the login screen lost its dialog
window. Display the logo in the top-left corner instead of the
Activities button instead.

https://bugzilla.gnome.org/show_bug.cgi?id=685852
2012-10-25 18:31:16 +02:00
8c4b34de4e messageTray: Fix close button position in RTL locales 2012-10-25 18:31:16 +02:00
93e3559dc3 style: Adjust close button overlap
After changing the button size, we need to adjust the x-offset by
1px (apparently the y-offset already assumed the correct size).
2012-10-25 18:31:16 +02:00
caa0f63e1f style: Fix close button size
The image is actually 32px, so we end up with a slightly fuzzy
button when scaling up to 34px. Don't do that.

Spotted by lamefun.xOr<at>gmail.com

https://bugzilla.gnome.org/show_bug.cgi?id=686574
2012-10-25 18:27:59 +02:00
a4e29e1244 calendar: Handle calendar-server errors
The current code assumes that the GetEvents call will always
receive, causing an exception in the error case.

https://bugzilla.gnome.org/show_bug.cgi?id=686805
2012-10-24 18:26:03 +02:00
599f2f43e3 Revert "screenShield: Connect to the actor's show signal instead of using BEFORE_REDRAW"
This reverts commit bdeb7d86b6.

git bz PEBKAC
2012-10-24 10:17:43 -04:00
3a453c5f73 messageTray: Fix lightbox
Commit 448517032e accidentally reverted the condition for showing
the lightbox. Fix that.

https://bugzilla.gnome.org/show_bug.cgi?id=686728
2012-10-24 09:03:12 +02:00
98b313c75f popupMenu: Overwrite ongoing animations when calling close repeatedly
Currently close() is a no-op when the menu has already been closed.
However, repeated calls could pass different animation parameters.
For instance in the user menu, we try to hide the menu immediately
before locking the screen, to avoid the popup jumping across the
screen while fading out - as we do this from the corresponding
item's activate handler, the closing is still animated if the menu's
own handler (which requests a full animation) is run first.
Fix this by changing close() to overwrite ongoing animations before
bailing out early.

https://bugzilla.gnome.org/show_bug.cgi?id=686484
2012-10-23 22:21:45 +02:00
8b796d80a7 po: Enforce RTL in he for messages that might end up as LTR
As the messages start with a string placeholder that might be
untranslated, we need an explicit mark to ensure that the string
does not end up as LTR.

https://bugzilla.gnome.org/show_bug.cgi?id=686630
2012-10-23 22:21:45 +02:00
719a8908a6 Release 3.7.1
Update NEWS
2012-10-23 21:14:10 +02:00
fed007ecae userMenu: Use LoginManager for suspend
https://bugzilla.gnome.org/show_bug.cgi?id=686482
2012-10-23 21:14:10 +02:00
990443465f powerMenu: Use LoginManager for suspend
https://bugzilla.gnome.org/show_bug.cgi?id=686482
2012-10-23 21:14:10 +02:00
1f183b8a4e loginManager: Add support for suspend()
Logind provides a Suspend method, which we should use instead of
the UPower API when available. Expose this in loginManager, using
the UPower API for the ConsoleKit implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=686482
2012-10-23 21:14:10 +02:00
96556eb959 workspacesView: Add some more spacing between window and workspace thumbs
https://bugzilla.gnome.org/show_bug.cgi?id=582650
2012-10-23 15:12:45 -04:00
3ffeeac577 overview: Reduce space between window picker and dash
Do this in a hacky way by hardcoding this, for now. When we land
search rework, we can fix this.

https://bugzilla.gnome.org/show_bug.cgi?id=582650
2012-10-23 15:12:45 -04:00
d7929a2340 workspacesView: Don't conform to aspect ratio
We want the window picker to use the full height of the area it's given.

https://bugzilla.gnome.org/show_bug.cgi?id=582650
2012-10-23 15:12:45 -04:00
667019a8c1 workspace: Don't relayout windows when zooming workspace thumbnails
It looks ugly and busy to have windows shuffle around when I just wanted
to look at my workspaces.

https://bugzilla.gnome.org/show_bug.cgi?id=582650
2012-10-23 15:12:45 -04:00
d9b46b4782 workspace: Use all available space for windows in window selector
Change the layout strategy to be more like the mockups. With less than
two rows of windows, we try to fit every window in a non-aligned situation;
with more than three rows of windows, we try to fit every window in an
aligned situation.

Based heavily on a patch from Pierre-Eric Pelloux-Prayer <pelloux@gmail.com>

https://bugzilla.gnome.org/show_bug.cgi?id=582650
2012-10-23 15:12:45 -04:00
e249218a9d Allow testing GDM login dialog from the session
Check an environment variable, GDM_GREETER_TEST. If 1, LoginDialog will
skip anything that fails outside a GDM session.
It is therefore possible to test the GDM greeter without installing it
system-wide, by attempting login as the already logged in user (uses the
same code path as the unlock dialog).

https://bugzilla.gnome.org/show_bug.cgi?id=683725
2012-10-23 19:09:00 +02:00
a2b1946b01 workspacesView: Fix updating when number of workspaces changes
Ouch. This went unnoticed for a long time as by default (using
dynamic workspaces) only one workspace is added at a time, which
happens to work fine.

https://bugzilla.gnome.org/show_bug.cgi?id=686487
2012-10-23 18:27:07 +02:00
96a80f7ba0 workspacesView: Fix typo
We want to check for a setting, not the existence of a function.

https://bugzilla.gnome.org/show_bug.cgi?id=686487
2012-10-23 18:27:07 +02:00
9955fbf4f8 Updated Greek translation 2012-10-23 15:41:32 +03:00
14966b0cd0 Telepathy: Set empathy-chat as prefered handler when delegating channels
https://bugzilla.gnome.org/show_bug.cgi?id=686296
2012-10-23 12:37:05 +02:00
6e1a8f16a8 build: Bump gnome-desktop required version for GnomeIdleMonitor 2012-10-23 09:19:03 +02:00
d106191e6a Port to GnomeIdleMonitor
https://bugzilla.gnome.org/show_bug.cgi?id=682224
2012-10-22 12:06:45 -04:00
418cf6281e screenShield: explicitly load gnome-screensaver in fallback mode.
When running gnome-shell from lightDM, gnome-screensaver is no
longer auto-loaded. As a result the dbus calls for Lock user etc
will fail.

https://bugzilla.gnome.org/show_bug.cgi?id=683060
Bug-Ubuntu: https://launchpad.net/bugs/1064354
2012-10-22 11:21:18 -04:00
bdeb7d86b6 screenShield: Connect to the actor's show signal instead of using BEFORE_REDRAW
This should make sure that we grab at the right time while at the same time
not break focus handling.

https://bugzilla.gnome.org/show_bug.cgi?id=684650
2012-10-22 11:20:30 -04:00
a0e0cc1038 workspacesView: Simplify extraWorkspaces handling
https://bugzilla.gnome.org/show_bug.cgi?id=686002
2012-10-21 18:53:48 -04:00
78f6dec73b workspacesView: Don't show workspace switcher when it doesn't make sense
Hide workspace switcher if dynamic workspaces is disabled and number of
workspaces is set to one only, since the user is bound to only one workspace
and showing the switcher is redundant.

Signed-off-by: Seif Lotfy <seif@lotfy.com>
2012-10-20 01:39:52 +02:00
f6458f215f userMenu: Hide menu immediately before suspending
The same logic as for commit 1f30670c1d applies to the case
where we lock the screen before suspending - we don't want the
menu to jump to the opposite screen side to fade out, so remove
the animation altogether.

https://bugzilla.gnome.org/show_bug.cgi?id=686484
2012-10-19 19:09:41 +02:00
c7e0d547c4 Add missing translations for GSetting schema
These are showing in the UI of gnome-tweak-tool.

https://bugzilla.gnome.org/show_bug.cgi?id=686413
2012-10-18 22:58:51 +02:00
fa54cfa0c3 Updated slovak translation 2012-10-18 20:41:36 +02:00
31ea3f737c messageTray: Remove hack for the lack of negative units in libcroco
libcroco now has native support for negative units.

https://bugzilla.gnome.org/show_bug.cgi?id=686240
2012-10-18 12:50:49 -04:00
2a8a8065a8 ScreenShield: implement o.g.ScreenSaver.GetActiveTime
Part of the old gnome-screensaver interface, returns the number of seconds
that the screensaver has been active for.

https://bugzilla.gnome.org/show_bug.cgi?id=686064
2012-10-18 15:30:40 +02:00
d3ba002313 st: Remove unused methods
This reverts commits cd024e21f0 and dc9ad8df80.

https://bugzilla.gnome.org/show_bug.cgi?id=679268
2012-10-17 23:25:56 +02:00
f18fd8d959 userMenu: Rely on automatic texture changes
This reverts commit 6f3cf0ae50.

https://bugzilla.gnome.org/show_bug.cgi?id=679268
2012-10-17 23:25:56 +02:00
d54f7b13fb st-widget: Keep background-image and border-image updated
Currently we miss changes to a file referenced in background-image
or border-image.
Connect to the StTextureCache::texture-file-changed signal to keep
up with file changes and update the drawing state if necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=679268
2012-10-17 23:25:56 +02:00
9c8b75206c st-texture-cache: Add texture-file-changed signal
For textures loaded from files, the cache might hide image changes
by keeping the data of a previous version around indefinitely. For
instance AccountsService will notify of avatar changes, but as new
image is copied over the old one, we will continue to use the old
image data.
Install a file monitor for each file resource we load and clear
the corresponding data from the cache on changes, emitting the
new StTextureCache::texture-file-changed signal.

https://bugzilla.gnome.org/show_bug.cgi?id=679268
2012-10-17 23:25:56 +02:00
15273c7f22 st: Canonicalize URLs in stylesheets
Make _st_theme_resolve_url() a bit smarter by canonicalizing the
resulting path (e.g. resolving references to /./ and /../).

https://bugzilla.gnome.org/show_bug.cgi?id=679268
2012-10-17 23:25:56 +02:00
0ea8217c55 st: Fix handling of file:// URIs in _st_theme_resolve_uri()
https://bugzilla.gnome.org/show_bug.cgi?id=679268
2012-10-17 23:03:07 +02:00
1735f28f5a Remove use of deprecated g_type_init () ...
... and bump GObject requirement accordingly.

https://bugzilla.gnome.org/show_bug.cgi?id=686318
2012-10-17 22:49:32 +02:00
8de4070f7f autorunManager: Stop erring on the side of caution for network mounts
Every mount that we care about that's local should have a GVolume
associated with it.

https://bugzilla.gnome.org/show_bug.cgi?id=686241
2012-10-17 12:24:45 -04:00
45e64f453f runDialog: Use a symbolic icon
Another fallout from the St.IconType changes

https://bugzilla.gnome.org/show_bug.cgi?id=686233
2012-10-17 12:04:28 -04:00
62dc5f2ac6 Updated Serbian translation 2012-10-17 10:09:46 +02:00
86c85a752e loginScreen: Add support for 'disable-restart-buttons'
GDM's GSettings schema contains a 'disable-restart-buttons' key
that currently is only supported by the fallback greeter.
Implement support in the shell greeter as well.

https://bugzilla.gnome.org/show_bug.cgi?id=686247
2012-10-16 22:57:37 +02:00
3de0ebf7fd messageTray: Change timestamp string formats
The timestamps before contained unnecessary information.
Additionally, align the timestamps to be in the middle of the
bubble for design reasons.

https://bugzilla.gnome.org/show_bug.cgi?id=680989
2012-10-16 22:35:10 +02:00
1496ba0bbd messageTray: Clean up "TODO" code
The code here says to remove it after the GNOME3 release. Better late
than never.
2012-10-16 12:20:46 -04:00
f5974f6793 messageTray: Primarily use a GIcon to drive the source's icon
This is a bit of a cleanup since we ported notification icons/secondary
icons to be in the same situation.

https://bugzilla.gnome.org/show_bug.cgi?id=680426
2012-10-16 12:14:16 -04:00
928ea3bb01 messageTray: Use a GIcon for a notification's icon/secondary icon
Using a GIcon instead of an actor means that we can always create
a new icon with the right size from an old icon.

https://bugzilla.gnome.org/show_bug.cgi?id=680426
2012-10-16 12:14:16 -04:00
b7acb1d488 st-texture-cache: Remove load_icon_name
With the St.Icon bug fixed, we have removed the last use of load_icon_name.
Celebration time!
2012-10-16 11:01:25 -04:00
360d94dd67 modalDialog: Remove the fade in buttons code
Due to a typo, it never worked correctly. After a fix-up to the appropriate
method, the behavior is suboptimal, as the buttons only fade in the first time
the modal dialog is constructed. Just remove the fade-in behavior, rather than
keeping this non-working code around.

https://bugzilla.gnome.org/show_bug.cgi?id=677426
2012-10-16 10:49:20 -04:00
671a813135 Updated Japanese translation 2012-10-16 23:30:05 +09:00
c005417f9b Updated Galician translations 2012-10-16 14:22:21 +02:00
b5ec68bda3 Updated Spanish translation 2012-10-16 11:11:40 +02:00
b4ed29094d Updated Belarusian translation. 2012-10-16 12:05:56 +03:00
284ab031b8 Updated Slovenian translation 2012-10-16 08:34:57 +02:00
6ad5064c09 Updated Indonesian translation 2012-10-16 07:15:32 +07:00
3a8e723a36 data: Expose '<Super>F10' shortcut in System Settings
https://bugzilla.gnome.org/show_bug.cgi?id=672909
2012-10-16 01:38:12 +02:00
dd3484b93f dash: Open 'Show Apps' with Super+A
This is a workaround for power users for the "Show Apps" button
placement being too inconvenient to press at the bottom of the
dash favorites list.

Unity also uses Super+A to show the Apps lens.

https://bugzilla.gnome.org/show_bug.cgi?id=685738
2012-10-16 01:38:12 +02:00
84 changed files with 4577 additions and 4421 deletions

1
.gitignore vendored
View File

@ -45,7 +45,6 @@ intltool-merge.in
intltool-update.in
libtool
m4/
man/gnome-shell.1
omf.make
po/*.gmo
po/gnome-shell.pot

View File

@ -1,11 +1,7 @@
# Point to our macro directory and pick up user flags from the environment
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = data js src browser-plugin tests po docs
if ENABLE_MAN
SUBDIRS += man
endif
SUBDIRS = data js src browser-plugin tests po man docs
EXTRA_DIST = \
.project \
@ -25,4 +21,4 @@ distcheck-hook:
@echo "Checking disted files against files in git"
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc

44
NEWS
View File

@ -1,34 +1,32 @@
3.6.2
3.7.1
=====
* Add shortcut to open application view directly [Jeremy; #685738]
* Expose '<Super>F10' shortcut in System Settings [Florian; #672909]
* Clean up timestamp format in chat notifications [Carlos; #680989]
* loginScreen: Add support for 'disable-restart-buttons' [Florian; #686247]
* Update textures automatically on file changes [Florian; #679268]
* Implement org.gnome.ScreenSaver.GetActiveTime [Giovanni; #686064]
* Add missing translations for GSetting schema [Giovanni; #686413]
* Hide workspace switcher completely when it's not necessary [Seif; #686483]
* Explicitly load gnome-screensaver when not running GDM [Tim; #683060]
* Port to GnomeIdleMonitor [Jasper; #682224]
* Set Empathy as preferred handler when delegating channels [Xavier; #686296]
* Tweak screenShield animations [Rui; #686745]
* Restore Fittsability of summary items in message tray [Florian; #686474]
* App search: Match GenericName too [Matthias; #687121]
* Add setting to force log out menuitem [Matthias; #686057]
* Fix auto-scroll to bottom in chat notifications [Sjoerd; #686571]
* Update man page [Matthias; #680601]
* Hide notifications when closed button is clicked [Jasper, Florian; #682237]
* Fix screenshots on Big Endian [Owen; #685915]
* Implement 'disable-user-list' in login screen [Ray; #660660]
* Misc bugfixes [Jasper, Florian, Giovanni, Matthew, Matthias, Alejandro,
Sebastian; #686233, #686484, #686487, #686630, #686728, #686574, #686574,
#686574, #686879, #686763, #685239, #687189, #686736, #686583, #687132,
#687958, #687020, #687708, #686888, #686530, #684810, #688181]
* Allow testing GDM login dialog from the session [Giovanni; #683725]
* Use all available space for windows in window picker [Jasper, Pierre-Eric;
#582650]
* Use logind for suspend if available [Florian; #686482]
* Misc. fixes and cleanups [Jasper, Florian, Adel, Rui; #677426, #680426,
#686233, #686241, #686318, #686240, #686484, #686002, #684650, #686487]
Contributors:
Matthew Barnes, Giovanni Campagna, Xavier Claessens, Matthias Clasen,
Sebastian Keller, Tim Lunn, Rui Matos, Florian Müllner, Alejandro Piñeiro,
Sjoerd Simons, Jasper St. Pierre, Ray Strode, Owen Taylor
Jeremy Bicha, Giovanni Campagna, Xavier Claessens, Adel Gadllah, Seif Lotfy,
Tim Lunn, Rui Matos, Florian Müllner, Pierre-Eric Pelloux-Prayer,
Carlos Soriano, Jasper St. Pierre
Translations:
Takayuki KUSANO [ja], Dušan Kazik [sk], Mattias Põldaru [et],
Tom Tryfonidis [el], Sweta Kothari [gu], Matej Urbančič [sl], Piotr Drąg [pl],
Fran Diéguez [gl], Aurimas Černius [lt], Kjartan Maraas [nb],
Ihar Hrachyshka [be], Мирослав Николић [sr, sr@latin], Gil Forcada [ca],
A S Alam [pa], Yuri Myasoedov [ru], Marek Černocký [cs], Sweta Kothari [gu],
Wolfgang Stöggl [de], Daniel Mustieles [es]
Andika Triwidada [id], Matej Urbančič [sl], Ihar Hrachyshka [be],
Daniel Mustieles [es], Fran Diéguez [gl], Takayuki KUSANO [ja],
Мирослав Николић [sr, sr@latin], Dušan Kazik [sk], Tom Tryfonidis [el]
3.6.1
=====

View File

@ -153,8 +153,6 @@ NP_Initialize(NPNetscapeFuncs *pfuncs, NPPluginFuncs *plugin)
/* global initialization routine, called once when plugin
is loaded */
g_type_init ();
g_debug ("plugin loaded");
memcpy (&funcs, pfuncs, sizeof (funcs));

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.6.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.7.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])
@ -36,8 +36,6 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
PKG_PROG_PKG_CONFIG([0.22])
AC_PATH_PROG([XSLTPROC], [xsltproc])
GLIB_GSETTINGS
# Get a value to substitute into gnome-shell.in
@ -54,7 +52,7 @@ AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
AC_MSG_RESULT(yes)
build_recorder=true
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11"
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11 gtk+-3.0"
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules clutter-1.0 xfixes gl)
else
AC_MSG_RESULT(no)
@ -65,9 +63,9 @@ AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
CLUTTER_MIN_VERSION=1.11.11
GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
GJS_MIN_VERSION=1.33.2
MUTTER_MIN_VERSION=3.6.2
MUTTER_MIN_VERSION=3.7.1
GTK_MIN_VERSION=3.3.9
GIO_MIN_VERSION=2.31.6
GIO_MIN_VERSION=2.35.0
LIBECAL_MIN_VERSION=3.5.3
LIBEDATASERVER_MIN_VERSION=3.5.3
LIBEDATASERVERUI_MIN_VERSION=3.5.3
@ -76,7 +74,7 @@ TELEPATHY_LOGGER_MIN_VERSION=0.2.4
POLKIT_MIN_VERSION=0.100
STARTUP_NOTIFICATION_MIN_VERSION=0.11
GCR_MIN_VERSION=3.3.90
GNOME_DESKTOP_REQUIRED_VERSION=3.5.1
GNOME_DESKTOP_REQUIRED_VERSION=3.7.1
GNOME_MENUS_REQUIRED_VERSION=3.5.3
# Collect more than 20 libraries for a prize!
@ -99,8 +97,7 @@ PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
telepathy-logger-0.2 >= $TELEPATHY_LOGGER_MIN_VERSION
polkit-agent-1 >= $POLKIT_MIN_VERSION xfixes
libnm-glib libnm-util gnome-keyring-1
gcr-3 >= $GCR_MIN_VERSION
gnome-desktop-3.0 >= $GNOME_DESKTOP_REQUIRED_VERSION)
gcr-3 >= $GCR_MIN_VERSION)
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
@ -122,7 +119,7 @@ CFLAGS=$saved_CFLAGS
LIBS=$saved_LIBS
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.2 x11)
PKG_CHECK_MODULES(ST, clutter-1.0 gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
PKG_CHECK_MODULES(TRAY, gtk+-3.0)
PKG_CHECK_MODULES(GVC, libpulse libpulse-mainloop-glib gobject-2.0)
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.5.4)
@ -210,18 +207,6 @@ AC_SUBST(TYPELIBDIR)
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
AC_ARG_ENABLE(man,
[AS_HELP_STRING([--enable-man],
[generate man pages [default=yes]])],,
enable_man=yes)
if test "$enable_man" != no; then
AC_PATH_PROG([XSLTPROC], [xsltproc])
if test -z "$XSLTPROC"; then
AC_MSG_ERROR([xsltproc is required for --enable-man])
fi
fi
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
# Stay command-line compatible with the gnome-common configure option. Here
# minimum/yes/maximum are the same, however.
AC_ARG_ENABLE(compile_warnings,

View File

@ -8,5 +8,11 @@
<KeyListEntry name="toggle-message-tray"
_description="Show the message tray"/>
<KeyListEntry name="toggle-application-view"
_description="Show all applications"/>
<KeyListEntry name="open-application-menu"
_description="Open the application menu"/>
</KeyListEntries>

View File

@ -113,9 +113,13 @@
<doc:summary>
<doc:para>
A dictionary describing the given search result, containing
'id', 'name' (both strings) and either 'icon' (a serialized
GIcon) or 'icon-data' (raw image data as (iiibiiay) - width,
height, rowstride, has-alpha, bits per sample, channels, data)
'id' and 'name' (both strings). Optionally, either 'gicon' (a
serialized GIcon) or 'icon-data' (raw image data as (iiibiiay)
- width, height, rowstride, has-alpha, bits per sample,
channels, data) can be specified if the result can be better
served with a thumbnail of the content (such as with images).
A 'description' field (string) may also be specified if more
context would help the user find the desired result.
</doc:para>
</doc:summary>
</doc:doc>
@ -143,5 +147,25 @@
</doc:doc>
</arg>
</method>
<method name="LaunchSearch">
<doc:doc>
<doc:description>
<doc:para>
Called when the user clicks on the provider icon. The provider
application should open and run the active search term itself.
</doc:para>
</doc:description>
</doc:doc>
<arg type="as" direction="in">
<doc:doc>
<doc:summary>
<doc:para>
The current search term(s).
</doc:para>
</doc:summary>
</doc:doc>
</arg>
</method>
</interface>
</node>

View File

@ -91,6 +91,14 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
Keybinding to open the application menu.
</_description>
</key>
<key name="toggle-application-view" type="as">
<default>["&lt;Super&gt;a"]</default>
<_summary>Keybinding to open the "Show Applications" view</_summary>
<_description>
Keybinding to open the "Show Applications" view of the Activities
Overview.
</_description>
</key>
<key name="toggle-message-tray" type="as">
<default>["&lt;Super&gt;m"]</default>
<_summary>Keybinding to toggle the visibility of the message tray</_summary>
@ -156,47 +164,48 @@ value here is from the GsmPresenceStatus enumeration.</_summary>
</key>
</schema>
<schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/">
<schema id="org.gnome.shell.overrides" path="/org/gnome/shell/overrides/"
gettext-domain="@GETTEXT_PACKAGE@">
<key name="attach-modal-dialogs" type="b">
<default>true</default>
<summary>Attach modal dialog to the parent window</summary>
<description>
<_summary>Attach modal dialog to the parent window</_summary>
<_description>
This key overrides the key in org.gnome.mutter when running
GNOME Shell.
</description>
</_description>
</key>
<key name="button-layout" type="s">
<default>":close"</default>
<summary>Arrangement of buttons on the titlebar</summary>
<description>
<_summary>Arrangement of buttons on the titlebar</_summary>
<_description>
This key overrides the key in org.gnome.desktop.wm.preferences when
running GNOME Shell.
</description>
</_description>
</key>
<key name="edge-tiling" type="b">
<default>true</default>
<summary>Enable edge tiling when dropping windows on screen edges</summary>
<description>
<_summary>Enable edge tiling when dropping windows on screen edges</_summary>
<_description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</_description>
</key>
<key name="dynamic-workspaces" type="b">
<default>true</default>
<summary>Workspaces are managed dynamically</summary>
<description>
<_summary>Workspaces are managed dynamically</_summary>
<_description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</_description>
</key>
<key name="workspaces-only-on-primary" type="b">
<default>true</default>
<summary>Workspaces only on primary monitor</summary>
<description>
<_summary>Workspaces only on primary monitor</_summary>
<_description>
This key overrides the key in org.gnome.mutter when running GNOME Shell.
</description>
</_description>
</key>
<key name="focus-change-on-pointer-rest" type="b">

View File

@ -39,7 +39,6 @@ stage {
/* small */
.app-well-menu,
.contact-details-status,
.run-dialog-label,
.run-dialog-error-label {
font-size: 9pt;
}
@ -311,7 +310,7 @@ StScrollBar StButton#vhandle:active {
.notification-icon-button:focus,
.hotplug-notification-item:focus,
.modal-dialog-button:focus {
border: 2px solid #8b8b8b;
border-width: 2px;
}
.dash-search-button:active,
@ -326,17 +325,20 @@ StScrollBar StButton#vhandle:active {
background-gradient-end: rgba(255, 255, 255, 0.2);
}
.notification-button:insensitive,
.notification-icon-button:insensitive,
.notification-button:insensitive {
.modal-dialog-button:insensitive {
border-color: #666666;
color: #9f9f9f;
background-gradient-direction: none;
background-color: rgba(102, 102, 102, 0.15);
}
/* Entries */
#searchEntry,
.notification StEntry,
.login-dialog-prompt-entry,
.prompt-dialog-password-entry {
.modal-dialog StEntry {
color: rgb(64, 64, 64);
caret-color: rgb(64, 64, 64);
font-size: 12pt;
@ -346,6 +348,7 @@ StScrollBar StButton#vhandle:active {
}
#searchEntry,
.run-dialog-entry,
.notification StEntry {
border: 2px solid rgba(245,245,245,0.2);
background-gradient-start: rgba(5,5,6,0.1);
@ -358,8 +361,7 @@ StScrollBar StButton#vhandle:active {
#searchEntry:focus,
#searchEntry:hover,
.notification StEntry:focus,
.login-dialog-prompt-entry,
.prompt-dialog-password-entry {
.modal-dialog StEntry {
border: 2px solid rgb(136,138,133);
background-gradient-start: rgb(200,200,200);
background-gradient-end: white;
@ -368,12 +370,17 @@ StScrollBar StButton#vhandle:active {
}
.notification StEntry:focus,
.prompt-dialog-password-entry:focus,
.login-dialog-prompt-entry:focus {
.modal-dialog StEntry:focus {
border: 2px solid #3465a4;
}
#searchEntry {
border-color: rgba(245,245,245,0.3);
color: rgb(192, 192, 192);
caret-color: rgb(192, 192, 192);
}
#searchEntry:hover {
color: rgb(128, 128, 128);
caret-color: rgb(128, 128, 128);
}
@ -386,8 +393,7 @@ StScrollBar StButton#vhandle:active {
}
.notification StEntry,
.prompt-dialog-password-entry,
.login-dialog-prompt-entry {
.modal-dialog StEntry {
border-radius: 5px;
padding: 4px 4px;
}
@ -551,7 +557,6 @@ StScrollBar StButton#vhandle:active {
}
.status-chooser-combo.popup-combo-menu {
background-color: rgba(0,0,0,0.7);
padding: .4em 0em;
border-radius: 4px;
border: 1px solid #5f5f5f;
@ -569,6 +574,10 @@ StScrollBar StButton#vhandle:active {
/* Overview */
#overview {
spacing: 40px;
}
#overview-group {
spacing: 12px;
}
@ -633,13 +642,25 @@ StScrollBar StButton#vhandle:active {
* adjust down 8px */
-shell-close-overlap-x: 14px;
-shell-close-overlap-y: 12px;
-shell-close-overlap-y: -12px;
}
.notification-close:rtl {
/* as above, but starting out in the top left of the
* notification. */
-shell-close-overlap-x: -14px;
}
.window-close:rtl {
-st-background-image-shadow: 2px 2px 6px rgba(0,0,0,0.5);
}
.window-picker {
-horizontal-spacing: 40px;
-vertical-spacing: 40px;
}
/* Dash */
#dash {
@ -677,6 +698,11 @@ StScrollBar StButton#vhandle:active {
.search-entry-icon {
icon-size: 1em;
color: #c0c0c0;
}
#searchEntry:hover .search-entry-icon,
#searchEntry:focus .search-entry-icon {
color: #8d8f8a;
}
@ -689,7 +715,7 @@ StScrollBar StButton#vhandle:active {
#searchResultsContent {
padding-right: 20px;
spacing: 36px;
spacing: 16px;
}
#searchResultsContent:rtl {
@ -697,6 +723,25 @@ StScrollBar StButton#vhandle:active {
padding-left: 20px;
}
.search-section {
/* This should be equal to #searchResultsContent spacing */
spacing: 16px;
}
.search-section-separator {
-gradient-height: 1px;
-gradient-start: rgba(255,255,255,0);
-gradient-end: rgba(255,255,255,0.5);
-margin-horizontal: 1.5em;
height: 1px;
}
.search-section-content {
/* This is the space between the provider icon and the results container */
spacing: 25px;
}
.search-statustext,
.search-section-header {
padding: 4px 12px;
spacing: 4px;
@ -722,6 +767,14 @@ StScrollBar StButton#vhandle:active {
spacing: 4px;
}
.search-providers-box {
spacing: 12px;
}
.results-list {
spacing: 5px;
}
/* Text labels are an odd number of pixels tall. The uneven top and bottom
* padding compensates for this and ensures that the label is vertically
* centered */
@ -802,7 +855,10 @@ StScrollBar StButton#vhandle:active {
.app-well-app > .overview-icon,
.show-apps > .overview-icon,
.search-result-content > .overview-icon {
.remove-favorite > .overview-icon,
.search-section-icon-bin,
.search-result,
.grid-search-result-content > .overview-icon {
border-radius: 4px;
padding: 3px;
border: 1px rgba(0,0,0,0);
@ -818,7 +874,10 @@ StScrollBar StButton#vhandle:active {
.app-well-app:hover > .overview-icon,
.show-apps:hover > .overview-icon,
.search-result-content:hover > .overview-icon {
.remove-favorite:hover > .overview-icon,
.search-section-icon-bin:hover,
.search-result:hover,
.grid-search-result-content:hover > .overview-icon {
background-color: rgba(255,255,255,0.1);
text-shadow: black 0px 2px 2px;
transition-duration: 100;
@ -853,13 +912,39 @@ StScrollBar StButton#vhandle:active {
}
.app-well-app:focus > .overview-icon,
.search-result-content:focus > .overview-icon,
.show-apps:focus > .overview-icon,
.search-section-icon-bin:focus,
.search-result:focus,
.grid-search-result-content:focus > .overview-icon,
.app-well-app:selected > .overview-icon,
.search-result-content:selected > .overview-icon {
.search-section-icon-bin:selected,
.search-result:selected,
.grid-search-result-content:selected > .overview-icon {
background-color: rgba(255,255,255,0.33);
}
/* List Results */
.search-result {
padding: 15px;
}
.search-result-content {
spacing: 12px;
}
.search-result-details {
font-weight: bold;
}
.search-result-details-title {
font-size: 16pt;
}
.search-result-details-description {
font-size: 14pt;
}
/* LookingGlass */
#LookingGlassDialog {
@ -1624,35 +1709,26 @@ StScrollBar StButton#vhandle:active {
padding: 4px 32px 5px;
}
.modal-dialog-button:insensitive {
color: rgb(60, 60, 60);
}
.modal-dialog-button:focus {
padding: 3px 31px 4px;
}
/* Run Dialog */
.run-dialog-label {
font-size: 12pt;
font-weight: bold;
color: #999999;
padding-bottom: .4em;
}
.run-dialog-error-box {
padding-top: 15px;
spacing: 5px;
}
.run-dialog-entry {
font-weight: bold;
width: 23em;
selection-background-color: white;
selected-color: black;
}
.run-dialog {
border-radius: 16px;
padding-right: 21px;
padding-left: 21px;
padding-bottom: 15px;
padding-top: 15px;
.modal-dialog .run-dialog-entry {
width: 20em;
}
.lightbox {
@ -2178,24 +2254,20 @@ StScrollBar StButton#vhandle:active {
height: .75em;
}
.login-dialog .modal-dialog-button {
border: 1px solid #666666;
border-radius: 5px;
padding: 3px 18px;
}
.login-dialog .modal-dialog-button:focus {
padding: 2px 17px;
border: 2px solid #8b8b8b;
}
.login-dialog .modal-dialog-button:default {
background-gradient-start: #6793c4;
background-gradient-end: #335d8f;
background-gradient-direction: vertical;
padding: 2px 17px;
border: 2px solid #16335d;
border-color: #16335d;
}
.login-dialog .modal-dialog-button:default:focus {
@ -2213,6 +2285,13 @@ StScrollBar StButton#vhandle:active {
background-gradient-end: #74a0d0;
}
.login-dialog .modal-dialog-button:default:insensitive {
border-color: #666666;
color: #9f9f9f;
background-gradient-direction: none;
background-color: rgba(102, 102, 102, 0.15);
}
.login-dialog-message-warning {
color: orange;
}

View File

@ -41,6 +41,7 @@ nobase_dist_js_DATA = \
ui/boxpointer.js \
ui/calendar.js \
ui/checkBox.js \
ui/centerLayout.js \
ui/ctrlAltTab.js \
ui/dash.js \
ui/dateMenu.js \

View File

@ -39,13 +39,14 @@ const GdmUtil = imports.gdm.util;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
const PanelMenu = imports.ui.panelMenu;
const Tweener = imports.ui.tweener;
const UserMenu = imports.ui.userMenu;
const _RESIZE_ANIMATION_TIME = 0.25;
const _SCROLL_ANIMATION_TIME = 0.5;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_NAME_SIZE = 48;
const _LOGO_ICON_HEIGHT = 16;
let _loginDialog = null;
@ -82,6 +83,36 @@ function _smoothlyResizeActor(actor, width, height) {
return hold;
}
const LogoMenuButton = new Lang.Class({
Name: 'LogoMenuButton',
Extends: PanelMenu.Button,
_init: function() {
this.parent(0.0, null, true);
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
Lang.bind(this, this._updateLogo));
this._iconBin = new St.Bin();
this.actor.add_actor(this._iconBin);
this._updateLogo();
},
_updateLogo: function() {
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
let icon = null;
if (path) {
let file = Gio.file_new_for_path(path);
let cache = St.TextureCache.get_default();
icon = cache.load_uri_async(file.get_uri(), -1, _LOGO_ICON_HEIGHT);
}
this._iconBin.set_child(icon);
}
});
const UserListItem = new Lang.Class({
Name: 'UserListItem',
@ -638,38 +669,31 @@ const LoginDialog = new Lang.Class({
this._userManager = AccountsService.UserManager.get_default()
this._greeterClient = new Gdm.Client();
this._greeter = this._greeterClient.get_greeter_sync(null);
if (GLib.getenv('GDM_GREETER_TEST') != '1') {
this._greeter = this._greeterClient.get_greeter_sync(null);
this._greeter.connect('default-session-name-changed',
Lang.bind(this, this._onDefaultSessionChanged));
this._greeter.connect('default-session-name-changed',
Lang.bind(this, this._onDefaultSessionChanged));
this._greeter.connect('session-opened',
Lang.bind(this, this._onSessionOpened));
this._greeter.connect('timed-login-requested',
Lang.bind(this, this._onTimedLoginRequested));
this._greeter.connect('session-opened',
Lang.bind(this, this._onSessionOpened));
this._greeter.connect('timed-login-requested',
Lang.bind(this, this._onTimedLoginRequested));
}
this._userVerifier = new GdmUtil.ShellUserVerifier(this._greeterClient);
this._userVerifier.connect('ask-question', Lang.bind(this, this._askQuestion));
this._userVerifier.connect('show-message', Lang.bind(this, this._showMessage));
this._userVerifier.connect('reset', Lang.bind(this, this._reset));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
this._userVerifier.connect('show-login-hint', Lang.bind(this, this._showLoginHint));
this._userVerifier.connect('hide-login-hint', Lang.bind(this, this._hideLoginHint));
this._verifyingUser = false;
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.LOGO_KEY,
Lang.bind(this, this._updateLogo));
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_TEXT_KEY,
Lang.bind(this, this._updateBanner));
this._settings.connect('changed::' + GdmUtil.DISABLE_USER_LIST_KEY,
Lang.bind(this, this._updateDisableUserList));
this._logoBox = new St.Bin({ style_class: 'login-dialog-logo-box' });
this.contentLayout.add(this._logoBox);
this._updateLogo();
this._bannerLabel = new St.Label({ style_class: 'login-dialog-banner',
text: '' });
@ -677,8 +701,7 @@ const LoginDialog = new Lang.Class({
this._updateBanner();
this._titleLabel = new St.Label({ style_class: 'login-dialog-title',
text: C_("title", "Sign In"),
visible: false });
text: C_("title", "Sign In") });
this.contentLayout.add(this._titleLabel,
{ y_fill: false,
@ -746,7 +769,7 @@ const LoginDialog = new Lang.Class({
x_align: St.Align.START,
x_fill: true });
this._notListedButton.connect('clicked', Lang.bind(this, this._hideUserListAndLogIn));
this._notListedButton.connect('clicked', Lang.bind(this, this._onNotListedClicked));
this.contentLayout.add(this._notListedButton,
{ expand: false,
@ -772,35 +795,6 @@ const LoginDialog = new Lang.Class({
},
_updateDisableUserList: function() {
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
// If this is the first time around, set initial focus
if (this._disableUserList == undefined && disableUserList)
this.setInitialKeyFocus(this._promptEntry);
if (disableUserList != this._disableUserList) {
this._disableUserList = disableUserList;
if (!this._verifyingUser)
this._reset();
}
},
_updateLogo: function() {
this._logoBox.child = null;
let path = this._settings.get_string(GdmUtil.LOGO_KEY);
if (path) {
let file = Gio.file_new_for_path(path);
let uri = file.get_uri();
let textureCache = St.TextureCache.get_default();
this._logoBox.child = textureCache.load_uri_async(uri, -1, _LOGO_ICON_NAME_SIZE);
}
},
_updateBanner: function() {
let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
@ -813,15 +807,31 @@ const LoginDialog = new Lang.Class({
}
},
_reset: function() {
_onReset: function(client, serviceName) {
this._promptMessage.hide();
this._user = null;
this._verifyingUser = false;
if (this._disableUserList)
this._hideUserListAndLogIn();
else
this._showUserList();
let tasks = [this._hidePrompt,
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
this._fadeInNotListedButton]),
function() {
this._sessionList.close();
this._promptLoginHint.hide();
this._userList.actor.show();
this._userList.actor.opacity = 255;
return this._userList.showItems();
},
function() {
this._userList.actor.reactive = true;
this._userList.actor.grab_key_focus();
}];
this._user = null;
let batch = new Batch.ConsecutiveBatch(this, tasks);
batch.run();
},
_onDefaultSessionChanged: function(client, sessionId) {
@ -876,9 +886,6 @@ const LoginDialog = new Lang.Class({
if (this._user && this._user.is_logged_in())
return null;
if (!this._verifyingUser)
return null;
return GdmUtil.fadeInActor(this._sessionList.actor);
},
@ -894,18 +901,14 @@ const LoginDialog = new Lang.Class({
_showPrompt: function() {
let hold = new Batch.Hold();
let cancelButtonInfo = { action: Lang.bind(this, this.cancel),
label: _("Cancel"),
key: Clutter.Escape };
let okButtonInfo = { action: Lang.bind(this, function() {
hold.release();
}),
label: C_("button", "Sign In"),
default: true };
let buttons = [];
if (!this._disableUserList || this._verifyingUser)
buttons.push(cancelButtonInfo);
buttons.push(okButtonInfo);
let buttons = [{ action: Lang.bind(this, this.cancel),
label: _("Cancel"),
key: Clutter.Escape },
{ action: Lang.bind(this, function() {
hold.release();
}),
label: C_("button", "Sign In"),
default: true }];
let tasks = [function() {
return this._fadeInPrompt();
@ -958,23 +961,6 @@ const LoginDialog = new Lang.Class({
return batch.run();
},
_askForUsernameAndLogIn: function() {
this._promptLabel.set_text(_("Username: "));
this._promptEntry.set_text('');
this._promptEntry.clutter_text.set_password_char('');
let tasks = [this._showPrompt,
function() {
let userName = this._promptEntry.get_text();
this._promptEntry.reactive = false;
return this._beginVerificationForUser(userName);
}];
let batch = new Batch.ConsecutiveBatch(this, tasks);
return batch.run();
},
_onSessionOpened: function(client, serviceName) {
this._greeter.call_start_session_when_ready_sync(serviceName, true, null);
},
@ -1103,7 +1089,7 @@ const LoginDialog = new Lang.Class({
}));
},
_hideUserListAndLogIn: function() {
_onNotListedClicked: function(user) {
let tasks = [function() {
return this._userList.hideItems();
},
@ -1117,43 +1103,13 @@ const LoginDialog = new Lang.Class({
},
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
this._fadeOutNotListedButton,
this._fadeOutLogo]),
this._fadeOutNotListedButton]),
function() {
return this._askForUsernameAndLogIn();
}];
let hold = new Batch.Hold();
let batch = new Batch.ConsecutiveBatch(this, tasks);
batch.run();
},
_fadeInLogo: function() {
return GdmUtil.fadeInActor(this._logoBox);
},
_fadeOutLogo: function() {
return GdmUtil.fadeOutActor(this._logoBox);
},
_showUserList: function() {
let tasks = [this._hidePrompt,
new Batch.ConcurrentBatch(this, [this._fadeInTitleLabel,
this._fadeInNotListedButton,
this._fadeInLogo]),
function() {
this._sessionList.close();
this._promptLoginHint.hide();
this._userList.actor.show();
this._userList.actor.opacity = 255;
return this._userList.showItems();
},
function() {
this._userList.actor.reactive = true;
this._userList.actor.grab_key_focus();
this._userVerifier.begin(null, hold);
return hold;
}];
let batch = new Batch.ConsecutiveBatch(this, tasks);
@ -1188,7 +1144,6 @@ const LoginDialog = new Lang.Class({
let hold = new Batch.Hold();
this._userVerifier.begin(userName, hold);
this._verifyingUser = true;
return hold;
},
@ -1209,8 +1164,7 @@ const LoginDialog = new Lang.Class({
},
new Batch.ConcurrentBatch(this, [this._fadeOutTitleLabel,
this._fadeOutNotListedButton,
this._fadeOutLogo]),
this._fadeOutNotListedButton]),
function() {
return this._userList.shrinkToNaturalHeight();
@ -1242,8 +1196,6 @@ const LoginDialog = new Lang.Class({
this._userList.addUser(users[i]);
}
this._updateDisableUserList();
this._userManager.connect('user-added',
Lang.bind(this, function(userManager, user) {
this._userList.addUser(user);
@ -1267,7 +1219,7 @@ const LoginDialog = new Lang.Class({
_onOpened: function() {
Main.ctrlAltTabManager.addGroup(this.dialogLayout,
_("Login Window"),
'dialog-password-symbolic',
'dialog-password',
{ sortGroup: CtrlAltTab.SortGroup.MIDDLE });
},
@ -1275,6 +1227,6 @@ const LoginDialog = new Lang.Class({
close: function() {
this.parent();
Main.ctrlAltTabManager.removeGroup(this.dialogLayout);
Main.ctrlAltTabManager.removeGroup(this._group);
}
});

View File

@ -18,11 +18,12 @@
* 02111-1307, USA.
*/
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const UPowerGlib = imports.gi.UPowerGlib;
const LoginManager = imports.misc.loginManager;
const GdmUtil = imports.gdm.util;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
@ -33,15 +34,14 @@ const PowerMenuButton = new Lang.Class({
_init: function() {
/* Translators: accessible name of the power menu in the login screen */
this.parent('system-shutdown-symbolic', _("Power"));
this._upClient = new UPowerGlib.Client();
this._loginManager = LoginManager.getLoginManager();
this._createSubMenu();
this._settings = new Gio.Settings({ schema: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::disable-restart-buttons',
Lang.bind(this, this._updateVisibility));
this._upClient.connect('notify::can-suspend',
Lang.bind(this, this._updateHaveSuspend));
this._updateHaveSuspend();
this._createSubMenu();
// ConsoleKit doesn't send notifications when shutdown/reboot
// are disabled, so we update the menu item each time the menu opens
@ -50,15 +50,17 @@ const PowerMenuButton = new Lang.Class({
if (open) {
this._updateHaveShutdown();
this._updateHaveRestart();
this._updateHaveSuspend();
}
}));
this._updateHaveShutdown();
this._updateHaveRestart();
this._updateHaveSuspend();
},
_updateVisibility: function() {
let shouldBeVisible = (this._haveSuspend || this._haveShutdown || this._haveRestart);
this.actor.visible = shouldBeVisible;
this.actor.visible = shouldBeVisible && !this._settings.get_boolean('disable-restart-buttons');
},
_updateHaveShutdown: function() {
@ -78,9 +80,11 @@ const PowerMenuButton = new Lang.Class({
},
_updateHaveSuspend: function() {
this._haveSuspend = this._upClient.get_can_suspend();
this._suspendItem.actor.visible = this._haveSuspend;
this._updateVisibility();
this._loginManager.canSuspend(Lang.bind(this, function(result) {
this._haveSuspend = result;
this._suspendItem.actor.visible = this._haveSuspend;
this._updateVisibility();
}));
},
_createSubMenu: function() {
@ -103,8 +107,10 @@ const PowerMenuButton = new Lang.Class({
},
_onActivateSuspend: function() {
if (this._haveSuspend)
this._upClient.suspend_sync(null);
if (!this._haveSuspend)
return;
this._loginManager.suspend();
},
_onActivateRestart: function() {

View File

@ -23,7 +23,6 @@ const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
const ALLOWED_FAILURES_KEY = 'allowed-failures';
const LOGO_KEY = 'logo';
const DISABLE_USER_LIST_KEY = 'disable-user-list';
function fadeInActor(actor) {
if (actor.opacity == 255 && actor.visible)

View File

@ -3,7 +3,9 @@
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell;
const UPowerGlib = imports.gi.UPowerGlib;
const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager'>
<method name='PowerOff'>
@ -12,12 +14,18 @@ const SystemdLoginManagerIface = <interface name='org.freedesktop.login1.Manager
<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>
</interface>;
const SystemdLoginSessionIface = <interface name='org.freedesktop.login1.Session'>
@ -123,12 +131,25 @@ const LoginManagerSystemd = new Lang.Class({
});
},
canSuspend: function(asyncCallback) {
this._proxy.CanSuspendRemote(function(result, error) {
if (error)
asyncCallback(false);
else
asyncCallback(result[0] != 'no');
});
},
powerOff: function() {
this._proxy.PowerOffRemote(true);
},
reboot: function() {
this._proxy.RebootRemote(true);
},
suspend: function() {
this._proxy.SuspendRemote(true);
}
});
@ -139,6 +160,7 @@ const LoginManagerConsoleKit = new Lang.Class({
this._proxy = new ConsoleKitManager(Gio.DBus.system,
'org.freedesktop.ConsoleKit',
'/org/freedesktop/ConsoleKit/Manager');
this._upClient = new UPowerGlib.Client();
},
// Having this function is a bit of a hack since the Systemd and ConsoleKit
@ -186,12 +208,22 @@ const LoginManagerConsoleKit = new Lang.Class({
});
},
canSuspend: function(asyncCallback) {
Mainloop.idle_add(Lang.bind(this, function() {
asyncCallback(this._upClient.get_can_suspend());
return false;
}));
},
powerOff: function() {
this._proxy.StopRemote();
},
reboot: function() {
this._proxy.RestartRemote();
},
suspend: function() {
this._upClient.suspend_sync(null);
}
});

View File

@ -1,6 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;
const GMenu = imports.gi.GMenu;
@ -371,6 +372,8 @@ const SettingsSearchProvider = new Lang.Class({
this._appSys = Shell.AppSystem.get_default();
this._gnomecc = this._appSys.lookup_app('gnome-control-center.desktop');
let appInfo = Gio.DesktopAppInfo.new('gnome-control-center.desktop');
this.icon = appInfo.get_icon();
},
getResultMetas: function(prefs, callback) {
@ -379,9 +382,7 @@ const SettingsSearchProvider = new Lang.Class({
let pref = prefs[i];
metas.push({ 'id': pref,
'name': pref.get_name(),
'createIcon': function(size) {
return pref.create_icon_texture(size);
}
'createIcon': function(size) { return; }
});
}
callback(metas);
@ -461,15 +462,15 @@ const AppWellIcon = new Lang.Class({
this._draggable.connect('drag-begin', Lang.bind(this,
function () {
this._removeMenuTimeout();
Main.overview.beginItemDrag(this);
Main.overview.beginAppDrag(this);
}));
this._draggable.connect('drag-cancelled', Lang.bind(this,
function () {
Main.overview.cancelledItemDrag(this);
Main.overview.cancelledAppDrag(this);
}));
this._draggable.connect('drag-end', Lang.bind(this,
function () {
Main.overview.endItemDrag(this);
Main.overview.endAppDrag(this);
}));
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));

View File

@ -270,8 +270,9 @@ const DBusEventSource = new Lang.Class({
this._loadEvents(false);
},
_onEventsReceived: function([appointments]) {
_onEventsReceived: function(results, error) {
let newEvents = [];
let appointments = results ? results[0] : null;
if (appointments != null) {
for (let n = 0; n < appointments.length; n++) {
let a = appointments[n];

93
js/ui/centerLayout.js Normal file
View File

@ -0,0 +1,93 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
function connectLayoutManager(layoutManager, styleChanged) {
let widget, styleChangedId;
function _styleChanged() {
let themeNode = widget.get_theme_node();
styleChanged(themeNode, widget);
}
function actorChanged() {
if (widget) {
widget.disconnect(styleChangedId);
styleChangedId = 0;
}
let actor = layoutManager.get_actor();
if (actor && actor instanceof St.Widget) {
widget = actor;
styleChangedId = widget.connect('style-changed', _styleChanged);
_styleChanged();
}
}
layoutManager.connect('notify::actor', actorChanged);
return layoutManager;
}
function connectSpacing(layoutManager) {
return connectLayoutManager(layoutManager, function(themeNode, widget) {
layoutManager.spacing = themeNode.get_length('spacing');
});
}
const CenterLayout = new Lang.Class({
Name: 'CenterLayout',
Extends: Clutter.BoxLayout,
vfunc_allocate: function(container, box, flags) {
let rtl = container.get_text_direction() == Clutter.TextDirection.RTL;
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
// Assume that these are the first three widgets and they are all visible.
let [left, center, right] = container.get_children();
// Only support horizontal layouts for now.
let [centerMinWidth, centerNaturalWidth] = center.get_preferred_width(availWidth);
let sideWidth = (availWidth - centerNaturalWidth) / 2;
let childBox = new Clutter.ActorBox();
childBox.y1 = box.y1;
childBox.y2 = box.y1 + availHeight;
if (left) {
let [leftMinWidth, leftNaturalWidth] = left.get_preferred_width(availWidth);
let leftSide = Math.min(Math.floor(sideWidth), leftNaturalWidth);
if (rtl) {
childBox.x1 = availWidth - leftSide;
childBox.x2 = availWidth;
} else {
childBox.x1 = 0;
childBox.x2 = leftSide;
}
childBox.x1 += box.x1;
left.allocate(childBox, flags);
}
childBox.x1 = box.x1 + Math.ceil(sideWidth);
childBox.x2 = childBox.x1 + centerNaturalWidth;
center.allocate(childBox, flags);
if (right) {
let [rightMinWidth, rightNaturalWidth] = right.get_preferred_width(availWidth);
let rightSide = Math.min(Math.floor(sideWidth), rightNaturalWidth);
if (rtl) {
childBox.x1 = 0;
childBox.x2 = rightSide;
} else {
childBox.x1 = availWidth - rightSide;
childBox.x2 = availWidth;
}
childBox.x1 += box.x1;
right.allocate(childBox, flags);
}
}
});

View File

@ -45,14 +45,12 @@ function isMountRootHidden(root) {
}
function isMountNonLocal(mount) {
// If the mount doesn't have an associated volume, that means it could
// be a remote filesystem. For certain kinds of local filesystems,
// like digital cameras and music players, there's no associated
// gvfs volume, so err on the side of caution and assume it's a local
// filesystem to allow the prompt.
// If the mount doesn't have an associated volume, that means it's
// an uninteresting filesystem. Most devices that we care about will
// have a mount, like media players and USB sticks.
let volume = mount.get_volume();
if (volume == null)
return false;
return true;
return (volume.get_identifier("class") == "network");
}
@ -546,9 +544,8 @@ const AutorunTransientSource = new Lang.Class({
this.notify(this._notification);
},
createIcon: function(size) {
return new St.Icon({ gicon: this.mount.get_icon(),
icon_size: size });
getIcon: function() {
return this.mount.get_icon();
}
});

View File

@ -49,7 +49,7 @@ const AuthenticationDialog = new Lang.Class({
let messageBox = new St.BoxLayout({ style_class: 'prompt-dialog-message-layout',
vertical: true });
mainContentBox.add(messageBox,
{ expand: true, y_align: St.Align.START });
{ y_align: St.Align.START });
this._subjectLabel = new St.Label({ style_class: 'prompt-dialog-headline',
text: _("Authentication Required") });

View File

@ -41,7 +41,7 @@ const Recorder = new Lang.Class({
recorder.set_framerate(this._recorderSettings.get_int('framerate'));
/* Translators: this is a filename used for screencast recording */
// xgettext:no-c-format
recorder.set_filename(_("Screencast from %d %t") + '.' + this._recorderSettings.get_string('file-extension'));
recorder.set_file_template(_("Screencast from %d %t") + '.' + this._recorderSettings.get_string('file-extension'));
let pipeline = this._recorderSettings.get_string('pipeline');
if (!pipeline.match(/^\s*$/))

View File

@ -509,51 +509,42 @@ const ChatSource = new Lang.Class({
this._notification.appendAliasChange(oldAlias, newAlias);
},
createIcon: function(size) {
this._iconBox = new St.Bin({ style_class: 'avatar-box' });
this._iconBox._size = size;
let textureCache = St.TextureCache.get_default();
getIcon: function() {
let file = this._contact.get_avatar_file();
if (file) {
let uri = file.get_uri();
this._iconBox.child = textureCache.load_uri_async(uri, this._iconBox._size, this._iconBox._size);
return new Gio.FileIcon({ file: file });
} else {
this._iconBox.child = new St.Icon({ icon_name: 'avatar-default',
icon_size: this._iconBox._size });
return new Gio.ThemedIcon({ name: 'avatar-default' });
}
return this._iconBox;
},
createSecondaryIcon: function() {
let iconBox = new St.Bin();
iconBox.child = new St.Icon({ style_class: 'secondary-icon' });
getSecondaryIcon: function() {
let iconName;
let presenceType = this._contact.get_presence_type();
switch (presenceType) {
case Tp.ConnectionPresenceType.AVAILABLE:
iconBox.child.icon_name = 'user-available';
iconName = 'user-available';
break;
case Tp.ConnectionPresenceType.BUSY:
iconBox.child.icon_name = 'user-busy';
iconName = 'user-busy';
break;
case Tp.ConnectionPresenceType.OFFLINE:
iconBox.child.icon_name = 'user-offline';
iconName = 'user-offline';
break;
case Tp.ConnectionPresenceType.HIDDEN:
iconBox.child.icon_name = 'user-invisible';
iconName = 'user-invisible';
break;
case Tp.ConnectionPresenceType.AWAY:
iconBox.child.icon_name = 'user-away';
iconName = 'user-away';
break;
case Tp.ConnectionPresenceType.EXTENDED_AWAY:
iconBox.child.icon_name = 'user-idle';
iconName = 'user-idle';
break;
default:
iconBox.child.icon_name = 'user-offline';
iconName = 'user-offline';
}
return iconBox;
return new Gio.ThemedIcon({ name: iconName });
},
_updateAvatarIcon: function() {
@ -735,7 +726,7 @@ const ChatSource = new Lang.Class({
title = GLib.markup_escape_text(this.title, -1);
this._notification.update(this._notification.title, null, { customContent: true, secondaryIcon: this.createSecondaryIcon() });
this._notification.update(this._notification.title, null, { customContent: true, secondaryGIcon: this.getSecondaryIcon() });
if (message)
msg += ' <i>(' + GLib.markup_escape_text(message, -1) + ')</i>';
@ -763,7 +754,7 @@ const ChatNotification = new Lang.Class({
Extends: MessageTray.Notification,
_init: function(source) {
this.parent(source, source.title, null, { customContent: true, secondaryIcon: source.createSecondaryIcon() });
this.parent(source, source.title, null, { customContent: true, secondaryGIcon: source.getSecondaryIcon() });
this.setResident(true);
this._responseEntry = new St.Entry({ style_class: 'chat-response',
@ -780,18 +771,16 @@ const ChatNotification = new Lang.Class({
this.emit('unfocused');
}));
this._oldMaxScrollAdjustment = 0;
this._createScrollArea();
this._lastGroup = null;
this._lastGroupActor = null;
// Keep track of the bottom position for the current adjustment and
// force a scroll to the bottom if things change while we were at the
// bottom
this._oldMaxScrollValue = this._scrollArea.vscroll.adjustment.value;
this._scrollArea.vscroll.adjustment.connect('changed', Lang.bind(this, function(adjustment) {
if (adjustment.value == this._oldMaxScrollValue)
let currentValue = adjustment.value + adjustment.page_size;
if (currentValue == this._oldMaxScrollAdjustment)
this.scrollTo(St.Side.BOTTOM);
this._oldMaxScrollValue = Math.max(adjustment.lower, adjustment.upper - adjustment.page_size);
this._oldMaxScrollAdjustment = adjustment.upper;
}));
this._inputHistory = new History.HistoryManager({ entry: this._responseEntry.clutter_text });
@ -943,24 +932,32 @@ const ChatNotification = new Lang.Class({
let format;
// Show a week day and time if date is in the last week
if (daysAgo < 1 || (daysAgo < 7 && now.getDay() != date.getDay())) {
/* Translators: this is a time format string followed by a date.
If applicable, replace %X with a strftime format valid for your
locale, without seconds. */
// Show only the hour if date is on today
if(daysAgo < 1){
format = "<b>%H:%M</b>";
}
// Show the word "Yesterday" and time if date is on yesterday
else if(daysAgo <2){
/* Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"*/
// xgettext:no-c-format
format = _("Sent at <b>%X</b> on <b>%A</b>");
format = _("<b>%H:%M</b> on Yesterday");
}
// Show a week day and time if date is in the last week
else if (daysAgo < 7) {
/* Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday*/
// xgettext:no-c-format
format = _("<b>%H:%M</b> on <b>%A</b>");
} else if (date.getYear() == now.getYear()) {
/* Translators: this is a time format in the style of "Wednesday, May 25",
shown when you get a chat message in the same year. */
/* Translators: this is a time format in the style of "14:30 on Wednesday, May 25",
shown when you get a chat message in the same year */
// xgettext:no-c-format
format = _("Sent on <b>%A</b>, <b>%B %d</b>");
format = _("<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>");
} else {
/* Translators: this is a time format in the style of "Wednesday, May 25, 2012",
shown when you get a chat message in a different year. */
/* Translators: this is a time format in the style of "14:30 on Wednesday, May 25, 2012",
shown when you get a chat message in a different year */
// xgettext:no-c-format
format = _("Sent on <b>%A</b>, <b>%B %d</b>, %Y");
format = _("<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>, %Y");
}
return date.toLocaleFormat(format);
@ -973,8 +970,7 @@ const ChatNotification = new Lang.Class({
let timeLabel = this._append({ body: this._formatTimestamp(lastMessageDate),
group: 'meta',
styles: ['chat-meta-message'],
childProps: { expand: true, x_fill: false,
x_align: St.Align.END },
childProps: { expand: true, x_fill: false },
noTimestamp: true,
timestamp: lastMessageTime });
@ -1075,9 +1071,8 @@ const ApproverSource = new Lang.Class({
this.parent();
},
createIcon: function(size) {
return new St.Icon({ gicon: this._gicon,
icon_size: size });
getIcon: function() {
return this._gicon;
}
});

View File

@ -142,7 +142,6 @@ const DashItemContainer = new Lang.Class({
setLabelText: function(text) {
this._labelText = text;
this.child.accessible_name = text;
},
hideLabel: function () {
@ -260,6 +259,7 @@ const ShowAppsIcon = new Lang.Class({
this.setChild(this.toggleButton);
this.setDragApp(null);
this.toggleButton.label_actor = this.label;
},
_createIcon: function(size) {
@ -372,6 +372,9 @@ const Dash = new Lang.Class({
this._maxHeight = -1;
this.iconSize = 64;
this._shownInitially = false;
this.visible = false;
this._hiddenX;
this._targetX;
this._dragPlaceholder = null;
this._dragPlaceholderPos = -1;
@ -399,7 +402,8 @@ const Dash = new Lang.Class({
function() {
if (this._maxHeight != this.actor.height)
this._queueRedisplay();
this._maxHeight = this.actor.height;
if (this.actor.height > this._maxHeight)
this._maxHeight = this.actor.height;
}));
this._workId = Main.initializeDeferredWork(this._box, Lang.bind(this, this._redisplay));
@ -410,11 +414,11 @@ const Dash = new Lang.Class({
AppFavorites.getAppFavorites().connect('changed', Lang.bind(this, this._queueRedisplay));
this._appSystem.connect('app-state-changed', Lang.bind(this, this._queueRedisplay));
Main.overview.connect('item-drag-begin',
Main.overview.connect('app-drag-begin',
Lang.bind(this, this._onDragBegin));
Main.overview.connect('item-drag-end',
Main.overview.connect('app-drag-end',
Lang.bind(this, this._onDragEnd));
Main.overview.connect('item-drag-cancelled',
Main.overview.connect('app-drag-cancelled',
Lang.bind(this, this._onDragCancelled));
Main.overview.connect('window-drag-begin',
Lang.bind(this, this._onDragBegin));
@ -507,11 +511,9 @@ const Dash = new Lang.Class({
let item = new DashItemContainer();
item.setChild(display.actor);
// Override default AppWellIcon label_actor, now the
// accessible_name is set at DashItemContainer.setLabelText
display.actor.label_actor = null;
item.setLabelText(app.get_name());
// Override default AppWellIcon label_actor
display.actor.label_actor = item.label;
display.icon.setIconSize(this.iconSize);
this._hookUpLabel(item);
@ -548,6 +550,17 @@ const Dash = new Lang.Class({
}
},
_computeDashX: function() {
this._targetX = this.actor.get_x();
let rtl = (this.actor.get_text_direction() == Clutter.TextDirection.RTL);
if (rtl)
this._hiddenX = this._targetX + this.actor.width;
else
this._hiddenX = -this.actor.width;
},
_adjustIconSize: function() {
// For the icon size, we only consider children which are "proper"
// icons (i.e. ignoring drag placeholders) and which are not
@ -621,10 +634,8 @@ const Dash = new Lang.Class({
icon.setIconSize(this.iconSize);
// Don't animate the icon size change when the overview
// is transitioning, not visible or when initially filling
// the dash
if (!Main.overview.visible || Main.overview.animationInProgress ||
!this._shownInitially)
// is not visible or when initially filling the dash
if (!Main.overview.visible || !this._shownInitially)
continue;
let [targetWidth, targetHeight] = icon.icon.get_size();
@ -645,6 +656,8 @@ const Dash = new Lang.Class({
}
});
}
this._computeDashX();
},
_redisplay: function () {
@ -748,9 +761,8 @@ const Dash = new Lang.Class({
for (let i = 0; i < removedActors.length; i++) {
let item = removedActors[i]._delegate;
// Don't animate item removal when the overview is transitioning
// or hidden
if (Main.overview.visible && !Main.overview.animationInProgress)
// Don't animate item removal when the overview is hidden
if (Main.overview.visible)
item.animateOutAndDestroy();
else
item.destroy();
@ -762,12 +774,12 @@ const Dash = new Lang.Class({
// of items, to avoid all items zooming in at once
if (!this._shownInitially) {
this._shownInitially = true;
this.visible = true;
return;
}
// Don't animate item addition when the overview is transitioning
// or hidden
if (!Main.overview.visible || Main.overview.animationInProgress)
// Don't animate item addition when the overview is hidden
if (!Main.overview.visible)
return;
for (let i = 0; i < addedItems.length; i++)
@ -907,6 +919,34 @@ const Dash = new Lang.Class({
}));
return true;
},
show: function() {
if (this.visible)
return;
this.visible = true;
this.actor.show();
Tweener.addTween(this.actor, { translation_x: this._targetX,
transition: 'easeOutQuad',
time: DASH_ANIMATION_TIME
});
},
hide: function() {
if (!this.visible)
return;
this.visible = false;
Tweener.addTween(this.actor, { translation_x: this._hiddenX,
transition: 'easeOutQuad',
time: DASH_ANIMATION_TIME,
onComplete: Lang.bind(this, function () {
this.actor.hide();
})
});
}
});

View File

@ -198,7 +198,11 @@ const IconGrid = new Lang.Class({
_getPreferredHeight: function (grid, forWidth, alloc) {
let children = this._getVisibleChildren();
let [nColumns, usedWidth] = this._computeLayout(forWidth);
let nColumns;
if (forWidth < 0)
nColumns = children.length;
else
nColumns = this._computeLayout(forWidth)[0];
let nRows;
if (nColumns > 0)
nRows = Math.ceil(children.length / nColumns);

View File

@ -104,7 +104,7 @@ const LayoutManager = new Lang.Class({
this.primaryMonitor = null;
this.primaryIndex = -1;
this._hotCorners = [];
this._rootPixmap = null;
this._background = null;
this._leftPanelBarrier = 0;
this._rightPanelBarrier = 0;
this._trayBarrier = 0;
@ -333,30 +333,30 @@ const LayoutManager = new Lang.Class({
// to the greeter. Otherwise, we'll just animate the panel,
// as usual.
if (Main.sessionMode.isGreeter) {
this._rootPixmap = global.create_xrootpmap_texture();
if (this._rootPixmap != null) {
Main.uiGroup.add_actor(this._rootPixmap);
Tweener.addTween(this._rootPixmap,
this._background = Meta.BackgroundActor.new_for_screen(global.screen);
if (this._background != null) {
Main.uiGroup.add_actor(this._background);
Tweener.addTween(this._background,
{ opacity: 0,
time: PLYMOUTH_TRANSITION_TIME,
transition: 'linear',
onComplete: this._fadeRootpmapComplete,
onComplete: this._fadeBackgroundComplete,
onCompleteScope: this });
plymouthTransitionRunning = true;
}
}
if (!plymouthTransitionRunning)
this._fadeRootpmapComplete();
this._fadeBackgroundComplete();
},
_fadeRootpmapComplete: function() {
_fadeBackgroundComplete: function() {
// Don't animate the strut
this._chrome.freezeUpdateRegions();
if (this._rootPixmap != null) {
this._rootPixmap.destroy();
this._rootPixmap = null;
if (this._background != null) {
this._background.destroy();
this._background = null;
}
Tweener.addTween(this.panelBox,

View File

@ -4,6 +4,7 @@ const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Atk = imports.gi.Atk;
const Lang = imports.lang;
const Mainloop = imports.mainloop;
@ -35,8 +36,6 @@ const LONGER_SUMMARY_TIMEOUT = 4;
const HIDE_TIMEOUT = 0.2;
const LONGER_HIDE_TIMEOUT = 0.6;
const NOTIFICATION_ICON_SIZE = 24;
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
// range from the point where it left the tray.
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
@ -143,14 +142,9 @@ const URLHighlighter = new Lang.Class({
let url = this._urls[urlId].url;
if (url.indexOf(':') == -1)
url = 'http://' + url;
try {
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
return true;
} catch (e) {
// TODO: remove this after gnome 3 release
Util.spawn(['gvfs-open', url]);
return true;
}
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context());
return true;
}
return false;
}));
@ -242,13 +236,8 @@ function makeCloseButton() {
closeButton.connect('style-changed', function() {
let themeNode = closeButton.get_theme_node();
// libcroco doesn't support negative units
let direction = closeButton.get_text_direction() == Clutter.TextDirection.RTL ? -1 : 1;
closeButton.translation_x = direction * themeNode.get_length('-shell-close-overlap-x');
// libcroco doesn't support negative units
closeButton.translation_y = -themeNode.get_length('-shell-close-overlap-y');
closeButton.translation_x = themeNode.get_length('-shell-close-overlap-x');
closeButton.translation_y = themeNode.get_length('-shell-close-overlap-y');
});
return closeButton;
@ -294,9 +283,12 @@ function makeCloseButton() {
// If @params contains a 'body' parameter, then that text will be added to
// the content area (as with addBody()).
//
// By default, the icon shown is created by calling
// source.createIcon(). However, if @params contains an 'icon'
// parameter, the passed in icon will be used.
// By default, the icon shown is the same as the source's.
// However, if @params contains a 'gicon' parameter, the passed in gicon
// will be used.
//
// You can add a secondary icon to the banner with 'secondaryGIcon'. There
// is no fallback for this icon.
//
// If @params contains a 'titleMarkup', 'bannerMarkup', or
// 'bodyMarkup' parameter with the value %true, then the corresponding
@ -311,6 +303,8 @@ function makeCloseButton() {
const Notification = new Lang.Class({
Name: 'Notification',
ICON_SIZE: 24,
IMAGE_SIZE: 125,
_init: function(source, title, banner, params) {
@ -394,8 +388,8 @@ const Notification = new Lang.Class({
update: function(title, banner, params) {
params = Params.parse(params, { customContent: false,
body: null,
icon: null,
secondaryIcon: null,
gicon: null,
secondaryGIcon: null,
titleMarkup: false,
bannerMarkup: false,
bodyMarkup: false,
@ -405,12 +399,12 @@ const Notification = new Lang.Class({
let oldFocus = global.stage.key_focus;
if (this._icon && (params.icon || params.clear)) {
if (this._icon && (params.gicon || params.clear)) {
this._icon.destroy();
this._icon = null;
}
if (this._secondaryIcon && (params.secondaryIcon || params.clear)) {
if (this._secondaryIcon && (params.secondaryGIcon || params.clear)) {
this._secondaryIcon.destroy();
this._secondaryIcon = null;
}
@ -440,8 +434,14 @@ const Notification = new Lang.Class({
if (!this._scrollArea && !this._actionArea && !this._imageBin)
this._table.remove_style_class_name('multi-line-notification');
if (!this._icon) {
this._icon = params.icon || this.source.createIcon(NOTIFICATION_ICON_SIZE);
if (params.gicon) {
this._icon = new St.Icon({ gicon: params.gicon,
icon_size: this.ICON_SIZE });
} else {
this._icon = this.source.createIcon(this.ICON_SIZE);
}
if (this._icon) {
this._table.add(this._icon, { row: 0,
col: 0,
x_expand: false,
@ -450,11 +450,10 @@ const Notification = new Lang.Class({
y_align: St.Align.START });
}
if (!this._secondaryIcon) {
this._secondaryIcon = params.secondaryIcon;
if (this._secondaryIcon)
this._bannerBox.add_actor(this._secondaryIcon);
if (params.secondaryGIcon) {
this._secondaryIcon = new St.Icon({ gicon: params.secondaryGIcon,
style_class: 'secondary-icon' });
this._bannerBox.add_actor(this._secondaryIcon);
}
this.title = title;
@ -1117,10 +1116,14 @@ const Source = new Lang.Class({
// Provides a sane default implementation, override if you need
// something more fancy.
createIcon: function(size) {
return new St.Icon({ icon_name: this.iconName,
return new St.Icon({ gicon: this.getIcon(),
icon_size: size });
},
getIcon: function() {
return new Gio.ThemedIcon({ name: this.iconName });
},
_ensureMainIcon: function() {
if (this._mainIcon)
return;
@ -1438,10 +1441,10 @@ const MessageTray = new Lang.Class({
this._closeButton.connect('clicked', Lang.bind(this, this._onCloseClicked));
this._notificationWidget.add_actor(this._closeButton);
this._idleMonitorWatchId = 0;
this._idleMonitorBecameActiveId = 0;
this._userActiveWhileNotificationShown = false;
this.idleMonitor = Shell.IdleMonitor.get();
this.idleMonitor = new GnomeDesktop.IdleMonitor();
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
this._grabHelper.addActor(this._summaryBoxPointer.actor);
@ -1495,7 +1498,7 @@ const MessageTray = new Lang.Class({
this._overviewVisible = true;
this._grabHelper.ungrab(); // drop modal grab if necessary
this.actor.add_style_pseudo_class('overview');
this._updateState();
this.show();
}));
Main.overview.connect('hiding', Lang.bind(this,
function() {
@ -1733,6 +1736,11 @@ const MessageTray = new Lang.Class({
this._updateState();
},
show: function() {
this._traySummoned = true;
this._updateState();
},
_onNotify: function(source, notification) {
if (this._summaryBoxPointerItem && this._summaryBoxPointerItem.source == source) {
if (this._summaryBoxPointerState == State.HIDING) {
@ -1975,7 +1983,7 @@ const MessageTray = new Lang.Class({
}
// Summary
let summarySummoned = this._pointerInSummary || this._overviewVisible || this._traySummoned;
let summarySummoned = this._pointerInSummary || this._traySummoned;
let summaryPinned = this._pointerInTray || summarySummoned || this._locked;
let summaryHovered = this._pointerInTray || this._pointerInSummary;
@ -1983,7 +1991,7 @@ const MessageTray = new Lang.Class({
this._notificationState == State.SHOWN);
let notificationsDone = !notificationsVisible && !notificationsPending;
let summaryOptionalInOverview = this._overviewVisible && !this._locked && !summaryHovered;
let summaryOptionalInOverview = !this._locked && !summaryHovered;
let mustHideSummary = (notificationsPending && (notificationUrgent || summaryOptionalInOverview))
|| notificationsVisible || !Main.sessionMode.hasNotifications;
@ -2153,20 +2161,26 @@ const MessageTray = new Lang.Class({
});
},
_onIdleMonitorWatch: function(monitor, id, userBecameIdle) {
this.idleMonitor.remove_watch(this._idleMonitorWatchId);
this._idleMonitorWatchId = 0;
if (!userBecameIdle)
this._updateNotificationTimeout(2000);
_onIdleMonitorBecameActive: function() {
this.idleMonitor.disconnect(this._idleMonitorBecameActiveId);
this._idleMonitorBecameActiveId = 0;
this._userActiveWhileNotificationShown = true;
this._updateNotificationTimeout(2000);
this._updateState();
},
_showNotification: function() {
this._notification = this._notificationQueue.shift();
this._userActiveWhileNotificationShown = this.idleMonitor.get_idletime() <= IDLE_TIME;
this._idleMonitorWatchId = this.idleMonitor.add_watch(IDLE_TIME,
Lang.bind(this, this._onIdleMonitorWatch));
let userIdle = this.idleMonitor.get_idletime() > IDLE_TIME;
if (userIdle) {
this._userActiveWhileNotificationShown = false;
this._idleMonitorBecameActiveId = this.idleMonitor.connect('became-active', Lang.bind(this, this._onIdleMonitorBecameActive));
} else {
this._userActiveWhileNotificationShown = true;
}
this._notificationClickedId = this._notification.connect('done-displaying',
Lang.bind(this, this._escapeTray));
this._notification.connect('unfocused', Lang.bind(this, function() {
@ -2279,6 +2293,11 @@ const MessageTray = new Lang.Class({
_hideNotification: function() {
this._grabHelper.ungrab({ actor: this._notification.actor });
if (this._idleMonitorBecameActiveId) {
this.idleMonitor.disconnect(this._idleMonitorBecameActiveId);
this._idleMonitorBecameActiveId = 0;
}
if (this._notificationExpandedId) {
this._notification.disconnect(this._notificationExpandedId);
this._notificationExpandedId = 0;

View File

@ -20,7 +20,6 @@ const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
const OPEN_AND_CLOSE_TIME = 0.1;
const FADE_IN_BUTTONS_TIME = 0.33;
const FADE_OUT_DIALOG_TIME = 1.0;
const State = {
@ -117,8 +116,6 @@ const ModalDialog = new Lang.Class({
},
setButtons: function(buttons) {
let hadChildren = this._buttonLayout.get_children() > 0;
this._buttonLayout.destroy_all_children();
this._actionKeys = {};
@ -169,21 +166,7 @@ const ModalDialog = new Lang.Class({
this._actionKeys[key] = action;
}
// Fade in buttons if there weren't any before
if (!hadChildren && buttons.length > 0) {
this._buttonLayout.opacity = 0;
Tweener.addTween(this._buttonLayout,
{ opacity: 255,
time: FADE_IN_BUTTONS_TIME,
transition: 'easeOutQuad',
onComplete: Lang.bind(this, function() {
this.emit('buttons-set');
})
});
} else {
this.emit('buttons-set');
}
this.emit('buttons-set');
},
_onKeyReleaseEvent: function(object, event) {

View File

@ -356,12 +356,10 @@ const NotificationDaemon = new Lang.Class({
ndata.actions, ndata.hints, ndata.notification];
let gicon = this._iconForNotificationData(icon, hints);
let iconActor = new St.Icon({ gicon: gicon,
icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
if (notification == null) {
notification = new MessageTray.Notification(source, summary, body,
{ icon: iconActor,
{ gicon: gicon,
bannerMarkup: true });
ndata.notification = notification;
notification.connect('destroy', Lang.bind(this,
@ -386,7 +384,7 @@ const NotificationDaemon = new Lang.Class({
this._emitActionInvoked(ndata.id, actionId);
}));
} else {
notification.update(summary, body, { icon: iconActor,
notification.update(summary, body, { gicon: gicon,
bannerMarkup: true,
clear: true });
}

View File

@ -10,6 +10,7 @@ const St = imports.gi.St;
const Shell = imports.gi.Shell;
const Gdk = imports.gi.Gdk;
const CenterLayout = imports.ui.centerLayout;
const Dash = imports.ui.dash;
const DND = imports.ui.dnd;
const Main = imports.ui.main;
@ -23,9 +24,6 @@ const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
// Time for initial animation going into Overview mode
const ANIMATION_TIME = 0.25;
// We split the screen vertically between the dash and the view selector.
const DASH_SPLIT_FRACTION = 0.1;
const DND_WINDOW_SWITCH_TIMEOUT = 1250;
const SwipeScrollDirection = {
@ -119,23 +117,18 @@ const Overview = new Lang.Class({
this._desktopFade = new St.Bin();
global.overlay_group.add_actor(this._desktopFade);
this._spacing = 0;
/* Translators: This is the main view to select
activities. See also note for "Activities" string. */
this._group = new St.Widget({ name: 'overview',
accessible_name: _("Overview"),
reactive: true });
this._group._delegate = this;
this._group.connect('style-changed',
Lang.bind(this, function() {
let node = this._group.get_theme_node();
let spacing = node.get_length('spacing');
if (spacing != this._spacing) {
this._spacing = spacing;
this._relayout();
}
}));
this._overview = new St.BoxLayout({ name: 'overview',
accessible_name: _("Overview"),
reactive: true,
vertical: true });
this._overview._delegate = this;
let layout = new CenterLayout.CenterLayout();
CenterLayout.connectSpacing(layout);
this._group = new St.Widget({ name: 'overview-group',
layout_manager: layout });
this._scrollDirection = SwipeScrollDirection.NONE;
this._scrollAdjustment = null;
@ -148,18 +141,19 @@ const Overview = new Lang.Class({
this._modal = false; // have a modal grab
this.animationInProgress = false;
this._hideInProgress = false;
this.searchActive = false;
this.appsActive = false;
// During transitions, we raise this to the top to avoid having the overview
// area be reactive; it causes too many issues such as double clicks on
// Dash elements, or mouseover handlers in the workspaces.
this._coverPane = new Clutter.Rectangle({ opacity: 0,
reactive: true });
this._group.add_actor(this._coverPane);
this._overview.add_actor(this._coverPane);
this._coverPane.connect('event', Lang.bind(this, function (actor, event) { return true; }));
this._group.hide();
global.overlay_group.add_actor(this._group);
this._overview.hide();
global.overlay_group.add_actor(this._overview);
this._coverPane.hide();
@ -171,6 +165,8 @@ const Overview = new Lang.Class({
Main.xdndHandler.connect('drag-begin', Lang.bind(this, this._onDragBegin));
Main.xdndHandler.connect('drag-end', Lang.bind(this, this._onDragEnd));
global.screen.connect('restacked', Lang.bind(this, this._onRestacked));
this._windowSwitchTimeoutId = 0;
this._windowSwitchTimestamp = 0;
this._lastActiveWorkspaceIndex = -1;
@ -193,6 +189,13 @@ const Overview = new Lang.Class({
this._shellInfo = new ShellInfo();
// Add a clone of the panel to the overview so spacing and such is
// automatic
this._panelGhost = new St.Bin({ child: new Clutter.Clone({ source: Main.panel.actor }),
reactive: false,
opacity: 0 });
this._overview.add_actor(this._panelGhost);
this._searchEntry = new St.Entry({ name: 'searchEntry',
/* Translators: this is the text displayed
in the search entry when no search is
@ -201,16 +204,13 @@ const Overview = new Lang.Class({
hint_text: _("Type to search..."),
track_hover: true,
can_focus: true });
this._group.add_actor(this._searchEntry);
this._dash = new Dash.Dash();
this._viewSelector = new ViewSelector.ViewSelector(this._searchEntry,
this._dash.showAppsButton);
this._group.add_actor(this._viewSelector.actor);
this._group.add_actor(this._dash.actor);
this._searchEntryBin = new St.Bin({ child: this._searchEntry,
x_align: St.Align.MIDDLE });
this._overview.add_actor(this._searchEntryBin);
// TODO - recalculate everything when desktop size changes
this._dash.actor.add_constraint(this._viewSelector.constrainHeight);
this._dash = new Dash.Dash();
this._group.add_actor(this._dash.actor);
this.dashIconSize = this._dash.iconSize;
this._dash.connect('icon-size-changed',
Lang.bind(this, function() {
@ -221,6 +221,82 @@ const Overview = new Lang.Class({
// the left of the overview
Main.ctrlAltTabManager.addGroup(this._dash.actor, _("Dash"), 'user-bookmarks-symbolic');
this._viewSelector = new ViewSelector.ViewSelector(this._searchEntry,
this._dash.showAppsButton);
this._group.add_actor(this._viewSelector.actor);
this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
this._group.add_actor(this._thumbnailsBox.actor);
// TODO: unique icon
Main.ctrlAltTabManager.addGroup(this._thumbnailsBox.actor, _("Workspaces"), 'user-bookmarks-symbolic');
// Add our same-line elements after the search entry
this._overview.add_actor(this._group);
// Then account for message tray
this._messageTrayGhost = new St.Bin({ child: new Clutter.Clone({ source: Main.messageTray.actor }),
reactive: false,
opacity: 0 });
this._overview.add_actor(this._messageTrayGhost);
this._viewSelector.connect('search-begin', Lang.bind(this,
function() {
this.searchActive = true;
this._dash.hide();
this._thumbnailsBox.hide();
Main.messageTray.hide();
}));
this._viewSelector.connect('search-cancelled', Lang.bind(this,
function() {
this.searchActive = false;
this._dash.show();
this._thumbnailsBox.show();
// search-cancelled is emitted if we leave the overview
// directly from searching. That means the message tray will
// be shown when we reach the workspace. Don't do this, only
// show the message tray on search-cancelled if we are still
// in the overview/not transitioning out of it.
if (this.visible && !this.animationInProgress)
Main.messageTray.show();
}));
this._viewSelector.connect('apps-button-checked', Lang.bind(this,
function(vs, checked) {
this.appsActive = checked;
if (checked) {
this._thumbnailsBox.hide();
Main.messageTray.hide();
} else {
this._thumbnailsBox.show();
if (this.visible && !this.animationInProgress)
Main.messageTray.show();
}
}));
this.connect('app-drag-begin',
Lang.bind(this, function () {
this._dash.show();
this._thumbnailsBox.show();
}));
this.connect('app-drag-cancelled',
Lang.bind(this, function () {
if (this.searchActive) {
this._dash.hide();
this._thumbnailsBox.hide();
} else if (this.appsActive) {
this._thumbnailsBox.hide();
}
}));
this.connect('app-drag-end',
Lang.bind(this, function () {
if (this.searchActive) {
this._dash.hide();
this._thumbnailsBox.hide();
} else if (this.appsActive) {
this._thumbnailsBox.hide();
}
}));
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._relayout));
this._relayout();
},
@ -486,55 +562,41 @@ const Overview = new Lang.Class({
this.hide();
let primary = Main.layoutManager.primaryMonitor;
let rtl = (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL);
let contentY = Main.panel.actor.height;
let contentHeight = primary.height - contentY - Main.messageTray.actor.height;
this._group.set_position(primary.x, primary.y);
this._group.set_size(primary.width, primary.height);
this._overview.set_position(primary.x, primary.y);
this._overview.set_size(primary.width, primary.height);
this._coverPane.set_position(0, contentY);
this._coverPane.set_size(primary.width, contentHeight);
},
let searchWidth = this._searchEntry.get_width();
let searchHeight = this._searchEntry.get_height();
let searchX = (primary.width - searchWidth) / 2;
let searchY = contentY + this._spacing;
_onRestacked: function() {
let stack = global.get_window_actors();
let stackIndices = {};
let dashWidth = Math.round(DASH_SPLIT_FRACTION * primary.width);
let dashY = searchY + searchHeight + this._spacing;
let dashX;
if (rtl) {
this._dash.actor.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
dashX = primary.width;
} else {
dashX = 0;
for (let i = 0; i < stack.length; i++) {
// Use the stable sequence for an integer to use as a hash key
stackIndices[stack[i].get_meta_window().get_stable_sequence()] = i;
}
let viewX = rtl ? 0 : dashWidth + this._spacing;
let viewY = searchY + searchHeight + this._spacing;
let viewWidth = primary.width - dashWidth - this._spacing;
let viewHeight = contentHeight - this._spacing - viewY;
this._searchEntry.set_position(searchX, searchY);
this._dash.actor.set_position(dashX, dashY);
this._viewSelector.actor.set_position(viewX, viewY);
this._viewSelector.actor.set_size(viewWidth, viewHeight);
this.emit('sync-window-stacking', stackIndices);
},
//// Public methods ////
beginItemDrag: function(source) {
this.emit('item-drag-begin');
beginAppDrag: function(source) {
this.emit('app-drag-begin');
},
cancelledItemDrag: function(source) {
this.emit('item-drag-cancelled');
cancelledAppDrag: function(source) {
this.emit('app-drag-cancelled');
},
endItemDrag: function(source) {
this.emit('item-drag-end');
endAppDrag: function(source) {
this.emit('app-drag-end');
},
beginWindowDrag: function(source) {
@ -558,13 +620,13 @@ const Overview = new Lang.Class({
if (this._shown)
return;
// Do this manually instead of using _syncInputMode, to handle failure
if (!Main.pushModal(this._group))
if (!Main.pushModal(this._overview))
return;
this._modal = true;
this._animateVisible();
this._shown = true;
this._buttonPressId = this._group.connect('button-press-event',
this._buttonPressId = this._overview.connect('button-press-event',
Lang.bind(this, this._onButtonPress));
},
@ -608,12 +670,12 @@ const Overview = new Lang.Class({
// Disable unredirection while in the overview
Meta.disable_unredirect_for_screen(global.screen);
global.window_group.hide();
this._group.show();
this._overview.show();
this._background.show();
this._viewSelector.show();
this._group.opacity = 0;
Tweener.addTween(this._group,
this._overview.opacity = 0;
Tweener.addTween(this._overview,
{ opacity: 255,
transition: 'easeOutQuad',
time: ANIMATION_TIME,
@ -667,7 +729,7 @@ const Overview = new Lang.Class({
this._syncInputMode();
if (this._buttonPressId > 0)
this._group.disconnect(this._buttonPressId);
this._overview.disconnect(this._buttonPressId);
this._buttonPressId = 0;
},
@ -709,20 +771,20 @@ const Overview = new Lang.Class({
if (this._shown) {
if (!this._modal) {
if (Main.pushModal(this._group))
if (Main.pushModal(this._overview))
this._modal = true;
else
this.hide();
}
} else if (this._shownTemporarily) {
if (this._modal) {
Main.popModal(this._group);
Main.popModal(this._overview);
this._modal = false;
}
global.stage_input_mode = Shell.StageInputMode.FULLSCREEN;
} else {
if (this._modal) {
Main.popModal(this._group);
Main.popModal(this._overview);
this._modal = false;
}
else if (global.stage_input_mode == Shell.StageInputMode.FULLSCREEN)
@ -740,7 +802,7 @@ const Overview = new Lang.Class({
this._viewSelector.zoomFromOverview();
// Make other elements fade out.
Tweener.addTween(this._group,
Tweener.addTween(this._overview,
{ opacity: 0,
transition: 'easeOutQuad',
time: ANIMATION_TIME,
@ -782,7 +844,7 @@ const Overview = new Lang.Class({
this._viewSelector.hide();
this._desktopFade.hide();
this._background.hide();
this._group.hide();
this._overview.hide();
this.visible = false;
this.animationInProgress = false;

View File

@ -15,6 +15,7 @@ const Signals = imports.signals;
const Atk = imports.gi.Atk;
const CenterLayout = imports.ui.centerLayout;
const Config = imports.misc.config;
const CtrlAltTab = imports.ui.ctrlAltTab;
const DND = imports.ui.dnd;
@ -247,6 +248,10 @@ const AppMenuButton = new Lang.Class({
this._container.connect('get-preferred-height', Lang.bind(this, this._getContentPreferredHeight));
this._container.connect('allocate', Lang.bind(this, this._contentAllocate));
let textureCache = St.TextureCache.get_default();
textureCache.connect('icon-theme-changed',
Lang.bind(this, this._onIconThemeChanged));
this._iconBox = new Shell.Slicer({ name: 'appMenuIcon' });
this._iconBox.connect('style-changed',
Lang.bind(this, this._onIconBoxStyleChanged));
@ -332,6 +337,15 @@ const AppMenuButton = new Lang.Class({
this._updateIconBoxClip();
},
_onIconThemeChanged: function() {
if (this._iconBox.child == null)
return;
this._iconBox.child.destroy();
let icon = this._targetApp.get_faded_icon(2 * PANEL_ICON_SIZE);
this._iconBox.set_child(icon);
},
_updateIconBoxClip: function() {
let allocation = this._iconBox.allocation;
if (this._iconBottomClip > 0)
@ -901,6 +915,7 @@ const PANEL_ITEM_IMPLEMENTATIONS = {
'volume': imports.ui.status.volume.Indicator,
'battery': imports.ui.status.power.Indicator,
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
'logo': imports.gdm.loginDialog.LogoMenuButton,
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
'powerMenu': imports.gdm.powerMenu.PowerMenuButton,
'userMenu': imports.ui.userMenu.UserMenuButton
@ -917,12 +932,47 @@ try {
log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
}
const PanelLayout = new Lang.Class({
Name: 'PanelLayout',
Extends: CenterLayout.CenterLayout,
vfunc_allocate: function(container, box, flags) {
this.parent(container, box, flags);
let availWidth = box.x2 - box.x1;
let availHeight = box.y2 - box.y1;
let [left, center, right, leftCorner, rightCorner] = container.get_children();
let childBox = new Clutter.ActorBox();
let cornerMinWidth, cornerMinHeight;
let cornerWidth, cornerHeight;
[cornerMinWidth, cornerWidth] = leftCorner.get_preferred_width(-1);
[cornerMinHeight, cornerHeight] = leftCorner.get_preferred_height(-1);
childBox.x1 = 0;
childBox.x2 = cornerWidth;
childBox.y1 = availHeight;
childBox.y2 = availHeight + cornerHeight;
leftCorner.allocate(childBox, flags);
[cornerMinWidth, cornerWidth] = rightCorner.get_preferred_width(-1);
[cornerMinHeight, cornerHeight] = rightCorner.get_preferred_height(-1);
childBox.x1 = availWidth - cornerWidth;
childBox.x2 = availWidth;
childBox.y1 = availHeight;
childBox.y2 = availHeight + cornerHeight;
rightCorner.allocate(childBox, flags);
}
});
const Panel = new Lang.Class({
Name: 'Panel',
_init : function() {
this.actor = new Shell.GenericContainer({ name: 'panel',
reactive: true });
this.actor = new St.Widget({ name: 'panel',
reactive: true,
layoutManager: new PanelLayout() });
this.actor._delegate = this;
this.statusArea = {};
@ -947,7 +997,6 @@ const Panel = new Lang.Class({
this._leftCorner = new PanelCorner(this._rightBox, St.Side.LEFT);
else
this._leftCorner = new PanelCorner(this._leftBox, St.Side.LEFT);
this.actor.add_actor(this._leftCorner.actor);
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL)
@ -956,9 +1005,6 @@ const Panel = new Lang.Class({
this._rightCorner = new PanelCorner(this._rightBox, St.Side.RIGHT);
this.actor.add_actor(this._rightCorner.actor);
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
this.actor.connect('allocate', Lang.bind(this, this._allocate));
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress));
Main.layoutManager.panelBox.add(this.actor);
@ -969,83 +1015,6 @@ const Panel = new Lang.Class({
this._updatePanel();
},
_getPreferredWidth: function(actor, forHeight, alloc) {
alloc.min_size = -1;
alloc.natural_size = Main.layoutManager.primaryMonitor.width;
},
_getPreferredHeight: function(actor, forWidth, alloc) {
// We don't need to implement this; it's forced by the CSS
alloc.min_size = -1;
alloc.natural_size = -1;
},
_allocate: function(actor, box, flags) {
let allocWidth = box.x2 - box.x1;
let allocHeight = box.y2 - box.y1;
let [leftMinWidth, leftNaturalWidth] = this._leftBox.get_preferred_width(-1);
let [centerMinWidth, centerNaturalWidth] = this._centerBox.get_preferred_width(-1);
let [rightMinWidth, rightNaturalWidth] = this._rightBox.get_preferred_width(-1);
let sideWidth, centerWidth;
centerWidth = centerNaturalWidth;
sideWidth = (allocWidth - centerWidth) / 2;
let childBox = new Clutter.ActorBox();
childBox.y1 = 0;
childBox.y2 = allocHeight;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL) {
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth),
leftNaturalWidth);
childBox.x2 = allocWidth;
} else {
childBox.x1 = 0;
childBox.x2 = Math.min(Math.floor(sideWidth),
leftNaturalWidth);
}
this._leftBox.allocate(childBox, flags);
childBox.x1 = Math.ceil(sideWidth);
childBox.y1 = 0;
childBox.x2 = childBox.x1 + centerWidth;
childBox.y2 = allocHeight;
this._centerBox.allocate(childBox, flags);
childBox.y1 = 0;
childBox.y2 = allocHeight;
if (this.actor.get_text_direction() == Clutter.TextDirection.RTL) {
childBox.x1 = 0;
childBox.x2 = Math.min(Math.floor(sideWidth),
rightNaturalWidth);
} else {
childBox.x1 = allocWidth - Math.min(Math.floor(sideWidth),
rightNaturalWidth);
childBox.x2 = allocWidth;
}
this._rightBox.allocate(childBox, flags);
let cornerMinWidth, cornerMinHeight;
let cornerWidth, cornerHeight;
[cornerMinWidth, cornerWidth] = this._leftCorner.actor.get_preferred_width(-1);
[cornerMinHeight, cornerHeight] = this._leftCorner.actor.get_preferred_height(-1);
childBox.x1 = 0;
childBox.x2 = cornerWidth;
childBox.y1 = allocHeight;
childBox.y2 = allocHeight + cornerHeight;
this._leftCorner.actor.allocate(childBox, flags);
[cornerMinWidth, cornerWidth] = this._rightCorner.actor.get_preferred_width(-1);
[cornerMinHeight, cornerHeight] = this._rightCorner.actor.get_preferred_height(-1);
childBox.x1 = allocWidth - cornerWidth;
childBox.x2 = allocWidth;
childBox.y1 = allocHeight;
childBox.y2 = allocHeight + cornerHeight;
this._rightCorner.actor.allocate(childBox, flags);
},
_onButtonPress: function(actor, event) {
if (event.get_source() != actor)
return false;

View File

@ -2,6 +2,7 @@
const Lang = imports.lang;
const Mainloop = imports.mainloop;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Shell = imports.gi.Shell;
// We stop polling if the user is idle for more than this amount of time
@ -40,9 +41,9 @@ const PointerWatcher = new Lang.Class({
Name: 'PointerWatcher',
_init: function() {
let idleMonitor = Shell.IdleMonitor.get();
idleMonitor.add_watch(IDLE_TIME,
Lang.bind(this, this._onIdleMonitorWatch));
let idleMonitor = new GnomeDesktop.IdleMonitor();
idleMonitor.connect('became-active', Lang.bind(this, this._onIdleMonitorBecameActive));
idleMonitor.add_watch(IDLE_TIME, Lang.bind(this, this._onIdleMonitorBecameIdle));
this._idle = idleMonitor.get_idletime() > IDLE_TIME;
this._watches = [];
this.pointerX = null;
@ -78,11 +79,14 @@ const PointerWatcher = new Lang.Class({
}
},
_onIdleMonitorWatch: function(monitor, id, userBecameIdle) {
this._idle = userBecameIdle;
if (!userBecameIdle)
this._updatePointer();
_onIdleMonitorBecameActive: function(monitor) {
this._idle = false;
this._updatePointer();
this._updateTimeout();
},
_onIdleMonitorBecameIdle: function(monitor) {
this._idle = true;
this._updateTimeout();
},

View File

@ -404,9 +404,17 @@ const PopupSeparatorMenuItem = new Lang.Class({
this.parent({ reactive: false,
can_focus: false});
this._drawingArea = new St.DrawingArea({ style_class: 'popup-separator-menu-item' });
this.addActor(this._drawingArea, { span: -1, expand: true });
this._drawingArea.connect('repaint', Lang.bind(this, this._onRepaint));
this._separator = new HorzSeparator({ style_class: 'popup-separator-menu-item' });
this.addActor(this._separator.actor, { span: -1, expand: true });
}
});
const HorzSeparator = new Lang.Class({
Name: 'HorzSeparator',
_init: function (params) {
this.actor = new St.DrawingArea(params);
this.actor.connect('repaint', Lang.bind(this, this._onRepaint));
},
_onRepaint: function(area) {

View File

@ -27,6 +27,9 @@ const SearchProviderIface = <interface name="org.gnome.Shell.SearchProvider">
<method name="ActivateResult">
<arg type="s" direction="in" />
</method>
<method name="LaunchSearch">
<arg type="as" direction="in" />
</method>
</interface>;
var SearchProviderProxy = Gio.DBusProxy.makeProxyWrapper(SearchProviderIface);
@ -112,6 +115,7 @@ const RemoteSearchProvider = new Lang.Class({
this.parent(title.toUpperCase());
this._cancellable = new Gio.Cancellable();
this.icon = icon;
},
createIcon: function(size, meta) {
@ -126,9 +130,7 @@ const RemoteSearchProvider = new Lang.Class({
width, height, rowStride, size);
}
// Ugh, but we want to fall back to something ...
return new St.Icon({ icon_name: 'text-x-generic',
icon_size: size });
return null;
},
_getResultsFinished: function(results, error) {
@ -196,6 +198,10 @@ const RemoteSearchProvider = new Lang.Class({
activateResult: function(id) {
this._proxy.ActivateResultRemote(id);
},
launchSearch: function(terms) {
this._proxy.LaunchSearchRemote(terms);
}
});

View File

@ -202,11 +202,12 @@ const RunDialog = new Lang.Class({
let label = new St.Label({ style_class: 'run-dialog-label',
text: _("Please enter a command:") });
text: _("Enter a Command") });
this.contentLayout.add(label, { y_align: St.Align.START });
let entry = new St.Entry({ style_class: 'run-dialog-entry' });
let entry = new St.Entry({ style_class: 'run-dialog-entry',
can_focus: true });
ShellEntry.addContextMenu(entry);
entry.label_actor = label;
@ -236,6 +237,10 @@ const RunDialog = new Lang.Class({
this._errorBox.hide();
this.setButtons([{ action: Lang.bind(this, this.close),
label: _("Close"),
key: Clutter.Escape }]);
this._pathCompleter = new Gio.FilenameCompleter();
this._commandCompleter = new CommandCompleter();
this._group.connect('notify::visible', Lang.bind(this._commandCompleter, this._commandCompleter.update));
@ -246,20 +251,12 @@ const RunDialog = new Lang.Class({
let symbol = e.get_key_symbol();
if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
this.popModal();
if (e.get_state() & Clutter.ModifierType.CONTROL_MASK)
this._run(o.get_text(), true);
else
this._run(o.get_text(), false);
if (!this._commandError)
this._run(o.get_text(),
e.get_state() & Clutter.ModifierType.CONTROL_MASK);
if (!this._commandError ||
!this.pushModal())
this.close();
else {
if (!this.pushModal())
this.close();
}
return true;
}
if (symbol == Clutter.Escape) {
this.close();
return true;
}
if (symbol == Clutter.slash) {

View File

@ -9,7 +9,6 @@ const Lang = imports.lang;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const TweenerEquations = imports.tweener.equations;
@ -437,8 +436,6 @@ const ScreenShield = new Lang.Class({
{ inhibitEvents: true,
fadeInTime: STANDARD_FADE_TIME,
fadeFactor: 1 });
this.idleMonitor = Shell.IdleMonitor.get();
},
_onLockScreenKeyRelease: function(actor, event) {
@ -548,49 +545,35 @@ const ScreenShield = new Lang.Class({
},
_onStatusChanged: function(status) {
if (status != GnomeSession.PresenceStatus.IDLE)
return;
if (this._dialog) {
this._dialog.cancel();
if (!this._isGreeter) {
this._dialog = null;
}
}
if (!this._isModal) {
Main.pushModal(this.actor);
this._isModal = true;
}
if (!this._isActive) {
this._lightbox.show();
if (this._activationTime == 0)
this._activationTime = GLib.get_monotonic_time();
// What we want is a negative transition to 0, so we install a watch for
// 1 second and trigger it if the idle_time becomes lower than that
// The correct fix will come in GNOME 3.8 with GnomeDesktop.IdleMonitor
this._becameActiveId = this.idleMonitor.add_watch(1000, Lang.bind(this, function() {
if (this.idleMonitor.get_idletime() >= 1000)
return;
this.idleMonitor.remove_watch(this._becameActiveId);
let lightboxWasShown = this._lightbox.shown;
this._lightbox.hide();
let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
if (shouldLock || this._isLocked) {
this.lock(false);
} else if (this._isActive) {
this.unlock();
if (status == GnomeSession.PresenceStatus.IDLE) {
if (this._dialog) {
this._dialog.cancel();
if (!this._isGreeter) {
this._dialog = null;
}
}));
}
this._isActive = true;
this.emit('lock-status-changed');
if (!this._isModal) {
Main.pushModal(this.actor);
this._isModal = true;
}
if (!this._isActive) {
this._lightbox.show();
if (this._activationTime == 0)
this._activationTime = GLib.get_monotonic_time();
}
} else {
let lightboxWasShown = this._lightbox.shown;
this._lightbox.hide();
let shouldLock = lightboxWasShown && this._settings.get_boolean(LOCK_ENABLED_KEY);
if (shouldLock || this._isActive) {
this.lock(false);
} else if (this._isModal) {
this.unlock();
}
}
},
@ -658,15 +641,13 @@ const ScreenShield = new Lang.Class({
_ensureUnlockDialog: function(onPrimary) {
if (!this._dialog) {
let constructor = Main.sessionMode.unlockDialog;
if (!constructor) {
this._dialog = new constructor(this._lockDialogGroup);
if (!this._dialog) {
// This session mode has no locking capabilities
this.unlock();
return;
}
this._dialog = new constructor(this._lockDialogGroup);
let time = global.get_current_time();
this._dialog.connect('loaded', Lang.bind(this, function() {
if (!this._dialog.open(time, onPrimary)) {
@ -849,7 +830,6 @@ const ScreenShield = new Lang.Class({
this._activationTime = 0;
this._isActive = false;
this._isLocked = false;
this.emit('lock-status-changed');
},
@ -874,7 +854,6 @@ const ScreenShield = new Lang.Class({
this._resetLockScreen(animate, animate);
this._isActive = true;
this._isLocked = true;
this.emit('lock-status-changed');
},
});

View File

@ -163,6 +163,16 @@ const SearchProvider = new Lang.Class({
*/
activateResult: function(id) {
throw new Error('Not implemented');
},
/**
* launchSearch:
* @terms: Current search terms
*
* Called when the user clicks the provider icon.
*/
launchSearch: function(terms) {
throw new Error('Not implemented');
}
});
Signals.addSignalMethods(SearchProvider.prototype);
@ -261,5 +271,11 @@ const SearchSystem = new Lang.Class({
}
}
},
launchSearch: function(provider) {
let terms = this.getTerms();
provider.launchSearch(terms);
Main.overview.toggle();
}
});
Signals.addSignalMethods(SearchSystem.prototype);

View File

@ -4,25 +4,191 @@ const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const St = imports.gi.St;
const Atk = imports.gi.Atk;
const AppDisplay = imports.ui.appDisplay;
const DND = imports.ui.dnd;
const IconGrid = imports.ui.iconGrid;
const Main = imports.ui.main;
const Overview = imports.ui.overview;
const PopupMenu = imports.ui.popupMenu;
const Search = imports.ui.search;
const MAX_SEARCH_RESULTS_ROWS = 1;
const MAX_SEARCH_RESULTS_ROWS = 3;
const MAX_GRID_SEARCH_RESULTS_ROWS = 1;
const SearchResult = new Lang.Class({
Name: 'SearchResult',
const ListSearchResult = new Lang.Class({
Name: 'ListSearchResult',
ICON_SIZE: 64,
_init: function(provider, metaInfo, terms) {
this.provider = provider;
this.metaInfo = metaInfo;
this.actor = new St.Button({ style_class: 'search-result',
reactive: true,
can_focus: true,
track_hover: true,
x_align: St.Align.START,
x_fill: true,
y_fill: true });
this.actor._delegate = this;
let content = new St.BoxLayout({ style_class: 'search-result-content',
vertical: false });
this._content = content;
this.actor.set_child(content);
// An icon for, or thumbnail of, content
let icon = this.metaInfo['createIcon'](this.ICON_SIZE);
if (icon) {
let iconBin = new St.Bin({ style_class: 'search-result-icon',
child: icon });
content.add(iconBin);
}
let details = new St.BoxLayout({ style_class: 'search-result-details',
vertical: true });
content.add(details, { x_fill: true,
y_fill: false,
x_align: St.Align.START,
y_align: St.Align.MIDDLE });
let title = new St.Label({ style_class: 'search-result-details-title',
text: this.metaInfo['name'] })
details.add(title, { x_fill: true,
y_fill: false,
x_align: St.Align.START,
y_align: St.Align.START });
// TODO: could highlight terms in the description here, or should
// providers provide what should be highlighted?
if (this.metaInfo['description']) {
let description = new St.Label({ style_class: 'search-result-details-description',
text: this.metaInfo['description'] });
details.add(description, { x_fill: false,
y_fill: true,
x_align: St.Align.START,
y_align: St.Align.END });
}
this.actor.connect('clicked', Lang.bind(this, this._onResultClicked));
},
setSelected: function(selected) {
if (selected)
this.actor.add_style_pseudo_class('selected');
else
this.actor.remove_style_pseudo_class('selected');
},
activate: function() {
this.provider.activateResult(this.metaInfo.id);
Main.overview.toggle();
},
_onResultClicked: function(actor) {
this.activate();
}
});
const ListSearchResults = new Lang.Class({
Name: 'ListSearchResults',
Extends: Search.SearchResultDisplay,
_init: function(provider) {
this.parent(provider);
this.actor = new St.BoxLayout({ style_class: 'results-list',
vertical: true });
this.actor.connect('notify::width', Lang.bind(this, function() {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
let results = this.getResultsForDisplay();
if (results.length == 0)
return;
provider.getResultMetas(results, Lang.bind(this, this.renderResults));
}));
}));
this._notDisplayedResult = [];
this._terms = [];
this._pendingClear = false;
},
getResultsForDisplay: function() {
let alreadyVisible = this._pendingClear ? 0 : this.getVisibleResultCount();
let canDisplay = MAX_SEARCH_RESULTS_ROWS - alreadyVisible;
let numResults = Math.min(this._notDisplayedResult.length, canDisplay);
return this._notDisplayedResult.splice(0, numResults);
},
getVisibleResultCount: function() {
return this.actor.get_n_children();
},
hasMoreResults: function() {
return this._notDisplayedResult.length > 0;
},
setResults: function(results, terms) {
// copy the lists
this._notDisplayedResult = results.slice(0);
this._terms = terms.slice(0);
this._pendingClear = true;
},
renderResults: function(metas) {
for (let i = 0; i < metas.length; i++) {
let display = new ListSearchResult(this.provider, metas[i], this._terms);
this.addItem(display.actor);
display.actor.connect('key-focus-in', Lang.bind(this, this._onFocusedProviderChanged));
}
},
clear: function () {
this.actor.destroy_all_children();
this._pendingClear = false;
},
getFirstResult: function() {
if (this.getVisibleResultCount() > 0)
return this.getItemAtIndex(0)._delegate;
else
return null;
},
addItem: function(actor, index) {
if (index !== undefined)
this.actor.insert_child_at_index(actor, index);
else
this.actor.add_actor(actor);
},
getItemAtIndex: function(index) {
return this.actor.get_child_at_index(index);
},
_onFocusedProviderChanged: function() {
this.emit('focused-provider-changed');
}
});
Signals.addSignalMethods(ListSearchResults.prototype);
const GridSearchResult = new Lang.Class({
Name: 'GridSearchResult',
_init: function(provider, metaInfo, terms) {
this.provider = provider;
this.metaInfo = metaInfo;
this.actor = new St.Button({ style_class: 'grid-search-result',
reactive: true,
x_align: St.Align.START,
y_fill: true });
@ -31,7 +197,7 @@ const SearchResult = new Lang.Class({
let content = provider.createResultActor(metaInfo, terms);
if (content == null) {
content = new St.Bin({ style_class: 'search-result-content',
content = new St.Bin({ style_class: 'grid-search-result-content',
reactive: true,
can_focus: true,
track_hover: true,
@ -45,7 +211,7 @@ const SearchResult = new Lang.Class({
if (content._delegate && content._delegate.getDragActorSource)
this._dragActorSource = content._delegate.getDragActorSource();
}
this._content = content;
this.content = content;
this.actor.set_child(content);
this.actor.connect('clicked', Lang.bind(this, this._onResultClicked));
@ -53,23 +219,23 @@ const SearchResult = new Lang.Class({
let draggable = DND.makeDraggable(this.actor);
draggable.connect('drag-begin',
Lang.bind(this, function() {
Main.overview.beginItemDrag(this);
Main.overview.beginAppDrag(this);
}));
draggable.connect('drag-cancelled',
Lang.bind(this, function() {
Main.overview.cancelledItemDrag(this);
Main.overview.cancelledAppDrag(this);
}));
draggable.connect('drag-end',
Lang.bind(this, function() {
Main.overview.endItemDrag(this);
Main.overview.endAppDrag(this);
}));
},
setSelected: function(selected) {
if (selected)
this._content.add_style_pseudo_class('selected');
this.content.add_style_pseudo_class('selected');
else
this._content.remove_style_pseudo_class('selected');
this.content.remove_style_pseudo_class('selected');
},
activate: function() {
@ -85,7 +251,7 @@ const SearchResult = new Lang.Class({
if (this._dragActorSource)
return this._dragActorSource;
// not exactly right, but alignment problems are hard to notice
return this._content;
return this.content;
},
getDragActor: function(stageX, stageY) {
@ -108,11 +274,11 @@ const GridSearchResults = new Lang.Class({
_init: function(provider, grid) {
this.parent(provider);
this._grid = grid || new IconGrid.IconGrid({ rowLimit: MAX_SEARCH_RESULTS_ROWS,
this._grid = grid || new IconGrid.IconGrid({ rowLimit: MAX_GRID_SEARCH_RESULTS_ROWS,
xAlign: St.Align.START });
this.actor = new St.Bin({ x_align: St.Align.START });
this.actor = new St.Bin({ x_align: St.Align.MIDDLE });
this.actor.set_child(this._grid.actor);
this._width = 0;
this.actor.connect('notify::width', Lang.bind(this, function() {
this._width = this.actor.width;
@ -130,6 +296,7 @@ const GridSearchResults = new Lang.Class({
},
getResultsForDisplay: function() {
this._grid.actor.ensure_style();
let alreadyVisible = this._pendingClear ? 0 : this._grid.visibleItemsCount();
let canDisplay = this._grid.childrenInRow(this._width) * this._grid.getRowLimit()
- alreadyVisible;
@ -143,6 +310,10 @@ const GridSearchResults = new Lang.Class({
return this._grid.visibleItemsCount();
},
hasMoreResults: function() {
return this._notDisplayedResult.length > 0;
},
setResults: function(results, terms) {
// copy the lists
this._notDisplayedResult = results.slice(0);
@ -152,8 +323,10 @@ const GridSearchResults = new Lang.Class({
renderResults: function(metas) {
for (let i = 0; i < metas.length; i++) {
let display = new SearchResult(this.provider, metas[i], this._terms);
let display = new GridSearchResult(this.provider, metas[i], this._terms);
this._grid.addItem(display.actor);
display.content.connect('key-focus-in', Lang.bind(this, this._onFocusedProviderChanged));
}
},
@ -167,11 +340,17 @@ const GridSearchResults = new Lang.Class({
return this._grid.getItemAtIndex(0)._delegate;
else
return null;
},
_onFocusedProviderChanged: function() {
this.emit('focused-provider-changed');
}
});
Signals.addSignalMethods(GridSearchResults.prototype);
const SearchResults = new Lang.Class({
Name: 'SearchResults',
const SearchDisplay = new Lang.Class({
Name: 'SearchDisplay',
_init: function(searchSystem) {
this._searchSystem = searchSystem;
@ -222,19 +401,43 @@ const SearchResults = new Lang.Class({
createProviderMeta: function(provider) {
let providerBox = new St.BoxLayout({ style_class: 'search-section',
vertical: true });
let title = new St.Label({ style_class: 'search-section-header',
text: provider.title });
providerBox.add(title, { x_fill: false, x_align: St.Align.START });
let providerBoxContent = new St.BoxLayout({ style_class: 'search-section-content' });
let isAppsProvider = (provider instanceof AppDisplay.AppSearchProvider);
let providerIcon;
if (!isAppsProvider) {
let separator = new PopupMenu.HorzSeparator({ style_class: 'search-section-separator' });
providerBox.add(separator.actor, { expand: true });
providerIcon = new ProviderIcon(provider);
providerIcon.connect('launch-search', Lang.bind(this, function(providerIcon) {
this._searchSystem.launchSearch(providerIcon.provider);
}));
providerBoxContent.add(providerIcon.actor, { x_fill: false,
y_fill: false,
x_align: St.Align.START,
y_align: St.Align.START });
}
let resultDisplayBin = new St.Bin({ style_class: 'search-section-results',
x_fill: true,
y_fill: true });
providerBox.add(resultDisplayBin, { expand: true });
let resultDisplay = new GridSearchResults(provider);
providerBoxContent.add(resultDisplayBin, { expand: true });
providerBox.add(providerBoxContent);
let resultDisplay;
if (isAppsProvider)
resultDisplay = new GridSearchResults(provider);
else
resultDisplay = new ListSearchResults(provider);
resultDisplay.connect('focused-provider-changed', Lang.bind(this, this._updateProviderIconCanFocus));
resultDisplayBin.set_child(resultDisplay.actor);
this._providerMeta.push({ provider: provider,
actor: providerBox,
icon: providerIcon,
resultDisplay: resultDisplay });
this._content.add(providerBox);
},
@ -255,6 +458,7 @@ const SearchResults = new Lang.Class({
let meta = this._providerMeta[i];
meta.resultDisplay.clear();
meta.actor.hide();
if (meta.icon) meta.icon.actor.can_focus = false;
}
},
@ -262,6 +466,7 @@ const SearchResults = new Lang.Class({
let meta = this._metaForProvider(provider);
meta.resultDisplay.clear();
meta.actor.hide();
if (meta.icon) meta.icon.actor.can_focus = false;
},
reset: function() {
@ -284,6 +489,11 @@ const SearchResults = new Lang.Class({
return this._providerMeta[this._providers.indexOf(provider)];
},
_metaForProvidersExcept: function(provider) {
let skip = this._providers.indexOf(provider);
return this._providerMeta.filter(function(meta, index) { return index != skip }, this);
},
_maybeSetInitialSelection: function() {
let newDefaultResult = null;
@ -341,6 +551,9 @@ const SearchResults = new Lang.Class({
meta.resultDisplay.setResults(providerResults, terms);
let results = meta.resultDisplay.getResultsForDisplay();
if (meta.icon)
meta.icon.moreIcon.visible = meta.resultDisplay.hasMoreResults();
provider.getResultMetas(results, Lang.bind(this, function(metas) {
this._clearDisplayForProvider(provider);
meta.actor.show();
@ -374,6 +587,15 @@ const SearchResults = new Lang.Class({
this._defaultResult.setSelected(highlight);
},
_updateProviderIconCanFocus: function(resultDisplay) {
let meta = this._metaForProvider(resultDisplay.provider);
if (meta.icon)
meta.icon.actor.can_focus = true;
let others = this._metaForProvidersExcept(resultDisplay.provider);
others.forEach(function(meta) { if (meta.icon) meta.icon.actor.can_focus = false; });
},
navigateFocus: function(direction) {
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL;
if (direction == Gtk.DirectionType.TAB_BACKWARD ||
@ -393,3 +615,65 @@ const SearchResults = new Lang.Class({
}
}
});
const ProviderIcon = new Lang.Class({
Name: 'ProviderIcon',
PROVIDER_ICON_SIZE: 48,
MORE_ICON_SIZE: 16,
_init: function(provider) {
this.provider = provider;
this.actor = new St.Button({ style_class: 'search-section-icon-bin',
reactive: true,
track_hover: true });
this.actor.connect('clicked', Lang.bind(this, this._onIconClicked));
this._content = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this.actor.set_child(this._content);
let rtl = (this.actor.get_text_direction() == Clutter.TextDirection.RTL);
this.moreIcon = new St.Icon({ style_class: 'search-section-icon-more',
icon_size: this.MORE_ICON_SIZE,
icon_name: 'list-add-symbolic',
visible: false,
x_align: rtl ? Clutter.ActorAlign.START : Clutter.ActorAlign.END,
y_align: Clutter.ActorAlign.END,
// HACK: without these, ClutterBinLayout
// ignores alignment properties on the actor
x_expand: true,
y_expand: true });
this._iconBin = new St.Bin({ style_class: 'search-section-icon',
width: this.PROVIDER_ICON_SIZE,
height: this.PROVIDER_ICON_SIZE });
this._content.add_actor(this._iconBin);
this._content.add_actor(this.moreIcon);
this._createProviderIcon();
},
_createProviderIcon: function() {
let icon = new St.Icon({ icon_size: this.PROVIDER_ICON_SIZE });
if (this.provider.icon)
icon.gicon = this.provider.icon;
else
icon.icon_name = 'application-x-executable';
this._iconBin.set_child(icon);
},
activate: function() {
this.emit('launch-search');
},
_onIconClicked: function(actor) {
this.activate();
}
});
Signals.addSignalMethods(ProviderIcon.prototype);

View File

@ -39,7 +39,7 @@ const _modes = {
unlockDialog: imports.gdm.loginDialog.LoginDialog,
components: ['polkitAgent'],
panel: {
left: [],
left: ['logo'],
center: ['dateMenu'],
right: ['a11y', 'display', 'keyboard',
'volume', 'battery', 'powerMenu']

View File

@ -233,20 +233,11 @@ const NMWirelessSectionTitleMenuItem = new Lang.Class({
}
});
const NMDevice = new Lang.Class({
Name: 'NMDevice',
const NMConnectionBased = new Lang.Class({
Name: 'NMConnectionBased',
Abstract: true,
_init: function(client, device, connections) {
this.device = device;
if (device) {
this.device._delegate = this;
this._stateChangedId = this.device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
} else
this._stateChangedId = 0;
// protected
this._client = client;
_init: function(connections) {
this._connections = [ ];
for (let i = 0; i < connections.length; i++) {
if (!connections[i].get_uuid())
@ -264,26 +255,115 @@ const NMDevice = new Lang.Class({
this._connections.push(obj);
}
this._connections.sort(this._connectionSortFunction);
},
checkConnection: function(connection) {
let pos = this._findConnection(connection.get_uuid());
let exists = pos != -1;
let valid = this.connectionValid(connection);
let similar = false;
if (exists) {
let existing = this._connections[pos];
// Check if connection changed name or id
similar = existing.name == connection.get_id() &&
existing.timestamp == connection._timestamp;
}
if (exists && valid && similar) {
// Nothing to do
return;
}
if (exists)
this.removeConnection(connection);
if (valid)
this.addConnection(connection);
},
addConnection: function(connection) {
// record the connection
let obj = {
connection: connection,
name: connection.get_id(),
uuid: connection.get_uuid(),
timestamp: connection._timestamp,
item: null,
};
Util.insertSorted(this._connections, obj, this._connectionSortFunction);
this._queueCreateSection();
},
removeConnection: function(connection) {
let pos = this._findConnection(connection.get_uuid());
if (pos == -1) {
// this connection was never added, nothing to do here
return;
}
let obj = this._connections[pos];
if (obj.item)
obj.item.destroy();
this._connections.splice(pos, 1);
if (this._connections.length <= 1) {
// We need to show the automatic connection again
// (or in the case of NMDeviceWired, we want to hide
// the only explicit connection)
this._queueCreateSection();
}
},
_findConnection: function(uuid) {
for (let i = 0; i < this._connections.length; i++) {
let obj = this._connections[i];
if (obj.uuid == uuid)
return i;
}
return -1;
},
_connectionSortFunction: function(one, two) {
if (one.timestamp == two.timestamp)
return GLib.utf8_collate(one.name, two.name);
return two.timestamp - one.timestamp;
},
});
Signals.addSignalMethods(NMConnectionBased.prototype);
const NMDevice = new Lang.Class({
Name: 'NMDevice',
Abstract: true,
Extends: NMConnectionBased,
_init: function(client, device, connections) {
this.device = device;
this.device._delegate = this;
this._stateChangedId = this.device.connect('state-changed', Lang.bind(this, this._deviceStateChanged));
// protected
this._client = client;
this.parent(connections);
this._activeConnection = null;
this._activeConnectionItem = null;
this._autoConnectionItem = null;
this._overflowItem = null;
if (this.device) {
this.statusItem = new PopupMenu.PopupSwitchMenuItem(this._getDescription(), this.connected, { style_class: 'popup-subtitle-menu-item' });
this._statusChanged = this.statusItem.connect('toggled', Lang.bind(this, function(item, state) {
let ok;
if (state)
ok = this.activate();
else
ok = this.deactivate();
this.statusItem = new PopupMenu.PopupSwitchMenuItem(this._getDescription(), this.connected, { style_class: 'popup-subtitle-menu-item' });
this._statusChanged = this.statusItem.connect('toggled', Lang.bind(this, function(item, state) {
let ok;
if (state)
ok = this.activate();
else
ok = this.deactivate();
if (!ok)
item.setToggleState(!state);
}));
if (!ok)
item.setToggleState(!state);
}));
this._updateStatusItem();
}
this._updateStatusItem();
this.section = new PopupMenu.PopupMenuSection();
this._deferredWorkId = Main.initializeDeferredWork(this.section.actor, Lang.bind(this, this._createSection));
@ -352,6 +432,10 @@ const NMDevice = new Lang.Class({
return this.device.state == NetworkManager.DeviceState.ACTIVATED;
},
clearActiveConnection: function(activeConnection) {
this.setActiveConnection(null);
},
setActiveConnection: function(activeConnection) {
if (activeConnection == this._activeConnection)
// nothing to do
@ -369,80 +453,13 @@ const NMDevice = new Lang.Class({
this._queueCreateSection();
},
checkConnection: function(connection) {
let pos = this._findConnection(connection.get_uuid());
let exists = pos != -1;
let valid = this.connectionValid(connection);
let similar = false;
if (exists) {
let existing = this._connections[pos];
// Check if connection changed name or id
similar = existing.name == connection.get_id() &&
existing.timestamp == connection._timestamp;
}
if (exists && valid && similar) {
// Nothing to do
return;
}
if (exists)
this.removeConnection(connection);
if (valid)
this.addConnection(connection);
},
addConnection: function(connection) {
// record the connection
let obj = {
connection: connection,
name: connection.get_id(),
uuid: connection.get_uuid(),
timestamp: connection._timestamp,
item: null,
};
Util.insertSorted(this._connections, obj, this._connectionSortFunction);
this._clearSection();
this._queueCreateSection();
},
removeConnection: function(connection) {
let pos = this._findConnection(connection.get_uuid());
if (pos == -1) {
// this connection was never added, nothing to do here
return;
}
let obj = this._connections[pos];
if (obj.item)
obj.item.destroy();
this._connections.splice(pos, 1);
if (this._connections.length <= 1) {
// We need to show the automatic connection again
// (or in the case of NMDeviceWired, we want to hide
// the only explicit connection)
this._clearSection();
this._queueCreateSection();
}
},
connectionValid: function(connection) {
return this.device.connection_valid(connection);
},
_connectionSortFunction: function(one, two) {
if (one.timestamp == two.timestamp)
return GLib.utf8_collate(one.name, two.name);
return two.timestamp - one.timestamp;
},
setEnabled: function(enabled) {
// do nothing by default, we want to keep the conneciton list visible
// in the majority of cases (wired, wwan, vpn)
// in the majority of cases (wired, wwan)
},
getStatusLabel: function() {
@ -500,15 +517,6 @@ const NMDevice = new Lang.Class({
throw new TypeError('Invoking pure virtual function NMDevice.createAutomaticConnection');
},
_findConnection: function(uuid) {
for (let i = 0; i < this._connections.length; i++) {
let obj = this._connections[i];
if (obj.uuid == uuid)
return i;
}
return -1;
},
_queueCreateSection: function() {
this._clearSection();
Main.queueDeferredWork(this._deferredWorkId);
@ -652,8 +660,6 @@ const NMDevice = new Lang.Class({
return out;
}
});
Signals.addSignalMethods(NMDevice.prototype);
const NMDeviceWired = new Lang.Class({
Name: 'NMDeviceWired',
@ -868,95 +874,6 @@ const NMDeviceBluetooth = new Lang.Class({
}
});
// Not a real device, but I save a lot code this way
const NMDeviceVPN = new Lang.Class({
Name: 'NMDeviceVPN',
Extends: NMDevice,
_init: function(client, device, connections) {
// Disable autoconnections
this._autoConnectionName = null;
this.category = NMConnectionCategory.VPN;
this.parent(client, null, connections);
},
connectionValid: function(connection) {
return connection._type == NetworkManager.SETTING_VPN_SETTING_NAME;
},
get empty() {
return this._connections.length == 0;
},
get connected() {
if (!this._activeConnection)
return false;
return this._activeConnection.vpn_state == NetworkManager.VPNConnectionState.ACTIVATED;
},
setActiveConnection: function(activeConnection) {
if (this._stateChangeId)
this._activeConnection.disconnect(this._stateChangeId);
this._stateChangeId = 0;
this.parent(activeConnection);
if (this._activeConnection)
this._stateChangeId = this._activeConnection.connect('vpn-state-changed',
Lang.bind(this, this._connectionStateChanged));
this.emit('state-changed');
},
_shouldShowConnectionList: function() {
return true;
},
deactivate: function() {
if (this._activeConnection)
this._client.deactivate_connection(this._activeConnection);
},
getStatusLabel: function() {
if (!this._activeConnection) // Same as DISCONNECTED
return null;
switch(this._activeConnection.vpn_state) {
case NetworkManager.VPNConnectionState.DISCONNECTED:
case NetworkManager.VPNConnectionState.ACTIVATED:
return null;
case NetworkManager.VPNConnectionState.PREPARE:
case NetworkManager.VPNConnectionState.CONNECT:
case NetworkManager.VPNConnectionState.IP_CONFIG_GET:
return _("connecting...");
case NetworkManager.VPNConnectionState.NEED_AUTH:
/* Translators: this is for network connections that require some kind of key or password */
return _("authentication required");
case NetworkManager.VPNConnectionState.FAILED:
return _("connection failed");
default:
log('VPN connection state invalid, is %d'.format(this.device.state));
return 'invalid';
}
},
_connectionStateChanged: function(connection, newstate, reason) {
if (newstate == NetworkManager.VPNConnectionState.FAILED) {
// FIXME: if we ever want to show something based on reason,
// we need to convert from NetworkManager.VPNConnectionStateReason
// to NetworkManager.DeviceStateReason
this.emit('activation-failed', reason);
}
// Differently from real NMDevices, there is no need to queue
// an update of the menu section, contents wouldn't change anyway
this.emit('state-changed');
}
});
const NMDeviceWireless = new Lang.Class({
Name: 'NMDeviceWireless',
Extends: NMDevice,
@ -1557,6 +1474,151 @@ const NMDeviceWireless = new Lang.Class({
},
});
const NMVPNSection = new Lang.Class({
Name: 'NMVPNSection',
Extends: NMConnectionBased,
category: NMConnectionCategory.VPN,
_init: function(client, connections) {
this.parent(connections);
this._client = client;
this.section = new PopupMenu.PopupMenuSection();
this._deferredWorkId = Main.initializeDeferredWork(this.section.actor, Lang.bind(this, this._createSection));
},
get empty() {
return this._connections.length == 0;
},
connectionValid: function(connection) {
// filtering is done by NMApplet code
return true;
},
getStatusLabel: function(activeConnection) {
switch(activeConnection.vpn_state) {
case NetworkManager.VPNConnectionState.DISCONNECTED:
case NetworkManager.VPNConnectionState.ACTIVATED:
return null;
case NetworkManager.VPNConnectionState.PREPARE:
case NetworkManager.VPNConnectionState.CONNECT:
case NetworkManager.VPNConnectionState.IP_CONFIG_GET:
return _("connecting...");
case NetworkManager.VPNConnectionState.NEED_AUTH:
/* Translators: this is for network connections that require some kind of key or password */
return _("authentication required");
case NetworkManager.VPNConnectionState.FAILED:
return _("connection failed");
default:
log('VPN connection state invalid, is %d'.format(this.device.state));
return 'invalid';
}
},
clearActiveConnection: function(activeConnection) {
let pos = this._findConnection(activeConnection.uuid);
if (pos < 0)
return;
let obj = this._connections[pos];
obj.active.disconnect(obj.stateChangedId);
obj.active = null;
if (obj.item) {
obj.item.setToggleState(false);
obj.item.setStatus(null);
}
},
setActiveConnection: function(activeConnection) {
let pos = this._findConnection(activeConnection.uuid);
if (pos < 0)
return;
let obj = this._connections[pos];
obj.active = activeConnection;
obj.stateChangedId = obj.active.connect('vpn-state-changed',
Lang.bind(this, this._connectionStateChanged));
if (obj.item) {
obj.item.setToggleState(obj.active.vpn_state ==
NetworkManager.VPNConnectionState.ACTIVATED);
obj.item.setStatus(this.getStatusLabel(obj.active));
}
},
_queueCreateSection: function() {
this.section.removeAll();
Main.queueDeferredWork(this._deferredWorkId);
},
_createConnectionItem: function(obj) {
let menuItem = new PopupMenu.PopupSwitchMenuItem(obj.name, false,
{ style_class: 'popup-subtitle-menu-item' });
menuItem.connect('toggled', Lang.bind(this, function(menuItem) {
if (menuItem.state) {
this._client.activate_connection(obj.connection, null, null, null);
// Immediately go back to disconnected, until NM tells us to change
menuItem.setToggleState(false);
} else if (obj.active) {
this._client.deactivate_connection(obj.active);
}
}));
if (obj.active) {
menuItem.setToggleState(obj.active.vpn_state ==
NetworkManager.VPNConnectionState.ACTIVATED);
menuItem.setStatus(this.getStatusLabel(obj.active));
}
return menuItem;
},
_createSection: function() {
if (this._connections.length > 0) {
this.section.actor.show();
for(let j = 0; j < this._connections.length; ++j) {
let obj = this._connections[j];
obj.item = this._createConnectionItem(obj);
if (j >= NUM_VISIBLE_NETWORKS) {
if (!this._overflowItem) {
this._overflowItem = new PopupMenu.PopupSubMenuMenuItem(_("More..."));
this.section.addMenuItem(this._overflowItem);
}
this._overflowItem.menu.addMenuItem(obj.item);
} else
this.section.addMenuItem(obj.item);
}
} else {
this.section.actor.hide()
}
},
_connectionStateChanged: function(vpnConnection, newstate, reason) {
if (newstate == NetworkManager.VPNConnectionState.FAILED) {
// FIXME: if we ever want to show something based on reason,
// we need to convert from NetworkManager.VPNConnectionStateReason
// to NetworkManager.DeviceStateReason
this.emit('activation-failed', reason);
}
let pos = this._findConnection(vpnConnection.uuid);
if (pos >= 0) {
let obj = this._connections[pos];
if (obj.item) {
obj.item.setToggleState(vpnConnection.vpn_state ==
NetworkManager.VPNConnectionState.ACTIVATED);
obj.item.setStatus(this.getStatusLabel(vpnConnection));
}
} else {
log('Could not find connection for vpn-state-changed handler');
}
},
});
const NMApplet = new Lang.Class({
Name: 'NMApplet',
Extends: PanelMenu.SystemStatusButton,
@ -1622,15 +1684,9 @@ const NMApplet = new Lang.Class({
this.menu.addMenuItem(this._devices.wwan.section);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this._devices.vpn = {
section: new PopupMenu.PopupMenuSection(),
device: this._makeWrapperDevice(NMDeviceVPN, null),
item: new NMWiredSectionTitleMenuItem(_("VPN Connections"))
};
this._devices.vpn.section.addMenuItem(this._devices.vpn.item);
this._devices.vpn.section.addMenuItem(this._devices.vpn.device.section);
this._devices.vpn.section.actor.hide();
this.menu.addMenuItem(this._devices.vpn.section);
this._vpnSection = new NMVPNSection(this._client, this._connections);
this._vpnSection.connect('activation-failed', Lang.bind(this, this._onActivationFailed));
this.menu.addMenuItem(this._vpnSection.section);
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addSettingsAction(_("Network Settings"), 'gnome-network-panel.desktop');
@ -1699,18 +1755,6 @@ const NMApplet = new Lang.Class({
},
_syncSectionTitle: function(category) {
if (category == NMConnectionCategory.VPN) {
// Special case VPN: it's only one device (and a fake one
// actually), and we don't show it if empty
let device = this._devices.vpn.device;
let section = this._devices.vpn.section;
let item = this._devices.vpn.item;
section.actor.visible = !device.empty;
item.updateForDevice(device);
return;
}
let devices = this._devices[category].devices;
let item = this._devices[category].item;
let section = this._devices[category].section;
@ -1747,10 +1791,9 @@ const NMApplet = new Lang.Class({
or this._source will be cleared */
this._ensureSource();
let icon = new St.Icon({ icon_name: iconName,
icon_size: MessageTray.NOTIFICATION_ICON_SIZE });
let gicon = new Gio.ThemedIcon({ name: iconName });
device._notification = new MessageTray.Notification(this._source, title, text,
{ icon: icon });
{ gicon: gicon });
device._notification.setUrgency(urgency);
device._notification.setTransient(true);
device._notification.connect('destroy', function() {
@ -1759,17 +1802,20 @@ const NMApplet = new Lang.Class({
this._source.notify(device._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);
},
_makeWrapperDevice: function(wrapperClass, device) {
let wrapper = new wrapperClass(this._client, device, this._connections);
wrapper._activationFailedId = wrapper.connect('activation-failed', Lang.bind(this, function(device, reason) {
// XXX: nm-applet has no special text depending on reason
// but I'm not sure of this generic message
this._notifyForDevice(device, 'network-error-symbolic',
_("Connection failed"),
_("Activation of network connection failed"),
MessageTray.Urgency.HIGH);
}));
wrapper._activationFailedId = wrapper.connect('activation-failed',
Lang.bind(this, this._onActivationFailed));
wrapper._deviceStateChangedId = wrapper.connect('state-changed', Lang.bind(this, function(dev) {
this._syncSectionTitle(dev.category);
}));
@ -1852,7 +1898,7 @@ const NMApplet = new Lang.Class({
for (let i = 0; i < closedConnections.length; i++) {
let active = closedConnections[i];
if (active._primaryDevice) {
active._primaryDevice.setActiveConnection(null);
active._primaryDevice.clearActiveConnection(active);
active._primaryDevice = null;
}
if (active._inited) {
@ -1919,7 +1965,7 @@ const NMApplet = new Lang.Class({
}
}
} else
a._primaryDevice = this._devices.vpn.device
a._primaryDevice = this._vpnSection;
if (a._primaryDevice)
a._primaryDevice.setActiveConnection(a);
@ -2001,8 +2047,7 @@ const NMApplet = new Lang.Class({
let section = connection._section;
if (section == NMConnectionCategory.VPN) {
this._devices.vpn.device.removeConnection(connection);
this._syncSectionTitle(section);
this._vpnSection.removeConnection(connection);
} else if (section != NMConnectionCategory.INVALID) {
let devices = this._devices[section].devices;
for (let i = 0; i < devices.length; i++)
@ -2025,8 +2070,7 @@ const NMApplet = new Lang.Class({
if (section == NMConnectionCategory.INVALID)
return;
if (section == NMConnectionCategory.VPN) {
this._devices.vpn.device.checkConnection(connection);
this._syncSectionTitle(section);
this._vpnSection.checkConnection(connection);
} else {
let devices = this._devices[section].devices;
for (let i = 0; i < devices.length; i++) {
@ -2052,7 +2096,6 @@ const NMApplet = new Lang.Class({
this._syncSectionTitle(NMConnectionCategory.WIRED);
this._syncSectionTitle(NMConnectionCategory.WIRELESS);
this._syncSectionTitle(NMConnectionCategory.WWAN);
this._syncSectionTitle(NMConnectionCategory.VPN);
},
_syncNMState: function() {

View File

@ -96,7 +96,7 @@ const Indicator = new Lang.Class({
let minutes = time % 60;
let hours = Math.floor(time / 60);
let timestring;
if (time >= 60) {
if (time > 60) {
if (minutes == 0) {
timestring = ngettext("%d hour remaining", "%d hours remaining", hours).format(hours);
} else {

View File

@ -5,6 +5,7 @@ const Clutter = imports.gi.Clutter;
const Gdm = imports.gi.Gdm;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Signals = imports.signals;
@ -195,9 +196,7 @@ const UnlockDialog = new Lang.Class({
return false;
}));
this._idleMonitor = Shell.IdleMonitor.get();
// this dialog is only created after user activity (curtain drag or
// escape key press), so the timeout will fire after IDLE_TIMEOUT seconds of inactivity
this._idleMonitor = new GnomeDesktop.IdleMonitor();
this._idleWatchId = this._idleMonitor.add_watch(IDLE_TIMEOUT * 1000, Lang.bind(this, this._escape));
},

View File

@ -9,11 +9,11 @@ const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Tp = imports.gi.TelepathyGLib;
const UPowerGlib = imports.gi.UPowerGlib;
const Atk = imports.gi.Atk;
const BoxPointer = imports.ui.boxpointer;
const GnomeSession = imports.misc.gnomeSession;
const LoginManager = imports.misc.loginManager;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
@ -74,11 +74,6 @@ const UserAvatarWidget = new Lang.Class({
let file = Gio.File.new_for_path(iconFile);
this.actor.child = null;
this.actor.style = 'background-image: url("%s");'.format(iconFile);
// AccountsService uses a fixed location for avatar images, so
// we need to clear out all cached data to pick up image changes,
// see https://bugzilla.gnome.org/show_bug.cgi?id=679268
this.actor.clear_background_image();
} else {
this.actor.style = null;
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
@ -193,7 +188,7 @@ const IMStatusChooserItem = new Lang.Class({
item = new IMStatusItem(_("Idle"), 'user-idle-symbolic');
this._combo.addMenuItem(item, IMStatus.IDLE);
item = new IMStatusItem(_("Unavailable"), 'user-offline-symbolic');
item = new IMStatusItem(_("Offline"), 'user-offline-symbolic');
this._combo.addMenuItem(item, IMStatus.OFFLINE);
this._combo.connect('active-item-changed',
@ -488,10 +483,11 @@ const UserMenuButton = new Lang.Class({
this._presence = new GnomeSession.Presence();
this._session = new GnomeSession.SessionManager();
this._haveShutdown = true;
this._haveSuspend = true;
this._accountMgr = Tp.AccountManager.dup();
this._upClient = new UPowerGlib.Client();
this._loginManager = LoginManager.getLoginManager();
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._iconBox = new St.Bin();
@ -571,14 +567,15 @@ const UserMenuButton = new Lang.Class({
// the lockdown setting changes, which should be close enough.
this.menu.connect('open-state-changed', Lang.bind(this,
function(menu, open) {
if (open)
this._updateHaveShutdown();
if (!open)
return;
this._updateHaveShutdown();
this._updateHaveSuspend();
}));
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
Lang.bind(this, this._updateHaveShutdown));
this._upClient.connect('notify::can-suspend', Lang.bind(this, this._updateSuspendOrPowerOff));
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
this._sessionUpdated();
},
@ -650,9 +647,15 @@ const UserMenuButton = new Lang.Class({
}));
},
_updateSuspendOrPowerOff: function() {
this._haveSuspend = this._upClient.get_can_suspend();
_updateHaveSuspend: function() {
this._loginManager.canSuspend(Lang.bind(this,
function(result) {
this._haveSuspend = result;
this._updateSuspendOrPowerOff();
}));
},
_updateSuspendOrPowerOff: function() {
if (!this._suspendOrPowerOffItem)
return;
@ -855,13 +858,13 @@ const UserMenuButton = new Lang.Class({
let tmpId = Main.screenShield.connect('lock-screen-shown', Lang.bind(this, function() {
Main.screenShield.disconnect(tmpId);
this._upClient.suspend_sync(null);
this._loginManager.suspend();
}));
this.menu.close(BoxPointer.PopupAnimation.NONE);
Main.screenShield.lock(true);
} else {
this._upClient.suspend_sync(null);
this._loginManager.suspend();
}
}
}

View File

@ -1,6 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta;
@ -19,6 +20,7 @@ const Tweener = imports.ui.tweener;
const Wanda = imports.ui.wanda;
const WorkspacesView = imports.ui.workspacesView;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
const FocusTrap = new Lang.Class({
Name: 'FocusTrap',
@ -50,7 +52,7 @@ const ViewSelector = new Lang.Class({
this._activePage = null;
this.active = false;
this.entryNonEmpty = false;
this._searchPending = false;
this._searchTimeoutId = 0;
@ -88,7 +90,7 @@ const ViewSelector = new Lang.Class({
this._appsPage = this._addPage(this._appDisplay.actor, null,
_("Applications"), 'system-run-symbolic');
this._searchResults = new SearchDisplay.SearchResults(this._searchSystem);
this._searchResults = new SearchDisplay.SearchDisplay(this._searchSystem);
this._searchPage = this._addPage(this._searchResults.actor, this._entry,
_("Search"), 'edit-find-symbolic');
@ -112,9 +114,6 @@ const ViewSelector = new Lang.Class({
global.focus_manager.add_group(this._searchResults.actor);
Main.overview.connect('item-drag-begin',
Lang.bind(this, this._resetShowAppsButton));
this._stageKeyPressId = 0;
Main.overview.connect('showing', Lang.bind(this,
function () {
@ -131,16 +130,15 @@ const ViewSelector = new Lang.Class({
}
}));
// Public constraints which may be used to tie actors' height or
// vertical position to the current tab's content; as the content's
// height and position depend on the view selector's style properties
// (e.g. font size, padding, spacing, ...) it would be extremely hard
// and ugly to get these from the outside. While it would be possible
// to use position and height properties directly, outside code would
// need to ensure that the content is properly allocated before
// accessing the properties.
this.constrainHeight = new Clutter.BindConstraint({ source: this._pageArea,
coordinate: Clutter.BindCoordinate.HEIGHT });
global.display.add_keybinding('toggle-application-view',
new Gio.Settings({ schema: SHELL_KEYBINDINGS_SCHEMA }),
Meta.KeyBindingFlags.NONE,
Lang.bind(this, this._showWithAppsPage));
},
_showWithAppsPage: function() {
Main.overview.show();
this._showAppsButton.set_checked(true);
},
show: function() {
@ -218,7 +216,9 @@ const ViewSelector = new Lang.Class({
},
_onShowAppsButtonToggled: function() {
if (this.active)
this.emit('apps-button-checked', this._showAppsButton.checked);
if (this.entryNonEmpty)
this.reset();
else
this._showPage(this._showAppsButton.checked ? this._appsPage
@ -234,7 +234,7 @@ const ViewSelector = new Lang.Class({
let symbol = event.get_key_symbol();
if (symbol == Clutter.Escape) {
if (this.active)
if (this.entryNonEmpty)
this.reset();
else if (this._showAppsButton.checked)
this._resetShowAppsButton();
@ -242,9 +242,9 @@ const ViewSelector = new Lang.Class({
Main.overview.hide();
return true;
} else if (Clutter.keysym_to_unicode(symbol) ||
(symbol == Clutter.BackSpace && this.active)) {
(symbol == Clutter.BackSpace && this.entryNonEmpty)) {
this.startSearch(event);
} else if (!this.active) {
} else if (!this.entryNonEmpty) {
if (symbol == Clutter.Tab || symbol == Clutter.Down) {
this._activePage.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
return true;
@ -257,6 +257,7 @@ const ViewSelector = new Lang.Class({
},
_searchCancelled: function() {
this.emit('search-cancelled');
this._showPage(this._showAppsButton.checked ? this._appsPage
: this._workspacesPage);
@ -318,13 +319,14 @@ const ViewSelector = new Lang.Class({
},
_onTextChanged: function (se, prop) {
let searchPreviouslyActive = this.active;
this.active = this._entry.get_text() != '';
this._searchPending = this.active && !searchPreviouslyActive;
let searchPreviouslyActive = this.entryNonEmpty;
this.entryNonEmpty = this._entry.get_text() != '';
this._searchPending = this.entryNonEmpty && !searchPreviouslyActive;
if (this._searchPending) {
this._searchResults.startingSearch();
}
if (this.active) {
if (this.entryNonEmpty) {
this.emit('search-begin');
this._entry.set_secondary_icon(this._activeIcon);
if (this._iconClickedId == 0) {
@ -341,7 +343,7 @@ const ViewSelector = new Lang.Class({
this._entry.set_secondary_icon(this._inactiveIcon);
this._searchCancelled();
}
if (!this.active) {
if (!this.entryNonEmpty) {
if (this._searchTimeoutId > 0) {
Mainloop.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0;
@ -369,7 +371,7 @@ const ViewSelector = new Lang.Class({
}
this._searchResults.activateDefault();
return true;
} else if (this.active) {
} else if (this.entryNonEmpty) {
let arrowNext, nextDirection;
if (entry.get_text_direction() == Clutter.TextDirection.RTL) {
arrowNext = Clutter.Left;

View File

@ -33,21 +33,13 @@ const DRAGGING_WINDOW_OPACITY = 100;
const BUTTON_LAYOUT_SCHEMA = 'org.gnome.shell.overrides';
const BUTTON_LAYOUT_KEY = 'button-layout';
// Define a layout scheme for small window counts. For larger
// counts we fall back to an algorithm. We need more schemes here
// unless we have a really good algorithm.
// Each triplet is [xCenter, yCenter, scale] where the scale
// is relative to the width of the workspace.
const POSITIONS = {
1: [[0.5, 0.5, 0.95]],
2: [[0.25, 0.5, 0.48], [0.75, 0.5, 0.48]],
3: [[0.25, 0.25, 0.48], [0.75, 0.25, 0.48], [0.5, 0.75, 0.48]],
4: [[0.25, 0.25, 0.47], [0.75, 0.25, 0.47], [0.75, 0.75, 0.47], [0.25, 0.75, 0.47]],
5: [[0.165, 0.25, 0.32], [0.495, 0.25, 0.32], [0.825, 0.25, 0.32], [0.25, 0.75, 0.32], [0.75, 0.75, 0.32]]
};
// Used in _orderWindowsPermutations, 5! = 120 which is probably the highest we can go
const POSITIONING_PERMUTATIONS_MAX = 5;
// When calculating a layout, we calculate the scale of windows and the percent
// of the available area the new layout uses. If the values for the new layout,
// when weighted with the values as below, are worse than the previous layout's,
// we stop looking for a new layout and use the previous layout.
// Otherwise, we keep looking for a new layout.
const LAYOUT_SCALE_WEIGHT = 1;
const LAYOUT_SPACE_WEIGHT = 0.1;
function _interpolate(start, end, step) {
return start + (end - start) * step;
@ -167,6 +159,24 @@ const WindowClone = new Lang.Class({
this._selected = false;
},
get slot() {
let x, y, w, h;
if (this.inDrag) {
x = this.dragOrigX;
y = this.dragOrigY;
w = this.actor.width * this.dragOrigScale;
h = this.actor.height * this.dragOrigScale;
} else {
x = this.actor.x;
y = this.actor.y;
w = this.actor.width * this.actor.scale_x;
h = this.actor.height * this.actor.scale_y;
}
return [x, y, w, h];
},
setStackAbove: function (actor) {
this._stackAbove = actor;
if (this.inDrag || this._zooming)
@ -443,6 +453,11 @@ const WindowOverlay = new Lang.Class({
this._updateCaptionId = metaWindow.connect('notify::title',
Lang.bind(this, function(w) {
this.title.text = w.title;
// we need this for the next call to get_preferred_width
// to return useful results
this.title.set_size(-1, -1);
this._repositionSelf();
}));
let button = new St.Button({ style_class: 'window-close' });
@ -504,15 +519,16 @@ const WindowOverlay = new Lang.Class({
transition: 'easeOutQuad' });
},
chromeWidth: function () {
return this.closeButton.width - this.closeButton._overlap;
},
chromeHeights: function () {
return [this.closeButton.height - this.closeButton._overlap,
this.title.height + this.title._spacing];
},
_repositionSelf: function() {
let [cloneX, cloneY, cloneWidth, cloneHeight] = this._windowClone.slot;
this.updatePositions(cloneX, cloneY, cloneWidth, cloneHeight, false);
},
/**
* @cloneX: x position of windowClone
* @cloneY: y position of windowClone
@ -550,9 +566,8 @@ const WindowOverlay = new Lang.Class({
else
button.set_position(Math.floor(buttonX), Math.floor(buttonY));
if (!title.fullWidth)
title.fullWidth = title.width;
let titleWidth = Math.min(title.fullWidth, cloneWidth);
let [titleMinWidth, titleNatWidth] = title.get_preferred_width(-1);
let titleWidth = Math.max(titleMinWidth, Math.min(titleNatWidth, cloneWidth));
let titleX = cloneX + (cloneWidth - titleWidth) / 2;
let titleY = cloneY + cloneHeight + title._spacing;
@ -668,6 +683,280 @@ const WindowPositionFlags = {
ANIMATE: 1 << 1
};
const LayoutStrategy = new Lang.Class({
Name: 'LayoutStrategy',
Abstract: true,
_init: function(monitor, rowSpacing, columnSpacing, bottomPadding) {
this._monitor = monitor;
this._rowSpacing = rowSpacing;
this._columnSpacing = columnSpacing;
this._bottomPadding = bottomPadding;
},
_newRow: function() {
// Row properties:
//
// * x, y are the position of row, relative to area
//
// * width, height are the scaled versions of fullWidth, fullHeight
//
// * width also has the spacing in between windows. It's not in
// fullWidth, as the spacing is constant, whereas fullWidth is
// meant to be scaled
//
// * neither height/fullHeight have any sort of spacing or padding
//
// * if cellWidth is present, all windows in the row will occupy
// the space of cellWidth, centered.
return { x: 0, y: 0,
width: 0, height: 0,
fullWidth: 0, fullHeight: 0,
cellWidth: 0,
windows: [] };
},
// Compute the size and fancy scale for @window using the
// base scale, @scale.
//
// Returns a list structure: [ scaledWidth, scaledHeight, fancyScale ]
// where scaledWidth and scaledHeight are the window's
// width and height, scaled by fancyScale for convenience.
_computeWindowSizeAndScale: function(window, scale) {
let width = window.actor.width;
let height = window.actor.height;
let ratio;
if (width > height)
ratio = width / this._monitor.width;
else
ratio = height / this._monitor.height;
let fancyScale = (2 / (1 + ratio)) * scale;
return [width * fancyScale, height * fancyScale, fancyScale];
},
// Compute the size of each row, by assigning to the properties
// row.width, row.height, row.fullWidth, row.fullHeight, and
// (optionally) row.cellWidth, for each row in @layout.rows.
// This method is intended to be called by subclasses.
_computeRowSizes: function(layout) {
throw new Error('_computeRowSizes not implemented');
},
// Compute strategy-specific window slots for each window in
// @windows, given the @layout. The strategy may also use @layout
// as strategy-specific storage.
//
// This must calculate:
// * maxColumns - The maximum number of columns used by the layout.
// * gridWidth - The total width used by the grid, unscaled, unspaced.
// * gridHeight - The totial height used by the grid, unscaled, unspaced.
// * rows - A list of rows, which should be instantiated by _newRow.
computeLayout: function(windows, layout) {
throw new Error('computeLayout not implemented');
},
// Given @layout, compute the overall scale and space of the layout.
// The scale is the individual, non-fancy scale of each window, and
// the space is the percentage of the available area eventually
// used by the layout.
// This method does not return anything, but instead installs
// the properties "scale" and "space" on @layout directly.
//
// Make sure to call this methods before calling computeWindowSlots(),
// as it depends on the scale property installed in @layout here.
computeScaleAndSpace: function(layout) {
let area = layout.area;
let hspacing = (layout.maxColumns - 1) * this._columnSpacing;
let vspacing = (layout.numRows - 1) * this._rowSpacing + this._bottomPadding;
let spacedWidth = area.width - hspacing;
let spacedHeight = area.height - vspacing;
let horizontalScale = spacedWidth / layout.gridWidth;
let verticalScale = spacedHeight / layout.gridHeight;
// Thumbnails should be less than 70% of the original size
let scale = Math.min(horizontalScale, verticalScale, WINDOW_CLONE_MAXIMUM_SCALE);
let scaledLayoutWidth = layout.gridWidth * scale + hspacing;
let scaledLayoutHeight = layout.gridHeight * scale + vspacing;
let space = (scaledLayoutWidth * scaledLayoutHeight) / (area.width * area.height);
layout.scale = scale;
layout.space = space;
},
computeWindowSlots: function(layout, area) {
this._computeRowSizes(layout);
let { rows: rows, scale: scale, state: state } = layout;
let slots = [];
let y = 0;
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
row.x = area.x + (area.width - row.width) / 2;
row.y = area.y + y;
y += row.height + this._rowSpacing;
}
let height = y - this._rowSpacing + this._bottomPadding;
let baseY = (area.height - height) / 2;
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
row.y += baseY;
let baseX = row.x;
for (let j = 0; j < row.windows.length; j++) {
let window = row.windows[j];
let [width, height, s] = this._computeWindowSizeAndScale(window, scale);
let y = row.y + row.height - height;
let x = baseX;
if (row.cellWidth) {
x += (row.cellWidth - width) / 2;
width = row.cellWidth;
}
slots.push([x, y, s]);
baseX += width + this._columnSpacing;
}
}
return slots;
}
});
const UnalignedLayoutStrategy = new Lang.Class({
Name: 'UnalignedLayoutStrategy',
Extends: LayoutStrategy,
_computeRowSizes: function(layout) {
let { rows: rows, scale: scale } = layout;
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
row.width = row.fullWidth * scale + (row.windows.length - 1) * this._columnSpacing;
row.height = row.fullHeight * scale;
}
},
_keepSameRow: function(row, window, width, idealRowWidth) {
if (row.fullWidth + width <= idealRowWidth)
return true;
let oldRatio = row.fullWidth / idealRowWidth;
let newRatio = (row.fullWidth + width) / idealRowWidth;
if (Math.abs(1 - newRatio) < Math.abs(1 - oldRatio))
return true;
return false;
},
computeLayout: function(windows, layout) {
let numRows = layout.numRows;
let rows = [];
let totalWidth = 0;
for (let i = 0; i < windows.length; i++) {
totalWidth += windows[i].actor.width;
}
let idealRowWidth = totalWidth / numRows;
let windowIdx = 0;
for (let i = 0; i < numRows; i++) {
let col = 0;
let row = this._newRow();
rows.push(row);
for (; windowIdx < windows.length; windowIdx++) {
let window = windows[windowIdx];
let [width, height] = this._computeWindowSizeAndScale(window, 1);
row.fullHeight = Math.max(row.fullHeight, height);
// either new width is < idealWidth or new width is nearer from idealWidth then oldWidth
if (this._keepSameRow(row, window, width, idealRowWidth) || (i == numRows - 1)) {
row.windows.push(window);
row.fullWidth += width;
} else {
break;
}
}
}
let gridHeight = 0;
let maxRow;
for (let i = 0; i < numRows; i++) {
let row = rows[i];
if (!maxRow || row.fullWidth > maxRow.fullWidth)
maxRow = row;
gridHeight += row.fullHeight;
}
layout.rows = rows;
layout.maxColumns = maxRow.windows.length;
layout.gridWidth = maxRow.fullWidth;
layout.gridHeight = gridHeight;
}
});
const GridLayoutStrategy = new Lang.Class({
Name: 'GridLayoutStrategy',
Extends: LayoutStrategy,
_computeRowSizes: function(layout) {
let { rows: rows, scale: scale } = layout;
let gridWidth = layout.numColumns * layout.maxWindowWidth;
let hspacing = (layout.numColumns - 1) * this._columnSpacing;
for (let i = 0; i < rows.length; i++) {
let row = rows[i];
row.fullWidth = layout.gridWidth;
row.fullHeight = layout.maxWindowHeight;
row.width = row.fullWidth * scale + hspacing;
row.height = row.fullHeight * scale;
row.cellWidth = layout.maxWindowWidth * scale;
}
},
computeLayout: function(windows, layout) {
let { numRows: numRows, numColumns: numColumns } = layout;
let rows = [];
let windowIdx = 0;
let maxWindowWidth = 0;
let maxWindowHeight = 0;
for (let i = 0; i < numRows; i++) {
let row = this._newRow();
rows.push(row);
for (; windowIdx < windows.length; windowIdx++) {
if (row.windows.length >= numColumns)
break;
let window = windows[windowIdx];
row.windows.push(window);
let [width, height] = this._computeWindowSizeAndScale(window, 1);
maxWindowWidth = Math.max(maxWindowWidth, width);
maxWindowHeight = Math.max(maxWindowHeight, height);
}
}
layout.rows = rows;
layout.maxColumns = numColumns;
layout.gridWidth = numColumns * maxWindowWidth;
layout.gridHeight = numRows * maxWindowHeight;
layout.maxWindowWidth = maxWindowWidth;
layout.maxWindowHeight = maxWindowHeight;
}
});
/**
* @metaWorkspace: a #Meta.Workspace, or null
*/
@ -689,7 +978,7 @@ const Workspace = new Lang.Class({
// Without this the drop area will be overlapped.
this._windowOverlaysGroup.set_size(0, 0);
this.actor = new Clutter.Group();
this.actor = new St.Widget({ style_class: 'window-picker' });
this.actor.set_size(0, 0);
this._dropRect = new Clutter.Rectangle({ opacity: 0 });
@ -729,6 +1018,8 @@ const Workspace = new Lang.Class({
this._positionWindowsFlags = 0;
this._positionWindowsId = 0;
this._currentLayout = null;
},
setGeometry: function(x, y, width, height) {
@ -763,225 +1054,6 @@ const Workspace = new Lang.Class({
return this._windows.length == 0;
},
// Only use this for n <= 20 say
_factorial: function(n) {
let result = 1;
for (let i = 2; i <= n; i++)
result *= i;
return result;
},
/**
* _permutation:
* @permutationIndex: An integer from [0, list.length!)
* @list: (inout): Array of objects to permute; will be modified in place
*
* Given an integer between 0 and length of array, re-order the array in-place
* into a permutation denoted by the index.
*/
_permutation: function(permutationIndex, list) {
for (let j = 2; j <= list.length; j++) {
let firstIndex = (permutationIndex % j);
let secondIndex = j - 1;
// Swap
let tmp = list[firstIndex];
list[firstIndex] = list[secondIndex];
list[secondIndex] = tmp;
permutationIndex = Math.floor(permutationIndex / j);
}
},
/**
* _forEachPermutations:
* @list: Array
* @func: Function which takes a single array argument
*
* Call @func with each permutation of @list as an argument.
*/
_forEachPermutations: function(list, func) {
let nCombinations = this._factorial(list.length);
for (let i = 0; i < nCombinations; i++) {
let listCopy = list.concat();
this._permutation(i, listCopy);
func(listCopy);
}
},
/**
* _computeWindowMotion:
* @actor: A #WindowClone's #ClutterActor
* @slot: An element of #POSITIONS
* @slotGeometry: Layout of @slot
*
* Returns a number corresponding to how much perceived motion
* would be involved in moving the window to the given slot.
* Currently this is the square of the distance between the
* centers.
*/
_computeWindowMotion: function (actor, slot) {
let [xCenter, yCenter, fraction] = slot;
let xDelta, yDelta, distanceSquared;
let actorWidth, actorHeight;
let x = actor.x;
let y = actor.y;
let scale = actor.scale_x;
if (actor._delegate.inDrag) {
x = actor._delegate.dragOrigX;
y = actor._delegate.dragOrigY;
scale = actor._delegate.dragOrigScale;
}
actorWidth = actor.width * scale;
actorHeight = actor.height * scale;
xDelta = x + actorWidth / 2.0 - xCenter * this._width - this._x;
yDelta = y + actorHeight / 2.0 - yCenter * this._height - this._y;
distanceSquared = xDelta * xDelta + yDelta * yDelta;
return distanceSquared;
},
/**
* _orderWindowsPermutations:
*
* Iterate over all permutations of the windows, and determine the
* permutation which has the least total motion.
*/
_orderWindowsPermutations: function (clones, slots) {
let minimumMotionPermutation = null;
let minimumMotion = -1;
let permIndex = 0;
this._forEachPermutations(clones, Lang.bind(this, function (permutation) {
let motion = 0;
for (let i = 0; i < permutation.length; i++) {
let cloneActor = permutation[i].actor;
let slot = slots[i];
let delta = this._computeWindowMotion(cloneActor, slot);
motion += delta;
// Bail out early if we're already larger than the
// previous best
if (minimumMotionPermutation != null &&
motion > minimumMotion)
continue;
}
if (minimumMotionPermutation == null || motion < minimumMotion) {
minimumMotionPermutation = permutation;
minimumMotion = motion;
}
permIndex++;
}));
return minimumMotionPermutation;
},
/**
* _orderWindowsGreedy:
*
* Iterate over available slots in order, placing into each one the window
* we find with the smallest motion to that slot.
*/
_orderWindowsGreedy: function(clones, slots) {
let result = [];
let slotIndex = 0;
// Copy since we mutate below
let clonesCopy = clones.concat();
for (let i = 0; i < slots.length; i++) {
let slot = slots[i];
let minimumMotionIndex = -1;
let minimumMotion = -1;
for (let j = 0; j < clonesCopy.length; j++) {
let cloneActor = clonesCopy[j].actor;
let delta = this._computeWindowMotion(cloneActor, slot);
if (minimumMotionIndex == -1 || delta < minimumMotion) {
minimumMotionIndex = j;
minimumMotion = delta;
}
}
result.push(clonesCopy[minimumMotionIndex]);
clonesCopy.splice(minimumMotionIndex, 1);
}
return result;
},
/**
* _orderWindowsByMotionAndStartup:
* @windows: Array of #MetaWindow
* @slots: Array of slots
*
* Returns a copy of @windows, ordered in such a way that they require least motion
* to move to the final screen coordinates of @slots. Ties are broken in a stable
* fashion by the order in which the windows were created.
*/
_orderWindowsByMotionAndStartup: function(clones, slots) {
clones.sort(function(w1, w2) {
return w2.metaWindow.get_stable_sequence() - w1.metaWindow.get_stable_sequence();
});
if (clones.length <= POSITIONING_PERMUTATIONS_MAX)
return this._orderWindowsPermutations(clones, slots);
else
return this._orderWindowsGreedy(clones, slots);
},
/**
* _getSlotGeometry:
* @slot: A layout slot
*
* Returns: the screen-relative [x, y, width, height]
* of a given window layout slot.
*/
_getSlotGeometry: function(slot) {
let [xCenter, yCenter, fraction] = slot;
let width = this._width * fraction;
let height = this._height * fraction;
let x = this._x + xCenter * this._width - width / 2 ;
let y = this._y + yCenter * this._height - height / 2;
return [x, y, width, height];
},
/**
* _computeWindowLayout:
* @metaWindow: A #MetaWindow
* @slot: A layout slot
*
* Given a window and slot to fit it in, compute its
* screen-relative [x, y, scale] where scale applies
* to both X and Y directions.
*/
_computeWindowLayout: function(metaWindow, slot) {
let [x, y, width, height] = this._getSlotGeometry(slot);
let rect = metaWindow.get_outer_rect();
let buttonOuterHeight, captionHeight;
let buttonOuterWidth = 0;
if (this._windowOverlays[0]) {
[buttonOuterHeight, captionHeight] = this._windowOverlays[0].chromeHeights();
buttonOuterWidth = this._windowOverlays[0].chromeWidth();
} else
[buttonOuterHeight, captionHeight] = [0, 0];
let scale = Math.min((width - buttonOuterWidth) / rect.width,
(height - buttonOuterHeight - captionHeight) / rect.height,
WINDOW_CLONE_MAXIMUM_SCALE);
x = Math.floor(x + (width - scale * rect.width) / 2);
// We want to center the window in case we have just one
if (metaWindow.get_workspace().n_windows == 1)
y = Math.floor(y + (height - scale * rect.height) / 2);
else
y = Math.floor(y + height - rect.height * scale - captionHeight);
return [x, y, scale];
},
setReservedSlot: function(clone) {
if (this._reservedSlot == clone)
return;
@ -990,6 +1062,7 @@ const Workspace = new Lang.Class({
clone = null;
this._reservedSlot = clone;
this._currentLayout = null;
this.positionWindows(WindowPositionFlags.ANIMATE);
},
@ -1000,6 +1073,9 @@ const Workspace = new Lang.Class({
* ANIMATE - Indicates that we need animate changing position.
*/
positionWindows: function(flags) {
if (this.leavingOverview)
return;
this._positionWindowsFlags |= flags;
if (this._positionWindowsId > 0)
@ -1020,6 +1096,11 @@ const Workspace = new Lang.Class({
}
let clones = this._windows.slice();
clones.sort(function(a, b) {
return a.metaWindow.get_stable_sequence() - b.metaWindow.get_stable_sequence();
});
if (this._reservedSlot)
clones.push(this._reservedSlot);
@ -1027,8 +1108,7 @@ const Workspace = new Lang.Class({
let animate = flags & WindowPositionFlags.ANIMATE;
// Start the animations
let slots = this._computeAllWindowSlots(clones.length);
clones = this._orderWindowsByMotionAndStartup(clones, slots);
let slots = this._computeAllWindowSlots(clones);
let currentWorkspace = global.screen.get_active_workspace();
let isOnCurrentWorkspace = this.metaWorkspace == null || this.metaWorkspace == currentWorkspace;
@ -1045,10 +1125,11 @@ const Workspace = new Lang.Class({
if (clone.inDrag)
continue;
let [x, y, scale] = this._computeWindowLayout(metaWindow, slot);
let [x, y, scale] = slot;
if (overlay && initialPositioning)
overlay.hide();
if (animate && isOnCurrentWorkspace) {
if (!metaWindow.showing_on_its_workspace()) {
/* Hidden windows should fade in and grow
@ -1072,6 +1153,8 @@ const Workspace = new Lang.Class({
this._animateClone(clone, overlay, x, y, scale, initialPositioning);
} else {
// cancel any active tweens (otherwise they might override our changes)
Tweener.removeTweens(clone.actor);
clone.actor.set_position(x, y);
clone.actor.set_scale(scale, scale);
this._updateWindowOverlayPositions(clone, overlay, x, y, scale, false);
@ -1113,11 +1196,11 @@ const Workspace = new Lang.Class({
},
_updateWindowOverlayPositions: function(clone, overlay, x, y, scale, animate) {
if (!overlay)
return;
let [cloneWidth, cloneHeight] = clone.actor.get_size();
cloneWidth = scale * cloneWidth;
cloneHeight = scale * cloneHeight;
if (overlay)
overlay.updatePositions(x, y, cloneWidth, cloneHeight, animate);
overlay.updatePositions(x, y, cloneWidth * scale, cloneHeight * scale, animate);
},
_showWindowOverlay: function(clone, overlay, fade) {
@ -1211,6 +1294,7 @@ const Workspace = new Lang.Class({
this._cursorX = x;
this._cursorY = y;
this._currentLayout = null;
this._repositionWindowsId = Mainloop.timeout_add(750,
Lang.bind(this, this._delayedWindowRepositioning));
},
@ -1263,6 +1347,7 @@ const Workspace = new Lang.Class({
clone.actor.set_position (this._x, this._y);
}
this._currentLayout = null;
this.positionWindows(WindowPositionFlags.ANIMATE);
},
@ -1300,6 +1385,8 @@ const Workspace = new Lang.Class({
// Animate the full-screen to Overview transition.
zoomToOverview : function() {
this._currentLayout = null;
// Position and scale the windows.
if (Main.overview.animationInProgress)
this.positionWindows(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
@ -1464,29 +1551,108 @@ const Workspace = new Lang.Class({
}
},
_computeWindowSlot : function(windowIndex, numberOfWindows) {
if (numberOfWindows in POSITIONS)
return POSITIONS[numberOfWindows][windowIndex];
_isBetterLayout: function(oldLayout, newLayout) {
if (oldLayout.scale === undefined)
return true;
// If we don't have a predefined scheme for this window count,
// arrange the windows in a grid pattern.
let gridWidth = Math.ceil(Math.sqrt(numberOfWindows));
let gridHeight = Math.ceil(numberOfWindows / gridWidth);
let spacePower = (newLayout.space - oldLayout.space) * LAYOUT_SPACE_WEIGHT;
let scalePower = (newLayout.scale - oldLayout.scale) * LAYOUT_SCALE_WEIGHT;
let fraction = 0.95 * (1. / gridWidth);
let xCenter = (.5 / gridWidth) + ((windowIndex) % gridWidth) / gridWidth;
let yCenter = (.5 / gridHeight) + Math.floor((windowIndex / gridWidth)) / gridHeight;
return [xCenter, yCenter, fraction];
if (newLayout.scale > oldLayout.scale && newLayout.space > oldLayout.space) {
// Win win -- better scale and better space
return true;
} else if (newLayout.scale > oldLayout.scale && newLayout.space <= oldLayout.space) {
// Keep new layout only if scale gain outweights aspect space loss
return scalePower > spacePower;
} else if (newLayout.scale <= oldLayout.scale && newLayout.space > oldLayout.space) {
// Keep new layout only if aspect space gain outweights scale loss
return spacePower > scalePower;
} else {
// Lose -- worse scale and space
return false;
}
},
_computeAllWindowSlots: function(totalWindows) {
let slots = [];
for (let i = 0; i < totalWindows; i++) {
slots.push(this._computeWindowSlot(i, totalWindows));
_computeLayout: function(windows, area, rowSpacing, columnSpacing, bottomPadding) {
// We look for the largest scale that allows us to fit the
// largest row/tallest column on the workspace.
let lastLayout = {};
for (let numRows = 1; ; numRows++) {
let numColumns = Math.ceil(windows.length / numRows);
// If adding a new row does not change column count just stop
// (for instance: 9 windows, with 3 rows -> 3 columns, 4 rows ->
// 3 columns as well => just use 3 rows then)
if (numColumns == lastLayout.numColumns)
break;
let strategyClass = numRows > 2 ? GridLayoutStrategy : UnalignedLayoutStrategy;
let strategy = new strategyClass(this._monitor, rowSpacing, columnSpacing, bottomPadding);
let layout = { area: area, strategy: strategy, numRows: numRows, numColumns: numColumns };
strategy.computeLayout(windows, layout);
strategy.computeScaleAndSpace(layout);
if (!this._isBetterLayout(lastLayout, layout))
break;
lastLayout = layout;
}
return slots;
return lastLayout;
},
_rectEqual: function(one, two) {
if (one == two)
return true;
return (one.x == two.x &&
one.y == two.y &&
one.width == two.width &&
one.height == two.height);
},
_computeAllWindowSlots: function(windows) {
let totalWindows = windows.length;
let node = this.actor.get_theme_node();
// Window grid spacing
let columnSpacing = node.get_length('-horizontal-spacing');
let rowSpacing = node.get_length('-vertical-spacing');
if (!totalWindows)
return [];
let closeButtonHeight, captionHeight;
if (this._windowOverlays.length) {
// All of the overlays have the same chrome sizes,
// so just pick the first one.
let overlay = this._windowOverlays[0];
[closeButtonHeight, captionHeight] = overlay.chromeHeights();
} else {
[closeButtonHeight, captionHeight] = [0, 0];
}
rowSpacing += captionHeight;
let area = { x: this._x, y: this._y, width: this._width, height: this._height };
area.y += closeButtonHeight;
area.height -= closeButtonHeight;
if (!this._currentLayout)
this._currentLayout = this._computeLayout(windows, area, rowSpacing, columnSpacing, captionHeight);
let layout = this._currentLayout;
let strategy = layout.strategy;
if (!this._rectEqual(area, layout.area)) {
layout.area = area;
strategy.computeScaleAndSpace(layout);
}
return strategy.computeWindowSlots(layout, area);
},
_onCloneSelected : function (clone, time) {

View File

@ -493,6 +493,7 @@ const ThumbnailsBox = new Lang.Class({
_init: function() {
this.actor = new Shell.GenericContainer({ reactive: true,
style_class: 'workspace-thumbnails',
can_focus: true,
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT });
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
this.actor.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
@ -526,6 +527,8 @@ const ThumbnailsBox = new Lang.Class({
this._dropPlaceholder = new St.Bin({ style_class: 'placeholder' });
this.actor.add_actor(this._dropPlaceholder);
this.visible = true;
this._targetScale = 0;
this._scale = 0;
this._pendingScaleUpdate = false;
@ -541,12 +544,21 @@ const ThumbnailsBox = new Lang.Class({
this.actor.connect('button-press-event', function() { return true; });
this.actor.connect('button-release-event', Lang.bind(this, this._onButtonRelease));
this.actor.connect('scroll-event',
Lang.bind(this, this._onScrollEvent));
this.actor.connect('key-release-event',
Lang.bind(this, this._onKeyRelease));
Main.overview.connect('item-drag-begin',
Main.overview.connect('showing',
Lang.bind(this, this._createThumbnails));
Main.overview.connect('hidden',
Lang.bind(this, this._destroyThumbnails));
Main.overview.connect('app-drag-begin',
Lang.bind(this, this._onDragBegin));
Main.overview.connect('item-drag-end',
Main.overview.connect('app-drag-end',
Lang.bind(this, this._onDragEnd));
Main.overview.connect('item-drag-cancelled',
Main.overview.connect('app-drag-cancelled',
Lang.bind(this, this._onDragCancelled));
Main.overview.connect('window-drag-begin',
Lang.bind(this, this._onDragBegin));
@ -719,10 +731,16 @@ const ThumbnailsBox = new Lang.Class({
}
},
show: function() {
_createThumbnails: function() {
this._switchWorkspaceNotifyId =
global.window_manager.connect('switch-workspace',
Lang.bind(this, this._activeWorkspaceChanged));
this._nWorkspacesNotifyId =
global.screen.connect('notify::n-workspaces',
Lang.bind(this, this._workspacesChanged));
this._syncStackingId =
Main.overview.connect('sync-window-stacking',
Lang.bind(this, this.syncStacking));
this._targetScale = 0;
this._scale = 0;
@ -746,17 +764,86 @@ const ThumbnailsBox = new Lang.Class({
this.addThumbnails(0, global.screen.n_workspaces);
},
hide: function() {
_destroyThumbnails: function() {
if (this._switchWorkspaceNotifyId > 0) {
global.window_manager.disconnect(this._switchWorkspaceNotifyId);
this._switchWorkspaceNotifyId = 0;
}
if (this._nWorkspacesNotifyId > 0) {
global.screen.disconnect(this._nWorkspacesNotifyId);
this._nWorkspacesNotifyId = 0;
}
if (this._syncStackingId > 0) {
Main.overview.disconnect(this._syncStackingId);
this._syncStackingId = 0;
}
for (let w = 0; w < this._thumbnails.length; w++)
this._thumbnails[w].destroy();
this._thumbnails = [];
},
_computeThumbnailsX: function() {
this._targetX = this.actor.get_x();
let rtl = (this.actor.get_text_direction() == Clutter.TextDirection.RTL);
if (rtl)
this._hiddenX = -this.actor.width;
else
this._hiddenX = this._targetX + this.actor.width;
},
show: function() {
if (this.visible)
return;
this.visible = true;
this.actor.show();
Tweener.addTween(this.actor, { translation_x: this._targetX,
transition: 'easeOutQuad',
time: SLIDE_ANIMATION_TIME
});
},
hide: function() {
if (!this.visible)
return;
this.visible = false;
Tweener.addTween(this.actor, { translation_x: this._hiddenX,
transition: 'easeOutQuad',
time: SLIDE_ANIMATION_TIME,
onComplete: Lang.bind(this, function () {
this.actor.hide();
})
});
},
_workspacesChanged: function() {
let oldNumWorkspaces = this._thumbnails.length;
let newNumWorkspaces = global.screen.n_workspaces;
let active = global.screen.get_active_workspace_index();
if (newNumWorkspaces > oldNumWorkspaces) {
this.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
} else {
let removedIndex;
let removedNum = oldNumWorkspaces - newNumWorkspaces;
for (let w = 0; w < oldNumWorkspaces; w++) {
let metaWorkspace = global.screen.get_workspace_by_index(w);
if (this._thumbnails[w].metaWorkspace != metaWorkspace) {
removedIndex = w;
break;
}
}
this.removeThumbnails(removedIndex, removedNum);
}
},
addThumbnails: function(start, count) {
for (let k = start; k < start + count; k++) {
let metaWorkspace = global.screen.get_workspace_by_index(k);
@ -802,7 +889,7 @@ const ThumbnailsBox = new Lang.Class({
this._queueUpdateStates();
},
syncStacking: function(stackIndices) {
syncStacking: function(actor, stackIndices) {
for (let i = 0; i < this._thumbnails.length; i++)
this._thumbnails[i].syncStacking(stackIndices);
},
@ -924,6 +1011,8 @@ const ThumbnailsBox = new Lang.Class({
onCompleteScope: this
});
});
this._computeThumbnailsX();
},
_queueUpdateStates: function() {
@ -1157,5 +1246,30 @@ const ThumbnailsBox = new Lang.Class({
},
onCompleteScope: this
});
},
_onScrollEvent: function (actor, event) {
switch (event.get_scroll_direction()) {
case Clutter.ScrollDirection.UP:
Main.wm.actionMoveWorkspace(Meta.MotionDirection.UP);
break;
case Clutter.ScrollDirection.DOWN:
Main.wm.actionMoveWorkspace(Meta.MotionDirection.DOWN);
break;
}
},
_onKeyRelease: function (actor, event) {
switch (event.get_key_symbol()) {
case Clutter.KEY_Up:
Main.wm.actionMoveWorkspace(Meta.MotionDirection.UP);
break;
case Clutter.KEY_Down:
Main.wm.actionMoveWorkspace(Meta.MotionDirection.DOWN);
break;
case Clutter.KEY_Return:
Main.overview.toggle();
break;
}
}
});

View File

@ -22,8 +22,6 @@ const MAX_WORKSPACES = 16;
const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
const CONTROLS_POP_IN_TIME = 0.1;
const WorkspacesView = new Lang.Class({
Name: 'WorkspacesView',
@ -51,7 +49,6 @@ const WorkspacesView = new Lang.Class({
this._clipY = 0;
this._clipWidth = 0;
this._clipHeight = 0;
this._workspaceRatioSpacing = 0;
this._spacing = 0;
this._animating = false; // tweening
this._scrolling = false; // swipe-scrolling
@ -72,6 +69,7 @@ const WorkspacesView = new Lang.Class({
this._workspaces[w].actor.reparent(this.actor);
this._workspaces[activeWorkspaceIndex].actor.raise_top();
this._extraWorkspaces = [];
this._updateExtraWorkspaces();
// Position/scale the desktop windows and their children after the
@ -83,8 +81,6 @@ const WorkspacesView = new Lang.Class({
Lang.bind(this, function() {
for (let w = 0; w < this._workspaces.length; w++)
this._workspaces[w].zoomToOverview();
if (!this._extraWorkspaces)
return;
for (let w = 0; w < this._extraWorkspaces.length; w++)
this._extraWorkspaces[w].zoomToOverview();
}));
@ -108,9 +104,9 @@ const WorkspacesView = new Lang.Class({
global.window_manager.connect('switch-workspace',
Lang.bind(this, this._activeWorkspaceChanged));
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
this._appDragBeginId = Main.overview.connect('app-drag-begin',
Lang.bind(this, this._dragBegin));
this._itemDragEndId = Main.overview.connect('item-drag-end',
this._appDragEndId = Main.overview.connect('app-drag-end',
Lang.bind(this, this._dragEnd));
this._windowDragBeginId = Main.overview.connect('window-drag-begin',
Lang.bind(this, this._dragBegin));
@ -124,7 +120,6 @@ const WorkspacesView = new Lang.Class({
if (!this._settings.get_boolean('workspaces-only-on-primary'))
return;
this._extraWorkspaces = [];
let monitors = Main.layoutManager.monitors;
for (let i = 0; i < monitors.length; i++) {
if (i == Main.layoutManager.primaryIndex)
@ -139,23 +134,20 @@ const WorkspacesView = new Lang.Class({
},
_destroyExtraWorkspaces: function() {
if (!this._extraWorkspaces)
return;
for (let m = 0; m < this._extraWorkspaces.length; m++)
this._extraWorkspaces[m].destroy();
this._extraWorkspaces = null;
this._extraWorkspaces = [];
},
setGeometry: function(x, y, width, height, spacing) {
setGeometry: function(x, y, width, height) {
if (this._x == x && this._y == y &&
this._width == width && this._height == height)
return;
this._width = width;
this._height = height;
this._x = x;
this._y = y;
this._workspaceRatioSpacing = spacing;
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setGeometry(x, y, width, height);
@ -191,8 +183,6 @@ const WorkspacesView = new Lang.Class({
for (let w = 0; w < this._workspaces.length; w++)
this._workspaces[w].zoomFromOverview();
if (!this._extraWorkspaces)
return;
for (let w = 0; w < this._extraWorkspaces.length; w++)
this._extraWorkspaces[w].zoomFromOverview();
},
@ -204,8 +194,6 @@ const WorkspacesView = new Lang.Class({
syncStacking: function(stackIndices) {
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].syncStacking(stackIndices);
if (!this._extraWorkspaces)
return;
for (let i = 0; i < this._extraWorkspaces.length; i++)
this._extraWorkspaces[i].syncStacking(stackIndices);
},
@ -234,7 +222,7 @@ const WorkspacesView = new Lang.Class({
Tweener.removeTweens(workspace.actor);
let y = (w - active) * (this._height + this._spacing + this._workspaceRatioSpacing);
let y = (w - active) * (this._height + this._spacing);
if (showAnimation) {
let params = { y: y,
@ -337,13 +325,13 @@ const WorkspacesView = new Lang.Class({
if (this._inDrag)
this._dragEnd();
if (this._itemDragBeginId > 0) {
Main.overview.disconnect(this._itemDragBeginId);
this._itemDragBeginId = 0;
if (this._appDragBeginId > 0) {
Main.overview.disconnect(this._appDragBeginId);
this._appDragBeginId = 0;
}
if (this._itemDragEndId > 0) {
Main.overview.disconnect(this._itemDragEndId);
this._itemDragEndId = 0;
if (this._appDragEndId > 0) {
Main.overview.disconnect(this._appDragEndId);
this._appDragEndId = 0;
}
if (this._windowDragBeginId > 0) {
Main.overview.disconnect(this._windowDragBeginId);
@ -376,9 +364,6 @@ const WorkspacesView = new Lang.Class({
this._firstDragMotion = false;
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
if (!this._extraWorkspaces)
return DND.DragMotionResult.CONTINUE;
for (let i = 0; i < this._extraWorkspaces.length; i++)
this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
}
@ -392,9 +377,6 @@ const WorkspacesView = new Lang.Class({
for (let i = 0; i < this._workspaces.length; i++)
this._workspaces[i].setReservedSlot(null);
if (!this._extraWorkspaces)
return;
for (let i = 0; i < this._extraWorkspaces.length; i++)
this._extraWorkspaces[i].setReservedSlot(null);
},
@ -476,25 +458,8 @@ const WorkspacesDisplay = new Lang.Class({
this.actor.connect('parent-set', Lang.bind(this, this._parentSet));
this.actor.set_clip_to_allocation(true);
let controls = new St.Bin({ style_class: 'workspace-controls',
request_mode: Clutter.RequestMode.WIDTH_FOR_HEIGHT,
y_align: St.Align.START,
y_fill: true });
this._controls = controls;
this.actor.add_actor(controls);
controls.reactive = true;
controls.track_hover = true;
controls.connect('notify::hover',
Lang.bind(this, this._onControlsHoverChanged));
controls.connect('scroll-event',
Lang.bind(this, this._onScrollEvent));
this._primaryIndex = Main.layoutManager.primaryIndex;
this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox();
controls.add_actor(this._thumbnailsBox.actor);
this._workspacesViews = null;
this._primaryScrollAdjustment = null;
@ -507,77 +472,47 @@ const WorkspacesDisplay = new Lang.Class({
this._inDrag = false;
this._cancelledDrag = false;
this._controlsInitiallyHovered = false;
this._alwaysZoomOut = false;
this._zoomOut = false;
this._zoomFraction = 0;
this._updateAlwaysZoom();
// If we stop hiding the overview on layout changes, we will need to
// update the _workspacesViews here
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._updateAlwaysZoom));
Main.xdndHandler.connect('drag-begin', Lang.bind(this, function(){
this._alwaysZoomOut = true;
}));
Main.xdndHandler.connect('drag-end', Lang.bind(this, function(){
this._alwaysZoomOut = false;
this._updateAlwaysZoom();
}));
global.screen.connect('notify::n-workspaces',
Lang.bind(this, this._workspacesChanged));
this._switchWorkspaceNotifyId = 0;
this._itemDragBeginId = 0;
this._itemDragCancelledId = 0;
this._itemDragEndId = 0;
this._appDragBeginId = 0;
this._appDragCancelledId = 0;
this._appDragEndId = 0;
this._windowDragBeginId = 0;
this._windowDragCancelledId = 0;
this._windowDragEndId = 0;
this._notifyOpacityId = 0;
this._swipeScrollBeginId = 0;
this._swipeScrollEndId = 0;
this._settings = new Gio.Settings({ schema: OVERRIDE_SCHEMA });
this._settings.connect('changed::dynamic-workspaces',
Lang.bind(this, this._updateSwitcherVisibility));
},
_updateSwitcherVisibility: function() {
this._thumbnailsBox.actor.visible =
this._settings.get_boolean('dynamic-workspaces') ||
global.screen.n_workspaces > 1;
},
show: function() {
if(!this._alwaysZoomOut) {
let [mouseX, mouseY] = global.get_pointer();
let [x, y] = this._controls.get_transformed_position();
let [width, height] = this._controls.get_transformed_size();
let visibleWidth = this._controls.get_theme_node().get_length('visible-width');
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
if(rtl)
x = x + width - visibleWidth;
if(mouseX > x - 0.5 && mouseX < x + visibleWidth + 0.5 &&
mouseY > y - 0.5 && mouseY < y + height + 0.5)
this._controlsInitiallyHovered = true;
}
this._zoomOut = this._alwaysZoomOut;
this._zoomFraction = this._alwaysZoomOut ? 1 : 0;
this._updateZoom();
this._controls.show();
this._thumbnailsBox.show();
this._updateWorkspacesViews();
this._restackedNotifyId =
global.screen.connect('restacked',
Main.overview.connect('sync-window-stacking',
Lang.bind(this, this._onRestacked));
if (this._itemDragBeginId == 0)
this._itemDragBeginId = Main.overview.connect('item-drag-begin',
if (this._appDragBeginId == 0)
this._appDragBeginId = Main.overview.connect('app-drag-begin',
Lang.bind(this, this._dragBegin));
if (this._itemDragCancelledId == 0)
this._itemDragCancelledId = Main.overview.connect('item-drag-cancelled',
if (this._appDragCancelledId == 0)
this._appDragCancelledId = Main.overview.connect('app-drag-cancelled',
Lang.bind(this, this._dragCancelled));
if (this._itemDragEndId == 0)
this._itemDragEndId = Main.overview.connect('item-drag-end',
if (this._appDragEndId == 0)
this._appDragEndId = Main.overview.connect('app-drag-end',
Lang.bind(this, this._dragEnd));
if (this._windowDragBeginId == 0)
this._windowDragBeginId = Main.overview.connect('window-drag-begin',
@ -588,8 +523,6 @@ const WorkspacesDisplay = new Lang.Class({
if (this._windowDragEndId == 0)
this._windowDragEndId = Main.overview.connect('window-drag-end',
Lang.bind(this, this._dragEnd));
this._onRestacked();
},
zoomFromOverview: function() {
@ -599,27 +532,21 @@ const WorkspacesDisplay = new Lang.Class({
},
hide: function() {
this._controls.hide();
this._thumbnailsBox.hide();
if (!this._alwaysZoomOut)
this.zoomFraction = 0;
if (this._restackedNotifyId > 0){
global.screen.disconnect(this._restackedNotifyId);
Main.overview.disconnect(this._restackedNotifyId);
this._restackedNotifyId = 0;
}
if (this._itemDragBeginId > 0) {
Main.overview.disconnect(this._itemDragBeginId);
this._itemDragBeginId = 0;
if (this._appDragBeginId > 0) {
Main.overview.disconnect(this._appDragBeginId);
this._appDragBeginId = 0;
}
if (this._itemDragCancelledId > 0) {
Main.overview.disconnect(this._itemDragCancelledId);
this._itemDragCancelledId = 0;
if (this._appDragCancelledId > 0) {
Main.overview.disconnect(this._appDragCancelledId);
this._appDragCancelledId = 0;
}
if (this._itemDragEndId > 0) {
Main.overview.disconnect(this._itemDragEndId);
this._itemDragEndId = 0;
if (this._appDragEndId > 0) {
Main.overview.disconnect(this._appDragEndId);
this._appDragEndId = 0;
}
if (this._windowDragBeginId > 0) {
Main.overview.disconnect(this._windowDragBeginId);
@ -750,73 +677,15 @@ const WorkspacesDisplay = new Lang.Class({
return this._getPrimaryView().getActiveWorkspace().hasMaximizedWindows();
},
// zoomFraction property allows us to tween the controls sliding in and out
set zoomFraction(fraction) {
this._zoomFraction = fraction;
this.actor.queue_relayout();
},
get zoomFraction() {
return this._zoomFraction;
},
_updateAlwaysZoom: function() {
// Always show the pager if workspaces are actually used,
// e.g. there are windows on more than one
this._alwaysZoomOut = global.screen.n_workspaces > 2;
if (this._alwaysZoomOut)
return;
let monitors = Main.layoutManager.monitors;
let primary = Main.layoutManager.primaryMonitor;
/* Look for any monitor to the right of the primary, if there is
* one, we always keep zoom out, otherwise its hard to reach
* the thumbnail area without passing into the next monitor. */
for (let i = 0; i < monitors.length; i++) {
if (monitors[i].x >= primary.x + primary.width) {
this._alwaysZoomOut = true;
break;
}
}
},
_getPreferredWidth: function (actor, forHeight, alloc) {
// pass through the call in case the child needs it, but report 0x0
this._controls.get_preferred_width(forHeight);
},
_getPreferredHeight: function (actor, forWidth, alloc) {
// pass through the call in case the child needs it, but report 0x0
this._controls.get_preferred_height(forWidth);
},
_allocate: function (actor, box, flags) {
let childBox = new Clutter.ActorBox();
let totalWidth = box.x2 - box.x1;
// width of the controls
let [controlsMin, controlsNatural] = this._controls.get_preferred_width(box.y2 - box.y1);
// Amount of space on the screen we reserve for the visible control
let controlsVisible = this._controls.get_theme_node().get_length('visible-width');
let controlsReserved = controlsVisible * (1 - this._zoomFraction) + controlsNatural * this._zoomFraction;
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
if (rtl) {
childBox.x2 = controlsReserved;
childBox.x1 = childBox.x2 - controlsNatural;
} else {
childBox.x1 = totalWidth - controlsReserved;
childBox.x2 = childBox.x1 + controlsNatural;
}
childBox.y1 = 0;
childBox.y2 = box.y2- box.y1;
this._controls.allocate(childBox, flags);
this._updateWorkspacesGeometry();
},
@ -856,36 +725,22 @@ const WorkspacesDisplay = new Lang.Class({
let width = fullWidth;
let height = fullHeight;
let [controlsMin, controlsNatural] = this._controls.get_preferred_width(height);
let controlsVisible = this._controls.get_theme_node().get_length('visible-width');
let [x, y] = this.actor.get_transformed_position();
let rtl = (Clutter.get_default_text_direction () == Clutter.TextDirection.RTL);
let clipWidth = width - controlsVisible;
let clipHeight = (fullHeight / fullWidth) * clipWidth;
let clipX = rtl ? x + controlsVisible : x;
let clipWidth = width;
let clipHeight = fullHeight;
let clipX = x;
let clipY = y + (fullHeight - clipHeight) / 2;
let widthAdjust = this._zoomOut ? controlsNatural : controlsVisible;
width -= widthAdjust;
if (rtl)
x += widthAdjust;
height = (fullHeight / fullWidth) * width;
let difference = fullHeight - height;
y += difference / 2;
let monitors = Main.layoutManager.monitors;
let m = 0;
for (let i = 0; i < monitors.length; i++) {
if (i == this._primaryIndex) {
this._workspacesViews[m].setClipRect(clipX, clipY,
clipWidth, clipHeight);
this._workspacesViews[m].setGeometry(x, y, width, height,
difference);
this._workspacesViews[m].setGeometry(x, y, width, height);
m++;
} else if (!this._workspacesOnlyOnPrimary) {
this._workspacesViews[m].setClipRect(monitors[i].x,
@ -895,31 +750,18 @@ const WorkspacesDisplay = new Lang.Class({
this._workspacesViews[m].setGeometry(monitors[i].x,
monitors[i].y,
monitors[i].width,
monitors[i].height, 0);
monitors[i].height);
m++;
}
}
},
_onRestacked: function() {
let stack = global.get_window_actors();
let stackIndices = {};
for (let i = 0; i < stack.length; i++) {
// Use the stable sequence for an integer to use as a hash key
stackIndices[stack[i].get_meta_window().get_stable_sequence()] = i;
}
_onRestacked: function(actor, stackIndices) {
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].syncStacking(stackIndices);
this._thumbnailsBox.syncStacking(stackIndices);
},
_workspacesChanged: function() {
this._updateAlwaysZoom();
this._updateZoom();
if (this._workspacesViews == null)
return;
@ -944,8 +786,6 @@ const WorkspacesDisplay = new Lang.Class({
}
m++;
}
this._thumbnailsBox.addThumbnails(oldNumWorkspaces, newNumWorkspaces - oldNumWorkspaces);
} else {
// Assume workspaces are only removed sequentially
// (e.g. 2,3,4 - not 2,4,7)
@ -968,42 +808,12 @@ const WorkspacesDisplay = new Lang.Class({
lostWorkspaces[l].destroy();
}
}
this._thumbnailsBox.removeThumbnails(removedIndex, removedNum);
}
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].updateWorkspaces(oldNumWorkspaces,
newNumWorkspaces);
},
_updateZoom : function() {
if (Main.overview.animationInProgress)
return;
let shouldZoom = this._alwaysZoomOut || this._controls.hover;
if (shouldZoom != this._zoomOut) {
this._zoomOut = shouldZoom;
this._updateWorkspacesGeometry();
if (!this._workspacesViews)
return;
Tweener.addTween(this,
{ zoomFraction: this._zoomOut ? 1 : 0,
time: WORKSPACE_SWITCH_TIME,
transition: 'easeOutQuad' });
for (let i = 0; i < this._workspacesViews.length; i++)
this._workspacesViews[i].updateWindowPositions();
}
},
_onControlsHoverChanged: function() {
if(!this._controls.hover)
this._controlsInitiallyHovered = false;
if(!this._controlsInitiallyHovered)
this._updateZoom();
this._updateSwitcherVisibility();
},
_dragBegin: function() {
@ -1021,33 +831,11 @@ const WorkspacesDisplay = new Lang.Class({
},
_onDragMotion: function(dragEvent) {
let controlsHovered = this._controls.contains(dragEvent.targetActor);
this._controls.set_hover(controlsHovered);
return DND.DragMotionResult.CONTINUE;
},
_dragEnd: function() {
this._inDrag = false;
// We do this deferred because drag-end is emitted before dnd.js emits
// event/leave events that were suppressed during the drag. If we didn't
// defer this, we'd zoom out then immediately zoom in because of the
// enter event we received. That would normally be invisible but we
// might as well avoid it.
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
Lang.bind(this, this._updateZoom));
},
_onScrollEvent: function (actor, event) {
switch ( event.get_scroll_direction() ) {
case Clutter.ScrollDirection.UP:
Main.wm.actionMoveWorkspace(Meta.MotionDirection.UP);
break;
case Clutter.ScrollDirection.DOWN:
Main.wm.actionMoveWorkspace(Meta.MotionDirection.DOWN);
break;
}
}
});
Signals.addSignalMethods(WorkspacesDisplay.prototype);

View File

@ -1,19 +1 @@
XSLTPROC_FLAGS = \
--nonet \
--stringparam man.output.quietly 1 \
--stringparam funcsynopsis.style ansi \
--stringparam man.th.extra1.suppress 1 \
--stringparam man.authors.section.enabled 0 \
--stringparam man.copyright.section.enabled 0
.xml.1:
$(AM_V_GEN) $(XSLTPROC) $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
man_MANS = \
gnome-shell.1
xml_files = $(man_MANS:.1=.xml)
EXTRA_DIST = $(xml_files)
DISTCLEANFILES = $(man_MANS)
dist_man_MANS = gnome-shell.1

94
man/gnome-shell.1 Normal file
View File

@ -0,0 +1,94 @@
.\" Copyright (c) 2009, Marcelo Jorge Vieira (metal) <metal@alucinados.com>
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
.\" Boston, MA 02111-1301 USA.
.TH GNOME-SHELL 1
.SH NAME
gnome-shell \- Graphical shell for the GNOME desktop
.SH SYNOPSIS
.B gnome-shell [options]
.SH DESCRIPTION
GNOME Shell provides core user interface functions for the GNOME 3
desktop, like switching to windows and launching applications. GNOME
Shell takes advantage of the capabilities of modern graphics hardware
and introduces innovative user interface concepts to provide a
visually attractive and easy to use experience.
.SH OPTIONS
.TP
.B \-\-replace
Replace the running window manager
.br
.TP
.B \-\-sm-disable
Disable connection to the session manager
.br
.TP
.B \-\-sm-client-id=ID
Specify session management ID
.br
.TP
.B \-\-sm-save-file=FILE
Initialize session from savefile
.br
.TP
.B \-\-screen=SCREEN
X screen to use
.br
.TP
.B \-d, \-\-display=DISPLAY
X display to use
.br
.TP
.B \-\-sync
Make X calls synchronous
.br
.TP
.B \-\-version
Print version and exit
.br
.TP
.B \-\-help
Display help and exit
.br
.SH BUGS
The bug tracker can be reached by visiting the website
\fIhttps://bugzilla.gnome.org/buglist.cgi?product=gnome-shell\fR
Before sending a bug report, please verify that you have the latest
version of gnome-shell. Many bugs (major and minor) are fixed at each
release, and if yours is out of date, the problem may already have
been solved.
.SH ADDITIONAL INFORMATION
For further information, visit the website \fIhttp://live.gnome.org/GnomeShell\fR

View File

@ -1,159 +0,0 @@
<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<refentry id="gnome-shell">
<refentryinfo>
<title>gnome-shell</title>
<productname>gnome-shell</productname>
<authorgroup>
<author>
<contrib>wrote the original gnome-shell man page</contrib>
<firstname>Marcelo Jorge</firstname>
<surname>Vieira</surname>
<email>metal@alucinados.com</email>
</author>
</authorgroup>
</refentryinfo>
<refmeta>
<refentrytitle>gnome-shell</refentrytitle>
<manvolnum>1</manvolnum>
</refmeta>
<refnamediv>
<refname>gnome-shell</refname>
<refpurpose>Graphical shell for the GNOME desktop</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>gnome-shell <arg choice="opt" rep="repeat">OPTION</arg></command>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>GNOME shell provides core user
interface functions for the GNOME 3 desktop, like switching
to windows and launching applications. GNOME shell takes
advantage of the capabilities of modern graphics hardware
and introduces innovative user interface concepts to provide
a visually attractive and easy to use experience.</para>
<para>gnome-shell is a required component of
the GNOME desktop, i.e. it is listed in the
RequiredComponents field of
<filename>/usr/share/gnome-session/sessions/gnome.session</filename>.
It is started in the window manager phase of the session.
</para>
</refsect1>
<refsect1>
<title>Options</title>
<variablelist>
<varlistentry>
<term><option>-r</option>, <option>--replace</option></term>
<listitem><para>Replace the running window manager</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--sm-disable</option></term>
<listitem><para>Disable connection to the session manager</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--sm-client-id=<replaceable>ID</replaceable></option></term>
<listitem><para>Specify session management <replaceable>ID</replaceable></para></listitem>
</varlistentry>
<varlistentry>
<term><option>--sm-save-file=<replaceable>FILE</replaceable></option></term>
<listitem><para>Initialize session from <replaceable>FILE</replaceable></para></listitem>
</varlistentry>
<varlistentry>
<term><option>--screen=<replaceable>SCREEN</replaceable></option></term>
<listitem><para>X screen to use</para></listitem>
</varlistentry>
<varlistentry>
<term><option>-d</option>, <option>--display=<replaceable>DISPLAY</replaceable></option></term>
<listitem><para>X Display to use</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--sync</option></term>
<listitem><para>Make X calls synchronous</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--version</option></term>
<listitem><para>Print version and exit</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--help</option></term>
<listitem><para>Display help and exit</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--mode=<replaceable>MODE</replaceable></option></term>
<listitem><para>Use a specific mode, e.g. "gdm" for login screen</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--list-modes</option></term>
<listitem><para>List possible modes and exit</para></listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Files</title>
<para>
<filename>/usr/share/gnome-session/sessions/gnome.session</filename>,
<filename>/usr/share/applications/gnome-shell.desktop</filename>.</para>
</refsect1>
<refsect1>
<title>Bugs</title>
<para>The bug tracker can be reached by visiting the
website <ulink url="https://bugzilla.gnome.org/buglist.cgi?product=gnome-shell">https://bugzilla.gnome.org/buglist.cgi?product=gnome-shell</ulink>.
Before sending a bug report, please verify that you have
the latest version of gnome-shell. Many bugs (major and
minor) are fixed at each release, and if yours is out of
date, the problem may already have been solved.</para>
</refsect1>
<refsect1>
<title>Additional Information</title>
<para>For further information, visit the website
<ulink url="http://live.gnome.org/GnomeShell">http://live.gnome.org/GnomeShell</ulink>.</para>
</refsect1>
</refentry>

192
po/be.po
View File

@ -5,8 +5,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: 2012-11-02 07:11+0000\n"
"PO-Revision-Date: 2012-11-02 15:12+0300\n"
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
"PO-Revision-Date: 2012-10-16 12:05+0300\n"
"Last-Translator: Kasia Bondarava <kasia.bondarava@gmail.com>\n"
"Language-Team: Belarusian <i18n-bel-gnome@googlegroups.com>\n"
"Language: be\n"
@ -34,6 +34,14 @@ msgstr "Сістэма"
msgid "Show the message tray"
msgstr "Паказаць абшар апавяшчэнняў"
#: ../data/50-gnome-shell-system.xml.in.h:3
msgid "Show all applications"
msgstr "Паказаць усе праграмы"
#: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Open the application menu"
msgstr "Адкрыць праграмнае меню"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "Абалонка GNOME"
@ -136,33 +144,30 @@ 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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Гэта настройка дазваляе выключыць аўтаматычнае хаванне элемента для выхаду "
"з сеанса ў аднакарыстальніцкім, аднасеансавым рэжыме."
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Калі ўключана, паказваць тыдзень у календары ў ISO-фармаце."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Клавіятурны скарот для адкрыцця праграмнага меню"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Клавіятурны скарот для адкрыцця праграмнага меню."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Клавіятурны скарот для рэжыму \"Паказаць праграмы\""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "Клавіятурны скарот для рэжыму \"Паказаць праграмы\" у Аглядзе Заняткаў."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Клавіятурны скарот для ўключэння/выключэння абшару апавяшчэнняў"
@ -295,8 +300,8 @@ msgstr "Акно ўваходу"
msgid "Power"
msgstr "Праца сістэмы"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Прыпыніць камп'ютар"
@ -304,8 +309,8 @@ msgstr "Прыпыніць камп'ютар"
msgid "Restart"
msgstr "Перазапусціць сістэму"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Выключыць камп'ютар"
@ -688,35 +693,35 @@ msgstr "Абязгучыць"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Адпраўлена ў <b>%X</b>, <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Адпраўлена ў <b>%A</b>, <b>%d %B</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s змяніў імя на %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Запрашэнне ў %s"
@ -724,42 +729,42 @@ msgstr "Запрашэнне ў %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "Удзельнік %s запрашае вас далучыцца да %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Адмовіцца"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Прыняць"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Відэазванок ад %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Званок ад %s"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Адмовіць"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Адказаць"
@ -768,108 +773,108 @@ msgstr "Адказаць"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s пасылае вам %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s просіць дазволу на прагляд вашага сеткавага стану"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Сеткавая памылка"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Няўдалая ідэнтыфікацыя"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Памылка шыфравання"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Сертыфікат не пададзены"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Сертыфікат не заслугоўвае даверу"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Сертыфікат састарэў"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Сертыфікат не актывізаваны"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Назва камп'ютара ў сертыфікаце не адпавядае патрэбнай"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Адбітак сертыфіката не адпавядае патрэбнаму"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Сертыфікат уласнаручна падпісаны"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Уключаны рэжым па-за сеткай"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Шыфраванне недаступнае"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Хібны сертыфікат"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Адмоўлена ў злучэнні"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Не ўдалося ўсталяваць злучэнне"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Злучэнне страчана"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Гэты конт ужо злучаны з серверам"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Злучэнне заменена новым для таго ж самага рэсурсу"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Такі конт ужо існуе на серверы"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Сервер надта заняты і не можа абслужыць гэта злучэнне"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Сертыфікат быў адкліканы"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "Для сертыфіката выкарыстаны слабы або небяспечны алгарытм шыфравання"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -877,26 +882,26 @@ msgstr ""
"Даўжыня сертыфіката сервера або глыбіня яго ланцуга перавышае абмежаванне, "
"выстаўленае крыптаграфічнай бібліятэкай"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Унутраная памылка"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "не ўдалося злучыцца з %s"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Перазлучыцца"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Рэдагаваць конт"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Невядомая прычына"
@ -1083,23 +1088,23 @@ msgstr "Паглядзець выточны код"
msgid "Web Page"
msgstr "Сеціўная старонка"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Адкрыць"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Выдаліць"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Абшар апавяшчэнняў"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Сістэмная інфармацыя"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Невядомая"
@ -1155,11 +1160,11 @@ msgstr "Увядзіце загад:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1167,7 +1172,7 @@ msgstr[0] "%d новае паведамленне"
msgstr[1] "%d новыя паведамленні"
msgstr[2] "%d новых паведамленняў"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1627,59 +1632,59 @@ msgstr "Мікрафон"
msgid "Log in as another user"
msgstr "Увайсці іншым карыстальнікам"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Даступны"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Заняты"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Нябачны"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Адсутны"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Бяздзейны"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Недаступны"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Апавяшчэнні"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Сістэмныя настройкі"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Перамяніць карыстальніка"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Выйсці з сеанса"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Заблакіраваць"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Усталяваць абнаўленні і перазагрузіць камп'ютар"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Вам прызначаны стан занятасці для чату"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1688,15 +1693,15 @@ msgstr ""
"сеціўны стан абноўлены інфармацыяй аб тым, што вы можаце не ўбачыць чужых "
"паведамленняў у час."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Вокны"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Праграмы"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Пошук"
@ -1767,7 +1772,7 @@ msgstr "Ужыць асаблівы рэжым, напрыклад, \"gdm\" дл
msgid "List possible modes"
msgstr "Вывесці спіс магчымых рэжымаў"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Не ўдалося запусціць \"%s\""
@ -1791,4 +1796,3 @@ msgstr "Прадвызначана"
#: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user"
msgstr "Карыстальнік праігнараваў дыялогавае акенца ідэнтыфікацыі"

256
po/ca.po
View File

@ -10,14 +10,14 @@ msgstr ""
"Project-Id-Version: HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
"shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-10-31 16:48+0000\n"
"PO-Revision-Date: 2012-11-03 16:22+0100\n"
"POT-Creation-Date: 2012-09-25 10:59+0000\n"
"PO-Revision-Date: 2012-09-25 07:47+0100\n"
"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
"Language-Team: Catalan <tradgnome@softcatala.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bits\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Gtranslator 2.91.5\n"
@ -141,63 +141,50 @@ msgstr ""
"l'usuari. El valor prové de l'enumeració «GsmPresenceStatus»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Mostra sempre l'element de menú «Surt» en el menú d'usuari."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Aquesta clau sobreescriu l'ocultació automàtica de l'element de menú «Surt» "
"en el menú d'usuari en el cas que només hi hagi un sol usuari i una sola "
"sessió."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Mostra el número de la setmana en el calendari"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Si és «true» (cert) es mostra el número de la setmana en el calendari."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Vinculació per obrir el menú d'aplicació"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "La vinculació per obrir el menú d'aplicació."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "La vinculació per commutar la visibilitat de la safata de missatges"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "La vinculació per commutar la visibilitat de la safata de missatges."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the screen recorder"
msgstr "La vinculació per commutar l'enregistrador de pantalla"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "La vinculació per iniciar/aturar l'enregistrador de pantalla."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "Quin tipus de teclat s'ha d'utilitzar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "El tipus de teclat que s'utilitzarà."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "Imatges per segon per enregistrar els screencasts."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -205,11 +192,11 @@ msgstr ""
"Les imatges per segon, en fotogrames per segon, de l'screencast enregistrat "
"per l'eina d'enregistrament del GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "El conducte GStreamer per enregistrar els screencasts"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -236,11 +223,11 @@ msgstr ""
"WEBM i utilitza el còdec VP8. El %T és una variable per estimar el nombre de "
"fils d'execució paral·lels òptims del sistema."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "Extensió de fitxer per desar l'screencast"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 "
@ -263,11 +250,11 @@ msgstr "Extensió"
msgid "Select an extension to configure using the combobox above."
msgstr "Seleccioneu una extensió amb el quadre combinat per configurar-la."
#: ../js/gdm/loginDialog.js:529
#: ../js/gdm/loginDialog.js:528
msgid "Session..."
msgstr "Sessió..."
#: ../js/gdm/loginDialog.js:677
#: ../js/gdm/loginDialog.js:676
msgctxt "title"
msgid "Sign In"
msgstr "Entrada"
@ -275,23 +262,23 @@ msgstr "Entrada"
#. 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:736
#: ../js/gdm/loginDialog.js:743
msgid "Not listed?"
msgstr "No esteu llistat?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:896 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
msgid "Cancel"
msgstr "Cancel·la"
#: ../js/gdm/loginDialog.js:894
#: ../js/gdm/loginDialog.js:901
msgctxt "button"
msgid "Sign In"
msgstr "Entra"
#: ../js/gdm/loginDialog.js:1215
#: ../js/gdm/loginDialog.js:1240
msgid "Login Window"
msgstr "Finestra d'entrada"
@ -300,8 +287,8 @@ msgstr "Finestra d'entrada"
msgid "Power"
msgstr "Apaga"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:778
msgid "Suspend"
msgstr "Atura temporalment"
@ -309,8 +296,8 @@ msgstr "Atura temporalment"
msgid "Restart"
msgstr "Reinicia"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:777
msgid "Power Off"
msgstr "Apaga"
@ -361,7 +348,7 @@ msgstr "CONFIGURACIÓ"
msgid "New Window"
msgstr "Finestra nova"
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
msgid "Remove from Favorites"
msgstr "Suprimeix dels preferits"
@ -525,16 +512,16 @@ msgstr "Aquesta setmana"
msgid "Next week"
msgstr "La setmana que ve"
#: ../js/ui/components/autorunManager.js:297
#: ../js/ui/components/autorunManager.js:278
msgid "Removable Devices"
msgstr "Dispositius extraïbles"
#: ../js/ui/components/autorunManager.js:594
#: ../js/ui/components/autorunManager.js:575
#, c-format
msgid "Open with %s"
msgstr "Obre amb %s"
#: ../js/ui/components/autorunManager.js:620
#: ../js/ui/components/autorunManager.js:601
msgid "Eject"
msgstr "Expulsa"
@ -691,35 +678,35 @@ msgstr "Silencia"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Enviat a les <b>%X</b> del <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Enviat el <b>%A %d de %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Enviat el <b>%A %d de %B</b> de %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "En/na %s ara es diu %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Us han convidat a entrar a %s"
@ -727,42 +714,42 @@ msgstr "Us han convidat a entrar a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "En/na %s us convida a entrar a %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Declina"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Accepta"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videotrucada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Trucada de %s"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Rebutja"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Contesta"
@ -771,112 +758,112 @@ msgstr "Contesta"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "En/na %s us envia %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s vol poder saber quan esteu en línia"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Error de la xarxa"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Ha fallat l'autenticació"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Error d'encriptació"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "No s'ha proporcionat el certificat"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "El certificat no és de confiança"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "El certificat ha vençut"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "El certificat no està activat"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "No coincideix el nom de la màquina del certificat"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "No coincideix l'empremta digital del certificat"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certificat signat per un mateix"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "S'ha establert l'estat a fora de línia"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "L'encriptació no està disponible"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "El certificat no és vàlid"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "S'ha rebutjat la connexió"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "No es pot establir la connexió"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "S'ha perdut la connexió"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Aquest compte ja està connectat al servidor"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"S'ha reemplaçat la connexió per una altra de nova fent servir el mateix "
"recurs"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Ja existeix aquest compte al servidor"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "El servidor està massa ocupat per gestionar la connexió"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "S'ha revocat el certificat"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
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 "
"criptogràfica és feble"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -884,30 +871,30 @@ msgstr ""
"La llargada del certificat del servidor o la profunditat de la cadena de "
"certificació excedeix els límits de la biblioteca criptogràfica"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "S'ha produït un error intern"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Ha fallat la connexió a %s"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Torna a connectar"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Edita el compte"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Motiu desconegut"
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
msgid "Show Applications"
msgstr "Mostra les aplicacions"
@ -915,14 +902,14 @@ msgstr "Mostra les aplicacions"
msgid "Date and Time Settings"
msgstr "Configuració de la data i l'hora"
#: ../js/ui/dateMenu.js:111
#: ../js/ui/dateMenu.js:109
msgid "Open Calendar"
msgstr "Obre el calendari"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:175
msgid "%A %B %e, %Y"
msgstr "%A %d de %B, %Y"
@ -1081,23 +1068,23 @@ msgstr "Mostra el codi font"
msgid "Web Page"
msgstr "Pàgina web"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Obre"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Suprimeix"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:2088
msgid "Message Tray"
msgstr "Safata de missatges"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2551
msgid "System Information"
msgstr "Informació de l'ordinador"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Desconegut"
@ -1153,7 +1140,7 @@ msgstr "Introduïu una ordre:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A %d de %B"
@ -1203,7 +1190,7 @@ msgstr "Contrasenya"
msgid "Remember Password"
msgstr "Recorda la contrasenya"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
msgid "Unlock"
msgstr "Desbloqueja"
@ -1614,63 +1601,67 @@ msgstr "Volum"
msgid "Microphone"
msgstr "Micròfon"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:176
msgid "Log in as another user"
msgstr "Entra amb un altre usuari"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Disponible"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Ocupat"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Invisible"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Absent"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Inactiu"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "No disponible"
#: ../js/ui/userMenu.js:744
msgid "Notifications"
msgstr "Notificacions"
#: ../js/ui/userMenu.js:752
msgid "System Settings"
msgstr "Paràmetres del sistema"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
msgid "Switch User"
msgstr "Canvia d'usuari"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:619
msgid "Switch Session"
msgstr "Canvia de sessió"
#: ../js/ui/userMenu.js:743
msgid "Notifications"
msgstr "Notificacions"
#: ../js/ui/userMenu.js:751
msgid "System Settings"
msgstr "Paràmetres del sistema"
#: ../js/ui/userMenu.js:764
msgid "Log Out"
msgstr "Surt"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:769
msgid "Lock"
msgstr "Bloqueja"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:784
msgid "Install Updates & Restart"
msgstr "Instal·la les actualitzacions i reinicia"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:802
msgid "Your chat status will be set to busy"
msgstr "L'estat del xat s'establirà a ocupat"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:803
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1691,7 +1682,7 @@ msgstr "Aplicacions"
msgid "Search"
msgstr "Cerca"
#: ../js/ui/wanda.js:117
#: ../js/ui/wanda.js:119
#, c-format
msgid ""
"Sorry, no wisdom for you today:\n"
@ -1700,12 +1691,12 @@ msgstr ""
"No hi ha cap consell per avui:\n"
"%s"
#: ../js/ui/wanda.js:121
#: ../js/ui/wanda.js:123
#, c-format
msgid "%s the Oracle says"
msgstr "L'oracle diu %s"
#: ../js/ui/wanda.js:162
#: ../js/ui/wanda.js:164
msgid "Your favorite Easter Egg"
msgstr "El vostre ou de pasqua preferit"
@ -1740,23 +1731,23 @@ msgstr[1] "%u entrades"
msgid "System Sounds"
msgstr "Sons del sistema"
#: ../src/main.c:332
#: ../src/main.c:330
msgid "Print version"
msgstr "Mostra la versió"
#: ../src/main.c:338
#: ../src/main.c:336
msgid "Mode used by GDM for login screen"
msgstr "El mode que utilitzarà el GDM per a la pantalla d'entrada"
#: ../src/main.c:344
#: ../src/main.c:342
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Utilitza un mode específic, p. ex. «gdm» per la pantalla d'entrada"
#: ../src/main.c:350
#: ../src/main.c:348
msgid "List possible modes"
msgstr "Llista els modes possibles"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "No s'ha pogut iniciar «%s»"
@ -1781,9 +1772,6 @@ msgstr "Predeterminat"
msgid "Authentication dialog was dismissed by the user"
msgstr "L'usuari ha descartat el diàleg d'autenticació"
#~ msgid "Switch Session"
#~ msgstr "Canvia de sessió"
#~ msgid "Failed to unmount '%s'"
#~ msgstr "No s'ha pogut desmuntar «%s»"

298
po/cs.po
View File

@ -1,20 +1,18 @@
# Czech translation of gnome-shell.
# Copyright (C) 2009, 2010, 2011 the author(s) of gnome-shell.
# This file is distributed under the same license as the gnome-shell package.
#
# Andre Klapper <ak-47@gmx.net>, 2009.
# Petr Kovar <pknbe@volny.cz>, 2009, 2010, 2011, 2012.
# Adam Matoušek <adydas95@gmail.com>, 2012
# Marek Černocký <marek@manet.cz>, 2012.
#
msgid ""
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: 2012-10-31 16:48+0000\n"
"PO-Revision-Date: 2012-11-04 17:40+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
"PO-Revision-Date: 2012-09-24 18:30+0200\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
@ -139,62 +137,50 @@ msgstr ""
"sezení. Tato hodnota pochází z výčtu GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "V nabídce uživatele vždy zobrazovat položku „Odhlásit“."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Tento klíč ruší automatické skrývání položky nabídky „Odhlásit“ v situacích s "
"jedním uživatelem a jedním sezením."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Zobrazovat v kalendáři čísla týdnů"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Je-li zapnuto, zobrazovat v kalendáři čísla týdnů dle ISO."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Klávesová zkratka na otevření nabídky aplikace"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Klávesová zkratka na otevření nabídky aplikace."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Klávesová zkratka k přepnutí viditelnosti lišty zpráv."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the screen recorder"
msgstr "Klávesová zkratka k záznamu obrazovky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Klávesová zkratka k započnutí nebo ukončení záznamu dění na obrazovce."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "Která klávesnice se má používat"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "Typ klávesnice, který se má používat."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "Frekvence snímků při nahrávání dění na obrazovce."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -202,11 +188,11 @@ msgstr ""
"Frekvence snímků za sekundu výsledné nahrávky dění na obrazovce, která byla "
"nahrána záznamovým programem GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Roura systému gstreamer určená ke kódování nahrávky dění na obrazovce"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -231,11 +217,11 @@ msgstr ""
"nahráváním do WEBM s kodekem VP8. %T je použito jako zástupný symbol odhadu "
"nejvhodnějšího počtu vláken na systému."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "Přípona souboru s nahrávkou dění na obrazovce"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 "
@ -260,11 +246,11 @@ msgid "Select an extension to configure using the combobox above."
msgstr ""
"Pomocí rozbalovacího seznamu výše zvolte rozšíření, které chete nastavit."
#: ../js/gdm/loginDialog.js:529
#: ../js/gdm/loginDialog.js:527
msgid "Session..."
msgstr "Sezení…"
#: ../js/gdm/loginDialog.js:677
#: ../js/gdm/loginDialog.js:675
msgctxt "title"
msgid "Sign In"
msgstr "Přihlášení"
@ -272,23 +258,23 @@ msgstr "Přihlášení"
#. 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:736
#: ../js/gdm/loginDialog.js:742
msgid "Not listed?"
msgstr "Nejste na seznamu?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
msgid "Cancel"
msgstr "Zrušit"
#: ../js/gdm/loginDialog.js:894
#: ../js/gdm/loginDialog.js:900
msgctxt "button"
msgid "Sign In"
msgstr "Přihlásit se"
#: ../js/gdm/loginDialog.js:1215
#: ../js/gdm/loginDialog.js:1239
msgid "Login Window"
msgstr "Přihlašovací okno"
@ -297,8 +283,8 @@ msgstr "Přihlašovací okno"
msgid "Power"
msgstr "Vypnout"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:778
msgid "Suspend"
msgstr "Uspat do paměti"
@ -306,8 +292,8 @@ msgstr "Uspat do paměti"
msgid "Restart"
msgstr "Restartovat"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:777
msgid "Power Off"
msgstr "Vypnout"
@ -358,7 +344,7 @@ msgstr "NASTAVENÍ"
msgid "New Window"
msgstr "Nové okno"
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
msgid "Remove from Favorites"
msgstr "Odstranit z oblíbených"
@ -523,16 +509,16 @@ msgstr "Tento týden"
msgid "Next week"
msgstr "Následující týden"
#: ../js/ui/components/autorunManager.js:297
#: ../js/ui/components/autorunManager.js:278
msgid "Removable Devices"
msgstr "Výměnná zařízení"
#: ../js/ui/components/autorunManager.js:594
#: ../js/ui/components/autorunManager.js:575
#, c-format
msgid "Open with %s"
msgstr "Otevřít s %s"
#: ../js/ui/components/autorunManager.js:620
#: ../js/ui/components/autorunManager.js:601
msgid "Eject"
msgstr "Vysunout"
@ -689,35 +675,35 @@ msgstr "Ztlumit"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Čas odeslání: <b>%X</b>, den odeslání: <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Den odeslání: <b>%A</b>, <b>%e. %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Den odeslání: <b>%A</b>, <b>%e. %B</b> %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s je teď znám jako %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Pozvánka na připojení k %s"
@ -725,42 +711,42 @@ msgstr "Pozvánka na připojení k %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s vás zve do %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Odmítnout"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Přijmout"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videohovor od %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Hovor od %s"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Odmítnout"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Zvednout"
@ -769,110 +755,110 @@ msgstr "Zvednout"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s vám posílá %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s vás žádá o oprávnění vidět, že jste dostupní"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Chyba sítě"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Ověření selhalo"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Chyba šifrování"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Certifikát neposkytnut"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Nedůvěryhodný certifikát"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Platnost certifikátu vypršela"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Certifikát není aktivován"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Název počítače certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Otisk prstu certifikátu nesouhlasí"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certifikát je podepsán sám sebou"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Stav nastaven na „Odhlášen“"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Šifrování není dostupné"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Certifikát je neplatný"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Spojení bylo odmítnuto"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Spojení nemohlo bát navázáno"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Spojení bylo ztraceno"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Tento účet je již připojen k serveru"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Spojení bylo nahrazeno novým spojením, které používá stejný zdroj"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Takový účet již na serveru existuje"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Server je právě příliš zaneprázdněn na to, aby obsloužil spojení"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Certifikát byl odvolán"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Certifikát používá nepříliš bezpečný šifrovací algoritmus nebo je z "
"kryptografického hlediska slabý"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -880,30 +866,30 @@ msgstr ""
"Délka certifikátu serveru nebo délka zřetězených certifikátů serveru "
"přesáhla omezení dané kryptografickou knihovnou"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Vnitřní chyba"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Připojení k „%s“ selhalo"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Znovu připojit"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Upravit účet"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Neznámý důvod"
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
msgid "Show Applications"
msgstr "Zobrazit aplikace"
@ -911,7 +897,7 @@ msgstr "Zobrazit aplikace"
msgid "Date and Time Settings"
msgstr "Nastavení data a času"
#: ../js/ui/dateMenu.js:111
#: ../js/ui/dateMenu.js:109
msgid "Open Calendar"
msgstr "Otevřít kalendář"
@ -919,7 +905,7 @@ msgstr "Otevřít kalendář"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:175
msgid "%A %B %e, %Y"
msgstr "%A, %e. %B, %Y"
@ -1025,11 +1011,11 @@ msgstr "Instalovat"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Stáhnout a nainstalovat „%s“ z extensions.gnome.org?"
#: ../js/ui/keyboard.js:337
#: ../js/ui/keyboard.js:327
msgid "tray"
msgstr "panel"
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
#: ../js/ui/status/power.js:205
msgid "Keyboard"
msgstr "Klávesnice"
@ -1082,23 +1068,23 @@ msgstr "Zobrazit zdroj"
msgid "Web Page"
msgstr "Webová stránka"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1080
msgid "Open"
msgstr "Otevřít"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1087
msgid "Remove"
msgstr "Odstranit"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:2055
msgid "Message Tray"
msgstr "Lišta zpráv"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2511
msgid "System Information"
msgstr "Informace o systému"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Neznámé"
@ -1154,7 +1140,7 @@ msgstr "Zadejte prosím příkaz:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %e. %B"
@ -1206,7 +1192,7 @@ msgstr "Heslo"
msgid "Remember Password"
msgstr "Pamatovat si heslo"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
msgid "Unlock"
msgstr "Odemknout"
@ -1324,7 +1310,7 @@ msgstr "Nastavení klávesnice"
msgid "Mouse Settings"
msgstr "Nastavení myši"
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
msgid "Sound Settings"
msgstr "Nastavení zvuku"
@ -1613,7 +1599,7 @@ msgid "Unknown"
msgstr "Neznámé"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
msgid "Volume"
msgstr "Hlasitost"
@ -1621,63 +1607,67 @@ msgstr "Hlasitost"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:176
msgid "Log in as another user"
msgstr "Přihlásit se jako jiný uživatel"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Přítomen"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Zaneprázdněn"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Neviditelný"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Nepřítomen"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Nečinný"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Nedostupný"
#: ../js/ui/userMenu.js:744
msgid "Notifications"
msgstr "Upozornění"
#: ../js/ui/userMenu.js:752
msgid "System Settings"
msgstr "Nastavení systému"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
msgid "Switch User"
msgstr "Přepnout uživatele"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:619
msgid "Switch Session"
msgstr "Přepnout sezení"
#: ../js/ui/userMenu.js:743
msgid "Notifications"
msgstr "Upozornění"
#: ../js/ui/userMenu.js:751
msgid "System Settings"
msgstr "Nastavení systému"
#: ../js/ui/userMenu.js:764
msgid "Log Out"
msgstr "Odhlásit se"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:769
msgid "Lock"
msgstr "Uzamknout"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:784
msgid "Install Updates & Restart"
msgstr "Nainstalovat aktualizace a restartovat"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:802
msgid "Your chat status will be set to busy"
msgstr "Váš stav v konverzacích byl nastaven na „Zaneprázdněn“"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:803
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1697,7 +1687,7 @@ msgstr "Aplikace"
msgid "Search"
msgstr "Hledat"
#: ../js/ui/wanda.js:117
#: ../js/ui/wanda.js:119
#, c-format
msgid ""
"Sorry, no wisdom for you today:\n"
@ -1706,12 +1696,12 @@ msgstr ""
"Promiňte, dnes žádné moudro:\n"
"%s"
#: ../js/ui/wanda.js:121
#: ../js/ui/wanda.js:123
#, c-format
msgid "%s the Oracle says"
msgstr "%s říká Prorok"
#: ../js/ui/wanda.js:162
#: ../js/ui/wanda.js:164
msgid "Your favorite Easter Egg"
msgstr "Vaše oblíbené velikonoční vajíčko"
@ -1748,23 +1738,23 @@ msgstr[2] "%u vstupů"
msgid "System Sounds"
msgstr "Systémové zvuky"
#: ../src/main.c:332
#: ../src/main.c:330
msgid "Print version"
msgstr "Vypsat verzi"
#: ../src/main.c:338
#: ../src/main.c:336
msgid "Mode used by GDM for login screen"
msgstr "Režim použitý GDM pro přihlašovací obrazovku"
#: ../src/main.c:344
#: ../src/main.c:342
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Použít pro přihlašovací obrazovku určitý mód, např. „gdm“."
#: ../src/main.c:350
#: ../src/main.c:348
msgid "List possible modes"
msgstr "Vypsat možné režimy"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Nelze spustit „%s“"
@ -1788,3 +1778,39 @@ msgstr "Výchozí"
#: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user"
msgstr "Dialogové okno ověření bylo uživatelem zrušeno"
#~ msgid "Failed to unmount '%s'"
#~ msgstr "Nelze odpojit „%s“"
#~ msgid "Retry"
#~ msgstr "Opakovat"
#~ msgid "PLACES & DEVICES"
#~ msgstr "MÍSTA A ZAŘÍZENÍ"
#~ msgid "Home"
#~ msgstr "Domovská složka"
#~ msgid "%1$s: %2$s"
#~ msgstr "%1$s: %2$s"
#~ msgid "disabled OpenSearch providers"
#~ msgstr "zakázaní poskytovatelé OpenSearch"
#~ msgid "Show time with seconds"
#~ msgstr "Zobrazovat čas včetně sekund"
#~ msgid "If true, display seconds in time."
#~ msgstr "Je-li zapnuto, zobrazovat čas včetně sekund."
#~ msgid "Show date in clock"
#~ msgstr "Zobrazovat v hodinách datum"
#~ msgid "If true, display date in the clock, in addition to time."
#~ msgstr "Je-li zapnuto, zobrazovat v hodinách kromě času i datum."
#~ msgid "Offline"
#~ msgstr "Odpojen"
#~ msgid "CONTACTS"
#~ msgstr "KONTAKTY"

194
po/de.po
View File

@ -19,9 +19,9 @@ 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: 2012-11-06 04:39+0000\n"
"PO-Revision-Date: 2012-11-06 20:04+0100\n"
"Last-Translator: Wolfgang Stoeggl <c72578@yahoo.de>\n"
"POT-Creation-Date: 2012-10-14 16:48+0000\n"
"PO-Revision-Date: 2012-10-10 23:10+0100\n"
"Last-Translator: Tobias Endrigkeit <tobiasendrigkeit@googlemail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
@ -148,68 +148,56 @@ msgstr ""
"Aufzählung entnommen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Den Menüeintrag »Abmelden« immer im Benutzermenü anzeigen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Dieser Schlüssel überschreibt das automatische Verbergen des Menüeintrags "
"»Abmelden« in Einzelbenutzer, Einzelsitzungssituationen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Wochentag im Kalender anzeigen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr ""
"Wenn dieser Wert gesetzt ist, wird der ISO-Wochentag im Kalender angezeigt."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Tastenkombination zum Öffnen des Anwendungsmenüs."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to toggle the visibility of the message tray"
msgstr ""
"Tastenkombination zum Umschalten der Sichtbarkeit des Benachrichtigungsfeldes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to toggle the visibility of the message tray."
msgstr ""
"Tastenkombination zum Umschalten der Sichtbarkeit des "
"Benachrichtigungsfeldes."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the screen recorder"
msgstr "Tastenkombination zum Umschalten des Bildschirmaufzeichners"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr ""
"Tastenkombination zum Starten/Entfernen des eingebauten "
"Bildschirmaufzeichners."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "Zu verwendende Tastatur"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "Der Typ der zu verwendenden Tastatur"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "Bildwiederholungsrate zur Aufnahme von Screencasts"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -218,11 +206,11 @@ msgstr ""
"der GNOME-Shell aufgezeichnet werden soll, in Einzelbildern pro Sekunde."
# hmm Enkodieren oder Kodieren?
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Die GStreamer-Weiterleitung zur Enkodierung des Screencasts"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -250,11 +238,11 @@ msgstr ""
"aufzeichnet. %T wird als Platzhalter für die vermutete optimale Thread-"
"Anzahl auf dem System verwendet."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "Die Dateiendung zum Speichern des Screencast"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 "
@ -315,8 +303,8 @@ msgstr "Anmeldefenster"
msgid "Power"
msgstr "Ausschalten"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Bereitschaft"
@ -324,8 +312,8 @@ msgstr "Bereitschaft"
msgid "Restart"
msgstr "Neu starten"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Ausschalten"
@ -710,35 +698,35 @@ msgstr "Stumm"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Gesendet am <b>%A</b> um <b>%X</b> "
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Gesendet am <b>%A</b>, <b>%d. %B</b> %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:992
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s heißt jetzt %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1092
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Einladung zum Betreten von %s"
@ -746,42 +734,42 @@ msgstr "Einladung zum Betreten von %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s lädt Sie ein, %s beizutreten"
#: ../js/ui/components/telepathyClient.js:1102
#: ../js/ui/components/telepathyClient.js:1181
#: ../js/ui/components/telepathyClient.js:1244
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Ablehnen"
#: ../js/ui/components/telepathyClient.js:1103
#: ../js/ui/components/telepathyClient.js:1182
#: ../js/ui/components/telepathyClient.js:1245
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Annehmen"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Video-Anruf von %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Anruf von %s"
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Abweisen"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1143
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Antworten"
@ -790,113 +778,113 @@ msgstr "Antworten"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s sendet Ihnen %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1210
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s bittet um das Recht, Ihre Online-Verfügbarkeit sehen zu dürfen"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Netzwerkfehler"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Legitimierung fehlgeschlagen"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Verschlüsselungsfehler"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Zertifikat wurde nicht bereitgestellt"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Zertifikat nicht vertrauenswürdig"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Zertifikat abgelaufen"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Zertifikat nicht aktiviert"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Rechnername des Zertifikats stimmt nicht überein"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Fingerabdruck des Zertifikats stimmt nicht überein"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Selbstsigniertes Zertifikat"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Der Status ist auf »Abgemeldet« gesetzt"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Verschlüsselung ist nicht verfügbar"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Zertifikat ist ungültig"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Verbindungsaufbau wurde verweigert"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Verbindung kann nicht hergestellt werden"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Verbindung wurde unterbrochen"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Dieses Konto ist bereits mit dem Server verbunden"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Die Verbindung wurde durch eine neue Verbindung mit der gleichen Ressource "
"ersetzt"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Dieses Konto ist bereits auf dem Server vorhanden"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Der Server ist derzeit überlastet und kann die Verbindung nicht annehmen"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Zertifikat wurde zurückgezogen"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Das Zertifikat verwendet einen unsicheren Chiffrier-Algorithmus oder ist "
"kryptografisch schwach"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -905,26 +893,26 @@ msgstr ""
"überschreiten die durch die kryptografische Bibliothek gegebenen "
"Beschränkungen"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Interner Fehler"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Verbindung zu %s ist fehlgeschlagen"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Erneut verbinden"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Konto bearbeiten"
#: ../js/ui/components/telepathyClient.js:1413
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Unbekannter Grund"
@ -1107,23 +1095,23 @@ msgstr "Quelle zeigen"
msgid "Web Page"
msgstr "Webseite"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Öffnen"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Entfernen"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Benachrichtigungsfeld"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Systeminformationen"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Unbekannt"
@ -1183,18 +1171,18 @@ msgstr "Bitte geben Sie einen Befehl ein:"
# %B - ausgeschriebener Name des Monats, abhängig von der gesetzten Umgebung
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d. %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d neue Nachricht"
msgstr[1] "%d neue Nachrichten"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1650,59 +1638,59 @@ msgstr "Mikrofon"
msgid "Log in as another user"
msgstr "Als anderer Benutzer anmelden"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Verfügbar"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Beschäftigt"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Unsichtbar"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Abwesend"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Untätig"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Nicht verfügbar"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Benachrichtigungen"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Systemeinstellungen"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Benutzer wechseln"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Abmelden"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Sperren"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Aktualisierungen installieren und neustarten"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Ihr Anwesenheitsstatus wird auf »Beschäftigt« gesetzt"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1789,7 +1777,7 @@ msgstr ""
msgid "List possible modes"
msgstr "Die möglichen Modi auflisten"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "»%s« konnte nicht gestartet werden"

257
po/es.po
View File

@ -10,15 +10,15 @@ 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: 2012-11-06 19:11+0000\n"
"PO-Revision-Date: 2012-11-08 12:31+0100\n"
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
"PO-Revision-Date: 2012-10-16 11:06+0200\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"Language-Team: Español <gnome-es-list@gnome.org>\n"
"Language: \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"
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Gtranslator 2.91.5\n"
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
@ -37,6 +37,16 @@ msgstr "Sistema"
msgid "Show the message tray"
msgstr "Mostrar la bandeja de mensajes"
#: ../data/50-gnome-shell-system.xml.in.h:3
#| msgid "Show Applications"
msgid "Show all applications"
msgstr "Mostrar todas las aplicaciones"
#: ../data/50-gnome-shell-system.xml.in.h:4
#| msgid "Keybinding to open the application menu"
msgid "Open the application menu"
msgstr "Abrir el menú de la aplicación"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME Shell"
@ -139,34 +149,34 @@ msgstr ""
"del usuario. El valor aquí es de la GsmPresenceStatus."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr ""
"Mostrar siempre el elemento de menú «Cerrar sesión» en el menú del usuario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Esta clave omite la ocultación automática del elemento de menú «Cerrar "
"sesión» en situación de un único usuario o una única sesión."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Mostrar la fecha de la semana en el calendario"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Si es cierta, muestra la fecha de semana ISO en el calendario."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Asociación de teclas para abrir el menú de la aplicación"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Asociación de teclas para abrir el menú de la aplicación."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Asociación de teclas para la vista «Mostrar aplicaciones»"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#| msgid "Keybinding to open the application menu."
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr ""
"Asociación de teclas para abrir la vista «Mostrar aplicaciones» de la vista "
"de actividades."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Asociación de teclas cambiar la visibilidad de la bandeja de mensajes"
@ -222,17 +232,16 @@ msgid ""
"used as a placeholder for a guess at the optimal thread count on the system."
msgstr ""
"Establece la tubería GStreamer usada para codificar grabaciones. Sigue la "
"sintaxis usada para gst-launch. La tubería debería tener un sumidero "
"(«sink») desconectado donde grabar el vídeo que se está grabando. "
"Generalmente tendrá un punto de origen desconectado; la salida de ese punto "
"se escribirá en el archivo de salida. Sin embargo, la tubería también puede "
"tomar parte en su propia salida; esto se puede usar para enviar la salida a "
"un servidor «icecast» a través de shout2send o similar. Cuando no está "
"establecido o lo está a un valor vacío, se usará la tubería predeterminada. "
"Actualmente es «'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 "
"deadline=1000000 threads=%T ! queue ! webmmux» y graba en WEBM usando el "
"códec VP8. Se usa %T como marcador de posición para el número de hilos "
"óptimos en el sistema."
"sintaxis usada para gst-launch. La tubería debería tener un sumidero («sink») "
"desconectado donde grabar el vídeo que se está grabando. Generalmente tendrá "
"un punto de origen desconectado; la salida de ese punto se escribirá en el "
"archivo de salida. Sin embargo, la tubería también puede tomar parte en su "
"propia salida; esto se puede usar para enviar la salida a un servidor "
"«icecast» a través de shout2send o similar. Cuando no está establecido o lo "
"está a un valor vacío, se usará la tubería predeterminada. Actualmente es "
"«'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 "
"threads=%T ! queue ! webmmux» y graba en WEBM usando el códec VP8. Se usa %T "
"como marcador de posición para el número de hilos óptimos en el sistema."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "File extension used for storing the screencast"
@ -299,8 +308,8 @@ msgstr "Ventana de inicio de sesión"
msgid "Power"
msgstr "Energía"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Suspender"
@ -308,8 +317,8 @@ msgstr "Suspender"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Apagar"
@ -590,8 +599,8 @@ msgstr "La red inalámbrica requiere autenticación"
#: ../js/ui/components/networkAgent.js:310
#, c-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"'%s'."
"Passwords or encryption keys are required to access the wireless network '%"
"s'."
msgstr ""
"Se necesitan contraseñas o claves de cifrado para acceder a la red "
"inalámbrica «%s»."
@ -690,35 +699,35 @@ msgstr "Silenciar"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Enviado el <b>%A</b> a las <b>%H:%M</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Enviado el <b>%A</b>, <b>%d de %B</b> de %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:992
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "Ahora %s se llama %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1092
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Invitación a %s"
@ -726,42 +735,42 @@ msgstr "Invitación a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s le está invitando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1102
#: ../js/ui/components/telepathyClient.js:1181
#: ../js/ui/components/telepathyClient.js:1244
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Rechazar"
#: ../js/ui/components/telepathyClient.js:1103
#: ../js/ui/components/telepathyClient.js:1182
#: ../js/ui/components/telepathyClient.js:1245
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videollamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Llamada de %s"
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Rechazar"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1143
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Responder"
@ -770,112 +779,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s le está enviando %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1210
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicita permiso para ver cuándo está en línea"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Error de la red"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Falló la autenticación"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Error de cifrado"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Certificado no proporcionado"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "No se confía en el certificado"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Certificado no activado"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "El nombre del servidor dle certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "La huella del certificado no coincide"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certificado autofirmado"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "El estado está establecido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "El cifrado no está disponible"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "El certificado no es válido"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Se ha rechazado la conexión"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "No se puede establecer la conexión"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Se ha perdido la conexión"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Esta cuenta ya está conectada al servidor"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Se ha sustituido la conexión por una nueva conexión usando el mismo recurso"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "La cuenta ya existe en el servidor"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Actualmente el servidor está muy ocupado intentando gestionar la conexión"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Se ha revocado el certificado"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"El certificado usa un algoritmo de cifrado inseguro o es criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -884,30 +893,30 @@ msgstr ""
"certificado del servidor exceden los límites impuestos por la biblioteca de "
"criptografía"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Error interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Falló la conexión a %s"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Reconectar"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Editar cuenta"
#: ../js/ui/components/telepathyClient.js:1413
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Razón desconocida"
#: ../js/ui/dash.js:254 ../js/ui/dash.js:292
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
msgid "Show Applications"
msgstr "Mostrar aplicaciones"
@ -1083,23 +1092,23 @@ msgstr "Ver fuente"
msgid "Web Page"
msgstr "Página web"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Abrir"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Quitar"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Bandeja de mensajes"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Información del sistema"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Desconocido"
@ -1155,18 +1164,18 @@ msgstr "Introduzca un comando:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaje nuevo"
msgstr[1] "%d mensajes nuevos"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1358,8 +1367,7 @@ msgstr "El dispositivo «%s» quiere emparejarse con este equipo"
#: ../js/ui/status/bluetooth.js:379
#, c-format
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgstr ""
"Confirme que el PIN mostrado en «%06d» coincide con el del dispositivo."
msgstr "Confirme que el PIN mostrado en «%06d» coincide con el del dispositivo."
#: ../js/ui/status/bluetooth.js:381
msgid "Matches"
@ -1621,59 +1629,59 @@ msgstr "Micrófono"
msgid "Log in as another user"
msgstr "Iniciar sesión como otro usuario"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Disponible"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Ocupado"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Invisible"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Ausente"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Inactivo"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "No disponible"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Notificaciones"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Configuración del sistema"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Cerrar la sesión"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Instalar actualizaciones y reiniciar"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Su estado del chat se establecerá a «ocupado»"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1682,15 +1690,15 @@ msgstr ""
"chat. Su estado en línea se ha ajustado para que otros sepan que puede no "
"leer sus mensajes."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Ventanas"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Aplicaciones"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Buscar"
@ -1761,7 +1769,7 @@ msgstr ""
msgid "List possible modes"
msgstr "Listar los modos posibles"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Falló al lanzar «%s»"
@ -2161,8 +2169,8 @@ msgstr "El usuario rechazó el diálogo de autenticación"
#~ "If true and format is either \"12-hour\" or \"24-hour\", display seconds "
#~ "in time."
#~ msgstr ""
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los "
#~ "segundos en la hora."
#~ "Si es cierta y el formato es «12-horas» o «24-horas», muestra los segundos "
#~ "en la hora."
#~ msgid ""
#~ "This key specifies the format used by the panel clock when the format key "
@ -2179,19 +2187,18 @@ msgstr "El usuario rechazó el diálogo de autenticación"
#~ msgid ""
#~ "This key specifies the hour format used by the panel clock. Possible "
#~ "values are \"12-hour\", \"24-hour\", \"unix\" and \"custom\". If set to "
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. "
#~ "1970-01-01. If set to \"custom\", the clock will display time according "
#~ "to the format specified in the custom_format key. Note that if set to "
#~ "either \"unix\" or \"custom\", the show_date and show_seconds keys are "
#~ "ignored."
#~ "\"unix\", the clock will display time in seconds since Epoch, i.e. 1970-"
#~ "01-01. If set to \"custom\", the clock will display time according to the "
#~ "format specified in the custom_format key. Note that if set to either "
#~ "\"unix\" or \"custom\", the show_date and show_seconds keys are ignored."
#~ msgstr ""
#~ "Esta clave especifica el formato de la hora especificado por el reloj del "
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 "
#~ "horas), «unix» y «custom» (personalizado).Si se establece a «unix» el "
#~ "reloj mostrará la hora en segundos desde la época (1 de enero de 1970). "
#~ "Si se establece a «custom» el reloj mostrará la hora según el formato "
#~ "especificado en la clave «custom_format». Note que si se establece a "
#~ "«unix» o «custom» se ignoran las claves «show_date» y «show_seconds»."
#~ "panel. Los valores posibles son «12-hour» (12 horas), «24-hour» (24 horas), "
#~ "«unix» y «custom» (personalizado).Si se establece a «unix» el reloj mostrará "
#~ "la hora en segundos desde la época (1 de enero de 1970). Si se establece "
#~ "a «custom» el reloj mostrará la hora según el formato especificado en la "
#~ "clave «custom_format». Note que si se establece a «unix» o «custom» se "
#~ "ignoran las claves «show_date» y «show_seconds»."
#~ msgid "Clock Format"
#~ msgstr "Formato del reloj"

View File

@ -13,8 +13,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: 2012-10-17 17:06+0000\n"
"PO-Revision-Date: 2012-10-18 00:49+0300\n"
"POT-Creation-Date: 2012-09-22 22:24+0000\n"
"PO-Revision-Date: 2012-09-23 08:48+0300\n"
"Last-Translator: Mattias Põldaru <mahfiaz@gmail.com>\n"
"Language-Team: Estonian <>\n"
"Language: et\n"
@ -223,15 +223,11 @@ msgstr "Katkesta"
msgctxt "button"
msgid "Sign In"
msgstr "Sisselogimine"
msgstr "Logi sisse"
msgid "Login Window"
msgstr "Sisselogimisaken"
#. Translators: accessible name of the power menu in the login screen
msgid "Power"
msgstr "Vool"
msgid "Suspend"
msgstr "Uinak"
@ -336,7 +332,7 @@ msgstr "K"
#. Translators: Calendar grid abbreviation for Thursday
msgctxt "grid thursday"
msgid "T"
msgstr "T"
msgstr "N"
#. Translators: Calendar grid abbreviation for Friday
msgctxt "grid friday"
@ -346,7 +342,7 @@ msgstr "R"
#. Translators: Calendar grid abbreviation for Saturday
msgctxt "grid saturday"
msgid "S"
msgstr "P"
msgstr "L"
#. Translators: Event list abbreviation for Sunday.
#. *
@ -386,7 +382,7 @@ msgstr "R"
#. Translators: Event list abbreviation for Saturday
msgctxt "list saturday"
msgid "S"
msgstr "P"
msgstr "L"
#. Translators: Text to show if there are no events
msgid "Nothing Scheduled"
@ -542,19 +538,19 @@ msgstr "Heli maha"
#. locale, without seconds.
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Saadeti: <b>%a</b>, <b>%X</b>"
msgstr "Saadetud: <b>%A</b>, <b>%X</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Saadeti: <b>%a</b>, <b>d. %B</b>"
msgstr "Saadeti <b>%A</b>, <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Saadeti: <b>%a</b>, <b>d. %B</b>, %Y"
msgstr "Saadeti <b>%A</b>, <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
@ -752,11 +748,11 @@ msgstr "Süsteemist väljalogimine"
msgctxt "button"
msgid "Log Out"
msgstr "Väljalogimine"
msgstr "Logi välja"
msgctxt "title"
msgid "Power Off"
msgstr "Lülita välja"
msgstr "Väljalülitamine"
msgid "Click Power Off to quit these applications and power off the system."
msgstr ""
@ -782,7 +778,7 @@ msgstr "Lülita välja"
msgctxt "title"
msgid "Restart"
msgstr "Taaskäivita"
msgstr "Taaskäivitamine"
msgid "Click Restart to quit these applications and restart the system."
msgstr ""
@ -1281,17 +1277,20 @@ msgstr "Jõude"
msgid "Unavailable"
msgstr "Pole saadaval"
msgid "Switch User"
msgstr "Vaheta kasutajat"
msgid "Switch Session"
msgstr "Vaheta seanssi"
msgid "Notifications"
msgstr "Märguanded"
msgid "System Settings"
msgstr "Süsteemi sätted"
msgid "Switch User"
msgstr "Vaheta kasutajat"
msgid "Log Out"
msgstr "Väljalogimine"
msgstr "Logi välja"
msgid "Lock"
msgstr "Lukusta"
@ -1390,27 +1389,6 @@ msgstr "Vaikimisi"
msgid "Authentication dialog was dismissed by the user"
msgstr "Kasutaja katkestas autentimisdialoogi"
#, fuzzy
#~ msgid "Show all applications"
#~ msgstr "Rakenduste kuvamine"
#, fuzzy
#~ msgid "Open the application menu"
#~ msgstr "Rakenduste menüü avamise kiirklahv"
#, fuzzy
#~ msgid "Keybinding to open the \"Show Applications\" view"
#~ msgstr "Rakenduste menüü avamise kiirklahv"
#, fuzzy
#~ msgid ""
#~ "Keybinding to open the \"Show Applications\" view of the Activities "
#~ "Overview."
#~ msgstr "Kiirklahv rakenduste menüü avamiseks."
#~ msgid "Switch Session"
#~ msgstr "Vaheta seanssi"
#~ msgid "disabled OpenSearch providers"
#~ msgstr "keelatud OpenSearch pakkujad"

193
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: 2012-11-01 11:16+0100\n"
"PO-Revision-Date: 2012-11-01 11:21+0200\n"
"POT-Creation-Date: 2012-10-16 13:35+0200\n"
"PO-Revision-Date: 2012-10-16 14:22+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
"Language-Team: gnome-l10n-gl@gnome.org\n"
"Language: gl\n"
@ -39,6 +39,14 @@ msgstr "Sistema"
msgid "Show the message tray"
msgstr "Mostrar a bandexa de mensaxes"
#: ../data/50-gnome-shell-system.xml.in.h:3
msgid "Show all applications"
msgstr "Mostrar todos os aplicativos"
#: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Open the application menu"
msgstr "Abrir o menú de aplicativo"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME Shell"
@ -140,33 +148,32 @@ msgstr ""
"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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Esta chave sobrescribe a ocultación automática do elemento de menú «Saír da "
"sesión» en situacións con un único usuario ou única sesión."
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
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:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
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:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
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:17
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:18
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:19
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Combinación de teclas para mostrar/ocultar a área de mensaxes"
@ -299,8 +306,8 @@ msgstr "Xanela de inicio de sesión"
msgid "Power"
msgstr "Apagar"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Suspender"
@ -308,8 +315,8 @@ msgstr "Suspender"
msgid "Restart"
msgstr "Reiniciar"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Apagar"
@ -690,35 +697,35 @@ msgstr "Silenciar"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Enviado ás <b>%X</b> o <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Enviado ás <b>%X</b> o <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "Agora %s chámase %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Convite a %s"
@ -726,42 +733,42 @@ msgstr "Convite a %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s estalle convidando a unirse a %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Rexeitar"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Aceptar"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videochamada de %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Chamada de %s"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Rexeitar"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Responder"
@ -770,112 +777,112 @@ msgstr "Responder"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s esta enviándolle %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s solicítalle permiso para ver cando está en liña"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Erro da rede"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Fallou a autenticación"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Erro de cifrado"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Certificado non fornecido"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Non se confía no certificado"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Certificado caducado"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Certificado non activado"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "O nome do servidor do certificado non coincide"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "A pegada do certificado non coincide"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Certificado autoasinado"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "O estado está definido a «desconectado»"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "O cifrado non está dispoñíbel"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "O certificado non é válido"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Rexeitouse a conexión"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Non é posíbel estabelecer a conexión"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Perdeuse a conexión"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Esta cuenta xa está conectada ao servidor"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Substituíuse a conexión por unha nova conexión empregando o mesmo recurso"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Esta conta xa existe no servidor"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Nestes intres o servidor está moi ocupado tentando xestionar a conexión"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Revogouse o certificado"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"O certificado usa un algoritmo de cifrado inseguro ou é criptográficamente "
"débil"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -884,26 +891,26 @@ msgstr ""
"certificado do servidor excede os límites impostos pola biblioteca de "
"criptografía."
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Erro interno"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Fallou a conexión a %s"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Reconectar"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Editar conta"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Razón descoñecida"
@ -1082,23 +1089,23 @@ msgstr "Ver fonte"
msgid "Web Page"
msgstr "Páxina web"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Abrir"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Retirar"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Bandexa de mensaxes"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Información do sistema"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Descoñecido"
@ -1154,18 +1161,18 @@ msgstr "Escriba unha orde:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d de %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d mensaxe nova"
msgstr[1] "%d mensaxes novas"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1619,59 +1626,59 @@ msgstr "Micrófono"
msgid "Log in as another user"
msgstr "Iniciar sesión como outro usuario"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Dispoñíbel"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Ocupado"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Invisíbel"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Ausente"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Inactivo"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Non dispoñíbel"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Notificacións"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Preferencias do sistema"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Cambiar de usuario"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Saír da sesión"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Bloquear"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Instalar actualizacións e reiniciar"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "O seu estado de conversa definirase como «ocupado»"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1680,15 +1687,15 @@ msgstr ""
"conversa. O seu estado de conexión axustouse para que outros saiban que non "
"quere ver as súas mensaxes."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Xanelas"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Aplicativos"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Buscar"
@ -1759,7 +1766,7 @@ msgstr ""
msgid "List possible modes"
msgstr "Listar os modos posíbeis"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Produciuse un erro ao iniciar «%s»"

383
po/gu.po
View File

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: gu\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug."
"cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-11-04 19:00+0000\n"
"PO-Revision-Date: 2012-11-05 12:23+0530\n"
"POT-Creation-Date: 2012-09-18 04:20+0000\n"
"PO-Revision-Date: 2012-09-18 16:59+0530\n"
"Last-Translator: \n"
"Language-Team: gu_IN <kde-i18n-doc@kde.org>\n"
"Language: \n"
@ -20,22 +20,6 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n!=1);\n"
"X-Generator: Lokalize 1.0\n"
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
msgid "Screenshots"
msgstr "સ્ક્રીનશોટ"
#: ../data/50-gnome-shell-screenshot.xml.in.h:2
msgid "Record a screencast"
msgstr "સ્ક્રીનકાસ્ટ રેકોર્ડ કરો"
#: ../data/50-gnome-shell-system.xml.in.h:1
msgid "System"
msgstr "સિસ્ટમ"
#: ../data/50-gnome-shell-system.xml.in.h:2
msgid "Show the message tray"
msgstr "સંદેશો ટ્રેને બતાવો"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME શેલ"
@ -61,7 +45,7 @@ msgstr "Alt-F2 માંથી ડેવલપર અને ટેસ્ટર
msgid ""
"Allows access to internal debugging and monitoring tools using the Alt-F2 "
"dialog."
msgstr "Alt-F2 સંવાદની મદદથી આંતરિક ડિબગીંગ અને મોનિટરીંગ સાધનોને વાપરવા પરવાનગી આપે છે."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
msgid "Uuids of extensions to enable"
@ -74,13 +58,10 @@ msgid ""
"list. You can also manipulate this list with the EnableExtension and "
"DisableExtension DBus methods on org.gnome.Shell."
msgstr ""
"GNOME Shell ઍક્સટેન્શન પાસે uuid ગુણધર્મ છે; આ કી ઍક્સટેન્શનની યાદી કરે છે કે જેને લાવેલ "
"હોવુ જોઇએ. કોઇપણ ઍક્સટેન્શન કે જેને આ યાદીમાં લાવવાની જરૂર છે. તમે પણ org.gnome.Shell પર "
"EnableExtension અને DisableExtension DBus પદ્દતિઓ સાથે આ યાદીને કુશળતાપૂર્વક વાપરી શકો છો."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Whether to collect stats about applications usage"
msgstr "શું કાર્યક્રમ વપરાશ વિશે આંકડા એકત્ર કરવા જોઇએ"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
msgid ""
@ -89,10 +70,6 @@ msgid ""
"want to disable this for privacy reasons. Please note that doing so won't "
"remove already saved data."
msgstr ""
"શેલ સામાન્ય રીતે મોટાભાગનાં એકને હાજર રાખવા માટે ક્રમમાં સક્રિય કાર્યક્રમોને મોનિટર કરવામાં "
"આવે છે (દા.ત. લૉન્ચર). જ્યારે આ માહિતીને ખાનગી રાખવામાં આવશે, તમે ખાનગી કારણો માટે આને "
"નિષ્ક્રિય કરવા માંગી શકો છો. મહેરબાની કરીને આવુ કરવાનું નોંધો તેથી પહેલેથી સંગ્રહેલ "
"માહિતીને દૂર કરાતુ નથી."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
msgid "List of desktop file IDs for favorite applications"
@ -102,7 +79,7 @@ msgstr "પસંદીદા કાર્યક્રમો માટે ડે
msgid ""
"The applications corresponding to these identifiers will be displayed in the "
"favorites area."
msgstr "કાર્યક્રમો આ ઓળખકર્તાઓ સાથે સંકળાયેલ છે તે પસંદીદા વિસ્તારમાં દેખાશે."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
msgid "History for command (Alt-F2) dialog"
@ -117,87 +94,75 @@ 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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"આ કી એકજ વપરાશકર્તામાં 'બહાર નીકળો' મેનુવસ્તુને આપમેળે છુપાવવા આ કીને ઓવરરાઇડ કરવામાં આવી "
"છે."
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "જો true હોય તો, કૅલેન્ડરમાં ISO અઠવાડિયાની તારીખને દર્શાવો."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#, fuzzy
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "સંદેશા ટ્રેની દૃશ્યતાને ટૉગલ કરવા માટે કબાઇન્ડીંગ"
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#, fuzzy
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#, fuzzy
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to toggle the screen recorder"
msgstr "કાર્યક્રમ મેનુને ખોલવા માટે કિબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "સંદેશા ટ્રેની દૃશ્યતાને ટૉગલ કરવા માટે કીબાઇન્ડીંગ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to toggle the screen recorder"
msgstr "સ્ક્રીન રેકોર્ડરને ટૉગલ કરવા માટે કીબાઇન્ડીંગ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#| msgid "Keybinding to open the application menu."
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "બિલ્ટઇન સ્ક્રીન રેકોર્ડરને શરૂ/બંધ કરવા માટે કfબાઇન્ડીંગ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "ક્યુ કિબોર્ડ વાપરવુ છે"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "વાપરવા માટે કિબોર્ડનો પ્રકાર."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "રેકોર્ડીંગ સ્ક્રીનકાસ્ટ માટે વાપરેલ ફ્રેમરેટ."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
msgstr ""
"પરિણામી સ્ક્રીનકાસ્ટની framerate એ દરેક સેકંડે ફ્રેમમાં GNOME Shell નાં સ્ક્રીનકાસ્ટ "
"રેકોર્ડર દ્દારા અહેવાલ થયેલ છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "સ્ક્રીનકાસ્ટને એનકોડ કરવા માટે વાપરેલ gstreamer પાઇપલાઇન"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -211,28 +176,17 @@ msgid ""
"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 ""
"રેકોર્ડીંગ ને એનકોડ કરવા માટે વાપરેલ GStreamer પાઇપલાઇનને સુયોજિત કરે છે. તે gst-launch "
"માટે વાપરેલ બંધારણને અનુસરે છે. પાઇપલાઇન પાસે બિનજોડાયેલ સીંક પેડ હોય છે જ્યાં રેકોર્ડ થયેલ "
"વિડિયો રેકોર્ડ થયેલ છે. સામાન્ય રીતે તેમની પાસે બિનજોડાયેલ સ્ત્રોત પેડ હશે; તે પેડમાંથી "
"આઉટપુટ એ આઉટપુટ ફાઇલમાં લખાયેલ હશે. છતાંપણ પાઇપલાઇન પણ તેનાં પોતાના આઉટપુટની સંભાળ લઇ શકે "
"છે - આ shout2send મારફતે અથવા તેનાં જેવા મારફતે icecast સર્વરમાં આઉટપુટને મોકલવા વાપરી "
"શકાય છે. જ્યારે ખાલી ફાઇલને સુયોજિત અથવા અસુયોજિત કરો, મૂળભૂત પાઇપલાઇન વાપરેલ હે. આ હાલમાં "
"'vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 "
"threads=%T ! queue ! webmmux' છે અને VP8 કોડેકની મદદતી WEBM માં રેકોર્ડ થાય છે. %T એ સિસ્ટમ "
"પર ઓપ્ટીમલ થ્રેડ ગણતરી પર ધારવા માટે પ્લેસહોલ્ડરને વાપરેલ છે."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "સ્ક્રીનકાસ્ટને સંગ્રહ કરવા માટે વાપરેલ ફાઇલ ઍક્સટેન્શન"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 ""
"રેકોર્ડ થયેલ સ્ક્રીનકાસ્ટ માટે ફાઇલનામ વર્તમાન તારીખ પર આધારિત અનન્ય ફાઇલનામ હશે, અને આ "
"ઍક્સટેન્શનને વાપરો. તેને બદલેલ હોવુ જોઇએ જ્યારે વિવિધ પાત્ર બંધારણમાં રેકોર્ડ કરી રહ્યા છે."
#: ../js/extensionPrefs/main.js:124
#, c-format
@ -247,11 +201,11 @@ msgstr "ઍક્સટેન્શન"
msgid "Select an extension to configure using the combobox above."
msgstr "ઉપર કોમ્બોબોક્સની મદદથી રૂપરેખાંકિત કરવા માટે ઍક્સટેન્શનને પસંદ કરો."
#: ../js/gdm/loginDialog.js:529
#: ../js/gdm/loginDialog.js:526
msgid "Session..."
msgstr "સત્ર..."
#: ../js/gdm/loginDialog.js:677
#: ../js/gdm/loginDialog.js:675
msgctxt "title"
msgid "Sign In"
msgstr "પ્રવેશો"
@ -259,56 +213,47 @@ 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:736
#: ../js/gdm/loginDialog.js:742
msgid "Not listed?"
msgstr "શું યાદી થયેલ નથી?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:137
msgid "Cancel"
msgstr "રદ કરો"
#: ../js/gdm/loginDialog.js:894
#: ../js/gdm/loginDialog.js:900
msgctxt "button"
msgid "Sign In"
msgstr "પ્રવેશો"
#: ../js/gdm/loginDialog.js:1215
#: ../js/gdm/loginDialog.js:1239
msgid "Login Window"
msgstr "પ્રવેશ વિન્ડો"
#. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:35
msgid "Power"
msgstr "પાવર"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:88 ../js/ui/userMenu.js:657 ../js/ui/userMenu.js:661
#: ../js/ui/userMenu.js:772
msgid "Suspend"
msgstr "અટકાવો"
#: ../js/gdm/powerMenu.js:94
#: ../js/gdm/powerMenu.js:93
msgid "Restart"
msgstr "પુન:શરૂ કરો"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:98 ../js/ui/userMenu.js:659 ../js/ui/userMenu.js:661
#: ../js/ui/userMenu.js:771
msgid "Power Off"
msgstr "પાવર બંધ"
#: ../js/gdm/util.js:148
msgid "Authentication error"
msgstr "સત્તાધિકરણ ભૂલ"
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:265
#: ../js/gdm/util.js:247
msgid "(or swipe finger)"
msgstr "(અથવા સ્વાઇપ આંગળી)"
#: ../js/gdm/util.js:290
#: ../js/gdm/util.js:272
#, c-format
msgid "(e.g., user or %s)"
msgstr "(દા.ત., વપરાશકર્તા અથવા %s)"
@ -345,7 +290,7 @@ msgstr "SETTINGS"
msgid "New Window"
msgstr "નવી વિન્ડો"
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
msgid "Remove from Favorites"
msgstr "પસંદીદાઓ માંથી દૂર કરો"
@ -509,16 +454,16 @@ msgstr "આ અઠવાડિયે"
msgid "Next week"
msgstr "આગળનું અઠવાડિયું"
#: ../js/ui/components/autorunManager.js:297
#: ../js/ui/components/autorunManager.js:278
msgid "Removable Devices"
msgstr "દૂર કરી શકાય તેવા ઉપકરણો"
#: ../js/ui/components/autorunManager.js:594
#: ../js/ui/components/autorunManager.js:575
#, c-format
msgid "Open with %s"
msgstr "%s સાથે ખોલો"
#: ../js/ui/components/autorunManager.js:620
#: ../js/ui/components/autorunManager.js:601
msgid "Eject"
msgstr "રદ કરો"
@ -673,35 +618,35 @@ msgstr "મૂંગુ"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "<b>%A</b> પર <b>%X</b> અહિંયા મોકલેલ છે"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "<b>%A</b> પર મોકલેલ છે, <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "<b>%A</b> પર મોકલેલ છે, <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:992
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s એ હવે %s તરીકે જાણીતુ છે"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1092
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "%s માં આમંત્રણ"
@ -709,42 +654,42 @@ msgstr "%s માં આમંત્રણ"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s એ તમને %s માં જોડાવા માટે આમંત્રણ આપી રહ્યા છે"
#: ../js/ui/components/telepathyClient.js:1102
#: ../js/ui/components/telepathyClient.js:1181
#: ../js/ui/components/telepathyClient.js:1244
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "ના પાડવી"
#: ../js/ui/components/telepathyClient.js:1103
#: ../js/ui/components/telepathyClient.js:1182
#: ../js/ui/components/telepathyClient.js:1245
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "સ્વીકારો"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "%s માંથી વિડીયો કોલ"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "%s માંથી કોલ"
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "રદ કરો"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1143
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "જવાબ"
@ -753,137 +698,136 @@ msgstr "જવાબ"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s એ %s માં મોકલી રહ્યા છે"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1210
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s ને જોવા માટે પરવાનગી આપવાનું ગમે થે જ્યારે તમે ઓનલાઇન હોય"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "નેટવર્ક ભૂલ"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "સત્તાધિકરણ નિષ્ક્રિય"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "એનક્રિપ્શન ભૂલ"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "પ્રમાણપત્ર પૂરુ પાડેલ નથી"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "પ્રમાણપત્ર વિશ્ર્વાસપાત્ર નથી"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "પ્રમાણપત્ર નિવૃત્ત થયેલ છે"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "પ્રમાણપત્ર સક્રિય થયેલ નથી"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "પ્રમાણપત્ર યજમાનનામ બંધબેસતુ નથી"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "પ્રમાણપજ્ઞ ફિંગરપ્રિન્ટ બંધબેસતુ નથી"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "જાતે હસ્તાક્ષર થયેલ પ્રમાણપત્ર"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "સ્થિતિ ઓફલાઇન તરીકે સુયોજિત છે"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "એનક્રિપ્શન ઉપલબ્ધ નથી"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "પ્રમાણપત્ર અમાન્ય છે"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "જોડાણને નામંજૂર કરી દેવામાં આવ્યુ છે"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "જોડાણ સ્થાપિત કરી શકાતુ નથી"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "જોડાણ ખોવાઈ ગયેલ છે"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "આ ખાતુ પહેલેથી જ સર્વર સાથે જોડાયેલ છે"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1332
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "સરખા સ્ત્રોતની મદદથી જોડાણને નવાં જોડાણ દ્દારા બદલી દેવામાં આવ્યુ છે"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "ખાતુ પહેલેથી સર્વર પર અસ્તિત્વ ધરાવે છે"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "સર્વર એ જોડાણને સંચાલિત કરવા માટે હાલમાં વ્યસ્ત છે"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "પ્રમાણપત્રને રદ કરી દેવામાં આવ્યુ છે"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1340
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "પ્રમાણપત્ર અસુરક્ષિત સાઇફર અલ્ગોરિધમને વાપરે છે અથવા ક્રિપ્ટોગ્રાફિકલી નબળુ છે"
msgstr ""
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
msgstr ""
"સર્વર પ્રમાણપત્રની લંબાઇ, સર્વર પ્રમાણપત્ર કતારની ઊંચાઇ, ક્રિપ્ટોગ્રાફી લાઇબ્રેરી દ્દારા "
"બનાવેલ મર્યાદાને વધારે છે"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "આંતરિક ભૂલ"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "%s માટે જોડાણ નિષ્ફળ"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "પુન:જોડાવો"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "ખાતામાં ફેરફાર કરો"
#: ../js/ui/components/telepathyClient.js:1413
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "અજ્ઞાત કારણ"
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
#| msgid "Applications"
msgid "Show Applications"
msgstr "કાર્યક્રમો બતાવો"
@ -891,14 +835,14 @@ msgstr "કાર્યક્રમો બતાવો"
msgid "Date and Time Settings"
msgstr "તારીખ અને સમય સુયોજનો"
#: ../js/ui/dateMenu.js:111
#: ../js/ui/dateMenu.js:109
msgid "Open Calendar"
msgstr "કૅલેન્ડરને ખોલો"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:175
msgid "%A %B %e, %Y"
msgstr "%A %B %e, %Y"
@ -915,7 +859,8 @@ msgstr "બહાર નીકળો"
#: ../js/ui/endSessionDialog.js:63
msgid "Click Log Out to quit these applications and log out of the system."
msgstr "આ કાર્યક્રમોને બહાર નીકળવા માટે બહાર નીકળો પર ક્લિક કરો અને સિસ્ટમમાંથી બહાર નીકળો."
msgstr ""
"આ કાર્યક્રમોને બહાર નીકળવા માટે બહાર નીકળો પર ક્લિક કરો અને સિસ્ટમમાંથી બહાર નીકળો."
#: ../js/ui/endSessionDialog.js:65
#, c-format
@ -947,7 +892,8 @@ msgstr "પાવર બંધ"
#: ../js/ui/endSessionDialog.js:82
msgid "Click Power Off to quit these applications and power off the system."
msgstr "આ કાર્યક્રમોને બહાર નીકાળવા માટે પાવર બંધ કરો પર ક્લિક કરો અને સિસ્ટમનો પાવર બંધ કરો"
msgstr ""
"આ કાર્યક્રમોને બહાર નીકાળવા માટે પાવર બંધ કરો પર ક્લિક કરો અને સિસ્ટમનો પાવર બંધ કરો"
#: ../js/ui/endSessionDialog.js:84
#, c-format
@ -977,7 +923,8 @@ msgstr "પુન:શરૂ કરો"
#: ../js/ui/endSessionDialog.js:99
msgid "Click Restart to quit these applications and restart the system."
msgstr "આ કાર્યક્રમોમાંથી બહાર નીકળવા માટે પુન:શરૂ કરો પર ક્લિક કરો અને સિસ્ટમને પુન:શરૂ કરો."
msgstr ""
"આ કાર્યક્રમોમાંથી બહાર નીકળવા માટે પુન:શરૂ કરો પર ક્લિક કરો અને સિસ્ટમને પુન:શરૂ કરો."
#: ../js/ui/endSessionDialog.js:101
#, c-format
@ -999,11 +946,11 @@ msgstr "સ્થાપિત કરો"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "extensions.gnome.org માંથી '%s' ને સ્થાપિત અને ડાઉનલોડ કરો?"
#: ../js/ui/keyboard.js:337
#: ../js/ui/keyboard.js:327
msgid "tray"
msgstr "ટ્રે"
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:146
#: ../js/ui/status/power.js:205
msgid "Keyboard"
msgstr "કિબોર્ડ"
@ -1056,23 +1003,23 @@ msgstr "સ્ત્રોત દર્શાવો"
msgid "Web Page"
msgstr "વેબ પાનું"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1080
msgid "Open"
msgstr "ખોલો"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1087
msgid "Remove"
msgstr "દૂર કરો"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:2041
msgid "Message Tray"
msgstr "સંદેશો ટ્રે"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2483
msgid "System Information"
msgstr "સિસ્ટમ જાણકારી"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "અજ્ઞાત"
@ -1128,19 +1075,22 @@ msgstr "મહેરબાની કરીને આદેશને દાખલ
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:78
#| msgctxt "calendar heading"
#| msgid "%A, %B %d"
msgid "%A, %B %d"
msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d નવો સંદેશો"
msgstr[1] "%d નવા સંદેશા"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
#| msgid "Notifications"
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d નવી સૂચના"
@ -1151,6 +1101,7 @@ msgid "Searching..."
msgstr "શોધી રહ્યા છે..."
#: ../js/ui/searchDisplay.js:323
#| msgid "No matching results."
msgid "No results."
msgstr "પરિણામો નથી."
@ -1171,14 +1122,16 @@ msgid "Hide Text"
msgstr "લખાણ છુપાડો"
#: ../js/ui/shellMountOperation.js:368
#| msgid "Password:"
msgid "Password"
msgstr "પાસવર્ડ"
#: ../js/ui/shellMountOperation.js:389
#| msgid "Remember Passphrase"
msgid "Remember Password"
msgstr "પાસવર્ડને યાદ રાખો"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:140
msgid "Unlock"
msgstr "તાળું ખોલો"
@ -1296,7 +1249,7 @@ msgstr "કીબોર્ડ સુયોજનો"
msgid "Mouse Settings"
msgstr "માઉસ સુયોજનો"
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
msgid "Sound Settings"
msgstr "સાઇન્ડ સુયોજનો"
@ -1329,9 +1282,10 @@ msgid "Device %s wants to pair with this computer"
msgstr "ઉપકરણ %s આ કમ્પ્યૂટર સાથે જોડી કરવા માંગે છે"
#: ../js/ui/status/bluetooth.js:379
#, c-format
#, fuzzy, c-format
#| msgid "Please confirm whether the PIN '%s' matches the one on the device."
msgid "Please confirm whether the PIN '%06d' matches the one on the device."
msgstr "મહેરબાની કરીને ખાતરી કરો કે શું PIN '%06d' એ ઉપકરણ પર એક સાથે બંધબેસે છે."
msgstr "મહેરબાની કરીને ખાતરી કરો કે શું PIN '%s' એ ઉપકરણ પર એક સાથે બંધબેસે છે."
#: ../js/ui/status/bluetooth.js:381
msgid "Matches"
@ -1354,11 +1308,11 @@ msgstr "મહેરબાની કરીને ઉપકરણ પર દર
msgid "OK"
msgstr "બરાબર"
#: ../js/ui/status/keyboard.js:228
#: ../js/ui/status/keyboard.js:170
msgid "Show Keyboard Layout"
msgstr "કીબોર્ડ લેઆઉટને બતાવો"
#: ../js/ui/status/keyboard.js:233
#: ../js/ui/status/keyboard.js:175
msgid "Region and Language Settings"
msgstr "વિસ્તાર અને ભાષા સુયોજનો"
@ -1581,7 +1535,7 @@ msgid "Unknown"
msgstr "અજ્ઞાત"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
msgid "Volume"
msgstr "વોલ્યુમ"
@ -1589,69 +1543,72 @@ msgstr "વોલ્યુમ"
msgid "Microphone"
msgstr "માઇક્રોફોન"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:147
#| msgid "Login as another user"
msgid "Log in as another user"
msgstr "બીજા વપરાશકર્તા તરીકે પ્રવેશો"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:174
msgid "Available"
msgstr "ઉપલબ્ધ"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:177
msgid "Busy"
msgstr "વ્યસ્ત"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:180
msgid "Invisible"
msgstr "અદૃશ્ય"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:183
msgid "Away"
msgstr "દૂર"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:186
msgid "Idle"
msgstr "નિષ્ક્રિય"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:189
msgid "Unavailable"
msgstr "બિનઉપલબ્ધ"
#: ../js/ui/userMenu.js:744
msgid "Notifications"
msgstr "સૂચનાઓ"
#: ../js/ui/userMenu.js:752
msgid "System Settings"
msgstr "સિસ્ટમ સુયોજનો"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:612 ../js/ui/userMenu.js:753
msgid "Switch User"
msgstr "વપરાશકર્તાને બદલો"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:613
msgid "Switch Session"
msgstr "સત્ર બદલો"
#: ../js/ui/userMenu.js:737
msgid "Notifications"
msgstr "સૂચનાઓ"
#: ../js/ui/userMenu.js:745
msgid "System Settings"
msgstr "સિસ્ટમ સુયોજનો"
#: ../js/ui/userMenu.js:758
msgid "Log Out"
msgstr "બહાર નીકળો"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:763
msgid "Lock"
msgstr "તાળુ"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:778
msgid "Install Updates & Restart"
msgstr "સુધારા સ્થાપિત કરો અને પુન:શરૂ કરો"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:796
msgid "Your chat status will be set to busy"
msgstr "તમારી વાર્તાલાપ પરિસ્થિતિ વ્યસ્ત તરીકે સુયોજિત હશે"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:797
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
msgstr ""
"સૂચનાઓ હવે નિષ્ક્રિય થયેલ છે, વાર્તાલાપ સંદેશાને સમાવી રહ્યા છે, બીજાને જણાવવા માટે તમારી "
"ઓનલાઇન સ્થિતિને ગોઠવી દેવામાં આવી છે કે જે તમે તેનાં સંદેશાને જોઇ શકશો નહિં."
#: ../js/ui/viewSelector.js:85
msgid "Windows"
@ -1665,7 +1622,7 @@ msgstr "કાર્યક્રમો"
msgid "Search"
msgstr "શોધો"
#: ../js/ui/wanda.js:117
#: ../js/ui/wanda.js:119
#, c-format
msgid ""
"Sorry, no wisdom for you today:\n"
@ -1674,12 +1631,12 @@ msgstr ""
"માફ કરો, આજે તમારા માટે શાણપણ નથી:\n"
"%s"
#: ../js/ui/wanda.js:121
#: ../js/ui/wanda.js:123
#, c-format
msgid "%s the Oracle says"
msgstr "%s એ એવી કિંમત છે જે Oracle કહે છે"
msgstr ""
#: ../js/ui/wanda.js:162
#: ../js/ui/wanda.js:164
msgid "Your favorite Easter Egg"
msgstr "તમારા મનગમતા ઇસ્ટર ઇંડા"
@ -1714,23 +1671,23 @@ msgstr[1] "%u ઇનપુટો"
msgid "System Sounds"
msgstr "સિસ્ટમ અવાજો"
#: ../src/main.c:332
#: ../src/main.c:330
msgid "Print version"
msgstr "ા"
#: ../src/main.c:338
#: ../src/main.c:336
msgid "Mode used by GDM for login screen"
msgstr "લૉગિન સ્ક્રીન માટે GDM દ્દારા વાપરેલ સ્થિતિ"
#: ../src/main.c:344
#: ../src/main.c:342
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "ખાસ સ્થિતિને વાપરો, દા.ત. પ્રવેશ સ્ક્રીન માટે \"gdm\""
#: ../src/main.c:350
#: ../src/main.c:348
msgid "List possible modes"
msgstr "શક્ય સ્થિતિઓની યાદી કરો"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "'%s' ને શરૂ કરવામાં નિષ્ફળતા"
@ -1753,10 +1710,7 @@ msgstr "મૂળભૂત"
#: ../src/shell-polkit-authentication-agent.c:343
msgid "Authentication dialog was dismissed by the user"
msgstr "સત્તાધિકરણ વપરાશકર્તા દ્દારા અસ્વીકાર થયેલ છે"
#~ msgid "Switch Session"
#~ msgstr "સત્ર બદલો"
msgstr ""
#~ msgid "disabled OpenSearch providers"
#~ msgstr "નિષ્ક્રિય થયેલ OpenSearch પ્રબંધક"
@ -1779,6 +1733,9 @@ msgstr "સત્તાધિકરણ વપરાશકર્તા દ્દ
#~ msgid "Home"
#~ msgstr "ઘર"
#~ msgid "File System"
#~ msgstr "ફાઇલ સિસ્ટમ"
#~ msgid "%1$s: %2$s"
#~ msgstr "%1$s: %2$s"

154
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: 2012-09-25 00:06+0000\n"
"PO-Revision-Date: 2012-09-25 09:53+0700\n"
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
"PO-Revision-Date: 2012-10-16 07:11+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <gnome@i15n.org>\n"
"Language: id\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Generator: Poedit 1.5.3\n"
"X-Generator: Poedit 1.5.4\n"
#: ../data/50-gnome-shell-screenshot.xml.in.h:1
msgid "Screenshots"
@ -38,6 +38,14 @@ msgstr "Sistem"
msgid "Show the message tray"
msgstr "Tampilkan baki pesan"
#: ../data/50-gnome-shell-system.xml.in.h:3
msgid "Show all applications"
msgstr "Tampilkan semua aplikasi"
#: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Open the application menu"
msgstr "Buka menu aplikasi"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "GNOME Shell"
@ -155,34 +163,45 @@ msgid "Keybinding to open the application menu."
msgstr "Kombinasi tombol untuk membuka menu aplikasi."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
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:18
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:19
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:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
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:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Keybinding to toggle the screen recorder"
msgstr "Kombinasi tombol untuk perekaman layar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Kombinasi tombol mulai/menghentikan perekam layar bawaan."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Which keyboard to use"
msgstr "Papan tik mana yang akan dipakai"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "The type of keyboard to use."
msgstr "Jenis papan tik yang akan dipakai."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Framerate used for recording screencasts."
msgstr "Laju gambar untuk menyimpan tangkapan layar."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -190,11 +209,11 @@ msgstr ""
"Laju frame dari hasil screencast yang direkam oleh perekam screencast GNOME "
"Shell dalam frame per detik."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Jalur pipa gstreamer yang dipakai untuk mengode screencast"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -220,11 +239,11 @@ msgstr ""
"dan merekam ke WEBM memakai kodek VP8. %T digunakan sebagai pewakil untuk "
"perkiraan jumlah thread optimal pada sistem."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
msgid "File extension used for storing the screencast"
msgstr "Ekstensi berkas untuk menyimpan tangkapan layar"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
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 "
@ -247,11 +266,11 @@ msgstr "Ekstensi"
msgid "Select an extension to configure using the combobox above."
msgstr "Pilih ekstensi yang ingin dikonfigurasi pada kotak di atas."
#: ../js/gdm/loginDialog.js:527
#: ../js/gdm/loginDialog.js:529
msgid "Session..."
msgstr "Sesi..."
#: ../js/gdm/loginDialog.js:675
#: ../js/gdm/loginDialog.js:677
msgctxt "title"
msgid "Sign In"
msgstr "Masuk"
@ -259,34 +278,33 @@ msgstr "Masuk"
#. 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:742
#: ../js/gdm/loginDialog.js:736
msgid "Not listed?"
msgstr "Tak masuk daftar?"
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
msgid "Cancel"
msgstr "Batal"
#: ../js/gdm/loginDialog.js:900
#: ../js/gdm/loginDialog.js:894
msgctxt "button"
msgid "Sign In"
msgstr "Masuk"
#: ../js/gdm/loginDialog.js:1239
#: ../js/gdm/loginDialog.js:1215
msgid "Login Window"
msgstr "Jendela Log Masuk"
#. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:35
#| msgid "Power Off"
msgid "Power"
msgstr "Daya"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Suspensi"
@ -294,8 +312,8 @@ msgstr "Suspensi"
msgid "Restart"
msgstr "Nyalakan Ulang"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:777
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Matikan"
@ -346,7 +364,7 @@ msgstr "PENGATURAN"
msgid "New Window"
msgstr "Jendela Baru"
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
msgid "Remove from Favorites"
msgstr "Hapus dari Favorit"
@ -510,16 +528,16 @@ msgstr "Minggu ini"
msgid "Next week"
msgstr "Minggu depan"
#: ../js/ui/components/autorunManager.js:278
#: ../js/ui/components/autorunManager.js:297
msgid "Removable Devices"
msgstr "Perangkat Yang Dapat Dicabut"
#: ../js/ui/components/autorunManager.js:575
#: ../js/ui/components/autorunManager.js:594
#, c-format
msgid "Open with %s"
msgstr "Buka dengan %s"
#: ../js/ui/components/autorunManager.js:601
#: ../js/ui/components/autorunManager.js:620
msgid "Eject"
msgstr "Keluarkan"
@ -891,7 +909,7 @@ msgstr "Sunting Akun"
msgid "Unknown reason"
msgstr "Alasan yang tidak diketahui"
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
msgid "Show Applications"
msgstr "Tampilkan Aplikasi"
@ -899,14 +917,14 @@ msgstr "Tampilkan Aplikasi"
msgid "Date and Time Settings"
msgstr "Pengaturan Waktu dan Tanggal"
#: ../js/ui/dateMenu.js:109
#: ../js/ui/dateMenu.js:111
msgid "Open Calendar"
msgstr "Buka Kalender"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:175
#: ../js/ui/dateMenu.js:201
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
@ -1005,11 +1023,11 @@ msgstr "Pasang"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Unduh dan pasang '%s' dari extensions.gnome.org?"
#: ../js/ui/keyboard.js:327
#: ../js/ui/keyboard.js:337
msgid "tray"
msgstr "baki"
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
#: ../js/ui/status/power.js:205
msgid "Keyboard"
msgstr "Papan Ketik"
@ -1062,19 +1080,19 @@ msgstr "Tilik Sumber"
msgid "Web Page"
msgstr "Halaman Web"
#: ../js/ui/messageTray.js:1080
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Buka"
#: ../js/ui/messageTray.js:1087
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Hapus"
#: ../js/ui/messageTray.js:2055
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Baki Pesan"
#: ../js/ui/messageTray.js:2511
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Informasi Sistem"
@ -1139,13 +1157,13 @@ msgstr "Ketikkan perintah:"
msgid "%A, %B %d"
msgstr "%A, %d %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d pesan baru"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1183,7 +1201,7 @@ msgstr "Sandi"
msgid "Remember Password"
msgstr "Ingat Sandi"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
msgid "Unlock"
msgstr "Buka Kunci"
@ -1301,7 +1319,7 @@ msgstr "Pengaturan Papan Ketik"
msgid "Mouse Settings"
msgstr "Pengaturan Tetikus"
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
msgid "Sound Settings"
msgstr "Pengaturan Suara"
@ -1582,7 +1600,7 @@ msgid "Unknown"
msgstr "Tak Dikenal"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
msgid "Volume"
msgstr "Volume"
@ -1590,7 +1608,7 @@ msgstr "Volume"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:176
#: ../js/ui/unlockDialog.js:177
msgid "Log in as another user"
msgstr "Masuk sebagai pengguna lain"
@ -1618,39 +1636,35 @@ msgstr "Menganggur"
msgid "Unavailable"
msgstr "Tak tersedia"
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
msgid "Switch User"
msgstr "Ganti Pengguna"
#: ../js/ui/userMenu.js:619
msgid "Switch Session"
msgstr "Pindah Sesi"
#: ../js/ui/userMenu.js:743
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Pemberitahuan"
#: ../js/ui/userMenu.js:751
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Pengaturan Sistem"
#: ../js/ui/userMenu.js:764
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Ganti Pengguna"
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Keluar"
#: ../js/ui/userMenu.js:769
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Kunci"
#: ../js/ui/userMenu.js:784
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Pasang Pemutakhiran & Jalankan Ulang"
#: ../js/ui/userMenu.js:802
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Status obrolan Anda akan ditata ke sibuk"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1659,19 +1673,19 @@ msgstr ""
"telah disesuaikan untuk memberitahu pihak lain bahwa Anda mungkin tak "
"melihat pesan mereka."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Jendela"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Aplikasi"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Cari"
#: ../js/ui/wanda.js:119
#: ../js/ui/wanda.js:117
#, c-format
msgid ""
"Sorry, no wisdom for you today:\n"
@ -1680,12 +1694,12 @@ msgstr ""
"Maaf, tidak ada kata-kata bijak bagi Anda hari ini:\n"
"%s"
#: ../js/ui/wanda.js:123
#: ../js/ui/wanda.js:121
#, c-format
msgid "%s the Oracle says"
msgstr "%s sang Peramal berkata"
#: ../js/ui/wanda.js:164
#: ../js/ui/wanda.js:162
msgid "Your favorite Easter Egg"
msgstr "Easter Egg kesukaan Anda"
@ -1718,19 +1732,19 @@ msgstr[0] "%u Masukan"
msgid "System Sounds"
msgstr "Suara Sistem"
#: ../src/main.c:330
#: ../src/main.c:332
msgid "Print version"
msgstr "Versi Cetak"
#: ../src/main.c:336
#: ../src/main.c:338
msgid "Mode used by GDM for login screen"
msgstr "Mode yang dipakai oleh layar log masuk GDM"
#: ../src/main.c:342
#: ../src/main.c:344
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "Menggunakan mode tertentu, mis. \"gdm\" untuk layar masuk"
#: ../src/main.c:348
#: ../src/main.c:350
msgid "List possible modes"
msgstr "Menampilkan mode yang mungkin"

488
po/lt.po

File diff suppressed because it is too large Load Diff

200
po/nb.po
View File

@ -6,10 +6,10 @@
# Torstein Adolf Winterseth <kvikende@fsfe.org>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell 3.6.x\n"
"Project-Id-Version: gnome-shell 3.5.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-11-02 08:10+0100\n"
"PO-Revision-Date: 2012-11-02 08:10+0100\n"
"POT-Creation-Date: 2012-10-11 20:24+0200\n"
"PO-Revision-Date: 2012-10-11 20:25+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: \n"
@ -128,60 +128,50 @@ msgid ""
msgstr ""
#: ../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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Vis dato for uken i kalender"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Viser ISO-ukedato i kalenderen hvis «true»."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Tastaturbinding som åpner programmenyen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Tastaturbinding som åpner programmenyen."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrau"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Tastaturbinding som slår av/på synlighet for meldingstrauet."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the screen recorder"
msgstr "Tastaturbinding som slår av/på skjermopptak"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "Tastaturbinding som starter/stopper innebygget opptak av skjerm."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "Tastatur som skal brukes"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "Type tastatur som skal brukes."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "Bildefrekvens i bruk ved lagring av skjermvideoer."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -189,11 +179,11 @@ msgstr ""
"Bildefrekvensen i den ferdige skjermvideoen tatt opp med GNOME Shells "
"skjermvideoopptaker i bilder per sekund."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Gstreamer-kommandokø brukt til å kode skjermvideoen"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, fuzzy, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -210,11 +200,11 @@ msgstr ""
"Setter GStreamer-rør som brukes til å kode opptak. Den følger syntaksen som "
"brukes for gst-launch. Røret må ha en..."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "Filendelse i bruk ved lagring av skjermvideo"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 "
@ -256,7 +246,7 @@ msgstr "Ikke listet?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
msgid "Cancel"
msgstr "Avbryt"
@ -274,8 +264,8 @@ msgstr "Innloggingsvindu"
msgid "Power"
msgstr "Strøm"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Hvilemodus"
@ -283,8 +273,8 @@ msgstr "Hvilemodus"
msgid "Restart"
msgstr "Start på nytt"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Slå av"
@ -665,35 +655,35 @@ msgstr "Demp"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Sendt <b>%X</b> på <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Sendt <b>%A</b>, <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Sendt <b>%A</b>, <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s er nå kjent som %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Invitasjon til %s"
@ -701,42 +691,42 @@ msgstr "Invitasjon til %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s inviterer deg til å bli med i %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Avslå"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Godta"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Videosamtale fra %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Samtale fra %s"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Avvis"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Svar"
@ -745,110 +735,110 @@ msgstr "Svar"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s sender deg %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s vil ha rettigheter til å se når du er tilkoblet"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Nettverksfeil"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Autentisering feilet"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Feil ved kryptering"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Sertifikat ikke oppgitt"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Stoler ikke på sertifikatet"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Sertifikatet er utløpt"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Sertifikatet er ikke aktivert"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Feil vertsnavn for sertifikat"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Feil fingeravtrykk for sertifikat"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Sertifikatet er selvsignert"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Status er satt til frakoblet"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Kryptering er ikke tilgjengelig"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Sertifikatet er ugyldig"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Tilkobling ble nektet"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Tilkobling kan ikke etableres"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Tilkobling tapt"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Denne kontoen er allerede koblet til tjeneren"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr ""
"Tilkoblingen har blitt erstattet av en ny tilkobling som bruker samme ressurs"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Kontoen eksisterer allerede på tjeneren"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Tjener er for opptatt til å håndtere tilkoblingen"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Sertifikatet er tilbaketrukket"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Sertifikatet bruker en usikker sifferalgoritme eller er krytografisk svakt"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -856,26 +846,26 @@ msgstr ""
"Lengden eller dybden på tjenersertifikatet oversteg grensen som er satt i "
"kryptografibiblioteket"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Intern feil"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Tilkobling til %s feilet"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Koble til på nytt"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Rediger konto"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Ukjent årsak"
@ -894,7 +884,7 @@ msgstr "Åpne kalender"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:190
msgid "%A %B %e, %Y"
msgstr "%a %e %B, %Y"
@ -1056,23 +1046,23 @@ msgstr "Vis kildekode"
msgid "Web Page"
msgstr "Nettside"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Åpne"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Fjern"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Meldingstrau"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Systeminformasjon"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Ukjent"
@ -1128,18 +1118,18 @@ msgstr "Oppgi en kommando:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %B %d"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
msgstr[0] "%d ny melding"
msgstr[1] "%d nye meldinger"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1178,7 +1168,7 @@ msgstr "Passord"
msgid "Remember Password"
msgstr "Husk passord"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
msgid "Unlock"
msgstr "Lås opp"
@ -1589,63 +1579,63 @@ msgstr "Volum"
msgid "Microphone"
msgstr "Mikrofon"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:176
msgid "Log in as another user"
msgstr "Logg inn som en annen bruker"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Tilgjengelig"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Opptatt"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Usynlig"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Borte"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Ledig"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Ikke tilgjengelig"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Varslinger"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Systeminnstillinger"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Bytt bruker"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Logg ut"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Lås"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Installer oppdateringer og start på nytt"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Din pratestatus vil bli satt til opptatt"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1731,7 +1721,7 @@ msgstr "Bruk spesifikt modus, f.eks «gdm» for innloggingsskjerm"
msgid "List possible modes"
msgstr "Vis mulige modi"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Klarte ikke å starte «%s»"

263
po/pa.po
View File

@ -7,8 +7,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: 2012-10-31 16:48+0000\n"
"PO-Revision-Date: 2012-11-04 09:23+0530\n"
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
"PO-Revision-Date: 2012-09-25 06:45+0530\n"
"Last-Translator: A S Alam <aalam@users.sf.net>\n"
"Language-Team: Punjabi/Panjabi <punjabi-users@lists.sf.net>\n"
"Language: pa\n"
@ -137,63 +137,50 @@ 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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"ਇਹ ਕੁੰਜੀ ਇੱਕਲੇ-ਯੂਜ਼ਰ, ਇੱਕਲੇ-ਸ਼ੈਸ਼ਨ ਹਾਲਤਾਂ ਵਿੱਚ 'ਲਾਗਆਉਟ' ਆਈਟਮ ਨੂੰ ਆਪਣੇ-ਆਪ ਓਹਲੇ "
"ਰੱਖਣ ਨੂੰ "
"ਅਣਡਿੱਠਾ ਕਰਦੀ ਹੈ।"
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਕੈਲੰਡਰ ਵਿੱਚ ISO ਹਫਤਾ ਮਿਤੀ ਵੇਖਾਈ ਜਾਵੇਗੀ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਮੇਨੂ ਖੋਲ੍ਹਣ ਲਈ ਕੀਬਾਈਡਿੰਗ ਹੈ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਮੇਨੂ ਖੋਲ੍ਹਣ ਲਈ ਕੀਬਾਈਡਿੰਗ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "ਸੁਨੇਹਾ ਟਰੇ ਦੀ ਦਿੱਖਣ ਨੂੰ ਬਦਲਣ ਲਈ ਕੀਬਾਈਡਿੰਗ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "ਸੁਨੇਹਾ ਟਰੇ ਦੀ ਦਿੱਖਣ ਨੂੰ ਬਦਲਣ ਲਈ ਕੀਬਾਈਡਿੰਗ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the screen recorder"
msgstr "ਸਕਰੀਨ ਰਿਕਾਡਰ ਨੂੰ ਬਦਲਣ ਲਈ ਕੀਬਾਈਡਿੰਗ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr "ਬਿਲਟ-ਇਨ ਸਕਰੀਨ ਰਿਕਾਰਡ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ/ਰੋਕਣ ਲਈ ਕੀਬਾਈਡਿੰਗ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "ਕਿਹੜਾ ਕੀਬੋਰਡ ਵਰਤਣਾ ਹੈ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "ਵਰਤਣ ਲਈ ਕੀਬੋਰਡ ਦੀ ਕਿਸਮ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "ਸਕਰੀਨਕਾਸਟ ਰਿਕਾਰਡ ਕਰਨ ਲਈ ਫਰੇਮਰੇਟ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -202,11 +189,11 @@ msgstr ""
"ਫਰੇਮ ਪ੍ਰਤੀ "
"ਸਕਿੰਟ 'ਚ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "ਸਕਰੀਨਕਾਸਟ ਇੰਕੋਡ ਕਰਨ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਜੀਸਟਰੀਮਰ ਪਾਇਪਲਾਇਨ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -239,11 +226,11 @@ msgstr ""
"ਲਗਾਉਣ ਲਈ "
"ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "ਸਕਰੀਨਕਾਸਟ ਸੰਭਾਲਣ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਫਾਇਲ ਇਕਟੈਨਸ਼ਨ"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 "
@ -268,11 +255,11 @@ msgstr "ਇਕਸਟੈਸ਼ਨ"
msgid "Select an extension to configure using the combobox above."
msgstr "ਉੱਤੇ ਦਿੱਤੇ ਕੰਬੋਬਾਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਕਸਟੈਸ਼ਨ ਦੀ ਸੰਰਚਨਾ ਕਰਨ ਲਈ ਚੋਣ ਕਰੋ।"
#: ../js/gdm/loginDialog.js:529
#: ../js/gdm/loginDialog.js:527
msgid "Session..."
msgstr "ਸ਼ੈਸ਼ਨ..."
#: ../js/gdm/loginDialog.js:677
#: ../js/gdm/loginDialog.js:675
msgctxt "title"
msgid "Sign In"
msgstr "ਸਾਇਨ ਇਨ"
@ -280,33 +267,34 @@ 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:736
#: ../js/gdm/loginDialog.js:742
msgid "Not listed?"
msgstr "ਲਿਸਟ ਵਿੱਚ ਨਹੀਂ ਹੈ?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
msgid "Cancel"
msgstr "ਰੱਦ ਕਰੋ"
#: ../js/gdm/loginDialog.js:894
#: ../js/gdm/loginDialog.js:900
msgctxt "button"
msgid "Sign In"
msgstr "ਸਾਇਨ ਇਨ"
#: ../js/gdm/loginDialog.js:1215
#: ../js/gdm/loginDialog.js:1239
msgid "Login Window"
msgstr "ਲਾਗਇਨ ਵਿੰਡੋ"
#. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:35
#| msgid "Power Off"
msgid "Power"
msgstr "ਪਾਵਰ"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:778
msgid "Suspend"
msgstr "ਸਸਪੈਂਡ"
@ -314,8 +302,8 @@ msgstr "ਸਸਪੈਂਡ"
msgid "Restart"
msgstr "ਮੁੜ-ਚਾਲੂ ਕਰੋ"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:777
msgid "Power Off"
msgstr "ਬੰਦ ਕਰੋ"
@ -366,7 +354,7 @@ msgstr "ਸੈਟਿੰਗ"
msgid "New Window"
msgstr "ਨਵੀਂ ਵਿੰਡੋ"
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
msgid "Remove from Favorites"
msgstr "ਪਸੰਦ ਵਿੱਚੋਂ ਹਟਾਓ"
@ -530,16 +518,16 @@ msgstr "ਇਹ ਹਫ਼ਤਾ"
msgid "Next week"
msgstr "ਹਫ਼ਤਾ ਅੱਗੇ"
#: ../js/ui/components/autorunManager.js:297
#: ../js/ui/components/autorunManager.js:278
msgid "Removable Devices"
msgstr "ਹਟਾਉਣਯੋਗ ਜੰਤਰ"
#: ../js/ui/components/autorunManager.js:594
#: ../js/ui/components/autorunManager.js:575
#, c-format
msgid "Open with %s"
msgstr "%s ਨਾਲ ਖੋਲ੍ਹੋ"
#: ../js/ui/components/autorunManager.js:620
#: ../js/ui/components/autorunManager.js:601
msgid "Eject"
msgstr "ਬਾਹਰ ਕੱਢੋ"
@ -694,35 +682,35 @@ msgstr "ਚੁੱਪ"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "<b>%2$A</b> ਨੂੰ <b>%1$X</b> ਵਜੇ ਭੇਜਿਆ"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr " <b>%A</b> ਨੂੰ <b>%B %d</b> ਵਜੇ ਭੇਜਿਆ"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "<b>%A</b> <b>%B %d</b>, %Y ਨੂੰ ਭੇਜਿਆ"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s ਨੂੰ ਹੁਣ %s ਵਜੋਂ ਜਾਣਿਆ ਜਾਵੇਗਾ"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "%s ਲਈ ਸੱਦਾ"
@ -730,42 +718,42 @@ msgstr "%s ਲਈ ਸੱਦਾ"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s ਤੁਹਾਨੂੰ %s ਜੁਆਇੰਨ ਕਰਨ ਲਈ ਸੱਦ ਰਿਹਾ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "ਇਨਕਾਰ"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "ਮਨਜ਼ੂਰ"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "%s ਵਲੋਂ ਵਿਡੀਓ ਕਾਲ"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "%s ਵਲੋਂ ਕਾਲ"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "ਨਾ-ਮਨਜ਼ੂਰ"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "ਜਵਾਬ ਦਿਓ"
@ -774,110 +762,110 @@ msgstr "ਜਵਾਬ ਦਿਓ"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s ਤੁਹਾਨੂੰ %s ਭੇਜ ਰਿਹਾ/ਰਹੀ ਹੈ"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr ""
"%s ਤੁਹਾਨੂੰ ਵੇਖਣ ਦਾ ਅਧਿਕਾਰ ਚਾਹੁੰਦਾ/ਚਾਹੁੰਦੀ ਹੈ, ਜਦੋਂ ਵੀ ਤੁਸੀਂ ਆਨਲਾਈਨ ਹੋਵੋ"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "ਨੈੱਟਵਰਕ ਗਲਤੀ"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "ਪਰਮਾਣਕਿਤਾ ਫੇਲ੍ਹ ਹੋਈ"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "ਇੰਕ੍ਰਿਪਸ਼ਨ ਗਲਤੀ"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "ਸਰਟੀਫਿਕੇਟ ਨਹੀਂ ਦਿੱਤਾ"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "ਸਰਟੀਫਿਕੇਟ ਬੇਭਰੋਸੇਯੋਗ"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "ਸਰਟੀਫਿਕੇਟ ਦੀ ਮਿਆਦ ਪੁੱਗੀ"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "ਸਰਟੀਫਿਕੇਟ ਸਰਗਰਮ ਨਹੀਂ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "ਸਰਟੀਫਿਕੇਟ ਹੋਸਟ-ਨਾਂ ਨਹੀਂ ਮਿਲਦਾ"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "ਸਰਟੀਫਿਕੇਟ ਫਿੰਗਰ-ਪਰਿੰਟ ਮਿਲਦਾ ਨਹੀਂ"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "ਸਰਟੀਫਿਕੇਟ ਖੁਦ-ਦਸਤਖਤੀ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "ਹਾਲਤ ਆਫਲਾਈਨ ਸੈੱਟ ਕੀਤੀ ਗਈ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "ਇੰਕ੍ਰਿਪਸ਼ਨ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "ਸਰਟੀਫਿਕੇਟ ਗਲਤ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "ਕੁਨੈਕਸ਼ਨ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ ਗਿਆ"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "ਕੁਨੈਕਸ਼ਨ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "ਕੁਨੈਕਸ਼ਨ ਖਤਮ ਹੋ ਗਿਆ"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "ਇਹ ਅਕਾਊਂਟ ਪਹਿਲਾਂ ਹੀ ਸਰਵਰ ਨਾਲ ਕੁਨੈਕਟ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "ਉਸੇ ਸਰੋਤ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੁਨੈਕਸ਼ਨ ਨੂੰ ਨਵੇਂ ਕੁਨੈਕਸ਼ਨ ਨਾਲ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "ਅਕਾਊਂਟ ਸਰਵਰ ਉੱਤੇ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "ਸਰਵਰ ਇਸ ਵੇਲੇ ਐਨਾ ਰੁੱਝਿਆ ਹੋਇਆ ਹੈ ਕਿ ਕੁਨੈਕਸ਼ਨ ਸੰਭਾਲ ਨਹੀਂ ਸਕਦਾ"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "ਸਰਟੀਫਿਕੇਟ ਮਨਸੂਖ ਕੀਤਾ ਜਾ ਚੁੱਕਾ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"ਸਰਟੀਫਿਕੇਟ ਅਸੁਰੱਖਿਅਤ ਸੀਫ਼ਰ ਐਲਗੋਰਿਥਮ ਵਰਤਦਾ ਹੈ ਜਾਂ ਕਮਜ਼ੋਰ ਕ੍ਰਿਪਟੋਗਰਾਫਿਕਲ ਵਰਤਦਾ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -886,30 +874,30 @@ msgstr ""
"ਲਾਇਬਰੇਰੀ ਵਲੋਂ ਰੱਖੀ "
"ਗਈ ਲਿਮਟ ਤੋਂ ਵੱਧ ਗਈ ਹੈ।"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "ਅੰਦਰੂਨੀ ਗਲਤੀ"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "%s ਲਈ ਕੁਨੈਕਸ਼ਨ ਫੇਲ੍ਹ ਹੈ"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "ਮੁੜ-ਕੁਨੈਕਟ ਕਰੋ"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "ਅਕਾਊਂਟ ਸੋਧ"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "ਅਣਜਾਣ ਕਾਰਨ"
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
msgid "Show Applications"
msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵੇਖੋ"
@ -917,14 +905,14 @@ msgstr "ਐਪਲੀਕੇਸ਼ਨ ਵੇਖੋ"
msgid "Date and Time Settings"
msgstr "ਮਿਤੀ ਤੇ ਸਮਾਂ ਸੈਟਿੰਗ"
#: ../js/ui/dateMenu.js:111
#: ../js/ui/dateMenu.js:109
msgid "Open Calendar"
msgstr "ਕੈਲੰਡਰ ਖੋਲ੍ਹੋ"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:175
msgid "%A %B %e, %Y"
msgstr "%A, %e %B %Y"
@ -1027,11 +1015,11 @@ msgstr "ਇੰਸਟਾਲ ਕਰੋ"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "ਕੀ extensions.gnome.org ਤੋਂ '%s' ਡਾਊਨਲੋਡ ਅਤੇ ਇੰਸਟਾਲ ਕਰਨੀ ਹੈ?"
#: ../js/ui/keyboard.js:337
#: ../js/ui/keyboard.js:327
msgid "tray"
msgstr "ਟਰੇ"
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
#: ../js/ui/status/power.js:205
msgid "Keyboard"
msgstr "ਕੀਬੋਰਡ"
@ -1084,23 +1072,23 @@ msgstr "ਸਰੋਤ ਵੇਖੋ"
msgid "Web Page"
msgstr "ਵੈੱਬ ਪੇਜ਼"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1080
msgid "Open"
msgstr "ਖੋਲ੍ਹੋ"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1087
msgid "Remove"
msgstr "ਹਟਾਓ"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:2055
msgid "Message Tray"
msgstr "ਸੁਨੇਹਾ ਟਰੇ"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2511
msgid "System Information"
msgstr "ਸਿਸਟਮ ਜਾਣਕਾਰੀ"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "ਅਣਜਾਣ"
@ -1156,7 +1144,7 @@ msgstr "ਕਮਾਂਡ ਦਿਓ ਜੀ:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d %B"
@ -1206,7 +1194,7 @@ msgstr "ਪਾਸਵਰਡ"
msgid "Remember Password"
msgstr "ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
msgid "Unlock"
msgstr "ਅਣ-ਲਾਕ"
@ -1324,7 +1312,7 @@ msgstr "ਕੀਬੋਰਡ ਸੈਟਿੰਗ"
msgid "Mouse Settings"
msgstr "ਮਾਊਸ ਸੈਟਿੰਗ"
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
msgid "Sound Settings"
msgstr "ਸਾਊਂਡ ਸੈਟਿੰਗ"
@ -1609,7 +1597,7 @@ msgid "Unknown"
msgstr "ਅਣਜਾਣ"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
msgid "Volume"
msgstr "ਆਵਾਜ਼"
@ -1617,63 +1605,67 @@ msgstr "ਆਵਾਜ਼"
msgid "Microphone"
msgstr "ਮਾਈਕਰੋਫੋਨ"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:176
msgid "Log in as another user"
msgstr "ਹੋਰ ਯੂਜ਼ਰ ਵਜੋਂ ਲਾਗਇਨ"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "ਉਪਲੱਬਧ"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "ਰੁਝਿਆ"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "ਅਦਿੱਖ"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "ਦੂਰ"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "ਵੇਹਲਾ"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "ਨਾ ਉਪਲੱਬਧ"
#: ../js/ui/userMenu.js:744
msgid "Notifications"
msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ"
#: ../js/ui/userMenu.js:752
msgid "System Settings"
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
msgid "Switch User"
msgstr "ਯੂਜ਼ਰ ਬਦਲੋ"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:619
msgid "Switch Session"
msgstr "ਸ਼ੈਸ਼ਨ ਬਦਲੋ"
#: ../js/ui/userMenu.js:743
msgid "Notifications"
msgstr "ਨੋਟੀਫਿਕੇਸ਼ਨ"
#: ../js/ui/userMenu.js:751
msgid "System Settings"
msgstr "ਸਿਸਟਮ ਸੈਟਿੰਗ"
#: ../js/ui/userMenu.js:764
msgid "Log Out"
msgstr "ਲਾਗ ਆਉਟ"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:769
msgid "Lock"
msgstr "ਲਾਕ"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:784
msgid "Install Updates & Restart"
msgstr "ਅੱਪਡੇਟ ਇੰਸਟਾਲ ਕਰੋ ਅਤੇ ਮੁੜ-ਚਾਲੂ"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:802
msgid "Your chat status will be set to busy"
msgstr "ਤੁਹਾਡੀ ਚੈਟ ਹਾਲਤ ਰੁੱਝੇ ਵਜੋਂ ਸੈੱਟ ਕੀਤੀ ਜਾਵੇਗੀ"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:803
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1695,7 +1687,7 @@ msgstr "ਐਪਲੀਕੇਸ਼ਨ"
msgid "Search"
msgstr "ਖੋਜ"
#: ../js/ui/wanda.js:117
#: ../js/ui/wanda.js:119
#, c-format
msgid ""
"Sorry, no wisdom for you today:\n"
@ -1704,12 +1696,12 @@ msgstr ""
"ਅਫਸੋਸ, ਅੱਜ ਤੁਹਾਡੇ ਲਈ ਕੋਈ ਨਸੀਹਤ ਨਹੀਂ:\n"
"%s "
#: ../js/ui/wanda.js:121
#: ../js/ui/wanda.js:123
#, c-format
msgid "%s the Oracle says"
msgstr "%s ਓਰੇਕਲ ਨੇ ਕਿਹਾ"
#: ../js/ui/wanda.js:162
#: ../js/ui/wanda.js:164
msgid "Your favorite Easter Egg"
msgstr "ਤੁਹਾਡਾ ਪਸੰਦੀਦਾ ਈਸਟਰ ਅੰਡਾ"
@ -1744,23 +1736,23 @@ msgstr[1] "%u ਇੰਪੁੱਟ"
msgid "System Sounds"
msgstr "ਸਿਸਟਮ ਸਾਊਂਡ"
#: ../src/main.c:332
#: ../src/main.c:330
msgid "Print version"
msgstr "ਵਰਜਨ ਛਾਪੋ"
#: ../src/main.c:338
#: ../src/main.c:336
msgid "Mode used by GDM for login screen"
msgstr "ਲਾਗਇਨ ਸਕਰੀਨ ਲਈ GDM ਵਲੋਂ ਵਰਤਿਆ ਮੋਡ"
#: ../src/main.c:344
#: ../src/main.c:342
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr "ਲਾਗਇਨ ਸਕਰੀਨ ਉੱਤੇ ਖਾਸ ਮੋਡ ਜਿਵੇਂ ਕਿ \"gdm\" ਵਰਤੋਂ"
#: ../src/main.c:350
#: ../src/main.c:348
msgid "List possible modes"
msgstr "ਸੰਭਵ ਮੋਡ ਵੇਖਾਓ"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "'%s' ਚਲਾਉਣ ਲਈ ਫੇਲ੍ਹ"
@ -1785,9 +1777,6 @@ msgstr "ਡਿਫਾਲਟ"
msgid "Authentication dialog was dismissed by the user"
msgstr "ਪਰਮਾਣਕਿਤਾ ਡਾਈਲਾਗ ਯੂਜ਼ਰ ਵਲੋਂ ਰੱਦ ਕੀਤਾ"
#~ msgid "Switch Session"
#~ msgstr "ਸ਼ੈਸ਼ਨ ਬਦਲੋ"
#~ msgid "disabled OpenSearch providers"
#~ msgstr "ਓਪਨਸਰਚ ਉਪਲੱਬਧ ਕਰਵਾਉਣ ਵਾਲੇ ਬੰਦ ਹਨ"

262
po/ru.po
View File

@ -15,8 +15,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: 2012-10-31 16:48+0000\n"
"PO-Revision-Date: 2012-11-04 20:48+0400\n"
"POT-Creation-Date: 2012-09-25 00:06+0000\n"
"PO-Revision-Date: 2012-09-27 16:38+0400\n"
"Last-Translator: Yuri Myasoedov <omerta13@yandex.ru>\n"
"Language-Team: русский <gnome-cyr@gnome.org>\n"
"Language: ru\n"
@ -141,63 +141,51 @@ 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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Этот ключ переопределяет автоматическое скрытие пункта «Завершить сеанс» при "
"использовании одиночного сеанса."
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Если установлено, календарь будет показывать неделю в формате ISO."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Комбинация клавиш для открытия меню приложения"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Комбинация клавиш для открытия меню приложения."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Комбинация клавиш для переключения видимости панели сообщений"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to toggle the visibility of the message tray."
msgstr "Комбинация клавиш для переключения видимости панели сообщений."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the screen recorder"
msgstr "Комбинация клавиш для переключения записи экрана"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
msgid "Keybinding to start/stop the builtin screen recorder."
msgstr ""
"Комбинация клавиш для запуска/остановки встроенного средства записи экрана."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
msgid "Which keyboard to use"
msgstr "Какую клавиатуру использовать"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
msgid "The type of keyboard to use."
msgstr "Тип используемой клавиатуры."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
msgid "Framerate used for recording screencasts."
msgstr "Частота смены кадров для записи скринкастов."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid ""
"The framerate of the resulting screencast recordered by GNOME Shell's "
"screencast recorder in frames-per-second."
@ -205,11 +193,11 @@ msgstr ""
"Частота смены кадров в скринкасте, записанном с помощью GNOME Shell (кадров/"
"сек)."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "The gstreamer pipeline used to encode the screencast"
msgstr "Конвейер gstreamer, используемый для кодирования скринкастов"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
#, no-c-format
msgid ""
"Sets the GStreamer pipeline used to encode recordings. It follows the syntax "
@ -236,11 +224,11 @@ msgstr ""
"используется как заполнитель для определения оптимального количества потоков "
"в системе."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
msgid "File extension used for storing the screencast"
msgstr "Расширение файла, использующееся для хранения скринкастов"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
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 "
@ -263,11 +251,11 @@ msgstr "Расширение"
msgid "Select an extension to configure using the combobox above."
msgstr "Выберите расширение из выпадающего списка."
#: ../js/gdm/loginDialog.js:529
#: ../js/gdm/loginDialog.js:527
msgid "Session..."
msgstr "Сеанс…"
#: ../js/gdm/loginDialog.js:677
#: ../js/gdm/loginDialog.js:675
msgctxt "title"
msgid "Sign In"
msgstr "Вход в систему"
@ -275,33 +263,34 @@ 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:736
#: ../js/gdm/loginDialog.js:742
msgid "Not listed?"
msgstr "Нет в списке?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:895 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:166
msgid "Cancel"
msgstr "Отмена"
#: ../js/gdm/loginDialog.js:894
#: ../js/gdm/loginDialog.js:900
msgctxt "button"
msgid "Sign In"
msgstr "Войти"
#: ../js/gdm/loginDialog.js:1215
#: ../js/gdm/loginDialog.js:1239
msgid "Login Window"
msgstr "Окно входа в систему"
#. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:35
#| msgid "Power Off"
msgid "Power"
msgstr "Питание"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:778
msgid "Suspend"
msgstr "Ждущий режим"
@ -309,8 +298,8 @@ msgstr "Ждущий режим"
msgid "Restart"
msgstr "Перезапустить"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:665 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:777
msgid "Power Off"
msgstr "Выключить"
@ -361,7 +350,7 @@ msgstr "НАСТРОЙКИ"
msgid "New Window"
msgstr "Новое окно"
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:290
#: ../js/ui/appDisplay.js:678 ../js/ui/dash.js:271
msgid "Remove from Favorites"
msgstr "Удалить из избранного"
@ -525,16 +514,16 @@ msgstr "Эта неделя"
msgid "Next week"
msgstr "Следующая неделя"
#: ../js/ui/components/autorunManager.js:297
#: ../js/ui/components/autorunManager.js:278
msgid "Removable Devices"
msgstr "Cъёмные устройства"
#: ../js/ui/components/autorunManager.js:594
#: ../js/ui/components/autorunManager.js:575
#, c-format
msgid "Open with %s"
msgstr "Открыть с помощью %s"
#: ../js/ui/components/autorunManager.js:620
#: ../js/ui/components/autorunManager.js:601
msgid "Eject"
msgstr "Извлечь"
@ -690,35 +679,35 @@ msgstr "Приглушить звук"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Отправлено в <b>%X</b> в <b>%A</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Отправлено в <b>%A</b>, <b>%B %d</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Отправлено в <b>%A</b>, <b>%B %d</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s теперь известен как %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Приглашение в %s"
@ -726,42 +715,42 @@ msgstr "Приглашение в %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s приглашает вас присоединиться к %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Отказаться"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Принять"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "Вас вызывает %s по видео"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "Вас вызывает %s"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Отклонить"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Ответить"
@ -770,111 +759,111 @@ msgstr "Ответить"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s отправляет вам %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s хотел бы получить разрешение видеть, когда вы в сети"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Ошибка сети"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Ошибка аутентификации"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Ошибка шифрования"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Сертификат не предоставляется"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Недоверенный сертификат"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Срок действия сертификата истёк"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Сертификат не активирован"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Имя узла сертификата не совпадает"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Отпечаток сертификата не совпадает"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Самоподписанный сертификат"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Установлен статус «не в сети»"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Шифрование недоступно"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Недействительный сертификат"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "В соединении отказано"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Соединение не может быть установлено"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Соединение потеряно"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Эта учётная запись уже подключена к серверу"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Соединение было заменено новым, используя тот же источник"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Учётная запись уже существует на сервере"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr ""
"Сервер в настоящее время сильно перегружен, чтобы обработать соединение"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Сертификат аннулирован"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Сертификат использует небезопасный алгоритм шифрования или он "
"криптографически нестоек"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -882,30 +871,30 @@ msgstr ""
"Длина сертификата сервера, или глубина цепочки сертификатов сервера, "
"превышает пределы, установленные библиотекой криптографии"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Внутренняя ошибка"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Сбой подключения к %s"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Переподключиться"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Изменить учётную запись"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Неизвестная причина"
#: ../js/ui/dash.js:253 ../js/ui/dash.js:292
#: ../js/ui/dash.js:245 ../js/ui/dash.js:273
msgid "Show Applications"
msgstr "Показать приложения"
@ -913,14 +902,14 @@ msgstr "Показать приложения"
msgid "Date and Time Settings"
msgstr "Настроить дату и время"
#: ../js/ui/dateMenu.js:111
#: ../js/ui/dateMenu.js:109
msgid "Open Calendar"
msgstr "Открыть календарь"
#. Translators: This is the date format to use when the calendar popup is
#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
#.
#: ../js/ui/dateMenu.js:201
#: ../js/ui/dateMenu.js:175
msgid "%A %B %e, %Y"
msgstr "%A, %e %B, %Y"
@ -1030,11 +1019,11 @@ msgstr "Установить"
msgid "Download and install '%s' from extensions.gnome.org?"
msgstr "Загрузить и установить расширение «%s» с extensions.gnome.org?"
#: ../js/ui/keyboard.js:337
#: ../js/ui/keyboard.js:327
msgid "tray"
msgstr "лоток"
#: ../js/ui/keyboard.js:584 ../js/ui/status/keyboard.js:195
#: ../js/ui/keyboard.js:561 ../js/ui/status/keyboard.js:195
#: ../js/ui/status/power.js:205
msgid "Keyboard"
msgstr "Клавиатура"
@ -1087,23 +1076,23 @@ msgstr "Показать код"
msgid "Web Page"
msgstr "Веб-страница"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1080
msgid "Open"
msgstr "Открыть"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1087
msgid "Remove"
msgstr "Удалить"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:2055
msgid "Message Tray"
msgstr "Панель сообщений"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2511
msgid "System Information"
msgstr "Системная информация"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Неизвестно"
@ -1159,7 +1148,7 @@ msgstr "Введите команду:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%d %B, %A"
@ -1211,7 +1200,7 @@ msgstr "Пароль"
msgid "Remember Password"
msgstr "Запомнить пароль"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:169
msgid "Unlock"
msgstr "Разблокировать"
@ -1329,7 +1318,7 @@ msgstr "Настроить клавиатуру"
msgid "Mouse Settings"
msgstr "Настроить мышь"
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:234
#: ../js/ui/status/bluetooth.js:269 ../js/ui/status/volume.js:236
msgid "Sound Settings"
msgstr "Настроить звук"
@ -1618,7 +1607,7 @@ msgid "Unknown"
msgstr "Неизвестно"
#. Translators: This is the label for audio volume
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:221
#: ../js/ui/status/volume.js:47 ../js/ui/status/volume.js:223
msgid "Volume"
msgstr "Громкость"
@ -1626,63 +1615,67 @@ msgstr "Громкость"
msgid "Microphone"
msgstr "Микрофон"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:176
msgid "Log in as another user"
msgstr "Войти от имени другого пользователя"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Доступен"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Занят"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Невидим"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Отошёл"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Бездействует"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Недоступен"
#: ../js/ui/userMenu.js:744
msgid "Notifications"
msgstr "Уведомления"
#: ../js/ui/userMenu.js:752
msgid "System Settings"
msgstr "Системные параметры"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:618 ../js/ui/userMenu.js:759
msgid "Switch User"
msgstr "Сменить пользователя"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:619
msgid "Switch Session"
msgstr "Переключить сеанс"
#: ../js/ui/userMenu.js:743
msgid "Notifications"
msgstr "Уведомления"
#: ../js/ui/userMenu.js:751
msgid "System Settings"
msgstr "Системные параметры"
#: ../js/ui/userMenu.js:764
msgid "Log Out"
msgstr "Выйти из системы"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:769
msgid "Lock"
msgstr "Заблокировать"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:784
msgid "Install Updates & Restart"
msgstr "Установить обновления и выполнить перезагрузку"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:802
msgid "Your chat status will be set to busy"
msgstr "Будет установлен статус «не беспокоить»"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:803
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1702,7 +1695,7 @@ msgstr "Приложения"
msgid "Search"
msgstr "Поиск"
#: ../js/ui/wanda.js:117
#: ../js/ui/wanda.js:119
#, c-format
msgid ""
"Sorry, no wisdom for you today:\n"
@ -1711,12 +1704,12 @@ msgstr ""
"Извините, на сегодня нет никаких советов:\n"
"%s"
#: ../js/ui/wanda.js:121
#: ../js/ui/wanda.js:123
#, c-format
msgid "%s the Oracle says"
msgstr "Оракул говорит: «%s»"
#: ../js/ui/wanda.js:162
#: ../js/ui/wanda.js:164
msgid "Your favorite Easter Egg"
msgstr "Ваше любимое «пасхальное яйцо»"
@ -1753,24 +1746,24 @@ msgstr[2] "%u входов"
msgid "System Sounds"
msgstr "Системные звуки"
#: ../src/main.c:332
#: ../src/main.c:330
msgid "Print version"
msgstr "Показать номер версии"
#: ../src/main.c:338
#: ../src/main.c:336
msgid "Mode used by GDM for login screen"
msgstr "Режим, используемый GDM для окна входа в систему"
#: ../src/main.c:344
#: ../src/main.c:342
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
"Использовать для экрана входа в систему определённый режим, например «gdm»"
#: ../src/main.c:350
#: ../src/main.c:348
msgid "List possible modes"
msgstr "Список возможных режимов"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Не удалось запустить «%s»"
@ -1795,9 +1788,6 @@ msgstr "По умолчанию"
msgid "Authentication dialog was dismissed by the user"
msgstr "Пользователь отклонил диалог аутентификации"
#~ msgid "Switch Session"
#~ msgstr "Переключить сеанс"
#~ msgid "disabled OpenSearch providers"
#~ msgstr "отключённые провайдеры OpenSearch"

296
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: 2012-10-18 16:51+0000\n"
"PO-Revision-Date: 2012-10-13 22:35+0100\n"
"POT-Creation-Date: 2012-10-27 16:22+0000\n"
"PO-Revision-Date: 2012-10-28 19:49+0000\n"
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <gnome-sk-list@gnome.org>\n"
"Language: sk\n"
@ -25,8 +25,6 @@ msgstr ""
msgid "Screenshots"
msgstr "Snímky obrazovky"
# PM: inde dianie na obrazovke
# DK:presne taketo nieco som chcel povedat ale nevedel som ako
#: ../data/50-gnome-shell-screenshot.xml.in.h:2
msgid "Record a screencast"
msgstr "Zaznamenať dianie na obrazovke"
@ -37,20 +35,16 @@ msgstr "Systém"
#: ../data/50-gnome-shell-system.xml.in.h:2
msgid "Show the message tray"
msgstr "Zobraz lištu správ"
msgstr "Zobrazí lištu správ"
# tooltip
#: ../data/50-gnome-shell-system.xml.in.h:3
#, fuzzy
#| msgid "Show Applications"
msgid "Show all applications"
msgstr "Zobrazí aplikácie"
msgstr "Zobrazí všetky aplikácie"
#: ../data/50-gnome-shell-system.xml.in.h:4
#, fuzzy
#| msgid "Keybinding to open the application menu"
msgid "Open the application menu"
msgstr "Klávesová skratka na otvorenie ponuky aplikácií"
msgstr "Otvorí ponuku aplikácií"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
@ -85,13 +79,9 @@ msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
msgid "Uuids of extensions to enable"
msgstr "Uuid identifikátory rozšírení určených na povolenie"
msgstr "Vlastnosť uuid rozšírení určených na povolenie"
# PM: nepáči sa mi konštrukcia viet, preklad vyznieva strojovo
# DK: uz lepsie?
# PM: lepšie ale nepáči sa mi org.gnome.Shell. mne sa vidí že to bude nejaký súbor a potom predložka na asi nebude dobre
#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
#, fuzzy
msgid ""
"GNOME Shell extensions have a uuid property; this key lists extensions which "
"should be loaded. Any extension that wants to be loaded needs to be in this "
@ -101,7 +91,7 @@ msgstr ""
"Rozšírenia pre GNOME Shell majú vlastnosť uuid; tento kľúč obsahuje zoznam "
"rozšírení, ktoré by mali byť načítané. Každé rozšírenie, ktoré je potrebné "
"načítať, musí byť v tomto zozname. Tento zoznam môžete upraviť aj ručne "
"pomocou metód DBus EnableExtension a DisableExtension na org.gnome.Shell."
"pomocou metód DBus EnableExtension a DisableExtension v org.gnome.Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
msgid "Whether to collect stats about applications usage"
@ -176,17 +166,15 @@ 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:17
#, fuzzy
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Klávesová skratka na otvorenie ponuky aplikácií"
msgstr "Klávesová skratka na otvorenie pohľadu „Zobraziť aplikácie“"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#, fuzzy
#| msgid "Keybinding to open the application menu."
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "Klávesová skratka na otvorenie ponuky aplikácií."
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:19
msgid "Keybinding to toggle the visibility of the message tray"
@ -211,7 +199,7 @@ msgstr "Ktorú klávesnicu používať"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
msgid "The type of keyboard to use."
msgstr "Typ klávesnice, ktorý sa má používať."
msgstr "Typ klávesnice, ktorá sa má používať."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
msgid "Framerate used for recording screencasts."
@ -273,6 +261,39 @@ msgstr ""
"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á."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
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:33
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í GNOME Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
msgid "Arrangement of buttons on the titlebar"
msgstr "Usporiadanie tlačidiel na titulku okna"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Tento kľúč preváži kľúč v org.gnome.desktop.wm.preferences po spustení GNOME "
"Shell."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
msgid "Workspaces are managed dynamically"
msgstr "Pracovné priestory sú spravované dynamicky"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
msgid "Workspaces only on primary monitor"
msgstr "Pracovné priestory sú iba na primárnom monitore"
#: ../js/extensionPrefs/main.js:124
#, c-format
msgid "There was an error loading the preferences dialog for %s:"
@ -286,11 +307,11 @@ 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/loginDialog.js:529
#: ../js/gdm/loginDialog.js:560
msgid "Session..."
msgstr "Relácia..."
#: ../js/gdm/loginDialog.js:677
#: ../js/gdm/loginDialog.js:704
msgctxt "title"
msgid "Sign In"
msgstr "Prihlásenie"
@ -299,42 +320,42 @@ msgstr "Prihlásenie"
#. 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:736
#: ../js/gdm/loginDialog.js:763
msgid "Not listed?"
msgstr "Nie ste v zozname?"
#: ../js/gdm/loginDialog.js:889 ../js/ui/components/networkAgent.js:137
#: ../js/gdm/loginDialog.js:901 ../js/ui/components/networkAgent.js:137
#: ../js/ui/components/polkitAgent.js:162 ../js/ui/endSessionDialog.js:373
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:396
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:167
#: ../js/ui/status/bluetooth.js:427 ../js/ui/unlockDialog.js:168
msgid "Cancel"
msgstr "Zrušiť"
#: ../js/gdm/loginDialog.js:894
#: ../js/gdm/loginDialog.js:906
msgctxt "button"
msgid "Sign In"
msgstr "Prihlásiť sa"
#: ../js/gdm/loginDialog.js:1215
#: ../js/gdm/loginDialog.js:1217
msgid "Login Window"
msgstr "Prihlasovacie okno"
#. Translators: accessible name of the power menu in the login screen
#: ../js/gdm/powerMenu.js:37
#: ../js/gdm/powerMenu.js:36
msgid "Power"
msgstr "Napájanie"
#: ../js/gdm/powerMenu.js:95 ../js/ui/userMenu.js:655 ../js/ui/userMenu.js:659
#: ../js/ui/userMenu.js:770
#: ../js/gdm/powerMenu.js:93 ../js/ui/userMenu.js:663 ../js/ui/userMenu.js:667
#: ../js/ui/userMenu.js:778
msgid "Suspend"
msgstr "Uspať"
#: ../js/gdm/powerMenu.js:100
#: ../js/gdm/powerMenu.js:98
msgid "Restart"
msgstr "Reštartovať"
#: ../js/gdm/powerMenu.js:105 ../js/ui/userMenu.js:657
#: ../js/ui/userMenu.js:659 ../js/ui/userMenu.js:769
#: ../js/gdm/powerMenu.js:103 ../js/ui/userMenu.js:665
#: ../js/ui/userMenu.js:667 ../js/ui/userMenu.js:777
msgid "Power Off"
msgstr "Vypnúť"
@ -517,35 +538,35 @@ msgid "S"
msgstr "So"
#. Translators: Text to show if there are no events
#: ../js/ui/calendar.js:699
#: ../js/ui/calendar.js:700
msgid "Nothing Scheduled"
msgstr "Žiadne naplánované udalosti"
#. Translators: Shown on calendar heading when selected day occurs on current year
#: ../js/ui/calendar.js:715
#: ../js/ui/calendar.js:716
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:718
#: ../js/ui/calendar.js:719
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %e. %B %Y"
#: ../js/ui/calendar.js:728
#: ../js/ui/calendar.js:729
msgid "Today"
msgstr "Dnes"
#: ../js/ui/calendar.js:732
#: ../js/ui/calendar.js:733
msgid "Tomorrow"
msgstr "Zajtra"
#: ../js/ui/calendar.js:743
#: ../js/ui/calendar.js:744
msgid "This week"
msgstr "Tento týždeň"
#: ../js/ui/calendar.js:751
#: ../js/ui/calendar.js:752
msgid "Next week"
msgstr "Ďalší týždeň"
@ -553,10 +574,11 @@ msgstr "Ďalší týždeň"
msgid "Removable Devices"
msgstr "Vymeniteľné zariadenia"
# DK: doplnil som slovo "programu", aby to znelo prirodzenejsie. priklad:po pripojeni USB kluca bolo zobrazene "Otvoriť pomocou Súbory"
#: ../js/ui/components/autorunManager.js:591
#, c-format
msgid "Open with %s"
msgstr "Otvoriť pomocou %s"
msgstr "Otvoriť pomocou programu %s"
#: ../js/ui/components/autorunManager.js:617
msgid "Eject"
@ -623,7 +645,7 @@ msgstr ""
#: ../js/ui/components/networkAgent.js:314
msgid "Wired 802.1X authentication"
msgstr "Overenie totožnosti drôtovej 802.1X"
msgstr "Overenie totožnosti k drôtovej sieti 802.1X"
#: ../js/ui/components/networkAgent.js:316
msgid "Network name: "
@ -631,7 +653,7 @@ msgstr "Názov siete: "
#: ../js/ui/components/networkAgent.js:321
msgid "DSL authentication"
msgstr "Overenie totožnosti DSL"
msgstr "Overenie totožnosti k DSL"
#: ../js/ui/components/networkAgent.js:328
msgid "PIN code required"
@ -639,7 +661,7 @@ msgstr "Požaduje sa kód PIN"
#: ../js/ui/components/networkAgent.js:329
msgid "PIN code is needed for the mobile broadband device"
msgstr "Pre zariadenie mobilnej siete je potrebný PIN kód"
msgstr "Pre zariadenie mobilnej siete je potrebný kód PIN"
#: ../js/ui/components/networkAgent.js:330
msgid "PIN: "
@ -647,7 +669,7 @@ msgstr "PIN: "
#: ../js/ui/components/networkAgent.js:336
msgid "Mobile broadband network password"
msgstr "Heslo pre mobilnú sieť"
msgstr "Heslo k mobilnej sieti"
#: ../js/ui/components/networkAgent.js:337
#, c-format
@ -675,11 +697,12 @@ msgstr "Overiť totožnosť"
msgid "Sorry, that didn't work. Please try again."
msgstr "Prepáčte, ale nezabralo to. Skúste to, prosím, znova."
# %d je datum, %t je cas
#. Translators: this is a filename used for screencast recording
#: ../js/ui/components/recorder.js:44
#, no-c-format
msgid "Screencast from %d %t"
msgstr "Záznam videa obrazovky z %d %t"
msgstr "Záznam videa obrazovky dňa %d o %t"
#. FIXME: We don't have a 'chat room' icon (bgo #653737) use
#. system-users for now as Empathy does.
@ -714,44 +737,42 @@ msgid "Mute"
msgstr "Stlmiť"
#. Translators: this is a time format string followed by the word "Yesterday". i.e. "14:30 on Yesterday"
#: ../js/ui/components/telepathyClient.js:941
#: ../js/ui/components/telepathyClient.js:943
#, no-c-format
msgid "<b>%H:%M</b> on Yesterday"
msgstr ""
msgstr "včera o <b>%H:%M</b>"
#. Translators: this is a time format string followed by a week day name. i.e. "14:30 on Monday
#: ../js/ui/components/telepathyClient.js:947
#, fuzzy, no-c-format
#| msgid "Sent at <b>%X</b> on <b>%A</b>"
#: ../js/ui/components/telepathyClient.js:949
#, no-c-format
msgid "<b>%H:%M</b> on <b>%A</b>"
msgstr "Čas odoslania: <b>%A</b>, <b>%R</b>"
msgstr "v <b>%A</b> o <b>%H:%M</b>"
#. Translators: this is a time format in the style of "14:30 on Wednesday, May 25",
#. shown when you get a chat message in the same year
#: ../js/ui/components/telepathyClient.js:953
#, fuzzy, no-c-format
#| msgid "Sent on <b>%A</b>, <b>%B %d</b>"
#: ../js/ui/components/telepathyClient.js:955
#, no-c-format
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>"
msgstr "Čas odoslania: <b>%A</b>, <b>%e. %B</b>"
msgstr "v <b>%A</b> o <b>%H:%M</b>, <b>%e.</b> <b>%B</b>"
#. Translators: this is a time format in the style of "14:30 on Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year
#: ../js/ui/components/telepathyClient.js:958
#, fuzzy, no-c-format
#| msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
#: ../js/ui/components/telepathyClient.js:960
#, no-c-format
msgid "<b>%H:%M</b> on <b>%A</b>, <b>%B</b> <b>%d</b>, %Y"
msgstr "Čas odoslania: <b>%A</b>, <b>%e. %B</b> %Y"
msgstr "v <b>%A</b> o <b>%H:%M</b>, <b>%e.</b> <b>%B</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:986
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s odteraz vystupuje ako %s"
msgstr "Kontakt %s odteraz vystupuje ako %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1085
#: ../js/ui/components/telepathyClient.js:1087
#, c-format
msgid "Invitation to %s"
msgstr "Pozvánka do %s"
@ -759,42 +780,42 @@ msgstr "Pozvánka do %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1093
#: ../js/ui/components/telepathyClient.js:1095
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s vás pozýva aby ste sa pridali do %s"
msgstr "Kontakt %s vás pozýva aby ste sa pridali do %s"
#: ../js/ui/components/telepathyClient.js:1095
#: ../js/ui/components/telepathyClient.js:1174
#: ../js/ui/components/telepathyClient.js:1237
#: ../js/ui/components/telepathyClient.js:1097
#: ../js/ui/components/telepathyClient.js:1176
#: ../js/ui/components/telepathyClient.js:1239
msgid "Decline"
msgstr "Odmietnuť"
#: ../js/ui/components/telepathyClient.js:1096
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1238
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Accept"
msgstr "Prijať"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1126
#: ../js/ui/components/telepathyClient.js:1128
#, c-format
msgid "Video call from %s"
msgstr "Videohovor od používateľa %s"
msgstr "Videohovor od kontaktu %s"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1129
#: ../js/ui/components/telepathyClient.js:1131
#, c-format
msgid "Call from %s"
msgstr "Hovor od používateľa %s"
msgstr "Hovor od kontaktu %s"
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Odmietnuť"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1138
msgid "Answer"
msgstr "Prijať hovor"
@ -803,110 +824,111 @@ msgstr "Prijať hovor"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1168
#: ../js/ui/components/telepathyClient.js:1170
#, c-format
msgid "%s is sending you %s"
msgstr "%s vám posiela %s"
msgstr "Kontakt %s vám posiela %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1203
#: ../js/ui/components/telepathyClient.js:1205
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s by chcel získať oprávnenie vidieť, kedy ste pripojený"
msgstr ""
"Kontakt %s by chcel získať oprávnenie vidieť, kedy ste pripojený"
#: ../js/ui/components/telepathyClient.js:1295
#: ../js/ui/components/telepathyClient.js:1297
msgid "Network error"
msgstr "Chyba siete"
#: ../js/ui/components/telepathyClient.js:1297
#: ../js/ui/components/telepathyClient.js:1299
msgid "Authentication failed"
msgstr "Overenie totožnosti zlyhalo"
#: ../js/ui/components/telepathyClient.js:1299
#: ../js/ui/components/telepathyClient.js:1301
msgid "Encryption error"
msgstr "Chyba šifrovania"
#: ../js/ui/components/telepathyClient.js:1301
#: ../js/ui/components/telepathyClient.js:1303
msgid "Certificate not provided"
msgstr "Neposkytnutý certifikát"
#: ../js/ui/components/telepathyClient.js:1303
#: ../js/ui/components/telepathyClient.js:1305
msgid "Certificate untrusted"
msgstr "Nedôveryhodný certifikát"
#: ../js/ui/components/telepathyClient.js:1305
#: ../js/ui/components/telepathyClient.js:1307
msgid "Certificate expired"
msgstr "Certifikát s ukončenou platnosťou"
#: ../js/ui/components/telepathyClient.js:1307
#: ../js/ui/components/telepathyClient.js:1309
msgid "Certificate not activated"
msgstr "Neaktivovaný certifikát"
#: ../js/ui/components/telepathyClient.js:1309
#: ../js/ui/components/telepathyClient.js:1311
msgid "Certificate hostname mismatch"
msgstr "Certifikát s nesúhlasným názvom hostiteľa"
#: ../js/ui/components/telepathyClient.js:1311
#: ../js/ui/components/telepathyClient.js:1313
msgid "Certificate fingerprint mismatch"
msgstr "Certifikát s nesúhlasným odtlačkom"
#: ../js/ui/components/telepathyClient.js:1313
#: ../js/ui/components/telepathyClient.js:1315
msgid "Certificate self-signed"
msgstr "Sebou podpísaný certifikát"
#: ../js/ui/components/telepathyClient.js:1315
#: ../js/ui/components/telepathyClient.js:1317
msgid "Status is set to offline"
msgstr "Stav je nastavený na odhlásený"
#: ../js/ui/components/telepathyClient.js:1317
#: ../js/ui/components/telepathyClient.js:1319
msgid "Encryption is not available"
msgstr "Šifrovanie nie je dostupné"
#: ../js/ui/components/telepathyClient.js:1319
#: ../js/ui/components/telepathyClient.js:1321
msgid "Certificate is invalid"
msgstr "Certifikát je neplatný"
#: ../js/ui/components/telepathyClient.js:1321
#: ../js/ui/components/telepathyClient.js:1323
msgid "Connection has been refused"
msgstr "Pripojenie bolo odmietnuté"
#: ../js/ui/components/telepathyClient.js:1323
#: ../js/ui/components/telepathyClient.js:1325
msgid "Connection can't be established"
msgstr "Nedá sa nadviazať spojenie"
#: ../js/ui/components/telepathyClient.js:1325
#: ../js/ui/components/telepathyClient.js:1327
msgid "Connection has been lost"
msgstr "Spojenie sa stratilo"
#: ../js/ui/components/telepathyClient.js:1327
#: ../js/ui/components/telepathyClient.js:1329
msgid "This account is already connected to the server"
msgstr "Tento účet je už pripojený k serveru"
#: ../js/ui/components/telepathyClient.js:1329
#: ../js/ui/components/telepathyClient.js:1331
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Pripojenie bolo nahradené novým, ktoré používa rovnaký zdroj"
#: ../js/ui/components/telepathyClient.js:1331
#: ../js/ui/components/telepathyClient.js:1333
msgid "The account already exists on the server"
msgstr "Účet na serveri už existuje"
#: ../js/ui/components/telepathyClient.js:1333
#: ../js/ui/components/telepathyClient.js:1335
msgid "Server is currently too busy to handle the connection"
msgstr "Server je momentálne príliš zaneprázdnený na zvládnutie pripojenia"
#: ../js/ui/components/telepathyClient.js:1335
#: ../js/ui/components/telepathyClient.js:1337
msgid "Certificate has been revoked"
msgstr "Certifikát bol zrušený"
#: ../js/ui/components/telepathyClient.js:1337
#: ../js/ui/components/telepathyClient.js:1339
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Šifrovací algoritmus používaný certifikátom nie je bezpečný alebo je "
"kryptograficky slabý"
#: ../js/ui/components/telepathyClient.js:1339
#: ../js/ui/components/telepathyClient.js:1341
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -914,26 +936,26 @@ msgstr ""
"Dĺžka certifikátu servera, alebo hĺbka reťazca certifikátu servera presahuje "
"limit stanovený kryptografickou knižnicou."
#: ../js/ui/components/telepathyClient.js:1341
#: ../js/ui/components/telepathyClient.js:1343
msgid "Internal error"
msgstr "Vnútorná chyba"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1351
#: ../js/ui/components/telepathyClient.js:1353
#, c-format
msgid "Connection to %s failed"
msgstr "Pripojenie k %s zlyhalo"
#: ../js/ui/components/telepathyClient.js:1360
#: ../js/ui/components/telepathyClient.js:1362
msgid "Reconnect"
msgstr "Znovu sa pripojiť"
#: ../js/ui/components/telepathyClient.js:1361
#: ../js/ui/components/telepathyClient.js:1363
msgid "Edit account"
msgstr "Upraviť účet"
#: ../js/ui/components/telepathyClient.js:1406
#: ../js/ui/components/telepathyClient.js:1408
msgid "Unknown reason"
msgstr "Neznámy dôvod"
@ -992,7 +1014,7 @@ msgstr[2] "Budete automaticky odhlásený o %d sekundy."
#: ../js/ui/endSessionDialog.js:74
msgid "Logging out of the system."
msgstr "Odhlasuje sa zo systému."
msgstr "Prebieha odhlásenie zo systému."
#: ../js/ui/endSessionDialog.js:76
msgctxt "button"
@ -1120,21 +1142,21 @@ msgstr "Zobraziť zdroj"
msgid "Web Page"
msgstr "Webová stránka"
#: ../js/ui/messageTray.js:1082
#: ../js/ui/messageTray.js:1083
msgid "Open"
msgstr "Otvoriť"
#: ../js/ui/messageTray.js:1089
#: ../js/ui/messageTray.js:1090
msgid "Remove"
msgstr "Odstrániť"
# DK: zvazoval som pouzit "Panel správ"
# neviem co bude vhodnejsie ako preklad "tray"
#: ../js/ui/messageTray.js:1545
#: ../js/ui/messageTray.js:1534
msgid "Message Tray"
msgstr "Lišta správ"
#: ../js/ui/messageTray.js:2552
#: ../js/ui/messageTray.js:2557
msgid "System Information"
msgstr "Informácie o systéme"
@ -1175,7 +1197,7 @@ msgstr "Ukončiť"
msgid "Activities"
msgstr "Aktivity"
#: ../js/ui/panel.js:965
#: ../js/ui/panel.js:966
msgid "Top Bar"
msgstr "Horná lišta"
@ -1197,11 +1219,11 @@ msgstr "Prosím, zadajte príkaz:"
# 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:79
#: ../js/ui/screenShield.js:80
msgid "%A, %B %d"
msgstr "%A, %e. %B"
#: ../js/ui/screenShield.js:143
#: ../js/ui/screenShield.js:144
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1209,13 +1231,13 @@ msgstr[0] "%d nových správ"
msgstr[1] "%d nová správa"
msgstr[2] "%d nové správy"
#: ../js/ui/screenShield.js:145
#: ../js/ui/screenShield.js:146
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
msgstr[0] "%d nových upozornení"
msgstr[1] "%d nové upozornenie"
msgstr[2] "%d nové upozornenia"
msgstr[0] "%d nových oznámení"
msgstr[1] "%d nové oznámenie"
msgstr[2] "%d nové oznámenia"
#: ../js/ui/searchDisplay.js:275
msgid "Searching..."
@ -1249,13 +1271,13 @@ msgstr "Heslo"
msgid "Remember Password"
msgstr "Zapamätať heslo"
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:170
#: ../js/ui/shellMountOperation.js:400 ../js/ui/unlockDialog.js:171
msgid "Unlock"
msgstr "Odblokovať"
#: ../js/ui/status/accessibility.js:39
msgid "Accessibility"
msgstr "Prístupnosť"
msgstr "Zjednodušenie ovládania"
#: ../js/ui/status/accessibility.js:44
msgid "Zoom"
@ -1537,7 +1559,7 @@ msgstr "Mobilné"
#: ../js/ui/status/network.js:1628
msgid "VPN Connections"
msgstr "VPN pripojenia"
msgstr "Pripojenia k VPN"
#: ../js/ui/status/network.js:1635
msgid "Network Settings"
@ -1669,7 +1691,7 @@ msgstr "Hlasitosť"
msgid "Microphone"
msgstr "Mikrofón"
#: ../js/ui/unlockDialog.js:177
#: ../js/ui/unlockDialog.js:178
msgid "Log in as another user"
msgstr "Prihlásiť ako iný používateľ"
@ -1697,35 +1719,35 @@ msgstr "Nečinný"
msgid "Unavailable"
msgstr "Nedostupný"
#: ../js/ui/userMenu.js:735
#: ../js/ui/userMenu.js:743
msgid "Notifications"
msgstr "Upozornenia"
#: ../js/ui/userMenu.js:743
#: ../js/ui/userMenu.js:751
msgid "System Settings"
msgstr "Nastavenia systému"
#: ../js/ui/userMenu.js:751
#: ../js/ui/userMenu.js:759
msgid "Switch User"
msgstr "Prepnúť používateľa"
#: ../js/ui/userMenu.js:756
#: ../js/ui/userMenu.js:764
msgid "Log Out"
msgstr "Odhlásiť sa"
#: ../js/ui/userMenu.js:761
#: ../js/ui/userMenu.js:769
msgid "Lock"
msgstr "Uzamknúť"
#: ../js/ui/userMenu.js:776
#: ../js/ui/userMenu.js:784
msgid "Install Updates & Restart"
msgstr "Nainštalovať aktualizácie a reštartovať"
#: ../js/ui/userMenu.js:794
#: ../js/ui/userMenu.js:802
msgid "Your chat status will be set to busy"
msgstr "Váš stav bude nastavený na zaneprázdnený"
#: ../js/ui/userMenu.js:795
#: ../js/ui/userMenu.js:803
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."

188
po/sl.po
View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2012-10-31 16:48+0000\n"
"PO-Revision-Date: 2012-10-31 18:50+0100\n"
"POT-Creation-Date: 2012-10-16 00:16+0000\n"
"PO-Revision-Date: 2012-10-16 07:53+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"
@ -37,6 +37,14 @@ msgstr "Sistem"
msgid "Show the message tray"
msgstr "Pokaži sporočilno vrstico"
#: ../data/50-gnome-shell-system.xml.in.h:3
msgid "Show all applications"
msgstr "Pokaži vse programe"
#: ../data/50-gnome-shell-system.xml.in.h:4
msgid "Open the application menu"
msgstr "Odpri meni programov"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "Gnome lupina"
@ -103,29 +111,29 @@ msgid "Internally used to store the last session presence status for the user. T
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 'Odjave' v meniju uporabnika."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "This key overrides the automatic hiding of the 'Log out' menuitem in single-user, single-session situations."
msgstr "Možnost onemogoči samodejno skrivanje možnosti 'Odjava' v meniju uporabnika, kadar je ta seja edina dejavna."
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
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:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Tipkovna bližnjica, ki odpre meni programov"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Tipkovna bližnjica, ki odpre meni programov."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
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:18
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:19
msgid "Keybinding to toggle the visibility of the message tray"
msgstr "Tipkovna bližnjica za preklop vidnosti vrstice sporočanja"
@ -230,9 +238,9 @@ msgid "Power"
msgstr "Napajanje"
#: ../js/gdm/powerMenu.js:89
#: ../js/ui/userMenu.js:660
#: ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Zaustavi"
@ -241,9 +249,9 @@ msgid "Restart"
msgstr "Zaženi znova"
#: ../js/gdm/powerMenu.js:99
#: ../js/ui/userMenu.js:666
#: ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/ui/userMenu.js:662
#: ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Izklop"
@ -623,35 +631,35 @@ msgstr "Utišaj"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:950
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Poslano <b>%A</b> ob <b>%X</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:956
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Poslano <b>%A</b>, <b>%d. %Ba</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:961
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Poslano <b>%A</b>, <b>%d. %Ba</b>, %Y"
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:990
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s je sedaj znan kot v %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1090
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Povabilo v %s"
@ -659,42 +667,42 @@ msgstr "Povabilo v %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s vas vabi, da se pridružite v %s"
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1179
#: ../js/ui/components/telepathyClient.js:1242
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Zavrni"
#: ../js/ui/components/telepathyClient.js:1101
#: ../js/ui/components/telepathyClient.js:1180
#: ../js/ui/components/telepathyClient.js:1243
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Sprejmi"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1131
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "%s želi vzpostaviti video klic"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1134
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "%s kliče"
#: ../js/ui/components/telepathyClient.js:1139
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Zavrni"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Odgovori"
@ -703,129 +711,129 @@ msgstr "Odgovori"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1173
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s pošilja %s"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1208
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s želi dovoljenje za pogled dosegljivosti"
#: ../js/ui/components/telepathyClient.js:1300
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Napaka omrežja"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Overitev je spodletela"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Napaka šifriranja"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Potrdilo ni na voljo"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Potrdilo ni zaupljivo"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Potrdilo je preteklo"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Potrdilo ni potrjeno"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Neustrezno ime gostitelja potrdila"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Neustrezen prstni odtis potrdila"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Potrdilo je samo-podpisano"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Stanje je nastavljeno na brez povezave"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Šifriranje ni na voljo."
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Potrdilo je neveljavno."
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Povezava je zavrnjena."
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Povezave ni mogoče vzpostaviti."
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Povezava je prekinjena."
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Račun je s strežnikom že povezan"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1332
msgid "Connection has been replaced by a new connection using the same resource"
msgstr "Povezava je zamenjana z novo povezavo, ki uporablja isti vir."
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Račun na strežniku že obstaja"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Strežnik je trenutno preveč zaposlen za upravljanje s povezavo."
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Potrdilo je preklicano"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1340
msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr "Potrdilo ne uporablja varnega algoritma ali pa uporablja šibko šifriranje."
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1342
msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
msgstr "Dolžina potrdila strežnika ali pa globina verige potrdila presega omejitev, ki je določena s šifrirno knjižnico."
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Notranja napaka"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1356
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Povezava z %s je spodletela"
#: ../js/ui/components/telepathyClient.js:1365
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Ponovno se poveži"
#: ../js/ui/components/telepathyClient.js:1366
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Uredi račun"
#: ../js/ui/components/telepathyClient.js:1411
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Neznan vzrok"
@ -1015,24 +1023,24 @@ msgstr "Poglej vir"
msgid "Web Page"
msgstr "Spletna stran"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Odpri"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Odstrani"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Vrstica sporočanja"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Podrobnosti sistema"
#: ../js/ui/notificationDaemon.js:506
#: ../src/shell-app.c:374
#: ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Neznano"
@ -1088,11 +1096,11 @@ msgstr "Vnos ukaza:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d. %m."
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1101,7 +1109,7 @@ msgstr[1] "%d novo sporočilo"
msgstr[2] "%d novi sporočili"
msgstr[3] "%d nova sporočila"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1582,71 +1590,71 @@ msgstr "Mikrofon"
msgid "Log in as another user"
msgstr "Prijava kot drug uporabnik"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Na voljo"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Zaposleno"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Nevidno"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Odsotno"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Nedejavno"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Nedostopno"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Obvestila"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Sistemske nastavitve"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Preklopi uporabnika"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Odjava"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Zakleni"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Namesti posodobitve in ponovno zaženi"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Stanje vašega klepeta bo nastavljeno na zasedeno"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid "Notifications are now disabled, including chat messages. Your online status has been adjusted to let others know that you might not see their messages."
msgstr "Obveščanje je zdaj onemogočeno, vključno s sporočili klepeta. Vaše stanje povezanosti se je prilagodilo, da bodo drugi vedeli, da njihovih sporočil morda ne boste opazili."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Okna"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Programi"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Poišči"
@ -1719,7 +1727,7 @@ msgstr "Uporabi poseben način, npr.: \"gdm\" za prijavni zaslon"
msgid "List possible modes"
msgstr "Seznam mogočih načinov"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Zaganjanje '%s' je spodletelo"

199
po/sr.po
View File

@ -8,8 +8,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: 2012-11-02 15:25+0000\n"
"PO-Revision-Date: 2012-11-03 09:05+0200\n"
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
"PO-Revision-Date: 2012-10-16 20:23+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n"
"Language: sr\n"
@ -36,6 +36,16 @@ msgstr "Систем"
msgid "Show the message tray"
msgstr "Прикажите фиоку порука"
#: ../data/50-gnome-shell-system.xml.in.h:3
#| msgid "Show Applications"
msgid "Show all applications"
msgstr "Прикажи све програме"
#: ../data/50-gnome-shell-system.xml.in.h:4
#| msgid "Keybinding to open the application menu"
msgid "Open the application menu"
msgstr "Отворите изборник програма"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "Гномова шкољка"
@ -134,32 +144,31 @@ msgstr ""
"корисника. Ова вредност је из пописа стања Гсм присуства."
#: ../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
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Овај кључ преписује самостално скривање ставке изборника „Одјави ме“ у "
"случају једног корисника са једном сесијом."
#: ../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:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Ако је изабрано, приказује ИСО дан у недељи у календару."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Свеза тастера за отварање изборника програма"
msgstr "Пречица за отварање изборника програма"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Пречица за отварање изборника програма."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Пречица за отварање прегледа „Прикажи програме“"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Свеза тастера за отварање изборника програма."
#| msgid "Keybinding to open the application menu."
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "Пречица за отварање прегледа „Прикажи програме“ у прегледу активности."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the visibility of the message tray"
@ -292,8 +301,8 @@ msgstr "Прозор за пријављивање"
msgid "Power"
msgstr "Угаси"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Обустави"
@ -301,8 +310,8 @@ msgstr "Обустави"
msgid "Restart"
msgstr "Поново покрени"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Угаси"
@ -682,35 +691,35 @@ msgstr "Утишај"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Послато је <b>%A</b> у <b>%X</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Послато је у <b>%A</b>, <b>%d. %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Послато је у <b>%A</b>, <b>%d %B</b>, %Y."
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:992
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s је сада познат као %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1092
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Позивница за %s"
@ -718,42 +727,42 @@ msgstr "Позивница за %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s вас позива да се придружите %s"
#: ../js/ui/components/telepathyClient.js:1102
#: ../js/ui/components/telepathyClient.js:1181
#: ../js/ui/components/telepathyClient.js:1244
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Одбиј"
#: ../js/ui/components/telepathyClient.js:1103
#: ../js/ui/components/telepathyClient.js:1182
#: ../js/ui/components/telepathyClient.js:1245
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Прихвати"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "%s вам је упутио видео позив"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "%s вас зове"
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Одбиј"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1143
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Одговори"
@ -762,109 +771,109 @@ msgstr "Одговори"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s вам шаље „%s“"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1210
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s тражи одобрење да види када сте на вези"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Грешка мреже"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Потврђивање идентитета није успело"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Грешка шифровања"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Уверење није прослеђено"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Уверење није поверљиво"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Уверење је истекло"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Уверење није активирано"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Назив домаћина уверења се не поклапа"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Отисак уверења се не поклапа"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Уверење је самопотписано"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Стање је постављено на „неповезан“"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Шифровање није доступно"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Уверење није исправно"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Веза је одбијена"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Веза не може бити успостављена"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Веза је изгубљена"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Овај налог је већ повезан са сервером"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Веза је замењена новом везом користећи исти ресурс"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Овај налог већ постоји на серверу"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Сервер је тренутно превише заузет да би руковао везом"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Уверење је опозвано"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Уверење користи несигуран алгоритам шифровања или је криптографски слабо"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -872,26 +881,26 @@ msgstr ""
"Дужина уверења сервера, или дубина ланца уверења сервера, премашује границе "
"које је задала библиотека шифровања"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Унутрашња грешка"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Повезивање на „%s“ није успело"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Поново се повежи"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Уреди налог"
#: ../js/ui/components/telepathyClient.js:1413
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Непознат разлог"
@ -1080,23 +1089,23 @@ msgstr "Прикажи код"
msgid "Web Page"
msgstr "Веб страница"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Отвори"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Уклони"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Фиока порука"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Подаци о систему"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Непознат"
@ -1152,11 +1161,11 @@ msgstr "Унесите наредбу:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d. %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1165,7 +1174,7 @@ msgstr[1] "%d нове поруке"
msgstr[2] "%d нових порука"
msgstr[3] "Једна нова порука"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1629,59 +1638,59 @@ msgstr "Микрофон"
msgid "Log in as another user"
msgstr "Пријавите се као други корсник"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Доступан"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Заузет"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Невидљив"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Одсутан"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Мирује"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Недоступан"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Обавештења"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Подешавања система"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Промени корисника"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Одјави ме"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Закључај"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Инсталирај ажурирања и поново покрени"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Ваше стање ћаскања ће бити постављено на заузето"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1690,15 +1699,15 @@ msgstr ""
"мрежи је подешено тако да ће остали знати да ви не можете видети њихове "
"поруке."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Прозори"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Програми"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Тражи"
@ -1771,7 +1780,7 @@ msgstr "Користи нарочит режим, нпр. „gdm“ за екр
msgid "List possible modes"
msgstr "Исписује могуће режиме"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Не могу да покренем „%s“"

View File

@ -8,8 +8,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: 2012-11-02 15:25+0000\n"
"PO-Revision-Date: 2012-11-03 09:05+0200\n"
"POT-Creation-Date: 2012-10-15 23:38+0000\n"
"PO-Revision-Date: 2012-10-16 20:23+0200\n"
"Last-Translator: Miroslav Nikolić <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnom@prevod.org>\n"
"Language: sr\n"
@ -36,6 +36,16 @@ msgstr "Sistem"
msgid "Show the message tray"
msgstr "Prikažite fioku poruka"
#: ../data/50-gnome-shell-system.xml.in.h:3
#| msgid "Show Applications"
msgid "Show all applications"
msgstr "Prikaži sve programe"
#: ../data/50-gnome-shell-system.xml.in.h:4
#| msgid "Keybinding to open the application menu"
msgid "Open the application menu"
msgstr "Otvorite izbornik programa"
#: ../data/gnome-shell.desktop.in.in.h:1
msgid "GNOME Shell"
msgstr "Gnomova školjka"
@ -134,32 +144,31 @@ msgstr ""
"korisnika. Ova vrednost je iz popisa stanja Gsm prisustva."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
msgid "Always show the 'Log out' menuitem in the user menu."
msgstr "Uvek prikazuje stavku izbornika „Odjavi me“ u korisničkom izborniku."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid ""
"This key overrides the automatic hiding of the 'Log out' menuitem in single-"
"user, single-session situations."
msgstr ""
"Ovaj ključ prepisuje samostalno skrivanje stavke izbornika „Odjavi me“ u "
"slučaju jednog korisnika sa jednom sesijom."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Show the week date in the calendar"
msgstr "Prikazuje dan u nedelji u kalendaru"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
msgid "If true, display the ISO week date in the calendar."
msgstr "Ako je izabrano, prikazuje ISO dan u nedelji u kalendaru."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
msgid "Keybinding to open the application menu"
msgstr "Sveza tastera za otvaranje izbornika programa"
msgstr "Prečica za otvaranje izbornika programa"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
msgid "Keybinding to open the application menu."
msgstr "Prečica za otvaranje izbornika programa."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
#| msgid "Keybinding to open the application menu"
msgid "Keybinding to open the \"Show Applications\" view"
msgstr "Prečica za otvaranje pregleda „Prikaži programe“"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
msgid "Keybinding to open the application menu."
msgstr "Sveza tastera za otvaranje izbornika programa."
#| msgid "Keybinding to open the application menu."
msgid ""
"Keybinding to open the \"Show Applications\" view of the Activities Overview."
msgstr "Prečica za otvaranje pregleda „Prikaži programe“ u pregledu aktivnosti."
#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
msgid "Keybinding to toggle the visibility of the message tray"
@ -292,8 +301,8 @@ msgstr "Prozor za prijavljivanje"
msgid "Power"
msgstr "Ugasi"
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:664 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:779
#: ../js/gdm/powerMenu.js:89 ../js/ui/userMenu.js:660 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:775
msgid "Suspend"
msgstr "Obustavi"
@ -301,8 +310,8 @@ msgstr "Obustavi"
msgid "Restart"
msgstr "Ponovo pokreni"
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:666 ../js/ui/userMenu.js:668
#: ../js/ui/userMenu.js:778
#: ../js/gdm/powerMenu.js:99 ../js/ui/userMenu.js:662 ../js/ui/userMenu.js:664
#: ../js/ui/userMenu.js:774
msgid "Power Off"
msgstr "Ugasi"
@ -682,35 +691,35 @@ msgstr "Utišaj"
#. Translators: this is a time format string followed by a date.
#. If applicable, replace %X with a strftime format valid for your
#. locale, without seconds.
#: ../js/ui/components/telepathyClient.js:952
#: ../js/ui/components/telepathyClient.js:948
#, no-c-format
msgid "Sent at <b>%X</b> on <b>%A</b>"
msgstr "Poslato je <b>%A</b> u <b>%X</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25",
#. shown when you get a chat message in the same year.
#: ../js/ui/components/telepathyClient.js:958
#: ../js/ui/components/telepathyClient.js:954
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>"
msgstr "Poslato je u <b>%A</b>, <b>%d. %B</b>"
#. Translators: this is a time format in the style of "Wednesday, May 25, 2012",
#. shown when you get a chat message in a different year.
#: ../js/ui/components/telepathyClient.js:963
#: ../js/ui/components/telepathyClient.js:959
#, no-c-format
msgid "Sent on <b>%A</b>, <b>%B %d</b>, %Y"
msgstr "Poslato je u <b>%A</b>, <b>%d %B</b>, %Y."
#. Translators: this is the other person changing their old IM name to their new
#. IM name.
#: ../js/ui/components/telepathyClient.js:992
#: ../js/ui/components/telepathyClient.js:988
#, c-format
msgid "%s is now known as %s"
msgstr "%s je sada poznat kao %s"
#. translators: argument is a room name like
#. * room@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1092
#: ../js/ui/components/telepathyClient.js:1088
#, c-format
msgid "Invitation to %s"
msgstr "Pozivnica za %s"
@ -718,42 +727,42 @@ msgstr "Pozivnica za %s"
#. translators: first argument is the name of a contact and the second
#. * one the name of a room. "Alice is inviting you to join room@jabber.org
#. * for example.
#: ../js/ui/components/telepathyClient.js:1100
#: ../js/ui/components/telepathyClient.js:1096
#, c-format
msgid "%s is inviting you to join %s"
msgstr "%s vas poziva da se pridružite %s"
#: ../js/ui/components/telepathyClient.js:1102
#: ../js/ui/components/telepathyClient.js:1181
#: ../js/ui/components/telepathyClient.js:1244
#: ../js/ui/components/telepathyClient.js:1098
#: ../js/ui/components/telepathyClient.js:1177
#: ../js/ui/components/telepathyClient.js:1240
msgid "Decline"
msgstr "Odbij"
#: ../js/ui/components/telepathyClient.js:1103
#: ../js/ui/components/telepathyClient.js:1182
#: ../js/ui/components/telepathyClient.js:1245
#: ../js/ui/components/telepathyClient.js:1099
#: ../js/ui/components/telepathyClient.js:1178
#: ../js/ui/components/telepathyClient.js:1241
msgid "Accept"
msgstr "Prihvati"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1133
#: ../js/ui/components/telepathyClient.js:1129
#, c-format
msgid "Video call from %s"
msgstr "%s vam je uputio video poziv"
#. translators: argument is a contact name like Alice for example.
#: ../js/ui/components/telepathyClient.js:1136
#: ../js/ui/components/telepathyClient.js:1132
#, c-format
msgid "Call from %s"
msgstr "%s vas zove"
#: ../js/ui/components/telepathyClient.js:1141
#: ../js/ui/components/telepathyClient.js:1137
#: ../js/ui/status/bluetooth.js:346
msgid "Reject"
msgstr "Odbij"
#. translators: this is a button label (verb), not a noun
#: ../js/ui/components/telepathyClient.js:1143
#: ../js/ui/components/telepathyClient.js:1139
msgid "Answer"
msgstr "Odgovori"
@ -762,109 +771,109 @@ msgstr "Odgovori"
#. * file name. The string will be something
#. * like: "Alice is sending you test.ogg"
#.
#: ../js/ui/components/telepathyClient.js:1175
#: ../js/ui/components/telepathyClient.js:1171
#, c-format
msgid "%s is sending you %s"
msgstr "%s vam šalje „%s“"
#. To translators: The parameter is the contact's alias
#: ../js/ui/components/telepathyClient.js:1210
#: ../js/ui/components/telepathyClient.js:1206
#, c-format
msgid "%s would like permission to see when you are online"
msgstr "%s traži odobrenje da vidi kada ste na vezi"
#: ../js/ui/components/telepathyClient.js:1302
#: ../js/ui/components/telepathyClient.js:1298
msgid "Network error"
msgstr "Greška mreže"
#: ../js/ui/components/telepathyClient.js:1304
#: ../js/ui/components/telepathyClient.js:1300
msgid "Authentication failed"
msgstr "Potvrđivanje identiteta nije uspelo"
#: ../js/ui/components/telepathyClient.js:1306
#: ../js/ui/components/telepathyClient.js:1302
msgid "Encryption error"
msgstr "Greška šifrovanja"
#: ../js/ui/components/telepathyClient.js:1308
#: ../js/ui/components/telepathyClient.js:1304
msgid "Certificate not provided"
msgstr "Uverenje nije prosleđeno"
#: ../js/ui/components/telepathyClient.js:1310
#: ../js/ui/components/telepathyClient.js:1306
msgid "Certificate untrusted"
msgstr "Uverenje nije poverljivo"
#: ../js/ui/components/telepathyClient.js:1312
#: ../js/ui/components/telepathyClient.js:1308
msgid "Certificate expired"
msgstr "Uverenje je isteklo"
#: ../js/ui/components/telepathyClient.js:1314
#: ../js/ui/components/telepathyClient.js:1310
msgid "Certificate not activated"
msgstr "Uverenje nije aktivirano"
#: ../js/ui/components/telepathyClient.js:1316
#: ../js/ui/components/telepathyClient.js:1312
msgid "Certificate hostname mismatch"
msgstr "Naziv domaćina uverenja se ne poklapa"
#: ../js/ui/components/telepathyClient.js:1318
#: ../js/ui/components/telepathyClient.js:1314
msgid "Certificate fingerprint mismatch"
msgstr "Otisak uverenja se ne poklapa"
#: ../js/ui/components/telepathyClient.js:1320
#: ../js/ui/components/telepathyClient.js:1316
msgid "Certificate self-signed"
msgstr "Uverenje je samopotpisano"
#: ../js/ui/components/telepathyClient.js:1322
#: ../js/ui/components/telepathyClient.js:1318
msgid "Status is set to offline"
msgstr "Stanje je postavljeno na „nepovezan“"
#: ../js/ui/components/telepathyClient.js:1324
#: ../js/ui/components/telepathyClient.js:1320
msgid "Encryption is not available"
msgstr "Šifrovanje nije dostupno"
#: ../js/ui/components/telepathyClient.js:1326
#: ../js/ui/components/telepathyClient.js:1322
msgid "Certificate is invalid"
msgstr "Uverenje nije ispravno"
#: ../js/ui/components/telepathyClient.js:1328
#: ../js/ui/components/telepathyClient.js:1324
msgid "Connection has been refused"
msgstr "Veza je odbijena"
#: ../js/ui/components/telepathyClient.js:1330
#: ../js/ui/components/telepathyClient.js:1326
msgid "Connection can't be established"
msgstr "Veza ne može biti uspostavljena"
#: ../js/ui/components/telepathyClient.js:1332
#: ../js/ui/components/telepathyClient.js:1328
msgid "Connection has been lost"
msgstr "Veza je izgubljena"
#: ../js/ui/components/telepathyClient.js:1334
#: ../js/ui/components/telepathyClient.js:1330
msgid "This account is already connected to the server"
msgstr "Ovaj nalog je već povezan sa serverom"
#: ../js/ui/components/telepathyClient.js:1336
#: ../js/ui/components/telepathyClient.js:1332
msgid ""
"Connection has been replaced by a new connection using the same resource"
msgstr "Veza je zamenjena novom vezom koristeći isti resurs"
#: ../js/ui/components/telepathyClient.js:1338
#: ../js/ui/components/telepathyClient.js:1334
msgid "The account already exists on the server"
msgstr "Ovaj nalog već postoji na serveru"
#: ../js/ui/components/telepathyClient.js:1340
#: ../js/ui/components/telepathyClient.js:1336
msgid "Server is currently too busy to handle the connection"
msgstr "Server je trenutno previše zauzet da bi rukovao vezom"
#: ../js/ui/components/telepathyClient.js:1342
#: ../js/ui/components/telepathyClient.js:1338
msgid "Certificate has been revoked"
msgstr "Uverenje je opozvano"
#: ../js/ui/components/telepathyClient.js:1344
#: ../js/ui/components/telepathyClient.js:1340
msgid ""
"Certificate uses an insecure cipher algorithm or is cryptographically weak"
msgstr ""
"Uverenje koristi nesiguran algoritam šifrovanja ili je kriptografski slabo"
#: ../js/ui/components/telepathyClient.js:1346
#: ../js/ui/components/telepathyClient.js:1342
msgid ""
"The length of the server certificate, or the depth of the server certificate "
"chain, exceed the limits imposed by the cryptography library"
@ -872,26 +881,26 @@ msgstr ""
"Dužina uverenja servera, ili dubina lanca uverenja servera, premašuje granice "
"koje je zadala biblioteka šifrovanja"
#: ../js/ui/components/telepathyClient.js:1348
#: ../js/ui/components/telepathyClient.js:1344
msgid "Internal error"
msgstr "Unutrašnja greška"
#. translators: argument is the account name, like
#. * name@jabber.org for example.
#: ../js/ui/components/telepathyClient.js:1358
#: ../js/ui/components/telepathyClient.js:1354
#, c-format
msgid "Connection to %s failed"
msgstr "Povezivanje na „%s“ nije uspelo"
#: ../js/ui/components/telepathyClient.js:1367
#: ../js/ui/components/telepathyClient.js:1363
msgid "Reconnect"
msgstr "Ponovo se poveži"
#: ../js/ui/components/telepathyClient.js:1368
#: ../js/ui/components/telepathyClient.js:1364
msgid "Edit account"
msgstr "Uredi nalog"
#: ../js/ui/components/telepathyClient.js:1413
#: ../js/ui/components/telepathyClient.js:1409
msgid "Unknown reason"
msgstr "Nepoznat razlog"
@ -1080,23 +1089,23 @@ msgstr "Prikaži kod"
msgid "Web Page"
msgstr "Veb stranica"
#: ../js/ui/messageTray.js:1084
#: ../js/ui/messageTray.js:1081
msgid "Open"
msgstr "Otvori"
#: ../js/ui/messageTray.js:1091
#: ../js/ui/messageTray.js:1088
msgid "Remove"
msgstr "Ukloni"
#: ../js/ui/messageTray.js:1543
#: ../js/ui/messageTray.js:1540
msgid "Message Tray"
msgstr "Fioka poruka"
#: ../js/ui/messageTray.js:2549
#: ../js/ui/messageTray.js:2547
msgid "System Information"
msgstr "Podaci o sistemu"
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:374
#: ../js/ui/notificationDaemon.js:506 ../src/shell-app.c:373
msgctxt "program"
msgid "Unknown"
msgstr "Nepoznat"
@ -1152,11 +1161,11 @@ msgstr "Unesite naredbu:"
#. Translators: This is a time format for a date in
#. long format
#: ../js/ui/screenShield.js:80
#: ../js/ui/screenShield.js:79
msgid "%A, %B %d"
msgstr "%A, %d. %B"
#: ../js/ui/screenShield.js:144
#: ../js/ui/screenShield.js:143
#, c-format
msgid "%d new message"
msgid_plural "%d new messages"
@ -1165,7 +1174,7 @@ msgstr[1] "%d nove poruke"
msgstr[2] "%d novih poruka"
msgstr[3] "Jedna nova poruka"
#: ../js/ui/screenShield.js:146
#: ../js/ui/screenShield.js:145
#, c-format
msgid "%d new notification"
msgid_plural "%d new notifications"
@ -1629,59 +1638,59 @@ msgstr "Mikrofon"
msgid "Log in as another user"
msgstr "Prijavite se kao drugi korsnik"
#: ../js/ui/userMenu.js:181
#: ../js/ui/userMenu.js:180
msgid "Available"
msgstr "Dostupan"
#: ../js/ui/userMenu.js:184
#: ../js/ui/userMenu.js:183
msgid "Busy"
msgstr "Zauzet"
#: ../js/ui/userMenu.js:187
#: ../js/ui/userMenu.js:186
msgid "Invisible"
msgstr "Nevidljiv"
#: ../js/ui/userMenu.js:190
#: ../js/ui/userMenu.js:189
msgid "Away"
msgstr "Odsutan"
#: ../js/ui/userMenu.js:193
#: ../js/ui/userMenu.js:192
msgid "Idle"
msgstr "Miruje"
#: ../js/ui/userMenu.js:196
#: ../js/ui/userMenu.js:195
msgid "Unavailable"
msgstr "Nedostupan"
#: ../js/ui/userMenu.js:744
#: ../js/ui/userMenu.js:740
msgid "Notifications"
msgstr "Obaveštenja"
#: ../js/ui/userMenu.js:752
#: ../js/ui/userMenu.js:748
msgid "System Settings"
msgstr "Podešavanja sistema"
#: ../js/ui/userMenu.js:760
#: ../js/ui/userMenu.js:756
msgid "Switch User"
msgstr "Promeni korisnika"
#: ../js/ui/userMenu.js:765
#: ../js/ui/userMenu.js:761
msgid "Log Out"
msgstr "Odjavi me"
#: ../js/ui/userMenu.js:770
#: ../js/ui/userMenu.js:766
msgid "Lock"
msgstr "Zaključaj"
#: ../js/ui/userMenu.js:785
#: ../js/ui/userMenu.js:781
msgid "Install Updates & Restart"
msgstr "Instaliraj ažuriranja i ponovo pokreni"
#: ../js/ui/userMenu.js:803
#: ../js/ui/userMenu.js:799
msgid "Your chat status will be set to busy"
msgstr "Vaše stanje ćaskanja će biti postavljeno na zauzeto"
#: ../js/ui/userMenu.js:804
#: ../js/ui/userMenu.js:800
msgid ""
"Notifications are now disabled, including chat messages. Your online status "
"has been adjusted to let others know that you might not see their messages."
@ -1690,15 +1699,15 @@ msgstr ""
"mreži je podešeno tako da će ostali znati da vi ne možete videti njihove "
"poruke."
#: ../js/ui/viewSelector.js:85
#: ../js/ui/viewSelector.js:87
msgid "Windows"
msgstr "Prozori"
#: ../js/ui/viewSelector.js:89
#: ../js/ui/viewSelector.js:91
msgid "Applications"
msgstr "Programi"
#: ../js/ui/viewSelector.js:93
#: ../js/ui/viewSelector.js:95
msgid "Search"
msgstr "Traži"
@ -1771,7 +1780,7 @@ msgstr "Koristi naročit režim, npr. „gdm“ za ekran prijavljivanja"
msgid "List possible modes"
msgstr "Ispisuje moguće režime"
#: ../src/shell-app.c:622
#: ../src/shell-app.c:621
#, c-format
msgid "Failed to launch '%s'"
msgstr "Ne mogu da pokrenem „%s“"

View File

@ -113,7 +113,6 @@ shell_public_headers_h = \
shell-generic-container.h \
shell-gtk-embed.h \
shell-global.h \
shell-idle-monitor.h \
shell-invert-lightness-effect.h \
shell-mobile-providers.h \
shell-mount-operation.h \
@ -158,7 +157,6 @@ libgnome_shell_la_SOURCES = \
shell-generic-container.c \
shell-gtk-embed.c \
shell-global.c \
shell-idle-monitor.c \
shell-invert-lightness-effect.c \
shell-keyring-prompt.h \
shell-keyring-prompt.c \

View File

@ -240,8 +240,6 @@ main (int argc,
{
guint name_owner_id;
g_type_init ();
introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
g_assert (introspection_data != NULL);

View File

@ -361,8 +361,6 @@ main (int argc, char **argv)
int ecode;
TpDebugSender *sender;
g_type_init ();
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);

View File

@ -92,7 +92,6 @@ main(int argc, char **argv)
g_error ("option parsing failed: %s", error->message);
setlocale (LC_ALL, "");
g_type_init ();
_shell_global_init (NULL);
global = shell_global_get ();

View File

@ -1693,43 +1693,3 @@ shell_global_get_session_mode (ShellGlobal *global)
return global->session_mode;
}
/**
* shell_global_create_xrootpmap_texture:
* @global: The #ShellGlobal
*
* This returns the _XROOTPMAP_ID pixmap that gdm should have stuffed
* in the root window. The goal here is to allow a smooth fade between
* plymouth and the shell greeter. This is also a workaround for gjs not
* supporting raw xlib types.
*
* Returns: (transfer floating): A #ClutterActor that represents the
* _XROOTPMAP_ID pixmap property from the root window.
*/
ClutterActor *
shell_global_create_xrootpmap_texture (ShellGlobal *global)
{
Atom res_type;
int res_format;
unsigned long res_nitems, bytesafter;
unsigned char *data;
Pixmap root_pixmap_id = None;
g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
if (XGetWindowProperty (global->xdisplay,
DefaultRootWindow (global->xdisplay),
XInternAtom (global->xdisplay, "_XROOTPMAP_ID", False),
0, G_MAXLONG, False, XA_PIXMAP,
&res_type, &res_format, &res_nitems, &bytesafter, &data) == Success)
{
if (res_type == XA_PIXMAP && res_format == 32 && res_nitems == 1)
root_pixmap_id = * (Pixmap *) data;
XFree (data);
}
if (root_pixmap_id != None)
return clutter_x11_texture_pixmap_new_with_pixmap (root_pixmap_id);
else
return NULL;
}

View File

@ -136,8 +136,6 @@ void shell_global_reexec_self (ShellGlobal *global);
const char * shell_global_get_session_mode (ShellGlobal *global);
ClutterActor * shell_global_create_xrootpmap_texture (ShellGlobal *global);
G_END_DECLS
#endif /* __SHELL_GLOBAL_H__ */

View File

@ -1,429 +0,0 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Adapted from gnome-session/gnome-session/gs-idle-monitor.c
*
* Copyright (C) 2012 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: William Jon McCann <mccann@jhu.edu>
*
*/
#include "config.h"
#include <time.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/extensions/sync.h>
#include <glib.h>
#include <gdk/gdkx.h>
#include <gdk/gdk.h>
#include "shell-idle-monitor.h"
#define SHELL_IDLE_MONITOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitorPrivate))
struct ShellIdleMonitorPrivate
{
Display *display;
GHashTable *watches;
int sync_event_base;
XSyncCounter counter;
};
typedef struct
{
Display *display;
guint id;
XSyncValue interval;
ShellIdleMonitorWatchFunc callback;
gpointer user_data;
GDestroyNotify notify;
XSyncAlarm xalarm_positive;
XSyncAlarm xalarm_negative;
} ShellIdleMonitorWatch;
static guint32 watch_serial = 1;
G_DEFINE_TYPE (ShellIdleMonitor, shell_idle_monitor, G_TYPE_OBJECT)
static gint64
_xsyncvalue_to_int64 (XSyncValue value)
{
return ((guint64) XSyncValueHigh32 (value)) << 32
| (guint64) XSyncValueLow32 (value);
}
static XSyncValue
_int64_to_xsyncvalue (gint64 value)
{
XSyncValue ret;
XSyncIntsToValue (&ret, value, ((guint64)value) >> 32);
return ret;
}
static void
shell_idle_monitor_dispose (GObject *object)
{
ShellIdleMonitor *monitor;
monitor = SHELL_IDLE_MONITOR (object);
if (monitor->priv->watches != NULL) {
g_hash_table_destroy (monitor->priv->watches);
monitor->priv->watches = NULL;
}
G_OBJECT_CLASS (shell_idle_monitor_parent_class)->dispose (object);
}
static gboolean
_find_alarm (gpointer key,
ShellIdleMonitorWatch *watch,
XSyncAlarm *alarm)
{
/* g_debug ("Searching for %d in %d,%d", (int)*alarm, (int)watch->xalarm_positive, (int)watch->xalarm_negative); */
if (watch->xalarm_positive == *alarm
|| watch->xalarm_negative == *alarm) {
return TRUE;
}
return FALSE;
}
static ShellIdleMonitorWatch *
find_watch_for_alarm (ShellIdleMonitor *monitor,
XSyncAlarm alarm)
{
ShellIdleMonitorWatch *watch;
watch = g_hash_table_find (monitor->priv->watches,
(GHRFunc)_find_alarm,
&alarm);
return watch;
}
static void
handle_alarm_notify_event (ShellIdleMonitor *monitor,
XSyncAlarmNotifyEvent *alarm_event)
{
ShellIdleMonitorWatch *watch;
gboolean condition;
if (alarm_event->state == XSyncAlarmDestroyed) {
return;
}
watch = find_watch_for_alarm (monitor, alarm_event->alarm);
if (watch == NULL) {
/* g_debug ("Unable to find watch for alarm %d", (int)alarm_event->alarm); */
return;
}
/* g_debug ("Watch %d fired, idle time = %" G_GINT64_FORMAT,
watch->id,
_xsyncvalue_to_int64 (alarm_event->counter_value)); */
if (alarm_event->alarm == watch->xalarm_positive) {
condition = TRUE;
} else {
condition = FALSE;
}
if (watch->callback != NULL) {
watch->callback (monitor,
watch->id,
condition,
watch->user_data);
}
}
static GdkFilterReturn
xevent_filter (GdkXEvent *xevent,
GdkEvent *event,
ShellIdleMonitor *monitor)
{
XEvent *ev;
XSyncAlarmNotifyEvent *alarm_event;
ev = xevent;
if (ev->xany.type != monitor->priv->sync_event_base + XSyncAlarmNotify) {
return GDK_FILTER_CONTINUE;
}
alarm_event = xevent;
handle_alarm_notify_event (monitor, alarm_event);
return GDK_FILTER_CONTINUE;
}
static gboolean
init_xsync (ShellIdleMonitor *monitor)
{
int sync_error_base;
int res;
int major;
int minor;
int i;
int ncounters;
XSyncSystemCounter *counters;
res = XSyncQueryExtension (monitor->priv->display,
&monitor->priv->sync_event_base,
&sync_error_base);
if (! res) {
g_warning ("ShellIdleMonitor: Sync extension not present");
return FALSE;
}
res = XSyncInitialize (monitor->priv->display, &major, &minor);
if (! res) {
g_warning ("ShellIdleMonitor: Unable to initialize Sync extension");
return FALSE;
}
counters = XSyncListSystemCounters (monitor->priv->display, &ncounters);
for (i = 0; i < ncounters; i++) {
if (counters[i].name != NULL
&& strcmp (counters[i].name, "IDLETIME") == 0) {
monitor->priv->counter = counters[i].counter;
break;
}
}
XSyncFreeSystemCounterList (counters);
if (monitor->priv->counter == None) {
g_warning ("ShellIdleMonitor: IDLETIME counter not found");
return FALSE;
}
gdk_window_add_filter (NULL, (GdkFilterFunc)xevent_filter, monitor);
return TRUE;
}
static GObject *
shell_idle_monitor_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_properties)
{
ShellIdleMonitor *monitor;
monitor = SHELL_IDLE_MONITOR (G_OBJECT_CLASS (shell_idle_monitor_parent_class)->constructor (type,
n_construct_properties,
construct_properties));
monitor->priv->display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ());
if (! init_xsync (monitor)) {
g_object_unref (monitor);
return NULL;
}
return G_OBJECT (monitor);
}
static void
shell_idle_monitor_class_init (ShellIdleMonitorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->dispose = shell_idle_monitor_dispose;
object_class->constructor = shell_idle_monitor_constructor;
g_type_class_add_private (klass, sizeof (ShellIdleMonitorPrivate));
}
static guint32
get_next_watch_serial (void)
{
guint32 serial;
serial = watch_serial++;
if ((gint32)watch_serial < 0) {
watch_serial = 1;
}
/* FIXME: make sure it isn't in the hash */
return serial;
}
static ShellIdleMonitorWatch *
idle_monitor_watch_new (guint interval)
{
ShellIdleMonitorWatch *watch;
watch = g_slice_new0 (ShellIdleMonitorWatch);
watch->interval = _int64_to_xsyncvalue ((gint64)interval);
watch->id = get_next_watch_serial ();
watch->xalarm_positive = None;
watch->xalarm_negative = None;
return watch;
}
static void
idle_monitor_watch_free (ShellIdleMonitorWatch *watch)
{
if (watch == NULL) {
return;
}
if (watch->notify != NULL) {
watch->notify (watch->user_data);
}
if (watch->xalarm_positive != None) {
XSyncDestroyAlarm (watch->display, watch->xalarm_positive);
}
if (watch->xalarm_negative != None) {
XSyncDestroyAlarm (watch->display, watch->xalarm_negative);
}
g_slice_free (ShellIdleMonitorWatch, watch);
}
static void
shell_idle_monitor_init (ShellIdleMonitor *monitor)
{
monitor->priv = SHELL_IDLE_MONITOR_GET_PRIVATE (monitor);
monitor->priv->watches = g_hash_table_new_full (NULL,
NULL,
NULL,
(GDestroyNotify)idle_monitor_watch_free);
monitor->priv->counter = None;
}
/**
* shell_idle_monitor_get:
*
* Returns: (transfer none): the global #ShellIdleMonitor.
*/
ShellIdleMonitor *
shell_idle_monitor_get (void)
{
static ShellIdleMonitor *idle_monitor;
if (G_UNLIKELY (idle_monitor == NULL))
idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR,
NULL);
return idle_monitor;
}
static gboolean
_xsync_alarm_set (ShellIdleMonitor *monitor,
ShellIdleMonitorWatch *watch)
{
XSyncAlarmAttributes attr;
XSyncValue delta;
guint flags;
flags = XSyncCACounter
| XSyncCAValueType
| XSyncCATestType
| XSyncCAValue
| XSyncCADelta
| XSyncCAEvents;
XSyncIntToValue (&delta, 0);
attr.trigger.counter = monitor->priv->counter;
attr.trigger.value_type = XSyncAbsolute;
attr.trigger.wait_value = watch->interval;
attr.delta = delta;
attr.events = TRUE;
attr.trigger.test_type = XSyncPositiveTransition;
if (watch->xalarm_positive != None) {
/* g_debug ("ShellIdleMonitor: updating alarm for positive transition wait=%" G_GINT64_FORMAT,
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
XSyncChangeAlarm (monitor->priv->display, watch->xalarm_positive, flags, &attr);
} else {
/* g_debug ("ShellIdleMonitor: creating new alarm for positive transition wait=%" G_GINT64_FORMAT,
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
watch->xalarm_positive = XSyncCreateAlarm (monitor->priv->display, flags, &attr);
}
attr.trigger.wait_value = _int64_to_xsyncvalue (_xsyncvalue_to_int64 (watch->interval) - 1);
attr.trigger.test_type = XSyncNegativeTransition;
if (watch->xalarm_negative != None) {
/* g_debug ("ShellIdleMonitor: updating alarm for negative transition wait=%" G_GINT64_FORMAT,
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
XSyncChangeAlarm (monitor->priv->display, watch->xalarm_negative, flags, &attr);
} else {
/* g_debug ("ShellIdleMonitor: creating new alarm for negative transition wait=%" G_GINT64_FORMAT,
_xsyncvalue_to_int64 (attr.trigger.wait_value)); */
watch->xalarm_negative = XSyncCreateAlarm (monitor->priv->display, flags, &attr);
}
return TRUE;
}
guint
shell_idle_monitor_add_watch (ShellIdleMonitor *monitor,
guint interval,
ShellIdleMonitorWatchFunc callback,
gpointer user_data,
GDestroyNotify notify)
{
ShellIdleMonitorWatch *watch;
g_return_val_if_fail (SHELL_IS_IDLE_MONITOR (monitor), 0);
g_return_val_if_fail (callback != NULL, 0);
watch = idle_monitor_watch_new (interval);
watch->display = monitor->priv->display;
watch->callback = callback;
watch->user_data = user_data;
watch->notify = notify;
_xsync_alarm_set (monitor, watch);
g_hash_table_insert (monitor->priv->watches,
GUINT_TO_POINTER (watch->id),
watch);
return watch->id;
}
void
shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor,
guint id)
{
g_return_if_fail (SHELL_IS_IDLE_MONITOR (monitor));
g_hash_table_remove (monitor->priv->watches,
GUINT_TO_POINTER (id));
}
gint64
shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor)
{
XSyncValue value;
if (!XSyncQueryCounter (monitor->priv->display, monitor->priv->counter, &value))
return FALSE;
return _xsyncvalue_to_int64 (value);
}

View File

@ -1,74 +0,0 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
*
* Adapted from gnome-session/gnome-session/gs-idle-monitor.h
*
* Copyright (C) 2012 Red Hat, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Authors: William Jon McCann <mccann@jhu.edu>
*
*/
#ifndef __SHELL_IDLE_MONITOR_H
#define __SHELL_IDLE_MONITOR_H
#include <glib-object.h>
G_BEGIN_DECLS
#define SHELL_TYPE_IDLE_MONITOR (shell_idle_monitor_get_type ())
#define SHELL_IDLE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitor))
#define SHELL_IDLE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitorClass))
#define SHELL_IS_IDLE_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHELL_TYPE_IDLE_MONITOR))
#define SHELL_IS_IDLE_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHELL_TYPE_IDLE_MONITOR))
#define SHELL_IDLE_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SHELL_TYPE_IDLE_MONITOR, ShellIdleMonitorClass))
typedef struct ShellIdleMonitorPrivate ShellIdleMonitorPrivate;
typedef struct
{
GObject parent;
ShellIdleMonitorPrivate *priv;
} ShellIdleMonitor;
typedef struct
{
GObjectClass parent_class;
} ShellIdleMonitorClass;
typedef void (*ShellIdleMonitorWatchFunc) (ShellIdleMonitor *monitor,
guint id,
gboolean condition,
gpointer user_data);
GType shell_idle_monitor_get_type (void);
ShellIdleMonitor * shell_idle_monitor_get (void);
guint shell_idle_monitor_add_watch (ShellIdleMonitor *monitor,
guint interval,
ShellIdleMonitorWatchFunc callback,
gpointer user_data,
GDestroyNotify notify);
void shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor,
guint id);
gint64 shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor);
G_END_DECLS
#endif /* __SHELL_IDLE_MONITOR_H */

View File

@ -11,6 +11,8 @@
#define GST_USE_UNSTABLE_API
#include <gst/gst.h>
#include <gtk/gtk.h>
#include "shell-recorder-src.h"
#include "shell-recorder.h"
#include "shell-screen-grabber.h"
@ -65,7 +67,7 @@ struct _ShellRecorder {
int framerate;
char *pipeline_description;
char *filename;
char *file_template;
/* We might have multiple pipelines that are finishing encoding
* to go along with the current pipeline where we are recording.
@ -90,6 +92,7 @@ struct _RecorderPipeline
GstElement *pipeline;
GstElement *src;
int outfile;
char *filename;
};
static void recorder_set_stage (ShellRecorder *recorder,
@ -98,8 +101,8 @@ static void recorder_set_framerate (ShellRecorder *recorder,
int framerate);
static void recorder_set_pipeline (ShellRecorder *recorder,
const char *pipeline);
static void recorder_set_filename (ShellRecorder *recorder,
const char *filename);
static void recorder_set_file_template (ShellRecorder *recorder,
const char *file_template);
static void recorder_pipeline_set_caps (RecorderPipeline *pipeline);
static void recorder_pipeline_closed (RecorderPipeline *pipeline);
@ -109,7 +112,7 @@ enum {
PROP_STAGE,
PROP_FRAMERATE,
PROP_PIPELINE,
PROP_FILENAME
PROP_FILE_TEMPLATE
};
G_DEFINE_TYPE(ShellRecorder, shell_recorder, G_TYPE_OBJECT);
@ -269,18 +272,6 @@ static void
shell_recorder_finalize (GObject *object)
{
ShellRecorder *recorder = SHELL_RECORDER (object);
GSList *l;
for (l = recorder->pipelines; l; l = l->next)
{
RecorderPipeline *pipeline = l->data;
/* Remove the back-reference. The pipeline will be freed
* when it finishes. (Or when the process exits, but that's
* out of our control.)
*/
pipeline->recorder = NULL;
}
if (recorder->update_memory_used_timeout)
g_source_remove (recorder->update_memory_used_timeout);
@ -290,7 +281,7 @@ shell_recorder_finalize (GObject *object)
recorder_set_stage (recorder, NULL);
recorder_set_pipeline (recorder, NULL);
recorder_set_filename (recorder, NULL);
recorder_set_file_template (recorder, NULL);
g_object_unref (recorder->grabber);
@ -917,22 +908,22 @@ recorder_set_pipeline (ShellRecorder *recorder,
}
static void
recorder_set_filename (ShellRecorder *recorder,
const char *filename)
recorder_set_file_template (ShellRecorder *recorder,
const char *file_template)
{
if (filename == recorder->filename ||
(filename && recorder->filename && strcmp (recorder->filename, filename) == 0))
if (file_template == recorder->file_template ||
(file_template && recorder->file_template && strcmp (recorder->file_template, file_template) == 0))
return;
if (recorder->current_pipeline)
shell_recorder_close (recorder);
if (recorder->filename)
g_free (recorder->filename);
if (recorder->file_template)
g_free (recorder->file_template);
recorder->filename = g_strdup (filename);
recorder->file_template = g_strdup (file_template);
g_object_notify (G_OBJECT (recorder), "filename");
g_object_notify (G_OBJECT (recorder), "file-template");
}
static void
@ -954,8 +945,8 @@ shell_recorder_set_property (GObject *object,
case PROP_PIPELINE:
recorder_set_pipeline (recorder, g_value_get_string (value));
break;
case PROP_FILENAME:
recorder_set_filename (recorder, g_value_get_string (value));
case PROP_FILE_TEMPLATE:
recorder_set_file_template (recorder, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -982,8 +973,8 @@ shell_recorder_get_property (GObject *object,
case PROP_PIPELINE:
g_value_set_string (value, recorder->pipeline_description);
break;
case PROP_FILENAME:
g_value_set_string (value, recorder->filename);
case PROP_FILE_TEMPLATE:
g_value_set_string (value, recorder->file_template);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -1027,9 +1018,9 @@ shell_recorder_class_init (ShellRecorderClass *klass)
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_FILENAME,
g_param_spec_string ("filename",
"Filename",
PROP_FILE_TEMPLATE,
g_param_spec_string ("file-template",
"File Template",
"The filename template to use for output files",
NULL,
G_PARAM_READWRITE));
@ -1149,13 +1140,14 @@ get_absolute_path (char *maybe_relative)
* be opened.
*/
static int
recorder_open_outfile (ShellRecorder *recorder)
recorder_open_outfile (ShellRecorder *recorder,
char **outfilename)
{
const char *pattern;
int flags;
int outfile = -1;
pattern = recorder->filename;
pattern = recorder->file_template;
if (!pattern)
return -1;
@ -1230,8 +1222,12 @@ recorder_open_outfile (ShellRecorder *recorder)
{
g_printerr ("Recording to %s\n", path);
if (outfilename != NULL)
*outfilename = path;
else
g_free (path);
g_string_free (filename, TRUE);
g_free (path);
goto out;
}
@ -1269,7 +1265,8 @@ recorder_pipeline_add_sink (RecorderPipeline *pipeline)
return TRUE;
}
pipeline->outfile = recorder_open_outfile (pipeline->recorder);
pipeline->outfile = recorder_open_outfile (pipeline->recorder,
&pipeline->filename);
if (pipeline->outfile == -1)
goto out;
@ -1344,6 +1341,10 @@ recorder_pipeline_free (RecorderPipeline *pipeline)
if (pipeline->outfile != -1)
close (pipeline->outfile);
g_free (pipeline->filename);
g_clear_object (&pipeline->recorder);
g_free (pipeline);
}
@ -1393,6 +1394,10 @@ recorder_pipeline_closed (RecorderPipeline *pipeline)
if (pipeline->recorder)
{
GtkRecentManager *recent_manager;
GFile *file;
char *uri;
ShellRecorder *recorder = pipeline->recorder;
if (pipeline == recorder->current_pipeline)
{
@ -1401,6 +1406,15 @@ recorder_pipeline_closed (RecorderPipeline *pipeline)
shell_recorder_close (recorder);
}
recent_manager = gtk_recent_manager_get_default ();
file = g_file_new_for_path (pipeline->filename);
uri = g_file_get_uri (file);
gtk_recent_manager_add_item (recent_manager,
uri);
g_free (uri);
g_object_unref (file);
recorder->pipelines = g_slist_remove (recorder->pipelines, pipeline);
}
@ -1452,7 +1466,7 @@ recorder_open_pipeline (ShellRecorder *recorder)
GstBus *bus;
pipeline = g_new0(RecorderPipeline, 1);
pipeline->recorder = recorder;
pipeline->recorder = g_object_ref (recorder);
pipeline->outfile = - 1;
pipeline_description = recorder->pipeline_description;
@ -1555,10 +1569,10 @@ shell_recorder_set_framerate (ShellRecorder *recorder,
}
/**
* shell_recorder_set_filename:
* shell_recorder_set_file_template:
* @recorder: the #ShellRecorder
* @filename: the filename template to use for output files,
* or %NULL for the defalt value.
* @file_template: the filename template to use for output files,
* or %NULL for the defalt value.
*
* Sets the filename that will be used when creating output
* files. This is only used if the configured pipeline has an
@ -1573,12 +1587,12 @@ shell_recorder_set_framerate (ShellRecorder *recorder,
* The default value is 'shell-%d%u-%c.ogg'.
*/
void
shell_recorder_set_filename (ShellRecorder *recorder,
const char *filename)
shell_recorder_set_file_template (ShellRecorder *recorder,
const char *file_template)
{
g_return_if_fail (SHELL_IS_RECORDER (recorder));
recorder_set_filename (recorder, filename);
recorder_set_file_template (recorder, file_template);
}
@ -1593,7 +1607,7 @@ shell_recorder_set_filename (ShellRecorder *recorder,
* 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. (See shell_recorder_set_filename().) However
* output file. (See shell_recorder_set_file_template().) 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.

View File

@ -32,8 +32,8 @@ ShellRecorder *shell_recorder_new (ClutterStage *stage);
void shell_recorder_set_framerate (ShellRecorder *recorder,
int framerate);
void shell_recorder_set_filename (ShellRecorder *recorder,
const char *filename);
void shell_recorder_set_file_template (ShellRecorder *recorder,
const char *file_template);
void shell_recorder_set_pipeline (ShellRecorder *recorder,
const char *pipeline);
gboolean shell_recorder_record (ShellRecorder *recorder);

View File

@ -170,16 +170,7 @@ shell_screen_grabber_grab (ShellScreenGrabber *grabber,
* top-left */
glGetIntegerv (GL_VIEWPORT, vp_size);
y = vp_size[3] - (y + height);
/* the "big-endian" version actually works for both, but the litle-endian
* version has been better tested with a range of drivers, so we'll
* keep on using it on little-endian.
*/
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
glReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_BYTE, 0);
#else
glReadPixels (x, y, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, 0);
#endif
mapped_data = pf_glMapBufferARB (GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB);

View File

@ -42,6 +42,9 @@ struct _StTextureCachePrivate
/* Presently this is used to de-duplicate requests for GIcons and async URIs. */
GHashTable *outstanding_requests; /* char * -> AsyncTextureLoadData * */
/* File monitors to evict cache data on changes */
GHashTable *file_monitors; /* char * -> GFileMonitor * */
};
static void st_texture_cache_dispose (GObject *object);
@ -50,6 +53,7 @@ static void st_texture_cache_finalize (GObject *object);
enum
{
ICON_THEME_CHANGED,
TEXTURE_FILE_CHANGED,
LAST_SIGNAL
};
@ -92,33 +96,14 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
0, /* no default handler slot */
NULL, NULL, NULL,
G_TYPE_NONE, 0);
}
/**
* st_texture_cache_clear_uri:
* @cache: A #StTextureCache
* @uri: URI of cached object
*
* If the given @uri is known to have been modified
* externally, this function may be used to invalidate
* the in-memory cache.
*/
void
st_texture_cache_clear_uri (StTextureCache *cache,
const char *uri)
{
char *key;
g_return_if_fail (ST_IS_TEXTURE_CACHE (cache));
g_return_if_fail (uri != NULL);
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
signals[TEXTURE_FILE_CHANGED] =
g_signal_new ("texture-file-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, /* no default handler slot */
NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_STRING);
}
/* Evicts all cached textures for named icons */
@ -164,6 +149,9 @@ st_texture_cache_init (StTextureCache *self)
g_free, cogl_handle_unref);
self->priv->outstanding_requests = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
self->priv->file_monitors = g_hash_table_new_full (g_str_hash, g_str_equal,
g_object_unref, g_object_unref);
}
static void
@ -179,13 +167,9 @@ st_texture_cache_dispose (GObject *object)
self->priv->icon_theme = NULL;
}
if (self->priv->keyed_cache)
g_hash_table_destroy (self->priv->keyed_cache);
self->priv->keyed_cache = NULL;
if (self->priv->outstanding_requests)
g_hash_table_destroy (self->priv->outstanding_requests);
self->priv->outstanding_requests = NULL;
g_clear_pointer (&self->priv->keyed_cache, g_hash_table_destroy);
g_clear_pointer (&self->priv->outstanding_requests, g_hash_table_destroy);
g_clear_pointer (&self->priv->file_monitors, g_hash_table_destroy);
G_OBJECT_CLASS (st_texture_cache_parent_class)->dispose (object);
}
@ -1039,6 +1023,52 @@ load_from_pixbuf (GdkPixbuf *pixbuf)
return CLUTTER_ACTOR (texture);
}
static void
file_changed_cb (GFileMonitor *monitor,
GFile *file,
GFile *other,
GFileMonitorEvent event_type,
gpointer user_data)
{
StTextureCache *cache = user_data;
char *uri, *key;
if (event_type != G_FILE_MONITOR_EVENT_CHANGED)
return;
uri = g_file_get_uri (file);
key = g_strconcat (CACHE_PREFIX_URI, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
key = g_strconcat (CACHE_PREFIX_URI_FOR_CAIRO, uri, NULL);
g_hash_table_remove (cache->priv->keyed_cache, key);
g_free (key);
g_signal_emit (cache, signals[TEXTURE_FILE_CHANGED], 0, uri);
g_free (uri);
}
static void
ensure_monitor_for_uri (StTextureCache *cache,
const gchar *uri)
{
StTextureCachePrivate *priv = cache->priv;
GFile *file = g_file_new_for_uri (uri);
if (g_hash_table_lookup (priv->file_monitors, uri) == NULL)
{
GFileMonitor *monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE,
NULL, NULL);
g_signal_connect (monitor, "changed",
G_CALLBACK (file_changed_cb), cache);
g_hash_table_insert (priv->file_monitors, g_strdup (uri), monitor);
}
g_object_unref (file);
}
typedef struct {
gchar *path;
gint grid_width, grid_height;
@ -1161,41 +1191,6 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
return actor;
}
/**
* st_texture_cache_load_icon_name:
* @cache: The texture cache instance
* @theme_node: (allow-none): a #StThemeNode
* @name: Name of a themed icon
* @size: Size of themed icon
*
* Load a themed icon into a texture. The colors used for symbolic
* icons are derived from @theme_node.
*
* Return Value: (transfer none): A new #ClutterTexture for the icon
*/
ClutterActor *
st_texture_cache_load_icon_name (StTextureCache *cache,
StThemeNode *theme_node,
const char *name,
gint size)
{
ClutterActor *texture;
GIcon *themed;
themed = g_themed_icon_new_with_default_fallbacks (name);
texture = load_gicon_with_colors (cache, themed, size,
theme_node ? st_theme_node_get_icon_colors (theme_node) : NULL);
g_object_unref (themed);
if (texture == NULL)
{
texture = (ClutterActor *) create_default_texture ();
clutter_actor_set_size (texture, size, size);
}
return texture;
}
/**
* st_texture_cache_load_uri_async:
* @cache: The texture cache instance
@ -1246,6 +1241,8 @@ st_texture_cache_load_uri_async (StTextureCache *cache,
load_texture_async (cache, request);
}
ensure_monitor_for_uri (cache, uri);
return CLUTTER_ACTOR (texture);
}
@ -1283,6 +1280,8 @@ st_texture_cache_load_uri_sync_to_cogl_texture (StTextureCache *cache,
else
cogl_handle_ref (texdata);
ensure_monitor_for_uri (cache, uri);
out:
g_free (key);
return texdata;
@ -1322,6 +1321,8 @@ st_texture_cache_load_uri_sync_to_cairo_surface (StTextureCache *cache,
else
cairo_surface_reference (surface);
ensure_monitor_for_uri (cache, uri);
out:
g_free (key);
return surface;

View File

@ -68,9 +68,6 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST;
StTextureCache* st_texture_cache_get_default (void);
void st_texture_cache_clear_uri (StTextureCache *cache,
const gchar *uri);
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,
const gchar *path,
@ -81,11 +78,6 @@ ClutterActor *st_texture_cache_bind_pixbuf_property (StTextureCache *cache,
GObject *object,
const char *property_name);
ClutterActor *st_texture_cache_load_icon_name (StTextureCache *cache,
StThemeNode *theme_node,
const char *name,
gint size);
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
StThemeNode *theme_node,
GIcon *icon,

View File

@ -1018,6 +1018,7 @@ _st_theme_resolve_url (StTheme *theme,
const char *base_filename = NULL;
char *dirname;
char *filename;
char *canonicalized_path;
/* Handle absolute file:/ URLs */
if (g_str_has_prefix (url, "file:") ||
@ -1034,7 +1035,7 @@ _st_theme_resolve_url (StTheme *theme,
g_error_free (error);
}
return NULL;
return filename;
}
/* Guard against http:/ URLs */
@ -1050,7 +1051,19 @@ _st_theme_resolve_url (StTheme *theme,
/* Assume anything else is a relative URL, and "resolve" it
*/
if (url[0] == '/')
return g_strdup (url);
{
canonicalized_path = realpath (url, NULL);
if (g_mem_is_system_malloc ())
{
filename = canonicalized_path;
}
else
{
filename = g_strdup (canonicalized_path);
free (canonicalized_path);
}
return filename;
}
base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet);
@ -1062,7 +1075,19 @@ _st_theme_resolve_url (StTheme *theme,
dirname = g_path_get_dirname (base_filename);
filename = g_build_filename (dirname, url, NULL);
canonicalized_path = realpath (filename, NULL);
g_free (dirname);
g_free (filename);
if (g_mem_is_system_malloc ())
{
filename = canonicalized_path;
}
else
{
filename = g_strdup (canonicalized_path);
free (canonicalized_path);
}
return filename;
}

View File

@ -269,6 +269,39 @@ st_widget_remove_transition (StWidget *widget)
}
}
static void
st_widget_texture_cache_changed (StTextureCache *cache,
const char *uri,
gpointer user_data)
{
StWidget *actor = ST_WIDGET (user_data);
StThemeNode *node = actor->priv->theme_node;
StBorderImage *border_image;
char *path;
gboolean changed;
if (node == NULL)
return;
path = g_filename_from_uri (uri, NULL, NULL);
changed = g_strcmp0 (st_theme_node_get_background_image (node), path) == 0;
border_image = st_theme_node_get_border_image (node);
if (!changed && border_image)
changed = strcmp (st_border_image_get_filename (border_image), path) == 0;
g_free (path);
if (!changed)
return;
st_theme_node_invalidate_paint_state (node);
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
}
static void
st_widget_dispose (GObject *gobject)
{
@ -302,6 +335,10 @@ st_widget_dispose (GObject *gobject)
priv->label_actor = NULL;
}
g_signal_handlers_disconnect_by_func (st_texture_cache_get_default (),
st_widget_texture_cache_changed,
actor);
g_clear_object (&priv->prev_first_child);
g_clear_object (&priv->prev_last_child);
@ -1470,6 +1507,8 @@ st_widget_init (StWidget *actor)
g_signal_connect (actor, "notify::first-child", G_CALLBACK (st_widget_first_child_notify), NULL);
g_signal_connect (actor, "notify::last-child", G_CALLBACK (st_widget_last_child_notify), NULL);
g_signal_connect (st_texture_cache_get_default (), "texture-file-changed",
G_CALLBACK (st_widget_texture_cache_changed), actor);
}
static void
@ -2760,38 +2799,3 @@ st_widget_get_focus_chain (StWidget *widget)
{
return ST_WIDGET_GET_CLASS (widget)->get_focus_chain (widget);
}
/**
* st_widget_clear_background_image:
* @widget: An #StWidget
*
* Force a reload of the background-image property. Usually properties
* are cached heavily to avoid unnecessary work on paint, this method
* will force the cache to be recreated.
*/
void
st_widget_clear_background_image (StWidget *actor)
{
GFile *file;
const char *path;
char *uri;
if (actor->priv->theme_node == NULL)
return;
path = st_theme_node_get_background_image (actor->priv->theme_node);
if (path == NULL)
return;
file = g_file_new_for_path (path);
uri = g_file_get_uri (file);
st_texture_cache_clear_uri (st_texture_cache_get_default (), uri);
st_theme_node_invalidate_paint_state (actor->priv->theme_node);
if (CLUTTER_ACTOR_IS_MAPPED (CLUTTER_ACTOR (actor)))
clutter_actor_queue_redraw (CLUTTER_ACTOR (actor));
g_object_unref (file);
g_free (uri);
}

View File

@ -142,8 +142,6 @@ ClutterActor * st_widget_get_label_actor (StWidget *widg
void st_widget_set_label_actor (StWidget *widget,
ClutterActor *label);
void st_widget_clear_background_image (StWidget *widget);
/* Only to be used by sub-classes of StWidget */
void st_widget_style_changed (StWidget *widget);
StThemeNode * st_widget_get_theme_node (StWidget *widget);

View File

@ -3,6 +3,7 @@
#define GST_USE_UNSTABLE_API
#include "shell-recorder.h"
#include <clutter/clutter.h>
#include <gtk/gtk.h>
#include <gst/gst.h>
/* Very simple test of the ShellRecorder class; shows some text strings
@ -11,23 +12,34 @@
static ShellRecorder *recorder = NULL;
static gboolean
stop_recording_timeout (gpointer data)
stop_recording_timeout (ClutterActor *stage)
{
if (recorder)
{
shell_recorder_close (recorder);
/* quit when the recorder finishes closing
*/
g_object_weak_ref (G_OBJECT (recorder),
(GWeakNotify)
clutter_actor_destroy,
stage);
g_object_unref (recorder);
}
clutter_main_quit ();
else
{
clutter_actor_destroy (stage);
}
return FALSE;
}
static void
on_animation_completed (ClutterAnimation *animation)
on_animation_completed (ClutterAnimation *animation,
ClutterStage *stage)
{
g_timeout_add (1000, stop_recording_timeout, NULL);
g_timeout_add (1000, (GSourceFunc) stop_recording_timeout, stage);
}
static void
@ -35,7 +47,7 @@ on_stage_realized (ClutterActor *stage,
gpointer data)
{
recorder = shell_recorder_new (CLUTTER_STAGE (stage));
shell_recorder_set_filename (recorder, "test-recorder.ogg");
shell_recorder_set_file_template (recorder, "test-recorder.ogg");
shell_recorder_record (recorder);
}
@ -46,6 +58,7 @@ int main (int argc, char **argv)
ClutterAnimation *animation;
ClutterColor red, green, blue;
gtk_init (&argc, &argv);
gst_init (&argc, &argv);
if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
return 1;
@ -69,7 +82,7 @@ int main (int argc, char **argv)
"y", 240.0,
NULL);
g_signal_connect (animation, "completed",
G_CALLBACK (on_animation_completed), NULL);
G_CALLBACK (on_animation_completed), stage);
text = g_object_new (CLUTTER_TYPE_TEXT,
"text", "Blue",
@ -110,7 +123,5 @@ int main (int argc, char **argv)
clutter_main ();
g_object_unref (stage);
return 0;
}

View File

@ -0,0 +1,30 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const CenterLayout = imports.ui.centerLayout;
const UI = imports.testcommon.ui;
function test() {
let stage = new Clutter.Stage({ user_resizable: true });
UI.init(stage);
////////////////////////////////////////////////////////////////////////////////
let container = new St.Widget({ style: 'border: 2px solid black;',
layout_manager: new CenterLayout.CenterLayout() });
container.add_constraint(new Clutter.BindConstraint({ coordinate: Clutter.BindCoordinate.SIZE, source: stage }));
stage.add_actor(container);
let left = new Clutter.Actor({ background_color: Clutter.Color.get_static(Clutter.StaticColor.RED), width: 300 });
let center = new Clutter.Actor({ background_color: Clutter.Color.get_static(Clutter.StaticColor.BLUE), width: 100 });
let right = new Clutter.Actor({ background_color: Clutter.Color.get_static(Clutter.StaticColor.YELLOW), width: 200 });
container.add_actor(left);
container.add_actor(center);
container.add_actor(right);
UI.main(stage);
}
test();

34
tests/interactive/test-title.js Executable file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env gjs
const Gtk = imports.gi.Gtk;
const Mainloop = imports.mainloop;
function nextTitle() {
let length = Math.random() * 20;
let str = '';
for (let i = 0; i < length; i++) {
// 97 == 'a'
str += String.fromCharCode(97 + Math.random() * 26);
}
return str;
}
function main() {
Gtk.init(null);
let win = new Gtk.Window({ title: nextTitle() });
win.connect('destroy', Gtk.main_quit);
win.present();
Mainloop.timeout_add(5000, function() {
win.title = nextTitle();
return true;
});
Gtk.main();
}
main();