Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29c5131ee1 | ||
|
|
8ba229f0bb | ||
|
|
2e932eb688 | ||
|
|
c08aff38d2 | ||
|
|
721d7b271a | ||
|
|
5049ccdc99 | ||
|
|
0857b041ee | ||
|
|
a5a3523df8 | ||
|
|
06acd9ff25 | ||
|
|
1a1d45d9e4 | ||
|
|
1d3775b3d1 | ||
|
|
15c83db793 | ||
|
|
cc021589b8 | ||
|
|
5e316d37cb | ||
|
|
28dbb47937 | ||
|
|
619de9d5ee | ||
|
|
561b8aeb03 | ||
|
|
4286fd1bcc | ||
|
|
3bb0897bc1 | ||
|
|
12eedcf6f7 | ||
|
|
08d382facc | ||
|
|
96a1de92db | ||
|
|
cc2f46b837 |
@@ -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/34:2021-08-12.0
|
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/33:2020-11-17.0
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- pre_review
|
- pre_review
|
||||||
@@ -21,7 +21,6 @@ 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"
|
||||||
|
|
||||||
@@ -90,7 +89,7 @@ js_check:
|
|||||||
eslint:
|
eslint:
|
||||||
stage: review
|
stage: review
|
||||||
script:
|
script:
|
||||||
- eslint -o $LINT_LOG -f junit --resolve-plugins-relative-to $(npm root -g) extensions
|
- eslint -o $LINT_LOG -f junit extensions
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- ${LINT_LOG}
|
- ${LINT_LOG}
|
||||||
|
|||||||
@@ -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/HEAD/doc/Style_Guide.md
|
[coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Style_Guide.md
|
||||||
|
|||||||
52
NEWS
52
NEWS
@@ -1,16 +1,50 @@
|
|||||||
41.beta
|
40.7
|
||||||
=======
|
====
|
||||||
* window-list: Extend reactive area of minimap to screen edges [Adam; !171]
|
* Bump version
|
||||||
* drive-menu: Improve detection of network mounts [Florian; !27, !176]
|
|
||||||
* Use distinct gettext domain for e.g.o uploads [Florian; #335]
|
40.6
|
||||||
* Misc. bug fixes and cleanups [Florian; !172, !174, !177, !167, !178, !180,
|
====
|
||||||
!181, !182, !183]
|
* window-list: Update window tracking to avoid missing icons [Florian; #372]
|
||||||
|
|
||||||
Contributors:
|
Contributors:
|
||||||
Marco Trevisan (Treviño), Adam Goode, Florian Müllner
|
Florian Müllner
|
||||||
|
|
||||||
|
40.5
|
||||||
|
====
|
||||||
|
* native-window-placement: Fix distorted layout in app grid [Sebastian; !189]
|
||||||
|
* window-list: Fix on-screen keyboard [Florian; !199]
|
||||||
|
* Misc. bug fixes [Neal; !195]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Neal Gompa, Sebastian Keller, Florian Müllner
|
||||||
|
|
||||||
|
40.4
|
||||||
|
====
|
||||||
|
* drive-menu: Fix indicator visibility [Florian; !176]
|
||||||
|
* Use distinct gettext domain for e.g.o uploads [Florian; #335]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
|
||||||
|
40.3
|
||||||
|
====
|
||||||
|
* drive-menu: Improve detection of network mounts [Florian; !27]
|
||||||
|
* Misc. bug fixes [Florian; #340]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Florian Müllner
|
||||||
|
|
||||||
|
40.2
|
||||||
|
====
|
||||||
|
* window-list: Extend reactive area of minimap to screen edges [Adam; !171]
|
||||||
|
* Misc. bug fixes [Florian; !172]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Adam Goode, Florian Müllner
|
||||||
|
|
||||||
Translators:
|
Translators:
|
||||||
Hugo Carvalho [pt], Juliano de Souza Camargo [pt], Alexander Shopov [bg]
|
Hugo Carvalho [pt], Juliano de Souza Camargo [pt]
|
||||||
|
|
||||||
40.1
|
40.1
|
||||||
====
|
====
|
||||||
|
|||||||
13
README.md
13
README.md
@@ -69,19 +69,6 @@ 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
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
|
|||||||
TryExec=gnome-session
|
TryExec=gnome-session
|
||||||
Type=Application
|
Type=Application
|
||||||
DesktopNames=GNOME-Classic;GNOME;
|
DesktopNames=GNOME-Classic;GNOME;
|
||||||
|
X-GDM-SessionRegisters=true
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Submodule data/gnome-shell-sass updated: b267200d75...9d66f7dd54
@@ -7,7 +7,7 @@ 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
|
||||||
meson install -C $builddir
|
ninja -C$builddir install
|
||||||
|
|
||||||
rm -rf $srcdir/zip-files
|
rm -rf $srcdir/zip-files
|
||||||
mkdir $srcdir/zip-files
|
mkdir $srcdir/zip-files
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ 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 _ = ExtensionUtils.gettext;
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const appSys = Shell.AppSystem.get_default();
|
const appSys = Shell.AppSystem.get_default();
|
||||||
|
|
||||||
@@ -672,20 +674,17 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,14 +108,10 @@ 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;
|
||||||
@@ -136,7 +132,6 @@ 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;
|
||||||
@@ -144,7 +139,6 @@ 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();
|
||||||
|
|||||||
@@ -5,8 +5,10 @@
|
|||||||
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
|
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const SETTINGS_KEY = 'application-list';
|
const SETTINGS_KEY = 'application-list';
|
||||||
|
|
||||||
@@ -265,14 +267,10 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ 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;
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
var MountMenuItem = GObject.registerClass(
|
var MountMenuItem = GObject.registerClass(
|
||||||
class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||||
@@ -216,20 +218,17 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ 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 () {
|
||||||
@@ -11,7 +10,6 @@ function enable() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
function disable() {
|
||||||
AppDisplay.AppIcon.prototype.activate = _activateOriginal;
|
AppDisplay.AppIcon.prototype.activate = _activateOriginal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,13 +238,11 @@ 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();
|
||||||
|
|
||||||
@@ -284,11 +282,6 @@ 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];
|
||||||
@@ -296,7 +289,6 @@ function removeInjection(object, injection, name) {
|
|||||||
object[name] = injection[name];
|
object[name] = injection[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
|
||||||
function disable() {
|
function disable() {
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1 @@
|
|||||||
.window-caption {
|
/* This extensions requires no special styling */
|
||||||
-shell-caption-spacing: 13px; /* current caption height is 26px => set it to half of it. TODO: better solution needed */
|
|
||||||
}
|
|
||||||
|
|
||||||
.window-picker {
|
|
||||||
-horizontal-spacing: 32px;
|
|
||||||
-vertical-spacing: 32px;
|
|
||||||
padding: 64px 32px;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -9,11 +9,13 @@ const PanelMenu = imports.ui.panelMenu;
|
|||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
const Me = ExtensionUtils.getCurrentExtension();
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
const PlaceDisplay = Me.imports.placeDisplay;
|
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
const N_ = x => x;
|
const N_ = x => x;
|
||||||
|
|
||||||
|
const PlaceDisplay = Me.imports.placeDisplay;
|
||||||
|
|
||||||
const PLACE_ICON_SIZE = 16;
|
const PLACE_ICON_SIZE = 16;
|
||||||
|
|
||||||
var PlaceMenuItem = GObject.registerClass(
|
var PlaceMenuItem = GObject.registerClass(
|
||||||
@@ -132,14 +134,12 @@ 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();
|
||||||
|
|
||||||
@@ -149,7 +149,6 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ 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 _ = ExtensionUtils.gettext;
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
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';
|
||||||
|
|||||||
@@ -28,15 +28,11 @@ 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' });
|
||||||
@@ -71,11 +67,6 @@ 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.
|
||||||
@@ -142,7 +133,6 @@ 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',
|
||||||
@@ -158,7 +148,6 @@ 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');
|
||||||
|
|||||||
@@ -58,9 +58,6 @@ class ThemeManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {ThemeManager} - the extension state object
|
|
||||||
*/
|
|
||||||
function init() {
|
function init() {
|
||||||
return new ThemeManager();
|
return new ThemeManager();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,13 +174,9 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,6 @@ 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'),
|
||||||
@@ -14,9 +11,6 @@ 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'));
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ 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 _ = ExtensionUtils.gettext;
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const ICON_TEXTURE_SIZE = 24;
|
const ICON_TEXTURE_SIZE = 24;
|
||||||
const DND_ACTIVATE_TIMEOUT = 500;
|
const DND_ACTIVATE_TIMEOUT = 500;
|
||||||
@@ -22,10 +23,34 @@ const GroupingMode = {
|
|||||||
ALWAYS: 2,
|
ALWAYS: 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Shell.App} app - an app
|
function _minimizeOrActivateWindow(window) {
|
||||||
* @returns {number} - the smallest stable sequence of the app's windows
|
let focusWindow = global.display.focus_window;
|
||||||
*/
|
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) => {
|
||||||
@@ -33,6 +58,7 @@ 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);
|
||||||
@@ -256,37 +282,10 @@ 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;
|
||||||
this._openMenu(this._contextMenu);
|
_openMenu(this._contextMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
_isFocused() {
|
_isFocused() {
|
||||||
@@ -363,8 +362,7 @@ 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',
|
this._contextMenu.connect('open-state-changed', _onMenuStateChanged);
|
||||||
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);
|
||||||
@@ -384,9 +382,9 @@ class WindowButton extends BaseButton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (button === 1)
|
if (button === 1)
|
||||||
this._minimizeOrActivateWindow(this.metaWindow);
|
_minimizeOrActivateWindow(this.metaWindow);
|
||||||
else
|
else
|
||||||
this._openMenu(this._contextMenu);
|
_openMenu(this._contextMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
_isFocused() {
|
_isFocused() {
|
||||||
@@ -520,16 +518,14 @@ 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',
|
this._menu.connect('open-state-changed', _onMenuStateChanged);
|
||||||
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',
|
this._appContextMenu.connect('open-state-changed', _onMenuStateChanged);
|
||||||
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);
|
||||||
|
|
||||||
@@ -596,7 +592,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', this._onMenuStateChanged.bind(this));
|
'open-state-changed', _onMenuStateChanged);
|
||||||
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);
|
||||||
@@ -635,7 +631,7 @@ class AppButton extends BaseButton {
|
|||||||
if (windows.length === 1) {
|
if (windows.length === 1) {
|
||||||
if (contextMenuWasOpen)
|
if (contextMenuWasOpen)
|
||||||
return;
|
return;
|
||||||
this._minimizeOrActivateWindow(windows[0]);
|
_minimizeOrActivateWindow(windows[0]);
|
||||||
} else {
|
} else {
|
||||||
this._menu.removeAll();
|
this._menu.removeAll();
|
||||||
|
|
||||||
@@ -646,12 +642,12 @@ class AppButton extends BaseButton {
|
|||||||
item._window = windows[i];
|
item._window = windows[i];
|
||||||
this._menu.addMenuItem(item);
|
this._menu.addMenuItem(item);
|
||||||
}
|
}
|
||||||
this._openMenu(this._menu);
|
_openMenu(this._menu);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (contextMenuWasOpen)
|
if (contextMenuWasOpen)
|
||||||
return;
|
return;
|
||||||
this._openMenu(this._contextMenu);
|
_openMenu(this._contextMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -765,10 +761,9 @@ class WindowList extends St.Widget {
|
|||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
|
|
||||||
this._workspaceSignals = new Map();
|
|
||||||
this._nWorkspacesChangedId = workspaceManager.connect(
|
this._nWorkspacesChangedId = workspaceManager.connect(
|
||||||
'notify::n-workspaces', this._onWorkspacesChanged.bind(this));
|
'notify::n-workspaces', this._updateWorkspaceIndicatorVisibility.bind(this));
|
||||||
this._onWorkspacesChanged();
|
this._updateWorkspaceIndicatorVisibility();
|
||||||
|
|
||||||
this._switchWorkspaceId = global.window_manager.connect(
|
this._switchWorkspaceId = global.window_manager.connect(
|
||||||
'switch-workspace', this._checkGrouping.bind(this));
|
'switch-workspace', this._checkGrouping.bind(this));
|
||||||
@@ -788,6 +783,10 @@ class WindowList extends St.Widget {
|
|||||||
this._updateKeyboardAnchor();
|
this._updateKeyboardAnchor();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._windowSignals = new Map();
|
||||||
|
this._windowCreatedId = global.display.connect(
|
||||||
|
'window-created', (dsp, win) => this._addWindow(win));
|
||||||
|
|
||||||
this._dragBeginId = Main.xdndHandler.connect('drag-begin',
|
this._dragBeginId = Main.xdndHandler.connect('drag-begin',
|
||||||
this._monitorDrag.bind(this));
|
this._monitorDrag.bind(this));
|
||||||
this._dragEndId = Main.xdndHandler.connect('drag-end',
|
this._dragEndId = Main.xdndHandler.connect('drag-end',
|
||||||
@@ -910,7 +909,7 @@ class WindowList extends St.Widget {
|
|||||||
w2.metaWindow.get_stable_sequence();
|
w2.metaWindow.get_stable_sequence();
|
||||||
});
|
});
|
||||||
for (let i = 0; i < windows.length; i++)
|
for (let i = 0; i < windows.length; i++)
|
||||||
this._onWindowAdded(null, windows[i].metaWindow);
|
this._addWindow(windows[i].metaWindow);
|
||||||
} else {
|
} else {
|
||||||
let apps = this._appSystem.get_running().sort((a1, a2) => {
|
let apps = this._appSystem.get_running().sort((a1, a2) => {
|
||||||
return _getAppStableSequence(a1) -
|
return _getAppStableSequence(a1) -
|
||||||
@@ -922,11 +921,8 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_updateKeyboardAnchor() {
|
_updateKeyboardAnchor() {
|
||||||
if (!Main.keyboard.keyboardActor)
|
const translationY = Main.overview.visible ? 0 : this.height;
|
||||||
return;
|
Main.layoutManager.keyboardBox.translation_y = -translationY;
|
||||||
|
|
||||||
let translationY = Main.overview.visible ? 0 : this.height;
|
|
||||||
Main.keyboard.keyboardActor.translation_y = -translationY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onAppStateChanged(appSys, app) {
|
_onAppStateChanged(appSys, app) {
|
||||||
@@ -953,7 +949,7 @@ class WindowList extends St.Widget {
|
|||||||
child.destroy();
|
child.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onWindowAdded(ws, win) {
|
_addWindow(win) {
|
||||||
if (!this._grouped)
|
if (!this._grouped)
|
||||||
this._checkGrouping();
|
this._checkGrouping();
|
||||||
|
|
||||||
@@ -964,21 +960,26 @@ class WindowList extends St.Widget {
|
|||||||
if (children.find(c => c.metaWindow === win))
|
if (children.find(c => c.metaWindow === win))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._windowSignals.set(
|
||||||
|
win, win.connect('unmanaged', () => this._removeWindow(win)));
|
||||||
|
|
||||||
let button = new WindowButton(win, this._perMonitor, this._monitor.index);
|
let button = new WindowButton(win, this._perMonitor, this._monitor.index);
|
||||||
this._settings.bind('display-all-workspaces',
|
this._settings.bind('display-all-workspaces',
|
||||||
button, 'ignore-workspace', Gio.SettingsBindFlags.GET);
|
button, 'ignore-workspace', Gio.SettingsBindFlags.GET);
|
||||||
this._windowList.add_child(button);
|
this._windowList.add_child(button);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onWindowRemoved(ws, win) {
|
_removeWindow(win) {
|
||||||
if (this._grouped)
|
if (this._grouped)
|
||||||
this._checkGrouping();
|
this._checkGrouping();
|
||||||
|
|
||||||
if (this._grouped)
|
if (this._grouped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (win.get_compositor_private())
|
const id = this._windowSignals.get(win);
|
||||||
return; // not actually removed, just moved to another workspace
|
if (id)
|
||||||
|
win.disconnect(id);
|
||||||
|
this._windowSignals.delete(id);
|
||||||
|
|
||||||
let children = this._windowList.get_children();
|
let children = this._windowList.get_children();
|
||||||
let child = children.find(c => c.metaWindow === win);
|
let child = children.find(c => c.metaWindow === win);
|
||||||
@@ -986,39 +987,6 @@ class WindowList extends St.Widget {
|
|||||||
child.destroy();
|
child.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onWorkspacesChanged() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
let numWorkspaces = workspaceManager.n_workspaces;
|
|
||||||
|
|
||||||
for (let i = 0; i < numWorkspaces; i++) {
|
|
||||||
let workspace = workspaceManager.get_workspace_by_index(i);
|
|
||||||
if (this._workspaceSignals.has(workspace))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
let signals = { windowAddedId: 0, windowRemovedId: 0 };
|
|
||||||
signals._windowAddedId = workspace.connect_after(
|
|
||||||
'window-added', this._onWindowAdded.bind(this));
|
|
||||||
signals._windowRemovedId = workspace.connect(
|
|
||||||
'window-removed', this._onWindowRemoved.bind(this));
|
|
||||||
this._workspaceSignals.set(workspace, signals);
|
|
||||||
}
|
|
||||||
|
|
||||||
this._updateWorkspaceIndicatorVisibility();
|
|
||||||
}
|
|
||||||
|
|
||||||
_disconnectWorkspaceSignals() {
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
let numWorkspaces = workspaceManager.n_workspaces;
|
|
||||||
|
|
||||||
for (let i = 0; i < numWorkspaces; i++) {
|
|
||||||
let workspace = workspaceManager.get_workspace_by_index(i);
|
|
||||||
let signals = this._workspaceSignals.get(workspace);
|
|
||||||
this._workspaceSignals.delete(workspace);
|
|
||||||
workspace.disconnect(signals._windowAddedId);
|
|
||||||
workspace.disconnect(signals._windowRemovedId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_monitorDrag() {
|
_monitorDrag() {
|
||||||
DND.addDragMonitor(this._dragMonitor);
|
DND.addDragMonitor(this._dragMonitor);
|
||||||
}
|
}
|
||||||
@@ -1082,18 +1050,20 @@ class WindowList extends St.Widget {
|
|||||||
Main.keyboard._bottomDragAction.disconnect(this._keyboardVisiblechangedId);
|
Main.keyboard._bottomDragAction.disconnect(this._keyboardVisiblechangedId);
|
||||||
this._keyboardVisiblechangedId = 0;
|
this._keyboardVisiblechangedId = 0;
|
||||||
|
|
||||||
this._disconnectWorkspaceSignals();
|
|
||||||
global.workspace_manager.disconnect(this._nWorkspacesChangedId);
|
global.workspace_manager.disconnect(this._nWorkspacesChangedId);
|
||||||
this._nWorkspacesChangedId = 0;
|
this._nWorkspacesChangedId = 0;
|
||||||
|
|
||||||
global.window_manager.disconnect(this._switchWorkspaceId);
|
global.window_manager.disconnect(this._switchWorkspaceId);
|
||||||
this._switchWorkspaceId = 0;
|
this._switchWorkspaceId = 0;
|
||||||
|
|
||||||
|
this._windowSignals.forEach((id, win) => win.disconnect(id));
|
||||||
|
this._windowSignals.clear();
|
||||||
|
|
||||||
Main.overview.disconnect(this._overviewShowingId);
|
Main.overview.disconnect(this._overviewShowingId);
|
||||||
Main.overview.disconnect(this._overviewHidingId);
|
Main.overview.disconnect(this._overviewHidingId);
|
||||||
|
|
||||||
global.display.disconnect(this._fullscreenChangedId);
|
global.display.disconnect(this._fullscreenChangedId);
|
||||||
|
global.display.disconnect(this._windowCreatedId);
|
||||||
|
|
||||||
this._stopMonitoringDrag();
|
this._stopMonitoringDrag();
|
||||||
Main.xdndHandler.disconnect(this._dragBeginId);
|
Main.xdndHandler.disconnect(this._dragBeginId);
|
||||||
@@ -1174,9 +1144,6 @@ class Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Extension} - the extension's state object
|
|
||||||
*/
|
|
||||||
function init() {
|
function init() {
|
||||||
return new Extension();
|
return new Extension();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
// -*- 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, GLib, GObject, Gtk } = imports.gi;
|
const { Gio, GObject, Gtk } = imports.gi;
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
|
||||||
|
|
||||||
/** */
|
|
||||||
function init() {
|
function init() {
|
||||||
ExtensionUtils.initTranslations();
|
ExtensionUtils.initTranslations();
|
||||||
}
|
}
|
||||||
@@ -25,17 +27,6 @@ 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,
|
||||||
@@ -59,39 +50,61 @@ class WindowListPrefsWidget extends Gtk.Box {
|
|||||||
context.add_class('frame');
|
context.add_class('frame');
|
||||||
context.add_class('view');
|
context.add_class('view');
|
||||||
|
|
||||||
const modes = [
|
this._settings = ExtensionUtils.getSettings();
|
||||||
{ mode: 'never', label: _('Never group windows') },
|
let currentMode = this._settings.get_string('grouping-mode');
|
||||||
{ mode: 'auto', label: _('Group windows when space is limited') },
|
let range = this._settings.get_range('grouping-mode');
|
||||||
{ mode: 'always', label: _('Always group windows') },
|
let modes = range.deep_unpack()[1].deep_unpack();
|
||||||
];
|
|
||||||
let group = null;
|
let modeLabels = {
|
||||||
for (const { mode, label } of modes) {
|
'never': _('Never group windows'),
|
||||||
const check = new Gtk.CheckButton({
|
'auto': _('Group windows when space is limited'),
|
||||||
action_name: 'window-list.grouping-mode',
|
'always': _('Always group windows'),
|
||||||
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,
|
group: radio,
|
||||||
margin_end: 12,
|
margin_end: 12,
|
||||||
});
|
});
|
||||||
group = check;
|
box.append(radio);
|
||||||
box.append(check);
|
|
||||||
|
if (currentMode === mode)
|
||||||
|
currentRadio = radio;
|
||||||
|
|
||||||
|
radio.connect('toggled', button => {
|
||||||
|
if (button.active)
|
||||||
|
this._settings.set_string('grouping-mode', mode);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.append(new Gtk.CheckButton({
|
if (currentRadio)
|
||||||
label: _('Show on all monitors'),
|
currentRadio.active = true;
|
||||||
action_name: 'window-list.show-on-all-monitors',
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.append(new Gtk.CheckButton({
|
let check = new Gtk.CheckButton({
|
||||||
|
label: _('Show on all monitors'),
|
||||||
|
});
|
||||||
|
this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||||
|
this.append(check);
|
||||||
|
|
||||||
|
check = 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,10 @@ 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 _ = ExtensionUtils.gettext;
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
|
|
||||||
const TOOLTIP_OFFSET = 6;
|
const TOOLTIP_OFFSET = 6;
|
||||||
const TOOLTIP_ANIMATION_TIME = 150;
|
const TOOLTIP_ANIMATION_TIME = 150;
|
||||||
|
|||||||
@@ -262,9 +262,6 @@ class Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns {Extension} - the extension's state object
|
|
||||||
*/
|
|
||||||
function init() {
|
function init() {
|
||||||
return new Extension();
|
return new Extension();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ 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 _ = ExtensionUtils.gettext;
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
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';
|
||||||
@@ -442,20 +445,17 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,10 @@
|
|||||||
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
|
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
|
||||||
|
|
||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
|
const Me = ExtensionUtils.getCurrentExtension();
|
||||||
|
|
||||||
const _ = ExtensionUtils.gettext;
|
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
|
||||||
|
const _ = Gettext.gettext;
|
||||||
const N_ = e => e;
|
const N_ = e => e;
|
||||||
|
|
||||||
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
|
||||||
@@ -208,14 +210,10 @@ 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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
---
|
---
|
||||||
# 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
|
||||||
@@ -64,17 +60,6 @@ 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
|
||||||
@@ -122,15 +107,8 @@ 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()
|
||||||
@@ -189,7 +167,6 @@ 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
|
||||||
@@ -237,14 +214,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
|
||||||
@@ -256,8 +233,5 @@ 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
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project('gnome-shell-extensions',
|
project('gnome-shell-extensions',
|
||||||
version: '41.beta',
|
version: '40.7',
|
||||||
meson_version: '>= 0.44.0',
|
meson_version: '>= 0.44.0',
|
||||||
license: 'GPL2+'
|
license: 'GPL2+'
|
||||||
)
|
)
|
||||||
|
|||||||
238
po/bg.po
238
po/bg.po
@@ -1,18 +1,17 @@
|
|||||||
# 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, 2021.
|
# Alexander Shopov <ash@kambanaria.org>, 2014, 2015.
|
||||||
# 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://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
"Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
|
||||||
"issues\n"
|
"shell&keywords=I18N+L10N&component=extensions\n"
|
||||||
"POT-Creation-Date: 2021-07-05 17:13+0000\n"
|
"POT-Creation-Date: 2017-09-09 15:20+0000\n"
|
||||||
"PO-Revision-Date: 2021-07-11 10:19+0200\n"
|
"PO-Revision-Date: 2017-09-08 08:47+0300\n"
|
||||||
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
|
"Last-Translator: Lyubomir Vasilev <lyubomirv@abv.bg>\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"
|
||||||
@@ -20,7 +19,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.desktop.in:3 data/gnome-classic.session.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
msgstr "Класически GNOME"
|
msgstr "Класически GNOME"
|
||||||
|
|
||||||
@@ -28,11 +27,75 @@ 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)"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:113
|
#: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7
|
||||||
|
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:367
|
#: extensions/apps-menu/extension.js:436
|
||||||
msgid "Applications"
|
msgid "Applications"
|
||||||
msgstr "Програми"
|
msgstr "Програми"
|
||||||
|
|
||||||
@@ -46,31 +109,74 @@ msgid ""
|
|||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
|
"Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
|
||||||
"desktop“), следван от знака „:“ и номер на работен плот"
|
"desktop“ file name), следван от знака „:“ и номер на работен плот"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:35
|
#: extensions/auto-move-windows/prefs.js:60
|
||||||
msgid "Workspace Rules"
|
msgid "Application"
|
||||||
msgstr "Правила за работните плотове"
|
msgstr "Програма"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:237
|
#: extensions/auto-move-windows/prefs.js:69
|
||||||
|
#: 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:132
|
#: extensions/drive-menu/extension.js:107
|
||||||
#: 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:148
|
#: extensions/drive-menu/extension.js:125
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Преносими медии"
|
msgstr "Преносими медии"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:172
|
#: extensions/drive-menu/extension.js:150
|
||||||
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 it’s 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 "Повече пространство за прозорците"
|
||||||
@@ -100,31 +206,31 @@ msgstr ""
|
|||||||
"им, а не както е стандартно — отдолу. За прилагане на промяната на "
|
"им, а не както е стандартно — отдолу. За прилагане на промяната на "
|
||||||
"настройката трябва да рестартирате обвивката на GNOME."
|
"настройката трябва да рестартирате обвивката на GNOME."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:89
|
#: extensions/places-menu/extension.js:78
|
||||||
#: extensions/places-menu/extension.js:92
|
#: extensions/places-menu/extension.js:81
|
||||||
msgid "Places"
|
msgid "Places"
|
||||||
msgstr "Места"
|
msgstr "Места"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:46
|
#: extensions/places-menu/placeDisplay.js:65
|
||||||
#, javascript-format
|
|
||||||
msgid "Failed to launch “%s”"
|
|
||||||
msgstr "Неуспешно стартиране на „%s“"
|
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:61
|
|
||||||
#, javascript-format
|
#, javascript-format
|
||||||
msgid "Failed to mount volume for “%s”"
|
msgid "Failed to mount volume for “%s”"
|
||||||
msgstr "Неуспешно монтиране на тома „%s“"
|
msgstr "Неуспешно монтиране на тома „%s“"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:148
|
#: extensions/places-menu/placeDisplay.js:78
|
||||||
#: extensions/places-menu/placeDisplay.js:171
|
#, javascript-format
|
||||||
|
msgid "Failed to launch “%s”"
|
||||||
|
msgstr "Неуспешно стартиране на „%s“"
|
||||||
|
|
||||||
|
#: extensions/places-menu/placeDisplay.js:137
|
||||||
|
#: extensions/places-menu/placeDisplay.js:160
|
||||||
msgid "Computer"
|
msgid "Computer"
|
||||||
msgstr "Компютър"
|
msgstr "Компютър"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:359
|
#: extensions/places-menu/placeDisplay.js:303
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Домашна папка"
|
msgstr "Домашна папка"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:404
|
#: extensions/places-menu/placeDisplay.js:347
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
msgstr "Мрежа"
|
msgstr "Мрежа"
|
||||||
|
|
||||||
@@ -145,78 +251,73 @@ 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:98
|
#: extensions/window-list/extension.js:110
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Затваряне"
|
msgstr "Затваряне"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:118
|
#: extensions/window-list/extension.js:129
|
||||||
msgid "Unminimize"
|
msgid "Unminimize"
|
||||||
msgstr "Деминимизиране"
|
msgstr "Деминимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:118
|
#: extensions/window-list/extension.js:130
|
||||||
msgid "Minimize"
|
msgid "Minimize"
|
||||||
msgstr "Минимизиране"
|
msgstr "Минимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:125
|
#: extensions/window-list/extension.js:136
|
||||||
msgid "Unmaximize"
|
msgid "Unmaximize"
|
||||||
msgstr "Демаксимизиране"
|
msgstr "Демаксимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:125
|
#: extensions/window-list/extension.js:137
|
||||||
msgid "Maximize"
|
msgid "Maximize"
|
||||||
msgstr "Максимизиране"
|
msgstr "Максимизиране"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:432
|
#: extensions/window-list/extension.js:420
|
||||||
msgid "Minimize all"
|
msgid "Minimize all"
|
||||||
msgstr "Минимизиране на всички"
|
msgstr "Минимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:438
|
#: extensions/window-list/extension.js:428
|
||||||
msgid "Unminimize all"
|
msgid "Unminimize all"
|
||||||
msgstr "Деминимизиране на всички"
|
msgstr "Деминимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:444
|
#: extensions/window-list/extension.js:436
|
||||||
msgid "Maximize all"
|
msgid "Maximize all"
|
||||||
msgstr "Максимизиране на всички"
|
msgstr "Максимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:452
|
#: extensions/window-list/extension.js:445
|
||||||
msgid "Unmaximize all"
|
msgid "Unmaximize all"
|
||||||
msgstr "Демаксимизиране на всички"
|
msgstr "Демаксимизиране на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:460
|
#: extensions/window-list/extension.js:454
|
||||||
msgid "Close all"
|
msgid "Close all"
|
||||||
msgstr "Затваряне на всички"
|
msgstr "Затваряне на всички"
|
||||||
|
|
||||||
#: extensions/window-list/extension.js:737
|
#: extensions/window-list/extension.js:678
|
||||||
|
#: 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:28
|
#: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
|
||||||
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."
|
||||||
@@ -224,40 +325,35 @@ msgstr ""
|
|||||||
"Дали списъкът с прозорци да се извежда на всички монитори или само на "
|
"Дали списъкът с прозорци да се извежда на всички монитори или само на "
|
||||||
"основния"
|
"основния"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:29
|
#: extensions/window-list/prefs.js:32
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Групиране на прозорци"
|
msgstr "Групиране на прозорци"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:58
|
#: extensions/window-list/prefs.js:50
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "Никога да не се групират"
|
msgstr "Никога да не се групират"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:59
|
#: extensions/window-list/prefs.js:51
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Групиране при ограничено място"
|
msgstr "Групиране при ограничено място"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:60
|
#: extensions/window-list/prefs.js:52
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Винаги да се групират"
|
msgstr "Винаги да се групират"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:94
|
#: extensions/window-list/prefs.js:75
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
msgstr "На всички монитори"
|
msgstr "На всички монитори"
|
||||||
|
|
||||||
#: extensions/window-list/workspaceIndicator.js:249
|
#: extensions/workspace-indicator/prefs.js:141
|
||||||
#: 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:67
|
#: extensions/workspace-indicator/prefs.js:157
|
||||||
|
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 "Добавяне на работен плот"
|
|
||||||
|
|||||||
Reference in New Issue
Block a user