Compare commits
68 Commits
3.32.0
...
wip/jimmac
Author | SHA1 | Date | |
---|---|---|---|
6393e90a5a | |||
4e5ca6d376 | |||
2fab75f448 | |||
22883f2fa2 | |||
5d9f80bc73 | |||
f7d117488b | |||
244a329ee7 | |||
044572cb60 | |||
746875258d | |||
4892a87dfe | |||
8b9c8ddb1e | |||
eb9000576c | |||
862aaf341e | |||
a5c75ff58b | |||
4541fb9819 | |||
9f8edd980c | |||
e5b9043435 | |||
c0012c2ea4 | |||
b77e4975f0 | |||
e83f2344f6 | |||
de6512be1a | |||
0b72ff1896 | |||
fea0192772 | |||
f81ac498fb | |||
5357e0a18c | |||
d7632bbd3d | |||
1b5e91e4b3 | |||
727195c767 | |||
9158f55360 | |||
8146e9d527 | |||
4247251020 | |||
7eee0e0ed6 | |||
4f0851ca77 | |||
911ae49767 | |||
5af81d4057 | |||
c435889baa | |||
49f79d9d5d | |||
1767cd0f6c | |||
3e0915521a | |||
a298943fac | |||
df9ddf96a5 | |||
4fa5d701d5 | |||
b05683d586 | |||
2f3f3fbcdb | |||
611605a67f | |||
0427a782be | |||
32baff5906 | |||
0089143d06 | |||
05e55cee23 | |||
31e7f0340f | |||
6e317a54fd | |||
9c1f62c38c | |||
1341d5557f | |||
b7d79a5f06 | |||
62233a4db4 | |||
4a7e2ddff5 | |||
fb737ebde0 | |||
bf77cb44e7 | |||
c72e2bb4a9 | |||
68c182b1df | |||
348d303794 | |||
ede0fd8660 | |||
187c2193e8 | |||
706bdd8059 | |||
436861edc8 | |||
9729a2e772 | |||
6b924c00c5 | |||
b90f4d29a4 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -80,3 +80,4 @@ tests/run-test.sh
|
||||
*~
|
||||
*.patch
|
||||
*.sw?
|
||||
.vscode
|
||||
|
@ -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:
|
||||
|
@ -9,9 +9,6 @@
|
||||
<method name="ShowOSD">
|
||||
<arg type="a{sv}" direction="in" name="params"/>
|
||||
</method>
|
||||
<method name="ShowMonitorLabels">
|
||||
<arg type="a{uv}" direction="in" name="params"/>
|
||||
</method>
|
||||
<method name="ShowMonitorLabels2">
|
||||
<arg type="a{sv}" direction="in" name="params"/>
|
||||
</method>
|
||||
|
@ -16,12 +16,12 @@ $link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), li
|
||||
$top_hilight: $borders_edge;
|
||||
|
||||
$warning_color: #f57900;
|
||||
$error_color: #cc0000;
|
||||
$error_color: #ff8080;
|
||||
$success_color: if($variant == 'light', #33d17a, darken(#33d17a, 10%));
|
||||
$destructive_color: if($variant == 'light', #e01b24, darken(#e01b24, 10%));
|
||||
|
||||
$osd_fg_color: #eeeeec;
|
||||
$osd_bg_color: #2e3436;
|
||||
$osd_bg_color: transparentize(darken(desaturate(#3d3846, 100%), 15%),0.3);
|
||||
$osd_borders_color: transparentize(black, 0.3);
|
||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||
|
||||
|
@ -29,7 +29,7 @@ $panel-corner-radius: 6px;
|
||||
/* GLOBALS */
|
||||
$font-size: 11;
|
||||
$font-family: Cantarell, Sans-Serif;
|
||||
$_bubble_bg_color: opacify($osd_bg_color,0.25);
|
||||
$_bubble_bg_color: $osd_bg_color;
|
||||
$_bubble_fg_color: $osd_fg_color;
|
||||
$_bubble_borders_color: transparentize($osd_fg_color,0.8);
|
||||
|
||||
@ -184,7 +184,7 @@ StScrollBar {
|
||||
.modal-dialog {
|
||||
border-radius: 9px;
|
||||
color: $osd_fg_color;
|
||||
background-color: transparentize(darken($osd_bg_color,10%),0.05);
|
||||
background-color: $osd_bg_color;
|
||||
border: 1px solid $_bubble_borders_color;
|
||||
.modal-dialog-content-box {
|
||||
padding: 24px;
|
||||
@ -392,7 +392,7 @@ StScrollBar {
|
||||
|
||||
.prompt-dialog-error-label {
|
||||
font-size: 10pt;
|
||||
color: $error_color;
|
||||
color: $warning_color;
|
||||
padding-bottom: 8px;
|
||||
}
|
||||
|
||||
@ -1142,6 +1142,12 @@ StScrollBar {
|
||||
|
||||
.ripple-box:rtl { border-radius: 0 0 0 52px; } // just a simple change to the border radius position
|
||||
|
||||
// Rubberband for select-area screenshots
|
||||
.select-area-rubberband {
|
||||
background-color: transparentize($selected_bg_color,0.7);
|
||||
border: 1px solid $selected_bg_color;
|
||||
}
|
||||
|
||||
// not really top bar only
|
||||
.popup-menu-arrow { icon-size: 1.09em; }
|
||||
.popup-menu-icon { icon-size: 1.09em; }
|
||||
@ -1453,13 +1459,13 @@ StScrollBar {
|
||||
height: 12px;
|
||||
background-color: transparent;
|
||||
border: 2px solid rgba(255, 255, 255, 0.4);
|
||||
border-radius:12px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
&:hover .page-indicator-icon { border-color: white; }
|
||||
&:active .page-indicator-icon { border: none; margin: 2px; background-color:#fff; }
|
||||
&:active .page-indicator-icon { border: none; margin: 2px; background-color: white; }
|
||||
&:checked .page-indicator-icon,
|
||||
&:checked:active { background-color: #fff;}
|
||||
&:checked:active .page-indicator-icon { background-color: white;}
|
||||
}
|
||||
|
||||
.no-frequent-applications-label { @extend %status_text; }
|
||||
|
@ -111,7 +111,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
|
||||
@mixin button($t, $c:opacify(lighten($osd_bg_color, 5%),1.0), $tc:$fg_color, $edge: $borders_edge) {
|
||||
//
|
||||
// Button drawing function
|
||||
//
|
||||
@ -136,8 +136,7 @@
|
||||
//
|
||||
// normal button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
|
||||
$osd_bg_color);
|
||||
$_bg: $c;
|
||||
|
||||
color: $osd_fg_color;
|
||||
background-color: $_bg;
|
||||
@ -150,8 +149,7 @@
|
||||
//
|
||||
// focused button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
||||
lighten($osd_bg_color,3%));
|
||||
$_bg: lighten($c,3%);
|
||||
|
||||
color: $osd_fg_color;
|
||||
text-shadow: 0 1px black;
|
||||
@ -163,8 +161,7 @@
|
||||
//
|
||||
// active osd button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
||||
lighten($osd_bg_color,3%));
|
||||
$_bg: lighten($c,3%);
|
||||
|
||||
color: white;
|
||||
border-color: $osd_borders_color;
|
||||
|
@ -551,7 +551,7 @@ class ExtensionRow extends Gtk.ListBoxRow {
|
||||
|
||||
let button = new Gtk.Button({ valign: Gtk.Align.CENTER,
|
||||
no_show_all: true });
|
||||
button.add(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
||||
button.set_image(new Gtk.Image({ icon_name: 'emblem-system-symbolic',
|
||||
icon_size: Gtk.IconSize.BUTTON,
|
||||
visible: true }));
|
||||
button.get_style_context().add_class('circular');
|
||||
|
@ -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);
|
||||
|
@ -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" },
|
||||
|
@ -1,8 +1,8 @@
|
||||
const { Clutter, Gio, Gtk, Shell } = imports.gi;
|
||||
const { Clutter, Gio, 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" },
|
||||
@ -104,7 +104,10 @@ function *run() {
|
||||
yield Scripting.waitLeisure();
|
||||
Scripting.scriptEvent('desktopShown');
|
||||
|
||||
Gtk.Settings.get_default().gtk_enable_animations = false;
|
||||
let interfaceSettings = new Gio.Settings({
|
||||
schema_id: 'org.gnome.desktop.interface'
|
||||
});
|
||||
interfaceSettings.set_boolean('enable-animations', false);
|
||||
|
||||
Scripting.scriptEvent('overviewShowStart');
|
||||
Main.overview.show();
|
||||
@ -200,7 +203,7 @@ function *run() {
|
||||
|
||||
yield Scripting.sleep(1000);
|
||||
|
||||
Gtk.Settings.get_default().gtk_enable_animations = true;
|
||||
interfaceSettings.set_boolean('enable-animations', true);
|
||||
}
|
||||
|
||||
let overviewShowStart;
|
||||
|
@ -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() {
|
||||
|
@ -14,39 +14,47 @@ const RENAMED_DESKTOP_IDS = {
|
||||
'epiphany.desktop': 'org.gnome.Epiphany.desktop',
|
||||
'evolution.desktop': 'org.gnome.Evolution.desktop',
|
||||
'file-roller.desktop': 'org.gnome.FileRoller.desktop',
|
||||
'five-or-more.desktop': 'org.gnome.five-or-more.desktop',
|
||||
'four-in-a-row.desktop': 'org.gnome.Four-in-a-row.desktop',
|
||||
'gcalctool.desktop': 'org.gnome.Calculator.desktop',
|
||||
'geary.desktop': 'org.gnome.Geary.desktop',
|
||||
'gedit.desktop': 'org.gnome.gedit.desktop',
|
||||
'glchess.desktop': 'gnome-chess.desktop',
|
||||
'glines.desktop': 'five-or-more.desktop',
|
||||
'gnect.desktop': 'four-in-a-row.desktop',
|
||||
'glchess.desktop': 'org.gnome.Chess.desktop',
|
||||
'glines.desktop': 'org.gnome.five-or-more.desktop',
|
||||
'gnect.desktop': 'org.gnome.Four-in-a-row.desktop',
|
||||
'gnibbles.desktop': 'org.gnome.Nibbles.desktop',
|
||||
'gnobots2.desktop': 'gnome-robots.desktop',
|
||||
'gnobots2.desktop': 'org.gnome.Robots.desktop',
|
||||
'gnome-boxes.desktop': 'org.gnome.Boxes.desktop',
|
||||
'gnome-calculator.desktop': 'org.gnome.Calculator.desktop',
|
||||
'gnome-chess.desktop': 'org.gnome.Chess.desktop',
|
||||
'gnome-clocks.desktop': 'org.gnome.clocks.desktop',
|
||||
'gnome-contacts.desktop': 'org.gnome.Contacts.desktop',
|
||||
'gnome-documents.desktop': 'org.gnome.Documents.desktop',
|
||||
'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop',
|
||||
'gnome-klotski.desktop': 'org.gnome.Klotski.desktop',
|
||||
'gnome-nibbles.desktop': 'org.gnome.Nibbles.desktop',
|
||||
'gnome-mahjongg.desktop': 'org.gnome.Mahjongg.desktop',
|
||||
'gnome-mines.desktop': 'org.gnome.Mines.desktop',
|
||||
'gnome-music.desktop': 'org.gnome.Music.desktop',
|
||||
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
||||
'gnome-robots.desktop': 'org.gnome.Robots.desktop',
|
||||
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
||||
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
||||
'gnome-terminal.desktop': 'org.gnome.Terminal.desktop',
|
||||
'gnome-tetravex.desktop': 'org.gnome.Tetravex.desktop',
|
||||
'gnome-tweaks.desktop': 'org.gnome.tweaks.desktop',
|
||||
'gnome-weather.desktop': 'org.gnome.Weather.desktop',
|
||||
'gnomine.desktop': 'gnome-mines.desktop',
|
||||
'gnotravex.desktop': 'gnome-tetravex.desktop',
|
||||
'gnotski.desktop': 'gnome-klotski.desktop',
|
||||
'gtali.desktop': 'tali.desktop',
|
||||
'gnomine.desktop': 'org.gnome.Mines.desktop',
|
||||
'gnotravex.desktop': 'org.gnome.Tetravex.desktop',
|
||||
'gnotski.desktop': 'org.gnome.Klotski.desktop',
|
||||
'gtali.desktop': 'org.gnome.Tali.desktop',
|
||||
'iagno.desktop': 'org.gnome.Reversi.desktop',
|
||||
'nautilus.desktop': 'org.gnome.Nautilus.desktop',
|
||||
'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop',
|
||||
'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop',
|
||||
'org.gnome.Weather.Application.desktop': 'org.gnome.Weather.desktop',
|
||||
'polari.desktop': 'org.gnome.Polari.desktop',
|
||||
'tali.desktop': 'org.gnome.Tali.desktop',
|
||||
'totem.desktop': 'org.gnome.Totem.desktop',
|
||||
'evince.desktop': 'org.gnome.Evince.desktop',
|
||||
};
|
||||
|
@ -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({
|
||||
@ -47,10 +47,6 @@ var BoxPointer = GObject.registerClass({
|
||||
this._border.connect('repaint', this._drawBorder.bind(this));
|
||||
this.add_actor(this._border);
|
||||
this.bin.raise(this._border);
|
||||
this._xOffset = 0;
|
||||
this._yOffset = 0;
|
||||
this._xPosition = 0;
|
||||
this._yPosition = 0;
|
||||
this._sourceAlignment = 0.5;
|
||||
this._capturedEventId = 0;
|
||||
this._muteInput();
|
||||
@ -118,23 +114,23 @@ var BoxPointer = GObject.registerClass({
|
||||
if (animate & PopupAnimation.SLIDE) {
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
this.yOffset = -rise;
|
||||
this.translation_y = -rise;
|
||||
break;
|
||||
case St.Side.BOTTOM:
|
||||
this.yOffset = rise;
|
||||
this.translation_y = rise;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
this.xOffset = -rise;
|
||||
this.translation_x = -rise;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
this.xOffset = rise;
|
||||
this.translation_x = rise;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Tweener.addTween(this, { opacity: 255,
|
||||
xOffset: 0,
|
||||
yOffset: 0,
|
||||
translation_x: 0,
|
||||
translation_y: 0,
|
||||
transition: 'linear',
|
||||
onComplete: () => {
|
||||
this._unmuteInput();
|
||||
@ -148,8 +144,8 @@ var BoxPointer = GObject.registerClass({
|
||||
if (!this.visible)
|
||||
return;
|
||||
|
||||
let xOffset = 0;
|
||||
let yOffset = 0;
|
||||
let translationX = 0;
|
||||
let translationY = 0;
|
||||
let themeNode = this.get_theme_node();
|
||||
let rise = themeNode.get_length('-arrow-rise');
|
||||
let fade = (animate & PopupAnimation.FADE);
|
||||
@ -158,16 +154,16 @@ var BoxPointer = GObject.registerClass({
|
||||
if (animate & PopupAnimation.SLIDE) {
|
||||
switch (this._arrowSide) {
|
||||
case St.Side.TOP:
|
||||
yOffset = rise;
|
||||
translationY = rise;
|
||||
break;
|
||||
case St.Side.BOTTOM:
|
||||
yOffset = -rise;
|
||||
translationY = -rise;
|
||||
break;
|
||||
case St.Side.LEFT:
|
||||
xOffset = rise;
|
||||
translationX = rise;
|
||||
break;
|
||||
case St.Side.RIGHT:
|
||||
xOffset = -rise;
|
||||
translationX = -rise;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -176,15 +172,15 @@ var BoxPointer = GObject.registerClass({
|
||||
|
||||
Tweener.removeTweens(this);
|
||||
Tweener.addTween(this, { opacity: fade ? 0 : 255,
|
||||
xOffset: xOffset,
|
||||
yOffset: yOffset,
|
||||
translation_x: translationX,
|
||||
translation_y: translationY,
|
||||
transition: 'linear',
|
||||
time: animationTime,
|
||||
onComplete: () => {
|
||||
this.hide();
|
||||
this.opacity = 0;
|
||||
this.xOffset = 0;
|
||||
this.yOffset = 0;
|
||||
this.translation_x = 0;
|
||||
this.translation_y = 0;
|
||||
if (onComplete)
|
||||
onComplete();
|
||||
}
|
||||
@ -477,11 +473,15 @@ var BoxPointer = GObject.registerClass({
|
||||
_reposition() {
|
||||
let sourceActor = this._sourceActor;
|
||||
let alignment = this._arrowAlignment;
|
||||
let monitorIndex = Main.layoutManager.findIndexForActor(sourceActor);
|
||||
|
||||
this._sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);
|
||||
this._workArea = Main.layoutManager.getWorkAreaForMonitor(monitorIndex);
|
||||
|
||||
// Position correctly relative to the sourceActor
|
||||
let sourceNode = sourceActor.get_theme_node();
|
||||
let sourceContentBox = sourceNode.get_content_box(sourceActor.get_allocation_box());
|
||||
let sourceAllocation = Shell.util_get_transformed_allocation(sourceActor);
|
||||
let sourceAllocation = this._sourceAllocation;
|
||||
let sourceCenterX = sourceAllocation.x1 + sourceContentBox.x1 + (sourceContentBox.x2 - sourceContentBox.x1) * this._sourceAlignment;
|
||||
let sourceCenterY = sourceAllocation.y1 + sourceContentBox.y1 + (sourceContentBox.y2 - sourceContentBox.y1) * this._sourceAlignment;
|
||||
let [minWidth, minHeight, natWidth, natHeight] = this.get_preferred_size();
|
||||
@ -489,7 +489,7 @@ 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 workarea = this._workArea;
|
||||
let themeNode = this.get_theme_node();
|
||||
let borderWidth = themeNode.get_length('-arrow-border-width');
|
||||
let arrowBase = themeNode.get_length('-arrow-base');
|
||||
@ -539,8 +539,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 +558,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))) {
|
||||
@ -583,9 +583,9 @@ var BoxPointer = GObject.registerClass({
|
||||
parent = parent.get_parent();
|
||||
}
|
||||
|
||||
this._xPosition = Math.floor(x);
|
||||
this._yPosition = Math.floor(y);
|
||||
this._shiftActor();
|
||||
// Actually set the position
|
||||
this.x = Math.floor(x);
|
||||
this.y = Math.floor(y);
|
||||
}
|
||||
|
||||
// @origin: Coordinate specifying middle of the arrow, along
|
||||
@ -608,44 +608,30 @@ var BoxPointer = GObject.registerClass({
|
||||
}
|
||||
}
|
||||
|
||||
_shiftActor() {
|
||||
// Since the position of the BoxPointer depends on the allocated size
|
||||
// of the BoxPointer and the position of the source actor, trying
|
||||
// to position the BoxPointer via the x/y properties will result in
|
||||
// allocation loops and warnings. Instead we do the positioning via
|
||||
// the anchor point, which is independent of allocation, and leave
|
||||
// x == y == 0.
|
||||
this.set_anchor_point(-(this._xPosition + this._xOffset),
|
||||
-(this._yPosition + this._yOffset));
|
||||
}
|
||||
|
||||
_calculateArrowSide(arrowSide) {
|
||||
let sourceAllocation = Shell.util_get_transformed_allocation(this._sourceActor);
|
||||
let sourceAllocation = this._sourceAllocation;
|
||||
let [minWidth, minHeight, boxWidth, boxHeight] = this.get_preferred_size();
|
||||
let monitorActor = this.sourceActor;
|
||||
if (!monitorActor)
|
||||
monitorActor = this;
|
||||
let monitor = Main.layoutManager.findMonitorForActor(monitorActor);
|
||||
let workarea = this._workArea;
|
||||
|
||||
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;
|
||||
}
|
||||
@ -667,24 +653,6 @@ var BoxPointer = GObject.registerClass({
|
||||
}
|
||||
}
|
||||
|
||||
set xOffset(offset) {
|
||||
this._xOffset = offset;
|
||||
this._shiftActor();
|
||||
}
|
||||
|
||||
get xOffset() {
|
||||
return this._xOffset;
|
||||
}
|
||||
|
||||
set yOffset(offset) {
|
||||
this._yOffset = offset;
|
||||
this._shiftActor();
|
||||
}
|
||||
|
||||
get yOffset() {
|
||||
return this._yOffset;
|
||||
}
|
||||
|
||||
updateArrowSide(side) {
|
||||
this._arrowSide = side;
|
||||
this._border.queue_repaint();
|
||||
|
@ -584,22 +584,18 @@ var Dash = class Dash {
|
||||
let firstButton = iconChildren[0].child;
|
||||
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
|
||||
// Enforce valid spacings during the size request
|
||||
firstIcon.icon.ensure_style();
|
||||
let [, currentHeight] = firstIcon.icon.get_size();
|
||||
firstIcon.icon.set_height(this.iconSize * scaleFactor);
|
||||
[minHeight, natHeight] = firstButton.get_preferred_height(-1);
|
||||
firstIcon.icon.set_height(currentHeight);
|
||||
let [, iconHeight] = firstIcon.icon.get_preferred_height(-1);
|
||||
let [, buttonHeight] = firstButton.get_preferred_height(-1);
|
||||
|
||||
// Subtract icon padding and box spacing from the available height
|
||||
availHeight -= iconChildren.length * (natHeight - this.iconSize * scaleFactor) +
|
||||
availHeight -= iconChildren.length * (buttonHeight - iconHeight) +
|
||||
(iconChildren.length - 1) * spacing;
|
||||
|
||||
let availSize = availHeight / iconChildren.length;
|
||||
|
||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
let iconSizes = baseIconSizes.map(s => s * scaleFactor);
|
||||
|
||||
let newIconSize = baseIconSizes[0];
|
||||
|
@ -136,11 +136,12 @@ var WorldClocksSection = class WorldClocksSection {
|
||||
layout.attach(header, 0, 0, 2, 1);
|
||||
this.actor.label_actor = header;
|
||||
|
||||
let localOffset = GLib.DateTime.new_now_local().get_utc_offset();
|
||||
|
||||
for (let i = 0; i < this._locations.length; i++) {
|
||||
let l = this._locations[i].location;
|
||||
|
||||
let name = l.get_level() == GWeather.LocationLevel.NAMED_TIMEZONE ? l.get_name()
|
||||
: l.get_city_name();
|
||||
let name = l.get_city_name() || l.get_name();
|
||||
let label = new St.Label({ style_class: 'world-clocks-city',
|
||||
text: name,
|
||||
x_align: Clutter.ActorAlign.START,
|
||||
@ -149,7 +150,8 @@ var WorldClocksSection = class WorldClocksSection {
|
||||
|
||||
let time = new St.Label({ style_class: 'world-clocks-time' });
|
||||
|
||||
let offset = l.get_timezone().get_offset() / 60.;
|
||||
let otherOffset = this._getTimeAtLocation(l).get_utc_offset();
|
||||
let offset = (otherOffset - localOffset) / GLib.TIME_SPAN_HOUR;
|
||||
let fmt = (Math.trunc(offset) == offset) ? '%s%.0f' : '%s%.1f';
|
||||
let prefix = (offset >= 0) ? '+' : '-';
|
||||
let tz = new St.Label({ style_class: 'world-clocks-timezone',
|
||||
@ -182,11 +184,15 @@ var WorldClocksSection = class WorldClocksSection {
|
||||
}
|
||||
}
|
||||
|
||||
_getTimeAtLocation(location) {
|
||||
let tz = GLib.TimeZone.new(location.get_timezone().get_tzid());
|
||||
return GLib.DateTime.new_now(tz);
|
||||
}
|
||||
|
||||
_updateLabels() {
|
||||
for (let i = 0; i < this._locations.length; i++) {
|
||||
let l = this._locations[i];
|
||||
let tz = GLib.TimeZone.new(l.location.get_timezone().get_tzid());
|
||||
let now = GLib.DateTime.new_now(tz);
|
||||
let now = this._getTimeAtLocation(l.location);
|
||||
l.actor.text = Util.formatTime(now, { timeOnly: true });
|
||||
}
|
||||
}
|
||||
|
@ -306,6 +306,9 @@ var _Draggable = class _Draggable {
|
||||
* for the draggable.
|
||||
*/
|
||||
startDrag(stageX, stageY, time, sequence, device) {
|
||||
if (currentDraggable)
|
||||
return;
|
||||
|
||||
if (device == undefined) {
|
||||
let event = Clutter.get_current_event();
|
||||
|
||||
@ -447,7 +450,8 @@ var _Draggable = class _Draggable {
|
||||
let [stageX, stageY] = event.get_coords();
|
||||
|
||||
// See if the user has moved the mouse enough to trigger a drag
|
||||
let threshold = St.Settings.get().drag_threshold;
|
||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
let threshold = St.Settings.get().drag_threshold * scaleFactor;
|
||||
if (!currentDraggable &&
|
||||
(Math.abs(stageX - this._dragStartX) > threshold ||
|
||||
Math.abs(stageY - this._dragStartY) > threshold)) {
|
||||
|
@ -104,6 +104,7 @@ class BaseIcon extends St.Bin {
|
||||
}
|
||||
|
||||
vfunc_style_changed() {
|
||||
super.vfunc_style_changed();
|
||||
let node = this.get_theme_node();
|
||||
|
||||
let size;
|
||||
|
@ -160,6 +160,19 @@ var Monitor = class Monitor {
|
||||
}
|
||||
};
|
||||
|
||||
const UiActor = GObject.registerClass(
|
||||
class UiActor extends St.Widget {
|
||||
vfunc_get_preferred_width (forHeight) {
|
||||
let width = global.stage.width;
|
||||
return [width, width];
|
||||
}
|
||||
|
||||
vfunc_get_preferred_height (forWidth) {
|
||||
let height = global.stage.height;
|
||||
return [height, height];
|
||||
}
|
||||
});
|
||||
|
||||
const defaultParams = {
|
||||
trackFullscreen: false,
|
||||
affectsStruts: false,
|
||||
@ -200,12 +213,8 @@ var LayoutManager = GObject.registerClass({
|
||||
global.stage.no_clear_hint = true;
|
||||
|
||||
// Set up stage hierarchy to group all UI actors under one container.
|
||||
this.uiGroup = new St.Widget({ name: 'uiGroup' });
|
||||
this.uiGroup = new UiActor({ name: 'uiGroup' });
|
||||
this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
|
||||
this.uiGroup.add_constraint(new Clutter.BindConstraint({
|
||||
source: global.stage,
|
||||
coordinate: Clutter.BindCoordinate.ALL,
|
||||
}));
|
||||
|
||||
global.stage.remove_actor(global.window_group);
|
||||
this.uiGroup.add_actor(global.window_group);
|
||||
@ -243,7 +252,7 @@ var LayoutManager = GObject.registerClass({
|
||||
|
||||
// A dummy actor that tracks the mouse or text cursor, based on the
|
||||
// position and size set in setDummyCursorGeometry.
|
||||
this.dummyCursor = new St.Widget({ width: 0, height: 0, visible: false });
|
||||
this.dummyCursor = new St.Widget({ width: 0, height: 0, opacity: 0 });
|
||||
this.uiGroup.add_actor(this.dummyCursor);
|
||||
|
||||
global.stage.remove_actor(global.top_window_group);
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Atspi, Clutter, Cogl, GDesktopEnums,
|
||||
const { Atspi, Clutter, GDesktopEnums,
|
||||
Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
const Mainloop = imports.mainloop;
|
||||
const Signals = imports.signals;
|
||||
@ -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,22 +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 Cogl.Color();
|
||||
color.init_from_4ub(0, 0, 0, 0);
|
||||
|
||||
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);
|
||||
|
||||
@ -86,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();
|
||||
}
|
||||
});
|
||||
|
||||
@ -102,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);
|
||||
@ -115,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);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -155,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();
|
||||
}
|
||||
@ -495,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,
|
||||
@ -608,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() {
|
||||
@ -756,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',
|
||||
_connectSignals() {
|
||||
if (this._signalConnections)
|
||||
return;
|
||||
|
||||
this._signalConnections = [];
|
||||
let id = 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));
|
||||
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) {
|
||||
@ -810,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();
|
||||
}
|
||||
|
||||
@ -1563,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();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -95,28 +95,6 @@ var OsdMonitorLabeler = class {
|
||||
|
||||
this._reset();
|
||||
|
||||
for (let id in params) {
|
||||
let monitor = this._monitorManager.get_monitor_for_output(id);
|
||||
if (monitor == -1)
|
||||
continue;
|
||||
this._monitorLabels.get(monitor).push(params[id].deep_unpack());
|
||||
}
|
||||
|
||||
// In mirrored display setups, more than one physical outputs
|
||||
// might be showing the same logical monitor. In that case, we
|
||||
// join each output's labels on the same OSD widget.
|
||||
for (let [monitor, labels] of this._monitorLabels.entries()) {
|
||||
labels.sort();
|
||||
this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' ')));
|
||||
}
|
||||
}
|
||||
|
||||
show2(client, params) {
|
||||
if (!this._trackClient(client))
|
||||
return;
|
||||
|
||||
this._reset();
|
||||
|
||||
for (let connector in params) {
|
||||
let monitor = this._monitorManager.get_monitor_for_connector(connector);
|
||||
if (monitor == -1)
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Atk, Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St } = imports.gi;
|
||||
const { Atk, Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
|
||||
const Cairo = imports.cairo;
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
@ -201,7 +201,6 @@ var AppMenuButton = GObject.registerClass({
|
||||
this._startingApps = [];
|
||||
|
||||
this._menuManager = panel.menuManager;
|
||||
this._gtkSettings = Gtk.Settings.get_default();
|
||||
this._targetApp = null;
|
||||
this._busyNotifyId = 0;
|
||||
|
||||
@ -809,6 +808,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);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GLib, Gtk, Meta, Shell, St } = imports.gi;
|
||||
const { Clutter, Gio, GLib, Meta, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const GrabHelper = imports.ui.grabHelper;
|
||||
@ -227,8 +227,6 @@ var SelectArea = class {
|
||||
this._lastY = 0;
|
||||
this._result = null;
|
||||
|
||||
this._initRubberbandColors();
|
||||
|
||||
this._group = new St.Widget({ visible: false,
|
||||
reactive: true,
|
||||
x: 0,
|
||||
@ -248,10 +246,10 @@ var SelectArea = class {
|
||||
coordinate: Clutter.BindCoordinate.ALL });
|
||||
this._group.add_constraint(constraint);
|
||||
|
||||
this._rubberband = new Clutter.Rectangle({ color: this._background,
|
||||
has_border: true,
|
||||
border_width: 1,
|
||||
border_color: this._border });
|
||||
this._rubberband = new St.Widget({
|
||||
style_class: 'select-area-rubberband',
|
||||
visible: false
|
||||
});
|
||||
this._group.add_actor(this._rubberband);
|
||||
}
|
||||
|
||||
@ -265,25 +263,6 @@ var SelectArea = class {
|
||||
this._group.visible = true;
|
||||
}
|
||||
|
||||
_initRubberbandColors() {
|
||||
function colorFromRGBA(rgba) {
|
||||
return new Clutter.Color({ red: rgba.red * 255,
|
||||
green: rgba.green * 255,
|
||||
blue: rgba.blue * 255,
|
||||
alpha: rgba.alpha * 255 });
|
||||
}
|
||||
|
||||
let path = new Gtk.WidgetPath();
|
||||
path.append_type(Gtk.IconView);
|
||||
|
||||
let context = new Gtk.StyleContext();
|
||||
context.set_path(path);
|
||||
context.add_class('rubberband');
|
||||
|
||||
this._background = colorFromRGBA(context.get_background_color(Gtk.StateFlags.NORMAL));
|
||||
this._border = colorFromRGBA(context.get_border_color(Gtk.StateFlags.NORMAL));
|
||||
}
|
||||
|
||||
_getGeometry() {
|
||||
return { x: Math.min(this._startX, this._lastX),
|
||||
y: Math.min(this._startY, this._lastY),
|
||||
@ -302,6 +281,7 @@ var SelectArea = class {
|
||||
|
||||
this._rubberband.set_position(geometry.x, geometry.y);
|
||||
this._rubberband.set_size(geometry.width, geometry.height);
|
||||
this._rubberband.show();
|
||||
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
|
@ -37,16 +37,13 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
|
||||
* 'yield Scripting.sleep(500);'
|
||||
*/
|
||||
function sleep(milliseconds) {
|
||||
let cb;
|
||||
|
||||
return new Promise(resolve => {
|
||||
let id = Mainloop.timeout_add(milliseconds, () => {
|
||||
if (cb)
|
||||
cb();
|
||||
resolve();
|
||||
return GLib.SOURCE_REMOVE;
|
||||
});
|
||||
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) {
|
||||
if (errcb)
|
||||
errcb(excp);
|
||||
} else {
|
||||
if (cb)
|
||||
cb();
|
||||
}
|
||||
if (excp)
|
||||
reject(excp);
|
||||
else
|
||||
resolve();
|
||||
});
|
||||
|
||||
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);
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
@ -79,14 +79,17 @@ var GnomeShell = class {
|
||||
for (let param in params)
|
||||
params[param] = params[param].deep_unpack();
|
||||
|
||||
let { monitor: monitorIndex,
|
||||
let { connector,
|
||||
label,
|
||||
level,
|
||||
max_level: maxLevel,
|
||||
icon: serializedIcon } = params;
|
||||
|
||||
if (monitorIndex === undefined)
|
||||
monitorIndex = -1;
|
||||
let monitorIndex = -1;
|
||||
if (connector) {
|
||||
let monitorManager = Meta.MonitorManager.get();
|
||||
monitorIndex = monitorManager.get_monitor_for_connector(connector);
|
||||
}
|
||||
|
||||
let icon = null;
|
||||
if (serializedIcon)
|
||||
@ -203,16 +206,10 @@ var GnomeShell = class {
|
||||
this._grabbers.delete(name);
|
||||
}
|
||||
|
||||
ShowMonitorLabelsAsync(params, invocation) {
|
||||
let sender = invocation.get_sender();
|
||||
let [dict] = params;
|
||||
Main.osdMonitorLabeler.show(sender, dict);
|
||||
}
|
||||
|
||||
ShowMonitorLabels2Async(params, invocation) {
|
||||
let sender = invocation.get_sender();
|
||||
let [dict] = params;
|
||||
Main.osdMonitorLabeler.show2(sender, dict);
|
||||
Main.osdMonitorLabeler.show(sender, dict);
|
||||
}
|
||||
|
||||
HideMonitorLabelsAsync(params, invocation) {
|
||||
|
@ -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) {
|
||||
try {
|
||||
this._deviceAdded(this._client, devices[i], true);
|
||||
} catch (e) {
|
||||
log(`Failed to add device ${devices[i]}: ${e}`);
|
||||
}
|
||||
}
|
||||
this._syncDeviceNames();
|
||||
}
|
||||
|
@ -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'
|
||||
|
@ -46,15 +46,14 @@ var Avatar = class {
|
||||
if (iconFile) {
|
||||
let file = Gio.File.new_for_path(iconFile);
|
||||
this.actor.child = null;
|
||||
this.actor.style = 'background-image: url("%s");'.format(iconFile);
|
||||
this.actor.style = `
|
||||
background-image: url("${iconFile}");
|
||||
background-size: ${this._iconSize}px`;
|
||||
} else {
|
||||
this.actor.style = null;
|
||||
this.actor.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
|
||||
icon_size: this._iconSize });
|
||||
}
|
||||
|
||||
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
|
||||
this.actor.set_size(this._iconSize * scaleFactor, this._iconSize * scaleFactor);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -456,13 +456,28 @@ var TilePreview = class {
|
||||
};
|
||||
|
||||
var TouchpadWorkspaceSwitchAction = class {
|
||||
constructor(actor) {
|
||||
constructor(actor, allowedModes) {
|
||||
this._allowedModes = allowedModes;
|
||||
this._dx = 0;
|
||||
this._dy = 0;
|
||||
this._enabled = true;
|
||||
actor.connect('captured-event', this._handleEvent.bind(this));
|
||||
this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'});
|
||||
}
|
||||
|
||||
get enabled() {
|
||||
return this._enabled;
|
||||
}
|
||||
|
||||
set enabled(enabled) {
|
||||
if (this._enabled == enabled)
|
||||
return;
|
||||
|
||||
this._enabled = enabled;
|
||||
if (!enabled)
|
||||
this.emit('cancel');
|
||||
}
|
||||
|
||||
_checkActivated() {
|
||||
let dir;
|
||||
|
||||
@ -482,15 +497,16 @@ var TouchpadWorkspaceSwitchAction = class {
|
||||
}
|
||||
|
||||
_handleEvent(actor, event) {
|
||||
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
|
||||
|
||||
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.get_touchpad_gesture_finger_count() != 4)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if ((allowedModes & Main.actionMode) == 0)
|
||||
if ((this._allowedModes & Main.actionMode) == 0)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (!this._enabled)
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) {
|
||||
@ -523,10 +539,11 @@ var WorkspaceSwitchAction = GObject.registerClass({
|
||||
'motion': { param_types: [GObject.TYPE_DOUBLE, GObject.TYPE_DOUBLE] },
|
||||
'cancel': { param_types: [] }},
|
||||
}, class WorkspaceSwitchAction extends Clutter.SwipeAction {
|
||||
_init() {
|
||||
_init(allowedModes) {
|
||||
super._init();
|
||||
this.set_n_touch_points(4);
|
||||
this._swept = false;
|
||||
this._allowedModes = allowedModes;
|
||||
|
||||
global.display.connect('grab-op-begin', () => {
|
||||
this.cancel();
|
||||
@ -534,14 +551,12 @@ var WorkspaceSwitchAction = GObject.registerClass({
|
||||
}
|
||||
|
||||
vfunc_gesture_prepare(actor) {
|
||||
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
|
||||
|
||||
this._swept = false;
|
||||
|
||||
if (!super.vfunc_gesture_prepare(actor))
|
||||
return false;
|
||||
|
||||
return (allowedModes & Main.actionMode);
|
||||
return (this._allowedModes & Main.actionMode);
|
||||
}
|
||||
|
||||
vfunc_gesture_progress(actor) {
|
||||
@ -1043,14 +1058,15 @@ var WindowManager = class {
|
||||
global.workspace_manager.override_workspace_layout(Meta.DisplayCorner.TOPLEFT,
|
||||
false, -1, 1);
|
||||
|
||||
let gesture = new WorkspaceSwitchAction();
|
||||
let allowedModes = Shell.ActionMode.NORMAL;
|
||||
let gesture = new WorkspaceSwitchAction(allowedModes);
|
||||
gesture.connect('motion', this._switchWorkspaceMotion.bind(this));
|
||||
gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
|
||||
gesture.connect('cancel', this._switchWorkspaceCancel.bind(this));
|
||||
global.stage.add_action(gesture);
|
||||
|
||||
// This is not a normal Clutter.GestureAction, doesn't need add_action()
|
||||
gesture = new TouchpadWorkspaceSwitchAction(global.stage);
|
||||
gesture = new TouchpadWorkspaceSwitchAction(global.stage, allowedModes);
|
||||
gesture.connect('motion', this._switchWorkspaceMotion.bind(this));
|
||||
gesture.connect('activated', this._actionSwitchWorkspace.bind(this));
|
||||
gesture.connect('cancel', this._switchWorkspaceCancel.bind(this));
|
||||
@ -1202,6 +1218,10 @@ var WindowManager = class {
|
||||
// Same for OR windows
|
||||
if (window.is_override_redirect())
|
||||
return;
|
||||
// Sticky windows don't need moving, in fact moving would
|
||||
// unstick them
|
||||
if (window.on_all_workspaces)
|
||||
return;
|
||||
// Windows on workspaces below pos don't need moving
|
||||
let index = window.get_workspace().index();
|
||||
if (index < pos)
|
||||
|
@ -1,10 +1,11 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
|
||||
const { Clutter, Gio, GObject, Meta, St } = imports.gi;
|
||||
const { Clutter, Gio, GObject, Meta, Shell, St } = imports.gi;
|
||||
const Signals = imports.signals;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const WindowManager = imports.ui.windowManager;
|
||||
const Workspace = imports.ui.workspace;
|
||||
|
||||
var WORKSPACE_SWITCH_TIME = 0.25;
|
||||
@ -82,6 +83,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
||||
|
||||
this._animating = false; // tweening
|
||||
this._scrolling = false; // swipe-scrolling
|
||||
this._gestureActive = false; // touch(pad) gestures
|
||||
this._animatingScroll = false; // programatically updating the adjustment
|
||||
|
||||
let activeWorkspaceIndex = workspaceManager.get_active_workspace_index();
|
||||
@ -211,7 +213,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
||||
|
||||
for (let w = 0; w < this._workspaces.length; w++) {
|
||||
let workspace = this._workspaces[w];
|
||||
if (this._animating || this._scrolling) {
|
||||
if (this._animating || this._scrolling || this._gestureActive) {
|
||||
workspace.actor.show();
|
||||
} else {
|
||||
if (this._inDrag)
|
||||
@ -223,7 +225,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
||||
}
|
||||
|
||||
_updateScrollAdjustment(index) {
|
||||
if (this._scrolling)
|
||||
if (this._scrolling || this._gestureActive)
|
||||
return;
|
||||
|
||||
this._animatingScroll = true;
|
||||
@ -300,6 +302,18 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
||||
this._updateVisibility();
|
||||
}
|
||||
|
||||
startTouchGesture() {
|
||||
this._gestureActive = true;
|
||||
}
|
||||
|
||||
endTouchGesture() {
|
||||
this._gestureActive = false;
|
||||
|
||||
// Make sure title captions etc are shown as necessary
|
||||
this._scrollToActive();
|
||||
this._updateVisibility();
|
||||
}
|
||||
|
||||
// sync the workspaces' positions to the value of the scroll adjustment
|
||||
// and change the active workspace if appropriate
|
||||
_onScroll(adj) {
|
||||
@ -310,7 +324,7 @@ var WorkspacesView = class extends WorkspacesViewBase {
|
||||
let active = workspaceManager.get_active_workspace_index();
|
||||
let current = Math.round(adj.value);
|
||||
|
||||
if (active != current) {
|
||||
if (active != current && !this._gestureActive) {
|
||||
if (!this._workspaces[current]) {
|
||||
// The current workspace was destroyed. This could happen
|
||||
// when you are on the last empty workspace, and consolidate
|
||||
@ -391,6 +405,12 @@ var ExtraWorkspaceView = class extends WorkspacesViewBase {
|
||||
|
||||
endSwipeScroll() {
|
||||
}
|
||||
|
||||
startTouchGesture() {
|
||||
}
|
||||
|
||||
endTouchGesture() {
|
||||
}
|
||||
};
|
||||
|
||||
var DelegateFocusNavigator = GObject.registerClass(
|
||||
@ -430,23 +450,37 @@ var WorkspacesDisplay = class {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].startSwipeScroll();
|
||||
this._startSwipeScroll();
|
||||
return true;
|
||||
});
|
||||
panAction.connect('gesture-cancel', () => {
|
||||
clickAction.release();
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].endSwipeScroll();
|
||||
this._endSwipeScroll();
|
||||
});
|
||||
panAction.connect('gesture-end', () => {
|
||||
clickAction.release();
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].endSwipeScroll();
|
||||
this._endSwipeScroll();
|
||||
});
|
||||
Main.overview.addAction(panAction);
|
||||
this.actor.bind_property('mapped', panAction, 'enabled', GObject.BindingFlags.SYNC_CREATE);
|
||||
|
||||
let allowedModes = Shell.ActionMode.OVERVIEW;
|
||||
let switchGesture = new WindowManager.WorkspaceSwitchAction(allowedModes);
|
||||
switchGesture.connect('motion', this._onSwitchWorkspaceMotion.bind(this));
|
||||
switchGesture.connect('activated', this._onSwitchWorkspaceActivated.bind(this));
|
||||
switchGesture.connect('cancel', this._endTouchGesture.bind(this));
|
||||
Main.overview.addAction(switchGesture);
|
||||
this.actor.bind_property('mapped', switchGesture, 'enabled', GObject.BindingFlags.SYNC_CREATE);
|
||||
|
||||
switchGesture = new WindowManager.TouchpadWorkspaceSwitchAction(global.stage, allowedModes);
|
||||
switchGesture.connect('motion', this._onSwitchWorkspaceMotion.bind(this));
|
||||
switchGesture.connect('activated', this._onSwitchWorkspaceActivated.bind(this));
|
||||
switchGesture.connect('cancel', this._endTouchGesture.bind(this));
|
||||
this.actor.connect('notify::mapped', () => {
|
||||
switchGesture.enabled = this.actor.mapped;
|
||||
});
|
||||
switchGesture.enabled = this.actor.mapped;
|
||||
|
||||
this._primaryIndex = Main.layoutManager.primaryIndex;
|
||||
|
||||
this._workspacesViews = [];
|
||||
@ -474,6 +508,47 @@ var WorkspacesDisplay = class {
|
||||
return false;
|
||||
}
|
||||
|
||||
_startSwipeScroll() {
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].startSwipeScroll();
|
||||
}
|
||||
|
||||
_endSwipeScroll() {
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].endSwipeScroll();
|
||||
}
|
||||
|
||||
_startTouchGesture() {
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].startTouchGesture();
|
||||
}
|
||||
|
||||
_endTouchGesture() {
|
||||
for (let i = 0; i < this._workspacesViews.length; i++)
|
||||
this._workspacesViews[i].endTouchGesture();
|
||||
}
|
||||
|
||||
_onSwitchWorkspaceMotion(action, xRel, yRel) {
|
||||
// We don't have a way to hook into start of touchpad actions,
|
||||
// luckily this is safe to call repeatedly.
|
||||
this._startTouchGesture();
|
||||
|
||||
let workspaceManager = global.workspace_manager;
|
||||
let active = workspaceManager.get_active_workspace_index();
|
||||
let adjustment = this._scrollAdjustment;
|
||||
adjustment.value = (active - yRel / this.actor.height) * adjustment.page_size;
|
||||
}
|
||||
|
||||
_onSwitchWorkspaceActivated(action, direction) {
|
||||
let workspaceManager = global.workspace_manager;
|
||||
let activeWorkspace = workspaceManager.get_active_workspace();
|
||||
let newWs = activeWorkspace.get_neighbor(direction);
|
||||
if (newWs != activeWorkspace)
|
||||
newWs.activate(global.get_current_time());
|
||||
|
||||
this._endTouchGesture();
|
||||
}
|
||||
|
||||
navigateFocus(from, direction) {
|
||||
return this._getPrimaryView().actor.navigate_focus(from, direction, false);
|
||||
}
|
||||
|
1043
po/en_GB.po
1043
po/en_GB.po
File diff suppressed because it is too large
Load Diff
143
po/eo.po
143
po/eo.po
@ -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 "Something’s 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:"
|
||||
|
||||
|
114
po/fr.po
114
po/fr.po
@ -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 d’utilisateur : "
|
||||
|
||||
#: 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 "L’application 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 n’a é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 d’accè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 "L’activation 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 d’authentification a été écartée par l’utilisateur"
|
||||
|
||||
#. 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"
|
||||
|
||||
|
144
po/tg.po
144
po/tg.po
@ -8,7 +8,7 @@ msgstr ""
|
||||
"Project-Id-Version: Tajik Gnome\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
|
||||
"POT-Creation-Date: 2019-03-02 10:57+0000\n"
|
||||
"PO-Revision-Date: 2019-03-06 20:14+0500\n"
|
||||
"PO-Revision-Date: 2019-03-13 21:44+0500\n"
|
||||
"Last-Translator: Victor Ibragimov <victor.ibragimov@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: tg\n"
|
||||
@ -32,7 +32,7 @@ msgstr "Марказонидани огоҳии фаъол"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:15
|
||||
msgid "Show the overview"
|
||||
msgstr "Намоиш додани хулоса"
|
||||
msgstr "Намоиш додани ҷамъбаст"
|
||||
|
||||
#: data/50-gnome-shell-system.xml:18
|
||||
msgid "Show all applications"
|
||||
@ -82,7 +82,7 @@ msgstr "Ғайрифаъол кардани васеъшавиҳои корба
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:27
|
||||
msgid "Disable all extensions the user has enabled without affecting the “enabled-extension” setting."
|
||||
msgstr ""
|
||||
msgstr "Ҳамаи васеъшавиҳое, ки корбар фаъол кард, бе расонидани таъсир ба танзими “васеъшавиии-фаъол” ғайрифаъол карда мешаванд."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:34
|
||||
msgid "Disables the validation of extension version compatibility"
|
||||
@ -188,11 +188,11 @@ msgstr "Тугмабандӣ барои иваз кардани намоёнии
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:138
|
||||
msgid "Keybinding to focus the active notification"
|
||||
msgstr "Тугмабандӣ барои гузоштани фокус ба огоҳии фаъол"
|
||||
msgstr "Тугмабандӣ барои марказонидани огоҳии фаъол"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:139
|
||||
msgid "Keybinding to focus the active notification."
|
||||
msgstr "Тугмабандӣ барои гузоштани фокус ба огоҳии фаъол."
|
||||
msgstr "Тугмабандӣ барои марказонидани огоҳии фаъол."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:145
|
||||
msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"
|
||||
@ -245,11 +245,11 @@ msgstr "Гузариш ба барномаи 9"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:190
|
||||
msgid "Which keyboard to use"
|
||||
msgstr "Клавиатураро интихоб кунед"
|
||||
msgstr "Клавиатураро интихоб намоед"
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:191
|
||||
msgid "The type of keyboard to use."
|
||||
msgstr "Намуди клавиатура барои истифода."
|
||||
msgstr "Навъи клавиатурае, ки истифода мешавад."
|
||||
|
||||
#: data/org.gnome.shell.gschema.xml.in:202
|
||||
#: data/org.gnome.shell.gschema.xml.in:229
|
||||
@ -308,15 +308,15 @@ 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 "Something’s gone wrong"
|
||||
msgstr ""
|
||||
msgstr "Чизе нодуруст ба миён омад"
|
||||
|
||||
#: js/extensionPrefs/main.js:123
|
||||
msgid "We’re very sorry, but there’s been a problem: the settings for this extension can’t be displayed. We recommend that you report the issue to the extension authors."
|
||||
msgstr ""
|
||||
msgstr "Мутаассифона, хатое ба вуҷуд омад: танзимот барои ин васеъшавӣ нишон дода намешавад. Тавсия дода мешавад, ки шумо дар бораи хато ба муаллифони васеъшавӣ гузориш диҳед."
|
||||
|
||||
#: js/extensionPrefs/main.js:130
|
||||
#| msgid "Show Details"
|
||||
@ -330,7 +330,7 @@ msgstr "Намоиш додани хатоҳо"
|
||||
|
||||
#: js/extensionPrefs/main.js:185
|
||||
msgid "Homepage"
|
||||
msgstr ""
|
||||
msgstr "Саҳифаи асосӣ"
|
||||
|
||||
#: js/extensionPrefs/main.js:186
|
||||
#| msgid "UUIDs of extensions to enable"
|
||||
@ -340,15 +340,15 @@ msgstr "Рамзҳои UUID барои пасвандҳои фаъолшаван
|
||||
#: js/extensionPrefs/main.js:449
|
||||
#| msgid "No extensions installed"
|
||||
msgid "No Extensions Installed"
|
||||
msgstr "Ягон пасванд насб нашудааст"
|
||||
msgstr "Ягон васеъшавӣ насб нашудааст"
|
||||
|
||||
#: js/extensionPrefs/main.js:459
|
||||
msgid "Extensions can be installed through Software or <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a>."
|
||||
msgstr ""
|
||||
msgstr "Васеъшавиҳо ба воситаи низоми нармафзор ё <a href=\"https://extensions.gnome.org\">extensions.gnome.org</a> ҷорӣ карда мешаванд."
|
||||
|
||||
#: js/extensionPrefs/main.js:474
|
||||
msgid "Browse in Software"
|
||||
msgstr ""
|
||||
msgstr "Намоиш дар низоми нармафзор"
|
||||
|
||||
#: js/gdm/authPrompt.js:140 js/ui/audioDeviceSelection.js:55
|
||||
#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:136
|
||||
@ -430,7 +430,7 @@ msgstr ""
|
||||
#: js/misc/systemActions.js:95
|
||||
msgctxt "search-result"
|
||||
msgid "Lock Screen"
|
||||
msgstr ""
|
||||
msgstr "Қулф кардани экран"
|
||||
|
||||
#. Translators: A list of keywords that match the lock screen action, separated by semicolons
|
||||
#: js/misc/systemActions.js:98
|
||||
@ -454,13 +454,13 @@ msgstr ""
|
||||
#| msgid "Suspend"
|
||||
msgctxt "search-result"
|
||||
msgid "Suspend"
|
||||
msgstr "Таваққуф кардан"
|
||||
msgstr "Таваққуф кардани низом"
|
||||
|
||||
#. Translators: A list of keywords that match the suspend action, separated by semicolons
|
||||
#: js/misc/systemActions.js:112
|
||||
#| msgid "Suspend"
|
||||
msgid "suspend;sleep"
|
||||
msgstr "Таваққуф"
|
||||
msgstr "таваққуф;хоб"
|
||||
|
||||
#. Translators: The name of the switch user action in search
|
||||
#: js/misc/systemActions.js:116
|
||||
@ -473,14 +473,14 @@ msgstr "Иваз кардани корбар"
|
||||
#: js/misc/systemActions.js:119
|
||||
#| msgid "Switch User"
|
||||
msgid "switch user"
|
||||
msgstr "Таъвизи корбар"
|
||||
msgstr "ивази корбар"
|
||||
|
||||
#. Translators: The name of the lock orientation action in search
|
||||
#: js/misc/systemActions.js:123
|
||||
#| msgid "Orientation Lock"
|
||||
msgctxt "search-result"
|
||||
msgid "Lock Orientation"
|
||||
msgstr "Қулфи самт"
|
||||
msgstr "Қулфи самти экран"
|
||||
|
||||
#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
|
||||
#: js/misc/systemActions.js:126
|
||||
@ -504,7 +504,7 @@ msgstr "Иҷрокунии “%s” қатъ шудааст:"
|
||||
|
||||
#: js/misc/util.js:175
|
||||
msgid "Just now"
|
||||
msgstr ""
|
||||
msgstr "Ҳоли ҳозир"
|
||||
|
||||
#: js/misc/util.js:177
|
||||
#, javascript-format
|
||||
@ -533,29 +533,29 @@ msgstr "Дирӯз"
|
||||
#, javascript-format
|
||||
msgid "%d day ago"
|
||||
msgid_plural "%d days ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%d рӯз пеш"
|
||||
msgstr[1] "%d рӯз пеш"
|
||||
|
||||
#: js/misc/util.js:188
|
||||
#, javascript-format
|
||||
msgid "%d week ago"
|
||||
msgid_plural "%d weeks ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%d ҳафта пеш"
|
||||
msgstr[1] "%d ҳафта пеш"
|
||||
|
||||
#: js/misc/util.js:191
|
||||
#, javascript-format
|
||||
msgid "%d month ago"
|
||||
msgid_plural "%d months ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%d моҳ пеш"
|
||||
msgstr[1] "%d моҳ пеш"
|
||||
|
||||
#: js/misc/util.js:193
|
||||
#, javascript-format
|
||||
msgid "%d year ago"
|
||||
msgid_plural "%d years ago"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
msgstr[0] "%d сол пеш"
|
||||
msgstr[1] "%d сол пеш"
|
||||
|
||||
#. Translators: Time in 24h format
|
||||
#: js/misc/util.js:223
|
||||
@ -635,22 +635,22 @@ msgstr "%B %d %Y, %l∶%M %p"
|
||||
#: js/portalHelper/main.js:40
|
||||
#| msgid "Hotspot Active"
|
||||
msgid "Hotspot Login"
|
||||
msgstr "Hotspot фаъол аст"
|
||||
msgstr "Воридшавӣ ба нуқтаи пайваст"
|
||||
|
||||
#: js/portalHelper/main.js:86
|
||||
msgid "Your connection to this hotspot login is not secure. Passwords or other information you enter on this page can be viewed by people nearby."
|
||||
msgstr ""
|
||||
msgstr "Пайвасти воридшавии шумо ба нуқтаи пайвасти ҷорӣ бехатар намебошад. Ниҳонвожаҳо ё маълумоти дигаре, ки дар ин саҳифа ворид карда мешавад, метавонанд бо одамони дар гидру атроф ошкор карда шаванд."
|
||||
|
||||
#. No support for non-modal system dialogs, so ignore the option
|
||||
#. let modal = options['modal'] || true;
|
||||
#: js/ui/accessDialog.js:37 js/ui/status/location.js:360
|
||||
msgid "Deny Access"
|
||||
msgstr ""
|
||||
msgstr "Манъ кардани дастрасӣ"
|
||||
|
||||
#: js/ui/accessDialog.js:38 js/ui/status/location.js:363
|
||||
#| msgid "Always grant access"
|
||||
msgid "Grant Access"
|
||||
msgstr "Ҳамеша иҷозат додан"
|
||||
msgstr "Иҷозат додани дастрасӣ"
|
||||
|
||||
#: js/ui/appDisplay.js:660
|
||||
msgid "Frequently used applications will appear here"
|
||||
@ -697,7 +697,7 @@ msgstr "%s аз баргузидаҳои шумо тоза шудааст."
|
||||
#: js/ui/audioDeviceSelection.js:42
|
||||
#| msgid "Send Files to Device…"
|
||||
msgid "Select Audio Device"
|
||||
msgstr "Фиристодани файлҳо ба дастгоҳ..."
|
||||
msgstr "Интихоби дастгоҳи аудиоӣ"
|
||||
|
||||
#: js/ui/audioDeviceSelection.js:53
|
||||
msgid "Sound Settings"
|
||||
@ -705,11 +705,11 @@ msgstr "Танзимоти садо"
|
||||
|
||||
#: js/ui/audioDeviceSelection.js:62
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
msgstr "Гӯшмонакҳо"
|
||||
|
||||
#: js/ui/audioDeviceSelection.js:64
|
||||
msgid "Headset"
|
||||
msgstr ""
|
||||
msgstr "Гӯшмонак бо микрофон"
|
||||
|
||||
#: js/ui/audioDeviceSelection.js:66 js/ui/status/volume.js:247
|
||||
msgid "Microphone"
|
||||
@ -717,7 +717,7 @@ msgstr "Микрофон"
|
||||
|
||||
#: js/ui/backgroundMenu.js:13
|
||||
msgid "Change Background…"
|
||||
msgstr "Тағйир додани пазсамина..."
|
||||
msgstr "Тағйир додани пазсамина…"
|
||||
|
||||
#: js/ui/backgroundMenu.js:15 js/ui/status/nightLight.js:43
|
||||
msgid "Display Settings"
|
||||
@ -800,7 +800,7 @@ msgstr "%OB"
|
||||
#.
|
||||
#: js/ui/calendar.js:342
|
||||
msgid "%OB %Y"
|
||||
msgstr ""
|
||||
msgstr "%OB %Y"
|
||||
|
||||
#: js/ui/calendar.js:399
|
||||
msgid "Previous month"
|
||||
@ -854,14 +854,14 @@ msgstr "Ягон рӯйдод нест"
|
||||
|
||||
#: js/ui/calendar.js:1075
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
msgstr "Пок кардан"
|
||||
|
||||
#. Translators: %s is an application name
|
||||
#: js/ui/closeDialog.js:42
|
||||
#, javascript-format
|
||||
#| msgid "“%s” is ready"
|
||||
msgid "“%s” is not responding."
|
||||
msgstr "“%s” омода аст"
|
||||
msgstr "“%s” ҷавоб намедиҳад."
|
||||
|
||||
#: js/ui/closeDialog.js:43
|
||||
msgid "You may choose to wait a short while for it to continue or force the application to quit entirely."
|
||||
@ -869,11 +869,11 @@ msgstr ""
|
||||
|
||||
#: js/ui/closeDialog.js:59
|
||||
msgid "Force Quit"
|
||||
msgstr ""
|
||||
msgstr "Маҷбуран пӯшида шавад"
|
||||
|
||||
#: js/ui/closeDialog.js:62
|
||||
msgid "Wait"
|
||||
msgstr ""
|
||||
msgstr "Интизор шавед"
|
||||
|
||||
#: js/ui/components/automountManager.js:86
|
||||
msgid "External drive connected"
|
||||
@ -910,24 +910,24 @@ msgstr "Пайваст шудан"
|
||||
#: js/ui/components/networkAgent.js:246 js/ui/components/networkAgent.js:265
|
||||
#: js/ui/components/networkAgent.js:285 js/ui/components/networkAgent.js:295
|
||||
msgid "Password: "
|
||||
msgstr "Ниҳонвожа:"
|
||||
msgstr "Ниҳонвожа: "
|
||||
|
||||
#. static WEP
|
||||
#: js/ui/components/networkAgent.js:216
|
||||
msgid "Key: "
|
||||
msgstr "Калид:"
|
||||
msgstr "Калид: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:249 js/ui/components/networkAgent.js:271
|
||||
msgid "Private key password: "
|
||||
msgstr "Пароли калиди шахсӣ:"
|
||||
msgstr "Ниҳонвожаи калиди шахсӣ: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:269
|
||||
msgid "Identity: "
|
||||
msgstr "Шахсият:"
|
||||
msgstr "Шахсият: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:283
|
||||
msgid "Service: "
|
||||
msgstr "Хидмат:"
|
||||
msgstr "Хидмат: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:312 js/ui/components/networkAgent.js:685
|
||||
msgid "Authentication required by wireless network"
|
||||
@ -944,7 +944,7 @@ msgstr "Санҷиши ҳаққонияти 802.1X-и симдор"
|
||||
|
||||
#: js/ui/components/networkAgent.js:319
|
||||
msgid "Network name: "
|
||||
msgstr "Номи шабака:"
|
||||
msgstr "Номи шабака: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:324 js/ui/components/networkAgent.js:693
|
||||
msgid "DSL authentication"
|
||||
@ -960,7 +960,7 @@ msgstr "Барои дастгоҳи паҳннавори мобилӣ рамзи
|
||||
|
||||
#: js/ui/components/networkAgent.js:333
|
||||
msgid "PIN: "
|
||||
msgstr "PIN:"
|
||||
msgstr "PIN: "
|
||||
|
||||
#: js/ui/components/networkAgent.js:340 js/ui/components/networkAgent.js:706
|
||||
msgid "Mobile broadband network password"
|
||||
@ -1051,12 +1051,12 @@ msgstr "Обу ҳаво"
|
||||
#: js/ui/dateMenu.js:305
|
||||
#| msgid "Select a network"
|
||||
msgid "Select a location…"
|
||||
msgstr "Интихоб кардани шабака"
|
||||
msgstr "Интихоби ҷойгиршавӣ…"
|
||||
|
||||
#: js/ui/dateMenu.js:313
|
||||
#| msgid "Searching…"
|
||||
msgid "Loading…"
|
||||
msgstr "Ҷустуҷӯ рафта истодааст..."
|
||||
msgstr "Бор шуда истодааст…"
|
||||
|
||||
#: js/ui/dateMenu.js:323
|
||||
msgid "Go online for weather information"
|
||||
@ -1274,7 +1274,7 @@ msgstr ""
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:57
|
||||
msgid "Leave On"
|
||||
msgstr ""
|
||||
msgstr "Ҳамеша фаъол"
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:57 js/ui/status/bluetooth.js:133
|
||||
#: js/ui/status/network.js:1264
|
||||
@ -1287,11 +1287,11 @@ msgstr "Фаъол кардан"
|
||||
#: js/ui/status/nightLight.js:39 js/ui/status/rfkill.js:79
|
||||
#: js/ui/status/rfkill.js:106
|
||||
msgid "Turn Off"
|
||||
msgstr "Хомӯш кардан"
|
||||
msgstr "Ғайрифаъол кардан"
|
||||
|
||||
#: js/ui/kbdA11yDialog.js:65
|
||||
msgid "Leave Off"
|
||||
msgstr ""
|
||||
msgstr "Ҳамеша ғайрифаъол"
|
||||
|
||||
#: js/ui/keyboard.js:203
|
||||
msgid "Region & Language Settings"
|
||||
@ -1327,7 +1327,7 @@ msgstr "Ғайрифаъол"
|
||||
|
||||
#: js/ui/lookingGlass.js:693
|
||||
msgid "Error"
|
||||
msgstr "Хатогӣ"
|
||||
msgstr "Хато"
|
||||
|
||||
#: js/ui/lookingGlass.js:695
|
||||
msgid "Out of date"
|
||||
@ -1372,7 +1372,7 @@ msgstr "Ботил сохтан"
|
||||
#. activities. See also note for "Activities" string.
|
||||
#: js/ui/overview.js:100
|
||||
msgid "Overview"
|
||||
msgstr "Хулоса"
|
||||
msgstr "Ҷамъбаст"
|
||||
|
||||
#. Translators: this is the text displayed
|
||||
#. in the search entry when no search is
|
||||
@ -1380,20 +1380,20 @@ msgstr "Хулоса"
|
||||
#. characters.
|
||||
#: js/ui/overview.js:226
|
||||
msgid "Type to search…"
|
||||
msgstr "Ҷустуҷӯ кардан..."
|
||||
msgstr "Барои ҷустуҷӯ чизеро чоп намоед…"
|
||||
|
||||
#: js/ui/padOsd.js:92
|
||||
msgid "New shortcut…"
|
||||
msgstr ""
|
||||
msgstr "Миёнбури нав…"
|
||||
|
||||
#: js/ui/padOsd.js:141
|
||||
#| msgid "Applications"
|
||||
msgid "Application defined"
|
||||
msgstr "Барномаҳо"
|
||||
msgstr "Барномаи муайяншуда"
|
||||
|
||||
#: js/ui/padOsd.js:142
|
||||
msgid "Show on-screen help"
|
||||
msgstr ""
|
||||
msgstr "Намоиш додани кумаки экранӣ"
|
||||
|
||||
#: js/ui/padOsd.js:143
|
||||
#| msgid "Switch User"
|
||||
@ -1406,7 +1406,7 @@ msgstr ""
|
||||
|
||||
#: js/ui/padOsd.js:209
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
msgstr "Тайёр"
|
||||
|
||||
#: js/ui/padOsd.js:721
|
||||
msgid "Edit…"
|
||||
@ -1414,19 +1414,19 @@ msgstr "Таҳрир кардан…"
|
||||
|
||||
#: js/ui/padOsd.js:763 js/ui/padOsd.js:868
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
msgstr "Ҳеҷ"
|
||||
|
||||
#: js/ui/padOsd.js:822
|
||||
msgid "Press a button to configure"
|
||||
msgstr ""
|
||||
msgstr "Барои идома тугмаеро пахш намоед"
|
||||
|
||||
#: js/ui/padOsd.js:823
|
||||
msgid "Press Esc to exit"
|
||||
msgstr ""
|
||||
msgstr "Барои баромад тугмаи Esc-ро пахш намоед"
|
||||
|
||||
#: js/ui/padOsd.js:826
|
||||
msgid "Press any key to exit"
|
||||
msgstr ""
|
||||
msgstr "Барои баромад тугмаи дилхоҳро пахш намоед"
|
||||
|
||||
#: js/ui/panel.js:108
|
||||
msgid "Quit"
|
||||
@ -1446,7 +1446,7 @@ msgstr "Низом"
|
||||
|
||||
#: js/ui/panel.js:861
|
||||
msgid "Top Bar"
|
||||
msgstr "Панели боло"
|
||||
msgstr "Лавҳаии болоӣ"
|
||||
|
||||
#. Translators: this MUST be either "toggle-switch-us"
|
||||
#. (for toggle switches containing the English words
|
||||
@ -1519,7 +1519,7 @@ msgstr "Қулф аз тарави барнома баста шудааст"
|
||||
|
||||
#: js/ui/search.js:635
|
||||
msgid "Searching…"
|
||||
msgstr "Ҷустуҷӯ рафта истодааст..."
|
||||
msgstr "Дар ҳоли ҷустуҷӯ…"
|
||||
|
||||
#: js/ui/search.js:637
|
||||
msgid "No results."
|
||||
@ -1836,7 +1836,7 @@ msgstr "%s пайваст нашудааст"
|
||||
#: js/ui/status/network.js:1393
|
||||
#| msgid "Connecting"
|
||||
msgid "connecting…"
|
||||
msgstr "Пайвастшавӣ"
|
||||
msgstr "пайваст шуда истодааст…"
|
||||
|
||||
#. Translators: this is for network connections that require some kind of key or password
|
||||
#: js/ui/status/network.js:1396
|
||||
@ -1894,7 +1894,7 @@ msgstr "Пайваст қатъ шудааст"
|
||||
|
||||
#: js/ui/status/network.js:1703
|
||||
msgid "Activation of network connection failed"
|
||||
msgstr "Фаъолсозии пайвасти шабака қатъ шудааст."
|
||||
msgstr "Фаъолсозии пайвасти шабака қатъ шуд"
|
||||
|
||||
#: js/ui/status/nightLight.js:60
|
||||
#| msgid "Networking is disabled"
|
||||
@ -1929,7 +1929,7 @@ msgstr ""
|
||||
#. to estimate battery life
|
||||
#: js/ui/status/power.js:70 js/ui/status/power.js:76
|
||||
msgid "Estimating…"
|
||||
msgstr "Ҳисоб шуда истодааст..."
|
||||
msgstr "Ҳисоб шуда истодааст…"
|
||||
|
||||
#. Translators: this is <hours>:<minutes> Remaining (<percentage>)
|
||||
#: js/ui/status/power.js:84
|
||||
@ -1948,7 +1948,7 @@ msgstr "%d∶%02d то пур шудан (%d%%)"
|
||||
#: js/ui/status/power.js:117 js/ui/status/power.js:119
|
||||
#, javascript-format
|
||||
msgid "%d %%"
|
||||
msgstr ""
|
||||
msgstr "%d %%"
|
||||
|
||||
#: js/ui/status/remoteAccess.js:42
|
||||
msgid "Screen is Being Shared"
|
||||
@ -1978,11 +1978,11 @@ msgstr "Баромад аз мизи корӣ"
|
||||
#: js/ui/status/system.js:227
|
||||
#| msgid "Sound Settings"
|
||||
msgid "Account Settings"
|
||||
msgstr "Танзимоти садо"
|
||||
msgstr "Танзимоти ҳисоб"
|
||||
|
||||
#: js/ui/status/system.js:255
|
||||
msgid "Orientation Lock"
|
||||
msgstr "Қулфи самт"
|
||||
msgstr "Қулфи самти экран"
|
||||
|
||||
#: js/ui/status/system.js:281
|
||||
msgid "Suspend"
|
||||
|
1007
po/zh_TW.po
1007
po/zh_TW.po
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
|
@ -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))
|
||||
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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -24,6 +24,8 @@
|
||||
#ifndef __ST_SETTINGS_H__
|
||||
#define __ST_SETTINGS_H__
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define ST_TYPE_SETTINGS (st_settings_get_type ())
|
||||
@ -31,4 +33,6 @@ G_DECLARE_FINAL_TYPE (StSettings, st_settings, ST, SETTINGS, GObject)
|
||||
|
||||
StSettings * st_settings_get (void);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __ST_SETTINGS_H__ */
|
||||
|
@ -502,7 +502,7 @@ pixbuf_to_st_content_image (GdkPixbuf *pixbuf,
|
||||
width *= paint_scale;
|
||||
|
||||
if (height < 0)
|
||||
height = ceilf (gdk_pixbuf_get_width (pixbuf) / resource_scale);
|
||||
height = ceilf (gdk_pixbuf_get_height (pixbuf) / resource_scale);
|
||||
else
|
||||
height *= paint_scale;
|
||||
|
||||
|
@ -119,6 +119,10 @@ st_theme_node_transition_new (StThemeNode *from_node,
|
||||
return transition;
|
||||
}
|
||||
|
||||
/**
|
||||
* st_theme_node_transition_get_new_paint_state: (skip)
|
||||
*
|
||||
*/
|
||||
StThemeNodePaintState *
|
||||
st_theme_node_transition_get_new_paint_state (StThemeNodeTransition *transition)
|
||||
{
|
||||
|
@ -579,7 +579,11 @@ get_root_theme_node (ClutterStage *stage)
|
||||
StThemeNode *
|
||||
st_widget_get_theme_node (StWidget *widget)
|
||||
{
|
||||
StWidgetPrivate *priv = st_widget_get_instance_private (widget);
|
||||
StWidgetPrivate *priv;
|
||||
|
||||
g_return_val_if_fail (ST_IS_WIDGET (widget), NULL);
|
||||
|
||||
priv = st_widget_get_instance_private (widget);
|
||||
|
||||
if (priv->theme_node == NULL)
|
||||
{
|
||||
|
Reference in New Issue
Block a user