Compare commits

...

27 Commits

Author SHA1 Message Date
Florian Müllner
2307e2cabe Bump version to 41.beta
Update NEWS.
2021-08-18 01:50:19 +02:00
Florian Müllner
4becaa28ce Update sass submodule 2021-08-18 01:50:19 +02:00
Florian Müllner
cc45bd63ab cleanup: Use new gettext() convenience
gnome-shell now includes convenience helpers for gettext functions that
use an extension's text domain (as initialized by initTranslations()).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/183>
2021-08-14 23:15:56 +02:00
Florian Müllner
757bcee4e2 build: Use backend-agnostic meson commands for export
There's no alternative backend in sight for us, but it's nice to
only deal with a single build tool.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/182>
2021-08-13 05:25:47 +02:00
Florian Müllner
1340b209f9 window-list: Simplify radio handling
Instead of handling the active state manually and updating settings
on changes, we can use GActions to leave the nitty-gritty to GTK.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/181>
2021-08-13 05:22:41 +02:00
Florian Müllner
8f362d57fe lint: Synchronize configuration with gjs
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/180>
2021-08-13 04:57:35 +02:00
Florian Müllner
d0b9c9b54a cleanup: Document functions
gjs now enforces this in its eslint configuration. Adding type
information generally is a good idea, so add appropriate comments
to public functions before picking up that configuration change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/180>
2021-08-13 04:48:22 +02:00
Florian Müllner
6284b0c489 window-list: Move functions into base class
The helper functions date back to a time when AppButton and WindowButton
were unconnected classes. But nowadays they share a common base class, so
we have a better place for them than external helper functions.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/180>
2021-08-13 04:39:00 +02:00
Florian Müllner
8a211f98fd build: Rewrite gettext domain when exporting zips
Now that every extension picks up its gettext domain from
its metadata, we can easily change it when exporting the
zips.

That ensures that every extension only binds its own domain
instead of messing up other extension's translations.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/335

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/179>
2021-08-11 19:05:45 +02:00
Florian Müllner
d6633397b7 build: Remove unused variable
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/335

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/179>
2021-08-11 19:05:45 +02:00
Florian Müllner
0d06cc685e extensions: Pick up gettext domain from metadata
Since commit a6ee142f21, the extension archives that are uploaded
to extensions.gnome.org only contain strings that are relevant for
the extension, not all translations from all extensions.

Unfortunately all extensions still share a common gettext domain,
so the extension with the last bind_textdomain() call wins and
leaves the others without translations.

We'll address this by using distinct domains when not installed
system-wide. That becomes easier if there is a canonical place
for the text domain, with the existing metadata key being the
natural choice.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/335

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/179>
2021-08-11 18:42:43 +02:00
Marco Trevisan (Treviño)
8de89a44a4 README: Fix typo on instructions to move to main branch 2021-07-21 19:50:34 +02:00
Florian Müllner
f3b1f10f6c ci: Set FDO_UPSTREAM_REPO
ci-fairy uses the variable to set the upstream remote that is used
to build the commit range to check.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/178>
2021-07-19 17:23:44 +02:00
Florian Müllner
2bced47762 classic: Remove padding from app menu
It is now inconsistent with other top bar items, so drop it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/167>
2021-07-18 21:57:38 +00:00
Florian Müllner
7ba9b87064 docs: Add README section for default branch
We are about to change it, so briefly outline how to update local
checkouts.

(Copied from glib)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/177>
2021-07-14 21:11:59 +02:00
Florian Müllner
a642c439ce docs: Use HEAD in external URLs
That way the link will keep working when the other project changes
its default branch name.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/177>
2021-07-14 20:37:15 +02:00
Florian Müllner
d421bbfa60 drive-menu: Hide items initially
Now that the check for network mounts is non-blocking, the initial
sync doesn't take effect immediately. We don't want hidden items
to briefly flash the indicator, so create them initially hidden.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/176>
2021-07-13 11:54:21 +02:00
Florian Müllner
3539ce1139 drive-menu: Fix indicator visibility
Commit 519269be9d made the check for network mounts non-blocking, and
we now update the indicator's visibility before a newly-added network
mount is hidden.

Address this by monitoring the item itself for visibility changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/176>
2021-07-13 11:46:16 +02:00
Florian Müllner
94b907f46d window-list: Init translations
Whoops, we are missing the bindtextdomain() call, which means translations
won't work when no other extension that shares the same domain is used
(like in GNOME Classic for instance).

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/340

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/174>
2021-07-12 16:04:50 +00:00
Alexander Shopov
1e04622eb4 Update Bulgarian translation 2021-07-11 08:21:24 +00:00
Florian Müllner
519269be9d drive-menu: Avoid blocking I/O when querying filesystem
The last commit improved the heuristics for detecting network mounts,
but at the price of potentially blocking the shell. Avoid that drawback
by making the code in question async.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/53

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/27>
2021-06-23 18:15:42 +02:00
Florian Müllner
7d6670ce3c drive-menu: Don't assume mounts without volume are local
The intention of the code is to only expose actually plugged in
devices rather than network mounts, but the existing heuristics are
based on GVolume and simply assume a local mount where there's no
associated volume. Fill that gap by querying the ::remote filesystem
attribute in that case.

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues/53

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/27>
2021-06-23 17:52:19 +02:00
Juliano de Souza Camargo
50bd597baa Update Portuguese translation
(cherry picked from commit 12eedcf6f7)
2021-06-07 10:22:07 +00:00
Hugo Carvalho
4403b54fbc Update Portuguese translation
(cherry picked from commit 08d382facc)
2021-06-02 16:10:00 +00:00
Adam Goode
d6648b0b5c window-list: Don't use panel-button class for the workspace indicator
The panel-button introduces some horizontal padding which is insensitive
to scroll events. Without this change, there is a small dead zone in the
corner that cannot be used to switch workspaces with the mouse wheel.

For useMenu mode, this has the effect of removing all of the horizontal
space to the edge of the screen, so I add some back with the
status-label-bin margin.

This a is similar change to 8bad8a3b63.

Fixes #315.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/171>
2021-05-26 11:57:41 +00:00
Florian Müllner
861e5c0be6 build: Only use major version in shell-versions
The website changed its version handling again, and now takes "40.0"
to mean "40.0, and only 40.0".

Not complaining though, as "40" is more correct in my opinion anyway ...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/172>
2021-05-25 15:45:21 +02:00
Florian Müllner
bf86b84d6c Post-release version bump 2021-05-14 17:01:12 +02:00
31 changed files with 566 additions and 534 deletions

View File

@@ -1,7 +1,7 @@
include: include:
- remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml" - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/33:2020-11-17.0 image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/34:2021-08-12.0
stages: stages:
- pre_review - pre_review
@@ -21,6 +21,7 @@ default:
- 'api_failure' - 'api_failure'
variables: variables:
FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
LINT_LOG: "eslint-report.xml" LINT_LOG: "eslint-report.xml"
JS_LOG: "js-report.txt" JS_LOG: "js-report.txt"
@@ -89,7 +90,7 @@ js_check:
eslint: eslint:
stage: review stage: review
script: script:
- eslint -o $LINT_LOG -f junit extensions - eslint -o $LINT_LOG -f junit --resolve-plugins-relative-to $(npm root -g) extensions
artifacts: artifacts:
paths: paths:
- ${LINT_LOG} - ${LINT_LOG}

View File

