Compare commits

...

32 Commits

Author SHA1 Message Date
Florian Müllner
fea0192772 weather: Handle missing permission store
Our weather integration is supposed to follow GNOME Weather's settings,
including its permission to use location services. However there's a
discrepancy in case xdg-desktop-portal is unavailable:

While our geoclue agent grants all applications access to location
services in that case, the weather integration treats it as if
access was denied.

Fix this by handling this case explicitly.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1130
2019-04-03 13:27:42 +00:00
Florian Müllner
f81ac498fb ci: Use custom image for commit log check
We can speed up the check a little bit by using an image that
already contains git, so do that.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/480
2019-04-03 13:50:35 +02:00
Marco Trevisan (Treviño)
5357e0a18c st/settings: Add magnifier activation property and bind to settings
The same code for reading the current magnifier state is repeated in both
shell-recorder, shell-screenshot and magnifier itself.
So to move this inside a property of st-settings so that we can refer to it
all over the places removing duplications.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/473
2019-04-02 20:28:54 +00:00
Phil Wyett
d7632bbd3d Ignore '.vscode' folder for users of that editor
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/476
2019-04-02 17:37:31 +00:00
Carlos Garnacho
1b5e91e4b3 shell: Fallback on ISO 8601 datetime string for screenshot date info
If the locale doesn't honor strftime()'s %c argument, we would end up
feeding NULLs into GdkPixbuf tagging. Fallback to a sensible (although
not nicely localized) datetime string.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1017
2019-04-02 00:25:39 +00:00
Marco Trevisan (Treviño)
727195c767 magnifier: Use actor scaling filters on content texture node
Reuse the same filter values of the attached actor, instead of hardcoding the
defaults.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/454
2019-04-01 16:34:44 -04:00
Marco Trevisan (Treviño)
9158f55360 magnifier: Track cursor sprite changes only when active
There's no point in keeping the cursor sprite texture around all the time,
and to listen for its changes, we just need this when the magnifier is active.

So, initialize the magnifier texture and monitor for the sprite changes on
activation, while disconnect from the signal and nullify the texture when
the magnifier is deactivated.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/443
2019-04-01 16:34:44 -04:00
Marco Trevisan (Treviño)
8146e9d527 magnifier: Invalidate content size when it changes
In case the content size changes we need to invalidate its size in order to
trigger a full actor relayout.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/443
2019-04-01 16:34:44 -04:00
Marco Trevisan (Treviño)
4247251020 magnifier: Use all color channels to paint content texture node
In order to paint all the color channels of the content texture we need to
set the color channels to 255, so instead of doing this manually we can just
reuse the static color definition for white.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1020
2019-04-01 22:13:50 +02:00
Marco Trevisan (Treviño)
7eee0e0ed6 magnifier: Return all parameters on sprite content preferred size
ClutterContent's get_preferred_size should return a boolean weather the
preferred size is valid, so in javascript we've to return this state value
before out width and height.

Since this was not happening, clutter was considering the width as the state
(converting the non-zero value to true), the height as the width, while ignoring
the returned height (that was then defaulted to 0)

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1020
2019-04-01 22:13:50 +02:00
Dušan Kazik
4f0851ca77 Update Slovak translation 2019-04-01 15:09:41 +00:00
Daniel Mustieles
911ae49767 Updated Spanish translation 2019-04-01 10:29:36 +02:00
Carmen Bianca BAKKER
5af81d4057 Update Esperanto translation 2019-04-01 06:04:01 +00:00
Cheng-Chia Tseng
c435889baa Update Chinese (Taiwan) translation 2019-03-31 15:34:17 +00:00
Cheng-Chia Tseng
49f79d9d5d Update Chinese (Taiwan) translation 2019-03-31 15:12:01 +00:00
Florian Müllner
1767cd0f6c app: Consider "quit" action for quit
Just like we take a remote "new-window" action into account for
opening new windows, we should call an explicit "quit" action
before falling back to closing all the app's windows on quit.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/624
2019-03-28 00:02:20 +00:00
Marco Trevisan (Treviño)
3e0915521a magnifier: Only connect to signals when ZoomRegion is active
There's no need to listen signals when the zoom region is inactive, so let's
just connect/disconnect them.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/472
2019-03-28 00:38:42 +01:00
Marco Trevisan (Treviño)
a298943fac magnifier: Update screen position on activation
The default ZoomRegion is created at startup and only updated if it is active
when the monitor setup changes. Thus when reactivating the magnifier after a
display change, the viewport used is still the one that been computed with the
old screen geometry values.

Move screen update code inside a function and call it both when activating
the zoom region and when the monitor changes during a zoom session.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1120
2019-03-28 00:38:42 +01:00
Florian Müllner
df9ddf96a5 iconGrid: Chain up in style-changed
Commit 81ec8215a0 moved the handling of style changes from a signal
handler to a vfunc without chaining up to the parent, losing propagating
the change to children and queueing a paint update.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1117
2019-03-27 18:10:52 +01:00
Florian Müllner
4fa5d701d5 network: Catch errors when reading devices
NetworkManager added support for a new device - NMDeviceWifiP2P - but
did not add the corresponding enum value in NMDeviceType. The return
value for nm_device_get_device_type() is therefore "illegal" for the
newly added device, and gjs throws an exception.

This should ultimately be fixed in libnm, but as errors when adding
one device shouldn't interfere with adding any other devices, catching
exception is a good idea anyway, so do just that.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1023
2019-03-27 15:06:49 +00:00
Goran Vidović
b05683d586 Update Croatian translation 2019-03-26 11:34:00 +00:00
Andrea Azzarone
2f3f3fbcdb boxpointer: Calculate position using workarea
Take the workarea into consideration when calculating the position and the size
of box pointer and of its arrow.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1102
2019-03-22 12:31:48 +00:00
Florian Müllner
611605a67f scripting: Don't use legacy API
The current scripting module makes heavy use of pre-standardized
iterator/generator/promise APIs, at least for some of those support
was pulled in SpiderMonkey 58.

Port to the new standardized replacements to get the module back into
a working state.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/440
2019-03-21 10:18:02 +00:00
Florian Müllner
0427a782be main: Wait for startup completion before running perf script
The scripts generally assume a functional shell, so wait until
that is the case.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/440
2019-03-21 10:18:02 +00:00
Florian Müllner
32baff5906 perf: Use var for METRICS
Each perf module exposes it to the scripting module to report metrics
after all tests have been run. The symbol's scope should allow that,
so declare it as var.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/440
2019-03-21 10:18:02 +00:00
Florian Müllner
0089143d06 aggregateMenu: Include action buttons in width computation again
Commit 1b169655ac removed the system indicator from the list of children
that are considered for the overall menu width, because we do want the
log-out submenu to adapt to the available width.

However as a side effect, action buttons no longer contribute to the
width either, so if extensions add additional buttons, the menu is
likely to overflow.

Avoid this by only adding the button group to the list of size children.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1094
2019-03-21 10:08:29 +00:00
Khaled Hosny
05e55cee23 Update Arabic translation 2019-03-18 14:37:34 +02:00
Florian Müllner
31e7f0340f windowCycler: Create settings before chaining up
It's used in _getWindows() which is called from the parent's _init().

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1064
2019-03-18 09:48:02 +00:00
Xiaoguang Wang
6e317a54fd screenShield: Handle signal 'StatusChanged' when lockscreen is active
When lockscreen is active, screen can't be dimed if signal
'StatusChanged' is ignored. We need to handle this signal.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/900
2019-03-18 08:32:54 +08:00
Charles Monzat
9c1f62c38c Update French translation 2019-03-17 18:59:32 +00:00
Piotr Drąg
1341d5557f Fix Icon in Tajik translation 2019-03-16 18:21:38 +01:00
Bruce Cowan
b7d79a5f06 Update British English translation 2019-03-16 11:19:57 +00:00
28 changed files with 3831 additions and 3212 deletions

