Compare commits
55 Commits
3.38.2
...
40.alpha.1
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e3d6465eb | |||
| d381a0b89b | |||
| 5df0fa145b | |||
| f0ff0e1400 | |||
| 53f5a92dc8 | |||
| d5c31273ee | |||
| 22ea58a849 | |||
| 67d96993ce | |||
| 96dd4f9835 | |||
| 3bef6be7c1 | |||
| b83d38a72e | |||
| 5b73960f34 | |||
| 505a7f4ac9 | |||
| e8acfb2b51 | |||
| dcd5dc4c7f | |||
| 2702cdf889 | |||
| 669e7c32a2 | |||
| 294eb0feb5 | |||
| a7ddbd0d53 | |||
| c745dd6362 | |||
| a4cf9f956e | |||
| 02aa68b24a | |||
| 4e731e1dce | |||
| eee341e907 | |||
| aad96bb1c4 | |||
| 50d3ee5703 | |||
| 08dfb78815 | |||
| 6949a5d075 | |||
| 893d3b0473 | |||
| f5128e13f2 | |||
| 8318ea919f | |||
| bde20e78f0 | |||
| 02db9525e7 | |||
| 8d4586bd57 | |||
| 8872659621 | |||
| 46c7677643 | |||
| 4b9f4b1b63 | |||
| b64c93897b | |||
| a7939f18d1 | |||
| 15efbc29be | |||
| 6e5466a4ec | |||
| 737c897624 | |||
| c317a876dd | |||
| 72c67aacc4 | |||
| ba7e3fc0b5 | |||
| 61cf679b8c | |||
| ba55bacab4 | |||
| 9445bd2205 | |||
| 6ed1f45ffd | |||
| 81be1d2e2f | |||
| 52abf74088 | |||
| 623bc6dbf3 | |||
| 04b23ec68f | |||
| b65f362f0d | |||
| 7c30f35b12 |
+71
-18
@@ -1,33 +1,86 @@
|
|||||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/extension-ci:v2
|
include:
|
||||||
|
- remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
|
||||||
|
|
||||||
|
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/33:2020-11-17.0
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
- pre_review
|
||||||
- review
|
- review
|
||||||
- build
|
- build
|
||||||
|
|
||||||
|
default:
|
||||||
|
# Cancel jobs if newer commits are pushed to the branch
|
||||||
|
interruptible: true
|
||||||
|
# Auto-retry jobs in case of infra failures
|
||||||
|
retry:
|
||||||
|
max: 1
|
||||||
|
when:
|
||||||
|
- 'runner_system_failure'
|
||||||
|
- 'stuck_or_timeout_failure'
|
||||||
|
- 'scheduler_failure'
|
||||||
|
- 'api_failure'
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
LINT_LOG: "eslint-report.txt"
|
LINT_LOG: "eslint-report.xml"
|
||||||
JS_LOG: "js-report.txt"
|
JS_LOG: "js-report.txt"
|
||||||
|
|
||||||
.only_default: &only_default
|
workflow:
|
||||||
only:
|
rules:
|
||||||
- branches
|
- if: '$CI_MERGE_REQUEST_IID'
|
||||||
- tags
|
- if: '$CI_COMMIT_TAG'
|
||||||
- merge_requests
|
- if: '$CI_COMMIT_BRANCH'
|
||||||
|
|
||||||
|
.pipeline_guard: &pipeline_guard
|
||||||
|
rules:
|
||||||
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||||
|
- if: '$CI_COMMIT_TAG'
|
||||||
|
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /^gnome-[0-9-]+$/'
|
||||||
|
- when: 'manual'
|
||||||
|
|
||||||
check_commit_log:
|
check_commit_log:
|
||||||
image: registry.gitlab.gnome.org/gnome/gjs:fedora.static-analysis
|
extends:
|
||||||
stage: review
|
- .fdo.ci-fairy
|
||||||
|
stage: pre_review
|
||||||
script:
|
script:
|
||||||
- ./.gitlab-ci/check-commit-log.sh
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
||||||
only:
|
then
|
||||||
- merge_requests
|
ci-fairy check-commits --junit-xml=commit-message-junit-report.xml ;
|
||||||
|
else
|
||||||
|
echo "Not a merge request" ;
|
||||||
|
fi
|
||||||
|
<<: *pipeline_guard
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- commit-message-junit-report.xml
|
||||||
|
reports:
|
||||||
|
junit: commit-message-junit-report.xml
|
||||||
|
|
||||||
|
check-merge-request:
|
||||||
|
extends:
|
||||||
|
- .fdo.ci-fairy
|
||||||
|
stage: pre_review
|
||||||
|
script:
|
||||||
|
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
||||||
|
then
|
||||||
|
ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request-report.xml ;
|
||||||
|
else
|
||||||
|
echo "Not a merge request" ;
|
||||||
|
fi
|
||||||
|
<<: *pipeline_guard
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 week
|
||||||
|
paths:
|
||||||
|
- check-merge-request-report.xml
|
||||||
|
reports:
|
||||||
|
junit: check-merge-request-report.xml
|
||||||
|
|
||||||
js_check:
|
js_check:
|
||||||
stage: review
|
stage: review
|
||||||
script:
|
script:
|
||||||
- find extensions -name '*.js' -exec js68 -c -s '{}' ';' 2>&1 | tee $JS_LOG
|
- find extensions -name '*.js' -exec js78 -c '{}' ';' 2>&1 | tee $JS_LOG
|
||||||
- (! grep -q . $JS_LOG)
|
- (! grep -q . $JS_LOG)
|
||||||
<<: *only_default
|
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- ${JS_LOG}
|
- ${JS_LOG}
|
||||||
@@ -36,18 +89,18 @@ js_check:
|
|||||||
eslint:
|
eslint:
|
||||||
stage: review
|
stage: review
|
||||||
script:
|
script:
|
||||||
- eslint -o $LINT_LOG extensions --no-color || { cat $LINT_LOG; false; }
|
- eslint -o $LINT_LOG -f junit extensions
|
||||||
<<: *only_default
|
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- ${LINT_LOG}
|
- ${LINT_LOG}
|
||||||
when: on_failure
|
reports:
|
||||||
|
junit: ${LINT_LOG}
|
||||||
|
|
||||||
build-bundles:
|
build-bundles:
|
||||||
stage: build
|
stage: build
|
||||||
|
needs: ["check_commit_log"]
|
||||||
script:
|
script:
|
||||||
- ./export-zips.sh
|
- ./export-zips.sh
|
||||||
<<: *only_default
|
|
||||||
artifacts:
|
artifacts:
|
||||||
name: 'Extension bundles'
|
name: 'Extension bundles'
|
||||||
expose_as: 'Get Extension bundles here'
|
expose_as: 'Get Extension bundles here'
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [ -z "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then
|
|
||||||
echo Cannot review non-merge request
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
git fetch $CI_MERGE_REQUEST_PROJECT_URL.git $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
|
|
||||||
|
|
||||||
branch_point=$(git merge-base HEAD FETCH_HEAD)
|
|
||||||
|
|
||||||
commits=$(git log --format='format:%H' $branch_point..$CI_COMMIT_SHA)
|
|
||||||
|
|
||||||
if [ -z "$commits" ]; then
|
|
||||||
echo Commit range empty
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
function commit_message_has_url() {
|
|
||||||
commit=$1
|
|
||||||
commit_message=$(git show -s --format='format:%b' $commit)
|
|
||||||
echo "$commit_message" | grep -qe "\($CI_MERGE_REQUEST_PROJECT_URL/\(-/\)\?\(issues\|merge_requests\)/[0-9]\+\|https://bugzilla.gnome.org/show_bug.cgi?id=[0-9]\+\)"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
for commit in $commits; do
|
|
||||||
if ! commit_message_has_url $commit; then
|
|
||||||
echo "Missing merge request or issue URL on commit $(echo $commit | cut -c -8)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
patterns:
|
||||||
|
deny:
|
||||||
|
- regex: '^$CI_MERGE_REQUEST_PROJECT_URL/(-/)?merge_requests/$CI_MERGE_REQUEST_IID$'
|
||||||
|
message: Commit message must not contain a link to its own merge request
|
||||||
|
- regex: '^extensions/'
|
||||||
|
message: Commit message subject should not be prefixed with 'extensions/', use the extension name instead
|
||||||
|
where: subject
|
||||||
|
- regex: '^[^:]+: [a-z]'
|
||||||
|
message: "Commit message subject should be properly Capitalized. E.g. 'window: Marginalize extradicity'"
|
||||||
|
where: subject
|
||||||
|
- regex: '^\S*\.js:'
|
||||||
|
message: Commit message subject prefix should not include .js
|
||||||
|
where: subject
|
||||||
@@ -1,3 +1,30 @@
|
|||||||
|
40.alpha.1
|
||||||
|
==========
|
||||||
|
* Don't depend on sassc when building from tarball [Florian; !150]
|
||||||
|
* Port extensions preferences to GTK4 [Florian; !148]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Jonas; !149, !151, !153]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Jonas Dreßler, Florian Müllner
|
||||||
|
|
||||||
|
40.alpha
|
||||||
|
========
|
||||||
|
* window-list: Honor changes in skip-taskbar property [Sergio; !130]
|
||||||
|
* window-list, workspace-indicator: Adjust to 3.38 changes [Florian; !133]
|
||||||
|
* window-list, workspace-indicator: Improve previews in workspace thumbs
|
||||||
|
[Florian; #260, !142]
|
||||||
|
* auto-move: Improve behavior on multi-monitor setups [Florian; !135]
|
||||||
|
* windowNavigator: Adjust to 3.38 changes [Thun; #259]
|
||||||
|
* Misc. bug fixes and cleanups [Florian, Jonas Å, Jordan, Ray; !131, !136,
|
||||||
|
!137, !140, !141, !144, !146, !145]
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Sergio Costas, Florian Müllner, Jordan Petridis, Thun Pin, Ray Strode,
|
||||||
|
Jonas Ådahl
|
||||||
|
|
||||||
|
Translators:
|
||||||
|
Fabio Tomat [fur], Jordi Mas [ca]
|
||||||
|
|
||||||
3.38.1
|
3.38.1
|
||||||
======
|
======
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,18 @@ $variant: 'light';
|
|||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: $fg_color;
|
color: $fg_color;
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
|
transition-duration: 0ms;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0px;
|
||||||
|
|
||||||
|
&.clock-display {
|
||||||
|
.clock {
|
||||||
|
transition-duration: 0ms;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: lighten($fg_color,10%);
|
color: lighten($fg_color,10%);
|
||||||
text-shadow: none;
|
text-shadow: none;
|
||||||
|
|||||||
+1
-1
Submodule data/gnome-shell-sass updated: 940aff8ce7...9c000f50d0
+50
-10
@@ -28,7 +28,42 @@ theme_sources = files(
|
|||||||
'gnome-shell-sass/_colors.scss',
|
'gnome-shell-sass/_colors.scss',
|
||||||
'gnome-shell-sass/_common.scss',
|
'gnome-shell-sass/_common.scss',
|
||||||
'gnome-shell-sass/_drawing.scss',
|
'gnome-shell-sass/_drawing.scss',
|
||||||
'gnome-shell-sass/_high-contrast-colors.scss'
|
'gnome-shell-sass/_high-contrast-colors.scss',
|
||||||
|
'gnome-shell-sass/_widgets.scss',
|
||||||
|
'gnome-shell-sass/widgets/_a11y.scss',
|
||||||
|
'gnome-shell-sass/widgets/_app-grid.scss',
|
||||||
|
'gnome-shell-sass/widgets/_base.scss',
|
||||||
|
'gnome-shell-sass/widgets/_buttons.scss',
|
||||||
|
'gnome-shell-sass/widgets/_calendar.scss',
|
||||||
|
'gnome-shell-sass/widgets/_check-box.scss',
|
||||||
|
'gnome-shell-sass/widgets/_corner-ripple.scss',
|
||||||
|
'gnome-shell-sass/widgets/_dash.scss',
|
||||||
|
'gnome-shell-sass/widgets/_dialogs.scss',
|
||||||
|
'gnome-shell-sass/widgets/_entries.scss',
|
||||||
|
'gnome-shell-sass/widgets/_hotplug.scss',
|
||||||
|
'gnome-shell-sass/widgets/_ibus-popup.scss',
|
||||||
|
'gnome-shell-sass/widgets/_keyboard.scss',
|
||||||
|
'gnome-shell-sass/widgets/_login-dialog.scss',
|
||||||
|
'gnome-shell-sass/widgets/_looking-glass.scss',
|
||||||
|
'gnome-shell-sass/widgets/_message-list.scss',
|
||||||
|
'gnome-shell-sass/widgets/_misc.scss',
|
||||||
|
'gnome-shell-sass/widgets/_network-dialog.scss',
|
||||||
|
'gnome-shell-sass/widgets/_notifications.scss',
|
||||||
|
'gnome-shell-sass/widgets/_osd.scss',
|
||||||
|
'gnome-shell-sass/widgets/_overview.scss',
|
||||||
|
'gnome-shell-sass/widgets/_panel.scss',
|
||||||
|
'gnome-shell-sass/widgets/_popovers.scss',
|
||||||
|
'gnome-shell-sass/widgets/_screen-shield.scss',
|
||||||
|
'gnome-shell-sass/widgets/_scrollbars.scss',
|
||||||
|
'gnome-shell-sass/widgets/_search-entry.scss',
|
||||||
|
'gnome-shell-sass/widgets/_search-results.scss',
|
||||||
|
'gnome-shell-sass/widgets/_slider.scss',
|
||||||
|
'gnome-shell-sass/widgets/_switcher-popup.scss',
|
||||||
|
'gnome-shell-sass/widgets/_switches.scss',
|
||||||
|
'gnome-shell-sass/widgets/_tiled-previews.scss',
|
||||||
|
'gnome-shell-sass/widgets/_window-picker.scss',
|
||||||
|
'gnome-shell-sass/widgets/_workspace-switcher.scss',
|
||||||
|
'gnome-shell-sass/widgets/_workspace-thumbnails.scss'
|
||||||
)
|
)
|
||||||
|
|
||||||
theme_data = [
|
theme_data = [
|
||||||
@@ -41,15 +76,20 @@ theme_data = [
|
|||||||
'gnome-classic-high-contrast.css'
|
'gnome-classic-high-contrast.css'
|
||||||
]
|
]
|
||||||
|
|
||||||
style = 'gnome-classic'
|
stylesheet = 'gnome-classic.css'
|
||||||
custom_target(style + '.css',
|
if fs.exists(stylesheet)
|
||||||
input: style + '.scss',
|
install_data(stylesheet, install_dir: themedir)
|
||||||
output: style + '.css',
|
else
|
||||||
depend_files: theme_sources,
|
sassc = find_program('sassc', required: true)
|
||||||
command: [sassc, '-a', '@INPUT@', '@OUTPUT@'],
|
custom_target(stylesheet,
|
||||||
install: true,
|
input: fs.replace_suffix(stylesheet, '.scss'),
|
||||||
install_dir: themedir
|
output: stylesheet,
|
||||||
)
|
depend_files: theme_sources,
|
||||||
|
command: [sassc, '-a', '@INPUT@', '@OUTPUT@'],
|
||||||
|
install: true,
|
||||||
|
install_dir: themedir
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
|
||||||
install_data(theme_data, install_dir: themedir)
|
install_data(theme_data, install_dir: themedir)
|
||||||
|
|
||||||
|
|||||||
@@ -116,10 +116,12 @@ function myCheckWorkspaces() {
|
|||||||
let keepAliveWorkspaces = [];
|
let keepAliveWorkspaces = [];
|
||||||
let foundNonEmpty = false;
|
let foundNonEmpty = false;
|
||||||
for (let i = this._workspaces.length - 1; i >= 0; i--) {
|
for (let i = this._workspaces.length - 1; i >= 0; i--) {
|
||||||
if (!foundNonEmpty)
|
if (!foundNonEmpty) {
|
||||||
foundNonEmpty = this._workspaces[i].list_windows().length > 0;
|
foundNonEmpty = this._workspaces[i].list_windows().some(
|
||||||
else if (!this._workspaces[i]._keepAliveId)
|
w => !w.is_on_all_workspaces());
|
||||||
|
} else if (!this._workspaces[i]._keepAliveId) {
|
||||||
keepAliveWorkspaces.push(this._workspaces[i]);
|
keepAliveWorkspaces.push(this._workspaces[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure the original method only removes empty workspaces at the end
|
// make sure the original method only removes empty workspaces at the end
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
margin_start: 36,
|
margin_start: 36,
|
||||||
margin_end: 36,
|
margin_end: 36,
|
||||||
});
|
});
|
||||||
this.add(box);
|
this.set_child(box);
|
||||||
|
|
||||||
box.add(new Gtk.Label({
|
box.append(new Gtk.Label({
|
||||||
label: '<b>%s</b>'.format(_('Workspace Rules')),
|
label: '<b>%s</b>'.format(_('Workspace Rules')),
|
||||||
use_markup: true,
|
use_markup: true,
|
||||||
halign: Gtk.Align.START,
|
halign: Gtk.Align.START,
|
||||||
@@ -40,9 +40,9 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
this._list = new Gtk.ListBox({
|
this._list = new Gtk.ListBox({
|
||||||
selection_mode: Gtk.SelectionMode.NONE,
|
selection_mode: Gtk.SelectionMode.NONE,
|
||||||
valign: Gtk.Align.START,
|
valign: Gtk.Align.START,
|
||||||
|
show_separators: true,
|
||||||
});
|
});
|
||||||
this._list.set_header_func(this._updateHeader.bind(this));
|
box.append(this._list);
|
||||||
box.add(this._list);
|
|
||||||
|
|
||||||
const context = this._list.get_style_context();
|
const context = this._list.get_style_context();
|
||||||
const cssProvider = new Gtk.CssProvider();
|
const cssProvider = new Gtk.CssProvider();
|
||||||
@@ -53,7 +53,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
context.add_class('frame');
|
context.add_class('frame');
|
||||||
|
|
||||||
this._list.add(new NewRuleRow());
|
this._list.append(new NewRuleRow());
|
||||||
|
|
||||||
this._actionGroup = new Gio.SimpleActionGroup();
|
this._actionGroup = new Gio.SimpleActionGroup();
|
||||||
this._list.insert_action_group('rules', this._actionGroup);
|
this._list.insert_action_group('rules', this._actionGroup);
|
||||||
@@ -84,12 +84,10 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
this._sync();
|
this._sync();
|
||||||
|
|
||||||
this.connect('destroy', () => this._settings.run_dispose());
|
this.connect('destroy', () => this._settings.run_dispose());
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onAddActivated() {
|
_onAddActivated() {
|
||||||
const dialog = new NewRuleDialog(this.get_toplevel());
|
const dialog = new NewRuleDialog(this.get_root());
|
||||||
dialog.connect('response', (dlg, id) => {
|
dialog.connect('response', (dlg, id) => {
|
||||||
const appInfo = id === Gtk.ResponseType.OK
|
const appInfo = id === Gtk.ResponseType.OK
|
||||||
? dialog.get_widget().get_app_info() : null;
|
? dialog.get_widget().get_app_info() : null;
|
||||||
@@ -101,6 +99,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
}
|
}
|
||||||
dialog.destroy();
|
dialog.destroy();
|
||||||
});
|
});
|
||||||
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
_onRemoveActivated(action, param) {
|
_onRemoveActivated(action, param) {
|
||||||
@@ -113,7 +112,7 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_getRuleRows() {
|
_getRuleRows() {
|
||||||
return this._list.get_children().filter(row => !!row.id);
|
return [...this._list].filter(row => !!row.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
@@ -139,17 +138,11 @@ class AutoMoveSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
|
|
||||||
const removed = oldRules.filter(
|
const removed = oldRules.filter(
|
||||||
({ id }) => !newRules.find(r => r.id === id));
|
({ id }) => !newRules.find(r => r.id === id));
|
||||||
removed.forEach(r => r.destroy());
|
removed.forEach(r => this._list.remove(r));
|
||||||
|
|
||||||
this._settings.unblock_signal_handler(this._changedId);
|
this._settings.unblock_signal_handler(this._changedId);
|
||||||
this._updateAction.enabled = true;
|
this._updateAction.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateHeader(row, before) {
|
|
||||||
if (!before || row.get_header())
|
|
||||||
return;
|
|
||||||
row.set_header(new Gtk.Separator());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const RuleRow = GObject.registerClass({
|
const RuleRow = GObject.registerClass({
|
||||||
@@ -165,12 +158,6 @@ const RuleRow = GObject.registerClass({
|
|||||||
},
|
},
|
||||||
}, class RuleRow extends Gtk.ListBoxRow {
|
}, class RuleRow extends Gtk.ListBoxRow {
|
||||||
_init(appInfo, value) {
|
_init(appInfo, value) {
|
||||||
super._init({
|
|
||||||
activatable: false,
|
|
||||||
value,
|
|
||||||
});
|
|
||||||
this._appInfo = appInfo;
|
|
||||||
|
|
||||||
const box = new Gtk.Box({
|
const box = new Gtk.Box({
|
||||||
spacing: 6,
|
spacing: 6,
|
||||||
margin_top: 6,
|
margin_top: 6,
|
||||||
@@ -179,12 +166,19 @@ const RuleRow = GObject.registerClass({
|
|||||||
margin_end: 6,
|
margin_end: 6,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
super._init({
|
||||||
|
activatable: false,
|
||||||
|
value,
|
||||||
|
child: box,
|
||||||
|
});
|
||||||
|
this._appInfo = appInfo;
|
||||||
|
|
||||||
const icon = new Gtk.Image({
|
const icon = new Gtk.Image({
|
||||||
gicon: appInfo.get_icon(),
|
gicon: appInfo.get_icon(),
|
||||||
pixel_size: 32,
|
pixel_size: 32,
|
||||||
});
|
});
|
||||||
icon.get_style_context().add_class('icon-dropshadow');
|
icon.get_style_context().add_class('icon-dropshadow');
|
||||||
box.add(icon);
|
box.append(icon);
|
||||||
|
|
||||||
const label = new Gtk.Label({
|
const label = new Gtk.Label({
|
||||||
label: appInfo.get_display_name(),
|
label: appInfo.get_display_name(),
|
||||||
@@ -193,7 +187,7 @@ const RuleRow = GObject.registerClass({
|
|||||||
max_width_chars: 20,
|
max_width_chars: 20,
|
||||||
ellipsize: Pango.EllipsizeMode.END,
|
ellipsize: Pango.EllipsizeMode.END,
|
||||||
});
|
});
|
||||||
box.add(label);
|
box.append(label);
|
||||||
|
|
||||||
const spinButton = new Gtk.SpinButton({
|
const spinButton = new Gtk.SpinButton({
|
||||||
adjustment: new Gtk.Adjustment({
|
adjustment: new Gtk.Adjustment({
|
||||||
@@ -207,26 +201,17 @@ const RuleRow = GObject.registerClass({
|
|||||||
this.bind_property('value',
|
this.bind_property('value',
|
||||||
spinButton, 'value',
|
spinButton, 'value',
|
||||||
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL);
|
GObject.BindingFlags.SYNC_CREATE | GObject.BindingFlags.BIDIRECTIONAL);
|
||||||
box.add(spinButton);
|
box.append(spinButton);
|
||||||
|
|
||||||
const button = new Gtk.Button({
|
const button = new Gtk.Button({
|
||||||
action_name: 'rules.remove',
|
action_name: 'rules.remove',
|
||||||
action_target: new GLib.Variant('s', this.id),
|
action_target: new GLib.Variant('s', this.id),
|
||||||
image: new Gtk.Image({
|
icon_name: 'edit-delete-symbolic',
|
||||||
icon_name: 'edit-delete-symbolic',
|
|
||||||
pixel_size: 16,
|
|
||||||
}),
|
|
||||||
});
|
});
|
||||||
box.add(button);
|
box.append(button);
|
||||||
|
|
||||||
this.add(box);
|
this.connect('notify::value',
|
||||||
|
() => this.activate_action('rules.update', null));
|
||||||
this.connect('notify::value', () => {
|
|
||||||
const actionGroup = this.get_action_group('rules');
|
|
||||||
actionGroup.activate_action('update', null);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get id() {
|
get id() {
|
||||||
@@ -239,19 +224,17 @@ class NewRuleRow extends Gtk.ListBoxRow {
|
|||||||
_init() {
|
_init() {
|
||||||
super._init({
|
super._init({
|
||||||
action_name: 'rules.add',
|
action_name: 'rules.add',
|
||||||
|
child: new Gtk.Image({
|
||||||
|
icon_name: 'list-add-symbolic',
|
||||||
|
pixel_size: 16,
|
||||||
|
margin_top: 12,
|
||||||
|
margin_bottom: 12,
|
||||||
|
margin_start: 12,
|
||||||
|
margin_end: 12,
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
this.get_accessible().set_name(_('Add Rule'));
|
this.update_property(
|
||||||
|
[Gtk.AccessibleProperty.LABEL], [_('Add Rule')]);
|
||||||
this.add(new Gtk.Image({
|
|
||||||
icon_name: 'list-add-symbolic',
|
|
||||||
pixel_size: 16,
|
|
||||||
margin_top: 12,
|
|
||||||
margin_bottom: 12,
|
|
||||||
margin_start: 12,
|
|
||||||
margin_end: 12,
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -273,8 +256,6 @@ class NewRuleDialog extends Gtk.AppChooserDialog {
|
|||||||
this.get_widget().connect('application-selected',
|
this.get_widget().connect('application-selected',
|
||||||
this._updateSensitivity.bind(this));
|
this._updateSensitivity.bind(this));
|
||||||
this._updateSensitivity();
|
this._updateSensitivity();
|
||||||
|
|
||||||
this.show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateSensitivity() {
|
_updateSensitivity() {
|
||||||
|
|||||||
@@ -103,7 +103,6 @@ class NaturalLayoutStrategy extends Workspace.LayoutStrategy {
|
|||||||
direction++;
|
direction++;
|
||||||
if (direction === 4)
|
if (direction === 4)
|
||||||
direction = 0;
|
direction = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let loopCounter = 0;
|
let loopCounter = 0;
|
||||||
|
|||||||
@@ -486,7 +486,6 @@ var PlacesManager = class {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_reloadBookmarks() {
|
_reloadBookmarks() {
|
||||||
|
|
||||||
this._bookmarks = [];
|
this._bookmarks = [];
|
||||||
|
|
||||||
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
|
let content = Shell.get_file_contents_utf8_sync(this._bookmarksFile.get_path());
|
||||||
|
|||||||
@@ -26,18 +26,21 @@ class UserThemePrefsWidget extends Gtk.ScrolledWindow {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const box = new Gtk.Box();
|
const box = new Gtk.Box();
|
||||||
this.add(box);
|
this.set_child(box);
|
||||||
|
|
||||||
this._list = new Gtk.ListBox({
|
this._list = new Gtk.ListBox({
|
||||||
selection_mode: Gtk.SelectionMode.NONE,
|
selection_mode: Gtk.SelectionMode.NONE,
|
||||||
|
show_separators: true,
|
||||||
halign: Gtk.Align.CENTER,
|
halign: Gtk.Align.CENTER,
|
||||||
valign: Gtk.Align.START,
|
valign: Gtk.Align.START,
|
||||||
hexpand: true,
|
hexpand: true,
|
||||||
margin: 60,
|
margin_start: 60,
|
||||||
|
margin_end: 60,
|
||||||
|
margin_top: 60,
|
||||||
|
margin_bottom: 60,
|
||||||
});
|
});
|
||||||
this._list.get_style_context().add_class('frame');
|
this._list.get_style_context().add_class('frame');
|
||||||
this._list.set_header_func(this._updateHeader.bind(this));
|
box.append(this._list);
|
||||||
box.add(this._list);
|
|
||||||
|
|
||||||
this._actionGroup = new Gio.SimpleActionGroup();
|
this._actionGroup = new Gio.SimpleActionGroup();
|
||||||
this._list.insert_action_group('theme', this._actionGroup);
|
this._list.insert_action_group('theme', this._actionGroup);
|
||||||
@@ -90,11 +93,10 @@ class UserThemePrefsWidget extends Gtk.ScrolledWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_addTheme(name) {
|
_addTheme(name) {
|
||||||
const row = new ThemeRow(name);
|
const row = new ThemeRow(name, this._settings);
|
||||||
this._rows.set(name, row);
|
this._rows.set(name, row);
|
||||||
|
|
||||||
this._list.add(row);
|
this._list.append(row);
|
||||||
row.show_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async _enumerateDir(dir) {
|
async _enumerateDir(dir) {
|
||||||
@@ -121,31 +123,28 @@ class UserThemePrefsWidget extends Gtk.ScrolledWindow {
|
|||||||
|
|
||||||
return fileInfos.map(info => info.get_name());
|
return fileInfos.map(info => info.get_name());
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateHeader(row, before) {
|
|
||||||
if (!before || row.get_header())
|
|
||||||
return;
|
|
||||||
row.set_header(new Gtk.Separator());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const ThemeRow = GObject.registerClass(
|
const ThemeRow = GObject.registerClass(
|
||||||
class ThemeRow extends Gtk.ListBoxRow {
|
class ThemeRow extends Gtk.ListBoxRow {
|
||||||
_init(name) {
|
_init(name, settings) {
|
||||||
this._name = new GLib.Variant('s', name);
|
this._name = name;
|
||||||
|
this._settings = settings;
|
||||||
super._init({
|
|
||||||
action_name: 'theme.name',
|
|
||||||
action_target: this._name,
|
|
||||||
});
|
|
||||||
|
|
||||||
const box = new Gtk.Box({
|
const box = new Gtk.Box({
|
||||||
spacing: 12,
|
spacing: 12,
|
||||||
margin: 12,
|
margin_start: 12,
|
||||||
|
margin_end: 12,
|
||||||
|
margin_top: 12,
|
||||||
|
margin_bottom: 12,
|
||||||
|
});
|
||||||
|
super._init({
|
||||||
|
action_name: 'theme.name',
|
||||||
|
action_target: new GLib.Variant('s', name),
|
||||||
|
child: box,
|
||||||
});
|
});
|
||||||
this.add(box);
|
|
||||||
|
|
||||||
box.add(new Gtk.Label({
|
box.append(new Gtk.Label({
|
||||||
label: name || 'Default',
|
label: name || 'Default',
|
||||||
hexpand: true,
|
hexpand: true,
|
||||||
xalign: 0,
|
xalign: 0,
|
||||||
@@ -157,24 +156,21 @@ class ThemeRow extends Gtk.ListBoxRow {
|
|||||||
icon_name: 'emblem-ok-symbolic',
|
icon_name: 'emblem-ok-symbolic',
|
||||||
pixel_size: 16,
|
pixel_size: 16,
|
||||||
});
|
});
|
||||||
box.add(this._checkmark);
|
box.append(this._checkmark);
|
||||||
|
|
||||||
box.show_all();
|
const id = this._settings.connect('changed::name',
|
||||||
|
this._syncCheckmark.bind(this));
|
||||||
|
this._syncCheckmark();
|
||||||
|
|
||||||
const id = this.connect('parent-set', () => {
|
this.connect('destroy', () => {
|
||||||
this.disconnect(id);
|
this._settings.disconnect(id);
|
||||||
|
this._settings = null;
|
||||||
const actionGroup = this.get_action_group('theme');
|
|
||||||
actionGroup.connect('action-state-changed::name',
|
|
||||||
this._syncCheckmark.bind(this));
|
|
||||||
this._syncCheckmark();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_syncCheckmark() {
|
_syncCheckmark() {
|
||||||
const actionGroup = this.get_action_group('theme');
|
const visible = this._name === this._settings.get_string('name');
|
||||||
const state = actionGroup.get_action_state('name');
|
this._checkmark.opacity = visible ? 1. : 0;
|
||||||
this._checkmark.opacity = this._name.equal(state);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -182,8 +178,5 @@ function init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function buildPrefsWidget() {
|
function buildPrefsWidget() {
|
||||||
let widget = new UserThemePrefsWidget();
|
return new UserThemePrefsWidget();
|
||||||
widget.show_all();
|
|
||||||
|
|
||||||
return widget;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -352,6 +352,9 @@ class WindowButton extends BaseButton {
|
|||||||
super._init(perMonitor, monitorIndex);
|
super._init(perMonitor, monitorIndex);
|
||||||
|
|
||||||
this.metaWindow = metaWindow;
|
this.metaWindow = metaWindow;
|
||||||
|
this._skipTaskbarId = metaWindow.connect('notify::skip-taskbar', () => {
|
||||||
|
this._updateVisibility();
|
||||||
|
});
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
|
|
||||||
this._windowTitle = new WindowTitle(this.metaWindow);
|
this._windowTitle = new WindowTitle(this.metaWindow);
|
||||||
@@ -412,6 +415,7 @@ class WindowButton extends BaseButton {
|
|||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
super._onDestroy();
|
super._onDestroy();
|
||||||
|
this.metaWindow.disconnect(this._skipTaskbarId);
|
||||||
this.metaWindow.disconnect(this._workspaceChangedId);
|
this.metaWindow.disconnect(this._workspaceChangedId);
|
||||||
global.display.disconnect(this._notifyFocusId);
|
global.display.disconnect(this._notifyFocusId);
|
||||||
this._contextMenu.destroy();
|
this._contextMenu.destroy();
|
||||||
@@ -608,7 +612,6 @@ class AppButton extends BaseButton {
|
|||||||
this._contextMenuManager.addMenu(this._appContextMenu);
|
this._contextMenuManager.addMenu(this._appContextMenu);
|
||||||
this.label_actor = this._multiWindowTitle.label_actor;
|
this.label_actor = this._multiWindowTitle.label_actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onClicked(actor, button) {
|
_onClicked(actor, button) {
|
||||||
@@ -783,9 +786,9 @@ class WindowList extends St.Widget {
|
|||||||
});
|
});
|
||||||
|
|
||||||
this._dragBeginId = Main.xdndHandler.connect('drag-begin',
|
this._dragBeginId = Main.xdndHandler.connect('drag-begin',
|
||||||
this._onDragBegin.bind(this));
|
this._monitorDrag.bind(this));
|
||||||
this._dragEndId = Main.xdndHandler.connect('drag-end',
|
this._dragEndId = Main.xdndHandler.connect('drag-end',
|
||||||
this._onDragEnd.bind(this));
|
this._stopMonitoringDrag.bind(this));
|
||||||
this._dragMonitor = {
|
this._dragMonitor = {
|
||||||
dragMotion: this._onDragMotion.bind(this),
|
dragMotion: this._onDragMotion.bind(this),
|
||||||
};
|
};
|
||||||
@@ -948,9 +951,6 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_onWindowAdded(ws, win) {
|
_onWindowAdded(ws, win) {
|
||||||
if (win.skip_taskbar)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!this._grouped)
|
if (!this._grouped)
|
||||||
this._checkGrouping();
|
this._checkGrouping();
|
||||||
|
|
||||||
@@ -1016,11 +1016,11 @@ class WindowList extends St.Widget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDragBegin() {
|
_monitorDrag() {
|
||||||
DND.addDragMonitor(this._dragMonitor);
|
DND.addDragMonitor(this._dragMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDragEnd() {
|
_stopMonitoringDrag() {
|
||||||
DND.removeDragMonitor(this._dragMonitor);
|
DND.removeDragMonitor(this._dragMonitor);
|
||||||
this._removeActivateTimeout();
|
this._removeActivateTimeout();
|
||||||
}
|
}
|
||||||
@@ -1094,6 +1094,7 @@ class WindowList extends St.Widget {
|
|||||||
|
|
||||||
global.display.disconnect(this._fullscreenChangedId);
|
global.display.disconnect(this._fullscreenChangedId);
|
||||||
|
|
||||||
|
this._stopMonitoringDrag();
|
||||||
Main.xdndHandler.disconnect(this._dragBeginId);
|
Main.xdndHandler.disconnect(this._dragBeginId);
|
||||||
Main.xdndHandler.disconnect(this._dragEndId);
|
Main.xdndHandler.disconnect(this._dragEndId);
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class WindowListPrefsWidget extends Gtk.Box {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let groupingLabel = '<b>%s</b>'.format(_('Window Grouping'));
|
let groupingLabel = '<b>%s</b>'.format(_('Window Grouping'));
|
||||||
this.add(new Gtk.Label({
|
this.append(new Gtk.Label({
|
||||||
label: groupingLabel, use_markup: true,
|
label: groupingLabel, use_markup: true,
|
||||||
halign: Gtk.Align.START,
|
halign: Gtk.Align.START,
|
||||||
}));
|
}));
|
||||||
@@ -37,7 +37,7 @@ class WindowListPrefsWidget extends Gtk.Box {
|
|||||||
spacing: 12,
|
spacing: 12,
|
||||||
margin_bottom: 12,
|
margin_bottom: 12,
|
||||||
});
|
});
|
||||||
this.add(box);
|
this.append(box);
|
||||||
|
|
||||||
const context = box.get_style_context();
|
const context = box.get_style_context();
|
||||||
const cssProvider = new Gtk.CssProvider();
|
const cssProvider = new Gtk.CssProvider();
|
||||||
@@ -70,13 +70,13 @@ class WindowListPrefsWidget extends Gtk.Box {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
radio = new Gtk.RadioButton({
|
radio = new Gtk.CheckButton({
|
||||||
active: !i,
|
active: !i,
|
||||||
label,
|
label,
|
||||||
group: radio,
|
group: radio,
|
||||||
margin_end: 12,
|
margin_end: 12,
|
||||||
});
|
});
|
||||||
box.add(radio);
|
box.append(radio);
|
||||||
|
|
||||||
if (currentMode === mode)
|
if (currentMode === mode)
|
||||||
currentRadio = radio;
|
currentRadio = radio;
|
||||||
@@ -94,15 +94,13 @@ class WindowListPrefsWidget extends Gtk.Box {
|
|||||||
label: _('Show on all monitors'),
|
label: _('Show on all monitors'),
|
||||||
});
|
});
|
||||||
this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
this._settings.bind('show-on-all-monitors', check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||||
this.add(check);
|
this.append(check);
|
||||||
|
|
||||||
check = new Gtk.CheckButton({
|
check = new Gtk.CheckButton({
|
||||||
label: _('Show windows from all workspaces'),
|
label: _('Show windows from all workspaces'),
|
||||||
});
|
});
|
||||||
this._settings.bind('display-all-workspaces', check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
this._settings.bind('display-all-workspaces', check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||||
this.add(check);
|
this.append(check);
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -24,27 +24,14 @@ class WindowPreview extends St.Button {
|
|||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
|
||||||
this._sizeChangedId = this._window.connect('size-changed',
|
this._sizeChangedId = this._window.connect('size-changed',
|
||||||
this._relayout.bind(this));
|
() => this.queue_relayout());
|
||||||
this._positionChangedId = this._window.connect('position-changed',
|
this._positionChangedId = this._window.connect('position-changed',
|
||||||
this._relayout.bind(this));
|
() => {
|
||||||
this._minimizedChangedId = this._window.connect('notify::minimized',
|
this._updateVisible();
|
||||||
this._relayout.bind(this));
|
this.queue_relayout();
|
||||||
this._monitorEnteredId = global.display.connect('window-entered-monitor',
|
|
||||||
this._relayout.bind(this));
|
|
||||||
this._monitorLeftId = global.display.connect('window-left-monitor',
|
|
||||||
this._relayout.bind(this));
|
|
||||||
|
|
||||||
// Do initial layout when we get a parent
|
|
||||||
let id = this.connect('parent-set', () => {
|
|
||||||
this.disconnect(id);
|
|
||||||
if (!this.get_parent())
|
|
||||||
return;
|
|
||||||
this._laterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
|
||||||
this._laterId = 0;
|
|
||||||
this._relayout();
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
});
|
this._minimizedChangedId = this._window.connect('notify::minimized',
|
||||||
|
this._updateVisible.bind(this));
|
||||||
|
|
||||||
this._focusChangedId = global.display.connect('notify::focus-window',
|
this._focusChangedId = global.display.connect('notify::focus-window',
|
||||||
this._onFocusChanged.bind(this));
|
this._onFocusChanged.bind(this));
|
||||||
@@ -52,19 +39,15 @@ class WindowPreview extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// needed for DND
|
// needed for DND
|
||||||
get realWindow() {
|
get metaWindow() {
|
||||||
return this._window.get_compositor_private();
|
return this._window;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._window.disconnect(this._sizeChangedId);
|
this._window.disconnect(this._sizeChangedId);
|
||||||
this._window.disconnect(this._positionChangedId);
|
this._window.disconnect(this._positionChangedId);
|
||||||
this._window.disconnect(this._minimizedChangedId);
|
this._window.disconnect(this._minimizedChangedId);
|
||||||
global.display.disconnect(this._monitorEnteredId);
|
|
||||||
global.display.disconnect(this._monitorLeftId);
|
|
||||||
global.display.disconnect(this._focusChangedId);
|
global.display.disconnect(this._focusChangedId);
|
||||||
if (this._laterId)
|
|
||||||
Meta.later_remove(this._laterId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onFocusChanged() {
|
_onFocusChanged() {
|
||||||
@@ -74,26 +57,42 @@ class WindowPreview extends St.Button {
|
|||||||
this.remove_style_class_name('active');
|
this.remove_style_class_name('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
_relayout() {
|
_updateVisible() {
|
||||||
let monitor = Main.layoutManager.findIndexForActor(this);
|
const monitor = Main.layoutManager.findIndexForActor(this);
|
||||||
this.visible = monitor === this._window.get_monitor() &&
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||||
|
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
||||||
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
||||||
this._window.showing_on_its_workspace();
|
this._window.showing_on_its_workspace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (!this.visible)
|
let WorkspaceLayout = GObject.registerClass(
|
||||||
return;
|
class WorkspaceLayout extends Clutter.LayoutManager {
|
||||||
|
vfunc_get_preferred_width() {
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
let workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
vfunc_get_preferred_height() {
|
||||||
let hscale = this.get_parent().allocation.get_width() / workArea.width;
|
return [0, 0];
|
||||||
let vscale = this.get_parent().allocation.get_height() / workArea.height;
|
}
|
||||||
|
|
||||||
let frameRect = this._window.get_frame_rect();
|
vfunc_allocate(container, box) {
|
||||||
this.set_size(
|
const monitor = Main.layoutManager.findIndexForActor(container);
|
||||||
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||||
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
const hscale = box.get_width() / workArea.width;
|
||||||
this.set_position(
|
const vscale = box.get_height() / workArea.height;
|
||||||
Math.round(frameRect.x * hscale),
|
|
||||||
Math.round(frameRect.y * vscale));
|
for (const child of container) {
|
||||||
|
const childBox = new Clutter.ActorBox();
|
||||||
|
const frameRect = child.metaWindow.get_frame_rect();
|
||||||
|
childBox.set_size(
|
||||||
|
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
||||||
|
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
||||||
|
childBox.set_origin(
|
||||||
|
Math.round((frameRect.x - workArea.x) * hscale),
|
||||||
|
Math.round((frameRect.y - workArea.y) * vscale));
|
||||||
|
child.allocate(childBox);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -103,7 +102,7 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
super._init({
|
super._init({
|
||||||
style_class: 'workspace',
|
style_class: 'workspace',
|
||||||
child: new Clutter.Actor({
|
child: new Clutter.Actor({
|
||||||
layout_manager: new Clutter.BinLayout(),
|
layout_manager: new WorkspaceLayout(),
|
||||||
clip_to_allocation: true,
|
clip_to_allocation: true,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@@ -134,16 +133,15 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
acceptDrop(source) {
|
acceptDrop(source) {
|
||||||
if (!source.realWindow)
|
if (!source.metaWindow)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let window = source.realWindow.get_meta_window();
|
this._moveWindow(source.metaWindow);
|
||||||
this._moveWindow(window);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDragOver(source) {
|
handleDragOver(source) {
|
||||||
if (source.realWindow)
|
if (source.metaWindow)
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
else
|
else
|
||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|||||||
@@ -1,45 +1,12 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
/* exported init */
|
/* exported init */
|
||||||
const { Clutter, GObject, St } = imports.gi;
|
const { Clutter, Graphene, GObject, St } = imports.gi;
|
||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Workspace = imports.ui.workspace;
|
const Workspace = imports.ui.workspace;
|
||||||
const WorkspacesView = imports.ui.workspacesView;
|
const WorkspacesView = imports.ui.workspacesView;
|
||||||
|
|
||||||
class MyWindowOverlay extends Workspace.WindowOverlay {
|
const WINDOW_SLOT = 4;
|
||||||
constructor(windowClone, parentActor) {
|
|
||||||
super(windowClone, parentActor);
|
|
||||||
|
|
||||||
this._id = null;
|
|
||||||
this._text = new St.Label({
|
|
||||||
style_class: 'extension-windowsNavigator-window-tooltip',
|
|
||||||
visible: false,
|
|
||||||
});
|
|
||||||
parentActor.add_actor(this._text);
|
|
||||||
}
|
|
||||||
|
|
||||||
showTooltip() {
|
|
||||||
this._parentActor.set_child_below_sibling(this._text, null);
|
|
||||||
this._text.show();
|
|
||||||
this._text.text = (this._windowClone.slotId + 1).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
hideTooltip() {
|
|
||||||
if (this._text && this._text.visible)
|
|
||||||
this._text.hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
relayout(animate) {
|
|
||||||
super.relayout(animate);
|
|
||||||
|
|
||||||
let [cloneX, cloneY, cloneWidth_, cloneHeight_] = this._windowClone.slot;
|
|
||||||
|
|
||||||
let textX = cloneX - 2;
|
|
||||||
let textY = cloneY - 2;
|
|
||||||
this._text.set_position(Math.floor(textX) + 5, Math.floor(textY) + 5);
|
|
||||||
this._parentActor.set_child_below_sibling(this._text, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var MyWorkspace = GObject.registerClass(
|
var MyWorkspace = GObject.registerClass(
|
||||||
class MyWorkspace extends Workspace.Workspace {
|
class MyWorkspace extends Workspace.Workspace {
|
||||||
@@ -61,57 +28,89 @@ class MyWorkspace extends Workspace.Workspace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vfunc_allocate(box) {
|
||||||
|
super.vfunc_allocate(box);
|
||||||
|
|
||||||
|
if (this._tip)
|
||||||
|
this._tip.allocate_preferred_size(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
showTooltip() {
|
showTooltip() {
|
||||||
if (!this._tip || !this._actualGeometry)
|
if (!this._tip)
|
||||||
return;
|
return;
|
||||||
this._tip.text = (this.metaWorkspace.index() + 1).toString();
|
this._tip.text = (this.metaWorkspace.index() + 1).toString();
|
||||||
|
|
||||||
// Hand code this instead of using _getSpacingAndPadding
|
|
||||||
// because that fails on empty workspaces
|
|
||||||
let node = this.get_theme_node();
|
|
||||||
let padding = {
|
|
||||||
left: node.get_padding(St.Side.LEFT),
|
|
||||||
top: node.get_padding(St.Side.TOP),
|
|
||||||
bottom: node.get_padding(St.Side.BOTTOM),
|
|
||||||
right: node.get_padding(St.Side.RIGHT),
|
|
||||||
};
|
|
||||||
|
|
||||||
let area = Workspace.padArea(this._actualGeometry, padding);
|
|
||||||
this._tip.x = area.x;
|
|
||||||
this._tip.y = area.y;
|
|
||||||
this._tip.show();
|
this._tip.show();
|
||||||
this.set_child_below_sibling(this._tip, null);
|
this.set_child_below_sibling(this._tip, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
hideTooltip() {
|
hideTooltip() {
|
||||||
if (!this._tip)
|
if (this._tip)
|
||||||
return;
|
this._tip.hide();
|
||||||
if (!this._tip.get_parent())
|
|
||||||
return;
|
|
||||||
this._tip.hide();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getWindowWithTooltip(id) {
|
getWindowWithTooltip(id) {
|
||||||
for (let i = 0; i < this._windows.length; i++) {
|
const slot = this.layout_manager._windowSlots[id - 1];
|
||||||
if (this._windows[i].slotId + 1 === id)
|
return slot ? slot[WINDOW_SLOT].metaWindow : null;
|
||||||
return this._windows[i].metaWindow;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
showWindowsTooltips() {
|
showWindowsTooltips() {
|
||||||
for (let i in this._windowOverlays) {
|
for (let i = 0; i < this.layout_manager._windowSlots.length; i++) {
|
||||||
if (this._windowOverlays[i])
|
if (this.layout_manager._windowSlots[i])
|
||||||
this._windowOverlays[i].showTooltip();
|
this.layout_manager._windowSlots[i][WINDOW_SLOT].showTooltip(`${i + 1}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hideWindowsTooltips() {
|
hideWindowsTooltips() {
|
||||||
for (let i in this._windowOverlays) {
|
for (let i in this.layout_manager._windowSlots) {
|
||||||
if (this._windowOverlays[i])
|
if (this.layout_manager._windowSlots[i])
|
||||||
this._windowOverlays[i].hideTooltip();
|
this.layout_manager._windowSlots[i][WINDOW_SLOT].hideTooltip();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// overriding _addWindowClone to apply the tooltip patch on the cloned
|
||||||
|
// windowPreview
|
||||||
|
_addWindowClone(metaWindow) {
|
||||||
|
const clone = super._addWindowClone(metaWindow);
|
||||||
|
|
||||||
|
// appling the tooltip patch
|
||||||
|
(function patchPreview() {
|
||||||
|
this._text = new St.Label({
|
||||||
|
style_class: 'extension-windowsNavigator-window-tooltip',
|
||||||
|
visible: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
this._text.add_constraint(new Clutter.BindConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
coordinate: Clutter.BindCoordinate.POSITION,
|
||||||
|
}));
|
||||||
|
this._text.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
align_axis: Clutter.AlignAxis.X_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({ x: 0.5, y: -1 }),
|
||||||
|
factor: this._closeButtonSide === St.Side.LEFT ? 1 : 0,
|
||||||
|
}));
|
||||||
|
this._text.add_constraint(new Clutter.AlignConstraint({
|
||||||
|
source: this._borderCenter,
|
||||||
|
align_axis: Clutter.AlignAxis.Y_AXIS,
|
||||||
|
pivot_point: new Graphene.Point({ x: -1, y: 0.5 }),
|
||||||
|
factor: 0,
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.add_child(this._text);
|
||||||
|
}).call(clone);
|
||||||
|
|
||||||
|
clone.showTooltip = function (text) {
|
||||||
|
this._text.set({ text });
|
||||||
|
this._text.show();
|
||||||
|
};
|
||||||
|
|
||||||
|
clone.hideTooltip = function () {
|
||||||
|
if (this._text && this._text.visible)
|
||||||
|
this._text.hide();
|
||||||
|
};
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var MyWorkspacesView = GObject.registerClass(
|
var MyWorkspacesView = GObject.registerClass(
|
||||||
@@ -244,19 +243,16 @@ class MyWorkspacesView extends WorkspacesView.WorkspacesView {
|
|||||||
|
|
||||||
class Extension {
|
class Extension {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._origWindowOverlay = Workspace.WindowOverlay;
|
|
||||||
this._origWorkspace = Workspace.Workspace;
|
this._origWorkspace = Workspace.Workspace;
|
||||||
this._origWorkspacesView = WorkspacesView.WorkspacesView;
|
this._origWorkspacesView = WorkspacesView.WorkspacesView;
|
||||||
}
|
}
|
||||||
|
|
||||||
enable() {
|
enable() {
|
||||||
Workspace.WindowOverlay = MyWindowOverlay;
|
|
||||||
Workspace.Workspace = MyWorkspace;
|
Workspace.Workspace = MyWorkspace;
|
||||||
WorkspacesView.WorkspacesView = MyWorkspacesView;
|
WorkspacesView.WorkspacesView = MyWorkspacesView;
|
||||||
}
|
}
|
||||||
|
|
||||||
disable() {
|
disable() {
|
||||||
Workspace.WindowOverlay = this._origWindowOverlay;
|
|
||||||
Workspace.Workspace = this._origWorkspace;
|
Workspace.Workspace = this._origWorkspace;
|
||||||
WorkspacesView.WorkspacesView = this._origWorkspacesView;
|
WorkspacesView.WorkspacesView = this._origWorkspacesView;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,27 +30,14 @@ class WindowPreview extends St.Button {
|
|||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
|
||||||
this._sizeChangedId = this._window.connect('size-changed',
|
this._sizeChangedId = this._window.connect('size-changed',
|
||||||
this._relayout.bind(this));
|
() => this.queue_relayout());
|
||||||
this._positionChangedId = this._window.connect('position-changed',
|
this._positionChangedId = this._window.connect('position-changed',
|
||||||
this._relayout.bind(this));
|
() => {
|
||||||
this._minimizedChangedId = this._window.connect('notify::minimized',
|
this._updateVisible();
|
||||||
this._relayout.bind(this));
|
this.queue_relayout();
|
||||||
this._monitorEnteredId = global.display.connect('window-entered-monitor',
|
|
||||||
this._relayout.bind(this));
|
|
||||||
this._monitorLeftId = global.display.connect('window-left-monitor',
|
|
||||||
this._relayout.bind(this));
|
|
||||||
|
|
||||||
// Do initial layout when we get a parent
|
|
||||||
let id = this.connect('parent-set', () => {
|
|
||||||
this.disconnect(id);
|
|
||||||
if (!this.get_parent())
|
|
||||||
return;
|
|
||||||
this._laterId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
|
||||||
this._laterId = 0;
|
|
||||||
this._relayout();
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
});
|
this._minimizedChangedId = this._window.connect('notify::minimized',
|
||||||
|
this._updateVisible.bind(this));
|
||||||
|
|
||||||
this._focusChangedId = global.display.connect('notify::focus-window',
|
this._focusChangedId = global.display.connect('notify::focus-window',
|
||||||
this._onFocusChanged.bind(this));
|
this._onFocusChanged.bind(this));
|
||||||
@@ -58,19 +45,15 @@ class WindowPreview extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// needed for DND
|
// needed for DND
|
||||||
get realWindow() {
|
get metaWindow() {
|
||||||
return this._window.get_compositor_private();
|
return this._window;
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._window.disconnect(this._sizeChangedId);
|
this._window.disconnect(this._sizeChangedId);
|
||||||
this._window.disconnect(this._positionChangedId);
|
this._window.disconnect(this._positionChangedId);
|
||||||
this._window.disconnect(this._minimizedChangedId);
|
this._window.disconnect(this._minimizedChangedId);
|
||||||
global.display.disconnect(this._monitorEnteredId);
|
|
||||||
global.display.disconnect(this._monitorLeftId);
|
|
||||||
global.display.disconnect(this._focusChangedId);
|
global.display.disconnect(this._focusChangedId);
|
||||||
if (this._laterId)
|
|
||||||
Meta.later_remove(this._laterId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_onFocusChanged() {
|
_onFocusChanged() {
|
||||||
@@ -80,26 +63,42 @@ class WindowPreview extends St.Button {
|
|||||||
this.remove_style_class_name('active');
|
this.remove_style_class_name('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
_relayout() {
|
_updateVisible() {
|
||||||
let monitor = Main.layoutManager.findIndexForActor(this);
|
const monitor = Main.layoutManager.findIndexForActor(this);
|
||||||
this.visible = monitor === this._window.get_monitor() &&
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||||
|
this.visible = this._window.get_frame_rect().overlap(workArea) &&
|
||||||
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
this._window.window_type !== Meta.WindowType.DESKTOP &&
|
||||||
this._window.showing_on_its_workspace();
|
this._window.showing_on_its_workspace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (!this.visible)
|
let WorkspaceLayout = GObject.registerClass(
|
||||||
return;
|
class WorkspaceLayout extends Clutter.LayoutManager {
|
||||||
|
vfunc_get_preferred_width() {
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
let workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
vfunc_get_preferred_height() {
|
||||||
let hscale = this.get_parent().allocation.get_width() / workArea.width;
|
return [0, 0];
|
||||||
let vscale = this.get_parent().allocation.get_height() / workArea.height;
|
}
|
||||||
|
|
||||||
let frameRect = this._window.get_frame_rect();
|
vfunc_allocate(container, box) {
|
||||||
this.set_size(
|
const monitor = Main.layoutManager.findIndexForActor(container);
|
||||||
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor);
|
||||||
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
const hscale = box.get_width() / workArea.width;
|
||||||
this.set_position(
|
const vscale = box.get_height() / workArea.height;
|
||||||
Math.round(frameRect.x * hscale),
|
|
||||||
Math.round(frameRect.y * vscale));
|
for (const child of container) {
|
||||||
|
const childBox = new Clutter.ActorBox();
|
||||||
|
const frameRect = child.metaWindow.get_frame_rect();
|
||||||
|
childBox.set_size(
|
||||||
|
Math.round(Math.min(frameRect.width, workArea.width) * hscale),
|
||||||
|
Math.round(Math.min(frameRect.height, workArea.height) * vscale));
|
||||||
|
childBox.set_origin(
|
||||||
|
Math.round((frameRect.x - workArea.x) * hscale),
|
||||||
|
Math.round((frameRect.y - workArea.y) * vscale));
|
||||||
|
child.allocate(childBox);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -109,7 +108,7 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
super._init({
|
super._init({
|
||||||
style_class: 'workspace',
|
style_class: 'workspace',
|
||||||
child: new Clutter.Actor({
|
child: new Clutter.Actor({
|
||||||
layout_manager: new Clutter.BinLayout(),
|
layout_manager: new WorkspaceLayout(),
|
||||||
clip_to_allocation: true,
|
clip_to_allocation: true,
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@@ -140,16 +139,15 @@ class WorkspaceThumbnail extends St.Button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
acceptDrop(source) {
|
acceptDrop(source) {
|
||||||
if (!source.realWindow)
|
if (!source.metaWindow)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
let window = source.realWindow.get_meta_window();
|
this._moveWindow(source.metaWindow);
|
||||||
this._moveWindow(window);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleDragOver(source) {
|
handleDragOver(source) {
|
||||||
if (source.realWindow)
|
if (source.metaWindow)
|
||||||
return DND.DragMotionResult.MOVE_DROP;
|
return DND.DragMotionResult.MOVE_DROP;
|
||||||
else
|
else
|
||||||
return DND.DragMotionResult.CONTINUE;
|
return DND.DragMotionResult.CONTINUE;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// -*- 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 { Gdk, Gio, GLib, GObject, Gtk, Pango } = imports.gi;
|
const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
|
||||||
|
|
||||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||||
const _ = Gettext.gettext;
|
const _ = Gettext.gettext;
|
||||||
@@ -28,9 +28,9 @@ class WorkspaceSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
margin_start: 36,
|
margin_start: 36,
|
||||||
margin_end: 36,
|
margin_end: 36,
|
||||||
});
|
});
|
||||||
this.add(box);
|
this.set_child(box);
|
||||||
|
|
||||||
box.add(new Gtk.Label({
|
box.append(new Gtk.Label({
|
||||||
label: '<b>%s</b>'.format(_('Workspace Names')),
|
label: '<b>%s</b>'.format(_('Workspace Names')),
|
||||||
use_markup: true,
|
use_markup: true,
|
||||||
halign: Gtk.Align.START,
|
halign: Gtk.Align.START,
|
||||||
@@ -39,10 +39,10 @@ class WorkspaceSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
this._list = new Gtk.ListBox({
|
this._list = new Gtk.ListBox({
|
||||||
selection_mode: Gtk.SelectionMode.NONE,
|
selection_mode: Gtk.SelectionMode.NONE,
|
||||||
valign: Gtk.Align.START,
|
valign: Gtk.Align.START,
|
||||||
|
show_separators: true,
|
||||||
});
|
});
|
||||||
this._list.set_header_func(this._updateHeader.bind(this));
|
|
||||||
this._list.connect('row-activated', (l, row) => row.edit());
|
this._list.connect('row-activated', (l, row) => row.edit());
|
||||||
box.add(this._list);
|
box.append(this._list);
|
||||||
|
|
||||||
const context = this._list.get_style_context();
|
const context = this._list.get_style_context();
|
||||||
const cssProvider = new Gtk.CssProvider();
|
const cssProvider = new Gtk.CssProvider();
|
||||||
@@ -53,7 +53,7 @@ class WorkspaceSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
context.add_class('frame');
|
context.add_class('frame');
|
||||||
|
|
||||||
this._list.add(new NewWorkspaceRow());
|
this._list.append(new NewWorkspaceRow());
|
||||||
|
|
||||||
this._actionGroup = new Gio.SimpleActionGroup();
|
this._actionGroup = new Gio.SimpleActionGroup();
|
||||||
this._list.insert_action_group('workspaces', this._actionGroup);
|
this._list.insert_action_group('workspaces', this._actionGroup);
|
||||||
@@ -94,12 +94,10 @@ class WorkspaceSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
this._settings.connect(`changed::${WORKSPACE_KEY}`,
|
this._settings.connect(`changed::${WORKSPACE_KEY}`,
|
||||||
this._sync.bind(this));
|
this._sync.bind(this));
|
||||||
this._sync();
|
this._sync();
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_getWorkspaceRows() {
|
_getWorkspaceRows() {
|
||||||
return this._list.get_children().filter(row => row.name);
|
return [...this._list].filter(row => row.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
@@ -111,17 +109,11 @@ class WorkspaceSettingsWidget extends Gtk.ScrolledWindow {
|
|||||||
const removed = oldNames.filter(n => !newNames.includes(n));
|
const removed = oldNames.filter(n => !newNames.includes(n));
|
||||||
const added = newNames.filter(n => !oldNames.includes(n));
|
const added = newNames.filter(n => !oldNames.includes(n));
|
||||||
|
|
||||||
removed.forEach(n => rows.find(r => r.name === n).destroy());
|
removed.forEach(n => this._list.remove(rows.find(r => r.name === n)));
|
||||||
added.forEach(n => {
|
added.forEach(n => {
|
||||||
this._list.insert(new WorkspaceRow(n), newNames.indexOf(n));
|
this._list.insert(new WorkspaceRow(n), newNames.indexOf(n));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_updateHeader(row, before) {
|
|
||||||
if (!before || row.get_header())
|
|
||||||
return;
|
|
||||||
row.set_header(new Gtk.Separator());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const WorkspaceRow = GObject.registerClass(
|
const WorkspaceRow = GObject.registerClass(
|
||||||
@@ -129,6 +121,13 @@ class WorkspaceRow extends Gtk.ListBoxRow {
|
|||||||
_init(name) {
|
_init(name) {
|
||||||
super._init({ name });
|
super._init({ name });
|
||||||
|
|
||||||
|
const controller = new Gtk.ShortcutController();
|
||||||
|
controller.add_shortcut(new Gtk.Shortcut({
|
||||||
|
trigger: Gtk.ShortcutTrigger.parse_string('Escape'),
|
||||||
|
action: Gtk.CallbackAction.new(this._stopEdit.bind(this)),
|
||||||
|
}));
|
||||||
|
this.add_controller(controller);
|
||||||
|
|
||||||
const box = new Gtk.Box({
|
const box = new Gtk.Box({
|
||||||
spacing: 12,
|
spacing: 12,
|
||||||
margin_top: 6,
|
margin_top: 6,
|
||||||
@@ -145,18 +144,14 @@ class WorkspaceRow extends Gtk.ListBoxRow {
|
|||||||
});
|
});
|
||||||
this.bind_property('name', label, 'label',
|
this.bind_property('name', label, 'label',
|
||||||
GObject.BindingFlags.SYNC_CREATE);
|
GObject.BindingFlags.SYNC_CREATE);
|
||||||
box.add(label);
|
box.append(label);
|
||||||
|
|
||||||
const image = new Gtk.Image({
|
|
||||||
icon_name: 'edit-delete-symbolic',
|
|
||||||
pixel_size: 16,
|
|
||||||
});
|
|
||||||
const button = new Gtk.Button({
|
const button = new Gtk.Button({
|
||||||
action_name: 'workspaces.remove',
|
action_name: 'workspaces.remove',
|
||||||
action_target: new GLib.Variant('s', name),
|
action_target: new GLib.Variant('s', name),
|
||||||
image,
|
icon_name: 'edit-delete-symbolic',
|
||||||
});
|
});
|
||||||
box.add(button);
|
box.append(button);
|
||||||
|
|
||||||
this._entry = new Gtk.Entry({
|
this._entry = new Gtk.Entry({
|
||||||
max_width_chars: 25,
|
max_width_chars: 25,
|
||||||
@@ -165,7 +160,7 @@ class WorkspaceRow extends Gtk.ListBoxRow {
|
|||||||
this._stack = new Gtk.Stack();
|
this._stack = new Gtk.Stack();
|
||||||
this._stack.add_named(box, 'display');
|
this._stack.add_named(box, 'display');
|
||||||
this._stack.add_named(this._entry, 'edit');
|
this._stack.add_named(this._entry, 'edit');
|
||||||
this.add(this._stack);
|
this.child = this._stack;
|
||||||
|
|
||||||
this._entry.connect('activate', () => {
|
this._entry.connect('activate', () => {
|
||||||
this.name = this._entry.text;
|
this.name = this._entry.text;
|
||||||
@@ -176,17 +171,11 @@ class WorkspaceRow extends Gtk.ListBoxRow {
|
|||||||
return;
|
return;
|
||||||
this._stopEdit();
|
this._stopEdit();
|
||||||
});
|
});
|
||||||
this._entry.connect('key-press-event',
|
|
||||||
this._onEntryKeyPress.bind(this));
|
|
||||||
|
|
||||||
this.connect('notify::name', () => {
|
this.connect('notify::name', () => {
|
||||||
button.action_target = new GLib.Variant('s', this.name);
|
button.action_target = new GLib.Variant('s', this.name);
|
||||||
|
this.activate_action('workspaces.update', null);
|
||||||
const actionGroup = this.get_action_group('workspaces');
|
|
||||||
actionGroup.activate_action('update', null);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
edit() {
|
edit() {
|
||||||
@@ -199,14 +188,6 @@ class WorkspaceRow extends Gtk.ListBoxRow {
|
|||||||
this.grab_focus();
|
this.grab_focus();
|
||||||
this._stack.visible_child_name = 'display';
|
this._stack.visible_child_name = 'display';
|
||||||
}
|
}
|
||||||
|
|
||||||
_onEntryKeyPress(entry, event) {
|
|
||||||
const [, keyval] = event.get_keyval();
|
|
||||||
if (keyval !== Gdk.KEY_Escape)
|
|
||||||
return Gdk.EVENT_PROPAGATE;
|
|
||||||
this._stopEdit();
|
|
||||||
return Gdk.EVENT_STOP;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const NewWorkspaceRow = GObject.registerClass(
|
const NewWorkspaceRow = GObject.registerClass(
|
||||||
@@ -214,19 +195,17 @@ class NewWorkspaceRow extends Gtk.ListBoxRow {
|
|||||||
_init() {
|
_init() {
|
||||||
super._init({
|
super._init({
|
||||||
action_name: 'workspaces.add',
|
action_name: 'workspaces.add',
|
||||||
|
child: new Gtk.Image({
|
||||||
|
icon_name: 'list-add-symbolic',
|
||||||
|
pixel_size: 16,
|
||||||
|
margin_top: 12,
|
||||||
|
margin_bottom: 12,
|
||||||
|
margin_start: 12,
|
||||||
|
margin_end: 12,
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
this.get_accessible().set_name(_('Add Workspace'));
|
this.update_property(
|
||||||
|
[Gtk.AccessibleProperty.LABEL], [_('Add Workspace')]);
|
||||||
this.add(new Gtk.Image({
|
|
||||||
icon_name: 'list-add-symbolic',
|
|
||||||
pixel_size: 16,
|
|
||||||
margin_top: 12,
|
|
||||||
margin_bottom: 12,
|
|
||||||
margin_start: 12,
|
|
||||||
margin_end: 12,
|
|
||||||
}));
|
|
||||||
|
|
||||||
this.show_all();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -34,4 +34,10 @@ and will be picked automatically at next login.
|
|||||||
<gnome:userid>fmuellner</gnome:userid>
|
<gnome:userid>fmuellner</gnome:userid>
|
||||||
</foaf:Person>
|
</foaf:Person>
|
||||||
</maintainer>
|
</maintainer>
|
||||||
|
<maintainer>
|
||||||
|
<foaf:Person>
|
||||||
|
<foaf:name>Marge Bot</foaf:name>
|
||||||
|
<gnome:userid>marge-bot</gnome:userid>
|
||||||
|
</foaf:Person>
|
||||||
|
</maintainer>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
+15
-6
@@ -1,4 +1,5 @@
|
|||||||
---
|
---
|
||||||
|
# SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
|
||||||
env:
|
env:
|
||||||
es6: true
|
es6: true
|
||||||
extends: 'eslint:recommended'
|
extends: 'eslint:recommended'
|
||||||
@@ -24,7 +25,9 @@ rules:
|
|||||||
# allow: [^vfunc_, ^on_, _instance_init]
|
# allow: [^vfunc_, ^on_, _instance_init]
|
||||||
comma-dangle:
|
comma-dangle:
|
||||||
- error
|
- error
|
||||||
- always-multiline
|
- arrays: always-multiline
|
||||||
|
objects: always-multiline
|
||||||
|
functions: never
|
||||||
comma-spacing:
|
comma-spacing:
|
||||||
- error
|
- error
|
||||||
- before: false
|
- before: false
|
||||||
@@ -87,6 +90,7 @@ rules:
|
|||||||
- error
|
- error
|
||||||
- all
|
- all
|
||||||
- conditionalAssign: false
|
- conditionalAssign: false
|
||||||
|
nestedBinaryExpressions: false
|
||||||
returnAssign: false
|
returnAssign: false
|
||||||
no-implicit-coercion:
|
no-implicit-coercion:
|
||||||
- error
|
- error
|
||||||
@@ -105,15 +109,15 @@ rules:
|
|||||||
no-prototype-builtins: 'off'
|
no-prototype-builtins: 'off'
|
||||||
no-restricted-properties:
|
no-restricted-properties:
|
||||||
- error
|
- error
|
||||||
|
- object: Lang
|
||||||
|
property: copyProperties
|
||||||
|
message: Use Object.assign()
|
||||||
- object: Lang
|
- object: Lang
|
||||||
property: bind
|
property: bind
|
||||||
message: Use arrow notation or Function.prototype.bind()
|
message: Use arrow notation or Function.prototype.bind()
|
||||||
- object: Lang
|
- object: Lang
|
||||||
property: Class
|
property: Class
|
||||||
message: Use ES6 classes
|
message: Use ES6 classes
|
||||||
- object: imports
|
|
||||||
property: mainloop
|
|
||||||
message: Use GLib main loops and timeouts
|
|
||||||
no-restricted-syntax:
|
no-restricted-syntax:
|
||||||
- error
|
- error
|
||||||
- selector: >-
|
- selector: >-
|
||||||
@@ -129,6 +133,8 @@ rules:
|
|||||||
BlockStatement[body.length=1]
|
BlockStatement[body.length=1]
|
||||||
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
|
CallExpression[arguments.length=0][callee.object.type="Super"][callee.property.name="_init"]
|
||||||
message: _init() that only calls super._init() is unnecessary
|
message: _init() that only calls super._init() is unnecessary
|
||||||
|
- selector: BinaryExpression[operator="instanceof"][right.name="Array"]
|
||||||
|
message: Use Array.isArray()
|
||||||
no-return-assign: error
|
no-return-assign: error
|
||||||
no-return-await: error
|
no-return-await: error
|
||||||
no-self-compare: error
|
no-self-compare: error
|
||||||
@@ -165,6 +171,9 @@ rules:
|
|||||||
object-shorthand: error
|
object-shorthand: error
|
||||||
operator-assignment: error
|
operator-assignment: error
|
||||||
operator-linebreak: error
|
operator-linebreak: error
|
||||||
|
padded-blocks:
|
||||||
|
- error
|
||||||
|
- never
|
||||||
# These may be a bit controversial, we can try them out and enable them later
|
# These may be a bit controversial, we can try them out and enable them later
|
||||||
# prefer-const: error
|
# prefer-const: error
|
||||||
# prefer-destructuring: error
|
# prefer-destructuring: error
|
||||||
@@ -217,12 +226,12 @@ globals:
|
|||||||
ARGV: readonly
|
ARGV: readonly
|
||||||
Debugger: readonly
|
Debugger: readonly
|
||||||
GIRepositoryGType: readonly
|
GIRepositoryGType: readonly
|
||||||
|
globalThis: readonly
|
||||||
imports: readonly
|
imports: readonly
|
||||||
Intl: readonly
|
Intl: readonly
|
||||||
log: readonly
|
log: readonly
|
||||||
logError: readonly
|
logError: readonly
|
||||||
print: readonly
|
print: readonly
|
||||||
printerr: readonly
|
printerr: readonly
|
||||||
window: readonly
|
|
||||||
parserOptions:
|
parserOptions:
|
||||||
ecmaVersion: 2017
|
ecmaVersion: 2020
|
||||||
|
|||||||
+7
-5
@@ -1,11 +1,12 @@
|
|||||||
project('gnome-shell-extensions',
|
project('gnome-shell-extensions',
|
||||||
version: '3.38.1',
|
version: '40.alpha.1',
|
||||||
meson_version: '>= 0.44.0',
|
meson_version: '>= 0.44.0',
|
||||||
license: 'GPL2+'
|
license: 'GPL2+'
|
||||||
)
|
)
|
||||||
|
|
||||||
gettext_domain = meson.project_name()
|
gettext_domain = meson.project_name()
|
||||||
|
|
||||||
|
fs = import('fs')
|
||||||
gnome = import('gnome')
|
gnome = import('gnome')
|
||||||
i18n = import('i18n')
|
i18n = import('i18n')
|
||||||
|
|
||||||
@@ -21,9 +22,9 @@ sessiondir = join_paths(datadir, 'gnome-session', 'sessions')
|
|||||||
xsessiondir = join_paths(datadir, 'xsessions')
|
xsessiondir = join_paths(datadir, 'xsessions')
|
||||||
|
|
||||||
ver_arr = meson.project_version().split('.')
|
ver_arr = meson.project_version().split('.')
|
||||||
if ver_arr[1].to_int().is_even()
|
if ver_arr[1].version_compare('>=0')
|
||||||
shell_version = '@0@.@1@'.format(ver_arr[0], ver_arr[1])
|
shell_version = ver_arr[0]
|
||||||
else
|
else # pre-release (alpha, beta, rc)
|
||||||
shell_version = '.'.join(ver_arr)
|
shell_version = '.'.join(ver_arr)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -86,9 +87,10 @@ foreach e : enabled_extensions
|
|||||||
endforeach
|
endforeach
|
||||||
|
|
||||||
if classic_mode_enabled
|
if classic_mode_enabled
|
||||||
sassc = find_program('sassc', required: true)
|
|
||||||
subdir('data')
|
subdir('data')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
subdir('extensions')
|
subdir('extensions')
|
||||||
subdir('po')
|
subdir('po')
|
||||||
|
|
||||||
|
meson.add_dist_script('meson/generate-stylesheets.py')
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
from pathlib import PurePath
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
sourceroot = os.environ.get('MESON_SOURCE_ROOT')
|
||||||
|
distroot = os.environ.get('MESON_DIST_ROOT')
|
||||||
|
|
||||||
|
stylesheet_path = PurePath('data/gnome-classic.css')
|
||||||
|
src = PurePath(sourceroot, stylesheet_path.with_suffix('.scss'))
|
||||||
|
dst = PurePath(distroot, stylesheet_path)
|
||||||
|
subprocess.call(['sassc', '-a', src, dst])
|
||||||
@@ -83,7 +83,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Intenta utilitzar més espai de la pantalla per a posicionar les miniatures de "
|
"Intenta utilitzar més espai de la pantalla per a posicionar les miniatures de "
|
||||||
"les finestres adaptant-les a la ràtio d'aspecte de la pantalla, consolidant-"
|
"les finestres adaptant-les a la ràtio d'aspecte de la pantalla, consolidant-"
|
||||||
"les més per a reduir la capsa que les envolta. Aquest paràmetre de "
|
"les més per a reduir la caixa que les envolta. Aquest paràmetre de "
|
||||||
"configuració només s'aplica a l'estratègia de posicionament de finestres "
|
"configuració només s'aplica a l'estratègia de posicionament de finestres "
|
||||||
"natural."
|
"natural."
|
||||||
|
|
||||||
|
|||||||
@@ -8,23 +8,23 @@ 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://gitlab.gnome.org/GNOME/gnome-shell-extensions/"
|
||||||
"issues\n"
|
"issues\n"
|
||||||
"POT-Creation-Date: 2020-05-28 00:55+0000\n"
|
"POT-Creation-Date: 2020-10-08 21:24+0000\n"
|
||||||
"PO-Revision-Date: 2020-07-12 18:10+0200\n"
|
"PO-Revision-Date: 2020-10-17 22:14+0200\n"
|
||||||
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
|
"Last-Translator: Fabio Tomat <f.t.public@gmail.com>\n"
|
||||||
"Language-Team: Friulian <fur@li.org>\n"
|
"Language-Team: Friulian <fur@li.org>\n"
|
||||||
"Language: fur\n"
|
"Language: fur\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Generator: Poedit 2.3.1\n"
|
"X-Generator: Poedit 2.4.1\n"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:3 data/gnome-classic.session.desktop.in:3
|
#: data/gnome-classic.desktop.in:3
|
||||||
msgid "GNOME Classic"
|
msgid "GNOME Classic"
|
||||||
msgstr "GNOME Classic"
|
msgstr "GNOME Classic"
|
||||||
|
|
||||||
#: data/gnome-classic.desktop.in:4
|
#: data/gnome-classic.desktop.in:4
|
||||||
msgid "This session logs you into GNOME Classic"
|
msgid "This session logs you into GNOME Classic"
|
||||||
msgstr "Cheste session a si invie cun GNOME classic"
|
msgstr "Cheste session ti fâs jentrâ in GNOME Classic"
|
||||||
|
|
||||||
#: extensions/apps-menu/extension.js:113
|
#: extensions/apps-menu/extension.js:113
|
||||||
msgid "Favorites"
|
msgid "Favorites"
|
||||||
@@ -43,8 +43,8 @@ msgid ""
|
|||||||
"A list of strings, each containing an application id (desktop file name), "
|
"A list of strings, each containing an application id (desktop file name), "
|
||||||
"followed by a colon and the workspace number"
|
"followed by a colon and the workspace number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Une liste di stringhis, ogniune a ten il ID di une aplicazion (non dal file ."
|
"Une liste di stringhis, ogniune e ten il ID di une aplicazion (non dal file ."
|
||||||
"desktop), seguît di doi ponts e il numar dal spazi di lavôr"
|
"desktop), cun daûr doi ponts e il numar dal spazi di lavôr"
|
||||||
|
|
||||||
#: extensions/auto-move-windows/prefs.js:35
|
#: extensions/auto-move-windows/prefs.js:35
|
||||||
msgid "Workspace Rules"
|
msgid "Workspace Rules"
|
||||||
@@ -63,15 +63,15 @@ msgstr "No si è rivâts a parâ fûr la unitât “%s”»:"
|
|||||||
|
|
||||||
#: extensions/drive-menu/extension.js:128
|
#: extensions/drive-menu/extension.js:128
|
||||||
msgid "Removable devices"
|
msgid "Removable devices"
|
||||||
msgstr "Argagn rimovibil"
|
msgstr "Dispositîfs estraibii"
|
||||||
|
|
||||||
#: extensions/drive-menu/extension.js:155
|
#: extensions/drive-menu/extension.js:155
|
||||||
msgid "Open Files"
|
msgid "Open Files"
|
||||||
msgstr "Vierç i file"
|
msgstr "Vierç i files"
|
||||||
|
|
||||||
#: 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 "Dopre plui spazi par i balcons"
|
msgstr "Dopre plui schermi pai barcons"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:6
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -79,14 +79,14 @@ msgid ""
|
|||||||
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
"aspect ratio, and consolidating them further to reduce the bounding box. "
|
||||||
"This setting applies only with the natural placement strategy."
|
"This setting applies only with the natural placement strategy."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Cîr di doprâ plui puest par plaçâ lis miniaturis dai balcons, adatânsi al "
|
"Cîr di doprâ plui schermi par plaçâ lis miniaturis dai barcons, adatant il "
|
||||||
"rapuart di aspiet dal visôr e consolidanlis ancjemo di plui par ridusi il "
|
"rapuart di aspiet dal visôr e consolidant ancjemo di plui lis miniaturis par "
|
||||||
"spazi complessîf. Cheste impostazion a si apliche dome se l'algoritmo di "
|
"ridusi il spazi complessîf. Cheste impostazion si apliche dome se "
|
||||||
"posizionament al è \"natural\"."
|
"l'algoritmi di plaçament al è naturâl."
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:11
|
||||||
msgid "Place window captions on top"
|
msgid "Place window captions on top"
|
||||||
msgstr "Met il titul dal balcon insomp"
|
msgstr "Met il titul dal barcon parsore"
|
||||||
|
|
||||||
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
#: extensions/native-window-placement/org.gnome.shell.extensions.native-window-placement.gschema.xml:12
|
||||||
msgid ""
|
msgid ""
|
||||||
@@ -94,9 +94,9 @@ msgid ""
|
|||||||
"shell default of placing it at the bottom. Changing this setting requires "
|
"shell default of placing it at the bottom. Changing this setting requires "
|
||||||
"restarting the shell to have any effect."
|
"restarting the shell to have any effect."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Se VÊR, al place i titui dai balcons insomp as relativis miniaturis, lant in "
|
"Se VÊR, al place i titui dai barcons denant des relativis miniaturis, "
|
||||||
"volte al compuartament normâl de shell, che lis place in bas.Cambiant cheste "
|
"sorpassant il compuartament predefinît de shell, che lis place in bas. "
|
||||||
"impostazion a si scugne tornâ a inviâ la shell."
|
"Cambiant cheste impostazion si scugne tornâ a inviâ la shell."
|
||||||
|
|
||||||
#: extensions/places-menu/extension.js:89
|
#: extensions/places-menu/extension.js:89
|
||||||
#: extensions/places-menu/extension.js:93
|
#: extensions/places-menu/extension.js:93
|
||||||
@@ -120,7 +120,7 @@ msgstr "Computer"
|
|||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:359
|
#: extensions/places-menu/placeDisplay.js:359
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Cjase"
|
msgstr "Home"
|
||||||
|
|
||||||
#: extensions/places-menu/placeDisplay.js:404
|
#: extensions/places-menu/placeDisplay.js:404
|
||||||
msgid "Browse Network"
|
msgid "Browse Network"
|
||||||
@@ -128,11 +128,11 @@ msgstr "Esplore rêt"
|
|||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:7
|
||||||
msgid "Cycle Screenshot Sizes"
|
msgid "Cycle Screenshot Sizes"
|
||||||
msgstr "Dimensions caturis di schermi ciclichis"
|
msgstr "Dimensions videadis catuardis ciclichis"
|
||||||
|
|
||||||
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
#: extensions/screenshot-window-sizer/org.gnome.shell.extensions.screenshot-window-sizer.gschema.xml:11
|
||||||
msgid "Cycle Screenshot Sizes Backward"
|
msgid "Cycle Screenshot Sizes Backward"
|
||||||
msgstr "Dimensions caturis di schermi ciclichis indaûr"
|
msgstr "Dimensions videadis caturadis ciclichis indaûr"
|
||||||
|
|
||||||
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
#: extensions/user-theme/org.gnome.shell.extensions.user-theme.gschema.xml:5
|
||||||
msgid "Theme name"
|
msgid "Theme name"
|
||||||
@@ -184,19 +184,19 @@ msgstr "Siere ducj"
|
|||||||
|
|
||||||
#: extensions/window-list/extension.js:734
|
#: extensions/window-list/extension.js:734
|
||||||
msgid "Window List"
|
msgid "Window List"
|
||||||
msgstr "Liste balcons"
|
msgstr "Liste barcons"
|
||||||
|
|
||||||
#: 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 "Quant ingrumâ i balcons"
|
msgstr "Cuant meti in grup i barcons"
|
||||||
|
|
||||||
#: 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 ""
|
||||||
"Al decît cuant intropâ i balcons de stesse aplicazion su le liste dai "
|
"Al decît cuant meti dongje i barcons de stesse aplicazion su la liste dai "
|
||||||
"balcons. I pussibii valôrs a son “never”, “auto” e “always”."
|
"barcons. I valôrs pussibii a son “never”, “auto” e “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
|
#: extensions/window-list/prefs.js:100
|
||||||
@@ -218,23 +218,23 @@ msgid ""
|
|||||||
"primary one."
|
"primary one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Indiche se mostrâ la liste dai barcons su ducj i visôrs tacâts o nome sul "
|
"Indiche se mostrâ la liste dai barcons su ducj i visôrs tacâts o nome sul "
|
||||||
"principâl."
|
"chel principâl."
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:29
|
#: extensions/window-list/prefs.js:29
|
||||||
msgid "Window Grouping"
|
msgid "Window Grouping"
|
||||||
msgstr "Ingrumament balcons"
|
msgstr "Intropament di barcons"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:58
|
#: extensions/window-list/prefs.js:58
|
||||||
msgid "Never group windows"
|
msgid "Never group windows"
|
||||||
msgstr "No ingrumâ i balcons"
|
msgstr "No sta meti mai in grup i barcons"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:59
|
#: extensions/window-list/prefs.js:59
|
||||||
msgid "Group windows when space is limited"
|
msgid "Group windows when space is limited"
|
||||||
msgstr "Ingrume i balcons quanche al'è pôc puest"
|
msgstr "Met dongje i barcons cuant che il spazi al è limitât"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:60
|
#: extensions/window-list/prefs.js:60
|
||||||
msgid "Always group windows"
|
msgid "Always group windows"
|
||||||
msgstr "Ingrume simpri i balcons"
|
msgstr "Met simpri in grup i barcons"
|
||||||
|
|
||||||
#: extensions/window-list/prefs.js:94
|
#: extensions/window-list/prefs.js:94
|
||||||
msgid "Show on all monitors"
|
msgid "Show on all monitors"
|
||||||
|
|||||||
Reference in New Issue
Block a user