@@ -28,4 +28,4 @@ imports (like imports.lang or imports.dbus) and introspection,
the other for Shell API. Within the same group, put everything the other for Shell API. Within the same group, put everything
in alphabetic order. in alphabetic order.
[coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Style_Guide.md [coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/HEAD/doc/Style_Guide.md

14
NEWS
View File

@@ -1,3 +1,17 @@
41.beta
=======
* window-list: Extend reactive area of minimap to screen edges [Adam; !171]
* drive-menu: Improve detection of network mounts [Florian; !27, !176]
* Use distinct gettext domain for e.g.o uploads [Florian; #335]
* Misc. bug fixes and cleanups [Florian; !172, !174, !177, !167, !178, !180,
!181, !182, !183]
Contributors:
Marco Trevisan (Treviño), Adam Goode, Florian Müllner
Translators:
Hugo Carvalho [pt], Juliano de Souza Camargo [pt], Alexander Shopov [bg]
40.1 40.1
==== ====
* Disable welcome dialog in classic session [Florian; !169] * Disable welcome dialog in classic session [Florian; !169]

View File

@@ -69,6 +69,19 @@ GSettings key.
Adds a simple workspace switcher to the top bar. Adds a simple workspace switcher to the top bar.
## Default branch
The default development branch is `main`. If you still have a local
checkout under the old name, use:
```sh
git checkout master
git branch -m master main
git fetch
git branch --unset-upstream
git branch -u origin/master
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
```
## License ## License
GNOME Shell Extensions are distributed under the terms of the GNU General GNOME Shell Extensions are distributed under the terms of the GNU General

View File

@@ -84,8 +84,8 @@ $variant: 'light';
} }
#appMenu { #appMenu {
padding: 0 8px 0 8px;
spinner-image: url("classic-process-working.svg"); spinner-image: url("classic-process-working.svg");
.panel-status-menu-box { padding: 0; }
} }
.tile-preview-left.on-primary, .tile-preview-left.on-primary,
.tile-preview-right.on-primary, .tile-preview-right.on-primary,

View File

@@ -7,20 +7,23 @@ builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1 installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
ninja -C$builddir install meson install -C $builddir
rm -rf $srcdir/zip-files rm -rf $srcdir/zip-files
mkdir $srcdir/zip-files mkdir $srcdir/zip-files
extensiondir=$installdir/share/gnome-shell/extensions extensiondir=$installdir/share/gnome-shell/extensions
schemadir=$installdir/share/glib-2.0/schemas schemadir=$installdir/share/glib-2.0/schemas
localedir=$installdir/share/locale
for f in $extensiondir/*; do for f in $extensiondir/*; do
name=`basename ${f%%@*}` name=`basename ${f%%@*}`
uuid=$name@gnome-shell-extensions.gcampax.github.com uuid=$name@gnome-shell-extensions.gcampax.github.com
schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml
olddomain=gnome-shell-extensions
newdomain=gnome-shell-extension-$name
sed -i "/gettext-domain/ s:$olddomain:$newdomain:" $f/metadata.json
xgettext --from-code=UTF-8 --output-dir=$builddir --output=$name.pot $f/*.js xgettext --from-code=UTF-8 --output-dir=$builddir --output=$name.pot $f/*.js
if [ -f $builddir/$name.pot ]; then if [ -f $builddir/$name.pot ]; then

0
extensions/.lock Normal file
View File

View File

@@ -12,8 +12,7 @@ const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const appSys = Shell.AppSystem.get_default(); const appSys = Shell.AppSystem.get_default();
@@ -673,17 +672,20 @@ class ApplicationsButton extends PanelMenu.Button {
let appsMenuButton; let appsMenuButton;
/** */
function enable() { function enable() {
appsMenuButton = new ApplicationsButton(); appsMenuButton = new ApplicationsButton();
let index = Main.sessionMode.panel.left.indexOf('activities') + 1; let index = Main.sessionMode.panel.left.indexOf('activities') + 1;
Main.panel.addToStatusArea('apps-menu', appsMenuButton, index, 'left'); Main.panel.addToStatusArea('apps-menu', appsMenuButton, index, 'left');
} }
/** */
function disable() { function disable() {
Main.panel.menuManager.removeMenu(appsMenuButton.menu); Main.panel.menuManager.removeMenu(appsMenuButton.menu);
appsMenuButton.destroy(); appsMenuButton.destroy();
} }
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }

View File

@@ -108,10 +108,14 @@ class WindowMover {
let prevCheckWorkspaces; let prevCheckWorkspaces;
let winMover; let winMover;
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
/**
* @returns {bool} - false (used as MetaLater handler)
*/
function myCheckWorkspaces() { function myCheckWorkspaces() {
let keepAliveWorkspaces = []; let keepAliveWorkspaces = [];
let foundNonEmpty = false; let foundNonEmpty = false;
@@ -132,6 +136,7 @@ function myCheckWorkspaces() {
return false; return false;
} }
/** */
function enable() { function enable() {
prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces; prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces;
Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces; Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces;
@@ -139,6 +144,7 @@ function enable() {
winMover = new WindowMover(); winMover = new WindowMover();
} }
/** */
function disable() { function disable() {
Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces; Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces;
winMover.destroy(); winMover.destroy();

View File

@@ -4,11 +4,10 @@
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi; const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const _ = ExtensionUtils.gettext;
const SETTINGS_KEY = 'application-list'; const SETTINGS_KEY = 'application-list';
const WORKSPACE_MAX = 36; // compiled in limit of mutter const WORKSPACE_MAX = 36; // compiled in limit of mutter
@@ -266,10 +265,14 @@ class NewRuleDialog extends Gtk.AppChooserDialog {
} }
}); });
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() { function buildPrefsWidget() {
return new AutoMoveSettingsWidget(); return new AutoMoveSettingsWidget();
} }

View File

