Codebase list gnome-shell-extensions / e87d973
Import Upstream version 41.0 Sophie Brun 2 years ago
40 changed file(s) with 771 addition(s) and 540 deletion(s). Raw diff Collapse all Expand all
0 patterns:
1 deny:
2 - regex: '^$CI_MERGE_REQUEST_PROJECT_URL/(-/)?merge_requests/$CI_MERGE_REQUEST_IID$'
3 message: Commit message must not contain a link to its own merge request
4 - regex: '^extensions/'
5 message: Commit message subject should not be prefixed with 'extensions/', use the extension name instead
6 where: subject
7 - regex: '^[^:]+: [a-z]'
8 message: "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'"
9 where: subject
10 - regex: '^\S*\.js:'
11 message: Commit message subject prefix should not include .js
12 where: subject
0 include:
1 - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
2 - remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
3
4 image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/34:2021-08-12.0
5
6 stages:
7 - pre_review
8 - prepare
9 - review
10 - build
11 - deploy
12
13 default:
14 # Cancel jobs if newer commits are pushed to the branch
15 interruptible: true
16 # Auto-retry jobs in case of infra failures
17 retry:
18 max: 1
19 when:
20 - 'runner_system_failure'
21 - 'stuck_or_timeout_failure'
22 - 'scheduler_failure'
23 - 'api_failure'
24
25 variables:
26 FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
27 LINT_LOG: "eslint-report.xml"
28 JS_LOG: "js-report.txt"
29
30 workflow:
31 rules:
32 - if: '$CI_MERGE_REQUEST_IID'
33 - if: '$CI_COMMIT_TAG'
34 - if: '$CI_COMMIT_BRANCH'
35
36 .pipeline_guard: &pipeline_guard
37 rules:
38 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
39 - if: '$CI_COMMIT_TAG'
40 - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
41 - if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
42 - when: 'manual'
43
44 .gnome-shell-extensions.fedora:34:
45 variables:
46 FDO_DISTRIBUTION_VERSION: 34
47 FDO_DISTRIBUTION_TAG: '2021-08-31.0'
48 FDO_DISTRIBUTION_PACKAGES: >
49 meson git gettext sassc
50
51 .prereview_req: &prereview_req
52 needs:
53 - check_commit_log
54 - check-merge-request
55
56 check_commit_log:
57 extends:
58 - .fdo.ci-fairy
59 stage: pre_review
60 script:
61 - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
62 then
63 ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ;
64 else
65 echo "Not a merge request" ;
66 fi
67 <<: *pipeline_guard
68 artifacts:
69 expire_in: 1 week
70 paths:
71 - commit-message-junit-report.xml
72 reports:
73 junit: commit-message-junit-report.xml
74
75 check-merge-request:
76 extends:
77 - .fdo.ci-fairy
78 stage: pre_review
79 script:
80 - if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
81 then
82 ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
83 else
84 echo "Not a merge request" ;
85 fi
86 <<: *pipeline_guard
87 artifacts:
88 expire_in: 1 week
89 paths:
90 - check-merge-request-report.xml
91 reports:
92 junit: check-merge-request-report.xml
93
94 build-fedora-container:
95 extends:
96 - .fdo.container-build@fedora@x86_64
97 - .gnome-shell-extensions.fedora:34
98 stage: prepare
99 <<: *prereview_req
100
101 js_check:
102 stage: review
103 <<: *prereview_req
104 script:
105 - find extensions -name '*.js' -exec js78 -c '{}' ';' 2>&1 | tee $JS_LOG
106 - (! grep -q . $JS_LOG)
107 artifacts:
108 paths:
109 - ${JS_LOG}
110 when: on_failure
111
112 eslint:
113 stage: review
114 <<: *prereview_req
115 script:
116 - eslint -o $LINT_LOG -f junit --resolve-plugins-relative-to $(npm root -g) extensions
117 artifacts:
118 paths:
119 - ${LINT_LOG}
120 reports:
121 junit: ${LINT_LOG}
122
123 build-bundles:
124 stage: build
125 <<: *prereview_req
126 script:
127 - ./export-zips.sh
128 artifacts:
129 name: 'Extension bundles'
130 expose_as: 'Get Extension bundles here'
131 paths:
132 - zip-files/
133
134 fedora-build:
135 extends:
136 - .fdo.distribution-image@fedora
137 - .gnome-shell-extensions.fedora:34
138 stage: build
139 needs:
140 - build-fedora-container
141 before_script:
142 - git submodule update --init
143 script:
144 - meson setup build --werror -Dextension_set=all -Dclassic_mode=true
145 - meson compile -C build
146 - meson test -C build
147 - meson install -C build
148 artifacts:
149 paths:
150 - build
151
152 fedora-dist:
153 extends:
154 - .fdo.distribution-image@fedora
155 - .gnome-shell-extensions.fedora:34
156 stage: deploy
157 needs:
158 - fedora-build
159 before_script:
160 - git submodule update --init
161 script:
162 - meson dist -C build
163 rules:
164 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
165 changes:
166 - "**/meson.build"
167 - meson/*
168
169 fedora-dist-tarball:
170 extends: fedora-dist
171 artifacts:
172 expose_as: 'Get tarball here'
173 paths:
174 - build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
175 rules:
176 - if: '$CI_COMMIT_TAG'
2727 the other for Shell API. Within the same group, put everything
2828 in alphabetic order.
2929
30 [coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Style_Guide.md
30 [coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/HEAD/doc/Style_Guide.md
+31
-25
NEWS less more
0 40.4
0 41.0
11 ====
2 * drive-menu: Fix indicator visibility [Florian; !176]
2 * Bump version
3
4 41.rc.1
5 =======
6 * Fix pre-generating stylesheets in tarball [Florian; !190]
7
8 Contributors:
9 Florian Müllner
10
11 41.rc
12 =====
13 * window-list: Adapt to overview-on-startup [Florian; !185]
14 * apps-menu: Use a custom 'toggle-menu' shortcut [Florian; !173]
15 * Misc. bug fixes and cleanups [Florian; !186]
16
17 Contributors:
18 Florian Müllner
19
20 41.beta
21 =======
22 * window-list: Extend reactive area of minimap to screen edges [Adam; !171]
23 * drive-menu: Improve detection of network mounts [Florian; !27, !176]
324 * Use distinct gettext domain for e.g.o uploads [Florian; #335]
4
5 Contributors:
6 Florian Müllner
7
8
9 40.3
10 ====
11 * drive-menu: Improve detection of network mounts [Florian; !27]
12 * Misc. bug fixes [Florian; #340]
13
14 Contributors:
15 Florian Müllner
16
17 40.2
18 ====
19 * window-list: Extend reactive area of minimap to screen edges [Adam; !171]
20 * Misc. bug fixes [Florian; !172]
21
22 Contributors:
23 Adam Goode, Florian Müllner
24
25 Translators:
26 Hugo Carvalho [pt], Juliano de Souza Camargo [pt]
25 * Misc. bug fixes and cleanups [Florian; !172, !174, !177, !167, !178, !180,
26 !181, !182, !183]
27
28 Contributors:
29 Marco Trevisan (Treviño), Adam Goode, Florian Müllner
30
31 Translators:
32 Hugo Carvalho [pt], Juliano de Souza Camargo [pt], Alexander Shopov [bg]
2733
2834 40.1
2935 ====
6868
6969 Adds a simple workspace switcher to the top bar.
7070
71 ## Default branch
72
73 The default development branch is `main`. If you still have a local
74 checkout under the old name, use:
75 ```sh
76 git checkout master
77 git branch -m master main
78 git fetch
79 git branch --unset-upstream
80 git branch -u origin/master
81 git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
82 ```
83
7184 ## License
7285
7386 GNOME Shell Extensions are distributed under the terms of the GNU General
8383 }
8484
8585 #appMenu {
86 padding: 0 8px 0 8px;
8786 spinner-image: url("classic-process-working.svg");
87 .panel-status-menu-box { padding: 0; }
8888 }
8989 .tile-preview-left.on-primary,
9090 .tile-preview-right.on-primary,
1010 GNOME Shell Sass is distributed under the terms of the GNU General Public
1111 License, version 2 or later. See the [COPYING][license] file for details.
1212
13 [shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/master/data/theme/gnome-shell-sass
13 [shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/HEAD/data/theme/gnome-shell-sass
1414 [sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
1515 [license]: COPYING
4545 border-color: if($fc==$selected_bg_color,
4646 $selected_borders_color,
4747 darken($fc,35%));
48 box-shadow: inset 0 0 0 1px $fc;
48 box-shadow: inset 0 0 0 2px $fc;
4949 }
5050 @if $t==hover { }
5151 @if $t==insensitive {
107107 }
108108
109109 // right-click app menu
110 .app-menu,
111 .app-well-menu {
110 .app-menu {
112111 max-width: 27.25em;
113112 }
114113
22 StEntry {
33 border-radius: $base_border_radius;
44 padding: 8px;
5 border-width: 1px;
5 border-width: 0;
66 color: $fg_color;
77 @include entry(normal);
88 //&:hover { @include entry(hover);}
2424 // NOTE: remove the padding if notification_bubble could remove margin for drop shadow
2525 padding: $base_margin;
2626 spacing: $base_spacing * 2;
27
28 .dnd-button {
29 // We need this because the focus outline isn't inset like for the buttons
30 // so the dnd button would grow when it gets focus if we didn't change only
31 // its color when focusing.
32 border-width: 2px;
33 border-color: transparent;
34 border-radius: 99px;
35 border-style: solid;
36
37 &:focus {
38 border-color: transparentize($selected_bg_color, 0.4);
39 }
40 }
2741 }
2842
2943 // message bubbles
99 border-radius: $search_entry_height * 0.5; // half the height
1010 color: transparentize($fg_color,0.3);
1111 background-color: $bg_color;
12 border-color: $borders_color;
1312 margin-top: $base_spacing * 2;
1413 margin-bottom: $base_spacing;
15
14 border-width: 2px;
15 border-color: transparent;
1616 &:hover {
1717 background-color: $hover_bg_color;
18 border-color: $hover_borders_color;
1918 color: $hover_fg_color;
2019 }
2120
2221 &:focus {
23 padding: $base_padding $base_padding+2; // 1px less to account for wider border
24 border-width: 2px;
2522 border-style: solid;
2623 border-color: $selected_bg_color;
2724 color: $fg_color;
4747 .workspace-background {
4848 // keep in sync with BACKGROUND_CORNER_RADIUS_PIXELS in workspace.js
4949 border-radius: 30px;
50 background-color: $osd_bg_color;
5150 box-shadow: 0 4px 16px 4px transparentize(darken($osd_bg_color, 30%), 0.7);
5251 }
66 installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
77
88 meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
9 ninja -C$builddir install
9 meson install -C $builddir
1010
1111 rm -rf $srcdir/zip-files
1212 mkdir $srcdir/zip-files
1111 const PanelMenu = imports.ui.panelMenu;
1212 const PopupMenu = imports.ui.popupMenu;
1313
14 const Me = ExtensionUtils.getCurrentExtension();
15 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
16 const _ = Gettext.gettext;
14 const _ = ExtensionUtils.gettext;
1715
1816 const appSys = Shell.AppSystem.get_default();
1917
379377 this._hidingId = Main.overview.connect('hiding', () => {
380378 this.remove_accessible_state(Atk.StateType.CHECKED);
381379 });
382 Main.layoutManager.connect('startup-complete',
383 this._setKeybinding.bind(this));
384 this._setKeybinding();
380 Main.wm.addKeybinding(
381 'apps-menu-toggle-menu',
382 ExtensionUtils.getSettings(),
383 Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
384 Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
385 () => this.menu.toggle());
385386
386387 this._desktopTarget = new DesktopTarget();
387388 this._desktopTarget.connect('app-dropped', () => {
432433 this._tree.disconnect(this._treeChangedId);
433434 this._tree = null;
434435
435 Main.wm.setCustomKeybindingHandler('panel-main-menu',
436 Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
437 Main.sessionMode.hasOverview
438 ? Main.overview.toggle.bind(Main.overview)
439 : null);
436 Main.wm.removeKeybinding('apps-menu-toggle-menu');
440437
441438 this._desktopTarget.destroy();
442439 }
476473 this.mainBox.show();
477474 }
478475 super._onOpenStateChanged(menu, open);
479 }
480
481 _setKeybinding() {
482 Main.wm.setCustomKeybindingHandler('panel-main-menu',
483 Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
484 () => this.menu.toggle());
485476 }
486477
487478 _redisplay() {
673664
674665 let appsMenuButton;
675666
667 /** */
676668 function enable() {
677669 appsMenuButton = new ApplicationsButton();
678670 let index = Main.sessionMode.panel.left.indexOf('activities') + 1;
679671 Main.panel.addToStatusArea('apps-menu', appsMenuButton, index, 'left');
680672 }
681673
674 /** */
682675 function disable() {
683676 Main.panel.menuManager.removeMenu(appsMenuButton.menu);
684677 appsMenuButton.destroy();
685678 }
686679
680 /** */
687681 function init() {
688682 ExtensionUtils.initTranslations();
689683 }
22 output: metadata_name,
33 configuration: metadata_conf
44 )
5 extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
00 {
11 "extension-id": "@extension_id@",
22 "uuid": "@uuid@",
3 "settings-schema": "@gschemaname@",
34 "gettext-domain": "@gettext_domain@",
45 "name": "Applications Menu",
56 "description": "Add a category-based menu for applications.\nThis extension is part of Classic Mode and is officially supported by GNOME. Please do not report bugs using the form below, use GNOME's GitLab instance instead.",
0 <schemalist gettext-domain="gnome-shell-extensions">
1 <schema id="org.gnome.shell.extensions.apps-menu"
2 path="/org/gnome/shell/extensions/apps-menu/">
3 <key name="apps-menu-toggle-menu" type="as">
4 <default>["&lt;Alt&gt;F1"]</default>
5 <summary>Keybinding to open the applications menu</summary>
6 <description>
7 Keybinding to open the applications menu.
8 </description>
9 </key>
10 </schema>
11 </schemalist>
107107 let prevCheckWorkspaces;
108108 let winMover;
109109
110 /** */
110111 function init() {
111112 ExtensionUtils.initTranslations();
112113 }
113114
115 /**
116 * @returns {bool} - false (used as MetaLater handler)
117 */
114118 function myCheckWorkspaces() {
115119 let keepAliveWorkspaces = [];
116120 let foundNonEmpty = false;
131135 return false;
132136 }
133137
138 /** */
134139 function enable() {
135140 prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces;
136141 Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces;
138143 winMover = new WindowMover();
139144 }
140145
146 /** */
141147 function disable() {
142148 Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces;
143149 winMover.destroy();
44 const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
55
66 const ExtensionUtils = imports.misc.extensionUtils;
7 const Me = ExtensionUtils.getCurrentExtension();
8
9 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
10 const _ = Gettext.gettext;
7
8 const _ = ExtensionUtils.gettext;
119
1210 const SETTINGS_KEY = 'application-list';
1311
266264 }
267265 });
268266
267 /** */
269268 function init() {
270269 ExtensionUtils.initTranslations();
271270 }
272271
272 /**
273 * @returns {Gtk.Widget} - the prefs widget
274 */
273275 function buildPrefsWidget() {
274276 return new AutoMoveSettingsWidget();
275277 }
77 const PopupMenu = imports.ui.popupMenu;
88 const ShellMountOperation = imports.ui.shellMountOperation;
99
10 const Me = ExtensionUtils.getCurrentExtension();
11 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
12 const _ = Gettext.gettext;
10 const _ = ExtensionUtils.gettext;
1311
1412 var MountMenuItem = GObject.registerClass(
1513 class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
217215 }
218216 });
219217
218 /** */
220219 function init() {
221220 ExtensionUtils.initTranslations();
222221 }
223222
224223 let _indicator;
225224
225 /** */
226226 function enable() {
227227 _indicator = new DriveMenu();
228228 Main.panel.addToStatusArea('drive-menu', _indicator);
229229 }
230230
231 /** */
231232 function disable() {
232233 _indicator.destroy();
233234 }
22
33 let _activateOriginal = null;
44
5 /** */
56 function enable() {
67 _activateOriginal = AppDisplay.AppIcon.prototype.activate;
78 AppDisplay.AppIcon.prototype.activate = function () {
910 };
1011 }
1112
13 /** */
1214 function disable() {
1315 AppDisplay.AppIcon.prototype.activate = _activateOriginal;
1416 }
237237
238238 let winInjections, workspaceInjections;
239239
240 /** */
240241 function resetState() {
241242 winInjections = { };
242243 workspaceInjections = { };
243244 }
244245
246 /** */
245247 function enable() {
246248 resetState();
247249
281283 };
282284 }
283285
286 /**
287 * @param {Object} object - object that was modified
288 * @param {Object} injection - the map of previous injections
289 * @param {string} name - the @injection key that should be removed
290 */
284291 function removeInjection(object, injection, name) {
285292 if (injection[name] === undefined)
286293 delete object[name];
288295 object[name] = injection[name];
289296 }
290297
298 /** */
291299 function disable() {
292300 var i;
293301
88 const PopupMenu = imports.ui.popupMenu;
99
1010 const Me = ExtensionUtils.getCurrentExtension();
11 const PlaceDisplay = Me.imports.placeDisplay;
1112
12 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
13 const _ = Gettext.gettext;
13 const _ = ExtensionUtils.gettext;
1414 const N_ = x => x;
15
16 const PlaceDisplay = Me.imports.placeDisplay;
1715
1816 const PLACE_ICON_SIZE = 16;
1917
133131 }
134132 });
135133
134 /** */
136135 function init() {
137136 ExtensionUtils.initTranslations();
138137 }
139138
140139 let _indicator;
141140
141 /** */
142142 function enable() {
143143 _indicator = new PlacesMenu();
144144
148148 Main.panel.addToStatusArea('places-menu', _indicator, pos, 'left');
149149 }
150150
151 /** */
151152 function disable() {
152153 _indicator.destroy();
153154 }
66 const Main = imports.ui.main;
77 const ShellMountOperation = imports.ui.shellMountOperation;
88
9 const Me = ExtensionUtils.getCurrentExtension();
10
11 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
12 const _ = Gettext.gettext;
9 const _ = ExtensionUtils.gettext;
1310 const N_ = x => x;
1411
1512 const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
2727
2828 let text;
2929
30 /** */
3031 function hideMessage() {
3132 text.destroy();
3233 text = null;
3334 }
3435
36 /**
37 * @param {string} message - the message to flash
38 */
3539 function flashMessage(message) {
3640 if (!text) {
3741 text = new St.Label({ style_class: 'screenshot-sizer-message' });
6670 [720, 360], // Phone landscape fullscreen
6771 ];
6872
73 /**
74 * @param {Meta.Display} display - the display
75 * @param {Meta.Window=} window - for per-window bindings, the window
76 * @param {Meta.KeyBinding} binding - the key binding
77 */
6978 function cycleScreenshotSizes(display, window, binding) {
7079 // Probably this isn't useful with 5 sizes, but you can decrease instead
7180 // of increase by holding down shift.
132141 flashMessage(message);
133142 }
134143
144 /** */
135145 function enable() {
136146 Main.wm.addKeybinding(
137147 'cycle-screenshot-sizes',
147157 cycleScreenshotSizes);
148158 }
149159
160 /** */
150161 function disable() {
151162 Main.wm.removeKeybinding('cycle-screenshot-sizes');
152163 Main.wm.removeKeybinding('cycle-screenshot-sizes-backward');
5757 }
5858 }
5959
60 /**
61 * @returns {ThemeManager} - the extension state object
62 */
6063 function init() {
6164 return new ThemeManager();
6265 }
173173 }
174174 });
175175
176 /** */
176177 function init() {
177178 }
178179
180 /**
181 * @returns {Gtk.Widget} - the prefs widget
182 */
179183 function buildPrefsWidget() {
180184 return new UserThemePrefsWidget();
181185 }
22
33 const fn = (...args) => GLib.build_filenamev(args);
44
5 /**
6 * @returns {string[]} - an ordered list of theme directories
7 */
58 function getThemeDirs() {
69 return [
710 fn(GLib.get_home_dir(), '.themes'),
1013 ];
1114 }
1215
16 /**
17 * @returns {string[]} - an ordered list of mode theme directories
18 */
1319 function getModeThemeDirs() {
1420 return GLib.get_system_data_dirs()
1521 .map(dir => fn(dir, 'gnome-shell', 'theme'));
1010 const { WindowPicker, WindowPickerToggle } = Me.imports.windowPicker;
1111 const { WorkspaceIndicator } = Me.imports.workspaceIndicator;
1212
13 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
14 const _ = Gettext.gettext;
13 const _ = ExtensionUtils.gettext;
1514
1615 const ICON_TEXTURE_SIZE = 24;
1716 const DND_ACTIVATE_TIMEOUT = 500;
2221 ALWAYS: 2,
2322 };
2423
25
26 function _minimizeOrActivateWindow(window) {
27 let focusWindow = global.display.focus_window;
28 if (focusWindow === window ||
29 focusWindow && focusWindow.get_transient_for() === window)
30 window.minimize();
31 else
32 window.activate(global.get_current_time());
33 }
34
35 function _openMenu(menu) {
36 menu.open();
37
38 let event = Clutter.get_current_event();
39 if (event && event.type() === Clutter.EventType.KEY_RELEASE)
40 menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
41 }
42
43 function _onMenuStateChanged(menu, isOpen) {
44 if (isOpen)
45 return;
46
47 let [x, y] = global.get_pointer();
48 let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
49 if (Me.stateObj.someWindowListContains(actor))
50 actor.sync_hover();
51 }
52
24 /**
25 * @param {Shell.App} app - an app
26 * @returns {number} - the smallest stable sequence of the app's windows
27 */
5328 function _getAppStableSequence(app) {
5429 let windows = app.get_windows().filter(w => !w.skip_taskbar);
5530 return windows.reduce((prev, cur) => {
5631 return Math.min(prev, cur.get_stable_sequence());
5732 }, Infinity);
5833 }
59
6034
6135 class WindowContextMenu extends PopupMenu.PopupMenu {
6236 constructor(source, metaWindow) {
281255 return true;
282256 }
283257
258 _openMenu(menu) {
259 menu.open();
260
261 let event = Clutter.get_current_event();
262 if (event && event.type() === Clutter.EventType.KEY_RELEASE)
263 menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
264 }
265
266 _minimizeOrActivateWindow(window) {
267 let focusWindow = global.display.focus_window;
268 if (focusWindow === window ||
269 focusWindow && focusWindow.get_transient_for() === window)
270 window.minimize();
271 else
272 window.activate(global.get_current_time());
273 }
274
275 _onMenuStateChanged(menu, isOpen) {
276 if (isOpen)
277 return;
278
279 let [x, y] = global.get_pointer();
280 let actor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
281 if (Me.stateObj.someWindowListContains(actor))
282 actor.sync_hover();
283 }
284
284285 _onPopupMenu(_actor) {
285286 if (!this._canOpenPopupMenu() || this._contextMenu.isOpen)
286287 return;
287 _openMenu(this._contextMenu);
288 this._openMenu(this._contextMenu);
288289 }
289290
290291 _isFocused() {
361362 this.label_actor = this._windowTitle.label_actor;
362363
363364 this._contextMenu = new WindowContextMenu(this, this.metaWindow);
364 this._contextMenu.connect('open-state-changed', _onMenuStateChanged);
365 this._contextMenu.connect('open-state-changed',
366 this._onMenuStateChanged.bind(this));
365367 this._contextMenu.actor.hide();
366368 this._contextMenuManager.addMenu(this._contextMenu);
367369 Main.uiGroup.add_actor(this._contextMenu.actor);
381383 }
382384
383385 if (button === 1)
384 _minimizeOrActivateWindow(this.metaWindow);
386 this._minimizeOrActivateWindow(this.metaWindow);
385387 else
386 _openMenu(this._contextMenu);
388 this._openMenu(this._contextMenu);
387389 }
388390
389391 _isFocused() {
517519
518520 this._menuManager = new PopupMenu.PopupMenuManager(this);
519521 this._menu = new PopupMenu.PopupMenu(this, 0.5, St.Side.BOTTOM);
520 this._menu.connect('open-state-changed', _onMenuStateChanged);
522 this._menu.connect('open-state-changed',
523 this._onMenuStateChanged.bind(this));
521524 this._menu.actor.hide();
522525 this._menu.connect('activate', this._onMenuActivate.bind(this));
523526 this._menuManager.addMenu(this._menu);
524527 Main.uiGroup.add_actor(this._menu.actor);
525528
526529 this._appContextMenu = new AppContextMenu(this);
527 this._appContextMenu.connect('open-state-changed', _onMenuStateChanged);
530 this._appContextMenu.connect('open-state-changed',
531 this._onMenuStateChanged.bind(this));
528532 this._appContextMenu.actor.hide();
529533 Main.uiGroup.add_actor(this._appContextMenu.actor);
530534
591595 this._singleWindowTitle.child = this._windowTitle;
592596 this._windowContextMenu = new WindowContextMenu(this, this.metaWindow);
593597 this._windowContextMenu.connect(
594 'open-state-changed', _onMenuStateChanged);
598 'open-state-changed', this._onMenuStateChanged.bind(this));
595599 Main.uiGroup.add_actor(this._windowContextMenu.actor);
596600 this._windowContextMenu.actor.hide();
597601 this._contextMenuManager.addMenu(this._windowContextMenu);
630634 if (windows.length === 1) {
631635 if (contextMenuWasOpen)
632636 return;
633 _minimizeOrActivateWindow(windows[0]);
637 this._minimizeOrActivateWindow(windows[0]);
634638 } else {
635639 this._menu.removeAll();
636640
641645 item._window = windows[i];
642646 this._menu.addMenuItem(item);
643647 }
644 _openMenu(this._menu);
648 this._openMenu(this._menu);
645649 }
646650 } else {
647651 if (contextMenuWasOpen)
648652 return;
649 _openMenu(this._contextMenu);
653 this._openMenu(this._contextMenu);
650654 }
651655 }
652656
773777 this._updateKeyboardAnchor();
774778 });
775779
776 this._overviewHidingId = Main.overview.connect('hiding', () => {
780 this._overviewHidingId = Main.overview.connect('hidden', () => {
777781 this.visible = !Main.layoutManager.primaryMonitor.inFullscreen;
778782 this._updateKeyboardAnchor();
779783 });
780784
781785 this._fullscreenChangedId =
782786 global.display.connect('in-fullscreen-changed', () => {
787 // Work-around for initial change from unknown to !fullscreen
788 if (Main.overview.visible)
789 this.hide();
783790 this._updateKeyboardAnchor();
784791 });
785792
11691176 }
11701177 }
11711178
1179 /**
1180 * @returns {Extension} - the extension's state object
1181 */
11721182 function init() {
11731183 return new Extension();
11741184 }
00 // -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
11 /* exported init buildPrefsWidget */
22
3 const { Gio, GObject, Gtk } = imports.gi;
3 const { Gio, GLib, GObject, Gtk } = imports.gi;
44
55 const ExtensionUtils = imports.misc.extensionUtils;
6 const Me = ExtensionUtils.getCurrentExtension();
76
8 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
9 const _ = Gettext.gettext;
7 const _ = ExtensionUtils.gettext;
108
11
9 /** */
1210 function init() {
1311 ExtensionUtils.initTranslations();
1412 }
2523 margin_end: 36,
2624 halign: Gtk.Align.CENTER,
2725 });
26
27 this._actionGroup = new Gio.SimpleActionGroup();
28 this.insert_action_group('window-list', this._actionGroup);
29
30 this._settings = ExtensionUtils.getSettings();
31 this._actionGroup.add_action(
32 this._settings.create_action('grouping-mode'));
33 this._actionGroup.add_action(
34 this._settings.create_action('show-on-all-monitors'));
35 this._actionGroup.add_action(
36 this._settings.create_action('display-all-workspaces'));
2837
2938 let groupingLabel = '<b>%s</b>'.format(_('Window Grouping'));
3039 this.append(new Gtk.Label({
4958 context.add_class('frame');
5059 context.add_class('view');
5160
52 this._settings = ExtensionUtils.getSettings();
53 let currentMode = this._settings.get_string('grouping-mode');
54 let range = this._settings.get_range('grouping-mode');
55 let modes = range.deep_unpack()[1].deep_unpack();
56
57 let modeLabels = {
58 'never': _('Never group windows'),
59 'auto': _('Group windows when space is limited'),
60 'always': _('Always group windows'),
61 };
62
63 let radio = null;
64 let currentRadio = null;
65 for (let i = 0; i < modes.length; i++) {
66 let mode = modes[i];
67 let label = modeLabels[mode];
68 if (!label) {
69 log('Unhandled option "%s" for grouping-mode'.format(mode));
70 continue;
71 }
72
73 radio = new Gtk.CheckButton({
74 active: !i,
61 const modes = [
62 { mode: 'never', label: _('Never group windows') },
63 { mode: 'auto', label: _('Group windows when space is limited') },
64 { mode: 'always', label: _('Always group windows') },
65 ];
66 let group = null;
67 for (const { mode, label } of modes) {
68 const check = new Gtk.CheckButton({
69 action_name: 'window-list.grouping-mode',
70 action_target: new GLib.Variant('s', mode),
7571 label,
76 group: radio,
72 group,
7773 margin_end: 12,
7874 });
79 box.append(radio);
80
81 if (currentMode === mode)
82 currentRadio = radio;
83
84 radio.connect('toggled', button => {
85 if (button.active)
86 this._settings.set_string('grouping-mode', mode);
87 });
75 group = check;
76 box.append(check);
8877 }
8978
90 if (currentRadio)
91 currentRadio.active = true;
79 this.append(new Gtk.CheckButton({
80 label: _('Show on all monitors'),
81 action_name: 'window-list.show-on-all-monitors',
82 }));
9283
93 let check = new Gtk.CheckButton({
94 label: _('Show on all monitors'),
95 });
96 this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT);
97 this.append(check);
98
99 check = new Gtk.CheckButton({
84 this.append(new Gtk.CheckButton({
10085 label: _('Show windows from all workspaces'),
101 });
102 this._settings.bind('display-all-workspaces', check, 'active', Gio.SettingsBindFlags.DEFAULT);
103 this.append(check);
86 action_name: 'window-list.display-all-workspaces',
87 }));
10488 }
10589 });
10690
91 /**
92 * @returns {Gtk.Widget} - the prefs widget
93 */
10794 function buildPrefsWidget() {
10895 return new WindowListPrefsWidget();
10996 }
66 const PanelMenu = imports.ui.panelMenu;
77 const PopupMenu = imports.ui.popupMenu;
88
9 const Me = ExtensionUtils.getCurrentExtension();
10
11 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
12 const _ = Gettext.gettext;
9 const _ = ExtensionUtils.gettext;
1310
1411 const TOOLTIP_OFFSET = 6;
1512 const TOOLTIP_ANIMATION_TIME = 150;
261261 }
262262 }
263263
264 /**
265 * @returns {Extension} - the extension's state object
266 */
264267 function init() {
265268 return new Extension();
266269 }
88 const PanelMenu = imports.ui.panelMenu;
99 const PopupMenu = imports.ui.popupMenu;
1010
11 const Me = ExtensionUtils.getCurrentExtension();
12
13 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
14 const _ = Gettext.gettext;
11 const _ = ExtensionUtils.gettext;
1512
1613 const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
1714 const WORKSPACE_KEY = 'workspace-names';
444441 }
445442 });
446443
444 /** */
447445 function init() {
448446 ExtensionUtils.initTranslations();
449447 }
450448
451449 let _indicator;
452450
451 /** */
453452 function enable() {
454453 _indicator = new WorkspaceIndicator();
455454 Main.panel.addToStatusArea('workspace-indicator', _indicator);
456455 }
457456
457 /** */
458458 function disable() {
459459 _indicator.destroy();
460460 }
33 const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
44
55 const ExtensionUtils = imports.misc.extensionUtils;
6 const Me = ExtensionUtils.getCurrentExtension();
7
8 const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
9 const _ = Gettext.gettext;
6
7 const _ = ExtensionUtils.gettext;
108 const N_ = e => e;
119
1210 const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
209207 }
210208 });
211209
210 /** */
212211 function init() {
213212 ExtensionUtils.initTranslations();
214213 }
215214
215 /**
216 * @returns {Gtk.Widget} - the prefs widget
217 */
216218 function buildPrefsWidget() {
217219 return new WorkspaceSettingsWidget();
218220 }
00 ---
11 # SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
2 # SPDX-FileCopyrightText: 2018 Claudio André <[email protected]>
23 env:
34 es6: true
5 es2020: true
46 extends: 'eslint:recommended'
7 plugins:
8 - jsdoc
59 rules:
610 array-bracket-newline:
711 - error
5963 - 'CallExpression[callee.object.name=GObject][callee.property.name=registerClass] > ClassExpression:first-child'
6064 # Allow dedenting chained member expressions
6165 MemberExpression: 'off'
66 jsdoc/check-alignment: error
67 jsdoc/check-param-names: error
68 jsdoc/check-tag-names: error
69 jsdoc/check-types: error
70 jsdoc/implements-on-classes: error
71 jsdoc/newline-after-description: error
72 jsdoc/require-jsdoc: error
73 jsdoc/require-param: error
74 jsdoc/require-param-description: error
75 jsdoc/require-param-name: error
76 jsdoc/require-param-type: error
6277 key-spacing:
6378 - error
6479 - beforeColon: false
106121 no-octal-escape: error
107122 no-proto: error
108123 no-prototype-builtins: 'off'
124 no-restricted-globals: [error, window]
109125 no-restricted-properties:
110126 - error
127 - object: imports
128 property: format
129 message: Use template strings
130 - object: pkg
131 property: initFormat
132 message: Use template strings
111133 - object: Lang
112134 property: copyProperties
113135 message: Use Object.assign()
166188 object-curly-newline:
167189 - error
168190 - consistent: true
191 multiline: true
169192 object-curly-spacing: error
170193 object-shorthand: error
171194 operator-assignment: error
213236 template-curly-spacing: error
214237 template-tag-spacing: error
215238 unicode-bom: error
216 valid-jsdoc:
217 - error
218 - requireReturn: false
219239 wrap-iife:
220240 - error
221241 - inside
222242 yield-star-spacing: error
223243 yoda: error
244 settings:
245 jsdoc:
246 mode: typescript
224247 globals:
225248 ARGV: readonly
226249 Debugger: readonly
232255 logError: readonly
233256 print: readonly
234257 printerr: readonly
258 window: readonly
259 TextEncoder: readonly
260 TextDecoder: readonly
235261 parserOptions:
236262 ecmaVersion: 2020
0 #!/usr/bin/env python3
1
2 import os, sys
3 from pathlib import Path
4 import argparse, subprocess
5
6 def check_version(version, file, type='news'):
7 if type == 'news':
8 line = file.open().readline()
9 ok = line.startswith(version)
10 print("{}: {}".format(file, "OK" if ok else "FAILED"))
11 if not ok:
12 raise Exception("{} does not start with {}".format(file, version))
13 elif type == 'metainfo':
14 subprocess.run(['appstream-util', 'validate-version', file, version],
15 check=True)
16 else:
17 raise Exception('Not implemented')
18
19 parser = argparse.ArgumentParser(description='Check release version information.')
20 parser.add_argument('--type', choices=['metainfo','news'], default='news')
21 parser.add_argument('version', help='the version to check for')
22 parser.add_argument('files', nargs='+', help='files to check')
23 args = parser.parse_args()
24
25 distroot = os.environ.get('MESON_DIST_ROOT', './')
26
27 try:
28 for file in args.files:
29 check_version(args.version, Path(distroot, file), args.type)
30 except:
31 sys.exit(1)
99 stylesheet_path = PurePath('data/gnome-classic.css')
1010 src = PurePath(sourceroot, stylesheet_path.with_suffix('.scss'))
1111 dst = PurePath(distroot, stylesheet_path)
12 subprocess.call(['sassc', '-a', src, dst])
12 subprocess.run(['sassc', '-a', src, dst], check=True)
00 project('gnome-shell-extensions',
1 version: '40.4',
2 meson_version: '>= 0.44.0',
1 version: '41.0',
2 meson_version: '>= 0.53.0',
33 license: 'GPL2+'
44 )
55
8888 subdir('po')
8989
9090 meson.add_dist_script('meson/generate-stylesheets.py')
91 meson.add_dist_script('meson/check-version.py',
92 meson.project_version(),
93 'NEWS')
+263
-359
po/bg.po less more
0 # Bulgarian translation for gnome-shell-extensions po-file.
1 # Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
2 # This file is distributed under the same license as the gnome-shell-extensions package.
3 # Ivaylo Valkov <[email protected]>, 2014.
4 # Alexander Shopov <[email protected]>, 2014, 2015.
5 # Lyubomir Vasilev <[email protected]>, 2017.
6 msgid ""
7 msgstr ""
8 "Project-Id-Version: gnome-shell-extensions master\n"
9 "Report-Msgid-Bugs-To: https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-"
10 "shell&keywords=I18N+L10N&component=extensions\n"
11 "POT-Creation-Date: 2017-09-09 15:20+0000\n"
12 "PO-Revision-Date: 2017-09-08 08:47+0300\n"
13 "Last-Translator: Lyubomir Vasilev <[email protected]>\n"
14 "Language-Team: Bulgarian <[email protected]>\n"
15 "Language: bg\n"
16 "MIME-Version: 1.0\n"
17 "Content-Type: text/plain; charset=UTF-8\n"
18 "Content-Transfer-Encoding: 8bit\n"
19 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
21 #: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
22 msgid "GNOME Classic"
23 msgstr "Класически GNOME"
24
25 #: data/gnome-classic.desktop.in:4
26 msgid "This session logs you into GNOME Classic"
27 msgstr "Работната среда изглежда като класическия GNOME (2.x)"
28
29 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:7
30 msgid "Attach modal dialog to the parent window"
31 msgstr "Прикрепяне на модалните прозорци към родителските им прозорци"
32
33 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:8
34 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:25
35 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:33
36 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:41
37 msgid ""
38 "This key overrides the key in org.gnome.mutter when running GNOME Shell."
39 msgstr ""
40 "Този ключ при е с по-голям приоритет от „org.gnome.mutter“ при изпълнението "
41 "на обвивката на GNOME."
42
43 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:16
44 msgid "Arrangement of buttons on the titlebar"
45 msgstr "Подредба на бутоните на заглавната лента"
46
47 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:17
48 msgid ""
49 "This key overrides the key in org.gnome.desktop.wm.preferences when running "
50 "GNOME Shell."
51 msgstr ""
52 "Този ключ при е с по-голям приоритет от „org.gnome.desktop.wm.preferences“ "
53 "при изпълнението на обвивката на GNOME."
54
55 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:24
56 msgid "Enable edge tiling when dropping windows on screen edges"
57 msgstr ""
58 "Включване на специална подредба при приближаване на прозорец до ръбовете на "
59 "екрана"
60
61 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:32
62 msgid "Workspaces only on primary monitor"
63 msgstr "Работни плотове само на основния екран"
64
65 #: data/org.gnome.shell.extensions.classic-overrides.gschema.xml:40
66 msgid "Delay focus changes in mouse mode until the pointer stops moving"
67 msgstr "Забавяне на смяната на фокуса до спирането на движението на показалеца"
68
69 #: extensions/alternate-tab/prefs.js:20
70 msgid "Thumbnail only"
71 msgstr "Само миниатюри"
72
73 #: extensions/alternate-tab/prefs.js:21
74 msgid "Application icon only"
75 msgstr "Само икони на приложенията"
76
77 #: extensions/alternate-tab/prefs.js:22
78 msgid "Thumbnail and application icon"
79 msgstr "Миниатюри и икони на приложенията"
80
81 #: extensions/alternate-tab/prefs.js:38
82 msgid "Present windows as"
83 msgstr "Показване на прозорците като"
84
85 #: extensions/alternate-tab/prefs.js:69
86 msgid "Show only windows in the current workspace"
87 msgstr "Да се показват само прозорците на текущия работен плот"
88
89 #: extensions/apps-menu/extension.js:41
90 msgid "Activities Overview"
91 msgstr "Показване на програмите"
92
93 #: extensions/apps-menu/extension.js:141
94 msgid "Favorites"
95 msgstr "Любими"
96
97 #: extensions/apps-menu/extension.js:436
98 msgid "Applications"
99 msgstr "Програми"
100
101 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
102 msgid "Application and workspace list"
103 msgstr "Списък с програмите и работните плотове"
104
105 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
106 msgid ""
107 "A list of strings, each containing an application id (desktop file name), "
108 "followed by a colon and the workspace number"
109 msgstr ""
110 "Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
111 "desktop“ file name), следван от знака „:“ и номер на работен плот"
112
113 #: extensions/auto-move-windows/prefs.js:60
114 msgid "Application"
115 msgstr "Програма"
116
117 #: extensions/auto-move-windows/prefs.js:69
118 #: extensions/auto-move-windows/prefs.js:127
119 msgid "Workspace"
120 msgstr "Работен плот"
121
122 #: extensions/auto-move-windows/prefs.js:85
123 msgid "Add Rule"
124 msgstr "Добавяне на правило"
125
126 #: extensions/auto-move-windows/prefs.js:106
127 msgid "Create new matching rule"
128 msgstr "Създаване на правило за съвпадение"
129
130 #: extensions/auto-move-windows/prefs.js:111
131 msgid "Add"
132 msgstr "Добавяне"
133
134 #. TRANSLATORS: %s is the filesystem name
135 #: extensions/drive-menu/extension.js:107
136 #, javascript-format
137 msgid "Ejecting drive “%s” failed:"
138 msgstr "Неуспешно изваждане на устройство „%s“:"
139
140 #: extensions/drive-menu/extension.js:125
141 msgid "Removable devices"
142 msgstr "Преносими медии"
143
144 #: extensions/drive-menu/extension.js:150
145 msgid "Open Files"
146 msgstr "Отваряне на файлове"
147
148 #: extensions/example/extension.js:17
149 msgid "Hello, world!"
150 msgstr "Здравей, свят!"
151
152 #: extensions/example/org.gnome.shell.extensions.example.gschema.xml:5
153 msgid "Alternative greeting text."
154 msgstr "Друго приветстващо съобщение."
155
156 #: extensions/example/org.gnome.shell.extensions.example.gschema.xml:6
157 msgid ""
158 "If not empty, it contains the text that will be shown when clicking on the "
159 "panel."
160 msgstr ""
161 "Ако ключът не е празен, съдържанието му се извежда при натискането на панела."
162
163 #: extensions/example/prefs.js:30
164 msgid "Message"
165 msgstr "Съобщение"
166
167 #. TRANSLATORS: Example is the name of the extension, should not be
168 #. translated
169 #: extensions/example/prefs.js:43
170 msgid ""
171 "Example aims to show how to build well behaved extensions for the Shell and "
172 "as such it has little functionality on its own.\n"
173 "Nevertheless it’s possible to customize the greeting message."
174 msgstr ""
175 "Това е пример за добре работещо разширение на обвивката на GNOME и има "
176 "минимална функционалност.\n"
177 "С него можете да промените приветстващото съобщение на панела."
178
179 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
180 msgid "Use more screen for windows"
181 msgstr "Повече пространство за прозорците"
182
183 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
184 msgid ""
185 "Try to use more screen for placing window thumbnails by adapting to screen "
186 "aspect ratio, and consolidating them further to reduce the bounding box. "
187 "This setting applies only with the natural placement strategy."
188 msgstr ""
189 "Използване на по-голяма част от екрана за поставянето на мини изображения "
190 "чрез промяна на съотношението на страните и допълнително обединяване за "
191 "смаляване на обхващащия ги правоъгълник. Тази настройка се прилага само при "
192 "естествената стратегия за поставяне на прозорците."
193
194 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
195 msgid "Place window captions on top"
196 msgstr "Заглавия на прозорците отгоре"
197
198 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
199 msgid ""
200 "If true, place window captions on top the respective thumbnail, overriding "
201 "shell default of placing it at the bottom. Changing this setting requires "
202 "restarting the shell to have any effect."
203 msgstr ""
204 "Ако е истина, заглавията на прозорците се поставят над мини изображенията "
205 "им, а не както е стандартно — отдолу. За прилагане на промяната на "
206 "настройката трябва да рестартирате обвивката на GNOME."
207
208 #: extensions/places-menu/extension.js:78
209 #: extensions/places-menu/extension.js:81
210 msgid "Places"
211 msgstr "Места"
212
213 #: extensions/places-menu/placeDisplay.js:65
214 #, javascript-format
215 msgid "Failed to mount volume for “%s”"
216 msgstr "Неуспешно монтиране на тома „%s“"
217
218 #: extensions/places-menu/placeDisplay.js:78
219 #, javascript-format
220 msgid "Failed to launch “%s”"
221 msgstr "Неуспешно стартиране на „%s“"
222
223 #: extensions/places-menu/placeDisplay.js:137
224 #: extensions/places-menu/placeDisplay.js:160
225 msgid "Computer"
226 msgstr "Компютър"
227
228 #: extensions/places-menu/placeDisplay.js:303
229 msgid "Home"
230 msgstr "Домашна папка"
231
232 #: extensions/places-menu/placeDisplay.js:347
233 msgid "Browse Network"
234 msgstr "Мрежа"
235
236 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
237 msgid "Cycle Screenshot Sizes"
238 msgstr "Смяна на размерите на снимката на екрана"
239
240 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
241 msgid "Cycle Screenshot Sizes Backward"
242 msgstr "Смяна на размерите на снимката на екрана наобратно"
243
244 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
245 msgid "Theme name"
246 msgstr "Име на темата"
247
248 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
249 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
250 msgstr ""
251 "Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
252
253 #: extensions/window-list/extension.js:110
254 msgid "Close"
255 msgstr "Затваряне"
256
257 #: extensions/window-list/extension.js:129
258 msgid "Unminimize"
259 msgstr "Деминимизиране"
260
261 #: extensions/window-list/extension.js:130
262 msgid "Minimize"
263 msgstr "Минимизиране"
264
265 #: extensions/window-list/extension.js:136
266 msgid "Unmaximize"
267 msgstr "Демаксимизиране"
268
269 #: extensions/window-list/extension.js:137
270 msgid "Maximize"
271 msgstr "Максимизиране"
272
273 #: extensions/window-list/extension.js:420
274 msgid "Minimize all"
275 msgstr "Минимизиране на всички"
276
277 #: extensions/window-list/extension.js:428
278 msgid "Unminimize all"
279 msgstr "Деминимизиране на всички"
280
281 #: extensions/window-list/extension.js:436
282 msgid "Maximize all"
283 msgstr "Максимизиране на всички"
284
285 #: extensions/window-list/extension.js:445
286 msgid "Unmaximize all"
287 msgstr "Демаксимизиране на всички"
288
289 #: extensions/window-list/extension.js:454
290 msgid "Close all"
291 msgstr "Затваряне на всички"
292
293 #: extensions/window-list/extension.js:678
294 #: extensions/workspace-indicator/extension.js:30
295 msgid "Workspace Indicator"
296 msgstr "Индикатор на работните плотове"
297
298 #: extensions/window-list/extension.js:842
299 msgid "Window List"
300 msgstr "Списък на прозорците"
301
302 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
303 msgid "When to group windows"
304 msgstr "Кога да се групират прозорците"
305
306 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
307 msgid ""
308 "Decides when to group windows from the same application on the window list. "
309 "Possible values are “never”, “auto” and “always”."
310 msgstr ""
311 "Кога да се групират прозорците на една програма в списъка с прозорците. "
312 "Възможните стойности са „never“ (никога), „auto“ (автоматично) и "
313 "„always“ (винаги)."
314
315 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
316 msgid "Show the window list on all monitors"
317 msgstr "Извеждане на списъка с прозорци на всички монитори"
318
319 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
320 msgid ""
321 "Whether to show the window list on all connected monitors or only on the "
322 "primary one."
323 msgstr ""
324 "Дали списъкът с прозорци да се извежда на всички монитори или само на "
325 "основния"
326
327 #: extensions/window-list/prefs.js:32
328 msgid "Window Grouping"
329 msgstr "Групиране на прозорци"
330
331 #: extensions/window-list/prefs.js:50
332 msgid "Never group windows"
333 msgstr "Никога да не се групират"
334
335 #: extensions/window-list/prefs.js:51
336 msgid "Group windows when space is limited"
337 msgstr "Групиране при ограничено място"
338
339 #: extensions/window-list/prefs.js:52
340 msgid "Always group windows"
341 msgstr "Винаги да се групират"
342
343 #: extensions/window-list/prefs.js:75
344 msgid "Show on all monitors"
345 msgstr "На всички монитори"
346
347 #: extensions/workspace-indicator/prefs.js:141
348 msgid "Workspace Names"
349 msgstr "Имена на работните плотове"
350
351 #: extensions/workspace-indicator/prefs.js:157
352 msgid "Name"
353 msgstr "Име"
354
355 #: extensions/workspace-indicator/prefs.js:198
356 #, javascript-format
357 msgid "Workspace %d"
358 msgstr "Работен плот %d"
0 # Bulgarian translation for gnome-shell-extensions po-file.
1 # Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc.
2 # Copyright (C) 2021 Alexander Shopov <[email protected]>.
3 # This file is distributed under the same license as the gnome-shell-extensions package.
4 # Ivaylo Valkov <[email protected]>, 2014.
5 # Alexander Shopov <[email protected]>, 2014, 2015, 2021.
6 # Lyubomir Vasilev <[email protected]>, 2017.
7 msgid ""
8 msgstr ""
9 "Project-Id-Version: gnome-shell-extensions master\n"
10 "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
11 "issues\n"
12 "POT-Creation-Date: 2021-07-05 17:13+0000\n"
13 "PO-Revision-Date: 2021-07-11 10:19+0200\n"
14 "Last-Translator: Alexander Shopov <[email protected]>\n"
15 "Language-Team: Bulgarian <[email protected]>\n"
16 "Language: bg\n"
17 "MIME-Version: 1.0\n"
18 "Content-Type: text/plain; charset=UTF-8\n"
19 "Content-Transfer-Encoding: 8bit\n"
20 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
21
22 #: data/gnome-classic.desktop.in:3
23 msgid "GNOME Classic"
24 msgstr "Класически GNOME"
25
26 #: data/gnome-classic.desktop.in:4
27 msgid "This session logs you into GNOME Classic"
28 msgstr "Работната среда изглежда като класическия GNOME (2.x)"
29
30 #: extensions/apps-menu/extension.js:113
31 msgid "Favorites"
32 msgstr "Любими"
33
34 #: extensions/apps-menu/extension.js:367
35 msgid "Applications"
36 msgstr "Програми"
37
38 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:6
39 msgid "Application and workspace list"
40 msgstr "Списък с програмите и работните плотове"
41
42 #: extensions/auto-move-windows/org.gnome.shell.extensions.auto-move-windows.gschema.xml:7
43 msgid ""
44 "A list of strings, each containing an application id (desktop file name), "
45 "followed by a colon and the workspace number"
46 msgstr ""
47 "Списък от низове. Всеки съдържа идентификатор на програма (име на файл „."
48 "desktop“), следван от знака „:“ и номер на работен плот"
49
50 #: extensions/auto-move-windows/prefs.js:35
51 msgid "Workspace Rules"
52 msgstr "Правила за работните плотове"
53
54 #: extensions/auto-move-windows/prefs.js:237
55 msgid "Add Rule"
56 msgstr "Добавяне на правило"
57
58 #. TRANSLATORS: %s is the filesystem name
59 #: extensions/drive-menu/extension.js:132
60 #: extensions/places-menu/placeDisplay.js:233
61 #, javascript-format
62 msgid "Ejecting drive “%s” failed:"
63 msgstr "Неуспешно изваждане на устройство „%s“:"
64
65 #: extensions/drive-menu/extension.js:148
66 msgid "Removable devices"
67 msgstr "Преносими медии"
68
69 #: extensions/drive-menu/extension.js:172
70 msgid "Open Files"
71 msgstr "Отваряне на файлове"
72
73 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:5
74 msgid "Use more screen for windows"
75 msgstr "Повече пространство за прозорците"
76
77 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
78 msgid ""
79 "Try to use more screen for placing window thumbnails by adapting to screen "
80 "aspect ratio, and consolidating them further to reduce the bounding box. "
81 "This setting applies only with the natural placement strategy."
82 msgstr ""
83 "Използване на по-голяма част от екрана за поставянето на мини изображения "
84 "чрез промяна на съотношението на страните и допълнително обединяване за "
85 "смаляване на обхващащия ги правоъгълник. Тази настройка се прилага само при "
86 "естествената стратегия за поставяне на прозорците."
87
88 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
89 msgid "Place window captions on top"
90 msgstr "Заглавия на прозорците отгоре"
91
92 #: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
93 msgid ""
94 "If true, place window captions on top the respective thumbnail, overriding "
95 "shell default of placing it at the bottom. Changing this setting requires "
96 "restarting the shell to have any effect."
97 msgstr ""
98 "Ако е истина, заглавията на прозорците се поставят над мини изображенията "
99 "им, а не както е стандартно — отдолу. За прилагане на промяната на "
100 "настройката трябва да рестартирате обвивката на GNOME."
101
102 #: extensions/places-menu/extension.js:89
103 #: extensions/places-menu/extension.js:92
104 msgid "Places"
105 msgstr "Места"
106
107 #: extensions/places-menu/placeDisplay.js:46
108 #, javascript-format
109 msgid "Failed to launch “%s”"
110 msgstr "Неуспешно стартиране на „%s“"
111
112 #: extensions/places-menu/placeDisplay.js:61
113 #, javascript-format
114 msgid "Failed to mount volume for “%s”"
115 msgstr "Неуспешно монтиране на тома „%s“"
116
117 #: extensions/places-menu/placeDisplay.js:148
118 #: extensions/places-menu/placeDisplay.js:171
119 msgid "Computer"
120 msgstr "Компютър"
121
122 #: extensions/places-menu/placeDisplay.js:359
123 msgid "Home"
124 msgstr "Домашна папка"
125
126 #: extensions/places-menu/placeDisplay.js:404
127 msgid "Browse Network"
128 msgstr "Мрежа"
129
130 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
131 msgid "Cycle Screenshot Sizes"
132 msgstr "Смяна на размерите на снимката на екрана"
133
134 #: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
135 msgid "Cycle Screenshot Sizes Backward"
136 msgstr "Смяна на размерите на снимката на екрана наобратно"
137
138 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
139 msgid "Theme name"
140 msgstr "Име на темата"
141
142 #: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:6
143 msgid "The name of the theme, to be loaded from ~/.themes/name/gnome-shell"
144 msgstr ""
145 "Името на темата, която да бъде заредена от „~/.themes/name/gnome-shell“"
146
147 #: extensions/window-list/extension.js:98
148 msgid "Close"
149 msgstr "Затваряне"
150
151 #: extensions/window-list/extension.js:118
152 msgid "Unminimize"
153 msgstr "Деминимизиране"
154
155 #: extensions/window-list/extension.js:118
156 msgid "Minimize"
157 msgstr "Минимизиране"
158
159 #: extensions/window-list/extension.js:125
160 msgid "Unmaximize"
161 msgstr "Демаксимизиране"
162
163 #: extensions/window-list/extension.js:125
164 msgid "Maximize"
165 msgstr "Максимизиране"
166
167 #: extensions/window-list/extension.js:432
168 msgid "Minimize all"
169 msgstr "Минимизиране на всички"
170
171 #: extensions/window-list/extension.js:438
172 msgid "Unminimize all"
173 msgstr "Деминимизиране на всички"
174
175 #: extensions/window-list/extension.js:444
176 msgid "Maximize all"
177 msgstr "Максимизиране на всички"
178
179 #: extensions/window-list/extension.js:452
180 msgid "Unmaximize all"
181 msgstr "Демаксимизиране на всички"
182
183 #: extensions/window-list/extension.js:460
184 msgid "Close all"
185 msgstr "Затваряне на всички"
186
187 #: extensions/window-list/extension.js:737
188 msgid "Window List"
189 msgstr "Списък на прозорците"
190
191 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:12
192 msgid "When to group windows"
193 msgstr "Кога прозорците да се групират"
194
195 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:13
196 msgid ""
197 "Decides when to group windows from the same application on the window list. "
198 "Possible values are “never”, “auto” and “always”."
199 msgstr ""
200 "Кога прозорците на една програма да се групират в списъка с прозорците. "
201 "Възможните стойности са „never“ (никога), „auto“ (автоматично) и "
202 "„always“ (винаги)."
203
204 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:20
205 #: extensions/window-list/prefs.js:100
206 msgid "Show windows from all workspaces"
207 msgstr "Да се показват прозорците от всички работни плотове"
208
209 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:21
210 msgid "Whether to show windows from all workspaces or only the current one."
211 msgstr ""
212 "Дали да се показват прозорците от всички работни плотове или само от текущия."
213
214 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:27
215 msgid "Show the window list on all monitors"
216 msgstr "Извеждане на списъка с прозорци на всички монитори"
217
218 #: extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml:28
219 msgid ""
220 "Whether to show the window list on all connected monitors or only on the "
221 "primary one."
222 msgstr ""
223 "Дали списъкът с прозорци да се извежда на всички монитори или само на "
224 "основния"
225
226 #: extensions/window-list/prefs.js:29
227 msgid "Window Grouping"
228 msgstr "Групиране на прозорци"
229
230 #: extensions/window-list/prefs.js:58
231 msgid "Never group windows"
232 msgstr "Никога да не се групират"
233
234 #: extensions/window-list/prefs.js:59
235 msgid "Group windows when space is limited"
236 msgstr "Групиране при ограничено място"
237
238 #: extensions/window-list/prefs.js:60
239 msgid "Always group windows"
240 msgstr "Винаги да се групират"
241
242 #: extensions/window-list/prefs.js:94
243 msgid "Show on all monitors"
244 msgstr "На всички монитори"
245
246 #: extensions/window-list/workspaceIndicator.js:249
247 #: extensions/workspace-indicator/extension.js:255
248 msgid "Workspace Indicator"
249 msgstr "Индикатор на работните плотове"
250
251 #: extensions/workspace-indicator/prefs.js:34
252 msgid "Workspace Names"
253 msgstr "Имена на работните плотове"
254
255 #: extensions/workspace-indicator/prefs.js:67
256 #, javascript-format
257 msgid "Workspace %d"
258 msgstr "Работен плот %d"
259
260 #: extensions/workspace-indicator/prefs.js:208
261 msgid "Add Workspace"
262 msgstr "Добавяне на работен плот"