Compare commits

...

24 Commits

Author SHA1 Message Date
f3b8f0bf12 Bump version to 3.16.4
Update NEWS.
2015-10-15 20:37:43 +02:00
c3ac059464 st: Remove wrong indentation
GObject-Introspection started warning for wrong annotations, and
StGenericAccessible::set-current-value has a return value annotation
even if it returns nothing. This generates the warning:

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

Which, coupled with fatal warnings, breaks the Shell build.
2015-10-15 20:36:57 +02:00
9d791ac9fa dash: Ensure style for icon size computation
StIcon will skip loading the texture when its theme node is unset (which
may happen on style changes while the widget is hidden). While our size
request to compute the dash icon size will create the icon's theme node
if necessary (and of all its parents), a missing texture can still throw
off our computation.
Make sure this doesn't happen by ensuring the icon's style first, so the
texture is updated in response to StWidget::style-changed if necessary.

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

https://bugzilla.gnome.org/show_bug.cgi?id=745649
2015-10-13 20:28:17 +02:00
8c0a2a1284 calendar: Disconnect all Notification signals on NotificationMessage destruction
The destroy signal handler is kept connected despite the NotificationMessage
being destroyed, which leaves dangling NotificationMessage objects that will
be mass destroyed when the Notification object these depend upon is finally
destroyed.

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

https://bugzilla.gnome.org/show_bug.cgi?id=755425
2015-10-11 12:10:24 -05:00
6d4e229d1d Updated Finnish translation 2015-10-05 14:39:28 +00:00
53b25fa5af gdm: clear user verifier when finished with it
We only need the user verifier for the purpose of user verification.
Once it's complete we should clear it so it doesn't get in the way
later.

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

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

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

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

https://bugzilla.gnome.org/show_bug.cgi?id=753181
2015-08-05 10:19:48 -04:00
d14548eb01 shell: Fix C99'ism 2015-07-31 20:27:15 +02:00
63b6ed8d57 appDisplay: Handle non-UTF8 filename encodings more gracefully
It may be 2015, but users still stumble upon the occasional .desktop
file that uses a filename encoding other than UTF-8. We currently
fail quite spectacularly in that case by not displaying any apps at
all - handle this case more gracefully, by only filtering out the
offending apps.

https://bugzilla.gnome.org/show_bug.cgi?id=651503
2015-07-31 17:01:45 +02:00
e1b4c32c4d Updated Portuguese translation 2015-07-26 08:53:29 +00:00
4ea72130e0 authPrompt: allow cancellation before verification starts
The user should be allowed to cancel if verification hasn't
started yet and they're typing in their username. This
commit changes the authPrompt cancel function to not
ignore such requests.

https://bugzilla.gnome.org/show_bug.cgi?id=752739
2015-07-24 09:46:15 -04:00
54db777874 authPrompt: don't allow next if entry is empty
Normally the user isn't allowed to proceed passed
the username question until they've filled it in.
To ensure this, the authprompt code desensitizes
the next button when the number of characters change to
zero.

Unfortunately it fails to desensitize the next button
up front when the entry starts out empty.

This commit addresses that bug.

https://bugzilla.gnome.org/show_bug.cgi?id=752739
2015-07-24 09:46:09 -04:00
4d12feff3e authPrompt: set next button to next when asking for username
If the next button ever gets set to Sign In, it won't
get reset to next until the next question asked by pam.

This commit ensures it gets reset to Next when asking
for the username.

https://bugzilla.gnome.org/show_bug.cgi?id=752739
2015-07-24 09:46:00 -04:00
3c8c5a5570 gdm: unconditionally cancel auth user verifier on reset
We currently only cancel the user verifier on reset if
verifying, but that means we don't properly cancel it when
asking for a username at the Not Listed screen.

The object already handles getting called when there is
nothing to cancel, so just cancel it unconditionally.

https://bugzilla.gnome.org/show_bug.cgi?id=752438
2015-07-24 09:45:40 -04:00
6e4f54c351 keyboard: Don't watch D-Bus services we won't use
ff1b76f4c7 made gnome-shell stop looking
at the org.gnome.SettingsDaemon.Cursor service's property values, but we
still monitored the service itself.

https://bugzilla.gnome.org/show_bug.cgi?id=752779
2015-07-23 15:08:08 +02:00
a91c1caf42 Bump version to 3.16.3
Update NEWS.
2015-07-02 14:26:44 +02:00
90f14d0762 app-system: Improve StartupWMClass heuristics
Our StartUpWMClass heuristics use a StartupWMClass -> .desktop ID
mapping built from the list of all installed applications. In case
of multiple .desktop files setting the same StartupWMClass, we
currently simply pick the last one returned by g_app_info_get_all (),
which can be a bit surprising:
A window with WM_CLASS 'emacs', launched through a .desktop file
named 'emacs.desktop' with a StartupWMClass of 'emacs' maps to ...
'emacsclient.desktop'!
Make this case a bit less random by preferring the app info whose
ID matches the StartupWMClass.

https://bugzilla.gnome.org/show_bug.cgi?id=751541
2015-07-02 14:21:38 +02:00
77f2e3abde gdm: fix banner allocation computation
The code to figure how how much room that banner had was wrong.
This commit fixes it.

https://bugzilla.gnome.org/show_bug.cgi?id=751517
2015-06-26 18:04:39 +02:00
a02019cf9e main: Fix a memory leak
We are pointlessly calling g_settings_list_keys() twice, without
freeing the result from the first call.
2015-06-26 18:04:31 +02:00
a341b74aeb AllView: prevent accessing a NULL effect
In some cases we might be allocated a size such that
this._grid.topPadding and this._grid.bottomPadding are both 0 which
means that the ScrollView fade effect gets removed. In that case don't
try to access the effect since it will be NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=750714
2015-06-26 18:04:11 +02:00
9e0a5fa3a9 Revert "Revert "keyboard: Handle touch events""
And make these only handled on wayland. There's a plethora of issues
around touch passive grab and touch/pointer doubly handling to use
these right away on X11, so we stick to single-touch/pointer there.

This reverts commit 032a688a72.

https://bugzilla.gnome.org/show_bug.cgi?id=750287
2015-06-02 17:59:41 +02:00
49856d4961 windowMenu: Close when corresponding window goes away
The menu is clearly associated with a particular window, so keeping
it around when the window is gone doesn't make sense - in case of
the window menu, it is actually harmful as every action will act on
the invalidated window and result in a crash. So just dismiss the
menu when the menu is unmanaged.