@@ -2,15 +2,14 @@
// Drive menu extension // Drive menu extension
const { Clutter, Gio, GObject, Shell, St } = imports.gi; const { Clutter, Gio, GObject, Shell, St } = imports.gi;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const ShellMountOperation = imports.ui.shellMountOperation; const ShellMountOperation = imports.ui.shellMountOperation;
const _ = ExtensionUtils.gettext;
var MountMenuItem = GObject.registerClass( var MountMenuItem = GObject.registerClass(
class MountMenuItem extends PopupMenu.PopupBaseMenuItem { class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
_init(mount) { _init(mount) {
@@ -41,6 +40,8 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
ejectButton.connect('clicked', this._eject.bind(this)); ejectButton.connect('clicked', this._eject.bind(this));
this.add(ejectButton); this.add(ejectButton);
this.hide();
this._changedId = mount.connect('changed', this._syncVisibility.bind(this)); this._changedId = mount.connect('changed', this._syncVisibility.bind(this));
this._syncVisibility(); this._syncVisibility();
} }
@@ -54,7 +55,21 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
super.destroy(); super.destroy();
} }
_isInteresting() { _fsIsRemote(root) {
return new Promise((resolve, reject) => {
const attr = Gio.FILE_ATTRIBUTE_FILESYSTEM_REMOTE;
root.query_filesystem_info_async(attr, null, (o, res) => {
try {
const info = root.query_filesystem_info_finish(res);
resolve(!info.get_attribute_boolean(attr));
} catch (e) {
reject(e);
}
});
});
}
async _isInteresting() {
if (!this.mount.can_eject() && !this.mount.can_unmount()) if (!this.mount.can_eject() && !this.mount.can_unmount())
return false; return false;
if (this.mount.is_shadowed()) if (this.mount.is_shadowed())
@@ -62,17 +77,23 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
let volume = this.mount.get_volume(); let volume = this.mount.get_volume();
if (!volume) { if (volume)
// probably a GDaemonMount, could be network or return volume.get_identifier('class') !== 'network';
// local, but we can't tell; assume it's local for now
return true; const root = this.mount.get_root();
try {
return await this._fsIsRemote(root);
} catch (e) {
log(`Failed to query filesystem: ${e.message}`);
} }
return volume.get_identifier('class') !== 'network'; // Hack, fall back to looking at GType
return Gio._LocalFilePrototype.isPrototypeOf(root);
} }
_syncVisibility() { async _syncVisibility() {
this.visible = this._isInteresting(); this.visible = await this._isInteresting();
} }
_eject() { _eject() {
@@ -135,10 +156,8 @@ class DriveMenu extends PanelMenu.Button {
this.add_child(icon); this.add_child(icon);
this._monitor = Gio.VolumeMonitor.get(); this._monitor = Gio.VolumeMonitor.get();
this._addedId = this._monitor.connect('mount-added', (monitor, mount) => { this._addedId = this._monitor.connect('mount-added',
this._addMount(mount); (monitor, mount) => this._addMount(mount));
this._updateMenuVisibility();
});
this._removedId = this._monitor.connect('mount-removed', (monitor, mount) => { this._removedId = this._monitor.connect('mount-removed', (monitor, mount) => {
this._removeMount(mount); this._removeMount(mount);
this._updateMenuVisibility(); this._updateMenuVisibility();
@@ -169,6 +188,8 @@ class DriveMenu extends PanelMenu.Button {
let item = new MountMenuItem(mount); let item = new MountMenuItem(mount);
this._mounts.unshift(item); this._mounts.unshift(item);
this.menu.addMenuItem(item, 0); this.menu.addMenuItem(item, 0);
item.connect('notify::visible', () => this._updateMenuVisibility());
} }
_removeMount(mount) { _removeMount(mount) {
@@ -195,17 +216,20 @@ class DriveMenu extends PanelMenu.Button {
} }
}); });
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
let _indicator; let _indicator;
/** */
function enable() { function enable() {
_indicator = new DriveMenu(); _indicator = new DriveMenu();
Main.panel.addToStatusArea('drive-menu', _indicator); Main.panel.addToStatusArea('drive-menu', _indicator);
} }
/** */
function disable() { function disable() {
_indicator.destroy(); _indicator.destroy();
} }

View File

@@ -3,6 +3,7 @@ const AppDisplay = imports.ui.appDisplay;
let _activateOriginal = null; let _activateOriginal = null;
/** */
function enable() { function enable() {
_activateOriginal = AppDisplay.AppIcon.prototype.activate; _activateOriginal = AppDisplay.AppIcon.prototype.activate;
AppDisplay.AppIcon.prototype.activate = function () { AppDisplay.AppIcon.prototype.activate = function () {
@@ -10,6 +11,7 @@ function enable() {
}; };
} }
/** */
function disable() { function disable() {
AppDisplay.AppIcon.prototype.activate = _activateOriginal; AppDisplay.AppIcon.prototype.activate = _activateOriginal;
} }

View File

@@ -238,11 +238,13 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
let winInjections, workspaceInjections; let winInjections, workspaceInjections;
/** */
function resetState() { function resetState() {
winInjections = { }; winInjections = { };
workspaceInjections = { }; workspaceInjections = { };
} }
/** */
function enable() { function enable() {
resetState(); resetState();
@@ -282,6 +284,11 @@ function enable() {
}; };
} }
/**
* @param {Object} object - object that was modified
* @param {Object} injection - the map of previous injections
* @param {string} name - the @injection key that should be removed
*/
function removeInjection(object, injection, name) { function removeInjection(object, injection, name) {
if (injection[name] === undefined) if (injection[name] === undefined)
delete object[name]; delete object[name];
@@ -289,6 +296,7 @@ function removeInjection(object, injection, name) {
object[name] = injection[name]; object[name] = injection[name];
} }
/** */
function disable() { function disable() {
var i; var i;

View File

@@ -8,13 +8,12 @@ const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = x => x;
const Me = ExtensionUtils.getCurrentExtension(); const Me = ExtensionUtils.getCurrentExtension();
const PlaceDisplay = Me.imports.placeDisplay; const PlaceDisplay = Me.imports.placeDisplay;
const _ = ExtensionUtils.gettext;
const N_ = x => x;
const PLACE_ICON_SIZE = 16; const PLACE_ICON_SIZE = 16;
var PlaceMenuItem = GObject.registerClass( var PlaceMenuItem = GObject.registerClass(
@@ -133,12 +132,14 @@ class PlacesMenu extends PanelMenu.Button {
} }
}); });
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
let _indicator; let _indicator;
/** */
function enable() { function enable() {
_indicator = new PlacesMenu(); _indicator = new PlacesMenu();
@@ -148,6 +149,7 @@ function enable() {
Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left'); Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left');
} }
/** */
function disable() { function disable() {
_indicator.destroy(); _indicator.destroy();
} }

View File

@@ -3,11 +3,11 @@
const { Gio, GLib, Shell } = imports.gi; const { Gio, GLib, Shell } = imports.gi;
const Signals = imports.signals; const Signals = imports.signals;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const ShellMountOperation = imports.ui.shellMountOperation; const ShellMountOperation = imports.ui.shellMountOperation;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const N_ = x => x; const N_ = x => x;
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background'; const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';

View File

@@ -28,11 +28,15 @@ const MESSAGE_FADE_TIME = 2000;
let text; let text;
/** */
function hideMessage() { function hideMessage() {
text.destroy(); text.destroy();
text = null; text = null;
} }
/**
* @param {string} message - the message to flash
*/
function flashMessage(message) { function flashMessage(message) {
if (!text) { if (!text) {
text = new St.Label({ style_class: 'screenshot-sizer-message' }); text = new St.Label({ style_class: 'screenshot-sizer-message' });
@@ -67,6 +71,11 @@ let SIZES = [
[720, 360], // Phone landscape fullscreen [720, 360], // Phone landscape fullscreen
]; ];
/**
* @param {Meta.Display} display - the display
* @param {Meta.Window=} window - for per-window bindings, the window
* @param {Meta.KeyBinding} binding - the key binding
*/
function cycleScreenshotSizes(display, window, binding) { function cycleScreenshotSizes(display, window, binding) {
// Probably this isn't useful with 5 sizes, but you can decrease instead // Probably this isn't useful with 5 sizes, but you can decrease instead
// of increase by holding down shift. // of increase by holding down shift.
@@ -133,6 +142,7 @@ function cycleScreenshotSizes(display, window, binding) {
flashMessage(message); flashMessage(message);
} }
/** */
function enable() { function enable() {
Main.wm.addKeybinding( Main.wm.addKeybinding(
'cycle-screenshot-sizes', 'cycle-screenshot-sizes',
@@ -148,6 +158,7 @@ function enable() {
cycleScreenshotSizes); cycleScreenshotSizes);
} }
/** */
function disable() { function disable() {
Main.wm.removeKeybinding('cycle-screenshot-sizes'); Main.wm.removeKeybinding('cycle-screenshot-sizes');
Main.wm.removeKeybinding('cycle-screenshot-sizes-backward'); Main.wm.removeKeybinding('cycle-screenshot-sizes-backward');

View File

@@ -58,6 +58,9 @@ class ThemeManager {
} }
} }
/**
* @returns {ThemeManager} - the extension state object
*/
function init() { function init() {
return new ThemeManager(); return new ThemeManager();
} }

View File

@@ -174,9 +174,13 @@ class ThemeRow extends Gtk.ListBoxRow {
} }
}); });
/** */
function init() { function init() {
} }
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() { function buildPrefsWidget() {
return new UserThemePrefsWidget(); return new UserThemePrefsWidget();
} }

View File

@@ -3,6 +3,9 @@ const { GLib } = imports.gi;
const fn = (...args) => GLib.build_filenamev(args); const fn = (...args) => GLib.build_filenamev(args);
/**
* @returns {string[]} - an ordered list of theme directories
*/
function getThemeDirs() { function getThemeDirs() {
return [ return [
fn(GLib.get_home_dir(), '.themes'), fn(GLib.get_home_dir(), '.themes'),
@@ -11,6 +14,9 @@ function getThemeDirs() {
]; ];
} }
/**
* @returns {string[]} - an ordered list of mode theme directories
*/
function getModeThemeDirs() { function getModeThemeDirs() {
return GLib.get_system_data_dirs() return GLib.get_system_data_dirs()
.map(dir => fn(dir, 'gnome-shell', 'theme')); .map(dir => fn(dir, 'gnome-shell', 'theme'));

View File

@@ -11,8 +11,7 @@ const Me = ExtensionUtils.getCurrentExtension();
const { WindowPicker, WindowPickerToggle } = Me.imports.windowPicker; const { WindowPicker, WindowPickerToggle } = Me.imports.windowPicker;
const { WorkspaceIndicator } = Me.imports.workspaceIndicator; const { WorkspaceIndicator } = Me.imports.workspaceIndicator;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const ICON_TEXTURE_SIZE = 24; const ICON_TEXTURE_SIZE = 24;
const DND_ACTIVATE_TIMEOUT = 500; const DND_ACTIVATE_TIMEOUT = 500;
@@ -23,34 +22,10 @@ const GroupingMode = {
ALWAYS: 2, ALWAYS: 2,
}; };
/**
function _minimizeOrActivateWindow(window) { * @param {Shell.App} app - an app
let focusWindow = global.display.focus_window; * @returns {number} - the smallest stable sequence of the app's windows
if (focusWindow === window || */
focusWindow && focusWindow.get_transient_for() === window)
window.minimize();
else
window.activate(global.get_current_time());
}
function _openMenu(menu) {
menu.open();
let event = Clutter.get_current_event();
if (event && event.type() === Clutter.EventType.KEY_RELEASE)
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}
function _onMenuStateChanged(menu, isOpen) {
if (isOpen)
return;
let [x, y] = global.get_pointer();
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
if (Me.stateObj.someWindowListContains(actor))
actor.sync_hover();
}
function _getAppStableSequence(app) { function _getAppStableSequence(app) {
let windows = app.get_windows().filter(w => !w.skip_taskbar); let windows = app.get_windows().filter(w => !w.skip_taskbar);
return windows.reduce((prev, cur) => { return windows.reduce((prev, cur) => {
@@ -58,7 +33,6 @@ function _getAppStableSequence(app) {
}, Infinity); }, Infinity);
} }
class WindowContextMenu extends PopupMenu.PopupMenu { class WindowContextMenu extends PopupMenu.PopupMenu {
constructor(source, metaWindow) { constructor(source, metaWindow) {
super(source, 0.5, St.Side.BOTTOM); super(source, 0.5, St.Side.BOTTOM);
@@ -282,10 +256,37 @@ const BaseButton = GObject.registerClass({
return true; return true;
} }
_openMenu(menu) {
menu.open();
let event = Clutter.get_current_event();
if (event && event.type() === Clutter.EventType.KEY_RELEASE)
menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}
_minimizeOrActivateWindow(window) {
let focusWindow = global.display.focus_window;
if (focusWindow === window ||
focusWindow && focusWindow.get_transient_for() === window)
window.minimize();
else
window.activate(global.get_current_time());
}
_onMenuStateChanged(menu, isOpen) {
if (isOpen)
return;
let [x, y] = global.get_pointer();
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
if (Me.stateObj.someWindowListContains(actor))
actor.sync_hover();
}
_onPopupMenu(_actor) { _onPopupMenu(_actor) {
if (!this._canOpenPopupMenu() || this._contextMenu.isOpen) if (!this._canOpenPopupMenu() || this._contextMenu.isOpen)
return; return;
_openMenu(this._contextMenu); this._openMenu(this._contextMenu);
} }
_isFocused() { _isFocused() {
@@ -362,7 +363,8 @@ class WindowButton extends BaseButton {
this.label_actor = this._windowTitle.label_actor; this.label_actor = this._windowTitle.label_actor;
this._contextMenu = new WindowContextMenu(this, this.metaWindow); this._contextMenu = new WindowContextMenu(this, this.metaWindow);
this._contextMenu.connect('open-state-changed', _onMenuStateChanged); this._contextMenu.connect('open-state-changed',
this._onMenuStateChanged.bind(this));
this._contextMenu.actor.hide(); this._contextMenu.actor.hide();
this._contextMenuManager.addMenu(this._contextMenu); this._contextMenuManager.addMenu(this._contextMenu);
Main.uiGroup.add_actor(this._contextMenu.actor); Main.uiGroup.add_actor(this._contextMenu.actor);
@@ -382,9 +384,9 @@ class WindowButton extends BaseButton {
} }
if (button === 1) if (button === 1)
_minimizeOrActivateWindow(this.metaWindow); this._minimizeOrActivateWindow(this.metaWindow);
else else
_openMenu(this._contextMenu); this._openMenu(this._contextMenu);
} }
_isFocused() { _isFocused() {
@@ -518,14 +520,16 @@ class AppButton extends BaseButton {
this._menuManager = new PopupMenu.PopupMenuManager(this); this._menuManager = new PopupMenu.PopupMenuManager(this);
this._menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.BOTTOM); this._menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.BOTTOM);
this._menu.connect('open-state-changed', _onMenuStateChanged); this._menu.connect('open-state-changed',
this._onMenuStateChanged.bind(this));
this._menu.actor.hide(); this._menu.actor.hide();
this._menu.connect('activate', this._onMenuActivate.bind(this)); this._menu.connect('activate', this._onMenuActivate.bind(this));
this._menuManager.addMenu(this._menu); this._menuManager.addMenu(this._menu);
Main.uiGroup.add_actor(this._menu.actor); Main.uiGroup.add_actor(this._menu.actor);
this._appContextMenu = new AppContextMenu(this); this._appContextMenu = new AppContextMenu(this);
this._appContextMenu.connect('open-state-changed', _onMenuStateChanged); this._appContextMenu.connect('open-state-changed',
this._onMenuStateChanged.bind(this));
this._appContextMenu.actor.hide(); this._appContextMenu.actor.hide();
Main.uiGroup.add_actor(this._appContextMenu.actor); Main.uiGroup.add_actor(this._appContextMenu.actor);
@@ -592,7 +596,7 @@ class AppButton extends BaseButton {
this._singleWindowTitle.child = this._windowTitle; this._singleWindowTitle.child = this._windowTitle;
this._windowContextMenu = new WindowContextMenu(this, this.metaWindow); this._windowContextMenu = new WindowContextMenu(this, this.metaWindow);
this._windowContextMenu.connect( this._windowContextMenu.connect(
'open-state-changed', _onMenuStateChanged); 'open-state-changed', this._onMenuStateChanged.bind(this));
Main.uiGroup.add_actor(this._windowContextMenu.actor); Main.uiGroup.add_actor(this._windowContextMenu.actor);
this._windowContextMenu.actor.hide(); this._windowContextMenu.actor.hide();
this._contextMenuManager.addMenu(this._windowContextMenu); this._contextMenuManager.addMenu(this._windowContextMenu);
@@ -631,7 +635,7 @@ class AppButton extends BaseButton {
if (windows.length === 1) { if (windows.length === 1) {
if (contextMenuWasOpen) if (contextMenuWasOpen)
return; return;
_minimizeOrActivateWindow(windows[0]); this._minimizeOrActivateWindow(windows[0]);
} else { } else {
this._menu.removeAll(); this._menu.removeAll();
@@ -642,12 +646,12 @@ class AppButton extends BaseButton {
item._window = windows[i]; item._window = windows[i];
this._menu.addMenuItem(item); this._menu.addMenuItem(item);
} }
_openMenu(this._menu); this._openMenu(this._menu);
} }
} else { } else {
if (contextMenuWasOpen) if (contextMenuWasOpen)
return; return;
_openMenu(this._contextMenu); this._openMenu(this._contextMenu);
} }
} }
@@ -1105,6 +1109,8 @@ class WindowList extends St.Widget {
class Extension { class Extension {
constructor() { constructor() {
ExtensionUtils.initTranslations();
this._windowLists = null; this._windowLists = null;
this._hideOverviewOrig = Main.overview.hide; this._hideOverviewOrig = Main.overview.hide;
} }
@@ -1168,6 +1174,9 @@ class Extension {
} }
} }
/**
* @returns {Extension} - the extension's state object
*/
function init() { function init() {
return new Extension(); return new Extension();
} }

View File

@@ -1,14 +1,13 @@
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*- // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
/* exported init buildPrefsWidget */ /* exported init buildPrefsWidget */
const { Gio, GObject, Gtk } = imports.gi; const { Gio, GLib, GObject, Gtk } = imports.gi;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const _ = ExtensionUtils.gettext;
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
@@ -26,6 +25,17 @@ class WindowListPrefsWidget extends Gtk.Box {
halign: Gtk.Align.CENTER, halign: Gtk.Align.CENTER,
}); });
this._actionGroup = new Gio.SimpleActionGroup();
this.insert_action_group('window-list', this._actionGroup);
this._settings = ExtensionUtils.getSettings();
this._actionGroup.add_action(
this._settings.create_action('grouping-mode'));
this._actionGroup.add_action(
this._settings.create_action('show-on-all-monitors'));
this._actionGroup.add_action(
this._settings.create_action('display-all-workspaces'));
let groupingLabel = '<b>%s</b>'.format(_('Window Grouping')); let groupingLabel = '<b>%s</b>'.format(_('Window Grouping'));
this.append(new Gtk.Label({ this.append(new Gtk.Label({
label: groupingLabel, use_markup: true, label: groupingLabel, use_markup: true,
@@ -49,61 +59,39 @@ class WindowListPrefsWidget extends Gtk.Box {
context.add_class('frame'); context.add_class('frame');
context.add_class('view'); context.add_class('view');
this._settings = ExtensionUtils.getSettings(); const modes = [
let currentMode = this._settings.get_string('grouping-mode'); { mode: 'never', label: _('Never group windows') },
let range = this._settings.get_range('grouping-mode'); { mode: 'auto', label: _('Group windows when space is limited') },
let modes = range.deep_unpack()[1].deep_unpack(); { mode: 'always', label: _('Always group windows') },
];
let modeLabels = { let group = null;
'never': _('Never group windows'), for (const { mode, label } of modes) {
'auto': _('Group windows when space is limited'), const check = new Gtk.CheckButton({
'always': _('Always group windows'), action_name: 'window-list.grouping-mode',
}; action_target: new GLib.Variant('s', mode),
let radio = null;
let currentRadio = null;
for (let i = 0; i < modes.length; i++) {
let mode = modes[i];
let label = modeLabels[mode];
if (!label) {
log('Unhandled option "%s" for grouping-mode'.format(mode));
continue;
}
radio = new Gtk.CheckButton({
active: !i,
label, label,
group: radio, group,
margin_end: 12, margin_end: 12,
}); });
box.append(radio); group = check;
box.append(check);
if (currentMode === mode)
currentRadio = radio;
radio.connect('toggled', button => {
if (button.active)
this._settings.set_string('grouping-mode', mode);
});
} }
if (currentRadio) this.append(new Gtk.CheckButton({
currentRadio.active = true;
let check = new Gtk.CheckButton({
label: _('Show on all monitors'), label: _('Show on all monitors'),
}); action_name: 'window-list.show-on-all-monitors',
this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT); }));
this.append(check);
check = new Gtk.CheckButton({ this.append(new Gtk.CheckButton({
label: _('Show windows from all workspaces'), label: _('Show windows from all workspaces'),
}); action_name: 'window-list.display-all-workspaces',
this._settings.bind('display-all-workspaces', check, 'active', Gio.SettingsBindFlags.DEFAULT); }));
this.append(check);
} }
}); });
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() { function buildPrefsWidget() {
return new WindowListPrefsWidget(); return new WindowListPrefsWidget();
} }

View File

@@ -82,7 +82,7 @@
background-color: rgba(200, 200, 200, .3); background-color: rgba(200, 200, 200, .3);
border: 1px solid #cccccc; border: 1px solid #cccccc;
padding: 0 3px; padding: 0 3px;
margin: 3px 0; margin: 3px;
} }
.window-list-workspace-indicator .workspaces-box { .window-list-workspace-indicator .workspaces-box {

View File

@@ -2,12 +2,12 @@
const { Clutter, Gio, GObject, Meta, St } = imports.gi; const { Clutter, Gio, GObject, Meta, St } = imports.gi;
const DND = imports.ui.dnd; const DND = imports.ui.dnd;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const TOOLTIP_OFFSET = 6; const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150; const TOOLTIP_ANIMATION_TIME = 150;
@@ -249,6 +249,7 @@ class WorkspaceIndicator extends PanelMenu.Button {
super._init(0.0, _('Workspace Indicator'), true); super._init(0.0, _('Workspace Indicator'), true);
this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM)); this.setMenu(new PopupMenu.PopupMenu(this, 0.0, St.Side.BOTTOM));
this.add_style_class_name('window-list-workspace-indicator'); this.add_style_class_name('window-list-workspace-indicator');
this.remove_style_class_name('panel-button');
this.menu.actor.remove_style_class_name('panel-menu'); this.menu.actor.remove_style_class_name('panel-menu');
let container = new St.Widget({ let container = new St.Widget({

View File

@@ -262,6 +262,9 @@ class Extension {
} }
} }
/**
* @returns {Extension} - the extension's state object
*/
function init() { function init() {
return new Extension(); return new Extension();
} }

View File

@@ -9,8 +9,7 @@ const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const _ = ExtensionUtils.gettext;
const _ = Gettext.gettext;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names'; const WORKSPACE_KEY = 'workspace-names';
@@ -443,17 +442,20 @@ class WorkspaceIndicator extends PanelMenu.Button {
} }
}); });
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
let _indicator; let _indicator;
/** */
function enable() { function enable() {
_indicator = new WorkspaceIndicator(); _indicator = new WorkspaceIndicator();
Main.panel.addToStatusArea('workspace-indicator', _indicator); Main.panel.addToStatusArea('workspace-indicator', _indicator);
} }
/** */
function disable() { function disable() {
_indicator.destroy(); _indicator.destroy();
} }