1
.gitignore vendored
View File

@@ -80,3 +80,4 @@ tests/run-test.sh
*~
*.patch
*.sw?
.vscode

View File

@@ -15,10 +15,8 @@ variables:
- merge_requests
check_commit_log:
image: registry.fedoraproject.org/fedora:latest
image: registry.gitlab.gnome.org/gnome/mutter/master:v1
stage: review
before_script:
- dnf install -y git
script:
- ./.gitlab-ci/check-commit-log.sh
only:

View File

@@ -30,6 +30,14 @@ var WeatherClient = class {
return;
}
if (this._permStore.g_name_owner == null) {
// Failed to auto-start, likely because xdg-desktop-portal
// isn't installed; don't restrict access to location service
this._weatherAuthorized = true;
this._updateAutoLocation();
return;
}
this._permStore.LookupRemote('gnome', 'geolocation', (res, error) => {
if (error)
log('Error looking up permission: ' + error.message);

View File

@@ -10,7 +10,7 @@ const Scripting = imports.ui.scripting;
// someone should be able to get an idea of how well the shell is performing
// on a particular system.
let METRICS = {
var METRICS = {
overviewLatencyFirst:
{ description: "Time to first frame after triggering overview, first time",
units: "us" },

View File

@@ -2,7 +2,7 @@ const { Clutter, Gio, Gtk, Shell } = imports.gi;
const Main = imports.ui.main;
const Scripting = imports.ui.scripting;
let METRICS = {
var METRICS = {
timeToDesktop:
{ description: "Time from starting graphical.target to desktop showing",
units: "us" },

View File

@@ -619,9 +619,8 @@ class WindowSwitcherPopup extends SwitcherPopup.SwitcherPopup {
var WindowCyclerPopup = GObject.registerClass(
class WindowCyclerPopup extends CyclerPopup {
_init() {
super._init();
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
super._init();
}
_getWindows() {

View File

@@ -24,7 +24,7 @@ var POPUP_ANIMATION_TIME = 0.15;
* placed. The arrow position may be controlled via
* setArrowOrigin(). The arrow side might be temporarily flipped
* depending on the box size and source position to keep the box
* totally inside the monitor if possible.
* totally inside the monitor workarea if possible.
*
*/
var BoxPointer = GObject.registerClass({
@@ -489,7 +489,8 @@ var BoxPointer = GObject.registerClass({
// We also want to keep it onscreen, and separated from the
// edge by the same distance as the main part of the box is
// separated from its sourceActor
let monitor = Main.layoutManager.findMonitorForActor(sourceActor);
let monitorIndex = Main.layoutManager.findIndexForActor(sourceActor);
let workarea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
let themeNode = this.get_theme_node();
let borderWidth = themeNode.get_length('-arrow-border-width');
let arrowBase = themeNode.get_length('-arrow-base');
@@ -539,8 +540,8 @@ var BoxPointer = GObject.registerClass({
case St.Side.BOTTOM:
resX = sourceCenterX - (halfMargin + (natWidth - margin) * alignment);
resX = Math.max(resX, monitor.x + padding);
resX = Math.min(resX, monitor.x + monitor.width - (padding + natWidth));
resX = Math.max(resX, workarea.x + padding);
resX = Math.min(resX, workarea.x + workarea.width - (padding + natWidth));
arrowOrigin = sourceCenterX - resX;
if (arrowOrigin <= (x1 + (borderRadius + halfBase))) {
@@ -558,8 +559,8 @@ var BoxPointer = GObject.registerClass({
case St.Side.RIGHT:
resY = sourceCenterY - (halfMargin + (natHeight - margin) * alignment);
resY = Math.max(resY, monitor.y + padding);
resY = Math.min(resY, monitor.y + monitor.height - (padding + natHeight));
resY = Math.max(resY, workarea.y + padding);
resY = Math.min(resY, workarea.y + workarea.height - (padding + natHeight));
arrowOrigin = sourceCenterY - resY;
if (arrowOrigin <= (y1 + (borderRadius + halfBase))) {
@@ -625,27 +626,28 @@ var BoxPointer = GObject.registerClass({
let monitorActor = this.sourceActor;
if (!monitorActor)
monitorActor = this;
let monitor = Main.layoutManager.findMonitorForActor(monitorActor);
let monitorIndex = Main.layoutManager.findIndexForActor(monitorActor);
let workarea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
switch (arrowSide) {
case St.Side.TOP:
if (sourceAllocation.y2 + boxHeight > monitor.y + monitor.height &&
boxHeight < sourceAllocation.y1 - monitor.y)
if (sourceAllocation.y2 + boxHeight > workarea.y + workarea.height &&
boxHeight < sourceAllocation.y1 - workarea.y)
return St.Side.BOTTOM;
break;
case St.Side.BOTTOM:
if (sourceAllocation.y1 - boxHeight < monitor.y &&
boxHeight < monitor.y + monitor.height - sourceAllocation.y2)
if (sourceAllocation.y1 - boxHeight < workarea.y &&
boxHeight < workarea.y + workarea.height - sourceAllocation.y2)
return St.Side.TOP;
break;
case St.Side.LEFT:
if (sourceAllocation.x2 + boxWidth > monitor.x + monitor.width &&
boxWidth < sourceAllocation.x1 - monitor.x)
if (sourceAllocation.x2 + boxWidth > workarea.x + workarea.width &&
boxWidth < sourceAllocation.x1 - workarea.x)
return St.Side.RIGHT;
break;
case St.Side.RIGHT:
if (sourceAllocation.x1 - boxWidth < monitor.x &&
boxWidth < monitor.x + monitor.width - sourceAllocation.x2)
if (sourceAllocation.x1 - boxWidth < workarea.x &&
boxWidth < workarea.x + workarea.width - sourceAllocation.x2)
return St.Side.LEFT;
break;
}

View File

@@ -104,6 +104,7 @@ class BaseIcon extends St.Bin {
}
vfunc_style_changed() {
super.vfunc_style_changed();
let node = this.get_theme_node();
let size;

View File

@@ -18,9 +18,6 @@ var NO_CHANGE = 0.0;
var POINTER_REST_TIME = 1000; // milliseconds
// Settings
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEY = 'screen-magnifier-enabled';
const MAGNIFIER_SCHEMA = 'org.gnome.desktop.a11y.magnifier';
const SCREEN_POSITION_KEY = 'screen-position';
const MAG_FACTOR_KEY = 'mag-factor';
@@ -56,20 +53,19 @@ var MouseSpriteContent = GObject.registerClass({
vfunc_get_preferred_size() {
if (!this._texture)
return [0, 0];
return [false, 0, 0];
return [this._texture.get_width(), this._texture.get_height()];
return [true, this._texture.get_width(), this._texture.get_height()];
}
vfunc_paint_content(actor, node) {
if (!this._texture)
return;
let color = new Clutter.Color();
let color = Clutter.Color.get_static(Clutter.StaticColor.WHITE);
let [minFilter, magFilter] = actor.get_content_scaling_filters();
let textureNode = new Clutter.TextureNode(this._texture,
color,
Clutter.ScalingFilter.NEAREST,
Clutter.ScalingFilter.NEAREST);
color, minFilter, magFilter);
textureNode.set_name('MouseSpriteContent');
node.add_child(textureNode);
@@ -84,8 +80,14 @@ var MouseSpriteContent = GObject.registerClass({
if (this._texture == coglTexture)
return;
let oldTexture = this._texture;
this._texture = coglTexture;
this.invalidate();
if (!oldTexture || !coglTexture ||
oldTexture.get_width() != coglTexture.get_width() ||
oldTexture.get_height() != coglTexture.get_height())
this.invalidate_size();
}
});
@@ -100,7 +102,6 @@ var Magnifier = class Magnifier {
this._mouseSprite = new Clutter.Actor({ request_mode: Clutter.RequestMode.CONTENT_SIZE });
this._mouseSprite.content = new MouseSpriteContent();
this._updateSpriteTexture();
this._cursorRoot = new Clutter.Actor();
this._cursorRoot.add_actor(this._mouseSprite);
@@ -113,14 +114,16 @@ var Magnifier = class Magnifier {
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
this._zoomRegions.push(aZoomRegion);
let showAtLaunch = this._settingsInit(aZoomRegion);
this._settingsInit(aZoomRegion);
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
cursorTracker.connect('cursor-changed', this._updateMouseSprite.bind(this));
St.Settings.get().connect('notify::magnifier-active', () => {
this.setActive(St.Settings.get().magnifier_active);
});
// Export to dbus.
magDBusService = new MagnifierDBus.ShellMagnifier();
this.setActive(showAtLaunch);
this.setActive(St.Settings.get().magnifier_active);
}
/**
@@ -153,9 +156,15 @@ var Magnifier = class Magnifier {
if (isActive != activate) {
if (activate) {
this._updateMouseSprite();
this._cursorSpriteChangedId =
this._cursorTracker.connect('cursor-changed',
this._updateMouseSprite.bind(this));
Meta.disable_unredirect_for_display(global.display);
this.startTrackingMouse();
} else {
this._cursorTracker.disconnect(this._cursorSpriteChangedId);
this._mouseSprite.content.texture = null;
Meta.enable_unredirect_for_display(global.display);
this.stopTrackingMouse();
}
@@ -493,13 +502,8 @@ var Magnifier = class Magnifier {
}
_settingsInit(zoomRegion) {
this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema_id: MAGNIFIER_SCHEMA });
this._appSettings.connect('changed::' + SHOW_KEY, () => {
this.setActive(this._appSettings.get_boolean(SHOW_KEY));
});
this._settings.connect('changed::' + SCREEN_POSITION_KEY,
this._updateScreenPosition.bind(this));
this._settings.connect('changed::' + MAG_FACTOR_KEY,
@@ -606,8 +610,6 @@ var Magnifier = class Magnifier {
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
this.addCrosshairs();
this.setCrosshairsVisible(showCrosshairs);
return this._appSettings.get_boolean(SHOW_KEY);
}
_updateScreenPosition() {
@@ -754,13 +756,41 @@ var ZoomRegion = class ZoomRegion {
this._pointerIdleMonitor = Meta.IdleMonitor.get_for_device(Meta.VIRTUAL_CORE_POINTER_ID);
this._scrollContentsTimerId = 0;
}
Main.layoutManager.connect('monitors-changed',
this._monitorsChanged.bind(this));
this._focusCaretTracker.connect('caret-moved',
this._updateCaret.bind(this));
this._focusCaretTracker.connect('focus-changed',
this._updateFocus.bind(this));
_connectSignals() {
if (this._signalConnections)
return;
this._signalConnections = [];
let id = Main.layoutManager.connect('monitors-changed',
this._monitorsChanged.bind(this));
this._signalConnections.push([Main.layoutManager, id]);
id = this._focusCaretTracker.connect('caret-moved', this._updateCaret.bind(this));
this._signalConnections.push([this._focusCaretTracker, id]);
id = this._focusCaretTracker.connect('focus-changed', this._updateFocus.bind(this));
this._signalConnections.push([this._focusCaretTracker, id]);
}
_disconnectSignals() {
for (let [obj, id] of this._signalConnections)
obj.disconnect(id);
delete this._signalConnections;
}
_updateScreenPosition() {
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
this._setViewPort({
x: this._viewPortX,
y: this._viewPortY,
width: this._viewPortWidth,
height: this._viewPortHeight
});
else
this.setScreenPosition(this._screenPosition);
}
_updateFocus(caller, event) {
@@ -808,10 +838,13 @@ var ZoomRegion = class ZoomRegion {
this._createActors();
if (this._isMouseOverRegion())
this._magnifier.hideSystemCursor();
this._updateScreenPosition();
this._updateMagViewGeometry();
this._updateCloneGeometry();
this._updateMousePosition();
this._connectSignals();
} else {
this._disconnectSignals();
this._destroyActors();
}
@@ -1561,18 +1594,8 @@ var ZoomRegion = class ZoomRegion {
}
_monitorsChanged() {
if (!this.isActive())
return;
this._background.set_size(global.screen_width, global.screen_height);
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
this._setViewPort({ x: this._viewPortX,
y: this._viewPortY,
width: this._viewPortWidth,
height: this._viewPortHeight });
else
this.setScreenPosition(this._screenPosition);
this._updateScreenPosition();
}
};

View File

@@ -211,13 +211,6 @@ function _initializeUI() {
_startDate = new Date();
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
if (perfModuleName) {
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
let module = eval('imports.perf.' + perfModuleName + ';');
Scripting.runPerfScript(module, perfOutput);
}
ExtensionDownloader.init();
ExtensionSystem.init();
@@ -239,6 +232,13 @@ function _initializeUI() {
Shell.Global.log_structured('GNOME Shell started at ' + _startDate,
['MESSAGE_ID=' + GNOMESHELL_STARTED_MESSAGE_ID]);
}
let perfModuleName = GLib.getenv("SHELL_PERF_MODULE");
if (perfModuleName) {
let perfOutput = GLib.getenv("SHELL_PERF_OUTPUT");
let module = eval('imports.perf.' + perfModuleName + ';');
Scripting.runPerfScript(module, perfOutput);
}
});
}

View File

@@ -809,6 +809,7 @@ class AggregateMenu extends PanelMenu.Button {
menuLayout.addSizeChild(this._location.menu.actor);
menuLayout.addSizeChild(this._rfkill.menu.actor);
menuLayout.addSizeChild(this._power.menu.actor);
menuLayout.addSizeChild(this._system.buttonGroup);
}
});

View File

@@ -810,16 +810,8 @@ var ScreenShield = class {
this._maybeCancelDialog();
if (this._longLightbox.actor.visible ||
this._isActive) {
// We're either shown and active, or in the process of
// showing.
// The latter is a very unlikely condition (it requires
// idle-delay < 20), but in any case we have nothing
// to do at this point: either isActive is true, or
// it will soon be.
// isActive can also be true if the lightbox is hidden,
// in case the shield is down and the user hasn't unlocked yet
if (this._longLightbox.actor.visible) {
// We're in the process of showing.
return;
}

View File

@@ -37,16 +37,13 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
* 'yield Scripting.sleep(500);'
*/
function sleep(milliseconds) {
let cb;
let id = Mainloop.timeout_add(milliseconds, () => {
if (cb)
cb();
return GLib.SOURCE_REMOVE;
return new Promise(resolve => {
let id = Mainloop.timeout_add(milliseconds, () => {
resolve();
return GLib.SOURCE_REMOVE;
});
GLib.Source.set_name_by_id(id, '[gnome-shell] sleep');
});
GLib.Source.set_name_by_id(id, '[gnome-shell] sleep');
return callback => { cb = callback; };
}
/**
@@ -57,14 +54,9 @@ function sleep(milliseconds) {
* 'yield Scripting.waitLeisure();'
*/
function waitLeisure() {
let cb;
global.run_at_leisure(() => {
if (cb)
cb();
return new Promise(resolve => {
global.run_at_leisure(resolve);
});
return callback => { cb = callback; };
}
const PerfHelperIface = loadInterfaceXML('org.gnome.Shell.PerfHelper');
@@ -82,25 +74,16 @@ function _getPerfHelper() {
}
function _callRemote(obj, method, ...args) {
let cb;
let errcb;
return new Promise((resolve, reject) => {
args.push((result, excp) => {
if (excp)
reject(excp);
else
resolve();
});
args.push((result, excp) => {
if (excp) {
if (errcb)
errcb(excp);
} else {
if (cb)
cb();
}
method.apply(obj, args);
});
method.apply(obj, args);
return (callback, error_callback) => {
cb = callback;
errcb = error_callback;
};
}
/**
@@ -192,27 +175,6 @@ function collectStatistics() {
Shell.PerfLog.get_default().collect_statistics();
}
function _step(g, finish, onError) {
try {
let waitFunction = g.next();
waitFunction(() => {
_step(g, finish, onError);
},
err => {
if (onError)
onError(err);
});
} catch (err) {
if (err instanceof StopIteration) {
if (finish)
finish();
} else {
if (onError)
onError(err);
}
}
}
function _collect(scriptModule, outputFile) {
let eventHandlers = {};
@@ -348,23 +310,23 @@ function _collect(scriptModule, outputFile) {
* After running the script and collecting statistics from the
* event log, GNOME Shell will exit.
**/
function runPerfScript(scriptModule, outputFile) {
async function runPerfScript(scriptModule, outputFile) {
Shell.PerfLog.get_default().set_enabled(true);
let g = scriptModule.run();
for (let step of scriptModule.run()) {
try {
await step;
} catch (err) {
log(`Script failed: ${err}\n${err.stack}`);
Meta.exit(Meta.ExitCode.ERROR);
}
}
_step(g,
() => {
try {
_collect(scriptModule, outputFile);
} catch (err) {
log("Script failed: " + err + "\n" + err.stack);
Meta.exit(Meta.ExitCode.ERROR);
}
Meta.exit(Meta.ExitCode.SUCCESS);
},
err => {
log("Script failed: " + err + "\n" + err.stack);
Meta.exit(Meta.ExitCode.ERROR);
});
try {
_collect(scriptModule, outputFile);
} catch (err) {
log(`Script failed: ${err}\n${err.stack}`);
Meta.exit(Meta.ExitCode.ERROR);
}
Meta.exit(Meta.ExitCode.SUCCESS);
}

View File

@@ -1673,7 +1673,11 @@ var NMApplet = class extends PanelMenu.SystemIndicator {
_readDevices() {
let devices = this._client.get_devices() || [ ];
for (let i = 0; i < devices.length; ++i) {
this._deviceAdded(this._client, devices[i], true);
try {
this._deviceAdded(this._client, devices[i], true);
} catch (e) {
log(`Failed to add device ${devices[i]}: ${e}`);
}
}
this._syncDeviceNames();
}

View File

@@ -236,6 +236,7 @@ var Indicator = class extends PanelMenu.SystemIndicator {
item = new PopupMenu.PopupBaseMenuItem({ reactive: false,
can_focus: false });
this.buttonGroup = item.actor;
let app = this._settingsApp = Shell.AppSystem.get_default().lookup_app(
'gnome-control-center.desktop'

1038
po/ar.po

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

143
po/eo.po
View File

@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-02-21 18:43+0000\n"
"PO-Revision-Date: 2019-02-22 13:19+0100\n"
"Last-Translator: Carmen Bianca BAKKER <carmen@carmenbianca.eu>\n"
"POT-Creation-Date: 2019-03-24 17:37+0000\n"
"PO-Revision-Date: 2019-03-31 00:14+0100\n"
"Last-Translator: Carmen Bianca Bakker <carmen@carmenbianca.eu>\n"
"Language-Team: Esperanto <gnome-eo-list@gnome.org>\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
@@ -185,8 +185,8 @@ msgstr "Klavkombino por malfermi la “Montri aplikaĵojn”-vidon"
msgid ""
"Keybinding to open the “Show Applications” view of the Activities Overview."
msgstr ""
"Klavkombino por malfermi la “Montri aplikaĵojn” vidon de la aktivecoj "
"superrigardo."
"Klavkombino por malfermi la “Montri aplikaĵojn” vidon de la Aktivecoj-"
"Superrigardo."
#: data/org.gnome.shell.gschema.xml.in:124
msgid "Keybinding to open the overview"
@@ -194,7 +194,7 @@ msgstr "Klavkombino por malfermi la superrigardon"
#: data/org.gnome.shell.gschema.xml.in:125
msgid "Keybinding to open the Activities Overview."
msgstr "Klavkombino por malfermi la aktivecoj superrigardon."
msgstr "Klavkombino por malfermi la Aktivecoj-Superrigardon."
#: data/org.gnome.shell.gschema.xml.in:131
msgid "Keybinding to toggle the visibility of the notification list"
@@ -334,11 +334,6 @@ msgstr "En musa reĝimo, prokrasti ŝanĝi fokuson ĝis la musmontrilo haltas"
msgid "Network Login"
msgstr "Reta saluto"
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
msgid "network-workgroup"
msgstr "network-workgroup"
#: js/extensionPrefs/main.js:116
msgid "Somethings gone wrong"
msgstr "Io fiaskis"
@@ -419,7 +414,7 @@ msgstr "Ĉu ne en listo?"
#. 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:880
#: js/gdm/loginDialog.js:884
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(ekzemple, uzanto aŭ %s)"
@@ -427,12 +422,12 @@ msgstr "(ekzemple, uzanto aŭ %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js:885 js/ui/components/networkAgent.js:243
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Uzantonomo: "
#: js/gdm/loginDialog.js:1223
#: js/gdm/loginDialog.js:1227
msgid "Login Window"
msgstr "Salutfenestro"
@@ -993,7 +988,7 @@ msgstr "Portebla larĝkapacita retopasvorto"
msgid "A password is required to connect to “%s”."
msgstr "Pasvorto estas bezonata por konekti al “%s”."
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Retadministrilo"
@@ -1240,26 +1235,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Ĉu elŝuti kaj instali “%s” de extensions.gnome.org?"
#. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:50
#: js/ui/inhibitShortcutsDialog.js:78
#, javascript-format
msgid "%s wants to inhibit shortcuts"
msgstr "%s volas malebligi klavkombinojn"
#: js/ui/inhibitShortcutsDialog.js:51
#: js/ui/inhibitShortcutsDialog.js:79
msgid "Application wants to inhibit shortcuts"
msgstr "Aplikaĵo volas malebligi klavkombinojn"
#. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:60
#: js/ui/inhibitShortcutsDialog.js:88
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "Vi povas restaŭri klavkombinojn per premi %s."
#: js/ui/inhibitShortcutsDialog.js:65
#: js/ui/inhibitShortcutsDialog.js:93
msgid "Deny"
msgstr "Rifuzi"
#: js/ui/inhibitShortcutsDialog.js:71
#: js/ui/inhibitShortcutsDialog.js:100
msgid "Allow"
msgstr "Akcepti"
@@ -1310,13 +1305,13 @@ msgid "Leave On"
msgstr "Lasi ŝaltita"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1264
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Ŝalti"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1264 js/ui/status/network.js:1376
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1326,59 +1321,59 @@ msgstr "Malŝalti"
msgid "Leave Off"
msgstr "Lasi malŝaltita"
#: js/ui/keyboard.js:203
#: js/ui/keyboard.js:200
msgid "Region & Language Settings"
msgstr "Regiono & lingvo agordoj"
#: js/ui/lookingGlass.js:614
#: js/ui/lookingGlass.js:615
msgid "No extensions installed"
msgstr "Neniu kromprogramo instalita"
#. Translators: argument is an extension UUID.
#: js/ui/lookingGlass.js:668
#: js/ui/lookingGlass.js:669
#, javascript-format
msgid "%s has not emitted any errors."
msgstr "%s ne eligintaj ajnaj eraroj."
#: js/ui/lookingGlass.js:674
#: js/ui/lookingGlass.js:675
msgid "Hide Errors"
msgstr "Kaŝi erarojn"
#: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738
#: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739
msgid "Show Errors"
msgstr "Montri erarojn"
#: js/ui/lookingGlass.js:687
#: js/ui/lookingGlass.js:688
msgid "Enabled"
msgstr "Enŝaltita"
#. translators:
#. * The device has been disabled
#: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866
#: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864
msgid "Disabled"
msgstr "Elŝaltita"
#: js/ui/lookingGlass.js:692
#: js/ui/lookingGlass.js:693
msgid "Error"
msgstr "Eraro"
#: js/ui/lookingGlass.js:694
#: js/ui/lookingGlass.js:695
msgid "Out of date"
msgstr "Neaktuala"
#: js/ui/lookingGlass.js:696
#: js/ui/lookingGlass.js:697
msgid "Downloading"
msgstr "Elŝutante"
#: js/ui/lookingGlass.js:720
#: js/ui/lookingGlass.js:721
msgid "View Source"
msgstr "Montri fonton"
#: js/ui/lookingGlass.js:729
#: js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "Retpaĝo"
#: js/ui/messageTray.js:1474
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Sisteminformoj"
@@ -1404,13 +1399,14 @@ msgstr "Malfari"
msgid "Overview"
msgstr "Superrigardo"
# Imperativo
#. Translators: this is the text displayed
#. in the search entry when no search is
#. active; it should not exceed ~30
#. characters.
#: js/ui/overview.js:226
msgid "Type to search…"
msgstr "Tajpi por serĉi…"
msgstr "Tajpu por serĉi…"
#: js/ui/padOsd.js:92
msgid "New shortcut…"
@@ -1462,16 +1458,16 @@ msgstr "Ĉesi"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: js/ui/panel.js:466
#: js/ui/panel.js:471
msgid "Activities"
msgstr "Aktivecoj"
#: js/ui/panel.js:741
#: js/ui/panel.js:746
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Sistemo"
#: js/ui/panel.js:861
#: js/ui/panel.js:867
msgid "Top Bar"
msgstr "Supra breto"
@@ -1520,7 +1516,7 @@ msgid_plural "%d new notifications"
msgstr[0] "%d nova sciigo"
msgstr[1] "%d novaj sciigoj"
#: js/ui/screenShield.js:449 js/ui/status/system.js:270
#: js/ui/screenShield.js:449 js/ui/status/system.js:271
msgid "Lock"
msgstr "Ŝlosi"
@@ -1535,11 +1531,11 @@ msgstr "GNOME bezonas ŝlosi la ekranon"
#.
#. XXX: another option is to kick the user into the gdm login
#. screen, where we're not affected by grabs
#: js/ui/screenShield.js:834 js/ui/screenShield.js:1307
#: js/ui/screenShield.js:826 js/ui/screenShield.js:1299
msgid "Unable to lock"
msgstr "Ne eblas ŝlosi"
#: js/ui/screenShield.js:835 js/ui/screenShield.js:1308
#: js/ui/screenShield.js:827 js/ui/screenShield.js:1300
msgid "Lock was blocked by an application"
msgstr "Ŝloso estis blokita de aplikaĵo"
@@ -1701,7 +1697,7 @@ msgid "<unknown>"
msgstr "<nekonata>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:416 js/ui/status/network.js:1293
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s malŝaltita"
@@ -1727,7 +1723,7 @@ msgid "%s Disconnecting"
msgstr "%s malkonektante"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:434 js/ui/status/network.js:1285
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format
msgid "%s Connecting"
msgstr "%s konektante"
@@ -1767,7 +1763,7 @@ msgid "Mobile Broadband Settings"
msgstr "Porteblaj larĝkapacitaj agordoj"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:553 js/ui/status/network.js:1290
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "%s aparataro malŝaltita"
@@ -1832,72 +1828,72 @@ msgid "Wi-Fi Settings"
msgstr "Vifio-agordoj"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1281
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "%s retkaptejo aktiva"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1296
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s nekonektita"
msgstr "%s ne konektita"
#: js/ui/status/network.js:1393
#: js/ui/status/network.js:1392
msgid "connecting…"
msgstr "konektante…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1396
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "aŭtentigo necesas"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "konekto malsukcesis"
#: js/ui/status/network.js:1448
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "VPR-agordoj"
#: js/ui/status/network.js:1465
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPR"
#: js/ui/status/network.js:1475
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPR malŝaltita"
#: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Ret-agordoj"
#: js/ui/status/network.js:1565
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s drata konekto"
msgstr[1] "%s drataj konektoj"
#: js/ui/status/network.js:1569
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s vifia konekto"
msgstr[1] "%s vifiaj konektoj"
#: js/ui/status/network.js:1573
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s modema konekto"
msgstr[1] "%s modemaj konektoj"
#: js/ui/status/network.js:1702
#: js/ui/status/network.js:1701
msgid "Connection failed"
msgstr "Konekto malsukcesis"
#: js/ui/status/network.js:1703
#: js/ui/status/network.js:1702
msgid "Activation of network connection failed"
msgstr "Aktivigo de reto-konekto malsukcesis"
@@ -1979,15 +1975,15 @@ msgstr "Adiaŭi"
msgid "Account Settings"
msgstr "Kontoagordoj"
#: js/ui/status/system.js:255
#: js/ui/status/system.js:256
msgid "Orientation Lock"
msgstr "Orientiĝa ŝloso"
#: js/ui/status/system.js:281
#: js/ui/status/system.js:282
msgid "Suspend"
msgstr "Dormeti"
#: js/ui/status/system.js:291
#: js/ui/status/system.js:292
msgid "Power Off"
msgstr "Malŝalti"
@@ -2175,11 +2171,6 @@ msgstr "Movi al dekstra ekrano"
msgid "Evolution Calendar"
msgstr "Evolucio-kalendaro"
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: src/calendar-server/evolution-calendar.desktop.in:6
msgid "evolution"
msgstr "evolution"
#: src/main.c:408
msgid "Print version"
msgstr "Presi version"
@@ -2196,12 +2187,12 @@ msgstr "Uzi specifan reĝimon, ekz. “gdm” por la salut-ekrano"
msgid "List possible modes"
msgstr "Listigi eblajn reĝimojn"
#: src/shell-app.c:260
#: src/shell-app.c:264
msgctxt "program"
msgid "Unknown"
msgstr "Nekonata"
#: src/shell-app.c:511
#: src/shell-app.c:515
#, c-format
msgid "Failed to launch “%s”"
msgstr "Malsukcesis lanĉi “%s”"
@@ -2220,7 +2211,7 @@ msgstr "La uzanto malakceptis la aŭtentigan dialogon"
#. translators:
#. * The number of sound outputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1873
#: subprojects/gvc/gvc-mixer-control.c:1871
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@@ -2229,17 +2220,23 @@ msgstr[1] "%u eligoj"
#. translators:
#. * The number of sound inputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1883
#: subprojects/gvc/gvc-mixer-control.c:1881
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u enigo"
msgstr[1] "%u enigoj"
#: subprojects/gvc/gvc-mixer-control.c:2738
#: subprojects/gvc/gvc-mixer-control.c:2736
msgid "System Sounds"
msgstr "Sistemsonoj"
#~ msgid "network-workgroup"
#~ msgstr "network-workgroup"
#~ msgid "evolution"
#~ msgstr "evolution"
#~ msgid "There was an error loading the preferences dialog for %s:"
#~ msgstr "Eraro okazis dum ŝarĝado de la agorda dialogo de %s:"

780
po/es.po

File diff suppressed because it is too large Load Diff

114
po/fr.po
View File

@@ -14,23 +14,23 @@
# Alain Lojewski <allomervan@gmail.com>, 2014-2018.
# Erwan Georget <egeorget@opmbx.org>, 2016.
# Claude Paroz <claude@2xlibre.net>, 2010-2011, 2016.
# Charles Monzat <charles.monzat@numericable.fr>, 2016-2018.
# Julien Humbert <julroy67@gmail.com>, 2019.
# Charles Monzat <charles.monzat@free.fr>, 2016-2019.
#
msgid ""
msgstr ""
"Project-Id-Version: gnome-shell master fr\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
"POT-Creation-Date: 2019-02-28 03:16+0000\n"
"PO-Revision-Date: 2019-02-28 08:29+0100\n"
"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
"Language-Team: français <gnomefr@traduc.org>\n"
"POT-Creation-Date: 2019-03-13 20:47+0000\n"
"PO-Revision-Date: 2019-03-17 19:15+0100\n"
"Last-Translator: Charles Monzat <charles.monzat@free.fr>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Gtranslator 3.32.0\n"
#: data/50-gnome-shell-system.xml:6
msgid "System"
@@ -482,7 +482,7 @@ msgstr "Absent de la liste ?"
#. 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:880
#: js/gdm/loginDialog.js:884
#, javascript-format
msgid "(e.g., user or %s)"
msgstr "(par ex. utilisateur ou %s)"
@@ -490,12 +490,12 @@ msgstr "(par ex. utilisateur ou %s)"
#. TTLS and PEAP are actually much more complicated, but this complication
#. is not visible here since we only care about phase2 authentication
#. (and don't even care of which one)
#: js/gdm/loginDialog.js:885 js/ui/components/networkAgent.js:243
#: js/gdm/loginDialog.js:889 js/ui/components/networkAgent.js:243
#: js/ui/components/networkAgent.js:263 js/ui/components/networkAgent.js:281
msgid "Username: "
msgstr "Nom dutilisateur : "
#: js/gdm/loginDialog.js:1223
#: js/gdm/loginDialog.js:1227
msgid "Login Window"
msgstr "Fenêtre de connexion"
@@ -1075,7 +1075,7 @@ msgstr "Mot de passe de la connexion mobile"
msgid "A password is required to connect to “%s”."
msgstr "Un mot de passe est requis pour se connecter à « %s »."
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1665
#: js/ui/components/networkAgent.js:674 js/ui/status/network.js:1664
msgid "Network Manager"
msgstr "Gestionnaire de réseau"
@@ -1335,26 +1335,26 @@ msgid "Download and install “%s” from extensions.gnome.org?"
msgstr "Télécharger et installer « %s » à partir de extensions.gnome.org ?"
#. Translators: %s is an application name like "Settings"
#: js/ui/inhibitShortcutsDialog.js:50
#: js/ui/inhibitShortcutsDialog.js:78
#, javascript-format
msgid "%s wants to inhibit shortcuts"
msgstr "%s veut neutraliser les raccourcis"
#: js/ui/inhibitShortcutsDialog.js:51
#: js/ui/inhibitShortcutsDialog.js:79
msgid "Application wants to inhibit shortcuts"
msgstr "Lapplication veut neutraliser les raccourcis"
#. Translators: %s is a keyboard shortcut like "Super+x"
#: js/ui/inhibitShortcutsDialog.js:60
#: js/ui/inhibitShortcutsDialog.js:88
#, javascript-format
msgid "You can restore shortcuts by pressing %s."
msgstr "Pour restaurer les raccourcis, appuyez sur %s."
#: js/ui/inhibitShortcutsDialog.js:65
#: js/ui/inhibitShortcutsDialog.js:93
msgid "Deny"
msgstr "Refuser"
#: js/ui/inhibitShortcutsDialog.js:71
#: js/ui/inhibitShortcutsDialog.js:100
msgid "Allow"
msgstr "Autoriser"
@@ -1407,13 +1407,13 @@ msgid "Leave On"
msgstr "Laisser activé"
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:1264
#: js/ui/status/network.js:1263
msgid "Turn On"
msgstr "Activer"
#: js/ui/kbdA11yDialog.js:65 js/ui/status/bluetooth.js:133
#: js/ui/status/network.js:128 js/ui/status/network.js:310
#: js/ui/status/network.js:1264 js/ui/status/network.js:1376
#: js/ui/status/network.js:1263 js/ui/status/network.js:1375
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
#: js/ui/status/rfkill.js:106
msgid "Turn Off"
@@ -1423,59 +1423,59 @@ msgstr "Éteindre"
msgid "Leave Off"
msgstr "Laisser éteint"
#: js/ui/keyboard.js:203
#: js/ui/keyboard.js:200
msgid "Region & Language Settings"
msgstr "Paramètres de langue et région"
#: js/ui/lookingGlass.js:614
#: js/ui/lookingGlass.js:615
msgid "No extensions installed"
msgstr "Aucune extension installée"
#. Translators: argument is an extension UUID.
#: js/ui/lookingGlass.js:668
#: js/ui/lookingGlass.js:669
#, javascript-format
msgid "%s has not emitted any errors."
msgstr "%s na émis aucune erreur."
#: js/ui/lookingGlass.js:674
#: js/ui/lookingGlass.js:675
msgid "Hide Errors"
msgstr "Masquer les erreurs"
#: js/ui/lookingGlass.js:678 js/ui/lookingGlass.js:738
#: js/ui/lookingGlass.js:679 js/ui/lookingGlass.js:739
msgid "Show Errors"
msgstr "Afficher les erreurs"
#: js/ui/lookingGlass.js:687
#: js/ui/lookingGlass.js:688
msgid "Enabled"
msgstr "Activé"
#. translators:
#. * The device has been disabled
#: js/ui/lookingGlass.js:690 subprojects/gvc/gvc-mixer-control.c:1866
#: js/ui/lookingGlass.js:691 subprojects/gvc/gvc-mixer-control.c:1864
msgid "Disabled"
msgstr "Désactivé"
#: js/ui/lookingGlass.js:692
#: js/ui/lookingGlass.js:693
msgid "Error"
msgstr "Erreur"
#: js/ui/lookingGlass.js:694
#: js/ui/lookingGlass.js:695
msgid "Out of date"
msgstr "Périmé"
#: js/ui/lookingGlass.js:696
#: js/ui/lookingGlass.js:697
msgid "Downloading"
msgstr "Téléchargement"
#: js/ui/lookingGlass.js:720
#: js/ui/lookingGlass.js:721
msgid "View Source"
msgstr "Afficher la source"
#: js/ui/lookingGlass.js:729
#: js/ui/lookingGlass.js:730
msgid "Web Page"
msgstr "Page Web"
#: js/ui/messageTray.js:1474
#: js/ui/messageTray.js:1480
msgid "System Information"
msgstr "Informations du système"
@@ -1559,16 +1559,16 @@ msgstr "Quitter"
#. Translators: If there is no suitable word for "Activities"
#. in your language, you can use the word for "Overview".
#: js/ui/panel.js:466
#: js/ui/panel.js:471
msgid "Activities"
msgstr "Activités"
#: js/ui/panel.js:741
#: js/ui/panel.js:746
msgctxt "System menu in the top bar"
msgid "System"
msgstr "Système"
#: js/ui/panel.js:861
#: js/ui/panel.js:866
msgid "Top Bar"
msgstr "Barre supérieure"
@@ -1800,7 +1800,7 @@ msgid "<unknown>"
msgstr "<inconnu>"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:416 js/ui/status/network.js:1293
#: js/ui/status/network.js:416 js/ui/status/network.js:1292
#, javascript-format
msgid "%s Off"
msgstr "%s éteint"
@@ -1826,7 +1826,7 @@ msgid "%s Disconnecting"
msgstr "Déconnexion de %s en cours"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:434 js/ui/status/network.js:1285
#: js/ui/status/network.js:434 js/ui/status/network.js:1284
#, javascript-format
msgid "%s Connecting"
msgstr "Connexion de %s en cours"
@@ -1866,7 +1866,7 @@ msgid "Mobile Broadband Settings"
msgstr "Paramètres connexion mobile"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:553 js/ui/status/network.js:1290
#: js/ui/status/network.js:553 js/ui/status/network.js:1289
#, javascript-format
msgid "%s Hardware Disabled"
msgstr "Équipement %s désactivé"
@@ -1931,72 +1931,72 @@ msgid "Wi-Fi Settings"
msgstr "Paramètres Wi-Fi"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1281
#: js/ui/status/network.js:1280
#, javascript-format
msgid "%s Hotspot Active"
msgstr "Point daccès %s actif"
#. Translators: %s is a network identifier
#: js/ui/status/network.js:1296
#: js/ui/status/network.js:1295
#, javascript-format
msgid "%s Not Connected"
msgstr "%s non connecté"
#: js/ui/status/network.js:1393
#: js/ui/status/network.js:1392
msgid "connecting…"
msgstr "connexion…"
#. Translators: this is for network connections that require some kind of key or password
#: js/ui/status/network.js:1396
#: js/ui/status/network.js:1395
msgid "authentication required"
msgstr "authentification nécessaire"
#: js/ui/status/network.js:1398
#: js/ui/status/network.js:1397
msgid "connection failed"
msgstr "échec de connexion"
#: js/ui/status/network.js:1448
#: js/ui/status/network.js:1447
msgid "VPN Settings"
msgstr "Paramètres VPN"
#: js/ui/status/network.js:1465
#: js/ui/status/network.js:1464
msgid "VPN"
msgstr "VPN"
#: js/ui/status/network.js:1475
#: js/ui/status/network.js:1474
msgid "VPN Off"
msgstr "VPN désactivé"
#: js/ui/status/network.js:1536 js/ui/status/rfkill.js:82
#: js/ui/status/network.js:1535 js/ui/status/rfkill.js:82
msgid "Network Settings"
msgstr "Paramètres du réseau"
#: js/ui/status/network.js:1565
#: js/ui/status/network.js:1564
#, javascript-format
msgid "%s Wired Connection"
msgid_plural "%s Wired Connections"
msgstr[0] "%s connexion filaire."
msgstr[1] "%s connexions filaires."
#: js/ui/status/network.js:1569
#: js/ui/status/network.js:1568
#, javascript-format
msgid "%s Wi-Fi Connection"
msgid_plural "%s Wi-Fi Connections"
msgstr[0] "%s connexion Wi-Fi."
msgstr[1] "%s connexions Wi-Fi."
#: js/ui/status/network.js:1573
#: js/ui/status/network.js:1572
#, javascript-format
msgid "%s Modem Connection"
msgid_plural "%s Modem Connections"
msgstr[0] "%s connexion à un modem."
msgstr[1] "%s connexions à des modems."
#: js/ui/status/network.js:1702
#: js/ui/status/network.js:1701
msgid "Connection failed"
msgstr "Échec de connexion"
#: js/ui/status/network.js:1703
#: js/ui/status/network.js:1702
msgid "Activation of network connection failed"
msgstr "Lactivation de la connexion réseau a échoué"
@@ -2049,7 +2049,7 @@ msgstr "%d%02d avant chargement complet (%d %%)"
#: js/ui/status/power.js:117 js/ui/status/power.js:119
#, javascript-format
msgid "%d%%"
msgstr "%d%%"
msgstr "%d %%"
#: js/ui/status/remoteAccess.js:42
msgid "Screen is Being Shared"
@@ -2298,12 +2298,12 @@ msgstr ""
msgid "List possible modes"
msgstr "Lister les modes possibles"
#: src/shell-app.c:260
#: src/shell-app.c:264
msgctxt "program"
msgid "Unknown"
msgstr "Inconnu"
#: src/shell-app.c:511
#: src/shell-app.c:515
#, c-format
msgid "Failed to launch “%s”"
msgstr "Impossible de lancer « %s »"
@@ -2322,7 +2322,7 @@ msgstr "La fenêtre dauthentification a été écartée par lutilisateur"
#. translators:
#. * The number of sound outputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1873
#: subprojects/gvc/gvc-mixer-control.c:1871
#, c-format
msgid "%u Output"
msgid_plural "%u Outputs"
@@ -2331,14 +2331,14 @@ msgstr[1] "%u sorties"
#. translators:
#. * The number of sound inputs on a particular device
#: subprojects/gvc/gvc-mixer-control.c:1883
#: subprojects/gvc/gvc-mixer-control.c:1881
#, c-format
msgid "%u Input"
msgid_plural "%u Inputs"
msgstr[0] "%u entrée"
msgstr[1] "%u entrées"
#: subprojects/gvc/gvc-mixer-control.c:2738
#: subprojects/gvc/gvc-mixer-control.c:2736
msgid "System Sounds"
msgstr "Sons système"

1520
po/hr.po

File diff suppressed because it is too large Load Diff

1029
po/sk.po

File diff suppressed because it is too large Load Diff

View File

@@ -308,7 +308,7 @@ msgstr "Воридшавии шабакавӣ"
#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
msgid "network-workgroup"
msgstr "шабака-гурӯҳи корӣ"
msgstr "network-workgroup"
#: js/extensionPrefs/main.js:116
msgid "Somethings gone wrong"

File diff suppressed because it is too large Load Diff

View File

@@ -1183,13 +1183,26 @@ _shell_app_handle_startup_sequence (ShellApp *app,
gboolean
shell_app_request_quit (ShellApp *app)
{
GActionGroup *group = NULL;
GSList *iter;
if (shell_app_get_state (app) != SHELL_APP_STATE_RUNNING)
return FALSE;
/* TODO - check for an XSMP connection; we could probably use that */
/* First, check whether the app exports an explicit "quit" action
* that we can activate on the bus
*/
group = G_ACTION_GROUP (app->running_state->muxer);
if (g_action_group_has_action (group, "app.quit") &&
g_action_group_get_action_parameter_type (group, "app.quit") == NULL)
{
g_action_group_activate_action (group, "app.quit", NULL);
return TRUE;
}
/* Otherwise, fall back to closing all the app's windows */
for (iter = app->running_state->windows; iter; iter = iter->next)
{
MetaWindow *win = iter->data;

View File

@@ -17,15 +17,13 @@
#include <meta/meta-cursor-tracker.h>
#include <meta/display.h>
#include <meta/compositor-mutter.h>
#include <st/st.h>
#include "shell-global.h"
#include "shell-recorder-src.h"
#include "shell-recorder.h"
#include "shell-util.h"
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
typedef enum {
RECORDER_STATE_CLOSED,
RECORDER_STATE_RECORDING
@@ -58,7 +56,6 @@ struct _ShellRecorder {
int pointer_x;
int pointer_y;
GSettings *a11y_settings;
gboolean draw_cursor;
MetaCursorTracker *cursor_tracker;
cairo_surface_t *cursor_image;
@@ -213,8 +210,6 @@ shell_recorder_init (ShellRecorder *recorder)
recorder->memory_target = get_memory_target();
recorder->a11y_settings = g_settings_new (A11Y_APPS_SCHEMA);
recorder->state = RECORDER_STATE_CLOSED;
recorder->framerate = DEFAULT_FRAMES_PER_SECOND;
recorder->draw_cursor = TRUE;
@@ -239,8 +234,6 @@ shell_recorder_finalize (GObject *object)
recorder_remove_redraw_timeout (recorder);
g_clear_object (&recorder->a11y_settings);
G_OBJECT_CLASS (shell_recorder_parent_class)->finalize (object);
}
@@ -465,9 +458,16 @@ recorder_record_frame (ShellRecorder *recorder,
GST_BUFFER_PTS(buffer) = now;
if (recorder->draw_cursor &&
!g_settings_get_boolean (recorder->a11y_settings, MAGNIFIER_ACTIVE_KEY))
recorder_draw_cursor (recorder, buffer);
if (recorder->draw_cursor)
{
StSettings *settings = st_settings_get ();
gboolean magnifier_active = FALSE;
g_object_get (settings, "magnifier-active", &magnifier_active, NULL);
if (magnifier_active)
recorder_draw_cursor (recorder, buffer);
}
shell_recorder_src_add_buffer (SHELL_RECORDER_SRC (recorder->current_pipeline->src), buffer);
gst_buffer_unref (buffer);

View File

@@ -7,14 +7,12 @@
#include <meta/meta-plugin.h>
#include <meta/meta-shaped-texture.h>
#include <meta/meta-cursor-tracker.h>
#include <st/st.h>
#include "shell-global.h"
#include "shell-screenshot.h"
#include "shell-util.h"
#define A11Y_APPS_SCHEMA "org.gnome.desktop.a11y.applications"
#define MAGNIFIER_ACTIVE_KEY "screen-magnifier-enabled"
typedef struct _ShellScreenshotPrivate ShellScreenshotPrivate;
struct _ShellScreenshot
@@ -202,6 +200,9 @@ write_screenshot_thread (GTask *result,
cairo_image_surface_get_height (priv->image));
creation_time = g_date_time_format (priv->datetime, "%c");
if (!creation_time)
creation_time = g_date_time_format (priv->datetime, "%FT%T%z");
if (gdk_pixbuf_save_to_stream (pixbuf, stream, "png", NULL, NULL,
"tEXt::Software", "gnome-screenshot",
"tEXt::Creation Time", creation_time,
@@ -268,9 +269,12 @@ should_draw_cursor_image (ShellScreenshotMode mode)
{
if (mode == SHELL_SCREENSHOT_WINDOW || !meta_is_wayland_compositor ())
{
g_autoptr (GSettings) settings = g_settings_new (A11Y_APPS_SCHEMA);
StSettings *settings = st_settings_get ();
gboolean magnifier_active = FALSE;
if (!g_settings_get_boolean (settings, MAGNIFIER_ACTIVE_KEY))
g_object_get (settings, "magnifier-active", &magnifier_active, NULL);
if (!magnifier_active)
return TRUE;
}

View File

@@ -30,6 +30,7 @@
#define KEY_DRAG_THRESHOLD "drag-threshold"
#define KEY_GTK_THEME "gtk-theme"
#define KEY_GTK_ICON_THEME "icon-theme"
#define KEY_MAGNIFIER_ACTIVE "screen-magnifier-enabled"
enum {
PROP_0,
@@ -38,6 +39,7 @@ enum {
PROP_DRAG_THRESHOLD,
PROP_GTK_THEME,
PROP_GTK_ICON_THEME,
PROP_MAGNIFIER_ACTIVE,
N_PROPS
};
@@ -48,11 +50,13 @@ struct _StSettings
GObject parent_object;
GSettings *interface_settings;
GSettings *mouse_settings;
GSettings *a11y_settings;
gchar *gtk_theme;
gchar *gtk_icon_theme;
gboolean enable_animations;
gboolean primary_paste;
gboolean magnifier_active;
gint drag_threshold;
};
@@ -105,6 +109,9 @@ st_settings_get_property (GObject *object,
case PROP_GTK_ICON_THEME:
g_value_set_string (value, settings->gtk_icon_theme);
break;
case PROP_MAGNIFIER_ACTIVE:
g_value_set_boolean (value, settings->magnifier_active);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -144,6 +151,11 @@ st_settings_class_init (StSettingsClass *klass)
"GTK+ Icon Theme",
"",
G_PARAM_READABLE);
props[PROP_MAGNIFIER_ACTIVE] = g_param_spec_boolean("magnifier-active",
"Magnifier is active",
"Weather the a11y magnifier is active",
FALSE,
G_PARAM_READABLE);
g_object_class_install_properties (object_class, N_PROPS, props);
}
@@ -190,6 +202,18 @@ on_mouse_settings_changed (GSettings *g_settings,
}
}
static void
on_a11y_settings_changed (GSettings *g_settings,
const gchar *key,
StSettings *settings)
{
if (g_str_equal (key, KEY_MAGNIFIER_ACTIVE))
{
settings->magnifier_active = g_settings_get_boolean (g_settings, key);
g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_MAGNIFIER_ACTIVE]);
}
}
static void
st_settings_init (StSettings *settings)
{
@@ -201,6 +225,10 @@ st_settings_init (StSettings *settings)
g_signal_connect (settings->interface_settings, "changed",
G_CALLBACK (on_mouse_settings_changed), settings);
settings->a11y_settings = g_settings_new ("org.gnome.desktop.a11y.applications");
g_signal_connect (settings->a11y_settings, "changed",
G_CALLBACK (on_a11y_settings_changed), settings);
settings->enable_animations = g_settings_get_boolean (settings->interface_settings,
KEY_ENABLE_ANIMATIONS);
settings->primary_paste = g_settings_get_boolean (settings->interface_settings,
@@ -211,6 +239,8 @@ st_settings_init (StSettings *settings)
KEY_GTK_ICON_THEME);
settings->drag_threshold = g_settings_get_int (settings->mouse_settings,
KEY_DRAG_THRESHOLD);
settings->magnifier_active = g_settings_get_boolean (settings->a11y_settings,
KEY_MAGNIFIER_ACTIVE);
}
/**