https://bugzilla.gnome.org/show_bug.cgi?id=749529
2015-05-21 18:21:28 +02:00
4db34fca36 layout: Set initial visibility of fullscreen-tracking chrome
When chrome is added with the trackFullscreen parameter, the actor's
visibility will be updated automatically whenever its monitor's
fullscreen state changes. However as we currently ignore the fullscreen
state at the time the chrome is added, the initial visibility may well
be incorrect - fix this by updating the initial visibility as necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=749383
2015-05-21 14:01:35 +02:00
16 changed files with 1023 additions and 890 deletions

22
NEWS
View File

@ -1,3 +1,25 @@
3.16.4
======
* Fix screen freezes when a notification is pushed [Carlos; #755425]
* Fix icons getting cut off in dash [Florian; #745649]
* Misc. bug fixes [Bastien, Ray, Florian; #752779, #752438, #752739, #651503,
#753181]
Contributors:
Emmanuele Bassi, Carlos Garnacho, Florian Müllner, Bastien Nocera, Ray Strode
Translations:
Pedro Albuquerque [pt], Jiri Grönroos [fi]
3.16.3
======
* Handle touch events in OSK on wayland [Rui; #750287]
* Misc. bug fixes [Florian, Rui, Ray; #749383, #749529, #750714, #751517,
#751541]
Contributors:
Rui Matos, Florian Müllner, Ray Strode
3.16.2
======
* Make event highlight in calendar more prominent [Jakub; #747715]

View File

@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.16.2],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.16.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([src/shell-global.c])

View File

@ -401,7 +401,7 @@ const AuthPrompt = new Lang.Class({
},
updateSensitivity: function(sensitive) {
this._updateNextButtonSensitivity(sensitive);
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0);
this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive;
},
@ -432,8 +432,9 @@ const AuthPrompt = new Lang.Class({
let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this.cancelButton.reactive = true;
this.nextButton.label = _("Next");
if (oldStatus == AuthPromptStatus.VERIFYING)
if (this._userVerifier)
this._userVerifier.cancel();
this._queryingService = null;
@ -488,6 +489,7 @@ const AuthPrompt = new Lang.Class({
finish: function(onComplete) {
if (!this._userVerifier.hasPendingMessages) {
this._userVerifier.clear();
onComplete();
return;
}
@ -495,12 +497,13 @@ const AuthPrompt = new Lang.Class({
let signalId = this._userVerifier.connect('no-more-messages',
Lang.bind(this, function() {
this._userVerifier.disconnect(signalId);
this._userVerifier.clear();
onComplete();
}));
},
cancel: function() {
if (this.verificationStatus == AuthPromptStatus.NOT_VERIFYING || this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
return;
}
this.reset();

View File

@ -584,7 +584,14 @@ const LoginDialog = new Lang.Class({
// try a different layout, or if we have what extra space we
// can hand out
if (bannerAllocation) {
let leftOverYSpace = dialogHeight - bannerHeight - authPromptHeight - logoHeight;
let bannerSpace;
if (authPromptAllocation)
bannerSpace = authPromptAllocation.y1 - bannerAllocation.y1;
else
bannerSpace = 0;
let leftOverYSpace = bannerSpace - bannerHeight;
if (leftOverYSpace > 0) {
// First figure out how much left over space is up top
@ -867,7 +874,7 @@ const LoginDialog = new Lang.Class({
},
_loginScreenSessionActivated: function() {
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.VERIFICATION_SUCCEEDED)
if (this.actor.opacity == 255 && this._authPrompt.verificationStatus == AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
return;
Tweener.addTween(this.actor,
@ -884,7 +891,8 @@ const LoginDialog = new Lang.Class({
},
onUpdateScope: this,
onComplete: function() {
this._authPrompt.reset();
if (this._authPrompt.verificationStatus != AuthPrompt.AuthPromptStatus.NOT_VERIFYING)
this._authPrompt.reset();
},
onCompleteScope: this });
},

View File

@ -500,6 +500,11 @@ const AllView = new Lang.Class({
_loadApps: function() {
let apps = Gio.AppInfo.get_all().filter(function(appInfo) {
try {
let id = appInfo.get_id(); // catch invalid file encodings
} catch(e) {
return false;
}
return appInfo.should_show();
}).map(function(app) {
return app.get_id();
@ -753,7 +758,8 @@ const AllView = new Lang.Class({
let fadeOffset = Math.min(this._grid.topPadding,
this._grid.bottomPadding);
this._scrollView.update_fade_effect(fadeOffset, 0);
this._scrollView.get_effect('fade').fade_edges = true;
if (fadeOffset > 0)
this._scrollView.get_effect('fade').fade_edges = true;
if (this._availWidth != availWidth || this._availHeight != availHeight || oldNPages != this._grid.nPages()) {
this._adjustment.value = 0;
@ -1060,7 +1066,7 @@ const AppSearchProvider = new Lang.Class({
getInitialResultSet: function(terms, callback, cancellable) {
let query = terms.join(' ');
let groups = Gio.DesktopAppInfo.search(query);
let groups = Shell.AppSystem.search(query);
let usage = Shell.AppUsage.get_default();
let results = [];
groups.forEach(function(group) {
@ -1289,7 +1295,10 @@ const FolderIcon = new Lang.Class({
if (!_listsIntersect(folderCategories, appCategories))
return;
addAppId(appInfo.get_id());
try {
addAppId(appInfo.get_id()); // catch invalid file encodings
} catch(e) {
}
});
this.actor.visible = this.view.getAllItems().length > 0;

View File

@ -1229,7 +1229,7 @@ const NotificationMessage = new Lang.Class({
this._closed = true;
this.notification.destroy(MessageTray.NotificationDestroyedReason.DISMISSED);
}));
notification.connect('destroy', Lang.bind(this,
this._destroyId = notification.connect('destroy', Lang.bind(this,
function() {
if (!this._closed)
this.close();
@ -1260,6 +1260,10 @@ const NotificationMessage = new Lang.Class({
if (this._updatedId)
this.notification.disconnect(this._updatedId);
this._updatedId = 0;
if (this._destroyId)
this.notification.disconnect(this._destroyId);
this._destroyId = 0;
}
});

View File

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

View File

@ -24,9 +24,6 @@ const KEYBOARD_TYPE = 'keyboard-type';
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
const CURSOR_BUS_NAME = 'org.gnome.SettingsDaemon.Cursor';
const CURSOR_OBJECT_PATH = '/org/gnome/SettingsDaemon/Cursor';
const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon';
const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon';
@ -114,6 +111,35 @@ const Key = new Lang.Class({
key.release();
return Clutter.EVENT_PROPAGATE;
}));
button.connect('touch-event', Lang.bind(this,
function (actor, event) {
let device = event.get_device();
let sequence = event.get_event_sequence();
// We only handle touch events here on wayland. On X11
// we do get emulated pointer events, which already works
// for single-touch cases. Besides, the X11 passive touch grab
// set up by Mutter will make us see first the touch events
// and later the pointer events, so it will look like two
// unrelated series of events, we want to avoid double handling
// in these cases.
if (!Meta.is_wayland_compositor())
return Clutter.EVENT_PROPAGATE;
if (!this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_BEGIN) {
device.sequence_grab(sequence, actor);
this._touchPressed = true;
key.press();
} else if (this._touchPressed &&
event.type() == Clutter.EventType.TOUCH_END &&
device.sequence_get_grabbed_actor(sequence) == actor) {
device.sequence_ungrab(sequence);
this._touchPressed = false;
key.release();
}
return Clutter.EVENT_PROPAGATE;
}));
return button;
},
@ -178,9 +204,6 @@ const Keyboard = new Lang.Class({
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync));
this._watchNameId = Gio.bus_watch_name(Gio.BusType.SESSION, CURSOR_BUS_NAME, 0,
Lang.bind(this, this._sync),
Lang.bind(this, this._sync));
this._daemonProxy = null;
this._lastDeviceId = null;

View File

@ -837,6 +837,7 @@ const LayoutManager = new Lang.Class({
// need to connect to 'destroy' too.
this._trackedActors.push(actorData);
this._updateActorVisibility(actorData);
this._queueUpdateRegions();
},
@ -855,25 +856,23 @@ const LayoutManager = new Lang.Class({
this._queueUpdateRegions();
},
_updateActorVisibility: function(actorData) {
if (!actorData.trackFullscreen)
return;
let monitor = this.findMonitorForActor(actorData.actor);
actorData.actor.visible = !(global.window_group.visible &&
monitor &&
monitor.inFullscreen);
},
_updateVisibility: function() {
let windowsVisible = Main.sessionMode.hasWindows && !this._inOverview;
global.window_group.visible = windowsVisible;
global.top_window_group.visible = windowsVisible;
for (let i = 0; i < this._trackedActors.length; i++) {
let actorData = this._trackedActors[i], visible;
if (!actorData.trackFullscreen)
continue;
if (!windowsVisible)
visible = true;
else if (this.findMonitorForActor(actorData.actor).inFullscreen)
visible = false;
else
visible = true;
actorData.actor.visible = visible;
}
this._trackedActors.forEach(Lang.bind(this, this._updateActorVisibility));
},
getWorkAreaForMonitor: function(monitorIndex) {

View File

@ -167,6 +167,10 @@ const WindowMenuManager = new Lang.Class({
menu.connect('activate', function() {
window.check_alive(global.get_current_time());
});
let destroyId = window.connect('unmanaged',
function() {
menu.close();
});
this._sourceActor.set_size(rect.width, rect.height);
this._sourceActor.set_position(rect.x, rect.y);
@ -180,6 +184,7 @@ const WindowMenuManager = new Lang.Class({
this._sourceActor.hide();
menu.destroy();
window.disconnect(destroyId);
}));
}
});

357
po/fi.po
View File

@ -26,8 +26,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: 2015-03-04 12:55+0000\n"
"PO-Revision-Date: 2015-03-04 22:01+0200\n"
"POT-Creation-Date: 2015-10-05 08:39+0000\n"
"PO-Revision-Date: 2015-10-05 17:38+0300\n"
"Last-Translator: Jiri Grönroos <jiri.gronroos+l10n@iki.fi>\n"
"Language-Team: suomi <gnome-fi-laatu@lists.sourceforge.net>\n"
"Language: fi\n"
@ -45,8 +45,6 @@ msgid "System"
msgstr "Järjestelmä"
#: ../data/50-gnome-shell-system.xml.in.h:2
#| msgid "%d new notification"
#| msgid_plural "%d new notifications"
msgid "Show the notification list"
msgstr "Näytä ilmoitusluettelo"
@ -235,7 +233,6 @@ msgid "Keybinding to toggle the visibility of the notification list"
msgstr "Viestialueen näyttämiseen/piilottamiseen tarkoitettu pikanäppäin"
#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
#| msgid "Keybinding to toggle the visibility of the message tray."
msgid "Keybinding to toggle the visibility of the notification list."
msgstr "Ilmoitusluettelon näyttämiseen/piilottamiseen tarkoitettu pikanäppäin."
@ -324,59 +321,67 @@ msgstr ""
"liikkumisen"
#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
#| msgid "Network error"
msgid "Network Login"
msgstr "Verkkokirjautuminen"
#: ../js/extensionPrefs/main.js:123
#: ../js/extensionPrefs/main.js:122
#, javascript-format
msgid "There was an error loading the preferences dialog for %s:"
msgstr "Kohteen %s asetusikkunaa ladataessa tapahtui virhe:"
#: ../js/extensionPrefs/main.js:155
#: ../js/extensionPrefs/main.js:154
msgid "GNOME Shell Extensions"
msgstr "GNOME Shell -laajennukset"
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:143
#: ../js/gdm/authPrompt.js:147 ../js/ui/components/networkAgent.js:145
#: ../js/ui/components/polkitAgent.js:166 ../js/ui/endSessionDialog.js:452
#: ../js/ui/extensionDownloader.js:195 ../js/ui/shellMountOperation.js:399
#: ../js/ui/status/network.js:916
msgid "Cancel"
msgstr "Peru"
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:217
#: ../js/gdm/authPrompt.js:169 ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:435
msgid "Next"
msgstr "Seuraava"
#: ../js/gdm/authPrompt.js:213 ../js/ui/shellMountOperation.js:403
#: ../js/gdm/authPrompt.js:211 ../js/ui/shellMountOperation.js:403
#: ../js/ui/unlockDialog.js:59
msgid "Unlock"
msgstr "Avaa lukitus"
#: ../js/gdm/authPrompt.js:215
#: ../js/gdm/authPrompt.js:213
msgctxt "button"
msgid "Sign In"
msgstr "Kirjaudu sisään"
#: ../js/gdm/loginDialog.js:276
#: ../js/gdm/loginDialog.js:281
msgid "Choose Session"
msgstr "Valitse istunto"
#: ../js/gdm/loginDialog.js:417
#. translators: this message is shown below the user list on the
#. login screen. It can be activated to reveal an entry for
#. manually entering the username.
#: ../js/gdm/loginDialog.js:431
msgid "Not listed?"
msgstr "Ei luettelossa?"
#: ../js/gdm/loginDialog.js:826
#. Translators: this message is shown below the username entry field
#. to clue the user in on how to login to the local network realm
#: ../js/gdm/loginDialog.js:847
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(esim. käyttäjä tai %s)"
#: ../js/gdm/loginDialog.js:831 ../js/ui/components/networkAgent.js:269
#: ../js/ui/components/networkAgent.js:287
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: ../js/gdm/loginDialog.js:852 ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:289
msgid "Username: "
msgstr "Käyttäjänimi: "
#: ../js/gdm/loginDialog.js:1166
#: ../js/gdm/loginDialog.js:1181
msgid "Login Window"
msgstr "Kirjautumisikkuna"
@ -384,6 +389,11 @@ msgstr "Kirjautumisikkuna"
msgid "Authentication error"
msgstr "Tunnistautumisvirhe"
#. We don't show fingerprint messages directly since it's
#. not the main auth service. Instead we use the messages
#. as a cue to display our own message.
#. Translators: this message is shown below the password entry field
#. to indicate the user can swipe their finger instead
#: ../js/gdm/util.js:473
msgid "(or swipe finger)"
msgstr "(tai pyyhkäise sormella)"
@ -392,6 +402,8 @@ msgstr "(tai pyyhkäise sormella)"
msgid "Command not found"
msgstr "Komentoa ei löydy"
#. Replace "Error invoking GLib.shell_parse_argv: " with
#. something nicer
#: ../js/misc/util.js:152
msgid "Could not parse command:"
msgstr "Komentoa ei voi jäsentää:"
@ -401,101 +413,107 @@ msgstr "Komentoa ei voi jäsentää:"
msgid "Execution of “%s” failed:"
msgstr "Kohteen ”%s” suorittaminen epäonnistui:"
#. Translators: Time in 24h format */
#. Translators: Time in 24h format
#: ../js/misc/util.js:191
msgid "%H%M"
msgstr "%H%M"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 24h format. i.e. "Yesterday, 14:30" */
#. time string in 24h format. i.e. "Yesterday, 14:30"
#: ../js/misc/util.js:197
#, no-c-format
msgid "Yesterday, %H%M"
msgstr "Eilen, %H%M"
#. Translators: this is the week day name followed by a time
#. string in 24h format. i.e. "Monday, 14:30" */
#. string in 24h format. i.e. "Monday, 14:30"
#: ../js/misc/util.js:203
#, no-c-format
msgid "%A, %H%M"
msgstr "%A, %H%M"
#. Translators: this is the month name and day number
#. followed by a time string in 24h format.
#. i.e. "May 25, 14:30" */
#. i.e. "May 25, 14:30"
#: ../js/misc/util.js:209
#, no-c-format
msgid "%B %d, %H%M"
msgstr "%e. %Bta, %H%M"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 24h format.
#. i.e. "May 25 2012, 14:30" */
#. i.e. "May 25 2012, 14:30"
#: ../js/misc/util.js:215
#, no-c-format
msgid "%B %d %Y, %H%M"
msgstr "%e. %Bta %Y, %H%M"
#. Translators: Time in 12h format */
#. Translators: Time in 12h format
#: ../js/misc/util.js:220
msgid "%l%M %p"
msgstr "%l%M %p"
#. Translators: this is the word "Yesterday" followed by a
#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
#: ../js/misc/util.js:226
#, no-c-format
msgid "Yesterday, %l%M %p"
msgstr "Eilen, %l%M %p"
#. Translators: this is the week day name followed by a time
#. string in 12h format. i.e. "Monday, 2:30 pm" */
#. string in 12h format. i.e. "Monday, 2:30 pm"
#: ../js/misc/util.js:232
#, no-c-format
msgid "%A, %l%M %p"
msgstr "%A, %l%M %p"
#. Translators: this is the month name and day number
#. followed by a time string in 12h format.
#. i.e. "May 25, 2:30 pm" */
#. i.e. "May 25, 2:30 pm"
#: ../js/misc/util.js:238
#| msgid "%a %b %e, %l:%M %p"
#, no-c-format
msgid "%B %d, %l%M %p"
msgstr "%B %d, %l%M %p"
#. Translators: this is the month name, day number, year
#. number followed by a time string in 12h format.
#. i.e. "May 25 2012, 2:30 pm"*/
#. i.e. "May 25 2012, 2:30 pm"
#: ../js/misc/util.js:244
#| msgid "%a %b %e, %l:%M %p"
#, no-c-format
msgid "%B %d %Y, %l%M %p"
msgstr "%B %d %Y, %l%M %p"
#. TRANSLATORS: this is the title of the wifi captive portal login
#. * window, until we know the title of the actual login page */
#. * window, until we know the title of the actual login page
#: ../js/portalHelper/main.js:85
msgid "Web Authentication Redirect"
msgstr "Verkkotunnistautumisen uudelleenohjaus"
#: ../js/ui/appDisplay.js:791
#: ../js/ui/appDisplay.js:794
msgid "Frequently used applications will appear here"
msgstr "Usein käytetyt sovellukset ilmestyvät tänne"
#: ../js/ui/appDisplay.js:911
#: ../js/ui/appDisplay.js:914
msgid "Frequent"
msgstr "Käytetyimmät"
#: ../js/ui/appDisplay.js:918
#: ../js/ui/appDisplay.js:921
msgid "All"
msgstr "Kaikki"
#: ../js/ui/appDisplay.js:1849
#: ../js/ui/appDisplay.js:1853
msgid "New Window"
msgstr "Uusi ikkuna"
#: ../js/ui/appDisplay.js:1877 ../js/ui/dash.js:289
#: ../js/ui/appDisplay.js:1881 ../js/ui/dash.js:289
msgid "Remove from Favorites"
msgstr "Poista suosikeista"
#: ../js/ui/appDisplay.js:1883
#: ../js/ui/appDisplay.js:1887
msgid "Add to Favorites"
msgstr "Lisää suosikkeihin"
#: ../js/ui/appDisplay.js:1893
#: ../js/ui/appDisplay.js:1897
msgid "Show Details"
msgstr "Näytä tiedot"
@ -509,8 +527,8 @@ msgstr "%s on lisätty suosikkeihin."
msgid "%s has been removed from your favorites."
msgstr "%s on poistettu suosikeista."
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:649
#: ../js/ui/status/system.js:337
#: ../js/ui/backgroundMenu.js:19 ../js/ui/panel.js:650
#: ../js/ui/status/system.js:334
msgid "Settings"
msgstr "Asetukset"
@ -518,106 +536,105 @@ msgstr "Asetukset"
msgid "Change Background…"
msgstr "Muuta työpöydän taustaa…"
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday). */
#: ../js/ui/calendar.js:49
#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
#: ../js/ui/calendar.js:53
msgctxt "calendar-no-work"
msgid "06"
msgstr "06"
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#. */
#: ../js/ui/calendar.js:78
msgctxt "event list time"
msgid "All Day"
msgstr "Koko päivä"
#. Translators: Calendar grid abbreviation for Sunday.
#. *
#. * NOTE: These grid abbreviations are always shown together
#. * and in order, e.g. "S M T W T F S".
#. */
#: ../js/ui/calendar.js:93
#.
#: ../js/ui/calendar.js:82
msgctxt "grid sunday"
msgid "S"
msgstr "S"
#. Translators: Calendar grid abbreviation for Monday */
#: ../js/ui/calendar.js:95
#. Translators: Calendar grid abbreviation for Monday
#: ../js/ui/calendar.js:84
msgctxt "grid monday"
msgid "M"
msgstr "M"
#. Translators: Calendar grid abbreviation for Tuesday */
#: ../js/ui/calendar.js:97
#. Translators: Calendar grid abbreviation for Tuesday
#: ../js/ui/calendar.js:86
msgctxt "grid tuesday"
msgid "T"
msgstr "T"
#. Translators: Calendar grid abbreviation for Wednesday */
#: ../js/ui/calendar.js:99
#. Translators: Calendar grid abbreviation for Wednesday
#: ../js/ui/calendar.js:88
msgctxt "grid wednesday"
msgid "W"
msgstr "K"
#. Translators: Calendar grid abbreviation for Thursday */
#: ../js/ui/calendar.js:101
#. Translators: Calendar grid abbreviation for Thursday
#: ../js/ui/calendar.js:90
msgctxt "grid thursday"
msgid "T"
msgstr "T"
#. Translators: Calendar grid abbreviation for Friday */
#: ../js/ui/calendar.js:103
#. Translators: Calendar grid abbreviation for Friday
#: ../js/ui/calendar.js:92
msgctxt "grid friday"
msgid "F"
msgstr "P"
#. Translators: Calendar grid abbreviation for Saturday */
#: ../js/ui/calendar.js:105
#. Translators: Calendar grid abbreviation for Saturday
#: ../js/ui/calendar.js:94
msgctxt "grid saturday"
msgid "S"
msgstr "L"
#: ../js/ui/calendar.js:572
#: ../js/ui/calendar.js:564
msgid "Previous month"
msgstr "Edellinen kuukausi"
#: ../js/ui/calendar.js:582
#: ../js/ui/calendar.js:574
msgid "Next month"
msgstr "Seuraava kuukausi"
#: ../js/ui/calendar.js:789
#: ../js/ui/calendar.js:781
msgid "Week %V"
msgstr "Viikko %V"
#: ../js/ui/calendar.js:1245
#. Translators: Shown in calendar event list for all day events
#. * Keep it short, best if you can use less then 10 characters
#.
#: ../js/ui/calendar.js:1187
msgctxt "event list time"
msgid "All Day"
msgstr "Koko päivä"
#: ../js/ui/calendar.js:1289
msgid "Clear section"
msgstr "Tyhjennä osio"
#: ../js/ui/calendar.js:1437
#: ../js/ui/calendar.js:1516
msgid "Events"
msgstr "Tapahtumat"
#: ../js/ui/calendar.js:1445
#: ../js/ui/calendar.js:1525
msgctxt "calendar heading"
msgid "%A, %B %d"
msgstr "%A, %e. %Bta"
#: ../js/ui/calendar.js:1449
#: ../js/ui/calendar.js:1529
msgctxt "calendar heading"
msgid "%A, %B %d, %Y"
msgstr "%A, %e. %Bta %Y"
#: ../js/ui/calendar.js:1541
#: ../js/ui/calendar.js:1614
msgid "Notifications"
msgstr "Ilmoitukset"
#: ../js/ui/calendar.js:1681
#| msgid "Notifications"
#: ../js/ui/calendar.js:1765
msgid "No Notifications"
msgstr "Ei ilmoituksia"
#: ../js/ui/calendar.js:1684
#: ../js/ui/calendar.js:1768
msgid "No Events"
msgstr "Ei tapahtumia"
@ -642,79 +659,95 @@ msgstr "Salasana:"
msgid "Type again:"
msgstr "Uudelleen:"
#: ../js/ui/components/networkAgent.js:138 ../js/ui/status/network.js:277
#: ../js/ui/components/networkAgent.js:140 ../js/ui/status/network.js:277
#: ../js/ui/status/network.js:359 ../js/ui/status/network.js:919
msgid "Connect"
msgstr "Yhdistä"
#: ../js/ui/components/networkAgent.js:231
#: ../js/ui/components/networkAgent.js:243
#: ../js/ui/components/networkAgent.js:271
#: ../js/ui/components/networkAgent.js:291
#: ../js/ui/components/networkAgent.js:301
#. Cisco LEAP
#: ../js/ui/components/networkAgent.js:233
#: ../js/ui/components/networkAgent.js:245
#: ../js/ui/components/networkAgent.js:273
#: ../js/ui/components/networkAgent.js:293
#: ../js/ui/components/networkAgent.js:303
msgid "Password: "
msgstr "Salasana: "
#: ../js/ui/components/networkAgent.js:236
#. static WEP
#: ../js/ui/components/networkAgent.js:238
msgid "Key: "
msgstr "Avain: "
#: ../js/ui/components/networkAgent.js:275
#: ../js/ui/components/networkAgent.js:277
msgid "Identity: "
msgstr "Henkilöllisyys: "
#: ../js/ui/components/networkAgent.js:277
#: ../js/ui/components/networkAgent.js:279
msgid "Private key password: "
msgstr "Salaisen avaimen salasana: "
#: ../js/ui/components/networkAgent.js:289
#: ../js/ui/components/networkAgent.js:291
msgid "Service: "
msgstr "Palvelu: "
#: ../js/ui/components/networkAgent.js:318
#: ../js/ui/components/networkAgent.js:320
#: ../js/ui/components/networkAgent.js:658
msgid "Authentication required by wireless network"
msgstr "Langaton verkko vaatii tunnistautumisen"
#: ../js/ui/components/networkAgent.js:319
#: ../js/ui/components/networkAgent.js:321
#: ../js/ui/components/networkAgent.js:659
#, javascript-format
msgid ""
"Passwords or encryption keys are required to access the wireless network "
"“%s”."
msgstr "Langaton verkko \"%s\" vaatii salasanan tai salausavaimia."
#: ../js/ui/components/networkAgent.js:323
#: ../js/ui/components/networkAgent.js:325
#: ../js/ui/components/networkAgent.js:662
msgid "Wired 802.1X authentication"
msgstr "Kiinteän 802.1X-yhteyden tunnistautuminen"
#: ../js/ui/components/networkAgent.js:325
#: ../js/ui/components/networkAgent.js:327
msgid "Network name: "
msgstr "Verkon nimi: "
#: ../js/ui/components/networkAgent.js:330
#: ../js/ui/components/networkAgent.js:332
#: ../js/ui/components/networkAgent.js:666
msgid "DSL authentication"
msgstr "DSL-tunnistautuminen"
#: ../js/ui/components/networkAgent.js:337
#: ../js/ui/components/networkAgent.js:339
#: ../js/ui/components/networkAgent.js:672
msgid "PIN code required"
msgstr "PIN-koodi vaaditaan"
#: ../js/ui/components/networkAgent.js:338
#: ../js/ui/components/networkAgent.js:340
#: ../js/ui/components/networkAgent.js:673
msgid "PIN code is needed for the mobile broadband device"
msgstr "Mobiililaajakaista vaatii PIN-koodin"
#: ../js/ui/components/networkAgent.js:339
#: ../js/ui/components/networkAgent.js:341
msgid "PIN: "
msgstr "PIN: "
#: ../js/ui/components/networkAgent.js:345
#: ../js/ui/components/networkAgent.js:348
#: ../js/ui/components/networkAgent.js:679
msgid "Mobile broadband network password"
msgstr "Mobiililaajakaistan verkkosalasana"
#: ../js/ui/components/networkAgent.js:346
#: ../js/ui/components/networkAgent.js:349
#: ../js/ui/components/networkAgent.js:663
#: ../js/ui/components/networkAgent.js:667
#: ../js/ui/components/networkAgent.js:680
#, javascript-format
msgid "A password is required to connect to “%s”."
msgstr "Salasana vaaditaan kohteeseen \"%s\" yhdistämiseksi."
#: ../js/ui/components/networkAgent.js:647 ../js/ui/status/network.js:1657
msgid "Network Manager"
msgstr "Verkon hallinta"
#: ../js/ui/components/polkitAgent.js:54
msgid "Authentication Required"
msgstr "Tunnistautuminen vaaditaan"
@ -730,14 +763,14 @@ msgstr "Tunnistaudu"
#. Translators: "that didn't work" refers to the fact that the
#. * requested authentication was not gained; this can happen
#. * because of an authentication error (like invalid password),
#. * for instance. */
#. * for instance.
#: ../js/ui/components/polkitAgent.js:271 ../js/ui/shellMountOperation.js:383
msgid "Sorry, that didn't work. Please try again."
msgstr "Tunnistautuminen epäonnistui. Yritä uudelleen."
#. Translators: this is the other person changing their old IM name to their new
#. IM name. */
#: ../js/ui/components/telepathyClient.js:772
#. IM name.
#: ../js/ui/components/telepathyClient.js:757
#, javascript-format
msgid "%s is now known as %s"
msgstr "%s on nyt nimeltään %s"
@ -750,24 +783,24 @@ msgstr "Ikkunat"
msgid "Show Applications"
msgstr "Näytä sovellukset"
#: ../js/ui/dash.js:451
#. Translators: this is the name of the dock/favorites area on
#. the left of the overview
#: ../js/ui/dash.js:449
msgid "Dash"
msgstr "Pikavalikko"
#. 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:73
#| msgid "%A %B %e, %Y"
msgid "%B %e %Y"
msgstr "%e. %b %Y"
#. Translators: This is the accessible name of the date button shown
#. * below the time in the shell; it should combine the weekday and the
#. * date, e.g. "Tuesday February 17 2015".
#. */
#.
#: ../js/ui/dateMenu.js:80
#| msgid "%A %B %e, %Y"
msgid "%A %B %e %Y"
msgstr "%A, %e. %Bta %Y"
@ -776,7 +809,6 @@ msgid "Add world clocks…"
msgstr "Lisää maailmankelloja…"
#: ../js/ui/dateMenu.js:161
#| msgid "Open Clocks"
msgid "World Clocks"
msgstr "Maailmankellot"
@ -902,13 +934,13 @@ msgstr ""
msgid "Other users are logged in."
msgstr "Muita käyttäjiä on kirjautuneena."
#. Translators: Remote here refers to a remote session, like a ssh login */
#. Translators: Remote here refers to a remote session, like a ssh login
#: ../js/ui/endSessionDialog.js:640
#, javascript-format
msgid "%s (remote)"
msgstr "%s (etä)"
#. Translators: Console here refers to a tty like a VT console */
#. Translators: Console here refers to a tty like a VT console
#: ../js/ui/endSessionDialog.js:643
#, javascript-format
msgid "%s (console)"
@ -923,15 +955,25 @@ msgstr "Asenna"
msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Ladataanko ja asennetaanko ”%s” sivustolta extensions.gnome.org?"
#: ../js/ui/keyboard.js:706 ../js/ui/status/keyboard.js:576
#: ../js/ui/keyboard.js:741 ../js/ui/status/keyboard.js:713
msgid "Keyboard"
msgstr "Näppäimistö"
#. translators: 'Hide' is a verb
#: ../js/ui/legacyTray.js:66
#| msgid "Hide Text"
msgid "Hide tray"
msgstr "Piilota palkki"
#: ../js/ui/legacyTray.js:107
msgid "Status Icons"
msgstr "Tilakuvakkeet"
#: ../js/ui/lookingGlass.js:643
msgid "No extensions installed"
msgstr "Laajennuksia ei asennettu"
#. Translators: argument is an extension UUID. */
#. Translators: argument is an extension UUID.
#: ../js/ui/lookingGlass.js:697
#, javascript-format
msgid "%s has not emitted any errors."
@ -951,7 +993,7 @@ msgid "Enabled"
msgstr "Käytössä"
#. Translators: this is for a network device that cannot be activated
#. because it's disabled by rfkill (airplane mode) */
#. because it's disabled by rfkill (airplane mode)
#. translators:
#. * The device has been disabled
#: ../js/ui/lookingGlass.js:719 ../js/ui/status/location.js:179
@ -979,7 +1021,7 @@ msgstr "Näytä lähde"
msgid "Web Page"
msgstr "Verkkosivusto"
#: ../js/ui/messageTray.js:2131
#: ../js/ui/messageTray.js:1506
msgid "System Information"
msgstr "Järjestelmän tiedot"
@ -994,26 +1036,31 @@ msgstr "Yleisnäkymä"
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters. */
#. characters.
#: ../js/ui/overview.js:246
msgid "Type to search…"
msgstr "Kirjoita hakeaksesi…"
#: ../js/ui/panel.js:351
#: ../js/ui/panel.js:352
msgid "Quit"
msgstr "Lopeta"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview". */
#: ../js/ui/panel.js:403
#. in your language, you can use the word for "Overview".
#: ../js/ui/panel.js:404
msgid "Activities"
msgstr "Toiminnot"
#: ../js/ui/panel.js:754
#: ../js/ui/panel.js:755
msgid "Top Bar"
msgstr "Yläpalkki"
#: ../js/ui/popupMenu.js:288
#. Translators: this MUST be either "toggle-switch-us"
#. (for toggle switches containing the English words
#. "ON" and "OFF") or "toggle-switch-intl" (for toggle
#. switches containing "◯" and "|"). Other values will
#. simply result in invisible toggle switches.
#: ../js/ui/popupMenu.js:289
msgid "toggle-switch-us"
msgstr "toggle-switch-intl"
@ -1030,7 +1077,7 @@ msgid "Restarting…"
msgstr "Käynnistetään uudelleen…"
#. Translators: This is a time format for a date in
#. long format */
#. long format
#: ../js/ui/screenShield.js:85
msgid "%A, %B %d"
msgstr "%A, %e. %Bta"
@ -1049,27 +1096,34 @@ msgid_plural "%d new notifications"
msgstr[0] "%d uusi ilmoitus"
msgstr[1] "%d uutta ilmoitusta"
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:345
#: ../js/ui/screenShield.js:432 ../js/ui/status/system.js:342
msgid "Lock"
msgstr "Lukitse"
#: ../js/ui/screenShield.js:668
#: ../js/ui/screenShield.js:684
msgid "GNOME needs to lock the screen"
msgstr "Gnomen täytyy lukita näyttö"
#: ../js/ui/screenShield.js:795 ../js/ui/screenShield.js:1271
#. We could not become modal, so we can't activate the
#. screenshield. The user is probably very upset at this
#. point, but any application using global grabs is broken
#. Just tell him to stop using this app
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: ../js/ui/screenShield.js:805 ../js/ui/screenShield.js:1271
msgid "Unable to lock"
msgstr "Lukitus epäonnistui"
#: ../js/ui/screenShield.js:796 ../js/ui/screenShield.js:1272
#: ../js/ui/screenShield.js:806 ../js/ui/screenShield.js:1272
msgid "Lock was blocked by an application"
msgstr "Lukitus estettiin sovelluksen toimesta"
#: ../js/ui/search.js:609
#: ../js/ui/search.js:617
msgid "Searching…"
msgstr "Etsitään…"
#: ../js/ui/search.js:611
#: ../js/ui/search.js:619
msgid "No results."
msgstr "Ei tuloksia."
@ -1133,14 +1187,16 @@ msgstr "Kimmonäppäimet"
msgid "Mouse Keys"
msgstr "Hiirinäppäimet"
#: ../js/ui/status/accessibility.js:144
#: ../js/ui/status/accessibility.js:167
msgid "High Contrast"
msgstr "Korkea kontrasti"
#: ../js/ui/status/accessibility.js:193
#: ../js/ui/status/accessibility.js:202
msgid "Large Text"
msgstr "Suuri tekstin koko"
#. The Bluetooth menu only appears when Bluetooth is in use,
#. so just statically build it with a "Turn Off" menu item.
#: ../js/ui/status/bluetooth.js:49
msgid "Bluetooth"
msgstr "Bluetooth"
@ -1171,7 +1227,7 @@ msgstr "Ei yhdistetty"
msgid "Brightness"
msgstr "Kirkkaus"
#: ../js/ui/status/keyboard.js:599
#: ../js/ui/status/keyboard.js:736
msgid "Show Keyboard Layout"
msgstr "Näytä näppäimistön asettelu"
@ -1209,7 +1265,7 @@ msgid "Connected"
msgstr "Yhdistetty"
#. Translators: this is for network devices that are physically present but are not
#. under NetworkManager's control (and thus cannot be used in the menu) */
#. under NetworkManager's control (and thus cannot be used in the menu)
#: ../js/ui/status/network.js:463
msgid "Unmanaged"
msgstr "Ei hallinnassa"
@ -1222,19 +1278,19 @@ msgstr "Katkaistaan yhteyttä"
msgid "Connecting"
msgstr "Yhdistetään"
#. Translators: this is for network connections that require some kind of key or password */
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:474
msgid "Authentication required"
msgstr "tunnistautuminen vaaditaan"
#. Translators: this is for devices that require some kind of firmware or kernel
#. module, which is missing */
#. module, which is missing
#: ../js/ui/status/network.js:482
msgid "Firmware missing"
msgstr "Laiteohjelmisto puuttuu"
#. Translators: this is for a network device that cannot be activated (for example it
#. is disabled by rfkill, or it has no coverage */
#. is disabled by rfkill, or it has no coverage
#: ../js/ui/status/network.js:486
msgid "Unavailable"
msgstr "Ei tavoitettavissa"
@ -1319,7 +1375,7 @@ msgstr "Yhteyspiste aktiivisena"
msgid "connecting..."
msgstr "yhdistetään…"
#. Translators: this is for network connections that require some kind of key or password */
#. Translators: this is for network connections that require some kind of key or password
#: ../js/ui/status/network.js:1413
msgid "authentication required"
msgstr "tunnistautuminen vaaditaan"
@ -1340,10 +1396,6 @@ msgstr "VPN-asetukset"
msgid "VPN"
msgstr "VPN"
#: ../js/ui/status/network.js:1657
msgid "Network Manager"
msgstr "Verkon hallinta"
#: ../js/ui/status/network.js:1697
msgid "Activation of network connection failed"
msgstr "Verkkoyhteyden aktivointi epäonnistui"
@ -1356,15 +1408,19 @@ msgstr "Virranhallinta"
msgid "Fully Charged"
msgstr "Ladattu täyteen"
#. 0 is reported when UPower does not have enough data
#. to estimate battery life
#: ../js/ui/status/power.js:72 ../js/ui/status/power.js:78
msgid "Estimating…"
msgstr "Arvioidaan…"
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
#: ../js/ui/status/power.js:86
#, javascript-format
msgid "%d%02d Remaining (%d%%)"
msgstr "%d%02d jäljellä (%d%%)"
#. Translators: this is <hours>:<minutes> Until Full (<percentage>)
#: ../js/ui/status/power.js:91
#, javascript-format
msgid "%d%02d Until Full (%d%%)"
@ -1378,6 +1434,9 @@ msgstr "UPS"
msgid "Battery"
msgstr "Akku"
#. The menu only appears when airplane mode is on, so just
#. statically build it as if it was on, rather than dynamically
#. changing the menu contents.
#: ../js/ui/status/rfkill.js:88
msgid "Airplane Mode"
msgstr "Lentokonetila"
@ -1386,23 +1445,23 @@ msgstr "Lentokonetila"
msgid "On"
msgstr "Päällä"
#: ../js/ui/status/system.js:317
#: ../js/ui/status/system.js:314
msgid "Switch User"
msgstr "Vaihda käyttäjää"
#: ../js/ui/status/system.js:322
#: ../js/ui/status/system.js:319
msgid "Log Out"
msgstr "Kirjaudu ulos"
#: ../js/ui/status/system.js:341
#: ../js/ui/status/system.js:338
msgid "Orientation Lock"
msgstr "Kiertolukitus"
#: ../js/ui/status/system.js:349
#: ../js/ui/status/system.js:346
msgid "Suspend"
msgstr "Valmiustila"
#: ../js/ui/status/system.js:352
#: ../js/ui/status/system.js:349
msgid "Power Off"
msgstr "Sammuta"
@ -1445,7 +1504,7 @@ msgstr "Haluatko säilyttää nämä näyttöasetukset?"
#. Translators: this and the following message should be limited in lenght,
#. to avoid ellipsizing the labels.
#. */
#.
#: ../js/ui/windowManager.js:84
msgid "Revert Settings"
msgstr "Palauta asetukset"
@ -1462,8 +1521,8 @@ msgstr[0] "Asetusmuutokset palautetaan %d sekunnissa"
msgstr[1] "Asetusmuutokset palautetaan %d sekunnissa"
#. Translators: This represents the size of a window. The first number is
#. * the width of the window and the second is the height. */
#: ../js/ui/windowManager.js:599
#. * the width of the window and the second is the height.
#: ../js/ui/windowManager.js:613
#, javascript-format
msgid "%d x %d"
msgstr "%d x %d"
@ -1534,28 +1593,28 @@ msgstr[1] "%u sisääntuloa"
msgid "System Sounds"
msgstr "Järjestelmän äänet"
#: ../src/main.c:373
#: ../src/main.c:372
msgid "Print version"
msgstr "Tulosta versio"
#: ../src/main.c:379
#: ../src/main.c:378
msgid "Mode used by GDM for login screen"
msgstr "GDM:n kirjautumisruudussa käyttämä tila"
#: ../src/main.c:385
#: ../src/main.c:384
msgid "Use a specific mode, e.g. \"gdm\" for login screen"
msgstr ""
#: ../src/main.c:391
#: ../src/main.c:390
msgid "List possible modes"
msgstr "Listaa mahdolliset tilat"
#: ../src/shell-app.c:247
#: ../src/shell-app.c:239
msgctxt "program"
msgid "Unknown"
msgstr "Tuntematon"
#: ../src/shell-app.c:488
#: ../src/shell-app.c:480
#, c-format
msgid "Failed to launch “%s”"
msgstr "Sovelluksen ”%s” käynnistäminen epäonnistui"

1369
po/pt.po

File diff suppressed because it is too large Load Diff

View File

@ -181,7 +181,6 @@ shell_prefs_init (void)
g_object_get (G_OBJECT (settings), "schema-id", &schema_id, NULL);
keys = g_settings_list_keys (settings);
for (keys = k = g_settings_list_keys (settings); *k; k++)
meta_prefs_override_preference_schema (*k, schema_id);

View File

@ -83,12 +83,18 @@ scan_startup_wm_class_to_id (ShellAppSystem *self)
for (l = apps; l != NULL; l = l->next)
{
GAppInfo *info = l->data;
const char *startup_wm_class, *id;
const char *startup_wm_class, *id, *old_id;
id = g_app_info_get_id (info);
startup_wm_class = g_desktop_app_info_get_startup_wm_class (G_DESKTOP_APP_INFO (info));
if (startup_wm_class != NULL)
if (startup_wm_class == NULL)
continue;
/* In case multiple .desktop files set the same StartupWMClass, prefer
* the one where ID and StartupWMClass match */
old_id = g_hash_table_lookup (priv->startup_wm_class_to_id, startup_wm_class);
if (old_id == NULL || strcmp (id, startup_wm_class) == 0)
g_hash_table_insert (priv->startup_wm_class_to_id,
g_strdup (startup_wm_class), g_strdup (id));
}
@ -377,3 +383,28 @@ shell_app_system_get_running (ShellAppSystem *self)
return ret;
}
/**
* shell_app_system_search:
* @search_string: the search string to use
*
* Wrapper around g_desktop_app_info_search() that replaces results that
* don't validate as UTF-8 with the empty string.
*
* Returns: (array zero-terminated=1) (element-type GStrv) (transfer full): a
* list of strvs. Free each item with g_strfreev() and free the outer
* list with g_free().
*/
char ***
shell_app_system_search (const char *search_string)
{
char ***results = g_desktop_app_info_search (search_string);
char ***groups, **ids;
for (groups = results; *groups; groups++)
for (ids = *groups; *ids; ids++)
if (!g_utf8_validate (*ids, -1, NULL))
**ids = '\0';
return results;
}

View File

@ -48,5 +48,6 @@ ShellApp *shell_app_system_lookup_desktop_wmclass (ShellAppSystem *s
const char *wmclass);
GSList *shell_app_system_get_running (ShellAppSystem *self);
char ***shell_app_system_search (const char *search_string);
#endif /* __SHELL_APP_SYSTEM_H__ */

View File

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