View File

@@ -3,12 +3,11 @@
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi; const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
const N_ = e => e;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const _ = ExtensionUtils.gettext;
const N_ = e => e;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names'; const WORKSPACE_KEY = 'workspace-names';
@@ -209,10 +208,14 @@ class NewWorkspaceRow extends Gtk.ListBoxRow {
} }
}); });
/** */
function init() { function init() {
ExtensionUtils.initTranslations(); ExtensionUtils.initTranslations();
} }
/**
* @returns {Gtk.Widget} - the prefs widget
*/
function buildPrefsWidget() { function buildPrefsWidget() {
return new WorkspaceSettingsWidget(); return new WorkspaceSettingsWidget();
} }

View File

@@ -1,8 +1,12 @@
--- ---
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later # SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
# SPDX-FileCopyrightText: 2018 Claudio André <claudioandre.br@gmail.com>
env: env:
es6: true es6: true
es2020: true
extends: 'eslint:recommended' extends: 'eslint:recommended'
plugins:
- jsdoc
rules: rules:
array-bracket-newline: array-bracket-newline:
- error - error
@@ -60,6 +64,17 @@ rules:
- 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child' - 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
# Allow dedenting chained member expressions # Allow dedenting chained member expressions
MemberExpression: 'off' MemberExpression: 'off'
jsdoc/check-alignment: error
jsdoc/check-param-names: error
jsdoc/check-tag-names: error
jsdoc/check-types: error
jsdoc/implements-on-classes: error
jsdoc/newline-after-description: error
jsdoc/require-jsdoc: error
jsdoc/require-param: error
jsdoc/require-param-description: error
jsdoc/require-param-name: error
jsdoc/require-param-type: error
key-spacing: key-spacing:
- error - error
- beforeColon: false - beforeColon: false
@@ -107,8 +122,15 @@ rules:
no-octal-escape: error no-octal-escape: error
no-proto: error no-proto: error
no-prototype-builtins: 'off' no-prototype-builtins: 'off'
no-restricted-globals: [error, window]
no-restricted-properties: no-restricted-properties:
- error - error
- object: imports
property: format
message: Use template strings
- object: pkg
property: initFormat
message: Use template strings
- object: Lang - object: Lang
property: copyProperties property: copyProperties
message: Use Object.assign() message: Use Object.assign()
@@ -167,6 +189,7 @@ rules:
object-curly-newline: object-curly-newline:
- error - error
- consistent: true - consistent: true
multiline: true
object-curly-spacing: error object-curly-spacing: error
object-shorthand: error object-shorthand: error
operator-assignment: error operator-assignment: error
@@ -214,14 +237,14 @@ rules:
template-curly-spacing: error template-curly-spacing: error
template-tag-spacing: error template-tag-spacing: error
unicode-bom: error unicode-bom: error
valid-jsdoc:
- error
- requireReturn: false
wrap-iife: wrap-iife:
- error - error
- inside - inside
yield-star-spacing: error yield-star-spacing: error
yoda: error yoda: error
settings:
jsdoc:
mode: typescript
globals: globals:
ARGV: readonly ARGV: readonly
Debugger: readonly Debugger: readonly
@@ -233,5 +256,8 @@ globals:
logError: readonly logError: readonly
print: readonly print: readonly
printerr: readonly printerr: readonly
window: readonly
TextEncoder: readonly
TextDecoder: readonly
parserOptions: parserOptions:
ecmaVersion: 2020 ecmaVersion: 2020

View File

@@ -1,5 +1,5 @@
project('gnome-shell-extensions', project('gnome-shell-extensions',
version: '40.1', version: '41.beta',
meson_version: '>= 0.44.0', meson_version: '>= 0.44.0',
license: 'GPL2+' license: 'GPL2+'
) )
@@ -22,7 +22,7 @@ sessiondir = join_paths(datadir, 'gnome-session', 'sessions')
xsessiondir = join_paths(datadir, 'xsessions') xsessiondir = join_paths(datadir, 'xsessions')
ver_arr = meson.project_version().split('.') ver_arr = meson.project_version().split('.')
shell_version = '@0@.0'.format(ver_arr[0]) shell_version = ver_arr[0]
uuid_suffix = '@gnome-shell-extensions.gcampax.github.com' uuid_suffix = '@gnome-shell-extensions.gcampax.github.com'

238
po/bg.po
View File

@@ -1,17 +1,18 @@
# Bulgarian translation for gnome-shell-extensions po-file. # Bulgarian translation for gnome-shell-extensions po-file.
# Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc. # Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
# Copyright (C) 2021 Alexander Shopov <ash@kambanaria.org>.
# This file is distributed under the same license as the gnome-shell-extensions package. # This file is distributed under the same license as the gnome-shell-extensions package.
# Ivaylo Valkov <ivaylo@e-valkov.org>, 2014. # Ivaylo Valkov <ivaylo@e-valkov.org>, 2014.
# Alexander Shopov <ash@kambanaria.org>, 2014, 2015. # Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2021.
# Lyubomir Vasilev <lyubomirv@abv.bg>, 2017. # Lyubomir Vasilev <lyubomirv@abv.bg>, 2017.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnome-shell-extensions master\n" "Project-Id-Version: gnome-shell-extensions master\n"
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"shell&keywords=I18N+L10N&component=extensions\n" "issues\n"
"POT-Creation-Date: 2017-09-09 15:20+0000\n" "POT-Creation-Date: 2021-07-05 17:13+0000\n"
"PO-Revision-Date: 2017-09-08 08:47+0300\n" "PO-Revision-Date: 2021-07-11 10:19+0200\n"
"Last-Translator: Lyubomir Vasilev <lyubomirv@abv.bg>\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n" "Language: bg\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -19,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "Класически GNOME" msgstr "Класически GNOME"
@@ -27,75 +28,11 @@ msgstr "Класически GNOME"
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Работната среда изглежда като класическия GNOME (2.x)" msgstr "Работната среда изглежда като класическия GNOME (2.x)"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7 #: extensions/apps-menu/extension.js:113
msgid "Attach modal dialog to the parent window"
msgstr "Прикрепяне на модалните прозорци към родителските им прозорци"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
msgid ""
"This key overrides the key in org.gnome.mutter when running GNOME Shell."
msgstr ""
"Този ключ при е с по-голям приоритет от „org.gnome.mutter“ при изпълнението "
"на обвивката на GNOME."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16
msgid "Arrangement of buttons on the titlebar"
msgstr "Подредба на бутоните на заглавната лента"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
msgid ""
"This key overrides the key in org.gnome.desktop.wm.preferences when running "
"GNOME Shell."
msgstr ""
"Този ключ при е с по-голям приоритет от „org.gnome.desktop.wm.preferences“ "
"при изпълнението на обвивката на GNOME."
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
msgid "Enable edge tiling when dropping windows on screen edges"
msgstr ""
"Включване на специална подредба при приближаване на прозорец до ръбовете на "
"екрана"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
msgid "Workspaces only on primary monitor"
msgstr "Работни плотове само на основния екран"
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
msgid "Delay focus changes in mouse mode until the pointer stops moving"
msgstr "Забавяне на смяната на фокуса до спирането на движението на показалеца"
#: extensions/alternate-tab/prefs.js:20
msgid "Thumbnail only"
msgstr "Само миниатюри"
#: extensions/alternate-tab/prefs.js:21
msgid "Application icon only"
msgstr "Само икони на приложенията"
#: extensions/alternate-tab/prefs.js:22
msgid "Thumbnail and application icon"
msgstr "Миниатюри и икони на приложенията"
#: extensions/alternate-tab/prefs.js:38
msgid "Present windows as"
msgstr "Показване на прозорците като"
#: extensions/alternate-tab/prefs.js:69
msgid "Show only windows in the current workspace"
msgstr "Да се показват само прозорците на текущия работен плот"
#: extensions/apps-menu/extension.js:41
msgid "Activities Overview"
msgstr "Показване на програмите"
#: extensions/apps-menu/extension.js:141
msgid "Favorites" msgid "Favorites"
msgstr "Любими" msgstr "Любими"
#: extensions/apps-menu/extension.js:436 #: extensions/apps-menu/extension.js:367
msgid "Applications" msgid "Applications"
msgstr "Програми" msgstr "Програми"
@@ -109,74 +46,31 @@ msgid ""
"followed by a colon and the workspace number" "followed by a colon and the workspace number"
msgstr "" msgstr ""
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „." "Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
"desktop“ file name), следван от знака „:“ и номер на работен плот" "desktop“), следван от знака „:“ и номер на работен плот"
#: extensions/auto-move-windows/prefs.js:60 #: extensions/auto-move-windows/prefs.js:35
msgid "Application" msgid "Workspace Rules"
msgstr "Програма" msgstr "Правила за работните плотове"
#: extensions/auto-move-windows/prefs.js:69 #: extensions/auto-move-windows/prefs.js:237
#: extensions/auto-move-windows/prefs.js:127
msgid "Workspace"
msgstr "Работен плот"
#: extensions/auto-move-windows/prefs.js:85
msgid "Add Rule" msgid "Add Rule"
msgstr "Добавяне на правило" msgstr "Добавяне на правило"
#: extensions/auto-move-windows/prefs.js:106
msgid "Create new matching rule"
msgstr "Създаване на правило за съвпадение"
#: extensions/auto-move-windows/prefs.js:111
msgid "Add"
msgstr "Добавяне"
#. TRANSLATORS: %s is the filesystem name #. TRANSLATORS: %s is the filesystem name
#: extensions/drive-menu/extension.js:107 #: extensions/drive-menu/extension.js:132
#: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Неуспешно изваждане на устройство „%s“:" msgstr "Неуспешно изваждане на устройство „%s“:"
#: extensions/drive-menu/extension.js:125 #: extensions/drive-menu/extension.js:148
msgid "Removable devices" msgid "Removable devices"
msgstr "Преносими медии" msgstr "Преносими медии"
#: extensions/drive-menu/extension.js:150 #: extensions/drive-menu/extension.js:172
msgid "Open Files" msgid "Open Files"
msgstr "Отваряне на файлове" msgstr "Отваряне на файлове"
#: extensions/example/extension.js:17
msgid "Hello, world!"
msgstr "Здравей, свят!"
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
msgid "Alternative greeting text."
msgstr "Друго приветстващо съобщение."
#: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
msgid ""
"If not empty, it contains the text that will be shown when clicking on the "
"panel."
msgstr ""
"Ако ключът не е празен, съдържанието му се извежда при натискането на панела."
#: extensions/example/prefs.js:30
msgid "Message"
msgstr "Съобщение"
#. TRANSLATORS: Example is the name of the extension, should not be
#. translated
#: extensions/example/prefs.js:43
msgid ""
"Example aims to show how to build well behaved extensions for the Shell and "
"as such it has little functionality on its own.\n"
"Nevertheless its possible to customize the greeting message."
msgstr ""
"Това е пример за добре работещо разширение на обвивката на GNOME и има "
"минимална функционалност.\n"
"С него можете да промените приветстващото съобщение на панела."
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
msgstr "Повече пространство за прозорците" msgstr "Повече пространство за прозорците"
@@ -206,31 +100,31 @@ msgstr ""
"им, а не както е стандартно — отдолу. За прилагане на промяната на " "им, а не както е стандартно — отдолу. За прилагане на промяната на "
"настройката трябва да рестартирате обвивката на GNOME." "настройката трябва да рестартирате обвивката на GNOME."
#: extensions/places-menu/extension.js:78 #: extensions/places-menu/extension.js:89
#: extensions/places-menu/extension.js:81 #: extensions/places-menu/extension.js:92
msgid "Places" msgid "Places"
msgstr "Места" msgstr "Места"
#: extensions/places-menu/placeDisplay.js:65 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Неуспешно монтиране на тома „%s“"
#: extensions/places-menu/placeDisplay.js:78
#, javascript-format #, javascript-format
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Неуспешно стартиране на „%s“" msgstr "Неуспешно стартиране на „%s“"
#: extensions/places-menu/placeDisplay.js:137 #: extensions/places-menu/placeDisplay.js:61
#: extensions/places-menu/placeDisplay.js:160 #, javascript-format
msgid "Failed to mount volume for “%s”"
msgstr "Неуспешно монтиране на тома „%s“"
#: extensions/places-menu/placeDisplay.js:148
#: extensions/places-menu/placeDisplay.js:171
msgid "Computer" msgid "Computer"
msgstr "Компютър" msgstr "Компютър"
#: extensions/places-menu/placeDisplay.js:303 #: extensions/places-menu/placeDisplay.js:359
msgid "Home" msgid "Home"
msgstr "Домашна папка" msgstr "Домашна папка"
#: extensions/places-menu/placeDisplay.js:347 #: extensions/places-menu/placeDisplay.js:404
msgid "Browse Network" msgid "Browse Network"
msgstr "Мрежа" msgstr "Мрежа"
@@ -251,73 +145,78 @@ msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
msgstr "" msgstr ""
"Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“" "Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
#: extensions/window-list/extension.js:110 #: extensions/window-list/extension.js:98
msgid "Close" msgid "Close"
msgstr "Затваряне" msgstr "Затваряне"
#: extensions/window-list/extension.js:129 #: extensions/window-list/extension.js:118
msgid "Unminimize" msgid "Unminimize"
msgstr "Деминимизиране" msgstr "Деминимизиране"
#: extensions/window-list/extension.js:130 #: extensions/window-list/extension.js:118
msgid "Minimize" msgid "Minimize"
msgstr "Минимизиране" msgstr "Минимизиране"
#: extensions/window-list/extension.js:136 #: extensions/window-list/extension.js:125
msgid "Unmaximize" msgid "Unmaximize"
msgstr "Демаксимизиране" msgstr "Демаксимизиране"
#: extensions/window-list/extension.js:137 #: extensions/window-list/extension.js:125
msgid "Maximize" msgid "Maximize"
msgstr "Максимизиране" msgstr "Максимизиране"
#: extensions/window-list/extension.js:420 #: extensions/window-list/extension.js:432
msgid "Minimize all" msgid "Minimize all"
msgstr "Минимизиране на всички" msgstr "Минимизиране на всички"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:438
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Деминимизиране на всички" msgstr "Деминимизиране на всички"
#: extensions/window-list/extension.js:436 #: extensions/window-list/extension.js:444
msgid "Maximize all" msgid "Maximize all"
msgstr "Максимизиране на всички" msgstr "Максимизиране на всички"
#: extensions/window-list/extension.js:445 #: extensions/window-list/extension.js:452
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Демаксимизиране на всички" msgstr "Демаксимизиране на всички"
#: extensions/window-list/extension.js:454 #: extensions/window-list/extension.js:460
msgid "Close all" msgid "Close all"
msgstr "Затваряне на всички" msgstr "Затваряне на всички"
#: extensions/window-list/extension.js:678 #: extensions/window-list/extension.js:737
#: extensions/workspace-indicator/extension.js:30
msgid "Workspace Indicator"
msgstr "Индикатор на работните плотове"
#: extensions/window-list/extension.js:842
msgid "Window List" msgid "Window List"
msgstr "Списък на прозорците" msgstr "Списък на прозорците"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
msgid "When to group windows" msgid "When to group windows"
msgstr "Кога да се групират прозорците" msgstr "Кога прозорците да се групират"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
msgstr "" msgstr ""
"Кога да се групират прозорците на една програма в списъка с прозорците. " "Кога прозорците на една програма да се групират в списъка с прозорците. "
"Възможните стойности са „never“ (никога), „auto“ (автоматично) и " "Възможните стойности са „never“ (никога), „auto“ (автоматично) и "
"„always“ (винаги)." "„always“ (винаги)."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:100
msgid "Show windows from all workspaces"
msgstr "Да се показват прозорците от всички работни плотове"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
msgid "Whether to show windows from all workspaces or only the current one."
msgstr ""
"Дали да се показват прозорците от всички работни плотове или само от текущия."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
msgid "Show the window list on all monitors" msgid "Show the window list on all monitors"
msgstr "Извеждане на списъка с прозорци на всички монитори" msgstr "Извеждане на списъка с прозорци на всички монитори"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
msgid "" msgid ""
"Whether to show the window list on all connected monitors or only on the " "Whether to show the window list on all connected monitors or only on the "
"primary one." "primary one."
@@ -325,35 +224,40 @@ msgstr ""
"Дали списъкът с прозорци да се извежда на всички монитори или само на " "Дали списъкът с прозорци да се извежда на всички монитори или само на "
"основния" "основния"
#: extensions/window-list/prefs.js:32 #: extensions/window-list/prefs.js:29
msgid "Window Grouping" msgid "Window Grouping"
msgstr "Групиране на прозорци" msgstr "Групиране на прозорци"
#: extensions/window-list/prefs.js:50 #: extensions/window-list/prefs.js:58
msgid "Never group windows" msgid "Never group windows"
msgstr "Никога да не се групират" msgstr "Никога да не се групират"
#: extensions/window-list/prefs.js:51 #: extensions/window-list/prefs.js:59
msgid "Group windows when space is limited" msgid "Group windows when space is limited"
msgstr "Групиране при ограничено място" msgstr "Групиране при ограничено място"
#: extensions/window-list/prefs.js:52 #: extensions/window-list/prefs.js:60
msgid "Always group windows" msgid "Always group windows"
msgstr "Винаги да се групират" msgstr "Винаги да се групират"
#: extensions/window-list/prefs.js:75 #: extensions/window-list/prefs.js:94
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "На всички монитори" msgstr "На всички монитори"
#: extensions/workspace-indicator/prefs.js:141 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:255
msgid "Workspace Indicator"
msgstr "Индикатор на работните плотове"
#: extensions/workspace-indicator/prefs.js:34
msgid "Workspace Names" msgid "Workspace Names"
msgstr "Имена на работните плотове" msgstr "Имена на работните плотове"
#: extensions/workspace-indicator/prefs.js:157 #: extensions/workspace-indicator/prefs.js:67
msgid "Name"
msgstr "Име"
#: extensions/workspace-indicator/prefs.js:198
#, javascript-format #, javascript-format
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Работен плот %d" msgstr "Работен плот %d"
#: extensions/workspace-indicator/prefs.js:208
msgid "Add Workspace"
msgstr "Добавяне на работен плот"

View File

@@ -6,38 +6,45 @@
# António Lima <amrlima@gmail.com>, 2013. # António Lima <amrlima@gmail.com>, 2013.
# Pedro Albuquerque <palbuquerque73@gmail.com>, 2014. # Pedro Albuquerque <palbuquerque73@gmail.com>, 2014.
# Bruno Ramalhete <bram.512@gmail.com>, 2015. # Bruno Ramalhete <bram.512@gmail.com>, 2015.
# José Vieira <jvieira33@sapo.pt>, 2020. # José Vieira <jvieira33@sapo.pt>, 2020-2021.
# Hugo Carvalho <hugokarvalho@hotmail.com>, 2021.
# Juliano de Souza Camargo <julianosc@protonmail.com>, 2021.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 3.14\n" "Project-Id-Version: 3.14\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
"issues\n" "issues\n"
"POT-Creation-Date: 2020-05-28 00:55+0000\n" "POT-Creation-Date: 2021-06-02 16:10+0000\n"
"PO-Revision-Date: 2020-09-05 00:47+0100\n" "PO-Revision-Date: 2021-06-07 07:21-0300\n"
"Last-Translator: José Vieira <jvieira33@sapo.pt>\n" "Last-Translator: Juliano de Souza Camargo <julianosc@protonmail.com>\n"
"Language-Team: Portuguese <>\n" "Language-Team: Portuguese < >\n"
"Language: pt\n" "Language: pt\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Gtranslator 3.36.0\n" "X-Generator: Gtranslator 40.0\n"
"X-Project-Style: gnome\n" "X-Project-Style: gnome\n"
"X-DL-Team: pt\n"
"X-DL-Module: gnome-shell-extensions\n"
"X-DL-Branch: gnome-40\n"
"X-DL-Domain: po\n"
"X-DL-State: Translating\n"
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3 #: data/gnome-classic.desktop.in:3
msgid "GNOME Classic" msgid "GNOME Classic"
msgstr "GNOME clássico" msgstr "GNOME clássico"
#: data/gnome-classic.desktop.in:4 #: data/gnome-classic.desktop.in:4
msgid "This session logs you into GNOME Classic" msgid "This session logs you into GNOME Classic"
msgstr "Esta sessão entra no GNOME clássico" msgstr "Esta sessão vai usar o GNOME clássico"
#: extensions/apps-menu/extension.js:113 #: extensions/apps-menu/extension.js:113
msgid "Favorites" msgid "Favorites"
msgstr "Favoritos" msgstr "Favoritos"
#: extensions/apps-menu/extension.js:369 #: extensions/apps-menu/extension.js:367
msgid "Applications" msgid "Applications"
msgstr "Aplicações" msgstr "Aplicações"
@@ -54,11 +61,10 @@ msgstr ""
"ficheiro desktop), seguido de dois pontos e o número da área de trabalho" "ficheiro desktop), seguido de dois pontos e o número da área de trabalho"
#: extensions/auto-move-windows/prefs.js:35 #: extensions/auto-move-windows/prefs.js:35
#| msgid "Workspace Names"
msgid "Workspace Rules" msgid "Workspace Rules"
msgstr "Regras das áreas de trabalho" msgstr "Regras das áreas de trabalho"
#: extensions/auto-move-windows/prefs.js:243 #: extensions/auto-move-windows/prefs.js:237
msgid "Add Rule" msgid "Add Rule"
msgstr "Adicionar regra" msgstr "Adicionar regra"
@@ -66,7 +72,6 @@ msgstr "Adicionar regra"
#: extensions/drive-menu/extension.js:112 #: extensions/drive-menu/extension.js:112
#: extensions/places-menu/placeDisplay.js:233 #: extensions/places-menu/placeDisplay.js:233
#, javascript-format #, javascript-format
#| msgid "Ejecting drive '%s' failed:"
msgid "Ejecting drive “%s” failed:" msgid "Ejecting drive “%s” failed:"
msgstr "Falha ao ejetar a unidade '%s':" msgstr "Falha ao ejetar a unidade '%s':"
@@ -74,10 +79,9 @@ msgstr "Falha ao ejetar a unidade '%s':"
msgid "Removable devices" msgid "Removable devices"
msgstr "Dispositivos removíveis" msgstr "Dispositivos removíveis"
#: extensions/drive-menu/extension.js:155 #: extensions/drive-menu/extension.js:152
#| msgid "Open File"
msgid "Open Files" msgid "Open Files"
msgstr "Ficheiros abertos" msgstr "Abrir ficheiros"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
msgid "Use more screen for windows" msgid "Use more screen for windows"
@@ -96,7 +100,7 @@ msgstr ""
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
msgid "Place window captions on top" msgid "Place window captions on top"
msgstr "Colocar título de janelas em cima" msgstr "Colocar título de janela em cima"
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
msgid "" msgid ""
@@ -104,18 +108,17 @@ msgid ""
"shell default of placing it at the bottom. Changing this setting requires " "shell default of placing it at the bottom. Changing this setting requires "
"restarting the shell to have any effect." "restarting the shell to have any effect."
msgstr "" msgstr ""
"Se verdadeiro, coloca títulos de janelas em cima da respectiva miniatura, " "Se verdadeiro, coloca títulos de janelas em cima das respectivas miniaturas, "
"substituindo a predefinição, que as coloca no fundo. Alterar esta " "substituindo a predefinição, que as coloca no fundo. Alterar esta "
"configuração requer reinicializar a interface para ter efeito." "configuração requer reinicializar a interface para ter efeito."
#: extensions/places-menu/extension.js:89 #: extensions/places-menu/extension.js:89
#: extensions/places-menu/extension.js:93 #: extensions/places-menu/extension.js:92
msgid "Places" msgid "Places"
msgstr "Locais" msgstr "Locais"
#: extensions/places-menu/placeDisplay.js:46 #: extensions/places-menu/placeDisplay.js:46
#, javascript-format #, javascript-format
#| msgid "Failed to launch \"%s\""
msgid "Failed to launch “%s”" msgid "Failed to launch “%s”"
msgstr "Falha ao iniciar \"%s\"" msgstr "Falha ao iniciar \"%s\""
@@ -142,7 +145,6 @@ msgid "Cycle Screenshot Sizes"
msgstr "Percorrer os tamanhos de captura de ecrã" msgstr "Percorrer os tamanhos de captura de ecrã"
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
#| msgid "Cycle Screenshot Sizes"
msgid "Cycle Screenshot Sizes Backward" msgid "Cycle Screenshot Sizes Backward"
msgstr "Percorrer para trás os tamanhos de captura de ecrã" msgstr "Percorrer para trás os tamanhos de captura de ecrã"
@@ -174,27 +176,27 @@ msgstr "Desmaximizar"
msgid "Maximize" msgid "Maximize"
msgstr "Maximizar" msgstr "Maximizar"
#: extensions/window-list/extension.js:428 #: extensions/window-list/extension.js:432
msgid "Minimize all" msgid "Minimize all"
msgstr "Minimizar todas" msgstr "Minimizar todas"
#: extensions/window-list/extension.js:434 #: extensions/window-list/extension.js:438
msgid "Unminimize all" msgid "Unminimize all"
msgstr "Desminimizar todas" msgstr "Desminimizar todas"
#: extensions/window-list/extension.js:440 #: extensions/window-list/extension.js:444
msgid "Maximize all" msgid "Maximize all"
msgstr "Maximizar todas" msgstr "Maximizar todas"
#: extensions/window-list/extension.js:448 #: extensions/window-list/extension.js:452
msgid "Unmaximize all" msgid "Unmaximize all"
msgstr "Desmaximizar todas" msgstr "Desmaximizar todas"
#: extensions/window-list/extension.js:456 #: extensions/window-list/extension.js:460
msgid "Close all" msgid "Close all"
msgstr "Fechar todas" msgstr "Fechar todas"
#: extensions/window-list/extension.js:734 #: extensions/window-list/extension.js:737
msgid "Window List" msgid "Window List"
msgstr "Lista de janelas" msgstr "Lista de janelas"
@@ -203,26 +205,19 @@ msgid "When to group windows"
msgstr "Quando agrupar janelas" msgstr "Quando agrupar janelas"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
#| msgid ""
#| "Decides when to group windows from the same application on the window "
#| "list. Possible values are \"never\", \"auto\" and \"always\"."
msgid "" msgid ""
"Decides when to group windows from the same application on the window list. " "Decides when to group windows from the same application on the window list. "
"Possible values are “never”, “auto” and “always”." "Possible values are “never”, “auto” and “always”."
msgstr "" msgstr ""
"Decide quando agrupar janelas da mesma aplicação na lista de janelas. " "Decide quando agrupar janelas da mesma aplicação na lista de janelas. Os "
"Valores válidos são \"nunca\", \"auto\" e \"sempre\"." "valores válidos são \"nunca\", \"auto\" e \"sempre\"."
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
#: extensions/window-list/prefs.js:100 #: extensions/window-list/prefs.js:100
#| msgid "Show only windows in the current workspace"
msgid "Show windows from all workspaces" msgid "Show windows from all workspaces"
msgstr "Mostrar janelas de todas as área de trabalho" msgstr "Mostrar janelas de todas as área de trabalho"
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
#| msgid ""
#| "Whether to show the window list on all connected monitors or only on the "
#| "primary one."
msgid "Whether to show windows from all workspaces or only the current one." msgid "Whether to show windows from all workspaces or only the current one."
msgstr "" msgstr ""
"Se deve mostrar janelas de todas as áreas de trabalho ou apenas da atual." "Se deve mostrar janelas de todas as áreas de trabalho ou apenas da atual."
@@ -259,8 +254,8 @@ msgstr "Agrupar sempre as janelas"
msgid "Show on all monitors" msgid "Show on all monitors"
msgstr "Mostrar em todos os monitores" msgstr "Mostrar em todos os monitores"
#: extensions/window-list/workspaceIndicator.js:207 #: extensions/window-list/workspaceIndicator.js:249
#: extensions/workspace-indicator/extension.js:213 #: extensions/workspace-indicator/extension.js:255
msgid "Workspace Indicator" msgid "Workspace Indicator"
msgstr "Indicador de área de trabalho" msgstr "Indicador de área de trabalho"
@@ -273,8 +268,7 @@ msgstr "Nomes das áreas de trabalho"
msgid "Workspace %d" msgid "Workspace %d"
msgstr "Área de trabalho %d" msgstr "Área de trabalho %d"
#: extensions/workspace-indicator/prefs.js:218 #: extensions/workspace-indicator/prefs.js:208
#| msgid "Workspace"
msgid "Add Workspace" msgid "Add Workspace"
msgstr "Adicionar área de trabalho" msgstr "Adicionar área de trabalho"