Compare commits
190 Commits
upstream/4
...
debian/uns
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a41467649 | ||
|
|
27c4995ce9 | ||
|
|
d483f00cce | ||
|
|
e7c333b1a1 | ||
|
|
1ffd854eb1 | ||
|
|
49e598b4b7 | ||
|
|
40f13f3afa | ||
|
|
356e2054fa | ||
|
|
dab22e927b | ||
|
|
a1f60be674 | ||
|
|
e0ec59d30b | ||
|
|
abc1c9ef7e | ||
|
|
3e4a778978 | ||
|
|
ca85495a1c | ||
|
|
41dc03222c | ||
|
|
3cf56d8270 | ||
|
|
9436564a76 | ||
|
|
142065d58b | ||
|
|
2ffd3d95bb | ||
|
|
6b9f87dbea | ||
|
|
3b2aee92fb | ||
|
|
12dac8ee62 | ||
|
|
f8df77051b | ||
|
|
fd9c0f6be4 | ||
|
|
cf05510b0d | ||
|
|
207923a1b6 | ||
|
|
fbbcb058fa | ||
|
|
cef1736de2 | ||
|
|
da10cfc062 | ||
|
|
7cbf2533fe | ||
|
|
1a9d1c235c | ||
|
|
5c8a19f54f | ||
|
|
44fe593f8a | ||
|
|
b8d1af4e50 | ||
|
|
18f189b887 | ||
|
|
c9776c97de | ||
|
|
57a4241749 | ||
|
|
163ff997b1 | ||
|
|
449e9879ce | ||
|
|
84350c3776 | ||
|
|
91027ae9a4 | ||
|
|
9db80785a5 | ||
|
|
a876817127 | ||
|
|
3a0c70aef7 | ||
|
|
bbb6a73af1 | ||
|
|
51119ec213 | ||
|
|
2690ee46f2 | ||
|
|
bc2e456a6a | ||
|
|
b27c3719f0 | ||
|
|
147482d5e8 | ||
|
|
514403e1ba | ||
|
|
109d3aad6a | ||
|
|
15779e204d | ||
|
|
49e403f822 | ||
|
|
ffb5b76f4e | ||
|
|
b21932ffd9 | ||
|
|
46d8f1c8d9 | ||
|
|
8caffac3d7 | ||
|
|
40da5360a4 | ||
|
|
5b9f91991f | ||
|
|
a565f2d984 | ||
|
|
0b7269a4b8 | ||
|
|
c7805b4b40 | ||
|
|
e6b65be75a | ||
|
|
7043fe592c | ||
|
|
f7d35c41ae | ||
|
|
afb4942a72 | ||
|
|
4f7bd0918b | ||
|
|
fb8d34254a | ||
|
|
2a390c4c25 | ||
|
|
040fbf72e9 | ||
|
|
395e9aea3c | ||
|
|
bb3508327f | ||
|
|
068ae45f6c | ||
|
|
02ff0f658b | ||
|
|
3c14d9b524 | ||
|
|
8de00babad | ||
|
|
59768f0514 | ||
|
|
e185fe30f8 | ||
|
|
0d20be43d4 | ||
|
|
356632063c | ||
|
|
3a592ddb59 | ||
|
|
652ade33b5 | ||
|
|
05e6188921 | ||
|
|
b222ebed80 | ||
|
|
179d9b9ae1 | ||
|
|
ab7f50d2c8 | ||
|
|
51cc3c7cd1 | ||
|
|
d51f14529a | ||
|
|
563dfc3d4d | ||
|
|
3ad72a04af | ||
|
|
d43130f779 | ||
|
|
ce997ff4fd | ||
|
|
7a5d530358 | ||
|
|
dd0520f334 | ||
|
|
aab9143c13 | ||
|
|
b689ec2ef4 | ||
|
|
c9c2da444b | ||
|
|
9c931c175c | ||
|
|
39db8f1768 | ||
|
|
f7ed9ff131 | ||
|
|
4423126272 | ||
|
|
5294bc510b | ||
|
|
1b599315a2 | ||
|
|
b561655503 | ||
|
|
64923382b4 | ||
|
|
5ef6525be7 | ||
|
|
6dc066f7dd | ||
|
|
380cf61811 | ||
|
|
4624ca952e | ||
|
|
6f1475e944 | ||
|
|
22256eec46 | ||
|
|
31a5de2577 | ||
|
|
269e008541 | ||
|
|
79d866e9b5 | ||
|
|
6d4341f8a4 | ||
|
|
61dd96a29e | ||
|
|
9e2a8e0fb2 | ||
|
|
82ff7afe2b | ||
|
|
0017eaebfc | ||
|
|
fa729854b8 | ||
|
|
5644aebac7 | ||
|
|
941f5e43b4 | ||
|
|
a595407d39 | ||
|
|
60417b361e | ||
|
|
c3adf1724c | ||
|
|
435bbff3b0 | ||
|
|
706ea0dd7e | ||
|
|
e7c37a9d54 | ||
|
|
a7f66d648e | ||
|
|
013dc818e3 | ||
|
|
9430670019 | ||
|
|
67c795b610 | ||
|
|
42158401ac | ||
|
|
06a9891d77 | ||
|
|
c53e5325c3 | ||
|
|
6161d531fc | ||
|
|
ad52e75e97 | ||
|
|
2db7b6756d | ||
|
|
2f70c6c8a7 | ||
|
|
8fd8943460 | ||
|
|
695b533be1 | ||
|
|
491e9fb3e9 | ||
|
|
4d8bccc861 | ||
|
|
88b5fea2f9 | ||
|
|
91e886c564 | ||
|
|
1e8ff58d82 | ||
|
|
0b84052458 | ||
|
|
4abc92ef44 | ||
|
|
d12833afc4 | ||
|
|
8de34e23a3 | ||
|
|
3158caa1be | ||
|
|
8a6d13c416 | ||
|
|
90fe2cfb36 | ||
|
|
c91d5ebec1 | ||
|
|
5a00d5e117 | ||
|
|
1b938d9d5b | ||
|
|
62cbbef068 | ||
|
|
684547a66d | ||
|
|
261569c9fd | ||
|
|
e8d3ad369a | ||
|
|
f81ae009f9 | ||
|
|
8b954a2937 | ||
|
|
1e58f48f1d | ||
|
|
1a0e9905fb | ||
|
|
8a04a843f6 | ||
|
|
814e57fbd0 | ||
|
|
f69389a76b | ||
|
|
3f9b1357ff | ||
|
|
e0cb098823 | ||
|
|
bc470533bf | ||
|
|
84d4e7efe3 | ||
|
|
39b900243e | ||
|
|
017aedadd2 | ||
|
|
7c06399818 | ||
|
|
26646997b0 | ||
|
|
1b3f651c7e | ||
|
|
23b002adaa | ||
|
|
d9118a8653 | ||
|
|
245714aa0c | ||
|
|
2618620d04 | ||
|
|
1d3d0585a2 | ||
|
|
2e263b1cdc | ||
|
|
f4aece9488 | ||
|
|
c1928689da | ||
|
|
6972b3458d | ||
|
|
bb6634bbb0 | ||
|
|
1b2a6bdc72 | ||
|
|
901c12671e | ||
|
|
3c564fd613 |
@@ -1,3 +0,0 @@
|
||||
extends:
|
||||
- ./lint/eslintrc-gjs.yml
|
||||
- ./lint/eslintrc-shell.yml
|
||||
170
.gitlab-ci.yml
170
.gitlab-ci.yml
@@ -1,170 +0,0 @@
|
||||
include:
|
||||
- remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bbe5232986c9b98eb1efe62484e07216f7d1a4df/templates/fedora.yml'
|
||||
- remote: "https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/6f86b8bcb0cd5168c32779c4fea9a893c4a0c046/templates/ci-fairy.yml"
|
||||
|
||||
stages:
|
||||
- pre_review
|
||||
- prepare
|
||||
- review
|
||||
- build
|
||||
- deploy
|
||||
|
||||
default:
|
||||
image: registry.gitlab.gnome.org/gnome/gnome-shell/fedora/35:2022-02-18.0
|
||||
# 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:
|
||||
FDO_UPSTREAM_REPO: GNOME/gnome-shell-extensions
|
||||
LINT_LOG: "eslint-report.xml"
|
||||
|
||||
workflow:
|
||||
rules:
|
||||
- if: '$CI_MERGE_REQUEST_IID'
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
- 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'
|
||||
|
||||
.gnome-shell-extensions.fedora:34:
|
||||
variables:
|
||||
FDO_DISTRIBUTION_VERSION: 34
|
||||
FDO_DISTRIBUTION_TAG: '2021-08-31.0'
|
||||
FDO_DISTRIBUTION_PACKAGES: >
|
||||
meson git gettext sassc
|
||||
|
||||
.prereview_req: &prereview_req
|
||||
needs:
|
||||
- check_commit_log
|
||||
- check-merge-request
|
||||
|
||||
check_commit_log:
|
||||
extends:
|
||||
- .fdo.ci-fairy
|
||||
stage: pre_review
|
||||
script:
|
||||
- if [[ x"$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" != "x" ]] ;
|
||||
then
|
||||
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
|
||||
|
||||
build-fedora-container:
|
||||
extends:
|
||||
- .fdo.container-build@fedora@x86_64
|
||||
- .gnome-shell-extensions.fedora:34
|
||||
stage: prepare
|
||||
<<: *prereview_req
|
||||
|
||||
js_check:
|
||||
stage: review
|
||||
<<: *prereview_req
|
||||
script:
|
||||
- gjs-check-syntax
|
||||
|
||||
eslint:
|
||||
stage: review
|
||||
<<: *prereview_req
|
||||
script:
|
||||
- eslint -o $LINT_LOG -f junit --resolve-plugins-relative-to $(npm root -g) extensions
|
||||
artifacts:
|
||||
paths:
|
||||
- ${LINT_LOG}
|
||||
reports:
|
||||
junit: ${LINT_LOG}
|
||||
|
||||
build-bundles:
|
||||
stage: build
|
||||
<<: *prereview_req
|
||||
script:
|
||||
- ./export-zips.sh
|
||||
artifacts:
|
||||
name: 'Extension bundles'
|
||||
expose_as: 'Get Extension bundles here'
|
||||
paths:
|
||||
- zip-files/
|
||||
|
||||
fedora-build:
|
||||
extends:
|
||||
- .fdo.distribution-image@fedora
|
||||
- .gnome-shell-extensions.fedora:34
|
||||
stage: build
|
||||
needs:
|
||||
- build-fedora-container
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
script:
|
||||
- meson setup build --werror -Dextension_set=all -Dclassic_mode=true
|
||||
- meson compile -C build
|
||||
- meson test -C build
|
||||
- meson install -C build
|
||||
artifacts:
|
||||
paths:
|
||||
- build
|
||||
|
||||
fedora-dist:
|
||||
extends:
|
||||
- .fdo.distribution-image@fedora
|
||||
- .gnome-shell-extensions.fedora:34
|
||||
stage: deploy
|
||||
needs:
|
||||
- fedora-build
|
||||
variables:
|
||||
GIT_SUBMODULE_STRATEGY: normal
|
||||
script:
|
||||
- meson dist -C build
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||
changes:
|
||||
- "**/meson.build"
|
||||
- meson/*
|
||||
|
||||
fedora-dist-tarball:
|
||||
extends: fedora-dist
|
||||
artifacts:
|
||||
expose_as: 'Get tarball here'
|
||||
paths:
|
||||
- build/meson-dist/$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz
|
||||
rules:
|
||||
- if: '$CI_COMMIT_TAG'
|
||||
@@ -1,13 +0,0 @@
|
||||
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
|
||||
@@ -28,4 +28,4 @@ imports (like imports.lang or imports.dbus) and introspection,
|
||||
the other for Shell API. Within the same group, put everything
|
||||
in alphabetic order.
|
||||
|
||||
[coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/HEAD/doc/Style_Guide.md
|
||||
[coding-style]: https://gitlab.gnome.org/GNOME/gjs/blob/master/doc/Style_Guide.md
|
||||
|
||||
562
NEWS
562
NEWS
@@ -1,565 +1,3 @@
|
||||
44.beta
|
||||
=======
|
||||
* Tweak menu alignment [robxnano; !246]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner, robxnano
|
||||
|
||||
Translators:
|
||||
Vasil Pupkin [be]
|
||||
|
||||
43.1
|
||||
====
|
||||
* Fixed crash [Florian; !243]
|
||||
* Misc. bug fixes and cleanups [mowemcfc; !244]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner, mowemcfc
|
||||
|
||||
Translators:
|
||||
Sabri Ünal [tr]
|
||||
|
||||
43.0
|
||||
====
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Pawan Chitrakar [ne], Zurab Kargareteli [ka], Aleksandr Melman [ru]
|
||||
|
||||
43.rc
|
||||
=====
|
||||
* Misc. bug fixes and cleanups [Florian; !240]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
43.beta
|
||||
=======
|
||||
* Misc. bug fixes and cleanups [Florian; !237, !238]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Nart Tlisha [ab]
|
||||
|
||||
43.alpha
|
||||
========
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Marco Ciampa [it]
|
||||
|
||||
42.3
|
||||
====
|
||||
* screenshot-window-sizer: Fix reported sizes on wayland [Florian; !232]
|
||||
* window-list: Improve touch support [Florian; !233]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
42.2
|
||||
====
|
||||
* native-window-placement: Adjust to gnome-shell 42 changes [Florian; !229]
|
||||
* window-list: Fix visibility on non-primary monitors [Jason; !230]
|
||||
|
||||
Contributors:
|
||||
Jason Lynch, Florian Müllner
|
||||
|
||||
Translators:
|
||||
Cheng-Chia Tseng [zh_TW]
|
||||
|
||||
42.1
|
||||
====
|
||||
* Misc. bug fixes and cleanups [Florian; !223, !222, !225]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Milo Casagrande [it], Rūdolfs Mazurs [lv], Nathan Follens [nl],
|
||||
Ngọc Quân Trần [vi], Zurab Kargareteli [ka]
|
||||
|
||||
42.0
|
||||
====
|
||||
|
||||
Translators:
|
||||
Philipp Kiemle [de], Balázs Úr [hu], Марко Костић [sr], sicklylife [ja],
|
||||
Baurzhan Muftakhidinov [kk]
|
||||
|
||||
42.rc
|
||||
=====
|
||||
* Misc. bug fixes and cleanups [Florian; !215, !218]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Marek Černocký [cs], Dušan Kazik [sk], Piotr Drąg [pl], Jiri Grönroos [fi],
|
||||
Luna Jernberg [sv], Alan Mortensen [da], Charles Monzat [fr],
|
||||
Changwoo Ryu [ko]
|
||||
|
||||
42.beta
|
||||
=======
|
||||
* workspace-indicator: Fix cancelling editing with Esc [Florian; !208]
|
||||
* window-list: Update window tracking to avoid missing icons [Florian; !207]
|
||||
* Use libadwaita for preferences [Florian; !209, !213]
|
||||
* Adapt to Clutter grab API changes [Florian; !212]
|
||||
* Misc. bug fixes and cleanups [Jan, Florian; !210, !214]
|
||||
|
||||
Contributors:
|
||||
Jan Beich, Florian Müllner, Naala Nanba
|
||||
|
||||
Translators:
|
||||
Boyuan Yang [zh_CN], Matej Urbančič [sl], Naala Nanba [ab],
|
||||
Alexander Shopov [bg], Emin Tufan Çetin [tr]
|
||||
|
||||
42.alpha
|
||||
========
|
||||
* native-window-placement: Fix distorted layout in app grid [Sebastian; !189]
|
||||
* window-list: Fix on-screen keyboard [Florian; !199]
|
||||
* Misc. bug fixes and cleanups [Neal; Just; !195, !197]
|
||||
|
||||
Contributors:
|
||||
Piotr Drąg, Neal Gompa, Sebastian Keller, Florian Müllner, Just Perfection
|
||||
|
||||
Translators:
|
||||
Goran Vidović [hr], Sveinn í Felli [is], Yuri Chornoivan [uk],
|
||||
Fabio Tomat [fur], Quentin PAGÈS [oc], Hugo Carvalho [pt],
|
||||
Yaron Shahrabani [he], Jordi Mas i Hernandez [ca], MohammadSaleh Kamyab [fa],
|
||||
Fran Dieguez [gl], Daniel Mustieles [es], Aleksandr Melman [ru],
|
||||
Aurimas Černius [lt], Asier Sarasua Garmendia [eu], Kukuh Syafaat [id],
|
||||
Rafael Fontenelle [pt_BR]
|
||||
|
||||
41.0
|
||||
====
|
||||
* Bump version
|
||||
|
||||
41.rc.1
|
||||
=======
|
||||
* Fix pre-generating stylesheets in tarball [Florian; !190]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
41.rc
|
||||
=====
|
||||
* window-list: Adapt to overview-on-startup [Florian; !185]
|
||||
* apps-menu: Use a custom 'toggle-menu' shortcut [Florian; !173]
|
||||
* Misc. bug fixes and cleanups [Florian; !186]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
41.beta
|
||||
=======
|
||||
* window-list: Extend reactive area of minimap to screen edges [Adam; !171]
|
||||
* drive-menu: Improve detection of network mounts [Florian; !27, !176]
|
||||
* Use distinct gettext domain for e.g.o uploads [Florian; #335]
|
||||
* Misc. bug fixes and cleanups [Florian; !172, !174, !177, !167, !178, !180,
|
||||
!181, !182, !183]
|
||||
|
||||
Contributors:
|
||||
Marco Trevisan (Treviño), Adam Goode, Florian Müllner
|
||||
|
||||
Translators:
|
||||
Hugo Carvalho [pt], Juliano de Souza Camargo [pt], Alexander Shopov [bg]
|
||||
|
||||
40.1
|
||||
====
|
||||
* Disable welcome dialog in classic session [Florian; !169]
|
||||
* windowsNavigator: Adjust to a late gnome-shell change [Florian; !170]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Ngọc Quân Trần [vi], Anders Jonsson [sv], Carmen Bianca BAKKER [eo],
|
||||
Pawan Chitrakar [ne], Quentin PAGÈS [oc]
|
||||
|
||||
40.0
|
||||
====
|
||||
|
||||
Translators:
|
||||
Jiri Grönroos [fi]
|
||||
|
||||
40.rc
|
||||
=====
|
||||
* native-window-placement: Adjust to gnome-shell changes [Florian; !164]
|
||||
* windows-navigator: Adjust to gnome-shell changes [Florian; !163]
|
||||
* window-list, workspace-indicator: Only show previews for up to six workspaces
|
||||
[Florian; !165]
|
||||
* window-list, workspace-indicator: Improve workspace preview appearance
|
||||
[Florian; !166]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Fran Dieguez [gl]
|
||||
|
||||
40.beta
|
||||
=======
|
||||
* Add tooltips to workspace thumbnails [Florian; !155]
|
||||
* Drop arrows from top bar menus [Florian; !156]
|
||||
* drive-menu: Mark mounts that can be unmounted as removable [Michael; !152]
|
||||
* Remove horizontal-workspaces extension [Florian; !158]
|
||||
* Adjust to shell overview changes [Florian; !159, !160]
|
||||
* Fix crashes [Daniel; !157]
|
||||
* Misc. bug fixes and cleanups [Florian; !154, !161]
|
||||
|
||||
Contributors:
|
||||
Michael Lawton, Florian Müllner, Daniel van Vugt
|
||||
|
||||
Translators:
|
||||
Аляксей [be], A S Alam [pa]
|
||||
|
||||
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
|
||||
======
|
||||
|
||||
Contributors:
|
||||
Yacine Bouklif, Florian Müllner
|
||||
|
||||
Translators:
|
||||
Yacine Bouklif [kab], Cheng-Chia Tseng [zh_TW], Stas Solovey [ru],
|
||||
Yosef Or Boczko [he]
|
||||
|
||||
3.38.0
|
||||
======
|
||||
|
||||
Translators:
|
||||
Balázs Meskó [hu], Alan Mortensen [da], Juliano Camargo [pt], Tim Sabsch [de],
|
||||
Milo Casagrande [it], Rūdolfs Mazurs [lv]
|
||||
|
||||
3.37.92
|
||||
=======
|
||||
|
||||
Translators:
|
||||
Nathan Follens [nl], Zander Brown [en_GB], Aurimas Černius [lt],
|
||||
Marek Černocký [cs], Changwoo Ryu [ko], Dušan Kazik [sk]
|
||||
|
||||
3.37.91
|
||||
=======
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Fran Dieguez [gl], Akarshan Biswas [bn_IN], Kukuh Syafaat [id],
|
||||
Piotr Drąg [pl], Rafael Fontenelle [pt_BR], Jiri Grönroos [fi],
|
||||
Марко Костић [sr], Goran Vidović [hr]
|
||||
|
||||
3.37.90
|
||||
=======
|
||||
* Misc. bug fixes and cleanups [Florian, Piotr; !126, !128]
|
||||
|
||||
Contributors:
|
||||
Piotr Drąg, Florian Müllner
|
||||
|
||||
Translators:
|
||||
Fabio Tomat [fur], Efstathios Iosifidis [el], Anders Jonsson [sv],
|
||||
Asier Sarasua Garmendia [eu], Alexandre Franke [fr]
|
||||
|
||||
3.37.3
|
||||
======
|
||||
* window-list, native-window-placement: Adjust to shell changes [Florian; !124]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Jordi Mas [ca], sicklylife [ja], Boyuan Yang [zh_CN],
|
||||
Baurzhan Muftakhidinov [kk]
|
||||
|
||||
3.37.2
|
||||
======
|
||||
* window-list, auto-move: Modernize preference dialogs [Florian; !121]
|
||||
* Adjust to gnome-shell changes [Florian; !122]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Cheng-Chia Tseng [zh_TW], Yuri Chornoivan [uk], Daniel Mustieles [es],
|
||||
Emin Tufan Çetin [tr], Danial Behzadi [fa], Daniel Șerbănescu [ro],
|
||||
Matej Urbančič [sl]
|
||||
|
||||
3.37.1
|
||||
======
|
||||
* drive-menu: Emphasize eject buttons [Florian; #223]
|
||||
* user-theme: Add preference dialog [Florian; !117]
|
||||
* window-list: Fix inconsistent state in preference dialog [Milan; !119]
|
||||
* workspace-indicator: Overhaul preference dialog [Florian; !120]
|
||||
* user-theme: Support session mode styles [Florian; !118]
|
||||
* Misc. bug fixes and cleanups [Florian, Xiaoguang; !113, !106, !114, !116]
|
||||
|
||||
Contributors:
|
||||
Milan Crha, Florian Müllner, Xiaoguang Wang
|
||||
|
||||
Translators:
|
||||
Daniel Korostil [uk], Yosef Or Boczko [he], Kristjan SCHMIDT [eo],
|
||||
Dz Chen [zh_CN], Danial Behzadi [fa], Yuri Chornoivan [uk],
|
||||
Anders Jonsson [sv], Daniel Mustieles [es]
|
||||
|
||||
3.36.0
|
||||
======
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.35.91
|
||||
=======
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Zander Brown [en_GB]
|
||||
|
||||
3.35.90
|
||||
=======
|
||||
* Adjust to gnome-shell changes [Florian; !100, !101, !102]
|
||||
* Force single-line window titles in window list [Florian; #202]
|
||||
* Misc. bug fixes and cleanup [Florian; !104, !105]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
sicklylife [ja], Umarzuki Bin Mochlis Moktar [ms]
|
||||
|
||||
3.35.3
|
||||
======
|
||||
|
||||
Translators:
|
||||
Fran Dieguez [gl]
|
||||
|
||||
3.35.2
|
||||
======
|
||||
* Adjust to gnome-shell changes [Marco, Florian; !89, !95, !96]
|
||||
* window-list, workspace-indicator: Exclude DESKTOP windows from previews
|
||||
[Florian; !93]
|
||||
* screenshot-window-sizer: Fix cycling through all valid sizes [Willy; !97]
|
||||
|
||||
Contributors:
|
||||
Marco Trevisan (Treviño), Florian Müllner, Willy Stadnick
|
||||
|
||||
3.34.1
|
||||
======
|
||||
* Adjust to gnome-settings-daemon plugin removals [Xiaoguang; !94]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner, Xiaoguang Wang
|
||||
|
||||
Translators:
|
||||
Nathan Follens [nl], Dušan Kazik [sk], Ask Hjorth Larsen [da],
|
||||
Yi-Jyun Pan [zh_TW]
|
||||
|
||||
3.34.0
|
||||
======
|
||||
|
||||
Translators:
|
||||
Rafael Fontenelle [pt_BR], Efstathios Iosifidis [el], Milo Casagrande [it],
|
||||
Sabri Ünal [tr]
|
||||
|
||||
3.33.92
|
||||
=======
|
||||
|
||||
Translators:
|
||||
Марко Костић [sr], Tim Sabsch [de], Rūdolfs Mazurs [lv], Matej Urbančič [sl],
|
||||
Balázs Úr [hu], Claude Paroz [fr], Fran Dieguez [gl], Changwoo Ryu [ko],
|
||||
Ryuta Fujii [ja], Fabio Tomat [fur], Goran Vidović [hr]
|
||||
|
||||
3.33.91
|
||||
=======
|
||||
* Misc. bug fixes and cleanups [Florian; !88, !90, !91, !92]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Asier Sarasua Garmendia [eu], Anders Jonsson [sv], Marek Černocký [cs],
|
||||
Kukuh Syafaat [id], Jiri Grönroos [fi], Florentina Mușat [ro],
|
||||
Aurimas Černius [lt], Daniel Mustieles [es], Piotr Drąg [pl], Jordi Mas [ca],
|
||||
Danial Behzadi [fa]
|
||||
3.33.90
|
||||
=======
|
||||
* window-list: Support showing windows from all workspaces [Florian; #154]
|
||||
* Misc. bug fixes and cleanups [Florian; !86, !87]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Jor Teron [mjw]
|
||||
|
||||
3.33.4
|
||||
======
|
||||
* Make GNOME Classic more classic:
|
||||
- Disable GNOME 3 overview [Florian; !69]
|
||||
- Add window picker button to window list [Florian; !73, !80]
|
||||
- Style improvements and fixes [Jakub; #169, !82]
|
||||
- Support horizontal workspace layout in window list [Florian; !70]
|
||||
- Add draggable previews to window list workspace switcher [Florian; !74]
|
||||
- Arrange workspaces horizontally [Florian; !72]
|
||||
* workspace-indicator: Support horizontal workspace layout [Florian; !71]
|
||||
* workspace-indicator: Add draggable previews [Florian; !77]
|
||||
* Misc. bug fixes and cleanups [Florian; !75, !76, !79, !78, #168, !84]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner, Jakub Steiner, Jor Teron
|
||||
|
||||
Translators:
|
||||
Jor Teron [mjw]
|
||||
|
||||
3.33.3
|
||||
======
|
||||
* Misc. bug fixes [Florian, Marco; !67, !68]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner, Marco Trevisan (Treviño)
|
||||
|
||||
3.33.2
|
||||
======
|
||||
* Misc. bug fixes and cleanups [Florian; !66]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.33.1
|
||||
======
|
||||
* Misc. bug fixes [Florian; !64]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.32.1
|
||||
======
|
||||
* Fix windowsNavigator extension after ES6 port [Florian; #143]
|
||||
* screenshot-window-sizer: Add phone screenshot sizes [Adrien; !65]
|
||||
* Misc. bug fixes and cleanups [Fabian; !62]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner, Adrien Plazas, Fabian P. Schmidt
|
||||
|
||||
3.32.0
|
||||
======
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translations:
|
||||
Victor Ibragimov [tg], Kristjan SCHMIDT [eo], Mart Raudsepp [et]
|
||||
|
||||
3.31.92
|
||||
=======
|
||||
* Misc. bug fixes and cleanups [Florian; !57, !58, !59, !60]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.31.91
|
||||
=======
|
||||
* apps-menu: Remove outdated legacy-tray handling [Florian; !53]
|
||||
* user-theme: Allow using XDG user data dir [Tomasz; !55]
|
||||
* Misc. bug fixes and cleanups [Florian; !52, !54, !56]
|
||||
|
||||
Contributors:
|
||||
Tomasz Gąsior, Florian Müllner
|
||||
|
||||
Translators:
|
||||
Matej Urbančič [sl], Gun Chleoc [gd]
|
||||
|
||||
3.31.90
|
||||
=======
|
||||
* Misc. bug fixes and cleanups [Florian; !49, !50, !51]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
Translators:
|
||||
Ryuta Fujii [ja], Charles Monzat [fr], Pieter Schalk Schoeman [af]
|
||||
|
||||
3.31.2
|
||||
======
|
||||
* Remove obsolete alternate-tab extension [Florian; #786496]
|
||||
* Adjust to gnome-shell changes [Florian; #113]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.30.1
|
||||
======
|
||||
* apps-menu: Fix height on HiDPI systems [Florian; #102]
|
||||
* window-list: Only switch between windows on active workspace when scrolling
|
||||
[Florian; #78]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.30.0
|
||||
======
|
||||
* Bump version
|
||||
|
||||
3.29.91
|
||||
=======
|
||||
* Misc. bug fixes [Florian; #90]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.29.90
|
||||
=======
|
||||
* Misc. bug fixes [Florian; #786496]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.29.3
|
||||
======
|
||||
* Adjust to global.screen removal [Jonas; #759538]
|
||||
|
||||
Contributors:
|
||||
Jonas Ådahl, Florian Müllner
|
||||
|
||||
3.29.2
|
||||
======
|
||||
* Misc. bug fixes [Florian; #69]
|
||||
|
||||
Contributors:
|
||||
Florian Müllner
|
||||
|
||||
3.28.1
|
||||
======
|
||||
* Misc. bug fixes [Xiaoguang, Florian; #59, #62]
|
||||
|
||||
22
README.md
22
README.md
@@ -15,11 +15,9 @@ Bugs should be reported to the GNOME [bug tracking system][bug-tracker].
|
||||
|
||||
## Extensions
|
||||
|
||||
* alternate-tab (**OBSOLETE**)
|
||||
* alternate-tab
|
||||
|
||||
Lets you use classic Alt+Tab (window-based instead of app-based) in GNOME Shell.
|
||||
This extension is obsolete since GNOME 3.30, see [this blogpost][alternatetab-post]
|
||||
for further details.
|
||||
|
||||
* apps-menu
|
||||
|
||||
@@ -36,6 +34,10 @@ GSettings key.
|
||||
Shows a status menu for rapid unmount and power off of external storage devices
|
||||
(i.e. pendrives)
|
||||
|
||||
* example
|
||||
|
||||
A minimal example illustrating how to write extensions.
|
||||
|
||||
* launch-new-instance
|
||||
|
||||
Changes application icons to always launch a new instance when activated.
|
||||
@@ -69,19 +71,6 @@ GSettings key.
|
||||
|
||||
Adds a simple workspace switcher to the top bar.
|
||||
|
||||
## Default branch
|
||||
|
||||
The default development branch is `main`. If you still have a local
|
||||
checkout under the old name, use:
|
||||
```sh
|
||||
git checkout master
|
||||
git branch -m master main
|
||||
git fetch
|
||||
git branch --unset-upstream
|
||||
git branch -u origin/master
|
||||
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
GNOME Shell Extensions are distributed under the terms of the GNU General
|
||||
@@ -93,4 +82,3 @@ file for details.
|
||||
[shell-page]: https://wiki.gnome.org/Projects/GnomeShell
|
||||
[bug-tracker]: https://gitlab.gnome.org/GNOME/gnome-shell-extensions/issues
|
||||
[license]: COPYING
|
||||
[alternatetab-post]: https://blogs.gnome.org/fmuellner/2018/10/11/the-future-of-alternatetab-and-why-you-need-not-worry/
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
[org.gnome.mutter:GNOME-Classic]
|
||||
dynamic-workspaces=false
|
||||
|
||||
[org.gnome.desktop.wm.preferences:GNOME-Classic]
|
||||
button-layout='appmenu:minimize,maximize,close'
|
||||
|
||||
[org.gnome.desktop.wm.keybindings:GNOME-Classic]
|
||||
switch-applications=[]
|
||||
switch-windows=['<Super>Tab','<Alt>Tab']
|
||||
178
data/calendar-today.svg
Normal file
178
data/calendar-today.svg
Normal file
@@ -0,0 +1,178 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="24"
|
||||
height="24"
|
||||
id="svg10621"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="calendar-today.svg">
|
||||
<defs
|
||||
id="defs10623">
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient99561-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient34508-1-3">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop34510-1-9" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop34512-4-5" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
r="42"
|
||||
fy="30"
|
||||
fx="51"
|
||||
cy="30"
|
||||
cx="51"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient10592"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient3770"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient3001"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient3007"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient3067"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient3072"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient34508-1-3"
|
||||
id="radialGradient2997"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.72146227,0,0,0.27484277,14.205424,21.754717)"
|
||||
cx="51"
|
||||
cy="30"
|
||||
fx="51"
|
||||
fy="30"
|
||||
r="42" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#d3d3d3"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="8"
|
||||
inkscape:cx="-55.349829"
|
||||
inkscape:cy="-31.442864"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="2133"
|
||||
inkscape:window-height="1241"
|
||||
inkscape:window-x="238"
|
||||
inkscape:window-y="89"
|
||||
inkscape:window-maximized="0"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3109"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata10626">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-469.08263,-537.99307)">
|
||||
<circle
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#555753;fill-opacity:0.23756906;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="path7305"
|
||||
cx="481.57138"
|
||||
cy="559.4649"
|
||||
r="1.5" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
262
data/classic-toggle-off-intl.svg
Normal file
262
data/classic-toggle-off-intl.svg
Normal file
@@ -0,0 +1,262 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="65"
|
||||
height="22"
|
||||
id="svg10865"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="classic-toggle-off-intl.svg">
|
||||
<defs
|
||||
id="defs10867">
|
||||
<linearGradient
|
||||
id="linearGradient62852-6-5">
|
||||
<stop
|
||||
id="stop62854-6-7"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#eeeeec;stop-opacity:1"
|
||||
offset="0.97726452"
|
||||
id="stop62858-8-0" />
|
||||
<stop
|
||||
id="stop62860-5-3"
|
||||
offset="1"
|
||||
style="stop-color:#f5f5f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
is_visible="true"
|
||||
id="path-effect62989-8-0"
|
||||
effect="spiro" />
|
||||
<linearGradient
|
||||
id="linearGradient62821-5-8">
|
||||
<stop
|
||||
id="stop62823-2-4"
|
||||
offset="0"
|
||||
style="stop-color:#d1d3d1;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop62825-3-8"
|
||||
offset="1"
|
||||
style="stop-color:#ebebeb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient62852-6-5-3">
|
||||
<stop
|
||||
id="stop62854-6-7-6"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#eeeeec;stop-opacity:1"
|
||||
offset="0.97726452"
|
||||
id="stop62858-8-0-3" />
|
||||
<stop
|
||||
id="stop62860-5-3-9"
|
||||
offset="1"
|
||||
style="stop-color:#f5f5f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect62829-6-8-0"
|
||||
is_visible="true" />
|
||||
<linearGradient
|
||||
id="linearGradient62821-5-8-1">
|
||||
<stop
|
||||
id="stop62823-2-4-2"
|
||||
offset="0"
|
||||
style="stop-color:#d1d3d1;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop62825-3-8-9"
|
||||
offset="1"
|
||||
style="stop-color:#ebebeb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="507.42715"
|
||||
x2="702.58966"
|
||||
y1="484.49405"
|
||||
x1="702.58966"
|
||||
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11647"
|
||||
xlink:href="#linearGradient62821-5-8-1"
|
||||
inkscape:collect="always" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath65663">
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
|
||||
id="rect65665"
|
||||
width="96.999924"
|
||||
height="24.292892"
|
||||
x="708.71954"
|
||||
y="406.96973"
|
||||
rx="3.1139846"
|
||||
ry="1.9595497"
|
||||
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/content selection/content-selection.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9"
|
||||
id="linearGradient65582"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.5250827,0,0,0.72144839,620.16092,156.4917)"
|
||||
x1="207.17195"
|
||||
y1="497.39584"
|
||||
x2="207.17195"
|
||||
y2="531.48669" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9">
|
||||
<stop
|
||||
style="stop-color:#f4f6f4;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5380-6-1-1-9-3-6-3-6-45-6-4-4-9-9-8-9" />
|
||||
<stop
|
||||
style="stop-color:#d7dad7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5382-06-3-6-4-2-4-6-8-0-9-6-8-7-7-6-7" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient65584">
|
||||
<stop
|
||||
style="stop-color:#f1f1f1;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop65586" />
|
||||
<stop
|
||||
style="stop-color:#a7aba7;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop65588" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9"
|
||||
id="linearGradient65582-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.5250827,0,0,0.72144839,-75.348673,-359.16458)"
|
||||
x1="207.17195"
|
||||
y1="497.39584"
|
||||
x2="207.17195"
|
||||
y2="531.48669" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient65584"
|
||||
id="linearGradient65590-6"
|
||||
x1="716.62506"
|
||||
y1="537.23358"
|
||||
x2="716.62506"
|
||||
y2="535.23358"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0139469,0,0,1.0139469,-705.52354,-521.99915)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="23.565368"
|
||||
inkscape:cy="19.596892"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g62929"
|
||||
showgrid="false"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1342"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid11512" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata10870">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1030.3622)">
|
||||
<g
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
|
||||
style="display:inline"
|
||||
id="g62929"
|
||||
transform="translate(-643.91421,517.29894)">
|
||||
<g
|
||||
transform="translate(0,30)"
|
||||
id="g62931">
|
||||
<rect
|
||||
style="fill:#cecece;fill-opacity:1;stroke:#a7a7a7;stroke-width:1;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;clip-rule:nonzero;opacity:1;isolation:auto;mix-blend-mode:normal;solid-color:#000000;solid-opacity:1;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto"
|
||||
id="rect62935"
|
||||
width="63.856125"
|
||||
height="21.093594"
|
||||
x="644.5"
|
||||
y="483.5"
|
||||
rx="2"
|
||||
ry="2" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient65582);fill-opacity:1;stroke:#a7a7a7;stroke-width:0.97313344;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;color:#000000;clip-rule:nonzero;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect62937"
|
||||
width="29.97398"
|
||||
height="17.022524"
|
||||
x="646.55896"
|
||||
y="485.61429"
|
||||
rx="1"
|
||||
ry="1" />
|
||||
<g
|
||||
transform="translate(-38.048674,-1.9445437)"
|
||||
id="g62939" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:original-d="m 647.78241,486.57192 27.73523,0"
|
||||
inkscape:path-effect="#path-effect62989-8-0"
|
||||
id="path62947"
|
||||
d="m 647.78241,486.57192 27.73523,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
id="g11665"
|
||||
transform="matrix(0.78906097,0,0,0.78906097,178.78814,111.57844)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
id="path3016"
|
||||
sodipodi:cx="50.375"
|
||||
sodipodi:cy="11.875"
|
||||
sodipodi:rx="4.625"
|
||||
sodipodi:ry="4.625"
|
||||
d="M 55,11.875 A 4.625,4.625 0 0 1 50.375,16.5 4.625,4.625 0 0 1 45.75,11.875 4.625,4.625 0 0 1 50.375,7.25 4.625,4.625 0 0 1 55,11.875 Z"
|
||||
transform="translate(642.41421,512.02037)"
|
||||
style="fill:none;stroke:#2e3436;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.5 KiB |
222
data/classic-toggle-off-us.svg
Normal file
222
data/classic-toggle-off-us.svg
Normal file
@@ -0,0 +1,222 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="65"
|
||||
height="22"
|
||||
id="svg10865"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="classic-toggle-off-us.svg">
|
||||
<defs
|
||||
id="defs10867">
|
||||
<linearGradient
|
||||
id="linearGradient62852-6-5">
|
||||
<stop
|
||||
id="stop62854-6-7"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#eeeeec;stop-opacity:1"
|
||||
offset="0.97726452"
|
||||
id="stop62858-8-0" />
|
||||
<stop
|
||||
id="stop62860-5-3"
|
||||
offset="1"
|
||||
style="stop-color:#f5f5f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
is_visible="true"
|
||||
id="path-effect62989-8-0"
|
||||
effect="spiro" />
|
||||
<linearGradient
|
||||
id="linearGradient62821-5-8">
|
||||
<stop
|
||||
id="stop62823-2-4"
|
||||
offset="0"
|
||||
style="stop-color:#d1d3d1;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop62825-3-8"
|
||||
offset="1"
|
||||
style="stop-color:#ebebeb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient62852-6-5-3">
|
||||
<stop
|
||||
id="stop62854-6-7-6"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#eeeeec;stop-opacity:1"
|
||||
offset="0.97726452"
|
||||
id="stop62858-8-0-3" />
|
||||
<stop
|
||||
id="stop62860-5-3-9"
|
||||
offset="1"
|
||||
style="stop-color:#f5f5f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
effect="spiro"
|
||||
id="path-effect62829-6-8-0"
|
||||
is_visible="true" />
|
||||
<linearGradient
|
||||
id="linearGradient62821-5-8-1">
|
||||
<stop
|
||||
id="stop62823-2-4-2"
|
||||
offset="0"
|
||||
style="stop-color:#d1d3d1;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop62825-3-8-9"
|
||||
offset="1"
|
||||
style="stop-color:#ebebeb;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="507.42715"
|
||||
x2="702.58966"
|
||||
y1="484.49405"
|
||||
x1="702.58966"
|
||||
gradientTransform="matrix(1.3066667,0,0,1,-841.64667,-483)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient11647"
|
||||
xlink:href="#linearGradient62821-5-8-1"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9"
|
||||
id="linearGradient65582"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.5250827,0,0,0.72144839,620.16092,156.4917)"
|
||||
x1="207.17195"
|
||||
y1="497.39584"
|
||||
x2="207.17195"
|
||||
y2="531.48669" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5378-2-5-9-9-0-80-7-6-8-4-5-7-3-6-2-9">
|
||||
<stop
|
||||
style="stop-color:#f4f6f4;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5380-6-1-1-9-3-6-3-6-45-6-4-4-9-9-8-9" />
|
||||
<stop
|
||||
style="stop-color:#d7dad7;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5382-06-3-6-4-2-4-6-8-0-9-6-8-7-7-6-7" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
is_visible="true"
|
||||
id="path-effect62989-8-0-6"
|
||||
effect="spiro" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="78.222729"
|
||||
inkscape:cy="-3.6620078"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g62929"
|
||||
showgrid="false"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1342"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid11512" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata10870">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1030.3622)">
|
||||
<g
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
|
||||
style="display:inline"
|
||||
id="g62929"
|
||||
transform="translate(-643.91421,517.29894)">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(0,30)"
|
||||
id="g62931">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cecece;fill-opacity:1;fill-rule:nonzero;stroke:#a7a7a7;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
|
||||
id="rect62935"
|
||||
width="63.856125"
|
||||
height="21.093594"
|
||||
x="644.5"
|
||||
y="483.5"
|
||||
rx="2"
|
||||
ry="2" />
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient65582);fill-opacity:1;fill-rule:nonzero;stroke:#a7a7a7;stroke-width:0.97313344;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect62937"
|
||||
width="29.97398"
|
||||
height="17.022524"
|
||||
x="646.55896"
|
||||
y="485.61429"
|
||||
rx="1"
|
||||
ry="1" />
|
||||
<g
|
||||
transform="translate(-38.048674,-1.9445437)"
|
||||
id="g62939" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:original-d="m 647.78241,486.57192 27.73523,0"
|
||||
inkscape:path-effect="#path-effect62989-8-0-6"
|
||||
id="path62947"
|
||||
d="m 647.78241,486.57192 27.73523,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
id="g11665"
|
||||
transform="matrix(0.78906097,0,0,0.78906097,167.78814,111.57844)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12.69556618px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||
x="644.46393"
|
||||
y="533.87158"
|
||||
id="text62949"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="scale(1.0113976,0.98873084)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan62951"
|
||||
x="644.46393"
|
||||
y="533.87158">OFF</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.0 KiB |
175
data/classic-toggle-on-intl.svg
Normal file
175
data/classic-toggle-on-intl.svg
Normal file
@@ -0,0 +1,175 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="65"
|
||||
height="22"
|
||||
id="svg10865"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="classic-toggle-on-intl.svg">
|
||||
<defs
|
||||
id="defs10867">
|
||||
<linearGradient
|
||||
id="linearGradient62852-6-5">
|
||||
<stop
|
||||
id="stop62854-6-7"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#eeeeec;stop-opacity:1"
|
||||
offset="0.97726452"
|
||||
id="stop62858-8-0" />
|
||||
<stop
|
||||
id="stop62860-5-3"
|
||||
offset="1"
|
||||
style="stop-color:#f5f5f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
is_visible="true"
|
||||
id="path-effect62989-8-0"
|
||||
effect="spiro" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient38513"
|
||||
id="linearGradient38519"
|
||||
x1="690"
|
||||
y1="506.25049"
|
||||
x2="690"
|
||||
y2="480.93414"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient38513">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop38515" />
|
||||
<stop
|
||||
style="stop-color:#6f9ccd;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop38517" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient62852-6-5"
|
||||
id="linearGradient62981-1-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.85639946,0,0,0.81059641,57.747905,92.132229)"
|
||||
x1="740"
|
||||
y1="486.10501"
|
||||
x2="740"
|
||||
y2="505.3204" />
|
||||
<inkscape:path-effect
|
||||
is_visible="true"
|
||||
id="path-effect62989-8-0-8"
|
||||
effect="spiro" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="9.3225163"
|
||||
inkscape:cy="-0.1588306"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g62929"
|
||||
showgrid="false"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1342"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid11512" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata10870">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1030.3622)">
|
||||
<g
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
|
||||
style="display:inline"
|
||||
id="g62929"
|
||||
transform="translate(-643.91421,517.29894)">
|
||||
<g
|
||||
style="display:inline"
|
||||
transform="translate(0,30)"
|
||||
id="g62931">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient38519);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect62935"
|
||||
width="63.856125"
|
||||
height="21.093594"
|
||||
x="644.5"
|
||||
y="483.5"
|
||||
rx="2"
|
||||
ry="2" />
|
||||
<rect
|
||||
style="display:inline;fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect62937"
|
||||
width="29.97398"
|
||||
height="17.022524"
|
||||
x="676.49646"
|
||||
y="485.67679"
|
||||
rx="1"
|
||||
ry="1" />
|
||||
<g
|
||||
transform="translate(-7.9861743,-1.9445437)"
|
||||
id="g62939" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:original-d="m 677.59874,486.57192 27.94632,0"
|
||||
inkscape:path-effect="#path-effect62989-8-0-8"
|
||||
id="path62947"
|
||||
d="m 677.59874,486.57192 27.94632,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4444"
|
||||
d="m 661.91421,522.09451 0,7"
|
||||
style="fill:#3465a4;stroke:#3465a4;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;fill-opacity:1;fill-rule:nonzero;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 18,7.96875 0,7"
|
||||
id="path3922"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(643.91421,513.06326)" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
209
data/classic-toggle-on-us.svg
Normal file
209
data/classic-toggle-on-us.svg
Normal file
@@ -0,0 +1,209 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="65"
|
||||
height="22"
|
||||
id="svg10865"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="classic-toggle-on-us.svg">
|
||||
<defs
|
||||
id="defs10867">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient62852-6-5"
|
||||
id="linearGradient62981-1-1"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.85639946,0,0,0.81059641,57.747905,92.132229)"
|
||||
x1="740"
|
||||
y1="486.10501"
|
||||
x2="740"
|
||||
y2="505.3204" />
|
||||
<linearGradient
|
||||
id="linearGradient62852-6-5">
|
||||
<stop
|
||||
id="stop62854-6-7"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#eeeeec;stop-opacity:1"
|
||||
offset="0.97726452"
|
||||
id="stop62858-8-0" />
|
||||
<stop
|
||||
id="stop62860-5-3"
|
||||
offset="1"
|
||||
style="stop-color:#f5f5f4;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<inkscape:path-effect
|
||||
is_visible="true"
|
||||
id="path-effect62989-8-0"
|
||||
effect="spiro" />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath65663">
|
||||
<rect
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#729fcf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:new"
|
||||
id="rect65665"
|
||||
width="96.999924"
|
||||
height="24.292892"
|
||||
x="708.71954"
|
||||
y="406.96973"
|
||||
rx="3.1139846"
|
||||
ry="1.9595497"
|
||||
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/content selection/content-selection.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient38513"
|
||||
id="linearGradient38519"
|
||||
x1="690"
|
||||
y1="506.25049"
|
||||
x2="690"
|
||||
y2="480.93414"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient38513">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop38515" />
|
||||
<stop
|
||||
style="stop-color:#6f9ccd;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop38517" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
gradientTransform="translate(-644,-483)"
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient38513"
|
||||
id="linearGradient38519-3"
|
||||
x1="690"
|
||||
y1="506.25049"
|
||||
x2="690"
|
||||
y2="480.93414"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="20.775745"
|
||||
inkscape:cy="7.0434022"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g62929"
|
||||
showgrid="false"
|
||||
borderlayer="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:snap-others="false"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1342"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="28"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid11512" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata10870">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1030.3622)">
|
||||
<g
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-filename="/home/lapo.fedora/SparkleShare/gnome-mockups/system-settings/network/network-panel-summary.png"
|
||||
style="display:inline"
|
||||
id="g62929"
|
||||
transform="translate(-643.91421,517.29894)">
|
||||
<g
|
||||
transform="translate(0,30)"
|
||||
id="g62931">
|
||||
<rect
|
||||
style="fill:url(#linearGradient38519);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill-rule:nonzero;stroke-linejoin:miter;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;filter-blend-mode:normal;filter-gaussianBlur-deviation:0;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect62935"
|
||||
width="63.856125"
|
||||
height="21.093594"
|
||||
x="644.5"
|
||||
y="483.5"
|
||||
rx="2"
|
||||
ry="2" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient62981-1-1);fill-opacity:1;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
|
||||
id="rect62937"
|
||||
width="29.97398"
|
||||
height="17.022524"
|
||||
x="676.49646"
|
||||
y="485.67679"
|
||||
rx="1"
|
||||
ry="1" />
|
||||
<g
|
||||
transform="translate(-7.9861743,-1.9445437)"
|
||||
id="g62939" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:original-d="m 677.59874,486.57192 27.94632,0"
|
||||
inkscape:path-effect="#path-effect62989-8-0"
|
||||
id="path62947"
|
||||
d="m 677.59874,486.57192 27.94632,0"
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<text
|
||||
transform="scale(1.0113976,0.98873084)"
|
||||
sodipodi:linespacing="125%"
|
||||
id="text62949-7"
|
||||
y="534.96918"
|
||||
x="646.71399"
|
||||
style="font-size:10.01104736px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#3465a4;fill-opacity:1;stroke:none;display:inline;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold;"
|
||||
xml:space="preserve"><tspan
|
||||
y="534.96918"
|
||||
x="646.71399"
|
||||
id="tspan62951-7"
|
||||
sodipodi:role="line">ON</tspan></text>
|
||||
<text
|
||||
transform="scale(1.0113976,0.98873084)"
|
||||
sodipodi:linespacing="125%"
|
||||
id="text62949"
|
||||
y="533.94482"
|
||||
x="646.71399"
|
||||
style="font-size:10.01104736px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell Bold"
|
||||
xml:space="preserve"><tspan
|
||||
y="533.94482"
|
||||
x="646.71399"
|
||||
id="tspan62951"
|
||||
sodipodi:role="line">ON</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
@@ -1,11 +1,9 @@
|
||||
{
|
||||
"parentMode": "user",
|
||||
"stylesheetName": "gnome-classic.css",
|
||||
"hasOverview": false,
|
||||
"showWelcomeDialog": false,
|
||||
"enabledExtensions": [@CLASSIC_EXTENSIONS@],
|
||||
"panel": { "left": ["appMenu"],
|
||||
"panel": { "left": ["activities", "appMenu"],
|
||||
"center": [],
|
||||
"right": ["a11y", "keyboard", "dateMenu", "quickSettings"]
|
||||
"right": ["a11y", "keyboard", "dateMenu", "aggregateMenu"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=GNOME Classic on Wayland
|
||||
Comment=This session logs you into GNOME Classic
|
||||
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
|
||||
TryExec=gnome-session
|
||||
Type=Application
|
||||
DesktopNames=GNOME-Classic;GNOME;
|
||||
X-GDM-SessionRegisters=true
|
||||
@@ -1,8 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Name=GNOME Classic on Xorg
|
||||
Comment=This session logs you into GNOME Classic
|
||||
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
|
||||
TryExec=gnome-session
|
||||
Type=Application
|
||||
DesktopNames=GNOME-Classic;GNOME;
|
||||
X-GDM-SessionRegisters=true
|
||||
@@ -1,8 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=GNOME Classic
|
||||
Comment=This session logs you into GNOME Classic
|
||||
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
|
||||
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic
|
||||
TryExec=gnome-session
|
||||
Type=Application
|
||||
DesktopNames=GNOME-Classic;GNOME;
|
||||
X-GDM-SessionRegisters=true
|
||||
|
||||
@@ -4,7 +4,6 @@ $variant: 'light';
|
||||
@import "gnome-shell-sass/_colors"; //use gtk colors
|
||||
@import "gnome-shell-sass/_drawing";
|
||||
@import "gnome-shell-sass/_common";
|
||||
@import "gnome-shell-sass/_widgets";
|
||||
|
||||
/* Overrides */
|
||||
|
||||
@@ -33,32 +32,18 @@ $variant: 'light';
|
||||
font-weight: normal;
|
||||
color: $fg_color;
|
||||
text-shadow: none;
|
||||
transition-duration: 0ms;
|
||||
border: 0;
|
||||
border-radius: 0px;
|
||||
|
||||
&.clock-display {
|
||||
.clock {
|
||||
transition-duration: 0ms;
|
||||
border: 0;
|
||||
border-radius: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: lighten($fg_color,10%);
|
||||
text-shadow: none;
|
||||
& .system-status-icon { icon-shadow: none; }
|
||||
}
|
||||
&:active, &:overview, &:focus, &:checked {
|
||||
// Trick due to St limitations. It needs a background to draw
|
||||
// a box-shadow
|
||||
background-color: $selected_bg_color;
|
||||
color: $selected_fg_color;
|
||||
background-color: $selected_bg_color !important;
|
||||
color: $selected_fg_color !important;
|
||||
box-shadow: none;
|
||||
& > .system-status-icon { icon-shadow: none; }
|
||||
}
|
||||
|
||||
&:hover {
|
||||
text-shadow: none;
|
||||
& .system-status-icon { icon-shadow: none; }
|
||||
}
|
||||
.app-menu-icon { width: 0; height: 0; margin: 0; } // shell's display:none; :D
|
||||
|
||||
.system-status-icon {
|
||||
@@ -75,17 +60,18 @@ $variant: 'light';
|
||||
&.lock-screen,
|
||||
&.unlock-screen,
|
||||
&.login-screen {
|
||||
background-color: transparentize($bg_color, 0.5);
|
||||
background-gradient-start: transparentize($bg_color, 0.5);
|
||||
background-gradient-end: transparentize($bg_color, 0.5);
|
||||
background-color: transparentize($_bubble_bg_color, 0.5);
|
||||
background-gradient-start: transparentize($_bubble_bg_color, 0.5);
|
||||
background-gradient-end: transparentize($_bubble_bg_color, 0.5);
|
||||
border-bottom: none;
|
||||
.panel-button { color: $osd_fg_color; }
|
||||
}
|
||||
.popup-menu-arrow { width: 0; height: 0; } // shell's display: none;
|
||||
}
|
||||
|
||||
#appMenu {
|
||||
padding: 0 8px 0 8px;
|
||||
spinner-image: url("classic-process-working.svg");
|
||||
.panel-status-menu-box { padding: 0; }
|
||||
}
|
||||
.tile-preview-left.on-primary,
|
||||
.tile-preview-right.on-primary,
|
||||
@@ -93,3 +79,27 @@ $variant: 'light';
|
||||
/* keep in sync with -panel-corner-radius */
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
@each $v in us, intl {
|
||||
.toggle-switch-#{$v} {
|
||||
background-image: url("classic-toggle-off-#{$v}.svg");
|
||||
&:checked { background-image: url("classic-toggle-on-#{$v}.svg"); }
|
||||
}
|
||||
}
|
||||
|
||||
.calendar-day-with-events {
|
||||
background-image: url("calendar-today.svg");
|
||||
}
|
||||
|
||||
.message-list-clear-button.button {
|
||||
color: $fg_color
|
||||
}
|
||||
|
||||
.notification-banner {
|
||||
background-color: $bg_color !important;
|
||||
color: $fg_color;
|
||||
.notification-button {
|
||||
background-color: darken($bg_color,5%);
|
||||
&:hover, &focus { background-color: darken($bg_color,2%); }
|
||||
}
|
||||
}
|
||||
|
||||
3
data/gnome-classic.session.desktop.in
Normal file
3
data/gnome-classic.session.desktop.in
Normal file
@@ -0,0 +1,3 @@
|
||||
[GNOME Session]
|
||||
Name=GNOME Classic
|
||||
RequiredComponents=org.gnome.Shell;org.gnome.SettingsDaemon.A11ySettings;org.gnome.SettingsDaemon.Clipboard;org.gnome.SettingsDaemon.Color;org.gnome.SettingsDaemon.Datetime;org.gnome.SettingsDaemon.Housekeeping;org.gnome.SettingsDaemon.Keyboard;org.gnome.SettingsDaemon.MediaKeys;org.gnome.SettingsDaemon.Mouse;org.gnome.SettingsDaemon.Power;org.gnome.SettingsDaemon.PrintNotifications;org.gnome.SettingsDaemon.Rfkill;org.gnome.SettingsDaemon.ScreensaverProxy;org.gnome.SettingsDaemon.Sharing;org.gnome.SettingsDaemon.Smartcard;org.gnome.SettingsDaemon.Sound;org.gnome.SettingsDaemon.Wacom;org.gnome.SettingsDaemon.XSettings;
|
||||
6
data/gnome-shell-sass/HACKING
Normal file
6
data/gnome-shell-sass/HACKING
Normal file
@@ -0,0 +1,6 @@
|
||||
--- Generating the css file ---
|
||||
|
||||
You need sass to generate the css file.
|
||||
|
||||
To generate them run from a command line in the project directory:
|
||||
sass --sourcemap=none --update ./
|
||||
7
data/gnome-shell-sass/README
Normal file
7
data/gnome-shell-sass/README
Normal file
@@ -0,0 +1,7 @@
|
||||
GNOME Shell Sass is a project intended to allow the sharing of the theme sources in sass between gnome-shell and other projects like gnome-shell-extensions.
|
||||
|
||||
License
|
||||
=======
|
||||
GNOME Shell Sass is distributed under the terms of the GNU General Public License,
|
||||
version 2 or later. See the COPYING file for details.
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
# GNOME Shell Sass
|
||||
GNOME Shell Sass is a project intended to allow the sharing of the
|
||||
theme sources in sass between gnome-shell and other projects like
|
||||
gnome-shell-extensions.
|
||||
|
||||
Any changes should be done in the [GNOME Shell subtree][shell-subtree]
|
||||
and not the stand-alone [gnome-shell-sass repository][sass-repo]. They
|
||||
will then be synchronized periodically before releases.
|
||||
|
||||
## License
|
||||
GNOME Shell Sass is distributed under the terms of the GNU General Public
|
||||
License, version 2 or later. See the [COPYING][license] file for details.
|
||||
|
||||
[shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/HEAD/data/theme/gnome-shell-sass
|
||||
[sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
|
||||
[license]: COPYING
|
||||
@@ -1,53 +1,39 @@
|
||||
// When color definition differs for dark and light variant,
|
||||
// it gets @if-ed depending on $variant
|
||||
// it gets @if ed depending on $variant
|
||||
|
||||
@import '_palette.scss';
|
||||
|
||||
$is_highcontrast:false;
|
||||
$base_color: if($variant =='light', #ffffff, #292929);
|
||||
$bg_color: if($variant =='light', #ededed, #393f3f);
|
||||
$fg_color: if($variant =='light', #2e3436, #eeeeec);
|
||||
|
||||
$_dark_base_color: desaturate($dark_4, 100%);
|
||||
$selected_fg_color: #ffffff;
|
||||
$selected_bg_color: if($variant == 'light', #4a90d9, darken(#4a90d9,20%));
|
||||
$selected_borders_color: if($variant=='light', darken($selected_bg_color, 30%),
|
||||
darken($selected_bg_color, 20%));
|
||||
$borders_color: if($variant =='light', darken($bg_color,30%), darken($bg_color,12%));
|
||||
$borders_edge: if($variant =='light', white, transparentize($fg_color, 0.9));
|
||||
$link_color: if($variant == 'light', darken($selected_bg_color,10%),
|
||||
lighten($selected_bg_color,20%));
|
||||
$link_visited_color: if($variant == 'light', darken($selected_bg_color,20%),
|
||||
lighten($selected_bg_color,10%));
|
||||
$top_hilight: $borders_edge;
|
||||
|
||||
$base_color: if($variant == 'light', $light_1, $_dark_base_color);
|
||||
$bg_color: if($variant == 'light', $light_2, lighten($base_color, 5%));
|
||||
$fg_color: if($variant == 'light', transparentize(black, .2), white);
|
||||
$warning_color: #f57900;
|
||||
$error_color: #cc0000;
|
||||
$success_color: if($variant =='light', #73d216, darken(#73d216,10%));
|
||||
$destructive_color: if($variant =='light', #ef2929, darken(#ef2929,10%));
|
||||
|
||||
$selected_fg_color: $light_1;
|
||||
$selected_bg_color: $blue_3;
|
||||
$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
|
||||
|
||||
$borders_color: if($variant == 'light', transparentize($fg_color, .5), transparentize($fg_color, .9));
|
||||
$outer_borders_color: if($variant == 'light', rgba(255,255,255,0.8), lighten($bg_color, 5%));
|
||||
|
||||
$link_color: if($variant == 'light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
|
||||
$link_visited_color: if($variant == 'light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
|
||||
|
||||
$warning_color: if($variant == 'light', $yellow_5, #cd9309);
|
||||
$error_color: if($variant == 'light', $red_3, $red_4);
|
||||
$success_color: if($variant == 'light', $green_4, $green_5);
|
||||
$destructive_color: $error_color;
|
||||
|
||||
$osd_fg_color: $light_1;
|
||||
$osd_bg_color: $_dark_base_color; //hardcoded for both light & dark
|
||||
$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
|
||||
$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%));
|
||||
$osd_fg_color: #eeeeec;
|
||||
$osd_bg_color: #2e3436;
|
||||
$osd_borders_color: transparentize(black, 0.3);
|
||||
$osd_outer_borders_color: transparentize($osd_fg_color, 0.9);
|
||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||
|
||||
$shadow_color: if($variant == 'light', rgba(0,0,0,0.1), rgba(0,0,0,0.2));
|
||||
|
||||
// button
|
||||
$button_mix_factor: 9%;
|
||||
|
||||
// notifications
|
||||
$bubble_buttons_color: if($variant == 'light', darken($bg_color, 7%), lighten($bg_color, 5%));
|
||||
|
||||
// overview background color
|
||||
$system_bg_color: $base_color;
|
||||
$tooltip_borders_color: $osd_outer_borders_color;
|
||||
|
||||
//insensitive state derived colors
|
||||
$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
|
||||
$insensitive_bg_color: mix($bg_color, $base_color, 60%);
|
||||
$insensitive_borders_color: mix($borders_color, $base_color, 60%);
|
||||
$insensitive_borders_color: $borders_color;
|
||||
|
||||
//colors for the backdrop state, derived from the main colors.
|
||||
$backdrop_base_color: if($variant =='light', darken($base_color,1%), lighten($base_color,1%));
|
||||
@@ -56,15 +42,3 @@ $backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
|
||||
$backdrop_insensitive_color: if($variant =='light', darken($backdrop_bg_color,15%), lighten($backdrop_bg_color,15%));
|
||||
$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
|
||||
$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);
|
||||
|
||||
// derived checked colors
|
||||
$checked_bg_color: if($variant=='light', darken($bg_color, 7%), lighten($bg_color, 7%));
|
||||
$checked_fg_color: if($variant=='light', darken($fg_color, 7%), lighten($fg_color, 7%));
|
||||
|
||||
// derived hover colors
|
||||
$hover_bg_color: if($variant=='light', darken($bg_color, 3%), lighten($bg_color, 10%));
|
||||
$hover_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 10%));
|
||||
|
||||
// derived active colors
|
||||
$active_bg_color: if($variant=='light', darken($bg_color, 5%), lighten($bg_color, 12%));
|
||||
$active_fg_color: if($variant=='light', darken($fg_color, 5%), lighten($fg_color, 12%));
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
|
||||
// generic drawing of more complex things
|
||||
|
||||
@function draw_widget_edge($c:$outer_borders_color) {
|
||||
@function _widget_edge($c:$borders_edge) {
|
||||
// outer highlight "used" on most widgets
|
||||
@return 0 1px $c;
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
//font-size: ($size / $base) * 1rem;
|
||||
}
|
||||
|
||||
@mixin draw_shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) {
|
||||
@mixin _shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) {
|
||||
//
|
||||
// Helper function to stack up to 4 box-shadows;
|
||||
//
|
||||
@@ -25,326 +25,197 @@
|
||||
|
||||
// entries
|
||||
|
||||
@mixin entry($t, $fc:$selected_bg_color) {
|
||||
@mixin entry($t, $fc:$selected_bg_color, $edge: $borders_edge) {
|
||||
//
|
||||
// Entries drawing function
|
||||
//
|
||||
// $t: entry type
|
||||
// $fc: focus color
|
||||
// $edge: set to none to not draw the bottom edge or specify a color to not
|
||||
// use the default one
|
||||
//
|
||||
// possible $t values:
|
||||
// normal, focus, insensitive
|
||||
//
|
||||
transition-duration: 100ms;
|
||||
$_inner_shadows: inset 0 2px 4px transparentize(black, 0.6);
|
||||
|
||||
@if $t==normal {
|
||||
background-color: transparentize($fg_color, 0.9);
|
||||
color: transparentize($fg_color,0.3);
|
||||
background-color: $base_color;
|
||||
border-color: $borders_color;
|
||||
@include _shadows($_inner_shadows);
|
||||
|
||||
@if $is_highcontrast {
|
||||
box-shadow: inset 0 0 0 1px $hc_inset_color;
|
||||
}
|
||||
}
|
||||
|
||||
@if $t==focus {
|
||||
background-color: mix(transparentize($fg_color, 0.8), $selected_bg_color, 95%);
|
||||
box-shadow: inset 0 0 0 2px $fc;
|
||||
color: $fg_color;
|
||||
&:hover {}
|
||||
@include _shadows($_inner_shadows);
|
||||
border-color: if($fc==$selected_bg_color,
|
||||
$selected_borders_color,
|
||||
darken($fc,35%));
|
||||
}
|
||||
|
||||
@if $t==hover {
|
||||
background-color:transparentize($fg_color, 0.8);
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
@if $t==hover { }
|
||||
@if $t==insensitive {
|
||||
background-color:transparentize($insensitive_fg_color, 0.8);
|
||||
color: $insensitive_fg_color;
|
||||
border-color: $insensitive_bg_color;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
// On-screen Keyboard
|
||||
@mixin keyboard_key($t, $c:$osd_bg_color, $tc:$osd_fg_color) {
|
||||
// buttons
|
||||
|
||||
@function _border_color ($c) { @return darken($c,25%); } // colored buttons want
|
||||
// the border form the
|
||||
// base color
|
||||
|
||||
@function _text_shadow_color ($tc:$fg_color, $bg:$bg_color) {
|
||||
//
|
||||
// Keyboard key drawing function
|
||||
// calculate the color of text shadows
|
||||
//
|
||||
// $t: key type,
|
||||
// $c: base key color for colored* types
|
||||
// $tc: optional text color for colored* types
|
||||
// $tc is the text color
|
||||
// $bg is the background color
|
||||
//
|
||||
// possible $t values:
|
||||
// normal, hover, active, insensitive, insensitive-active,
|
||||
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
||||
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
||||
$_lbg: lightness($bg)/100%;
|
||||
@if lightness($tc)<50% { @return transparentize(white,1-$_lbg/($_lbg*1.3)); }
|
||||
@else { @return transparentize(black,$_lbg*0.8); }
|
||||
}
|
||||
|
||||
@function _button_hilight_color($c) {
|
||||
//
|
||||
// calculate the right top hilight color for buttons
|
||||
//
|
||||
// $c: base color;
|
||||
//
|
||||
@if lightness($c)>90% { @return white; }
|
||||
@else if lightness($c)>80% { @return transparentize(white, 0.3); }
|
||||
@else if lightness($c)>50% { @return transparentize(white, 0.5); }
|
||||
@else if lightness($c)>40% { @return transparentize(white, 0.7); }
|
||||
@else { @return transparentize(white, 0.9); }
|
||||
}
|
||||
|
||||
@mixin _button_text_shadow ($tc:$fg_color, $bg:$bg_color) {
|
||||
//
|
||||
// helper function for the text emboss effect
|
||||
//
|
||||
// $tc is the optional text color, not the shadow color
|
||||
//
|
||||
// TODO: this functions needs a way to deal with special cases
|
||||
//
|
||||
|
||||
// normal key
|
||||
@if $t==normal {
|
||||
color: $tc;
|
||||
background-color: lighten($c, 3%);
|
||||
}
|
||||
$_shadow: _text_shadow_color($tc, $bg);
|
||||
|
||||
// focused key
|
||||
@if $t==focus {
|
||||
color: $tc;
|
||||
background-color: mix(lighten($c, 3%), $selected_bg_color, 90%);
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
|
||||
&:hover {
|
||||
background-color: mix(lighten($c, 8%), $selected_bg_color, 90%);
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
|
||||
}
|
||||
&:active {
|
||||
background-color: mix(lighten($c, 10%), $selected_bg_color, 90%);
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
|
||||
}
|
||||
@if lightness($tc)<50% {
|
||||
text-shadow: 0 1px $_shadow;
|
||||
icon-shadow: 0 1px $_shadow;
|
||||
}
|
||||
|
||||
// hover key
|
||||
@else if $t==hover {
|
||||
color: $tc;
|
||||
background-color: lighten($c, 7%);
|
||||
}
|
||||
|
||||
// active key
|
||||
@else if $t==active {
|
||||
color: $tc;
|
||||
background-color: lighten($c, 10%);
|
||||
}
|
||||
|
||||
// checked key
|
||||
@else if $t==checked {
|
||||
color: $tc;
|
||||
background-color: lighten($c, 15%);
|
||||
}
|
||||
|
||||
// insensitive key
|
||||
@else if $t==insensitive {
|
||||
color: $insensitive_fg_color;
|
||||
background-color: $insensitive_bg_color;
|
||||
}
|
||||
|
||||
// reset
|
||||
@else if $t==undecorated {
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
@else {
|
||||
text-shadow: 0 -1px $_shadow;
|
||||
icon-shadow: 0 -1px $_shadow;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button($t, $c:$osd_bg_color, $tc:$fg_color, $edge: $borders_edge) {
|
||||
//
|
||||
// Button drawing function
|
||||
//
|
||||
// $t: button type,
|
||||
// $c: base button colors, derived from fg_color
|
||||
// $tc: base button colors, derived from fg_color
|
||||
// $c: base button color for colored* types
|
||||
// $tc: optional text color for colored* types
|
||||
// $edge: set to none to not draw the bottom edge or specify a color to not
|
||||
// use the default one
|
||||
//
|
||||
// possible $t values:
|
||||
// normal, hover, active, insensitive, insensitive-active,
|
||||
// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
|
||||
// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
|
||||
//
|
||||
// since buttons are all flat an borderless now the mixin is simpler
|
||||
|
||||
@mixin button($t, $tc:$fg_color, $c:$bg_color, $flat: false) {
|
||||
$_hilight_color: _button_hilight_color($c);
|
||||
$_button_edge: if($edge == none, none, _widget_edge($edge));
|
||||
$_blank_edge: if($edge == none, none, _widget_edge(transparentize($edge,1)));
|
||||
|
||||
$button_bg_color: mix($tc, $c, $button_mix_factor);
|
||||
transition-duration: 100ms;
|
||||
|
||||
// normal button
|
||||
@if $t==normal {
|
||||
color: $tc;
|
||||
background-color: $button_bg_color;
|
||||
@if $flat {
|
||||
background-color: transparent;
|
||||
}
|
||||
@if $is_highcontrast {
|
||||
box-shadow: inset 0 0 0 1px $hc_inset_color;
|
||||
}
|
||||
}
|
||||
//
|
||||
// normal button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
|
||||
$osd_bg_color);
|
||||
|
||||
// hover button
|
||||
@else if $t==hover {
|
||||
color: $tc;
|
||||
background-color: lighten($button_bg_color, 3%);
|
||||
@if $is_highcontrast {
|
||||
box-shadow: inset 0 0 0 1px $hc_inset_color !important;
|
||||
}
|
||||
color: $osd_fg_color;
|
||||
background-color: $_bg;
|
||||
border-color: $osd_borders_color;
|
||||
box-shadow: inset 0 1px lighten($osd_bg_color,10%);
|
||||
text-shadow: 0 1px black;
|
||||
icon-shadow: 0 1px black;
|
||||
}
|
||||
|
||||
// active button
|
||||
@else if $t==active {
|
||||
color: $tc;
|
||||
background-color: lighten($button_bg_color, 9%);
|
||||
}
|
||||
|
||||
// checked button
|
||||
@else if $t==checked {
|
||||
color: $tc;
|
||||
background-color: lighten($button_bg_color, 9%);
|
||||
&:hover { background-color: lighten($button_bg_color, 12%);}
|
||||
&:active { background-color: lighten($button_bg_color, 15%);}
|
||||
}
|
||||
|
||||
// focused button
|
||||
@if $t==focus {
|
||||
color: $tc;
|
||||
background-color: mix($button_bg_color, $selected_bg_color, 90%);
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4) !important;
|
||||
&:hover {
|
||||
background-color: mix(lighten($button_bg_color, 3%), $selected_bg_color, 90%);
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3) !important;
|
||||
}
|
||||
&:active {
|
||||
background-color: mix(lighten($button_bg_color, 6%), $selected_bg_color, 90%);
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3) !important;
|
||||
}
|
||||
//
|
||||
// focused button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.5),
|
||||
$osd_bg_color);
|
||||
|
||||
color: $osd_fg_color;
|
||||
text-shadow: 0 1px black;
|
||||
icon-shadow: 0 1px black;
|
||||
box-shadow: inset 0px 0px 0px 1px $selected_bg_color;
|
||||
}
|
||||
|
||||
// insensitive button
|
||||
@else if $t==hover {
|
||||
//
|
||||
// active osd button
|
||||
//
|
||||
$_bg: if($c!=$osd_bg_color, transparentize($c, 0.3),
|
||||
lighten($osd_bg_color,10%));
|
||||
|
||||
color: white;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: $_bg;
|
||||
box-shadow: inset 0 1px lighten($osd_bg_color,20%);
|
||||
text-shadow: 0 1px black;
|
||||
icon-shadow: 0 1px black;
|
||||
|
||||
}
|
||||
@else if $t==active {
|
||||
//
|
||||
// active osd button
|
||||
//
|
||||
$_bg: if($c!=$bg_color, $c, $osd_borders_color);
|
||||
|
||||
color: white;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: darken($_bg,5%);
|
||||
// This should be none, but it's creating some issues with borders, so to
|
||||
// workaround it for now, use inset wich goes through a different code path.
|
||||
// see https://bugzilla.gnome.org/show_bug.cgi?id=752934
|
||||
box-shadow: inset 0 0 black;
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
}
|
||||
@else if $t==insensitive {
|
||||
color: transparentize($tc, 0.5);
|
||||
background-color: transparentize($tc, .95);
|
||||
}
|
||||
//
|
||||
// insensitive osd button
|
||||
//
|
||||
$_bg: transparentize(mix($insensitive_fg_color,$osd_bg_color,20%),0.3);
|
||||
|
||||
// default/suggested button
|
||||
@else if $t==default {
|
||||
background-color: $selected_bg_color;
|
||||
color: $selected_fg_color;
|
||||
|
||||
&:focus {
|
||||
box-shadow: inset 0 0 0 2px transparentize($selected_fg_color, .4) !important;
|
||||
}
|
||||
&:hover, &:focus {
|
||||
background-color: lighten($selected_bg_color, 5%);
|
||||
color: lighten($selected_fg_color, 5%);
|
||||
}
|
||||
&:active {
|
||||
background-color: darken($selected_bg_color, 7%);
|
||||
color: darken($selected_fg_color, 7%);
|
||||
}
|
||||
&:insensitive {
|
||||
@include button(insensitive);
|
||||
background-color: transparentize($selected_bg_color, .5);
|
||||
color: transparentize($selected_fg_color, .5);
|
||||
}
|
||||
}
|
||||
|
||||
// reset
|
||||
@else if $t==undecorated {
|
||||
background-color: transparent;
|
||||
background-color: none;
|
||||
color: $insensitive_fg_color;
|
||||
border-color: $osd_borders_color;
|
||||
background-color: $_bg;
|
||||
box-shadow: none;
|
||||
&:insensitive {
|
||||
@include button(insensitive);
|
||||
background-color: transparent;
|
||||
color: transparentize($selected_fg_color, .5);
|
||||
}
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
// tile
|
||||
@mixin tile_button($color, $flat: true) {
|
||||
@extend %tile;
|
||||
@if $flat {
|
||||
@else if $t==undecorated {
|
||||
//
|
||||
// reset
|
||||
//
|
||||
border-color: transparent;
|
||||
background-color: transparent;
|
||||
} @else {
|
||||
background-color: transparentize($color, .84);
|
||||
@if $is_highcontrast {
|
||||
box-shadow: inset 999px 0 0 0 transparentize($color, .2); // bit of a hack
|
||||
}
|
||||
}
|
||||
&:hover { background-color: transparentize($color, .9);}
|
||||
&:selected, &:focus {
|
||||
background-color: transparentize($color, .87);
|
||||
&:hover { background-color: transparentize($color, .84);}
|
||||
&:active { background-color: transparentize($color, .87);}
|
||||
}
|
||||
&:active { background-color: transparentize($color, .84);}
|
||||
&:outlined, &:checked {
|
||||
background-color: transparentize($color, .81);
|
||||
&:active { background-color: transparentize($color, .78);}
|
||||
&:hover { background-color: transparentize($color, .75);}
|
||||
}
|
||||
&:drop {
|
||||
border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
|
||||
background-color: transparentize($selected_bg_color, .8);
|
||||
background-image: none;
|
||||
|
||||
@include _shadows(inset 0 1px transparentize(white,1),
|
||||
$_blank_edge);
|
||||
|
||||
text-shadow: none;
|
||||
icon-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
// overview icon, dash, app grid
|
||||
@mixin overview_icon($color, $flat: true) {
|
||||
transition-duration: 400ms;
|
||||
.overview-icon {
|
||||
@extend %tile;
|
||||
}
|
||||
@if $flat {
|
||||
.overview-icon { background-color: transparent;}
|
||||
} @else {
|
||||
.overview-icon {
|
||||
background-color: transparentize($color, .93);
|
||||
}
|
||||
}
|
||||
&:hover .overview-icon { background-color: transparentize($color, .9);}
|
||||
|
||||
&:selected .overview-icon,
|
||||
&:focus .overview-icon {
|
||||
background-color: transparentize($color, .87);
|
||||
&:hover .overview-icon { background-color: transparentize($color, .84);}
|
||||
&:active .overview-icon { background-color: transparentize($color, .87);}
|
||||
}
|
||||
&:active .overview-icon { background-color: transparentize($color, .84);}
|
||||
&:outlined .overview-icon,
|
||||
&:checked .overview-icon {
|
||||
background-color: transparentize($color, .81);
|
||||
&:active .overview-icon { background-color: transparentize($color, .78);}
|
||||
&:hover .overview-icon { background-color: transparentize($color, .75);}
|
||||
}
|
||||
&:drop .overview-icon {
|
||||
border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
|
||||
background-color: transparentize($selected_bg_color, .8);
|
||||
}
|
||||
}
|
||||
|
||||
// styling for elements within popovers that look like notifications
|
||||
@mixin card($flat: false) {
|
||||
border-radius: $base_border_radius*1.5;
|
||||
margin: $base_margin;
|
||||
|
||||
@if $flat {
|
||||
@include button(undecorated);
|
||||
box-shadow: none !important;
|
||||
} @else {
|
||||
@include button(normal);
|
||||
}
|
||||
&:hover {@include button(hover);}
|
||||
&:active {@include button(active);}
|
||||
&:focus {@include button(focus);}
|
||||
}
|
||||
|
||||
// styling for all menuitems in popovers
|
||||
@mixin menuitem($bg, $flat: true) {
|
||||
|
||||
// lighten the background color always
|
||||
$bg: lighten($bg,5%);
|
||||
|
||||
font-weight: normal;
|
||||
spacing: $base_padding;
|
||||
transition-duration: 100ms;
|
||||
padding: $base_padding*1.5 $base_padding*2;
|
||||
|
||||
&:ltr {padding-left: $base_padding;}
|
||||
&:rtl {padding-right: $base_padding;}
|
||||
|
||||
@if $flat {
|
||||
@include button(undecorated);
|
||||
box-shadow: none !important;
|
||||
} @else {
|
||||
@include button(normal, $c:$bg);
|
||||
}
|
||||
&:focus,
|
||||
&:hover {
|
||||
@include button(hover, $c:$bg);
|
||||
}
|
||||
&:active {@include button(active, $c:$bg);}
|
||||
&:checked {@include button(checked, $c:$bg);}
|
||||
}
|
||||
|
||||
@@ -1,48 +1,31 @@
|
||||
// When color definition differs for dark and light variant,
|
||||
// it gets @if ed depending on $variant
|
||||
|
||||
@import '_palette.scss';
|
||||
|
||||
$is_highcontrast:true;
|
||||
|
||||
$base_color: if($variant == 'light', white, black);
|
||||
$bg_color: if($variant == 'light', darken($base_color, 10%), lighten($base_color, 10%));
|
||||
$fg_color: if($variant == 'light', transparentize(black, .2), white);
|
||||
|
||||
$selected_fg_color: white;
|
||||
$selected_bg_color: $blue_3;
|
||||
$base_color: #222;
|
||||
$bg_color: #000;
|
||||
$fg_color: #fff;
|
||||
|
||||
$selected_fg_color: #ffffff;
|
||||
$selected_bg_color: darken(#4a90d9,20%);
|
||||
$selected_borders_color: darken($selected_bg_color, 20%);
|
||||
$borders_color: if($variant == 'light', transparentize($fg_color, .5), transparentize($fg_color, .7));
|
||||
$outer_borders_color: $borders_color;
|
||||
$borders_color: darken($bg_color,12%);
|
||||
$borders_edge: transparentize($fg_color, 0.9);
|
||||
$link_color: lighten($selected_bg_color,20%);
|
||||
$link_visited_color: lighten($selected_bg_color,10%);
|
||||
$top_hilight: $borders_edge;
|
||||
|
||||
$warning_color: if($variant == 'light', $yellow_5, #cd9309);
|
||||
$error_color: if($variant == 'light', $red_3, $red_4);
|
||||
$success_color: if($variant == 'light', $green_4, $green_5);
|
||||
$destructive_color: $error_color;
|
||||
$warning_color: #f57900;
|
||||
$error_color: #cc0000;
|
||||
$success_color: darken(#73d216,10%);
|
||||
$destructive_color: darken(#ef2929,10%);
|
||||
|
||||
$osd_fg_color: white;
|
||||
$osd_bg_color: $base_color;
|
||||
$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
|
||||
$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%));
|
||||
$osd_borders_color: transparentize($osd_fg_color, 0.8);
|
||||
$osd_outer_borders_color: $osd_borders_color;
|
||||
$osd_fg_color: #eeeeec;
|
||||
$osd_bg_color: #2e3436;
|
||||
$osd_borders_color: transparentize(black, 0.3);
|
||||
$osd_outer_borders_color: transparentize(white, 0.9);
|
||||
|
||||
$shadow_color: rgba(0,0,0,0);
|
||||
|
||||
// hc
|
||||
$hc_inset_color: transparentize($fg_color, 0.7);
|
||||
|
||||
// button
|
||||
$button_mix_factor: 20%;
|
||||
|
||||
// notifications
|
||||
$bubble_buttons_color: if($variant == 'light', darken($bg_color, 7%), lighten($bg_color, 5%));
|
||||
|
||||
// overview background color
|
||||
$system_bg_color: black;
|
||||
$tooltip_borders_color: $osd_outer_borders_color;
|
||||
|
||||
//insensitive state derived colors
|
||||
$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
|
||||
@@ -56,15 +39,3 @@ $backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
|
||||
$backdrop_insensitive_color: lighten($backdrop_bg_color,15%);
|
||||
$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
|
||||
$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);
|
||||
|
||||
// derived checked colors
|
||||
$checked_bg_color: if($variant=='light', darken($bg_color, 12%), lighten($bg_color, 18%));
|
||||
$checked_fg_color: if($variant=='light', darken($fg_color, 12%), lighten($fg_color, 18%));
|
||||
|
||||
// derived hover colors
|
||||
$hover_bg_color: if($variant=='light', darken($bg_color, 8%), lighten($bg_color, 20%));
|
||||
$hover_fg_color: if($variant=='light', darken($fg_color, 10%), lighten($fg_color, 20%));
|
||||
|
||||
// derived active colors
|
||||
$active_bg_color: if($variant=='light', darken($bg_color, 10%), lighten($bg_color, 22%));
|
||||
$active_fg_color: if($variant=='light', darken($fg_color, 10%), lighten($fg_color, 22%));
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
//GNOME Color Palette
|
||||
$blue_1: #99c1f1;
|
||||
$blue_2: #62a0ea;
|
||||
$blue_3: #3584e4;
|
||||
$blue_4: #1c71d8;
|
||||
$blue_5: #1a5fb4;
|
||||
$green_1: #8ff0a4;
|
||||
$green_2: #57e389;
|
||||
$green_3: #33d17a;
|
||||
$green_4: #2ec27e;
|
||||
$green_5: #26a269;
|
||||
$yellow_1: #f9f06b;
|
||||
$yellow_2: #f8e45c;
|
||||
$yellow_3: #f6d32d;
|
||||
$yellow_4: #f5c211;
|
||||
$yellow_5: #e5a50a;
|
||||
$orange_1: #ffbe6f;
|
||||
$orange_2: #ffa348;
|
||||
$orange_3: #ff7800;
|
||||
$orange_4: #e66100;
|
||||
$orange_5: #c64600;
|
||||
$red_1: #f66151;
|
||||
$red_2: #ed333b;
|
||||
$red_3: #e01b24;
|
||||
$red_4: #c01c28;
|
||||
$red_5: #a51d2d;
|
||||
$purple_1: #dc8add;
|
||||
$purple_2: #c061cb;
|
||||
$purple_3: #9141ac;
|
||||
$purple_4: #813d9c;
|
||||
$purple_5: #613583;
|
||||
$brown_1: #cdab8f;
|
||||
$brown_2: #b5835a;
|
||||
$brown_3: #986a44;
|
||||
$brown_4: #865e3c;
|
||||
$brown_5: #63452c;
|
||||
$light_1: #ffffff;
|
||||
$light_2: #f6f5f4;
|
||||
$light_3: #deddda;
|
||||
$light_4: #c0bfbc;
|
||||
$light_5: #9a9996;
|
||||
$dark_1: #77767b;
|
||||
$dark_2: #5e5c64;
|
||||
$dark_3: #3d3846;
|
||||
$dark_4: #241f31;
|
||||
$dark_5: #000000;
|
||||
@@ -1,50 +0,0 @@
|
||||
//
|
||||
// Shell widgets stylesheets are placed in separate .scss files
|
||||
// in 'widgets' and imported into the main stylesheet in this file.
|
||||
// To create or update a widget for the shell modify the list below.
|
||||
//
|
||||
|
||||
/* WIDGETS */
|
||||
|
||||
// Primary widgets
|
||||
@import 'widgets/base';
|
||||
@import 'widgets/entries';
|
||||
@import 'widgets/buttons';
|
||||
@import 'widgets/check-box';
|
||||
@import 'widgets/switches';
|
||||
@import 'widgets/slider';
|
||||
@import 'widgets/scrollbars';
|
||||
// Popovers
|
||||
@import 'widgets/popovers';
|
||||
@import 'widgets/calendar';
|
||||
@import 'widgets/message-list';
|
||||
@import 'widgets/ibus-popup';
|
||||
// Notifications
|
||||
@import 'widgets/notifications';
|
||||
@import 'widgets/hotplug';
|
||||
// Dialogs
|
||||
@import 'widgets/dialogs';
|
||||
// OSDs
|
||||
@import 'widgets/osd';
|
||||
@import 'widgets/switcher-popup';
|
||||
@import 'widgets/workspace-switcher';
|
||||
@import 'widgets/screenshot';
|
||||
// Panel
|
||||
@import 'widgets/panel';
|
||||
@import 'widgets/corner-ripple';
|
||||
@import 'widgets/quick-settings';
|
||||
// Overview
|
||||
@import 'widgets/overview';
|
||||
@import 'widgets/window-picker';
|
||||
@import 'widgets/search-entry';
|
||||
@import 'widgets/search-results';
|
||||
@import 'widgets/dash';
|
||||
@import 'widgets/app-grid';
|
||||
@import 'widgets/workspace-thumbnails';
|
||||
// A11y / misc
|
||||
@import 'widgets/a11y';
|
||||
@import 'widgets/misc';
|
||||
@import 'widgets/keyboard';
|
||||
@import 'widgets/looking-glass';
|
||||
// Lock / login screen
|
||||
@import 'widgets/login-lock';
|
||||
@@ -1,24 +0,0 @@
|
||||
// Pointer location
|
||||
.ripple-pointer-location {
|
||||
width: $ripple_size;
|
||||
height: $ripple_size;
|
||||
border-radius: $ripple_size * 0.5; // radius equals the size of the box to give us the curve
|
||||
background-color: lighten(transparentize($selected_bg_color, 0.7), 30%);
|
||||
box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%);
|
||||
}
|
||||
|
||||
// Pointer accessibility notifications
|
||||
.pie-timer {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
-pie-border-width: 3px;
|
||||
-pie-border-color: $selected_bg_color;
|
||||
-pie-background-color: lighten(transparentize($selected_bg_color, 0.7), 40%);
|
||||
}
|
||||
|
||||
// Screen zoom/Magnifier
|
||||
.magnifier-zoom-region {
|
||||
border: 2px solid $selected_bg_color;
|
||||
|
||||
&.full-screen { border-width: 0; }
|
||||
}
|
||||
@@ -1,177 +0,0 @@
|
||||
/* App Grid */
|
||||
|
||||
$app_icon_size: 96px;
|
||||
|
||||
// app icons
|
||||
.icon-grid {
|
||||
row-spacing: $base_padding * 2;
|
||||
column-spacing: $base_padding * 2;
|
||||
max-row-spacing: $base_padding * 7;
|
||||
max-column-spacing: $base_padding * 7;
|
||||
page-padding-top: $base_padding * 4;
|
||||
page-padding-bottom: $base_padding * 4;
|
||||
page-padding-left: $base_padding * 3;
|
||||
page-padding-right: $base_padding * 3;
|
||||
}
|
||||
|
||||
/* App Icons */
|
||||
|
||||
// Icon tiles in the app grid
|
||||
.app-well-app {
|
||||
@include overview_icon($osd_fg_color);
|
||||
|
||||
.overview-icon {
|
||||
padding: $base_padding*2;
|
||||
border-radius: $base_border_radius*3;
|
||||
}
|
||||
.overview-icon.overview-icon-with-label {
|
||||
> StBoxLayout {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// app folders
|
||||
.app-well-app.app-folder {
|
||||
@include overview_icon($fg_color, $flat: false);
|
||||
}
|
||||
|
||||
// expanded folder
|
||||
.app-folder-dialog {
|
||||
border-radius: $modal_radius*4;
|
||||
background-color: $bg_color;
|
||||
padding: $base_padding*2;
|
||||
box-shadow:inset 0 0 0 1px $outer_borders_color;
|
||||
|
||||
@if $is_highcontrast {
|
||||
box-shadow:inset 0 0 0 2px $hc_inset_color;
|
||||
}
|
||||
|
||||
& .folder-name-container {
|
||||
padding: 24px 36px 0;
|
||||
spacing: 12px;
|
||||
|
||||
& .folder-name-label,
|
||||
& .folder-name-entry {
|
||||
@extend %title_1;
|
||||
}
|
||||
|
||||
& .folder-name-entry {
|
||||
width: 12em;
|
||||
border-radius: $base_border_radius*2;
|
||||
}
|
||||
|
||||
/* FIXME: this is to keep the label in sync with the entry */
|
||||
& .folder-name-label { padding: 5px 7px; color: $osd_fg_color; }
|
||||
|
||||
& .edit-folder-button {
|
||||
@extend %button;
|
||||
padding: 0;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 99px;
|
||||
& > StIcon { icon-size: $base_icon_size }
|
||||
}
|
||||
}
|
||||
|
||||
& .icon-grid {
|
||||
row-spacing: $base_padding * 2;
|
||||
column-spacing: $base_padding * 5;
|
||||
page-padding-top: 0;
|
||||
page-padding-bottom: 0;
|
||||
page-padding-left: 0;
|
||||
page-padding-right: 0;
|
||||
}
|
||||
|
||||
& .page-indicators {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
.app-folder-dialog-container {
|
||||
padding: $base_padding*2;
|
||||
width: 720px;
|
||||
height: 720px;
|
||||
}
|
||||
|
||||
// Running app indicator (also shown in dash)
|
||||
.app-well-app-running-dot {
|
||||
height: 5px;
|
||||
width: 5px;
|
||||
border-radius:5px;
|
||||
margin-bottom: 8px;
|
||||
background-color: $osd_fg_color;
|
||||
}
|
||||
|
||||
// Rename popup for app folders
|
||||
.rename-folder-popup {
|
||||
.rename-folder-popup-item {
|
||||
spacing: $base_padding;
|
||||
&:ltr, &:rtl { padding: 0 $base_padding * 2; }
|
||||
}
|
||||
}
|
||||
|
||||
// App Grid pagination indicators
|
||||
.page-indicator {
|
||||
padding: $base_padding $base_padding * 2 0;
|
||||
transition-duration:400ms;
|
||||
|
||||
.page-indicator-icon {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 10px; // the same as height&width
|
||||
background-color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.apps-scroll-view {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
// shutdown and other actions in the grid
|
||||
.system-action-icon {
|
||||
background-color: rgba(0,0,0,0.8);
|
||||
color: white;
|
||||
border-radius: 99px;
|
||||
icon-size: $app_icon_size * 0.5;
|
||||
@if $is_highcontrast {
|
||||
box-shadow: inset 0 0 0 2px $hc_inset_color;
|
||||
}
|
||||
}
|
||||
|
||||
.page-navigation-hint {
|
||||
&.dnd {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
&.next:ltr,
|
||||
&.previous:rtl {
|
||||
background-gradient-start: rgba(255, 255, 255, 0.05);
|
||||
background-gradient-end: transparent;
|
||||
background-gradient-direction: horizontal;
|
||||
border-radius: $modal_radius*1.5 0px 0px $modal_radius*1.5;
|
||||
}
|
||||
|
||||
&.previous:ltr,
|
||||
&.next:rtl {
|
||||
background-gradient-start: transparent;
|
||||
background-gradient-end: rgba(255, 255, 255, 0.05);
|
||||
background-gradient-direction: horizontal;
|
||||
border-radius: 0px $modal_radius*1.5 $modal_radius*1.5 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.page-navigation-arrow {
|
||||
margin: 6px;
|
||||
padding: 18px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 99px;
|
||||
@if $is_highcontrast {
|
||||
@include button(normal, $osd_fg_color, transparentize($osd_bg_color, 0.5));
|
||||
}
|
||||
|
||||
&:insensitive { @include button(undecorated, $osd_fg_color, transparentize($osd_bg_color, 0.5));}
|
||||
&:hover { @include button(hover, $osd_fg_color, transparentize($osd_bg_color, 0.5));}
|
||||
&:active { @include button(active, $osd_fg_color, transparentize($osd_bg_color, 0.5));}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
// Links
|
||||
.shell-link {
|
||||
color: $link_color;
|
||||
|
||||
&:hover {
|
||||
color: lighten($link_color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
// Outline for low res icons
|
||||
.lowres-icon {
|
||||
icon-shadow: 0 1px 2px rgba(black, 0.3);
|
||||
}
|
||||
|
||||
// Dropshadow for large icons
|
||||
.icon-dropshadow {
|
||||
icon-shadow: 0 1px 5px rgba(black, 0.8);
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/* Buttons */
|
||||
|
||||
.button {
|
||||
@extend %button; // that's it
|
||||
min-height: 22px;
|
||||
}
|
||||
|
||||
.icon-button {
|
||||
@extend .button; // same style as buttons
|
||||
|
||||
border-radius: 99px;
|
||||
padding: $base_padding*2;
|
||||
min-height: 16px;
|
||||
|
||||
StIcon {
|
||||
icon-size: $base_icon_size;
|
||||
-st-icon-style: symbolic;
|
||||
}
|
||||
}
|
||||
@@ -1,265 +0,0 @@
|
||||
/* Date/Time Menu */
|
||||
|
||||
// overall menu
|
||||
#calendarArea {
|
||||
padding: $base_padding - 2px;
|
||||
}
|
||||
|
||||
// Calendar menu side column
|
||||
.datemenu-calendar-column {
|
||||
spacing: $base_padding;
|
||||
&:ltr {padding-left: $base_padding;}
|
||||
&:rtl {padding-right: $base_padding;}
|
||||
.datemenu-displays-box {spacing: $base_padding;}
|
||||
}
|
||||
|
||||
/* today button (the date) */
|
||||
.datemenu-today-button {
|
||||
@include card(flat);
|
||||
padding: $base_padding * 1.5;
|
||||
|
||||
// weekday label
|
||||
.day-label {
|
||||
@extend %heading;
|
||||
}
|
||||
|
||||
// date label
|
||||
.date-label {
|
||||
@extend %title_2;
|
||||
}
|
||||
}
|
||||
|
||||
/* Calendar */
|
||||
.calendar {
|
||||
@include card(flat);
|
||||
margin-top: 0;
|
||||
|
||||
// month header
|
||||
.calendar-month-header {
|
||||
|
||||
// prev/next month icons
|
||||
.calendar-change-month-back StIcon,
|
||||
.calendar-change-month-forward StIcon {
|
||||
icon-size: $base_icon_size;
|
||||
}
|
||||
|
||||
// month label
|
||||
.calendar-month-label {
|
||||
@extend %heading;
|
||||
padding: 8px 0;
|
||||
}
|
||||
.pager-button {
|
||||
background-color: transparent;
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
margin: 2px;
|
||||
border-radius: $base_border_radius;
|
||||
&:hover, &:focus {background-color: $hover_bg_color;}
|
||||
&:active {background-color: $active_bg_color;}
|
||||
@if $is_highcontrast {
|
||||
border:1px solid $hc_inset_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$calendar_day_size: 3em;
|
||||
|
||||
.calendar-day-base {
|
||||
text-align: center;
|
||||
margin: 2px;
|
||||
padding: 0 !important;
|
||||
height: $calendar_day_size !important;
|
||||
width: $calendar_day_size !important;
|
||||
border-radius: 99px;
|
||||
transition-duration: 100ms;
|
||||
@extend %numeric;
|
||||
@extend %smaller;
|
||||
|
||||
&:hover {background-color: $hover_bg_color;}
|
||||
&:focus {
|
||||
background-color: mix($bg_color, $selected_bg_color, 80%);
|
||||
color: $selected_fg_color;
|
||||
box-shadow:inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
|
||||
}
|
||||
|
||||
&:active,&:selected {
|
||||
color: $active_fg_color;
|
||||
background-color: $active_bg_color;
|
||||
&:focus {
|
||||
background-color: mix($active_bg_color, $selected_bg_color, 80%);
|
||||
}
|
||||
}
|
||||
|
||||
// day of week heading
|
||||
&.calendar-day-heading {
|
||||
color: $insensitive_fg_color;
|
||||
padding-top: $base_padding;
|
||||
height: 16px !important; // force heading to be smaller height
|
||||
font-weight: 600;
|
||||
@extend %smaller;
|
||||
}
|
||||
}
|
||||
|
||||
.calendar-day {
|
||||
font-weight: 600;
|
||||
@if $is_highcontrast {
|
||||
border:1px solid $hc_inset_color;
|
||||
border-radius: 9px;
|
||||
}
|
||||
}
|
||||
.calendar-work-day {}
|
||||
.calendar-nonwork-day {color: $insensitive_fg_color;}
|
||||
.calendar-other-month-day {
|
||||
color: transparentize($fg_color, 0.5);
|
||||
&.calendar-nonwork-day {
|
||||
color: transparentize($insensitive_fg_color, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
// Today
|
||||
.calendar-today {
|
||||
background-color: $selected_bg_color;
|
||||
font-weight: 800;
|
||||
color: $selected_fg_color !important;
|
||||
|
||||
&:hover,&:focus {
|
||||
background-color:lighten($selected_bg_color, 3%);
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
&:active,&:selected {
|
||||
background-color: $selected_bg_color;
|
||||
color: inherit;
|
||||
|
||||
&:hover,&:focus {
|
||||
background-color:lighten($selected_bg_color, 3%);
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.calendar-day-with-events {
|
||||
background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/calendar-today-light.svg"),url("resource:///org/gnome/shell/theme/calendar-today.svg"));
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.calendar-week-number {
|
||||
@include fontsize($base_font_size - 4);
|
||||
font-weight: bold;
|
||||
font-feature-settings: "tnum";
|
||||
margin: 6px;
|
||||
padding: 0 $base_padding;
|
||||
border-radius: 3px;
|
||||
background-color: transparentize($fg_color, 0.9);
|
||||
color: $insensitive_fg_color
|
||||
}
|
||||
}
|
||||
|
||||
/* Events */
|
||||
.events-button {
|
||||
@include card;
|
||||
padding: $base_padding * 2;
|
||||
|
||||
.events-box {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
.events-list {
|
||||
spacing: 2 * $base_padding;
|
||||
}
|
||||
|
||||
.events-title {
|
||||
@extend %heading;
|
||||
color: $insensitive_fg_color;
|
||||
margin-bottom: $base_margin;
|
||||
}
|
||||
|
||||
.event-time {
|
||||
@extend %numeric;
|
||||
@extend %caption;
|
||||
color: $insensitive_fg_color;
|
||||
}
|
||||
}
|
||||
|
||||
/* World clocks */
|
||||
.world-clocks-button {
|
||||
@include card;
|
||||
padding: $base_padding * 2;
|
||||
|
||||
.world-clocks-grid {
|
||||
spacing-rows: $base_padding;
|
||||
spacing-columns: $base_padding * 2;
|
||||
}
|
||||
|
||||
// title
|
||||
.world-clocks-header {
|
||||
@extend %heading;
|
||||
color: $insensitive_fg_color;
|
||||
}
|
||||
|
||||
// city label
|
||||
.world-clocks-city {
|
||||
color: $fg_color;
|
||||
}
|
||||
|
||||
// timezone time
|
||||
.world-clocks-time {
|
||||
@extend %heading;
|
||||
@extend %numeric;
|
||||
color: $fg_color;
|
||||
|
||||
&:ltr {text-align: right;}
|
||||
&:rtl {text-align: left;}
|
||||
}
|
||||
|
||||
// timezone offset label
|
||||
.world-clocks-timezone {
|
||||
@extend %numeric;
|
||||
@extend %caption;
|
||||
color: $insensitive_fg_color;
|
||||
}
|
||||
}
|
||||
|
||||
/* Weather */
|
||||
.weather-button {
|
||||
@include card;
|
||||
padding: $base_padding * 2;
|
||||
|
||||
.weather-box {
|
||||
spacing: $base_padding + $base_margin;
|
||||
}
|
||||
|
||||
.weather-header-box {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
.weather-header {
|
||||
color: $insensitive_fg_color;
|
||||
@extend %heading;
|
||||
|
||||
&.location {
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.weather-grid {
|
||||
spacing-rows: $base_padding;
|
||||
spacing-columns: $base_padding * 2;
|
||||
}
|
||||
|
||||
.weather-forecast-time {
|
||||
@extend %numeric;
|
||||
@extend %caption;
|
||||
color: darken($fg_color,30%);
|
||||
padding-top: 0.2em;
|
||||
padding-bottom: 0.4em;
|
||||
}
|
||||
|
||||
.weather-forecast-icon {
|
||||
icon-size: $large_icon_size;
|
||||
}
|
||||
|
||||
.weather-forecast-temp {
|
||||
@extend %heading;
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
/* Check Boxes */
|
||||
|
||||
// these are equal to the size of the SVG assets
|
||||
$check_height: 24px;
|
||||
$check_width: 24px;
|
||||
|
||||
|
||||
.check-box {
|
||||
StBoxLayout { spacing: .8em; }
|
||||
StBin {
|
||||
width: $check_width;
|
||||
height: $check_height;
|
||||
background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off.svg"));
|
||||
}
|
||||
&:focus StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-focused-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"));; }
|
||||
&:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
|
||||
&:focus:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
/* Activities Ripple */
|
||||
|
||||
$ripple_size: 50px;
|
||||
|
||||
.ripple-box {
|
||||
background-color: rgba(255,255,255,0.2);
|
||||
box-shadow: 0 0 2px 2px rgba(255,255,255,0.2);
|
||||
// plus + 2px for the border (box-shadow)
|
||||
width: $ripple_size + 2px;
|
||||
height: $ripple_size + 2px;
|
||||
border-radius: 0 0 $ripple_size + 2px 0; // radius equals the size of the box to give us the curve
|
||||
|
||||
// just a simple change to the border radius position
|
||||
&:rtl { border-radius: 0 0 0 $ripple_size + 2px; }
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
/* Dash */
|
||||
|
||||
$dash_background_color: lighten($system_bg_color, 5%);
|
||||
$dash_placeholder_size: 32px;
|
||||
$dash_padding: $base_padding*2; // 12px
|
||||
$dash_border_radius: $modal_radius + $dash_padding;
|
||||
|
||||
// container for the dash
|
||||
#dash {
|
||||
@extend %caption;
|
||||
margin-top: $dash_padding;
|
||||
|
||||
.placeholder {
|
||||
// background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
|
||||
background-image:none;
|
||||
background-size: contain;
|
||||
height: $dash_placeholder_size;
|
||||
}
|
||||
|
||||
.empty-dash-drop-target {
|
||||
width: $dash_placeholder_size;
|
||||
height: $dash_placeholder_size;
|
||||
}
|
||||
|
||||
// Running app indicator (also shown in app grid)
|
||||
.app-well-app-running-dot {
|
||||
margin-bottom: 14px; // hardcoded
|
||||
}
|
||||
}
|
||||
|
||||
// background of the dash behind app icons
|
||||
.dash-background {
|
||||
background-color: $dash_background_color;
|
||||
border-radius: $dash_border_radius;
|
||||
padding: $dash_padding;
|
||||
spacing: $base_padding;
|
||||
margin-bottom: $dash_padding;
|
||||
|
||||
@if $is_highcontrast {
|
||||
border: 2px solid $hc_inset_color;
|
||||
box-shadow:none;
|
||||
}
|
||||
}
|
||||
|
||||
// items on the dash
|
||||
.dash-item-container {
|
||||
> * {margin: 0 2px;}
|
||||
&:ltr{&:first-child {margin-left: 0;}}
|
||||
&:rtl{&:first-child {margin-right: 0;}}
|
||||
|
||||
// each app item on the dash
|
||||
.app-well-app .overview-icon {
|
||||
padding: $base_padding;
|
||||
border-radius: $base_border_radius*2;
|
||||
}
|
||||
|
||||
// show apps button
|
||||
.show-apps { @include overview_icon($osd_fg_color);}
|
||||
|
||||
.show-apps, .app-well-app {
|
||||
padding-bottom: $dash_padding;
|
||||
}
|
||||
}
|
||||
|
||||
// separator between favourites and running apps
|
||||
.dash-separator {
|
||||
width: 1px;
|
||||
margin: 0 $base_margin;
|
||||
background-color: $borders_color;
|
||||
margin-bottom: $dash_padding;
|
||||
@if $is_highcontrast {
|
||||
width: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
// OSD Tooltip
|
||||
.dash-label {
|
||||
@extend %tooltip;
|
||||
-y-offset: $base_margin * 2; // distance from the dash edge
|
||||
}
|
||||
@@ -1,174 +0,0 @@
|
||||
/* Modal Dialogs */
|
||||
|
||||
.headline {
|
||||
@extend %title_4;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
background-color: $bg_color;
|
||||
border-radius: $modal_radius;
|
||||
box-shadow: inset 0 0 0 1px $outer_borders_color;
|
||||
|
||||
.modal-dialog-content-box {
|
||||
margin: 32px 40px;
|
||||
spacing: 32px;
|
||||
max-width: 28em;
|
||||
}
|
||||
|
||||
.modal-dialog-linked-button {
|
||||
@extend %bubble_button;
|
||||
}
|
||||
}
|
||||
|
||||
/* End Session Dialog */
|
||||
.end-session-dialog {
|
||||
width: 30em;
|
||||
|
||||
.end-session-dialog-battery-warning,
|
||||
.dialog-list-title {
|
||||
color: $warning_color;
|
||||
}
|
||||
}
|
||||
|
||||
/* Message Dialog */
|
||||
.message-dialog-content {
|
||||
spacing: 18px;
|
||||
|
||||
.message-dialog-title {
|
||||
text-align: center;
|
||||
@extend %title_2;
|
||||
|
||||
&.lightweight { @extend %title_4;}
|
||||
}
|
||||
.message-dialog-description { text-align: center; }
|
||||
}
|
||||
|
||||
/* Dialog List */
|
||||
.dialog-list {
|
||||
spacing: 18px;
|
||||
|
||||
.dialog-list-title {
|
||||
text-align: center;
|
||||
@extend %heading;
|
||||
}
|
||||
|
||||
.dialog-list-scrollview { max-height: 200px; }
|
||||
.dialog-list-box {
|
||||
spacing: 1em;
|
||||
|
||||
.dialog-list-item {
|
||||
spacing: 1em;
|
||||
|
||||
.dialog-list-item-title { font-weight: bold; }
|
||||
.dialog-list-item-description {
|
||||
color: darken($fg_color,5%);
|
||||
@extend %caption;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Run Dialog */
|
||||
.run-dialog {
|
||||
.modal-dialog-content-box {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
.run-dialog-entry { width: 20em; }
|
||||
.run-dialog-description {
|
||||
@extend %caption;
|
||||
text-align: center;
|
||||
color: darken($fg_color, 20%);
|
||||
}
|
||||
}
|
||||
|
||||
/* Password or Authentication Dialog */
|
||||
|
||||
.prompt-dialog {
|
||||
width: 28em;
|
||||
|
||||
.modal-dialog-content-box {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
.prompt-dialog-password-grid {
|
||||
spacing-rows: 8px;
|
||||
spacing-columns: 4px;
|
||||
|
||||
.prompt-dialog-password-entry {
|
||||
width: auto;
|
||||
|
||||
// 4px (spacing) + 16px (spinner-width)
|
||||
&:ltr { margin-left: 20px; }
|
||||
&:rtl { margin-right: 20px; }
|
||||
}
|
||||
}
|
||||
|
||||
.prompt-dialog-password-layout {
|
||||
spacing: 8px;
|
||||
}
|
||||
|
||||
.prompt-dialog-password-entry {
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
.prompt-dialog-error-label,
|
||||
.prompt-dialog-info-label,
|
||||
.prompt-dialog-null-label {
|
||||
text-align: center;
|
||||
@extend %caption;
|
||||
}
|
||||
|
||||
.prompt-dialog-error-label {
|
||||
color: $warning_color;
|
||||
}
|
||||
|
||||
|
||||
/* Polkit Dialog */
|
||||
|
||||
.polkit-dialog-user-layout {
|
||||
text-align: center;
|
||||
spacing: 8px;
|
||||
margin-bottom: 6px;
|
||||
|
||||
.polkit-dialog-user-root-label { color: $warning_color; }
|
||||
}
|
||||
|
||||
/* Audio selection dialog */
|
||||
.audio-device-selection-dialog {
|
||||
.modal-dialog-content-box { margin-bottom: 28px; }
|
||||
.audio-selection-box { spacing: 20px; }
|
||||
}
|
||||
|
||||
.audio-selection-device {
|
||||
border-radius: $base_border_radius*2;
|
||||
&:hover,&:focus { background-color: $hover_bg_color; }
|
||||
&:active {
|
||||
background-color: $selected_bg_color;
|
||||
color: $selected_fg_color;
|
||||
}
|
||||
}
|
||||
|
||||
.audio-selection-device-box {
|
||||
padding: 20px;
|
||||
spacing: 20px;
|
||||
}
|
||||
|
||||
.audio-selection-device-icon {
|
||||
icon-size: $base_icon_size * 4;
|
||||
}
|
||||
|
||||
/* Welcome dialog */
|
||||
.welcome-dialog-image {
|
||||
background-image: url("resource:///org/gnome/shell/theme/gnome-shell-start.svg");
|
||||
background-size: contain;
|
||||
/* Reasonable maximum dimensions */
|
||||
height: 300px;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
/* Access portal dialog */
|
||||
.access-dialog {
|
||||
text-align: center;
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
/* Entries */
|
||||
|
||||
StEntry {
|
||||
@extend %entry;
|
||||
|
||||
StIcon.capslock-warning {
|
||||
icon-size: $base_icon_size;
|
||||
warning-color: $warning_color;
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
StIcon.peek-password {
|
||||
icon-size: $base_icon_size;
|
||||
padding: 0 4px;
|
||||
}
|
||||
|
||||
StLabel.hint-text {
|
||||
margin-left: 2px;
|
||||
color: transparentize($fg_color, 0.3);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
// hotplug
|
||||
|
||||
.hotplug-notification-item {
|
||||
@extend %bubble_button;
|
||||
}
|
||||
|
||||
.hotplug-notification-item-icon {
|
||||
icon-size: 24px;
|
||||
padding: 0 4px;
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
// IBus Candidate Popup
|
||||
|
||||
.candidate-popup-boxpointer {
|
||||
@extend .popup-menu-boxpointer;
|
||||
}
|
||||
|
||||
.candidate-popup-content {
|
||||
padding: $base_padding;
|
||||
spacing: $base_padding;
|
||||
@extend .popup-menu-content;
|
||||
}
|
||||
|
||||
.candidate-index {
|
||||
padding: 0;
|
||||
padding-right: $base_padding;
|
||||
color: $insensitive_fg_color;
|
||||
}
|
||||
|
||||
.candidate-box {
|
||||
padding: $base_padding $base_padding*2 $base_padding $base_padding*2;
|
||||
border-radius: $base_border_radius;
|
||||
&:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
|
||||
&:hover { background-color: $hover_bg_color; color: $hover_fg_color; }
|
||||
}
|
||||
|
||||
.candidate-page-button-box {
|
||||
height: 2em;
|
||||
.vertical & { padding-top: $base_padding*2; }
|
||||
.horizontal & { padding-left: $base_padding*2; }
|
||||
}
|
||||
|
||||
.candidate-page-button {
|
||||
padding: $base_padding;
|
||||
|
||||
& StIcon { icon-size: $base_icon_size; }
|
||||
}
|
||||
|
||||
.candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0;box-shadow: none;}
|
||||
.candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px;box-shadow: none;}
|
||||
@@ -1,159 +0,0 @@
|
||||
/* On-screen Keyboard */
|
||||
|
||||
$key_size: 1.2em;
|
||||
$key_border_radius: $base_border_radius + 4px; // 12px
|
||||
$key_bg_color: darken($osd_fg_color, 70%);
|
||||
// $default_key_bg_color: darken($key_bg_color, 4%);
|
||||
$default_key_bg_color: if($variant=='light', darken($key_bg_color, 11%), darken($key_bg_color, 10%));
|
||||
|
||||
|
||||
// draw keys using button function
|
||||
#keyboard {
|
||||
// background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1);
|
||||
background-color: $osd_bg_color;
|
||||
box-shadow: inset 0 1px 0 0 $osd_outer_borders_color;
|
||||
|
||||
.page-indicator {
|
||||
padding: $base_padding;
|
||||
|
||||
.page-indicator-icon {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// the container for individual keys
|
||||
.key-container {
|
||||
padding: $base_margin;
|
||||
spacing: $base_margin;
|
||||
}
|
||||
|
||||
// the keys
|
||||
.keyboard-key {
|
||||
|
||||
@include fontsize($base_font_size + 5);
|
||||
font-weight: bold;
|
||||
min-height: $key_size;
|
||||
min-width: $key_size;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-radius: $key_border_radius;
|
||||
box-shadow: 0 1px 0 0 $shadow_color;
|
||||
|
||||
@include keyboard_key(normal, $key_bg_color, $osd_fg_color);
|
||||
|
||||
&:focus { @include keyboard_key(focus);}
|
||||
&:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);}
|
||||
&:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); }
|
||||
&:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); }
|
||||
|
||||
&:grayed { //FIXMEy
|
||||
background-color: darken($bg_color, 3%);
|
||||
color: $osd_fg_color;
|
||||
border-color: $osd_borders_color;
|
||||
}
|
||||
|
||||
// non-character keys
|
||||
&.default-key {
|
||||
@include keyboard_key(normal, $default_key_bg_color, $osd_fg_color);
|
||||
&:hover {@include keyboard_key(hover, $default_key_bg_color, $osd_fg_color);}
|
||||
&:active { @include keyboard_key(active, $default_key_bg_color, $osd_fg_color);}
|
||||
&:checked { @include keyboard_key(checked, $default_key_bg_color, $osd_fg_color);}
|
||||
border-radius: $key_border_radius;
|
||||
|
||||
// keys that may be latched: ctrl/alt/shift
|
||||
&:latched {
|
||||
border-color: lighten($selected_bg_color, 5%);
|
||||
background-color: $selected_bg_color;
|
||||
}
|
||||
}
|
||||
|
||||
// enter key is suggested-action
|
||||
&.enter-key {
|
||||
@include keyboard_key(normal, $selected_bg_color, $selected_fg_color);
|
||||
&:hover { @include keyboard_key(hover, $selected_bg_color, $selected_fg_color);}
|
||||
&:active {@include keyboard_key(active, $selected_bg_color, $selected_fg_color);}
|
||||
&:checked {@include keyboard_key(checked, $selected_bg_color, $selected_fg_color);}
|
||||
border-radius: $key_border_radius;
|
||||
color: $osd_fg_color;
|
||||
}
|
||||
|
||||
&.shift-key-lowercase {}
|
||||
|
||||
// pressed shift has different style
|
||||
&.shift-key-uppercase {
|
||||
background-color: lighten($key_bg_color, 20%);
|
||||
color: $osd_bg_color;
|
||||
&:hover {
|
||||
background-color: lighten($key_bg_color, 25%);
|
||||
color: lighten($osd_bg_color, 5%);
|
||||
}
|
||||
}
|
||||
|
||||
// size of icons on keys
|
||||
StIcon { icon-size: 24px; }
|
||||
}
|
||||
|
||||
// long press on a key popup
|
||||
.keyboard-subkeys {
|
||||
-arrow-border-radius: $base_border_radius*2;
|
||||
-arrow-background-color: $osd_bg_color;
|
||||
-arrow-border-width: 1px;
|
||||
-arrow-border-color: lighten($osd_bg_color, 9%);
|
||||
-arrow-base: 20px;
|
||||
-arrow-rise: 10px;
|
||||
-boxpointer-gap: $base_padding;
|
||||
padding: $base_padding;
|
||||
|
||||
.keyboard-key {
|
||||
@include keyboard_key(normal, $key_bg_color, $osd_fg_color);
|
||||
|
||||
&:focus { @include keyboard_key(focus);}
|
||||
&:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);}
|
||||
&:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); }
|
||||
&:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); }
|
||||
|
||||
border-radius:$key_border_radius;
|
||||
}
|
||||
}
|
||||
|
||||
// emoji
|
||||
.emoji-page {
|
||||
.keyboard-key {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
color: initial;
|
||||
}
|
||||
}
|
||||
|
||||
.emoji-panel {
|
||||
.keyboard-key:latched {
|
||||
border-color: lighten($selected_bg_color, 5%);
|
||||
background-color: $selected_bg_color;
|
||||
}
|
||||
}
|
||||
|
||||
// suggestions
|
||||
.word-suggestions {
|
||||
@include fontsize($base_font_size + 1);
|
||||
spacing: 12px;
|
||||
min-height: 17pt;
|
||||
padding: $base_padding*2;
|
||||
color: $osd_fg_color;
|
||||
|
||||
// each suggestion
|
||||
StButton {
|
||||
margin: 0 3px;
|
||||
min-width: 32px;
|
||||
border-radius: $base_border_radius - 2px;
|
||||
padding: 0px $base_padding*3;
|
||||
|
||||
@include keyboard_key(undecorated, $key_bg_color, $osd_fg_color);
|
||||
|
||||
&:focus { @include keyboard_key(focus);}
|
||||
&:hover { @include keyboard_key(hover, $key_bg_color, $osd_fg_color);}
|
||||
&:active { @include keyboard_key(active, $key_bg_color, $osd_fg_color); }
|
||||
&:checked { @include keyboard_key(checked, $key_bg_color, $osd_fg_color); }
|
||||
}
|
||||
}
|
||||
@@ -1,283 +0,0 @@
|
||||
$_gdm_bg: $system_bg_color;
|
||||
$_gdm_fg: white;
|
||||
$_gdm_dialog_width: 23em;
|
||||
|
||||
// common style for gdm and lockscreen
|
||||
.login-dialog,
|
||||
.unlock-dialog {
|
||||
|
||||
.caps-lock-warning-label,
|
||||
.login-dialog-message-warning {
|
||||
color: $_gdm_fg;
|
||||
}
|
||||
}
|
||||
|
||||
/* Login Dialog */
|
||||
.login-dialog {
|
||||
background-color: $_gdm_bg;
|
||||
}
|
||||
|
||||
// buttons
|
||||
.login-dialog-button {
|
||||
@extend .button;
|
||||
|
||||
&.cancel-button,
|
||||
&.switch-user-button,
|
||||
&.login-dialog-session-list-button {
|
||||
@extend .icon-button;
|
||||
}
|
||||
|
||||
&.cancel-button {
|
||||
padding: $base_padding*1.5;
|
||||
}
|
||||
}
|
||||
|
||||
.login-dialog-button-box {
|
||||
width: $_gdm_dialog_width;
|
||||
spacing: $base_padding*2;
|
||||
}
|
||||
|
||||
.login-dialog-logo-bin {
|
||||
margin:3em 0;
|
||||
}
|
||||
.login-dialog-banner { color: darken($_gdm_fg,10%); }
|
||||
.login-dialog-banner-view { max-width: $_gdm_dialog_width; }
|
||||
.login-dialog-message { text-align: center; }
|
||||
.login-dialog-user-selection-box { padding: 100px 0px; }
|
||||
|
||||
.login-dialog-not-listed-label {
|
||||
@include fontsize($base_font_size);
|
||||
font-weight: bold;
|
||||
color: darken($_gdm_fg,30%);
|
||||
padding: $base_padding*2;
|
||||
|
||||
.login-dialog-not-listed-button:focus &,
|
||||
.login-dialog-not-listed-button:hover & {
|
||||
color: $_gdm_fg;
|
||||
}
|
||||
.login-dialog-not-listed-button:focus & {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
.login-dialog-auth-list-view { -st-vfade-offset: 1em; }
|
||||
.login-dialog-auth-list {
|
||||
spacing: 6px;
|
||||
margin-left: 2em;
|
||||
}
|
||||
.login-dialog-auth-list-title {
|
||||
margin-left: 2em;
|
||||
}
|
||||
|
||||
.login-dialog-auth-list-item {
|
||||
border-radius: $base_border_radius*2;
|
||||
padding: 4px;
|
||||
color: darken($_gdm_fg,30%);
|
||||
|
||||
&:focus, &:selected {
|
||||
background-color: $selected_bg_color;
|
||||
color: $selected_fg_color;
|
||||
}
|
||||
}
|
||||
|
||||
.login-dialog-auth-list-label {
|
||||
@include fontsize($base_font_size + 2);
|
||||
font-weight: bold;
|
||||
padding-left: 15px;
|
||||
|
||||
&:ltr { padding-left: 14px; text-align: left; }
|
||||
&:rtl { padding-right: 14px; text-align: right; }
|
||||
}
|
||||
|
||||
.login-dialog-user-list-view { -st-vfade-offset: 1em; }
|
||||
|
||||
.login-dialog-user-list {
|
||||
spacing: 12px;
|
||||
width: $_gdm_dialog_width;
|
||||
|
||||
.login-dialog-user-list-item {
|
||||
border-radius: $base_border_radius + 4px;
|
||||
padding: $base_padding;
|
||||
background-color: transparentize($_gdm_fg, .95);
|
||||
color: $_gdm_fg;
|
||||
|
||||
@if $is_highcontrast {
|
||||
box-shadow:inset 0 0 0 1px $hc_inset_color;;
|
||||
}
|
||||
.user-widget .user-icon {
|
||||
border: 4px solid transparent;
|
||||
}
|
||||
|
||||
.login-dialog-timed-login-indicator {
|
||||
height: 2px;
|
||||
margin-top: 6px;
|
||||
background-color: darken($_gdm_fg, 30%);
|
||||
}
|
||||
|
||||
&:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
|
||||
}
|
||||
|
||||
&:expanded .login-dialog-user-list-item {
|
||||
transition-duration: 300ms;
|
||||
transition-timing-function: ease;
|
||||
|
||||
&:hover {
|
||||
background-color: transparentize($_gdm_fg, .9);
|
||||
color: $_gdm_fg;
|
||||
}
|
||||
|
||||
&:selected {
|
||||
background-color: $selected_bg_color;
|
||||
color: $selected_fg_color;
|
||||
&:hover { background-color: lighten($selected_bg_color,5%); }
|
||||
}
|
||||
|
||||
&:logged-in {
|
||||
.user-widget .user-icon {
|
||||
border-color: $selected_bg_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.login-dialog-prompt-layout {
|
||||
spacing: $base_padding*2;
|
||||
width: 26em;
|
||||
}
|
||||
|
||||
.login-dialog-prompt-entry {}
|
||||
|
||||
|
||||
/* Screen Shield */
|
||||
// a.k.a. the lockscreen
|
||||
|
||||
.unlock-dialog {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.screen-shield-background { // just the shadow, really
|
||||
background: black;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.6);
|
||||
}
|
||||
|
||||
#lockDialogGroup {
|
||||
background-color: $_gdm_bg;
|
||||
}
|
||||
|
||||
// Clock
|
||||
.unlock-dialog-clock {
|
||||
color: $_gdm_fg;
|
||||
spacing: 2em;
|
||||
|
||||
.unlock-dialog-clock-time {
|
||||
@extend %numeric;
|
||||
@include fontsize(72);
|
||||
font-weight: 200;
|
||||
}
|
||||
|
||||
.unlock-dialog-clock-date {
|
||||
@extend %title_1;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.unlock-dialog-clock-hint {
|
||||
margin-top: 2em;
|
||||
padding: $base_padding $base_padding*3;
|
||||
border-radius: $base_border_radius*2;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
// Notifications
|
||||
#unlockDialogNotifications {
|
||||
StButton#vhandle, StButton#hhandle {
|
||||
background-color: transparentize($bg_color,0.7);
|
||||
&:hover, &:focus { background-color: transparentize($bg_color,0.5); }
|
||||
&:active { background-color: transparentize($selected_bg_color,0.5); }
|
||||
}
|
||||
}
|
||||
|
||||
.unlock-dialog-notifications-container {
|
||||
margin: 12px;
|
||||
spacing: 6px;
|
||||
width: $_gdm_dialog_width;
|
||||
background-color: transparent;
|
||||
|
||||
.summary-notification-stack-scrollview {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.notification,
|
||||
.unlock-dialog-notification-source {
|
||||
padding: 12px 16px;
|
||||
border: none;
|
||||
background-color: transparentize($_gdm_fg,0.9);
|
||||
color: $_gdm_fg;
|
||||
border-radius: $modal_radius;
|
||||
|
||||
&.critical { background-color: transparentize($_gdm_fg,0.8) }
|
||||
}
|
||||
}
|
||||
|
||||
.unlock-dialog-notification-label {
|
||||
padding-left: 12px;
|
||||
padding-right: 0;
|
||||
&:rtl { padding-right: 12px; padding-left: 0; }
|
||||
}
|
||||
|
||||
.unlock-dialog-notification-count-text {
|
||||
font-weight: bold;
|
||||
padding: 0 12px;
|
||||
color: $_gdm_fg;
|
||||
background-color: transparentize($_gdm_fg, 0.9);
|
||||
border-radius: 99px;
|
||||
}
|
||||
|
||||
|
||||
// User Widget
|
||||
.user-widget {
|
||||
|
||||
.user-widget-label {
|
||||
color: $_gdm_fg;
|
||||
}
|
||||
|
||||
// layout of the user list
|
||||
&.horizontal {
|
||||
spacing: $base_padding*3;
|
||||
.user-widget-label {
|
||||
@extend %title_3;
|
||||
}
|
||||
|
||||
.user-icon {
|
||||
& StIcon {
|
||||
padding: 12px;
|
||||
icon-size: $base_icon_size*2;
|
||||
width: $base_icon_size*3;
|
||||
height: $base_icon_size*3;
|
||||
background-color: transparentize($_gdm_fg, 0.9);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// layout of the login prompt
|
||||
&.vertical {
|
||||
spacing: $base_padding*4;
|
||||
|
||||
.user-widget-label {
|
||||
@extend %title_1;
|
||||
text-align: center;
|
||||
margin-bottom: .75em;
|
||||
}
|
||||
|
||||
.user-icon {
|
||||
icon-size: $base_icon_size*10;
|
||||
|
||||
& StIcon {
|
||||
padding: 32px;
|
||||
icon-size: $base_icon_size*4;
|
||||
background-color: transparentize($_gdm_fg, 0.9);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,130 +0,0 @@
|
||||
/* Looking Glass */
|
||||
|
||||
// Dialog
|
||||
#LookingGlassDialog {
|
||||
background-color: transparentize($bg_color,0.05);
|
||||
border-radius: 0 0 $modal_radius $modal_radius;
|
||||
border: 1px solid $outer_borders_color;
|
||||
border-top-width: 0;
|
||||
color: $fg_color;
|
||||
padding: $base_padding;
|
||||
spacing: $base_padding;
|
||||
box-shadow: 0 2px 4px 0 $shadow_color;
|
||||
|
||||
@if $is_highcontrast {
|
||||
border: 2px solid $hc_inset_color;
|
||||
background-color: $bg_color;
|
||||
border-top-width: 0;
|
||||
box-shadow:none;
|
||||
}
|
||||
|
||||
& > #Toolbar {
|
||||
border: none;
|
||||
padding: $base_padding;
|
||||
border-radius: 0;
|
||||
background-color: transparent;
|
||||
spacing: $base_padding;
|
||||
|
||||
.lg-toolbar-button {
|
||||
padding: $base_padding $base_padding*2;
|
||||
@extend %button;
|
||||
|
||||
& > StIcon { icon-size: $base_icon_size; }
|
||||
}
|
||||
}
|
||||
|
||||
.labels {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
.notebook-tab {
|
||||
-natural-hpadding: $base_padding*2;
|
||||
-minimum-hpadding: $base_padding*2;
|
||||
@extend %button;
|
||||
padding: $base_padding $base_padding*2;
|
||||
}
|
||||
|
||||
StBoxLayout#EvalBox { padding: 4px; spacing: $base_padding; padding: $base_padding; }
|
||||
StBoxLayout#ResultsArea { spacing: $base_padding; padding: $base_padding; }
|
||||
}
|
||||
|
||||
.lg-dialog {
|
||||
|
||||
StEntry {
|
||||
min-height: 22px;
|
||||
@extend %entry;
|
||||
}
|
||||
|
||||
.shell-link {
|
||||
color: $link_color;
|
||||
&:hover { color: lighten($link_color, 10%); }
|
||||
&:active { color: darken($link_color, 10%); }
|
||||
}
|
||||
|
||||
.actor-link {
|
||||
color: $insensitive_fg_color;
|
||||
&:hover { color: lighten($insensitive_fg_color, 20%); }
|
||||
&:active { color: darken($insensitive_fg_color, 20%); }
|
||||
|
||||
& StIcon { icon-size: 12px; }
|
||||
}
|
||||
}
|
||||
|
||||
.lg-completions-text {
|
||||
@extend %caption;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.lg-obj-inspector-title {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
.lg-obj-inspector-button {
|
||||
border: 1px solid $borders_color;
|
||||
padding: 4px;
|
||||
border-radius: $base_border_radius;
|
||||
&:hover { border: 1px solid $fg_color; }
|
||||
}
|
||||
|
||||
// Extensions
|
||||
#lookingGlassExtensions { padding: $base_padding; }
|
||||
|
||||
.lg-extensions-list {
|
||||
padding: $base_padding;
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
.lg-extension {
|
||||
padding: $base_padding*2;
|
||||
@include card;
|
||||
}
|
||||
|
||||
.lg-extension-name {
|
||||
@extend %heading;
|
||||
}
|
||||
|
||||
.lg-extension-meta {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
// Inspector
|
||||
#LookingGlassPropertyInspector {
|
||||
background: $bg_color;
|
||||
border: 1px solid $borders_color;
|
||||
border-radius: $base_border_radius;
|
||||
padding: $base_padding;
|
||||
}
|
||||
|
||||
.lg-debug-flag-button {
|
||||
StLabel { padding: $base_padding, 2 * $base_padding; }
|
||||
|
||||
color: $fg_color;
|
||||
&:hover { color: lighten($fg_color, 20%); }
|
||||
&:active { color: darken($fg_color, 20%); }
|
||||
}
|
||||
|
||||
.lg-debug-flags-header {
|
||||
padding-top: 2 * $base_padding;
|
||||
padding: $base_padding;
|
||||
@extend %title_2;
|
||||
}
|
||||
@@ -1,190 +0,0 @@
|
||||
/* Message List */
|
||||
// a.k.a. notifications in the menu
|
||||
|
||||
// main list
|
||||
.message-list {
|
||||
width: 29em;
|
||||
border: solid $borders_color;
|
||||
|
||||
// padding and margins to account for scrollbar
|
||||
&:ltr {margin-left: 0; margin-right: $base_margin; padding-right: $base_padding; border-right-width: 1px; }
|
||||
&:rtl {margin-right: 0; margin-left: $base_margin; padding-left: $base_padding; border-left-width: 1px; }
|
||||
|
||||
.message-list-placeholder {
|
||||
@extend %title_2;
|
||||
color: transparentize($insensitive_fg_color, .5);
|
||||
|
||||
// icon size and color
|
||||
> StIcon {
|
||||
icon-size: $base_icon_size*3; // 48px
|
||||
margin-bottom: $base_margin*3;
|
||||
-st-icon-style: symbolic;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.message-list-sections {
|
||||
spacing: $base_padding;
|
||||
margin: 0;
|
||||
padding-bottom: $base_padding;
|
||||
|
||||
// to account for scrollbar
|
||||
&:ltr {margin-right: $base_margin * 3; }
|
||||
&:rtl {margin-left: $base_margin * 3;}
|
||||
}
|
||||
|
||||
.message-list-section,
|
||||
.message-list-section-list {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
// do-not-disturb + clear button
|
||||
.message-list-controls {
|
||||
// NOTE: remove the padding if notification_bubble could remove margin for drop shadow
|
||||
padding: $base_padding;
|
||||
spacing: $base_padding;
|
||||
@extend %heading;
|
||||
|
||||
.dnd-button {
|
||||
// We need this because the focus outline isn't inset like for the buttons
|
||||
// so the dnd button would grow when it gets focus if we didn't change only
|
||||
// its color when focusing.
|
||||
border-width: 2px;
|
||||
border-color: transparent;
|
||||
border-radius: 32px;
|
||||
border-style: solid;
|
||||
|
||||
&:focus {
|
||||
border-color: transparentize($selected_bg_color, 0.4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// message bubbles
|
||||
.message {
|
||||
@include card;
|
||||
|
||||
// icon container
|
||||
.message-icon-bin {
|
||||
padding: ($base_padding * 3);
|
||||
|
||||
&:ltr {padding-right:$base_padding;}
|
||||
&:rtl {padding-left:$base_padding;}
|
||||
|
||||
// icon size and color
|
||||
> StIcon {
|
||||
icon-size: $large_icon_size; // 32px
|
||||
-st-icon-style: symbolic;
|
||||
}
|
||||
|
||||
// fallback
|
||||
> .fallback-app-icon {
|
||||
width: $base_icon_size;
|
||||
height: $base_icon_size;
|
||||
}
|
||||
}
|
||||
|
||||
// content
|
||||
.message-content {
|
||||
spacing: 4px;
|
||||
padding: ($base_padding*1.5);
|
||||
margin-bottom: $base_margin*2;
|
||||
}
|
||||
|
||||
// title
|
||||
.message-title {
|
||||
font-weight: bold;
|
||||
/* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
|
||||
padding-top: 0.57em;
|
||||
}
|
||||
|
||||
// secondary container in title box
|
||||
.message-secondary-bin {
|
||||
padding: 0 $base_margin * 2;
|
||||
|
||||
// notification time stamp
|
||||
> .event-time {
|
||||
color: transparentize($fg_color, 0.5);
|
||||
@include fontsize($base_font_size - 2);
|
||||
/* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
|
||||
padding-bottom: 0.13em;
|
||||
|
||||
&:ltr { text-align: right };
|
||||
&:rtl { text-align: left };
|
||||
}
|
||||
}
|
||||
|
||||
// close button
|
||||
.message-close-button {
|
||||
color: $fg_color;
|
||||
background-color: transparentize($fg_color, 0.9);
|
||||
border-radius: 99px;
|
||||
padding: $base_padding - 1px;
|
||||
margin: 1px;
|
||||
&:hover {background-color: transparentize($fg_color, 0.8);}
|
||||
&:active {background-color: transparentize($fg_color, 0.9);}
|
||||
|
||||
& StIcon { icon-size: $base_icon_size; }
|
||||
}
|
||||
|
||||
// body
|
||||
.message-body {color: darken($fg_color, 10%);}
|
||||
}
|
||||
|
||||
// URLs in messages
|
||||
.url-highlighter {
|
||||
link-color: $link_color;
|
||||
}
|
||||
|
||||
/* Media Controls */
|
||||
.message-media-control {
|
||||
padding: 0 $base_padding*3;
|
||||
margin: $base_padding*2 0;
|
||||
border-radius: $base_border_radius;
|
||||
color: $fg_color;
|
||||
|
||||
@if $is_highcontrast {
|
||||
border: 1px solid $hc_inset_color;
|
||||
margin: $base_padding*2 2px;
|
||||
}
|
||||
|
||||
// colors are lightened since the media controls are in a card
|
||||
&:hover {
|
||||
background-color: lighten($hover_bg_color, 5%);
|
||||
color: $fg_color;
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: lighten($active_bg_color, 5%);
|
||||
color: $fg_color;
|
||||
}
|
||||
|
||||
&:insensitive {
|
||||
color: lighten($insensitive_fg_color, 5%);
|
||||
@if $is_highcontrast {
|
||||
border-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
// fix margin for last button
|
||||
&:last-child:ltr { margin-right: $base_margin*3; }
|
||||
&:last-child:rtl { margin-left: $base_margin*3; }
|
||||
|
||||
& StIcon { icon-size: $base_icon_size; }
|
||||
}
|
||||
|
||||
// album-art
|
||||
.media-message-cover-icon {
|
||||
icon-size: $base_icon_size*3 !important; // 48px
|
||||
border-radius: $base_border_radius;
|
||||
|
||||
// when there is no artwork
|
||||
&.fallback {
|
||||
color: darken($fg_color, 17%);
|
||||
background-color: $bg_color;
|
||||
border: 1px solid transparent;
|
||||
border-radius: $base_border_radius;
|
||||
icon-size: $large_icon_size !important; // 32px
|
||||
padding: ($base_padding*2 + 2); // 16px
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
// Rubberband for select-area screenshots
|
||||
.select-area-rubberband {
|
||||
background-color: transparentize($selected_bg_color,0.7);
|
||||
border: 1px solid $selected_bg_color;
|
||||
}
|
||||
|
||||
// User icon
|
||||
.user-icon {
|
||||
background-size: contain;
|
||||
color: $osd_fg_color;
|
||||
border-radius: 99px;
|
||||
icon-size: $base_icon_size * 4; // 64px
|
||||
|
||||
& StIcon {
|
||||
background-color: transparentize($osd_fg_color,0.95);
|
||||
border-radius: 99px;
|
||||
padding: $base_padding * 2 ; // 12px
|
||||
width: $base_icon_size * 2.5; height: $base_icon_size * 2.5; // 40px;
|
||||
}
|
||||
|
||||
&.user-avatar {
|
||||
box-shadow:inset 0 0 0 1px transparentize($osd_fg_color, 0.9);
|
||||
@if $is_highcontrast {
|
||||
box-shadow:inset 0 0 0 1px $hc_inset_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.lightbox { background-color: black; }
|
||||
.flashspot { background-color: white; }
|
||||
|
||||
// Hidden
|
||||
.hidden { color: rgba(0,0,0,0);}
|
||||
|
||||
// Caps-lock warning
|
||||
.caps-lock-warning-label {
|
||||
text-align: center;
|
||||
padding-bottom: 8px;
|
||||
@extend %caption;
|
||||
color: $warning_color;
|
||||
}
|
||||
|
||||
/* Workspace animation */
|
||||
|
||||
.workspace-animation {
|
||||
background-color: $system_bg_color;
|
||||
}
|
||||
|
||||
/* Tiled window previews */
|
||||
.tile-preview {
|
||||
background-color: transparentize($selected_bg_color,0.5);
|
||||
border: 1px solid $selected_bg_color;
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
/* Notifications & Message Tray */
|
||||
|
||||
$notification_banner_height: 64px;
|
||||
$notification_banner_width: 34em;
|
||||
$notification_banner_radius: $base_border_radius*1.5;
|
||||
|
||||
// Banner notifications
|
||||
.notification-banner {
|
||||
min-height: $notification_banner_height;
|
||||
width: $notification_banner_width;
|
||||
box-shadow: 0 2px 4px 2px $shadow_color;
|
||||
border-radius: $notification_banner_radius;
|
||||
margin: $base_margin;
|
||||
|
||||
.notification-actions {
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
.notification-button {
|
||||
@extend %bubble_button;
|
||||
}
|
||||
}
|
||||
|
||||
// counter
|
||||
.summary-source-counter {
|
||||
font-size: $base_font_size - 1pt;
|
||||
font-weight: bold;
|
||||
height: 1.6em;
|
||||
width: 1.6em;
|
||||
-shell-counter-overlap-x: 3px;
|
||||
-shell-counter-overlap-y: 3px;
|
||||
background-color: $selected_bg_color;
|
||||
color: $selected_fg_color;
|
||||
border: 2px solid $fg_color;
|
||||
box-shadow: 0 2px 2px rgba(0,0,0,0.5);
|
||||
border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%;
|
||||
}
|
||||
|
||||
// chat bubbles
|
||||
.chat-body { spacing: 5px; }
|
||||
.chat-response { margin: 5px; }
|
||||
.chat-log-message { color: darken($fg_color,10%); }
|
||||
.chat-new-group { padding-top: 1em; }
|
||||
.chat-received {
|
||||
padding-left: 4px;
|
||||
&:rtl { padding-left: 0px; padding-right: 4px; }
|
||||
}
|
||||
|
||||
.chat-sent {
|
||||
padding-left: 18pt;
|
||||
color: lighten($fg_color, 15%);
|
||||
&:rtl { padding-left: 0; padding-right: 18pt; }
|
||||
}
|
||||
|
||||
.chat-meta-message {
|
||||
padding-left: 4px;
|
||||
@include fontsize($base_font_size - 2);
|
||||
font-weight: bold;
|
||||
color: lighten($fg_color,18%);
|
||||
&:rtl { padding-left: 0; padding-right: 4px; }
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
/* OSD */
|
||||
|
||||
$osd_levelbar_height:6px;
|
||||
|
||||
.osd-window {
|
||||
@extend %osd_panel;
|
||||
@extend %heading;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
spacing: $base_padding * 2; // 12px
|
||||
padding: $base_padding * 2 $base_padding * 3;
|
||||
& > * { spacing: 8px; }
|
||||
margin-bottom: 4em;
|
||||
|
||||
StIcon { icon-size:$large_icon_size;}
|
||||
|
||||
StLabel {
|
||||
&:ltr { margin-right: 6px; }
|
||||
&:rtl { margin-left: 6px; }
|
||||
}
|
||||
|
||||
.level {
|
||||
margin-bottom: 4px;
|
||||
&:first-child { margin-bottom: 0px; }
|
||||
|
||||
height: $osd_levelbar_height;
|
||||
min-width:$base_icon_size * 10;
|
||||
-barlevel-height: $osd_levelbar_height;
|
||||
-barlevel-background-color: transparentize($osd_fg_color, if($variant=='light', 0.7, 0.9));
|
||||
-barlevel-active-background-color: $osd_fg_color;
|
||||
-barlevel-overdrive-color: $destructive_color;
|
||||
-barlevel-overdrive-separator-width: 3px;
|
||||
&:ltr { margin-right: 6px; }
|
||||
&:rtl { margin-left: 6px; }
|
||||
}
|
||||
}
|
||||
|
||||
// Monitor number label
|
||||
.osd-monitor-label {
|
||||
@extend %osd_panel;
|
||||
border-radius: $modal_radius;
|
||||
font-size: 3em;
|
||||
font-weight: bold;
|
||||
margin: $base_margin * 3;
|
||||
text-align: center;
|
||||
min-width: 1.3em;
|
||||
}
|
||||
|
||||
/* Pad OSD */
|
||||
.pad-osd-window {
|
||||
padding: 32px;
|
||||
background-color: transparentize(#000, 0.2);
|
||||
|
||||
.pad-osd-title-box { spacing: 12px; }
|
||||
.pad-osd-title-menu-box { spacing: 6px; }
|
||||
}
|
||||
|
||||
.combo-box-label {
|
||||
width: 15em;
|
||||
}
|
||||
|
||||
.resize-popup {
|
||||
@extend %osd_panel;
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
/* OVERVIEW */
|
||||
|
||||
.controls-manager, .secondary-monitor-workspaces {
|
||||
spacing: $base_padding * 2;
|
||||
}
|
||||
|
||||
#overviewGroup {
|
||||
background-color: $system_bg_color;
|
||||
}
|
||||
|
||||
.overview-controls {
|
||||
padding-bottom: 32px;
|
||||
}
|
||||
@@ -1,234 +0,0 @@
|
||||
/* Top Bar */
|
||||
// a.k.a. the panel
|
||||
|
||||
$panel_bg_color: #000;
|
||||
$panel_fg_color: if($variant == 'light', lighten($bg_color, 10%), darken($fg_color, 5%));
|
||||
$panel_height: 2.2em;
|
||||
$panel_transition_duration: 250ms; // same as the overview transition duration
|
||||
|
||||
#panel {
|
||||
background-color: $panel_bg_color;
|
||||
font-weight: bold;
|
||||
height: $panel_height;
|
||||
@extend %numeric;
|
||||
transition-duration: $panel_transition_duration;
|
||||
|
||||
// transparent panel on lock & login screens
|
||||
&.unlock-screen,
|
||||
&.login-screen,
|
||||
&:overview {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
// panel menus
|
||||
.panel-button {
|
||||
font-weight: bold;
|
||||
color: $panel_fg_color;
|
||||
-natural-hpadding: $base_padding * 2;
|
||||
-minimum-hpadding: $base_padding;
|
||||
transition-duration: 150ms;
|
||||
border: 3px solid transparent;
|
||||
border-radius: 99px;
|
||||
|
||||
&.clock-display {
|
||||
.clock {
|
||||
transition-duration: 150ms;
|
||||
border: 3px solid transparent;
|
||||
border-radius: 99px;
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px $screenshot_ui_button_red;
|
||||
}
|
||||
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px $warning_color;
|
||||
StBoxLayout { margin: 0 $base_padding; }
|
||||
}
|
||||
|
||||
&.screen-recording-indicator,
|
||||
&.screen-sharing-indicator {
|
||||
StBoxLayout {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
StIcon {
|
||||
icon-size: $base_icon_size;
|
||||
}
|
||||
}
|
||||
|
||||
&:active, &:overview, &:focus, &:checked {
|
||||
box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
|
||||
|
||||
// The clock display needs to have the background on .clock because
|
||||
// we want to exclude the do-not-disturb indicator from the background
|
||||
&.clock-display {
|
||||
box-shadow: none;
|
||||
|
||||
.clock {
|
||||
box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
|
||||
}
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
|
||||
&.clock-display {
|
||||
box-shadow: none;
|
||||
.clock {
|
||||
box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
|
||||
}
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
&:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
|
||||
box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
|
||||
&.clock-display {
|
||||
box-shadow: none;
|
||||
.clock {
|
||||
box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
|
||||
}
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
// status area icons
|
||||
.system-status-icon {
|
||||
icon-size: $base_icon_size;
|
||||
padding: $base_padding - 1px;
|
||||
margin: 0 $base_margin;
|
||||
}
|
||||
|
||||
.panel-status-indicators-box .system-status-icon,
|
||||
.panel-status-menu-box .system-status-icon {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
// app menu icon
|
||||
.app-menu-icon {
|
||||
-st-icon-style: symbolic;
|
||||
// dimensions of the icon are hardcoded
|
||||
}
|
||||
|
||||
&#panelActivities {
|
||||
-natural-hpadding: $base_padding * 3;
|
||||
}
|
||||
}
|
||||
|
||||
&.unlock-screen,
|
||||
&.login-screen,
|
||||
&:overview {
|
||||
.panel-button {
|
||||
&:active, &:overview, &:focus, &:checked {
|
||||
box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
|
||||
|
||||
&.clock-display {
|
||||
box-shadow: none;
|
||||
|
||||
.clock {
|
||||
box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
|
||||
}
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
|
||||
&.clock-display {
|
||||
box-shadow: none;
|
||||
.clock {
|
||||
box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
|
||||
}
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
&:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
|
||||
box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
|
||||
&.clock-display {
|
||||
box-shadow: none;
|
||||
.clock {
|
||||
box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
&.screen-recording-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
|
||||
}
|
||||
&.screen-sharing-indicator {
|
||||
box-shadow: inset 0 0 0 100px transparentize($warning_color, 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.panel-status-indicators-box,
|
||||
.panel-status-menu-box {
|
||||
spacing: 2px;
|
||||
}
|
||||
|
||||
// spacing between power icon and (optional) percentage label
|
||||
.power-status.panel-status-indicators-box {
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
// indicator for active
|
||||
.screencast-indicator,
|
||||
.remote-access-indicator { color: $warning_color; }
|
||||
}
|
||||
|
||||
// App Menu
|
||||
#appMenu {
|
||||
spacing: $base_padding;
|
||||
.label-shadow { color: transparent; }
|
||||
}
|
||||
|
||||
#appMenu .panel-status-menu-box {
|
||||
padding: 0 $base_padding;
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
|
||||
// Clock
|
||||
|
||||
.clock-display-box {
|
||||
spacing: 2px;
|
||||
|
||||
.clock {
|
||||
padding-left: $base_padding * 2;
|
||||
padding-right: $base_padding * 2;
|
||||
}
|
||||
}
|
||||
@@ -1,162 +0,0 @@
|
||||
/* Popovers/Menus */
|
||||
|
||||
$menu_bg_color: $bg_color;
|
||||
$menuitem_bg_color: lighten($menu_bg_color, 4%);
|
||||
$menuitem_border_radius: $base_border_radius*1.5;
|
||||
|
||||
$submenu_bg_color: lighten($menu_bg_color, 7%);
|
||||
|
||||
// the popover itself
|
||||
.popup-menu-boxpointer {
|
||||
-arrow-rise: $base_margin+2px; // distance from the panel & screen edge
|
||||
}
|
||||
|
||||
// container of the popover menu
|
||||
.popup-menu {
|
||||
min-width: 15em;
|
||||
color: $fg_color;
|
||||
|
||||
//.popup-status-menu-item {font-weight: normal; color: pink;} //dunno what that is
|
||||
&.panel-menu {
|
||||
margin-bottom: 1.75em; // so it doesn't touch the bottom of the screen
|
||||
}
|
||||
}
|
||||
|
||||
// popover content
|
||||
.popup-menu-content {
|
||||
padding: $base_padding;
|
||||
background-color: $bg_color;
|
||||
border-radius: $modal_radius*1.25;
|
||||
border: 1px solid $outer_borders_color;
|
||||
box-shadow: 0 2px 4px 0 $shadow_color;
|
||||
}
|
||||
|
||||
// menu items
|
||||
.popup-menu-item {
|
||||
@include menuitem($bg:$menu_bg_color);
|
||||
|
||||
border-radius: $menuitem_border_radius;
|
||||
|
||||
&:checked {
|
||||
border-radius: $menuitem_border_radius $menuitem_border_radius 0 0 !important;
|
||||
|
||||
@if $is_highcontrast {
|
||||
border: 1px solid $hc_inset_color;
|
||||
border-bottom-width:0;
|
||||
}
|
||||
}
|
||||
|
||||
// add margin to switches in menu items
|
||||
.toggle-switch {
|
||||
&:ltr { margin-left: $base_margin;}
|
||||
&:rtl { margin-right: $base_margin;}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// all other graphical elements (sliders)
|
||||
.popup-inactive-menu-item {
|
||||
color: $fg_color;
|
||||
&:insensitive { color: $insensitive_fg_color; }
|
||||
}
|
||||
|
||||
// symbolic icons in popover
|
||||
.popup-menu-arrow,
|
||||
.popup-menu-icon {
|
||||
icon-size: 16px !important; // for some reason the variable doesn't work here
|
||||
}
|
||||
|
||||
// popover submenus
|
||||
.popup-sub-menu {
|
||||
border-radius: 0 0 $menuitem_border_radius+1px $menuitem_border_radius+1px;
|
||||
margin-bottom: $base_padding;
|
||||
|
||||
@if $is_highcontrast {
|
||||
border: 1px solid $hc_inset_color;
|
||||
}
|
||||
|
||||
.popup-menu-ornament {
|
||||
min-width: $base_icon_size !important;
|
||||
}
|
||||
|
||||
// submenu specific styles
|
||||
.popup-menu-item {
|
||||
border-radius: 0;
|
||||
@include menuitem($bg:$submenu_bg_color, $flat:false);
|
||||
border-top-width:0;
|
||||
|
||||
&:last-child {
|
||||
border-radius: 0 0 $menuitem_border_radius $menuitem_border_radius;
|
||||
border-bottom-width:0;
|
||||
}
|
||||
}
|
||||
|
||||
.popup-menu-section {
|
||||
.popup-menu-item:last-child {
|
||||
&:hover,&:focus { border-radius: 0;}
|
||||
}
|
||||
&:last-child .popup-menu-item:last-child {
|
||||
border-radius: 0 0 $menuitem_border_radius $menuitem_border_radius;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// container for radio and check boxes
|
||||
.popup-menu-ornament {
|
||||
@extend %heading;
|
||||
width: 1.2em;
|
||||
text-align: center !important;
|
||||
|
||||
&:ltr { text-align: right;}
|
||||
&:rtl { text-align: left;}
|
||||
}
|
||||
|
||||
// separator
|
||||
.popup-separator-menu-item {
|
||||
border:none !important;
|
||||
|
||||
.popup-separator-menu-item-separator {
|
||||
height: 1px; //not really the whole box
|
||||
background-color: $borders_color;
|
||||
}
|
||||
|
||||
.popup-menu-ornament {
|
||||
width: 0 !important;
|
||||
}
|
||||
|
||||
// separators in submenus
|
||||
.popup-sub-menu & {
|
||||
background-color: transparent;
|
||||
|
||||
// account for ornament
|
||||
&:ltr { margin-right: 2.5em;}
|
||||
&:rtl { margin-left: 2.5em;}
|
||||
|
||||
.popup-separator-menu-item-separator {
|
||||
background-color: $borders_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// desktop background menu
|
||||
.background-menu {
|
||||
-boxpointer-gap: 0px;
|
||||
-arrow-rise: 0px; // hide the beak on the menu
|
||||
}
|
||||
|
||||
// right-click (and panel) app menu
|
||||
.app-menu {
|
||||
max-width: 27.25em;
|
||||
|
||||
// this is unneeded at the top-level in this menu, hide it
|
||||
.popup-menu-ornament { width: 0 !important; }
|
||||
|
||||
.popup-inactive-menu-item:first-child {
|
||||
// "Open Windows" label
|
||||
> StLabel {
|
||||
@extend %caption_heading;
|
||||
&:ltr {margin-right: $base_margin*2;}
|
||||
&:rtl {margin-left: $base_margin*2;}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,175 +0,0 @@
|
||||
.quick-settings {
|
||||
padding: $base_padding*3;
|
||||
border-radius: $modal_radius*2.25;
|
||||
|
||||
.icon-button, .button {
|
||||
padding: $base_padding*1.75;
|
||||
}
|
||||
}
|
||||
|
||||
.quick-settings-grid {
|
||||
spacing-rows: $base_padding*2;
|
||||
spacing-columns: $base_padding*2;
|
||||
}
|
||||
|
||||
.quick-toggle, .quick-menu-toggle {
|
||||
border-radius: 99px;
|
||||
min-width: 12em;
|
||||
max-width: 12em;
|
||||
min-height: 48px;
|
||||
border:none;
|
||||
}
|
||||
|
||||
.quick-toggle {
|
||||
&:checked { @include button(default, $c:$selected_bg_color); }
|
||||
|
||||
& > StBoxLayout { spacing: $base_padding*1.5; }
|
||||
|
||||
/* Move padding into the box; this is to allow menu arrows
|
||||
to extend to the border */
|
||||
&.button { padding: 0; }
|
||||
& > StBoxLayout { padding: 0 $base_padding*2; }
|
||||
&:ltr > StBoxLayout { padding-left: $base_padding*2.5; }
|
||||
&:rtl > StBoxLayout { padding-right: $base_padding*2.5; }
|
||||
|
||||
.quick-toggle-title { font-weight: bold; }
|
||||
|
||||
& StBoxLayout > .quick-toggle-subtitle {
|
||||
font-weight: normal;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.quick-toggle-icon { icon-size: $base_icon_size; }
|
||||
}
|
||||
|
||||
.quick-menu-toggle {
|
||||
& .quick-toggle {
|
||||
min-width: auto;
|
||||
max-width: auto;
|
||||
|
||||
&:ltr { border-radius: 99px 0 0 99px; }
|
||||
&:rtl { border-radius: 0 99px 99px 0; }
|
||||
|
||||
&:ltr:last-child { border-radius: 99px; }
|
||||
&:rtl:last-child { border-radius: 99px; }
|
||||
}
|
||||
|
||||
& .quick-toggle-arrow {
|
||||
padding: $base_padding $base_padding*1.75;
|
||||
border-width: 0;
|
||||
|
||||
&:checked { @include button(default, $c:$selected_bg_color); }
|
||||
|
||||
&:ltr {
|
||||
border-radius: 0 99px 99px 0;
|
||||
border-left-width: 1px;
|
||||
}
|
||||
&:rtl {
|
||||
border-radius: 99px 0 0 99px;
|
||||
border-right-width: 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.quick-slider {
|
||||
& > StBoxLayout { spacing: $base_padding; }
|
||||
|
||||
.icon-button { padding: $base_padding; }
|
||||
|
||||
.slider-bin {
|
||||
&:focus {@include button(focus);}
|
||||
min-height: 16px; // slider size
|
||||
padding: $base_padding;
|
||||
border-radius: 99px;
|
||||
}
|
||||
}
|
||||
|
||||
.quick-toggle-menu {
|
||||
@include card;
|
||||
border-radius: $base_border_radius*3;
|
||||
padding: $base_padding*2;
|
||||
margin: $base_padding*2 $base_padding*3 0;
|
||||
|
||||
.popup-menu-item > StIcon { -st-icon-style: symbolic; }
|
||||
|
||||
& .header {
|
||||
spacing-rows: 0.5 * $base_padding;
|
||||
spacing-columns: $base_padding*2;
|
||||
padding-bottom: 2 * $base_padding;
|
||||
|
||||
& .icon {
|
||||
icon-size: $base_icon_size*1.5; // a non-standard symbolic size but ok
|
||||
border-radius: 999px;
|
||||
padding: 1.5 * $base_padding;
|
||||
background-color: transparentize($fg_color, 0.8);
|
||||
|
||||
&.active { background-color: $selected_bg_color;}
|
||||
}
|
||||
|
||||
& .title {
|
||||
@extend %title_3;
|
||||
}
|
||||
|
||||
& .subtitle {
|
||||
@extend %caption_heading;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.quick-toggle-menu-container {
|
||||
}
|
||||
|
||||
.quick-settings-system-item {
|
||||
& > StBoxLayout { spacing: 2 * $base_padding; }
|
||||
|
||||
& .power-item {
|
||||
min-height: 0;
|
||||
min-width: 0;
|
||||
|
||||
&:insensitive {
|
||||
@include button(normal);
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nm-network-item {
|
||||
.wireless-secure-icon { icon-size: 0.5 * $base_icon_size; }
|
||||
}
|
||||
|
||||
.bt-device-item {
|
||||
.popup-menu-icon { -st-icon-style: symbolic; }
|
||||
}
|
||||
|
||||
.bt-menu-placeholder {
|
||||
@extend %title_4;
|
||||
text-align: center;
|
||||
|
||||
padding: 2em 4em;
|
||||
}
|
||||
|
||||
.device-subtitle { color: transparentize($fg_color, 0.5); }
|
||||
|
||||
// background apps
|
||||
|
||||
.background-apps-quick-toggle {
|
||||
min-height: 40px;
|
||||
background-color: transparent;
|
||||
|
||||
& StIcon { icon-size: $base_icon_size !important; }
|
||||
}
|
||||
|
||||
.background-app-item {
|
||||
& .title { @extend %heading; }
|
||||
& .subtitle { @extend %caption; }
|
||||
& .popup-menu-icon {
|
||||
icon-size: $large_icon_size !important;
|
||||
-st-icon-style: regular !important;
|
||||
}
|
||||
& .close-button {
|
||||
@extend .icon-button;
|
||||
padding: $base_padding;
|
||||
}
|
||||
|
||||
&.popup-inactive-menu-item { color: $fg_color; }
|
||||
}
|
||||
@@ -1,204 +0,0 @@
|
||||
// Screenshot UI
|
||||
.icon-label-button-container {
|
||||
spacing: $base_padding;
|
||||
@extend %caption;
|
||||
|
||||
StIcon { icon-size: 32px;}
|
||||
}
|
||||
|
||||
$screenshot_ui_panel_padding: $base_padding*3;
|
||||
$screenshot_ui_shot_cast_margin: 21px;
|
||||
$screenshot_ui_panel_border_radius: $modal_radius + $screenshot_ui_shot_cast_margin;
|
||||
$screenshot_ui_shot_cast_spacing: 3px;
|
||||
|
||||
$screenshot_ui_button_red: $error_color;
|
||||
|
||||
.screenshot-ui-panel {
|
||||
@extend %osd_panel;
|
||||
border-radius: $screenshot_ui_panel_border_radius;
|
||||
padding: $screenshot_ui_panel_padding;
|
||||
// Reduce the bottom padding a little to accommodate the large capture button.
|
||||
padding-bottom: $screenshot_ui_panel_padding - 6px;
|
||||
margin-bottom: 4em;
|
||||
spacing: $base_padding * 2;
|
||||
}
|
||||
|
||||
.screenshot-ui-close-button {
|
||||
@extend .window-close; // copy window close button
|
||||
padding: $base_padding !important; // but with more padding
|
||||
margin-top: 12px;
|
||||
box-shadow: 0 2px 4px 0 $shadow_color;
|
||||
&.left { margin-left: 12px;}
|
||||
&.right { margin-right: 12px;}
|
||||
}
|
||||
|
||||
.screenshot-ui-type-button {
|
||||
@extend %osd_button;
|
||||
min-width: 48px;
|
||||
padding: $base_padding * 2 $base_padding * 3 !important;
|
||||
border-radius: $screenshot_ui_panel_border_radius - $screenshot_ui_panel_padding;
|
||||
}
|
||||
|
||||
.screenshot-ui-capture-button {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 99px;
|
||||
border: 4px $osd_fg_color;
|
||||
padding: 4px;
|
||||
|
||||
.screenshot-ui-capture-button-circle {
|
||||
background-color: $osd_fg_color;
|
||||
transition-duration: 200ms;
|
||||
&:hover, &:focus { background-color: $hover_bg_color;}
|
||||
border-radius: 99px;
|
||||
}
|
||||
|
||||
&:hover, &:focus {
|
||||
.screenshot-ui-capture-button-circle {
|
||||
background-color: darken($osd_fg_color, 15%);
|
||||
}
|
||||
}
|
||||
|
||||
&:active {
|
||||
.screenshot-ui-capture-button-circle {
|
||||
background-color: darken($osd_fg_color, 50%);
|
||||
}
|
||||
}
|
||||
|
||||
&:cast {
|
||||
.screenshot-ui-capture-button-circle {
|
||||
background-color: $screenshot_ui_button_red;
|
||||
}
|
||||
&:hover, &:focus {
|
||||
.screenshot-ui-capture-button-circle {
|
||||
background-color: lighten($screenshot_ui_button_red, 5%);
|
||||
}
|
||||
}
|
||||
&:active {
|
||||
.screenshot-ui-capture-button-circle {
|
||||
background-color: darken($screenshot_ui_button_red, 7%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.screenshot-ui-shot-cast-container {
|
||||
background-color: lighten($osd_bg_color,5%);
|
||||
border-radius: $modal_radius;
|
||||
padding: $screenshot_ui_shot_cast_spacing;
|
||||
spacing: $screenshot_ui_shot_cast_spacing;
|
||||
|
||||
&:ltr { margin-left: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
|
||||
&:rtl { margin-right: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
|
||||
}
|
||||
|
||||
.screenshot-ui-shot-cast-button {
|
||||
padding: $base_padding $base_padding*2;
|
||||
background-color: transparent;
|
||||
&:hover, &:focus { background-color: lighten($osd_bg_color, 10%);}
|
||||
&:active { background-color: lighten($active_bg_color,5%);}
|
||||
&:checked { background-color: white;color: black;}
|
||||
&:insensitive { color: transparentize($osd_fg_color, 0.5);}
|
||||
|
||||
border-radius: $modal_radius - $screenshot_ui_shot_cast_spacing;
|
||||
|
||||
StIcon { icon-size: $base_icon_size;}
|
||||
}
|
||||
|
||||
.screenshot-ui-show-pointer-button {
|
||||
@extend %osd_button;
|
||||
border-radius: 99px;
|
||||
padding: $base_padding * 2 !important;
|
||||
StIcon { icon-size: $base_icon_size;}
|
||||
}
|
||||
|
||||
.screenshot-ui-area-indicator-shade {
|
||||
background-color: rgba(0,0,0,.3);
|
||||
}
|
||||
|
||||
.screenshot-ui-area-selector {
|
||||
.screenshot-ui-area-indicator-shade {
|
||||
background-color: rgba(0,0,0,.5);
|
||||
}
|
||||
|
||||
.screenshot-ui-area-indicator-selection {
|
||||
border: 2px white;
|
||||
}
|
||||
}
|
||||
|
||||
.screenshot-ui-area-selector-handle {
|
||||
border-radius: 99px;
|
||||
background-color: white;
|
||||
box-shadow: 0 1px 3px 2px rgba(0,0,0,0.2);
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.screenshot-ui-window-selector {
|
||||
background-color: $system_bg_color;
|
||||
|
||||
.screenshot-ui-window-selector-window-container {
|
||||
margin: 100px;
|
||||
}
|
||||
|
||||
&:primary-monitor {
|
||||
.screenshot-ui-window-selector-window-container {
|
||||
// Make some room for the panel.
|
||||
margin-bottom: 200px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.screenshot-ui-window-selector-window-border {
|
||||
transition-duration: 200ms;
|
||||
border-radius: $modal_radius;
|
||||
border: 6px transparent;
|
||||
}
|
||||
|
||||
.screenshot-ui-window-selector-check {
|
||||
transition-duration: 200ms;
|
||||
color: transparent;
|
||||
border-radius: 99px;
|
||||
border-width: 12px;
|
||||
icon-size: 24px;
|
||||
}
|
||||
|
||||
.screenshot-ui-window-selector-window {
|
||||
&:hover {
|
||||
.screenshot-ui-window-selector-window-border {
|
||||
border-color: darken($selected_bg_color, 15%);
|
||||
}
|
||||
}
|
||||
&:checked {
|
||||
.screenshot-ui-window-selector-window-border {
|
||||
border-color: $selected_bg_color;
|
||||
background-color: transparentize($selected_bg_color, 0.8);
|
||||
}
|
||||
|
||||
.screenshot-ui-window-selector-check {
|
||||
color: $selected_fg_color;
|
||||
background-color: $selected_bg_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.screenshot-ui-screen-selector {
|
||||
transition-duration: 200ms;
|
||||
background-color: rgba(0,0,0,.5);
|
||||
|
||||
&:hover { background-color: rgba(0,0,0,.3);}
|
||||
&:active { background-color: rgba(0,0,0,.7);}
|
||||
&:checked {
|
||||
background-color: transparent;
|
||||
border: 2px white;
|
||||
}
|
||||
}
|
||||
|
||||
.screenshot-ui-tooltip {
|
||||
color: $osd_fg_color;
|
||||
background-color: $osd_bg_color;
|
||||
border-radius: 99px;
|
||||
padding: $base_padding $base_padding * 2;
|
||||
text-align: center;
|
||||
-y-offset: 24px;
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
/* Scrollbars */
|
||||
|
||||
StScrollView {
|
||||
&.vfade { -st-vfade-offset: 68px; }
|
||||
&.hfade { -st-hfade-offset: 68px; }
|
||||
}
|
||||
|
||||
StScrollBar {
|
||||
padding: 0;
|
||||
|
||||
StScrollView & {
|
||||
min-width: 8px;
|
||||
min-height: 8px;
|
||||
}
|
||||
|
||||
StBin#trough {
|
||||
border-radius: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
StButton#vhandle, StButton#hhandle {
|
||||
border-radius: 8px;
|
||||
background-color: mix($fg_color, $bg_color, 30%);
|
||||
border: 3px solid transparent; //would be nice to margin or at least to transparent
|
||||
transition: 500ms all ease;
|
||||
&:hover {background-color: mix($fg_color, $bg_color, 50%);}
|
||||
&:active {background-color: mix($fg_color, $bg_color, 40%);}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
// Search entry
|
||||
.search-entry {
|
||||
border-radius: 99px;
|
||||
margin-top: $base_padding*2;
|
||||
margin-bottom: $base_padding;
|
||||
width: 24em;
|
||||
|
||||
.search-entry-icon {
|
||||
icon-size: $base_icon_size;
|
||||
margin-top: 2px; // center vertically
|
||||
padding: 0 4px;
|
||||
}
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
/* Search */
|
||||
|
||||
// search overview container
|
||||
#searchResults {
|
||||
margin: 0 $base_margin;
|
||||
}
|
||||
|
||||
#searchResultsContent {
|
||||
max-width: 1072px;
|
||||
}
|
||||
|
||||
// search results sections "the boxes"
|
||||
.search-section {
|
||||
// This should be equal to #searchResultsContent spacing
|
||||
spacing: $base_padding*3;
|
||||
|
||||
// separator (unstyled)
|
||||
.search-section-separator {
|
||||
height: $base_margin*2; // use it as a spacer
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
// content
|
||||
.search-section-content {
|
||||
background-color: lighten($system_bg_color, 5%);
|
||||
border-radius: $modal_radius*1.5;
|
||||
box-shadow:inset 0 0 0 1px solid $outer_borders_color;
|
||||
color: $osd_fg_color;
|
||||
padding: $base_padding*2;
|
||||
margin:0 $base_margin*3;
|
||||
}
|
||||
|
||||
%search_section_content_item {
|
||||
@include tile_button($osd_fg_color);
|
||||
border-radius: $base_border_radius+3px;
|
||||
}
|
||||
|
||||
// "no results" text
|
||||
.search-statustext {
|
||||
@extend %title_1;
|
||||
}
|
||||
|
||||
.grid-search-results {
|
||||
spacing: $base_padding*5;
|
||||
margin:0 $base_margin*3;
|
||||
}
|
||||
|
||||
// Search results with icons
|
||||
.grid-search-result {
|
||||
@extend .app-well-app;
|
||||
}
|
||||
|
||||
// search result provider
|
||||
.search-provider-icon {
|
||||
@extend %search_section_content_item;
|
||||
&:ltr {margin-right: $base_margin;}
|
||||
&:rtl {margin-left: $base_margin;}
|
||||
|
||||
// content
|
||||
.list-search-provider-content {
|
||||
spacing: $base_padding * 2;
|
||||
|
||||
// provider labels
|
||||
.list-search-provider-details {
|
||||
width: 120px;
|
||||
color: $osd_fg_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// search results list
|
||||
.list-search-results {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
// search result listitem
|
||||
.list-search-result {
|
||||
@extend %search_section_content_item;
|
||||
|
||||
// content
|
||||
.list-search-result-content {
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
// list item title (with leading icon)
|
||||
.list-search-result-title {
|
||||
spacing: $base_padding * 2;
|
||||
// font-weight: bold;
|
||||
}
|
||||
|
||||
// list item description
|
||||
.list-search-result-description {
|
||||
color: $osd_insensitive_fg_color;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
/* Slider */
|
||||
|
||||
$slider_size: 16px;
|
||||
|
||||
.slider {
|
||||
// slider trough
|
||||
-barlevel-height: 4px;
|
||||
-barlevel-background-color: if($variant == 'light', transparentize($fg_color, 0.6), transparentize($fg_color, 0.8)); //background of the trough
|
||||
-barlevel-border-width: 2px;
|
||||
-barlevel-border-color: transparent; // trough border color
|
||||
// fill style
|
||||
-barlevel-active-background-color: $selected_bg_color;
|
||||
-barlevel-active-border-color: transparent;
|
||||
// overfill style (red in this case)
|
||||
-barlevel-overdrive-color: $destructive_color;
|
||||
-barlevel-overdrive-border-color: transparent; //trough border when red;
|
||||
-barlevel-overdrive-separator-width:1px;
|
||||
// slider handler
|
||||
-slider-handle-radius: $slider_size * 0.5; // half the size of the size
|
||||
-slider-handle-border-width: 0;
|
||||
-slider-handle-border-color: transparent; // because 0 width
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
/* App Switcher */
|
||||
|
||||
// same as dash
|
||||
$switcher_padding: $base_padding*2;
|
||||
|
||||
|
||||
// the full screen container of the switcher
|
||||
.switcher-popup {
|
||||
padding: 0;
|
||||
spacing: $base_padding * 4;
|
||||
}
|
||||
|
||||
// switcher onscreen panel
|
||||
.switcher-list {
|
||||
@extend %osd_panel;
|
||||
padding: $switcher_padding;
|
||||
border-radius: $modal_radius+$switcher_padding;
|
||||
box-shadow: 0 8px 8px 0 $shadow_color;
|
||||
|
||||
// container for items in list
|
||||
.switcher-list-item-container {
|
||||
spacing: $base_padding * 2;
|
||||
}
|
||||
|
||||
// each item in the list
|
||||
.item-box {
|
||||
@include tile_button($osd_fg_color);
|
||||
// override over style so mouse doesn't steal focus
|
||||
&:hover {background: none;}
|
||||
@if $is_highcontrast {
|
||||
box-shadow: inset 0 0 0 999px transparentize($hc_inset_color,0.2);
|
||||
}
|
||||
}
|
||||
|
||||
.separator {
|
||||
width: 1px;
|
||||
background: $borders_color;
|
||||
}
|
||||
|
||||
// container of thumbnails
|
||||
.thumbnail-box {
|
||||
padding: 2px;
|
||||
spacing: $base_padding;
|
||||
}
|
||||
|
||||
// window thumbnail itself
|
||||
.thumbnail {
|
||||
width: 256px; // equal to THUMBNAIL_DEFAULT_SIZE in altTab.js
|
||||
border-radius:$base_border_radius;
|
||||
}
|
||||
}
|
||||
|
||||
// arrow if app has multiple windows
|
||||
.switcher-arrow {
|
||||
border-color: transparentize($osd_fg_color, 0.2);
|
||||
color: transparentize($osd_fg_color, 0.2);
|
||||
|
||||
&:highlighted {
|
||||
border-color: $osd_fg_color;
|
||||
color: $osd_fg_color;
|
||||
}
|
||||
}
|
||||
|
||||
// Input Source Switcher
|
||||
.input-source-switcher-symbol {
|
||||
font-size: 34pt;
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
}
|
||||
|
||||
// Window cycler highlight
|
||||
.cycler-highlight {
|
||||
border: 5px solid $selected_bg_color;
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
/* Switches */
|
||||
|
||||
// these are equal to the size of the SVG assets
|
||||
$switch_height: 26px;
|
||||
$switch_width: 48px;
|
||||
|
||||
.toggle-switch {
|
||||
color: $fg_color;
|
||||
height: $switch_height;
|
||||
width: $switch_width;
|
||||
background-size: contain;
|
||||
background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-off-light.svg"),url("resource:///org/gnome/shell/theme/toggle-off.svg"));
|
||||
&:checked {
|
||||
background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-on-light.svg"),url("resource:///org/gnome/shell/theme/toggle-on.svg"));
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
/* Window Picker */
|
||||
|
||||
$window_picker_spacing: $base_padding; // 6px
|
||||
$window_picker_padding: $base_padding * 2; // 12px
|
||||
|
||||
$window_thumbnail_label_color: transparentize($osd_bg_color, 0.4);
|
||||
|
||||
$window_close_button_color: transparentize(lighten($osd_bg_color, 7%), .02);
|
||||
$window_close_button_size: 30px;
|
||||
$window_close_button_padding: 3px;
|
||||
|
||||
// Window picker
|
||||
.window-picker {
|
||||
// Space between window thumbnails
|
||||
spacing: $window_picker_spacing;
|
||||
}
|
||||
|
||||
// Window titles
|
||||
.window-caption {
|
||||
@extend %tooltip;
|
||||
}
|
||||
|
||||
// Close button
|
||||
.window-close {
|
||||
background-color: $window_close_button_color;
|
||||
color: $osd_fg_color;
|
||||
border-radius: 99px;
|
||||
box-shadow: 0 2px 4px 0 $shadow_color;
|
||||
padding: $window_close_button_padding;
|
||||
height: $window_close_button_size;
|
||||
width: $window_close_button_size;
|
||||
transition-duration: 100ms;
|
||||
|
||||
& StIcon { icon-size: 24px; } // uses non standard icon size
|
||||
|
||||
&:hover {
|
||||
background-color: lighten($window_close_button_color, 7%);
|
||||
}
|
||||
|
||||
&:active {
|
||||
background-color: lighten($window_close_button_color, 13%);
|
||||
}
|
||||
|
||||
@if $is_highcontrast {
|
||||
border:2px solid $outer_borders_color;
|
||||
}
|
||||
}
|
||||
|
||||
.workspace-background {
|
||||
// keep in sync with BACKGROUND_CORNER_RADIUS_PIXELS in workspace.js
|
||||
border-radius: 30px;
|
||||
background-color: $invisible_occluded_bg_color;
|
||||
box-shadow: 0 4px 16px 4px transparentize(darken($osd_bg_color, 30%), 0.7);
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
/* Workspace Switcher */
|
||||
|
||||
$ws_indicator_height: $large_icon_size;
|
||||
$ws_dot_active: $ws_indicator_height / 3;
|
||||
$ws_dot_inactive: $ws_indicator_height / 6;
|
||||
|
||||
.workspace-switcher {
|
||||
@extend %osd_panel;
|
||||
margin-bottom: 4em;
|
||||
spacing: $base_padding * 2;
|
||||
padding: $base_padding * 2 $base_padding * 3;
|
||||
}
|
||||
|
||||
.ws-switcher-indicator {
|
||||
background-color: transparentize($osd_fg_color,0.5);
|
||||
padding: $ws_dot_inactive / 2;
|
||||
margin: ($ws_indicator_height - $ws_dot_inactive) / 2;
|
||||
border-radius: $ws_indicator_height;
|
||||
|
||||
&:active {
|
||||
background-color: $osd_fg_color;
|
||||
padding: $ws_dot_active / 2;
|
||||
margin: ($ws_indicator_height - $ws_dot_active) / 2;
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
/* Workspace pager */
|
||||
|
||||
// thumbnails in overview
|
||||
.workspace-thumbnails {
|
||||
visible-width: 32px; //amount visible before hover
|
||||
spacing: $base_padding;
|
||||
padding: $base_padding;
|
||||
|
||||
.workspace-thumbnail {
|
||||
color: $osd_fg_color;
|
||||
background-color: lighten($system_bg_color, 10%);
|
||||
border-radius: $base_border_radius*0.5;
|
||||
border: 1px solid transparent;
|
||||
|
||||
@if $is_highcontrast {
|
||||
border-color: $hc_inset_color;
|
||||
}
|
||||
}
|
||||
|
||||
// drag and drop indicator
|
||||
.placeholder {
|
||||
background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg");
|
||||
background-size: contain;
|
||||
width: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
// selected indicator
|
||||
.workspace-thumbnail-indicator {
|
||||
border: 3px solid $selected_bg_color;
|
||||
border-radius: $base_border_radius;
|
||||
}
|
||||
110
data/meson.build
110
data/meson.build
@@ -1,33 +1,17 @@
|
||||
session_desktop_base = 'gnome-classic'
|
||||
|
||||
session_desktops = [
|
||||
session_desktop_base,
|
||||
session_desktop_base + '-xorg',
|
||||
session_desktop_base + '-wayland',
|
||||
sessions = [
|
||||
['gnome-classic.session.desktop.in', sessiondir],
|
||||
['gnome-classic.desktop.in', xsessiondir]
|
||||
]
|
||||
|
||||
foreach name: session_desktops
|
||||
session_desktop = name + '.desktop'
|
||||
if name.endswith('-xorg')
|
||||
session_instdir = xsessiondir
|
||||
elif name.endswith('-wayland')
|
||||
session_instdir = wlsessiondir
|
||||
else
|
||||
# FIXME: The same target can not be copied into two directories.
|
||||
# There is a workaround in meson/session-post-install.py until proper
|
||||
# solution arises:
|
||||
# https://github.com/mesonbuild/meson/issues/2416
|
||||
session_instdir = xsessiondir
|
||||
#session_instdir = [ xesssiondir, wlsessiondir ]
|
||||
endif
|
||||
i18n.merge_file(
|
||||
input: session_desktop + '.in',
|
||||
output: session_desktop,
|
||||
po_dir: '../po',
|
||||
install: true,
|
||||
install_dir: session_instdir,
|
||||
type: 'desktop'
|
||||
)
|
||||
foreach s : sessions
|
||||
name_array = s[0].split('.')
|
||||
i18n.merge_file('',
|
||||
input: s[0],
|
||||
output: '.'.join([name_array[0], name_array[1]]),
|
||||
po_dir: '../po',
|
||||
install: true,
|
||||
install_dir: s[1],
|
||||
type: 'desktop'
|
||||
)
|
||||
endforeach
|
||||
|
||||
classic_uuids = []
|
||||
@@ -50,64 +34,30 @@ theme_sources = files(
|
||||
'gnome-shell-sass/_colors.scss',
|
||||
'gnome-shell-sass/_common.scss',
|
||||
'gnome-shell-sass/_drawing.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-lock.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/_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/_quick-settings.scss',
|
||||
'gnome-shell-sass/widgets/_screenshot.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/_window-picker.scss',
|
||||
'gnome-shell-sass/widgets/_workspace-switcher.scss',
|
||||
'gnome-shell-sass/widgets/_workspace-thumbnails.scss'
|
||||
'gnome-shell-sass/_high-contrast-colors.scss'
|
||||
)
|
||||
|
||||
theme_data = [
|
||||
'calendar-today.svg',
|
||||
'classic-process-working.svg',
|
||||
'classic-toggle-off-intl.svg',
|
||||
'classic-toggle-off-us.svg',
|
||||
'classic-toggle-on-intl.svg',
|
||||
'classic-toggle-on-us.svg',
|
||||
'gnome-classic-high-contrast.css'
|
||||
]
|
||||
|
||||
stylesheet = 'gnome-classic.css'
|
||||
if fs.exists(stylesheet)
|
||||
install_data(stylesheet, install_dir: themedir)
|
||||
else
|
||||
sassc = find_program('sassc', required: true)
|
||||
custom_target(stylesheet,
|
||||
input: fs.replace_suffix(stylesheet, '.scss'),
|
||||
output: stylesheet,
|
||||
depend_files: theme_sources,
|
||||
command: [sassc, '-a', '@INPUT@', '@OUTPUT@'],
|
||||
install: true,
|
||||
install_dir: themedir
|
||||
)
|
||||
endif
|
||||
style = 'gnome-classic'
|
||||
custom_target(style + '.css',
|
||||
input: style + '.scss',
|
||||
output: style + '.css',
|
||||
depend_files: theme_sources,
|
||||
command: [sassc, '-a', '@INPUT@', '@OUTPUT@'],
|
||||
install: true,
|
||||
install_dir: themedir
|
||||
)
|
||||
|
||||
install_data(theme_data, install_dir: themedir)
|
||||
|
||||
classic_override = '00_org.gnome.shell.extensions.classic.gschema.override'
|
||||
install_data(classic_override, install_dir: schemadir)
|
||||
classic_schema = 'org.gnome.shell.extensions.classic-overrides.gschema.xml'
|
||||
install_data(classic_schema, install_dir: schemadir)
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
<schemalist>
|
||||
<schema id="org.gnome.shell.extensions.classic-overrides"
|
||||
path="/org/gnome/shell/extensions/classic-overrides/"
|
||||
gettext-domain="gnome-shell-extensions">
|
||||
<key name="attach-modal-dialogs" type="b">
|
||||
<default>true</default>
|
||||
<summary>Attach modal dialog to the parent window</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running
|
||||
GNOME Shell.
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="button-layout" type="s">
|
||||
<default>"appmenu:minimize,maximize,close"</default>
|
||||
<summary>Arrangement of buttons on the titlebar</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.desktop.wm.preferences when running GNOME Shell.
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="edge-tiling" type="b">
|
||||
<default>true</default>
|
||||
<summary>Enable edge tiling when dropping windows on screen edges</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="workspaces-only-on-primary" type="b">
|
||||
<default>true</default>
|
||||
<summary>Workspaces only on primary monitor</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</description>
|
||||
</key>
|
||||
|
||||
<key name="focus-change-on-pointer-rest" type="b">
|
||||
<default>true</default>
|
||||
<summary>Delay focus changes in mouse mode until the pointer stops moving</summary>
|
||||
<description>
|
||||
This key overrides the key in org.gnome.mutter when running GNOME Shell.
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
523
debian/changelog
vendored
Normal file
523
debian/changelog
vendored
Normal file
@@ -0,0 +1,523 @@
|
||||
gnome-shell-extensions (3.29.3+really3.28.1-1) unstable; urgency=medium
|
||||
|
||||
* Team upload
|
||||
* Revert unintended upload of 3.29.3 to unstable
|
||||
* d/gbp.conf: Use debian/unstable and upstream/3.28.x branches
|
||||
* Bump Standards-Version to 4.1.5
|
||||
* Set Rules-Requires-Root to no
|
||||
* Hard-code compatible Shell versions for this branch since
|
||||
${gnome:Version} doesn't understand the +really workaround
|
||||
|
||||
-- Simon McVittie <smcv@debian.org> Fri, 27 Jul 2018 23:47:37 +0100
|
||||
|
||||
gnome-shell-extensions (3.28.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
* Bump Standards-Version to 4.1.4
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Mon, 14 May 2018 21:51:46 -0400
|
||||
|
||||
gnome-shell-extensions (3.28.0-2) unstable; urgency=medium
|
||||
|
||||
* Fix typo in configure flag that resulted in missing
|
||||
auto-move-windows, native-window-placement, & user-theme extensions
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Mon, 19 Mar 2018 18:20:53 -0400
|
||||
|
||||
gnome-shell-extensions (3.28.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Sun, 18 Mar 2018 20:17:17 -0400
|
||||
|
||||
gnome-shell-extensions (3.27.92-2) unstable; urgency=medium
|
||||
|
||||
* Release to unstable
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Sat, 10 Mar 2018 19:37:45 -0500
|
||||
|
||||
gnome-shell-extensions (3.27.92-1) experimental; urgency=medium
|
||||
|
||||
[ Jeremy Bicha ]
|
||||
* New upstream release candidate
|
||||
* Drop explicit dependency on mutter's gir. gnome-shell-extensions depends
|
||||
on gnome-shell which depends on the gir. Dropping it will make transitions
|
||||
easier.
|
||||
|
||||
[ Simon McVittie ]
|
||||
* Recommend gnome-tweaks instead of transitional gnome-tweak-tool
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Mon, 05 Mar 2018 21:02:01 -0500
|
||||
|
||||
gnome-shell-extensions (3.27.91-1) experimental; urgency=medium
|
||||
|
||||
* New upstream development release
|
||||
* Build with meson
|
||||
* Build-Depend on sassc
|
||||
* Bump debhelper compat to 11
|
||||
* Drop places-menu-Don-t-force-dispose-of-uninitialized-proxies.patch &
|
||||
dont-require-nautilus-classic.patch: Applied in new release
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Fri, 23 Feb 2018 19:49:59 -0500
|
||||
|
||||
gnome-shell-extensions (3.26.2-3) unstable; urgency=medium
|
||||
|
||||
* Team upload
|
||||
|
||||
[ Jeremy Bicha ]
|
||||
* Update Vcs fields for migration to https://salsa.debian.org/
|
||||
|
||||
[ Simon McVittie ]
|
||||
* d/patches: Re-export with gbp pq export
|
||||
* d/p/places-menu-Don-t-force-dispose-of-uninitialized-proxies.patch:
|
||||
Take patch from upstream to avoid frequent tracebacks from the Places
|
||||
menu with gjs >= 1.50.2-3 (Closes: #888608)
|
||||
|
||||
-- Simon McVittie <smcv@debian.org> Tue, 30 Jan 2018 09:15:54 +0000
|
||||
|
||||
gnome-shell-extensions (3.26.2-2) unstable; urgency=medium
|
||||
|
||||
* Update Vcs fields for conversion to git
|
||||
* Add debian/gbp.conf
|
||||
* Bump Standards-Version to 4.1.2
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Fri, 15 Dec 2017 15:19:14 -0500
|
||||
|
||||
gnome-shell-extensions (3.26.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Sun, 05 Nov 2017 20:17:03 +0100
|
||||
|
||||
gnome-shell-extensions (3.26.1-2) unstable; urgency=medium
|
||||
|
||||
* Release to unstable
|
||||
* Bump Standards-Version to 4.1.1
|
||||
|
||||
-- Jeremy Bicha <jbicha@debian.org> Fri, 13 Oct 2017 16:49:30 -0400
|
||||
|
||||
gnome-shell-extensions (3.26.1-1) experimental; urgency=medium
|
||||
|
||||
* Team upload
|
||||
* New upstream stable release
|
||||
|
||||
-- Simon McVittie <smcv@debian.org> Fri, 06 Oct 2017 11:01:11 +0100
|
||||
|
||||
gnome-shell-extensions (3.26.0-1) experimental; urgency=medium
|
||||
|
||||
* Team upload
|
||||
* New upstream stable release
|
||||
|
||||
-- Simon McVittie <smcv@debian.org> Wed, 13 Sep 2017 11:33:19 +0100
|
||||
|
||||
gnome-shell-extensions (3.25.91-1) experimental; urgency=medium
|
||||
|
||||
* Team upload
|
||||
* New upstream release, for GNOME Shell 3.25.91
|
||||
- d/p/adapt-to-gsd324.patch: Drop, applied upstream
|
||||
- Switch dependency to gir1.2-mutter-1
|
||||
|
||||
-- Simon McVittie <smcv@debian.org> Tue, 05 Sep 2017 16:43:01 +0100
|
||||
|
||||
gnome-shell-extensions (3.22.2-2) unstable; urgency=medium
|
||||
|
||||
* Add adapt-to-gsd324.patch (Closes: #869948):
|
||||
- Adjust gnome-session file for gnome-settings-daemon 3.24
|
||||
* debian/control.in:
|
||||
- Bump Standards-Version to 4.0.0
|
||||
- Explicitly depend on gnome-settings-daemon >= 3.24
|
||||
- Drop version from gnome-tweak-tool recommends
|
||||
- Depend on gnome-session-bin instead of gnome-session (LP: #1702832)
|
||||
|
||||
-- Jeremy Bicha <jbicha@ubuntu.com> Sun, 06 Aug 2017 17:38:06 -0400
|
||||
|
||||
gnome-shell-extensions (3.22.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Thu, 10 Nov 2016 19:36:44 +0100
|
||||
|
||||
gnome-shell-extensions (3.22.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Tue, 11 Oct 2016 17:58:31 +0200
|
||||
|
||||
gnome-shell-extensions (3.22.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Tue, 20 Sep 2016 01:59:50 +0200
|
||||
|
||||
gnome-shell-extensions (3.21.92-1) unstable; urgency=medium
|
||||
|
||||
* New upstream development release.
|
||||
* Replace Build-Depends gnome-common with pkg-config and gettext.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Tue, 13 Sep 2016 22:13:19 +0200
|
||||
|
||||
gnome-shell-extensions (3.21.91-1) unstable; urgency=medium
|
||||
|
||||
* New upstream beta release.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Tue, 30 Aug 2016 19:57:32 +0200
|
||||
|
||||
gnome-shell-extensions (3.21.90-1) experimental; urgency=medium
|
||||
|
||||
[ Andreas Henriksson ]
|
||||
* New upstream beta release.
|
||||
* Update build-dependencies according to configure.ac changes:
|
||||
- drop intltool, now gettext is used instead.
|
||||
|
||||
[ Jeremy Bicha ]
|
||||
* Convert from cdbs to dh
|
||||
* Add debian/docs to install NEWS and README
|
||||
* Bump dh compat to 10
|
||||
* Update Vcs fields
|
||||
* Refresh patches
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Sun, 21 Aug 2016 05:36:17 +0200
|
||||
|
||||
gnome-shell-extensions (3.21.4-1) experimental; urgency=medium
|
||||
|
||||
* New upstream development release.
|
||||
* Stop hard-coding Victor Seva in the Uploaders field
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Fri, 12 Aug 2016 16:28:33 +0200
|
||||
|
||||
gnome-shell-extensions (3.20.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Bump Standards-Version to 3.9.8.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Wed, 11 May 2016 15:21:35 +0200
|
||||
|
||||
gnome-shell-extensions (3.20.0-2) unstable; urgency=medium
|
||||
|
||||
* Upload to unstable.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Sun, 17 Apr 2016 00:25:25 +0200
|
||||
|
||||
gnome-shell-extensions (3.20.0-1) experimental; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Fri, 25 Mar 2016 10:48:00 +0100
|
||||
|
||||
gnome-shell-extensions (3.19.92-1) experimental; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Update dont-require-nautilus-classic.patch to apply.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Thu, 17 Mar 2016 12:51:13 +0100
|
||||
|
||||
gnome-shell-extensions (3.18.4-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Bump Standards-Version to 3.9.7.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Sun, 06 Mar 2016 22:38:57 +0100
|
||||
|
||||
gnome-shell-extensions (3.18.3-2) unstable; urgency=medium
|
||||
|
||||
* Add Breaks/Replaces gnome-shell-common (<< 3.18) (Closes: #808906)
|
||||
- Helps upgrades from Jessie by allowing overwriting
|
||||
/usr/share/gnome-shell/theme/calendar-today.svg et.al.
|
||||
which was previously shipped in gnome-shell-common.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Wed, 10 Feb 2016 01:24:42 +0100
|
||||
|
||||
gnome-shell-extensions (3.18.3-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Thu, 14 Jan 2016 22:49:16 +0100
|
||||
|
||||
gnome-shell-extensions (3.18.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Fri, 13 Nov 2015 00:04:09 +0100
|
||||
|
||||
gnome-shell-extensions (3.18.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Fri, 16 Oct 2015 22:09:01 +0200
|
||||
|
||||
gnome-shell-extensions (3.18.0-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
|
||||
-- Laurent Bigonville <bigon@debian.org> Sun, 11 Oct 2015 16:29:18 +0200
|
||||
|
||||
gnome-shell-extensions (3.17.92-1) experimental; urgency=medium
|
||||
|
||||
* New upstream release candidate.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Fri, 18 Sep 2015 17:28:06 +0200
|
||||
|
||||
gnome-shell-extensions (3.16.2-1) unstable; urgency=medium
|
||||
|
||||
[ Emilio Pozuelo Monfort ]
|
||||
* debian/gnome-shell-extensions.gsettings-override:
|
||||
+ Dropped, no longer needed as the enabled extension no longer exists.
|
||||
Thanks Artur Rona for noticing. (Closes: #782747)
|
||||
|
||||
[ Michael Biebl ]
|
||||
* New upstream release.
|
||||
* Update Homepage.
|
||||
* Bump debhelper compatibility level to 9.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Thu, 02 Jul 2015 19:13:32 +0200
|
||||
|
||||
gnome-shell-extensions (3.16.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* debian/control.in,
|
||||
debian/rules:
|
||||
+ The system monitor extension was removed. Drop the libgtop
|
||||
build and runtime dependencies and stop enabling it.
|
||||
* debian/patches/apps-center-labels.patch,
|
||||
debian/patches/window-list-pointerInNotification.patch,
|
||||
debian/patches/menu-arrows-icons.patch:
|
||||
+ Dropped, merged upstream.
|
||||
* debian/patches/dont-require-nautilus-classic.patch:
|
||||
+ Updated for the new version.
|
||||
|
||||
-- Emilio Pozuelo Monfort <pochu@debian.org> Sun, 14 Jun 2015 15:23:59 +0200
|
||||
|
||||
gnome-shell-extensions (3.14.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream bugfix release.
|
||||
* menu-arrows-icons: new patch. Make arrows consistent with the rest
|
||||
of the shell.
|
||||
* apps-center-labels.patch: patch from upstream git. Center labels
|
||||
vertically in the applications menu.
|
||||
* window-list-pointerInNotification.patch: patch from upstream git.
|
||||
Update window-list extension for an older shell API change.
|
||||
|
||||
-- Josselin Mouette <joss@debian.org> Sun, 30 Nov 2014 16:06:59 +0100
|
||||
|
||||
gnome-shell-extensions (3.14.1-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* debian/control.in: Bump Standards-Version to 3.9.6 (no further changes)
|
||||
* Add missing dependencies against gir packages, including gir1.2-gmenu-3.0,
|
||||
this should fix the apps-menu extension for some people (Closes: #765460).
|
||||
|
||||
-- Laurent Bigonville <bigon@debian.org> Sun, 19 Oct 2014 21:17:58 +0200
|
||||
|
||||
gnome-shell-extensions (3.14.0-2) unstable; urgency=medium
|
||||
|
||||
* Drop xrandr from EXTENSIONS_DISABLED, this extension was removed
|
||||
upstream.
|
||||
* Add new screenshot-window-sizer extension to EXTENSIONS_ENABLED.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Wed, 24 Sep 2014 01:15:32 +0200
|
||||
|
||||
gnome-shell-extensions (3.14.0-1) unstable; urgency=medium
|
||||
|
||||
* debian/watch: only scan for stable releases.
|
||||
* New upstream release.
|
||||
* Upload to unstable.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Tue, 23 Sep 2014 15:46:30 +0200
|
||||
|
||||
gnome-shell-extensions (3.13.91-1) experimental; urgency=medium
|
||||
|
||||
* New upstream development release.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Sat, 06 Sep 2014 11:16:39 -0700
|
||||
|
||||
gnome-shell-extensions (3.12.2-1) unstable; urgency=medium
|
||||
|
||||
* New upstream release.
|
||||
* Bump Standards-Version to 3.9.5
|
||||
* Upload to unstable.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Tue, 15 Jul 2014 00:06:09 +0200
|
||||
|
||||
gnome-shell-extensions (3.12.0-1) experimental; urgency=low
|
||||
|
||||
[ Jean Schurger ]
|
||||
* New upstream release (3.10.1)
|
||||
* debian/rules: remove one of the 'windowsNavigator' extension listed twice
|
||||
and the 'alternative-system-menu' extension (does not exists anymore)
|
||||
* debian/copyright: Update 'Format:' line
|
||||
|
||||
[ Andreas Henriksson ]
|
||||
* New upstream release (3.12.0)
|
||||
* debian/local/gnome-session-classic,
|
||||
debian/patches/gnome-session-classic-wrapper-script.patch:
|
||||
- update script to include new GNOME_SHELL_SESSION_MODE env variable
|
||||
and update patch to apply again.
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Fri, 04 Apr 2014 21:43:18 +0200
|
||||
|
||||
gnome-shell-extensions (3.8.4-2) unstable; urgency=low
|
||||
|
||||
* Upload to unstable.
|
||||
|
||||
-- Emilio Pozuelo Monfort <pochu@debian.org> Sun, 13 Oct 2013 18:11:33 +0200
|
||||
|
||||
gnome-shell-extensions (3.8.4-1) experimental; urgency=low
|
||||
|
||||
[ Jeremy Bicha ]
|
||||
* New upstream release
|
||||
* Dropped patches applied in new version:
|
||||
- fix-hibernate.patch
|
||||
- fix-applications-menu-resolution-change.patch
|
||||
- look-in-data-home-for-themes.patch
|
||||
|
||||
[ Michael Biebl ]
|
||||
* Add a wrapper script to start the GNOME Classic session as currently
|
||||
Xsession doesn't allow to run gnome-session with custom arguments due to
|
||||
#653327.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Fri, 11 Oct 2013 18:55:23 +0200
|
||||
|
||||
gnome-shell-extensions (3.8.3.1-1) experimental; urgency=low
|
||||
|
||||
[ Jeremy Bicha ]
|
||||
* New upstream release
|
||||
- default-min-max and static-workspaces extensions have been dropped.
|
||||
Use Classic Mode or tweak org.gnome.shell.overrides in dconf-editor
|
||||
* debian/control.in:
|
||||
- Depend on gnome-session 3.8, required for the new Classic mode.
|
||||
- Update homepage
|
||||
* debian/patches/dont-require-nautilus-classic.patch:
|
||||
- Don't require nautilus-classic since it forces desktop icons
|
||||
* debian/patches/fix-applications-menu-resolution-change.patch:
|
||||
- Backport commit to not break applications menu when screen resolution
|
||||
changes
|
||||
* debian/patches/fix-hibernate.patch:
|
||||
- Backport patch to fix checking whether hibernate is allowed
|
||||
* debian/patches/look-in-data-home-for-themes.patch:
|
||||
- Backport commit to also look in XDG_DATA_HOME (usually ~/.local/share/)
|
||||
for user themes
|
||||
* debian/rules:
|
||||
- Run autoreconf
|
||||
|
||||
-- Andreas Henriksson <andreas@fatal.se> Fri, 16 Aug 2013 20:25:30 +0200
|
||||
|
||||
gnome-shell-extensions (3.8.2-1) experimental; urgency=low
|
||||
|
||||
* Team upload
|
||||
|
||||
[ Victor Seva ]
|
||||
* Recommends gnome-tweak-tool
|
||||
|
||||
[ Jean Schurger ]
|
||||
* New upstream release 3.7.92 (LP: #1017979, #1059152).
|
||||
* Enabled new extensions.
|
||||
* Dropped 'dock' and 'gajim'.
|
||||
* Use ./configure instead of autoreconf.
|
||||
* Bumped Standards-Version to 3.9.4.
|
||||
* Updated Vcs-Svn.
|
||||
* debian/control.in
|
||||
- Added runtime dependency to 'gvfs' (>= 1.16.0).
|
||||
The 'Places' extension rely on a 'gvfs' linked to 'udisks2'.
|
||||
|
||||
[ Simon McVittie ]
|
||||
* New upstream release 3.8.2.
|
||||
* Install the "classic mode"
|
||||
* Enable windowNavigator extension (this means we have everything except
|
||||
example and xrandr, the same as in the Ubuntu gnome3-team's PPA)
|
||||
|
||||
-- Simon McVittie <smcv@debian.org> Thu, 23 May 2013 09:07:23 +0100
|
||||
|
||||
gnome-shell-extensions (3.4.0-2) unstable; urgency=low
|
||||
|
||||
* Upload to unstable.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Wed, 30 May 2012 13:22:54 +0200
|
||||
|
||||
gnome-shell-extensions (3.4.0-1) experimental; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Remove 01_status-menu_disable_accounts.patch: The alternative-status-menu
|
||||
extension no longer recreates the complete user menu but reuses the one
|
||||
from gnome-shell, so we can't easily get rid of the "Online Accounts" menu
|
||||
entry. We will patch gnome-shell directly instead.
|
||||
* Remove 02-Revert-all-remove-all-GSettings-usage.patch and
|
||||
03-Revert-Remove-all-references-to-localedir-from-metad.patch, no longer
|
||||
required.
|
||||
* Bump Standards-Version to 3.9.3
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Mon, 21 May 2012 00:24:56 +0200
|
||||
|
||||
gnome-shell-extensions (3.2.3-1) unstable; urgency=low
|
||||
|
||||
[ Josselin Mouette ]
|
||||
* gnome-shell-extensions.gsettings-override: enable the alternative
|
||||
status menu by default. Closes: #648112.
|
||||
* Use ${gnome:Version} to generate strict dependencies, it’s very
|
||||
unlikely that extensions remain compatible after a major upgrade.
|
||||
|
||||
[ Michael Biebl ]
|
||||
* Upload to unstable.
|
||||
|
||||
[ Josselin Mouette ]
|
||||
* 01_status-menu_disable_accounts.patch: new patch. Drop the unusable
|
||||
advertisement for Google. It is already available in the control
|
||||
center anyway.
|
||||
|
||||
[ Michael Biebl ]
|
||||
* New upstream release.
|
||||
* Drop patches which have been merged upstream:
|
||||
- debian/patches/upstream/*
|
||||
- debian/patches/fix-*
|
||||
* Refresh 01_status-menu_disable_accounts.patch.
|
||||
* Add 02-Revert-all-remove-all-GSettings-usage.patch: Use GSettings since we
|
||||
install the extensions system-wide.
|
||||
* Use dh-autoreconf to generate the build system.
|
||||
* Add 03-Revert-Remove-all-references-to-localedir-from-metad.patch: Use
|
||||
locales from system-wide location.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Sat, 11 Feb 2012 23:28:53 +0100
|
||||
|
||||
gnome-shell-extensions (3.2.0-1) experimental; urgency=low
|
||||
|
||||
[ Victor Seva ]
|
||||
* Initial release (Closes: #627515)
|
||||
Package based on the work by Bilal Akhtar <bilalakhtar@ubuntu.com>
|
||||
* debian/copyright
|
||||
- Added myself
|
||||
- Fixed syntax-error-in-dep5-copyright syntax error
|
||||
* debian/control.in
|
||||
- Added myself as maintainer.
|
||||
- Fix gnome-shell dependency.
|
||||
- Fix gir1.2-gtop-2.0 dependency for systemMonitor ext.
|
||||
* debian/rules
|
||||
- Added uploaders.mk gnome-version.mk includes.
|
||||
- Removed unused variables.
|
||||
* debian/watch added.
|
||||
* No more gnome-shell-extension-* packages.
|
||||
* debian/patches/upstream
|
||||
- patch_967aee7aad2accfb38d91ab56b6c5e91d86a2722.diff
|
||||
popup menu fix
|
||||
- patch_66242aa76a5d59fb4659551575c1fbb42e50b8fb.diff
|
||||
dock fix.
|
||||
- patch_4c5a36e4c0cbe38f2e26b6b3c8b02e88b4b939f7.diff
|
||||
patch_2bba98d6214cffae2eb5cecb9d7c1f6b6d244052.diff
|
||||
systemMonitor: Properly enable/disable
|
||||
* debian/patches
|
||||
- fix_dock_gnome-shell_version.diff
|
||||
- fix_alternate-tab_661281.diff
|
||||
- fix_alternate-tab_gnome-shell_version.diff
|
||||
* debian/rules
|
||||
- EXTENSIONS_ENABLED, EXTENSIONS_DISABLED variables
|
||||
- disabled xrandr-indicator
|
||||
|
||||
[ Michael Biebl ]
|
||||
* debian/watch: Track .xz tarballs.
|
||||
* debian/control.in:
|
||||
- Set pkg-gnome-maintainers@lists.alioth.debian.org as Maintainer and add
|
||||
Victor Seva <linuxmaniac@torreviejawireless.org> to Uploaders.
|
||||
- Wrap (Build-)Depends.
|
||||
- Add Vcs-Svn and Vcs-Browser field.
|
||||
* debian/rules:
|
||||
- Include gnome-get-source.mk.
|
||||
|
||||
-- Michael Biebl <biebl@debian.org> Sat, 12 Nov 2011 18:32:22 +0100
|
||||
1
debian/compat
vendored
Normal file
1
debian/compat
vendored
Normal file
@@ -0,0 +1 @@
|
||||
11
|
||||
49
debian/control
vendored
Normal file
49
debian/control
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
# This file is autogenerated. DO NOT EDIT!
|
||||
#
|
||||
# Modifications should be made to debian/control.in instead.
|
||||
# This file is regenerated automatically in the clean target.
|
||||
Source: gnome-shell-extensions
|
||||
Section: gnome
|
||||
Priority: optional
|
||||
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
|
||||
Uploaders: Jeremy Bicha <jbicha@debian.org>, Michael Biebl <biebl@debian.org>
|
||||
Build-Depends: debhelper (>= 11.1.3),
|
||||
gnome-pkg-tools,
|
||||
meson (>= 0.44.0),
|
||||
sassc
|
||||
Rules-Requires-Root: no
|
||||
Standards-Version: 4.1.5
|
||||
Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell-extensions
|
||||
Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell-extensions.git
|
||||
Homepage: https://wiki.gnome.org/Projects/GnomeShell/Extensions
|
||||
|
||||
Package: gnome-shell-extensions
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends},
|
||||
gnome-shell (>= 3.28),
|
||||
gnome-shell (<< 3.29),
|
||||
gir1.2-atk-1.0,
|
||||
gir1.2-clutter-1.0,
|
||||
gir1.2-gdkpixbuf-2.0,
|
||||
gir1.2-glib-2.0,
|
||||
gir1.2-gmenu-3.0,
|
||||
gir1.2-gtk-3.0,
|
||||
gir1.2-pango-1.0,
|
||||
gvfs (>= 1.16.0),
|
||||
gnome-session-bin (>= 3.8),
|
||||
gnome-settings-daemon (>= 3.24)
|
||||
Recommends: gnome-tweaks
|
||||
Replaces: gnome-shell-common (<< 3.18)
|
||||
Breaks: gnome-shell-common (<< 3.18)
|
||||
Description: Extensions to extend functionality of GNOME Shell
|
||||
The GNOME Shell redefines user interactions with the GNOME desktop. In
|
||||
particular, it offers new paradigms for launching applications,
|
||||
accessing documents, and organizing open windows in GNOME. Later, it
|
||||
will introduce a new applets eco-system and offer new solutions for
|
||||
other desktop features, such as notifications and contacts management.
|
||||
The GNOME Shell is intended to replace functions handled by the GNOME
|
||||
Panel and by the window manager in previous versions of GNOME. The GNOME
|
||||
Shell has rich visual effects enabled by new graphical technologies.
|
||||
.
|
||||
GNOME Shell is extensible using extensions. This package contains
|
||||
official GNOME Shell extensions.
|
||||
45
debian/control.in
vendored
Normal file
45
debian/control.in
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
Source: gnome-shell-extensions
|
||||
Section: gnome
|
||||
Priority: optional
|
||||
Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
|
||||
Uploaders: @GNOME_TEAM@
|
||||
Build-Depends: debhelper (>= 11.1.3),
|
||||
gnome-pkg-tools,
|
||||
meson (>= 0.44.0),
|
||||
sassc
|
||||
Rules-Requires-Root: no
|
||||
Standards-Version: 4.1.5
|
||||
Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell-extensions
|
||||
Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell-extensions.git
|
||||
Homepage: https://wiki.gnome.org/Projects/GnomeShell/Extensions
|
||||
|
||||
Package: gnome-shell-extensions
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends},
|
||||
gnome-shell (>= 3.28),
|
||||
gnome-shell (<< 3.29),
|
||||
gir1.2-atk-1.0,
|
||||
gir1.2-clutter-1.0,
|
||||
gir1.2-gdkpixbuf-2.0,
|
||||
gir1.2-glib-2.0,
|
||||
gir1.2-gmenu-3.0,
|
||||
gir1.2-gtk-3.0,
|
||||
gir1.2-pango-1.0,
|
||||
gvfs (>= 1.16.0),
|
||||
gnome-session-bin (>= 3.8),
|
||||
gnome-settings-daemon (>= 3.24)
|
||||
Recommends: gnome-tweaks
|
||||
Replaces: gnome-shell-common (<< 3.18)
|
||||
Breaks: gnome-shell-common (<< 3.18)
|
||||
Description: Extensions to extend functionality of GNOME Shell
|
||||
The GNOME Shell redefines user interactions with the GNOME desktop. In
|
||||
particular, it offers new paradigms for launching applications,
|
||||
accessing documents, and organizing open windows in GNOME. Later, it
|
||||
will introduce a new applets eco-system and offer new solutions for
|
||||
other desktop features, such as notifications and contacts management.
|
||||
The GNOME Shell is intended to replace functions handled by the GNOME
|
||||
Panel and by the window manager in previous versions of GNOME. The GNOME
|
||||
Shell has rich visual effects enabled by new graphical technologies.
|
||||
.
|
||||
GNOME Shell is extensible using extensions. This package contains
|
||||
official GNOME Shell extensions.
|
||||
31
debian/copyright
vendored
Normal file
31
debian/copyright
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: gnome-shell-extensions
|
||||
Upstream-Contact: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
|
||||
Source: https://download.gnome.org/sources/gnome-shell-extensions/
|
||||
|
||||
Files: *
|
||||
Copyright: 2011 Giovanni Campagna <gcampagna@src.gnome.org>
|
||||
License: GPL-2+
|
||||
|
||||
Files: debian/*
|
||||
Copyright:
|
||||
2011 Victor Seva <linuxmaniac@torreviejawireless.org>
|
||||
2011 Bilal Akhtar <bilalakhtar@ubuntu.com>
|
||||
License: GPL-2+
|
||||
|
||||
License: GPL-2+
|
||||
This package is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
||||
2
debian/docs
vendored
Normal file
2
debian/docs
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
NEWS
|
||||
README.md
|
||||
5
debian/gbp.conf
vendored
Normal file
5
debian/gbp.conf
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
[DEFAULT]
|
||||
pristine-tar = True
|
||||
debian-branch = debian/unstable
|
||||
upstream-branch = upstream/3.28.x
|
||||
upstream-vcs-tag = %(version)s
|
||||
1
debian/install
vendored
Normal file
1
debian/install
vendored
Normal file
@@ -0,0 +1 @@
|
||||
debian/local/gnome-session-classic usr/bin
|
||||
2
debian/local/gnome-session-classic
vendored
Executable file
2
debian/local/gnome-session-classic
vendored
Executable file
@@ -0,0 +1,2 @@
|
||||
#! /bin/sh
|
||||
env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic "$@"
|
||||
30
debian/patches/gnome-session-classic-wrapper-script.patch
vendored
Normal file
30
debian/patches/gnome-session-classic-wrapper-script.patch
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
From: Michael Biebl <biebl@debian.org>
|
||||
Date: Tue, 30 Jan 2018 09:04:03 +0000
|
||||
Subject: Use a wrapper script to start GNOME classic session
|
||||
|
||||
Xsession currently doesn't allow to pass more then one argument, as it
|
||||
otherwise fails with
|
||||
Xsession: unable to launch "gnome-session --session classic" X session ---
|
||||
"gnome-session --session classic" not found; falling back to default session.
|
||||
|
||||
This is due to [1]. Add a wrapper script to start the GNOME classic session
|
||||
as a workaround. Once [1] is fixed, this should be removed again.
|
||||
|
||||
[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=653327.
|
||||
---
|
||||
data/gnome-classic.desktop.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/data/gnome-classic.desktop.in b/data/gnome-classic.desktop.in
|
||||
index 055ce64..34827ee 100644
|
||||
--- a/data/gnome-classic.desktop.in
|
||||
+++ b/data/gnome-classic.desktop.in
|
||||
@@ -1,7 +1,7 @@
|
||||
[Desktop Entry]
|
||||
Name=GNOME Classic
|
||||
Comment=This session logs you into GNOME Classic
|
||||
-Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic
|
||||
+Exec=gnome-session-classic
|
||||
TryExec=gnome-session
|
||||
Type=Application
|
||||
DesktopNames=GNOME-Classic;GNOME;
|
||||
2
debian/patches/series
vendored
Normal file
2
debian/patches/series
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
#dont-require-nautilus-classic.patch
|
||||
gnome-session-classic-wrapper-script.patch
|
||||
17
debian/rules
vendored
Executable file
17
debian/rules
vendored
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
EXTENSIONS_ENABLED='alternate-tab, apps-menu, places-menu, \
|
||||
launch-new-instance, window-list, \
|
||||
drive-menu, screenshot-window-sizer, \
|
||||
windowsNavigator, workspace-indicator, \
|
||||
auto-move-windows, native-window-placement, user-theme'
|
||||
|
||||
EXTENSIONS_DISABLED='example'
|
||||
|
||||
%:
|
||||
dh $@ --with gnome
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- \
|
||||
-Denable_extensions=$(EXTENSIONS_ENABLED) \
|
||||
-Dclassic_mode=true
|
||||
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
@@ -0,0 +1 @@
|
||||
3.0 (quilt)
|
||||
3
debian/watch
vendored
Normal file
3
debian/watch
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
version=4
|
||||
https://download.gnome.org/sources/@PACKAGE@/([\d\.]+[02468])/ \
|
||||
@PACKAGE@@ANY_VERSION@\.tar\.xz
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh
|
||||
|
||||
srcdir=`dirname $0`
|
||||
srcdir=`(cd $srcdir && pwd)`
|
||||
@@ -7,40 +7,29 @@ builddir=`mktemp -p $srcdir -d _build.XXXXXX` || exit 1
|
||||
installdir=`mktemp -p $srcdir -d _install.XXXXXX` || exit 1
|
||||
|
||||
meson setup --prefix=$installdir -Dextension_set=all $srcdir $builddir
|
||||
meson install -C $builddir
|
||||
ninja -C$builddir install
|
||||
|
||||
rm -rf $srcdir/zip-files
|
||||
mkdir $srcdir/zip-files
|
||||
|
||||
extensiondir=$installdir/share/gnome-shell/extensions
|
||||
schemadir=$installdir/share/glib-2.0/schemas
|
||||
localedir=$installdir/share/locale
|
||||
|
||||
for f in $extensiondir/*; do
|
||||
name=`basename ${f%%@*}`
|
||||
uuid=$name@gnome-shell-extensions.gcampax.github.com
|
||||
schema=$schemadir/org.gnome.shell.extensions.$name.gschema.xml
|
||||
|
||||
olddomain=gnome-shell-extensions
|
||||
newdomain=gnome-shell-extension-$name
|
||||
sed -i "/gettext-domain/ s:$olddomain:$newdomain:" $f/metadata.json
|
||||
cp $srcdir/NEWS $srcdir/COPYING $f
|
||||
|
||||
xgettext --from-code=UTF-8 --output-dir=$builddir --output=$name.pot $f/*.js
|
||||
|
||||
if [ -f $builddir/$name.pot ]; then
|
||||
mkdir $f/po
|
||||
for l in $(<$srcdir/po/LINGUAS); do
|
||||
msgmerge --quiet --output-file=$f/po/$l.po \
|
||||
$srcdir/po/$l.po $builddir/$name.pot
|
||||
done
|
||||
if [ -f $schema ]; then
|
||||
mkdir $f/schemas
|
||||
cp $schema $f/schemas;
|
||||
glib-compile-schemas $f/schemas
|
||||
fi
|
||||
|
||||
cp $srcdir/NEWS $srcdir/COPYING $f
|
||||
sources=(NEWS COPYING $(cd $f; ls *.js))
|
||||
|
||||
[ -f $schema ] || unset schema
|
||||
|
||||
gnome-extensions pack ${sources[@]/#/--extra-source=} \
|
||||
${schema:+--schema=$schema} --out-dir=$srcdir/zip-files $f
|
||||
(cd $f && zip -rmq $srcdir/zip-files/$uuid.shell-extension.zip .)
|
||||
done
|
||||
|
||||
rm -rf $builddir
|
||||
|
||||
62
extensions/alternate-tab/extension.js
Normal file
62
extensions/alternate-tab/extension.js
Normal file
@@ -0,0 +1,62 @@
|
||||
/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const AltTab = imports.ui.altTab;
|
||||
const Main = imports.ui.main;
|
||||
const WindowManager = imports.ui.windowManager;
|
||||
|
||||
let injections = {};
|
||||
|
||||
function init(metadata) {
|
||||
}
|
||||
|
||||
function setKeybinding(name, func) {
|
||||
Main.wm.setCustomKeybindingHandler(name, Shell.ActionMode.NORMAL, func);
|
||||
}
|
||||
|
||||
function enable() {
|
||||
injections['_keyPressHandler'] = AltTab.WindowSwitcherPopup.prototype._keyPressHandler;
|
||||
AltTab.WindowSwitcherPopup.prototype._keyPressHandler = function(keysym, action) {
|
||||
switch(action) {
|
||||
case Meta.KeyBindingAction.SWITCH_APPLICATIONS:
|
||||
action = Meta.KeyBindingAction.SWITCH_WINDOWS;
|
||||
break;
|
||||
case Meta.KeyBindingAction.SWITCH_APPLICATIONS_BACKWARD:
|
||||
action = Meta.KeyBindingAction.SWITCH_WINDOWS_BACKWARD;
|
||||
break;
|
||||
}
|
||||
return injections['_keyPressHandler'].call(this, keysym, action);
|
||||
};
|
||||
|
||||
Main.wm._forcedWindowSwitcher = function(display, screen, window, binding) {
|
||||
/* prevent a corner case where both popups show up at once */
|
||||
if (this._workspaceSwitcherPopup != null)
|
||||
this._workspaceSwitcherPopup.destroy();
|
||||
|
||||
let tabPopup = new AltTab.WindowSwitcherPopup();
|
||||
|
||||
if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
|
||||
tabPopup.destroy();
|
||||
};
|
||||
|
||||
setKeybinding('switch-applications',
|
||||
Main.wm._forcedWindowSwitcher.bind(Main.wm));
|
||||
setKeybinding('switch-applications-backward',
|
||||
Main.wm._forcedWindowSwitcher.bind(Main.wm));
|
||||
}
|
||||
|
||||
function disable() {
|
||||
var prop;
|
||||
|
||||
setKeybinding('switch-applications',
|
||||
Main.wm._startSwitcher.bind(Main.wm));
|
||||
setKeybinding('switch-applications-backward',
|
||||
Main.wm._startSwitcher.bind(Main.wm));
|
||||
|
||||
for (prop in injections)
|
||||
AltTab.WindowSwitcherPopup.prototype[prop] = injections[prop];
|
||||
delete Main.wm._forcedWindowSwitcher;
|
||||
}
|
||||
7
extensions/alternate-tab/meson.build
Normal file
7
extensions/alternate-tab/meson.build
Normal file
@@ -0,0 +1,7 @@
|
||||
extension_data += configure_file(
|
||||
input: metadata_name + '.in',
|
||||
output: metadata_name,
|
||||
configuration: metadata_conf
|
||||
)
|
||||
|
||||
extension_sources += files('prefs.js')
|
||||
11
extensions/alternate-tab/metadata.json.in
Normal file
11
extensions/alternate-tab/metadata.json.in
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"extension-id": "@extension_id@",
|
||||
"uuid": "@uuid@",
|
||||
"settings-schema": "@gschemaname@",
|
||||
"gettext-domain": "@gettext_domain@",
|
||||
"name": "AlternateTab",
|
||||
"description": "Substitute Alt-Tab with a window based switcher that does not group by application.\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.",
|
||||
"original-authors": [ "jw@bargsten.org", "thomas.bouffon@gmail.com" ],
|
||||
"shell-version": [ "@shell_current@" ],
|
||||
"url": "@url@"
|
||||
}
|
||||
81
extensions/alternate-tab/prefs.js
Normal file
81
extensions/alternate-tab/prefs.js
Normal file
@@ -0,0 +1,81 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const GObject = imports.gi.GObject;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
const N_ = e => e;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
const SETTINGS_APP_ICON_MODE = 'app-icon-mode';
|
||||
const SETTINGS_CURRENT_WORKSPACE_ONLY = 'current-workspace-only';
|
||||
|
||||
const MODES = {
|
||||
'thumbnail-only': N_("Thumbnail only"),
|
||||
'app-icon-only': N_("Application icon only"),
|
||||
'both': N_("Thumbnail and application icon"),
|
||||
};
|
||||
|
||||
const AltTabSettingsWidget = GObject.registerClass(
|
||||
class AltTabSettingsWidget extends Gtk.Grid {
|
||||
_init(params) {
|
||||
super._init(params);
|
||||
this.margin = 24;
|
||||
this.row_spacing = 6;
|
||||
this.orientation = Gtk.Orientation.VERTICAL;
|
||||
|
||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell.window-switcher' });
|
||||
|
||||
let presentLabel = '<b>' + _("Present windows as") + '</b>';
|
||||
this.add(new Gtk.Label({ label: presentLabel, use_markup: true,
|
||||
halign: Gtk.Align.START }));
|
||||
|
||||
let align = new Gtk.Alignment({ left_padding: 12 });
|
||||
this.add(align);
|
||||
|
||||
let grid = new Gtk.Grid({ orientation: Gtk.Orientation.VERTICAL,
|
||||
row_spacing: 6,
|
||||
column_spacing: 6 });
|
||||
align.add(grid);
|
||||
|
||||
let radio = null;
|
||||
let currentMode = this._settings.get_string(SETTINGS_APP_ICON_MODE);
|
||||
for (let mode in MODES) {
|
||||
// copy the mode variable because it has function scope, not block scope
|
||||
// so cannot be used in a closure
|
||||
let modeCapture = mode;
|
||||
let name = Gettext.gettext(MODES[mode]);
|
||||
|
||||
radio = new Gtk.RadioButton({ group: radio, label: name, valign: Gtk.Align.START });
|
||||
radio.connect('toggled', widget => {
|
||||
if (widget.active)
|
||||
this._settings.set_string(SETTINGS_APP_ICON_MODE, modeCapture);
|
||||
});
|
||||
grid.add(radio);
|
||||
|
||||
if (mode == currentMode)
|
||||
radio.active = true;
|
||||
}
|
||||
|
||||
let check = new Gtk.CheckButton({ label: _("Show only windows in the current workspace"),
|
||||
margin_top: 6 });
|
||||
this._settings.bind(SETTINGS_CURRENT_WORKSPACE_ONLY, check, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||
this.add(check);
|
||||
}
|
||||
});
|
||||
|
||||
function init() {
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
function buildPrefsWidget() {
|
||||
let widget = new AltTabSettingsWidget();
|
||||
widget.show_all();
|
||||
|
||||
return widget;
|
||||
}
|
||||
1
extensions/alternate-tab/stylesheet.css
Normal file
1
extensions/alternate-tab/stylesheet.css
Normal file
@@ -0,0 +1 @@
|
||||
/* This extensions requires no special styling */
|
||||
@@ -1,18 +1,27 @@
|
||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||
/* exported init enable disable */
|
||||
|
||||
const {
|
||||
Atk, Clutter, Gio, GLib, GMenu, GObject, Gtk, Meta, Shell, St,
|
||||
} = imports.gi;
|
||||
const {EventEmitter} = imports.misc.signals;
|
||||
|
||||
const Atk = imports.gi.Atk;
|
||||
const DND = imports.ui.dnd;
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const GMenu = imports.gi.GMenu;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Main = imports.ui.main;
|
||||
const Meta = imports.gi.Meta;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Signals = imports.signals;
|
||||
const Pango = imports.gi.Pango;
|
||||
|
||||
const _ = ExtensionUtils.gettext;
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
const appSys = Shell.AppSystem.get_default();
|
||||
|
||||
@@ -21,56 +30,65 @@ const HORIZ_FACTOR = 5;
|
||||
const MENU_HEIGHT_OFFSET = 132;
|
||||
const NAVIGATION_REGION_OVERSHOOT = 50;
|
||||
|
||||
Gio._promisify(Gio._LocalFilePrototype, 'query_info_async', 'query_info_finish');
|
||||
Gio._promisify(Gio._LocalFilePrototype, 'set_attributes_async', 'set_attributes_finish');
|
||||
|
||||
class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
class ActivitiesMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
constructor(button) {
|
||||
super();
|
||||
this._button = button;
|
||||
this.actor.add_child(new St.Label({ text: _("Activities Overview") }));
|
||||
}
|
||||
|
||||
activate(event) {
|
||||
this._button.menu.toggle();
|
||||
Main.overview.toggle();
|
||||
super.activate(event);
|
||||
}
|
||||
};
|
||||
|
||||
class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
constructor(button, app) {
|
||||
super();
|
||||
this._app = app;
|
||||
this._button = button;
|
||||
|
||||
this._iconBin = new St.Bin();
|
||||
this.add_child(this._iconBin);
|
||||
this.actor.add_child(this._iconBin);
|
||||
|
||||
let appLabel = new St.Label({
|
||||
text: app.get_name(),
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
});
|
||||
this.add_child(appLabel);
|
||||
this.label_actor = appLabel;
|
||||
let appLabel = new St.Label({ text: app.get_name(), y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
this.actor.add_child(appLabel);
|
||||
this.actor.label_actor = appLabel;
|
||||
|
||||
let textureCache = St.TextureCache.get_default();
|
||||
let iconThemeChangedId = textureCache.connect('icon-theme-changed',
|
||||
this._updateIcon.bind(this));
|
||||
this.connect('destroy', () => {
|
||||
this._updateIcon.bind(this));
|
||||
this.actor.connect('destroy', () => {
|
||||
textureCache.disconnect(iconThemeChangedId);
|
||||
});
|
||||
this._updateIcon();
|
||||
|
||||
this._delegate = this;
|
||||
let draggable = DND.makeDraggable(this);
|
||||
this.actor._delegate = this;
|
||||
let draggable = DND.makeDraggable(this.actor);
|
||||
|
||||
let maybeStartDrag = draggable._maybeStartDrag;
|
||||
draggable._maybeStartDrag = event => {
|
||||
draggable._maybeStartDrag = (event) => {
|
||||
if (this._dragEnabled)
|
||||
return maybeStartDrag.call(draggable, event);
|
||||
return false;
|
||||
};
|
||||
|
||||
draggable.connect('drag-begin', () => {
|
||||
Shell.util_set_hidden_from_pick(Main.legacyTray.actor, true);
|
||||
});
|
||||
draggable.connect('drag-end', () => {
|
||||
Shell.util_set_hidden_from_pick(Main.legacyTray.actor, false);
|
||||
});
|
||||
}
|
||||
|
||||
activate(event) {
|
||||
this._app.open_new_window(-1);
|
||||
this._button.selectCategory(null);
|
||||
this._button.selectCategory(null, null);
|
||||
this._button.menu.toggle();
|
||||
super.activate(event);
|
||||
|
||||
Main.overview.hide();
|
||||
}
|
||||
|
||||
setActive(active, params) {
|
||||
@@ -79,8 +97,8 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
super.setActive(active, params);
|
||||
}
|
||||
|
||||
setDragEnabled(enabled) {
|
||||
this._dragEnabled = enabled;
|
||||
setDragEnabled(enable) {
|
||||
this._dragEnabled = enable;
|
||||
}
|
||||
|
||||
getDragActor() {
|
||||
@@ -92,17 +110,11 @@ class ApplicationMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
}
|
||||
|
||||
_updateIcon() {
|
||||
let icon = this.getDragActor();
|
||||
icon.style_class = 'icon-dropshadow';
|
||||
this._iconBin.set_child(icon);
|
||||
this._iconBin.set_child(this.getDragActor());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
constructor(button, category) {
|
||||
super();
|
||||
this._category = category;
|
||||
@@ -115,23 +127,22 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
if (this._category)
|
||||
name = this._category.get_name();
|
||||
else
|
||||
name = _('Favorites');
|
||||
name = _("Favorites");
|
||||
|
||||
this.add_child(new St.Label({text: name}));
|
||||
this.connect('motion-event', this._onMotionEvent.bind(this));
|
||||
this.connect('notify::active', this._onActiveChanged.bind(this));
|
||||
this.actor.add_child(new St.Label({ text: name }));
|
||||
this.actor.connect('motion-event', this._onMotionEvent.bind(this));
|
||||
}
|
||||
|
||||
activate(event) {
|
||||
this._button.selectCategory(this._category);
|
||||
this._button.selectCategory(this._category, this);
|
||||
this._button.scrollToCatButton(this);
|
||||
super.activate(event);
|
||||
}
|
||||
|
||||
_isNavigatingSubmenu([x, y]) {
|
||||
let [posX, posY] = this.get_transformed_position();
|
||||
let [posX, posY] = this.actor.get_transformed_position();
|
||||
|
||||
if (this._oldX === -1) {
|
||||
if (this._oldX == -1) {
|
||||
this._oldX = x;
|
||||
this._oldY = y;
|
||||
return true;
|
||||
@@ -144,11 +155,11 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
this._oldY = y;
|
||||
|
||||
// If it lies outside the x-coordinates then it is definitely outside.
|
||||
if (posX > x || posX + this.width < x)
|
||||
if (posX > x || posX + this.actor.width < x)
|
||||
return false;
|
||||
|
||||
// If it lies inside the menu item then it is definitely inside.
|
||||
if (posY <= y && posY + this.height >= y)
|
||||
if (posY <= y && posY + this.actor.height >= y)
|
||||
return true;
|
||||
|
||||
// We want the keep-up triangle only if the movement is more
|
||||
@@ -169,42 +180,37 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
// only check for triangle ABC.
|
||||
if (posY > y) {
|
||||
let offset = posY - y;
|
||||
y = posY + this.height + offset;
|
||||
y = posY + this.actor.height + offset;
|
||||
}
|
||||
|
||||
// Ensure that A is (0, 0).
|
||||
x -= posX;
|
||||
y -= posY + this.height;
|
||||
y -= posY + this.actor.height;
|
||||
|
||||
// Check which side of line AB the point P lies on by taking the
|
||||
// cross-product of AB and AP. See:
|
||||
// http://stackoverflow.com/questions/3461453/determine-which-side-of-a-line-a-point-lies
|
||||
if (this.width * y - NAVIGATION_REGION_OVERSHOOT * x <= 0)
|
||||
return true;
|
||||
if (((this.actor.width * y) - (NAVIGATION_REGION_OVERSHOOT * x)) <= 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
_onMotionEvent(actor, event) {
|
||||
if (!this._grab) {
|
||||
if (!Clutter.get_pointer_grab()) {
|
||||
this._oldX = -1;
|
||||
this._oldY = -1;
|
||||
const grab = global.stage.grab(this);
|
||||
if (grab.get_seat_state() !== Clutter.GrabState.NONE)
|
||||
this._grab = grab;
|
||||
else
|
||||
grab.dismiss();
|
||||
Clutter.grab_pointer(this.actor);
|
||||
}
|
||||
this.hover = true;
|
||||
this.actor.hover = true;
|
||||
|
||||
if (this._isNavigatingSubmenu(event.get_coords()))
|
||||
return true;
|
||||
|
||||
this._oldX = -1;
|
||||
this._oldY = -1;
|
||||
this.hover = false;
|
||||
this._grab?.dismiss();
|
||||
delete this._grab;
|
||||
this.actor.hover = false;
|
||||
Clutter.ungrab_pointer();
|
||||
|
||||
let source = event.get_source();
|
||||
if (source instanceof St.Widget)
|
||||
@@ -213,14 +219,14 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
return false;
|
||||
}
|
||||
|
||||
_onActiveChanged() {
|
||||
if (!this.active)
|
||||
return;
|
||||
|
||||
this._button.selectCategory(this._category);
|
||||
this._button.scrollToCatButton(this);
|
||||
setActive(active, params) {
|
||||
if (active) {
|
||||
this._button.selectCategory(this._category, this);
|
||||
this._button.scrollToCatButton(this);
|
||||
}
|
||||
super.setActive(active, params);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class ApplicationsMenu extends PopupMenu.PopupMenu {
|
||||
constructor(sourceActor, arrowAlignment, arrowSide, button) {
|
||||
@@ -232,23 +238,40 @@ class ApplicationsMenu extends PopupMenu.PopupMenu {
|
||||
return false;
|
||||
}
|
||||
|
||||
open(animate) {
|
||||
this._button.hotCorner.setBarrierSize(0);
|
||||
if (this._button.hotCorner.actor) // fallback corner
|
||||
this._button.hotCorner.actor.hide();
|
||||
super.open(animate);
|
||||
}
|
||||
|
||||
close(animate) {
|
||||
let size = Main.layoutManager.panelBox.height;
|
||||
this._button.hotCorner.setBarrierSize(size);
|
||||
if (this._button.hotCorner.actor) // fallback corner
|
||||
this._button.hotCorner.actor.show();
|
||||
super.close(animate);
|
||||
}
|
||||
|
||||
toggle() {
|
||||
if (this.isOpen)
|
||||
this._button.selectCategory(null);
|
||||
if (this.isOpen) {
|
||||
this._button.selectCategory(null, null);
|
||||
} else {
|
||||
if (Main.overview.visible)
|
||||
Main.overview.hide();
|
||||
}
|
||||
super.toggle();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class DesktopTarget extends EventEmitter {
|
||||
class DesktopTarget {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this._desktop = null;
|
||||
this._desktopDestroyedId = 0;
|
||||
|
||||
this._windowAddedId =
|
||||
global.window_group.connect('actor-added',
|
||||
this._onWindowAdded.bind(this));
|
||||
this._onWindowAdded.bind(this));
|
||||
|
||||
global.get_window_actors().forEach(a => {
|
||||
this._onWindowAdded(a.get_parent(), a);
|
||||
@@ -256,14 +279,14 @@ class DesktopTarget extends EventEmitter {
|
||||
}
|
||||
|
||||
get hasDesktop() {
|
||||
return this._desktop !== null;
|
||||
return this._desktop != null;
|
||||
}
|
||||
|
||||
_onWindowAdded(group, actor) {
|
||||
if (!(actor instanceof Meta.WindowActor))
|
||||
return;
|
||||
|
||||
if (actor.meta_window.get_window_type() === Meta.WindowType.DESKTOP)
|
||||
if (actor.meta_window.get_window_type() == Meta.WindowType.DESKTOP)
|
||||
this._setDesktop(actor);
|
||||
}
|
||||
|
||||
@@ -292,32 +315,48 @@ class DesktopTarget extends EventEmitter {
|
||||
return source._app.app_info;
|
||||
}
|
||||
|
||||
async _markTrusted(file) {
|
||||
_touchFile(file) {
|
||||
let queryFlags = Gio.FileQueryInfoFlags.NONE;
|
||||
let ioPriority = GLib.PRIORITY_DEFAULT;
|
||||
|
||||
let info = new Gio.FileInfo();
|
||||
info.set_attribute_uint64(Gio.FILE_ATTRIBUTE_TIME_ACCESS,
|
||||
GLib.get_real_time());
|
||||
file.set_attributes_async (info, queryFlags, ioPriority, null,
|
||||
(o, res) => {
|
||||
try {
|
||||
o.set_attributes_finish(res);
|
||||
} catch(e) {
|
||||
log('Failed to update access time: ' + e.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_markTrusted(file) {
|
||||
let modeAttr = Gio.FILE_ATTRIBUTE_UNIX_MODE;
|
||||
let trustedAttr = 'metadata::trusted';
|
||||
let queryFlags = Gio.FileQueryInfoFlags.NONE;
|
||||
let ioPriority = GLib.PRIORITY_DEFAULT;
|
||||
|
||||
try {
|
||||
let info = await file.query_info_async(modeAttr, queryFlags, ioPriority, null);
|
||||
file.query_info_async(modeAttr, queryFlags, ioPriority, null,
|
||||
(o, res) => {
|
||||
try {
|
||||
let info = o.query_info_finish(res);
|
||||
let mode = info.get_attribute_uint32(modeAttr) | 0o100;
|
||||
|
||||
let mode = info.get_attribute_uint32(modeAttr) | 0o100;
|
||||
info.set_attribute_uint32(modeAttr, mode);
|
||||
info.set_attribute_string(trustedAttr, 'yes');
|
||||
await file.set_attributes_async(info, queryFlags, ioPriority, null);
|
||||
info.set_attribute_uint32(modeAttr, mode);
|
||||
info.set_attribute_string(trustedAttr, 'yes');
|
||||
file.set_attributes_async (info, queryFlags, ioPriority, null,
|
||||
(o, res) => {
|
||||
o.set_attributes_finish(res);
|
||||
|
||||
// Hack: force nautilus to reload file info
|
||||
info = new Gio.FileInfo();
|
||||
info.set_attribute_uint64(
|
||||
Gio.FILE_ATTRIBUTE_TIME_ACCESS, GLib.get_real_time());
|
||||
try {
|
||||
await file.set_attributes_async(info, queryFlags, ioPriority, null);
|
||||
} catch (e) {
|
||||
log(`Failed to update access time: ${e.message}`);
|
||||
}
|
||||
} catch (e) {
|
||||
log(`Failed to mark file as trusted: ${e.message}`);
|
||||
}
|
||||
// Hack: force nautilus to reload file info
|
||||
this._touchFile(file);
|
||||
});
|
||||
} catch(e) {
|
||||
log('Failed to mark file as trusted: ' + e.message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
destroy() {
|
||||
@@ -328,7 +367,7 @@ class DesktopTarget extends EventEmitter {
|
||||
this._setDesktop(null);
|
||||
}
|
||||
|
||||
handleDragOver(source, _actor, _x, _y, _time) {
|
||||
handleDragOver(source, actor, x, y, time) {
|
||||
let appInfo = this._getSourceAppInfo(source);
|
||||
if (!appInfo)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
@@ -336,7 +375,7 @@ class DesktopTarget extends EventEmitter {
|
||||
return DND.DragMotionResult.COPY_DROP;
|
||||
}
|
||||
|
||||
acceptDrop(source, _actor, _x, _y, _time) {
|
||||
acceptDrop(source, actor, x, y, time) {
|
||||
let appInfo = this._getSourceAppInfo(source);
|
||||
if (!appInfo)
|
||||
return false;
|
||||
@@ -352,52 +391,51 @@ class DesktopTarget extends EventEmitter {
|
||||
// copy_async() isn't introspectable :-(
|
||||
src.copy(dst, Gio.FileCopyFlags.OVERWRITE, null, null);
|
||||
this._markTrusted(dst);
|
||||
} catch (e) {
|
||||
log(`Failed to copy to desktop: ${e.message}`);
|
||||
} catch(e) {
|
||||
log('Failed to copy to desktop: ' + e.message);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
Signals.addSignalMethods(DesktopTarget.prototype);
|
||||
|
||||
class ApplicationsButton extends PanelMenu.Button {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super(1.0, null, false);
|
||||
|
||||
this.setMenu(new ApplicationsMenu(this, 1.0, St.Side.TOP, this));
|
||||
this.setMenu(new ApplicationsMenu(this.actor, 1.0, St.Side.TOP, this));
|
||||
Main.panel.menuManager.addMenu(this.menu);
|
||||
|
||||
// At this moment applications menu is not keyboard navigable at
|
||||
// all (so not accessible), so it doesn't make sense to set as
|
||||
// role ATK_ROLE_MENU like other elements of the panel.
|
||||
this.accessible_role = Atk.Role.LABEL;
|
||||
this.actor.accessible_role = Atk.Role.LABEL;
|
||||
|
||||
this._label = new St.Label({
|
||||
text: _('Applications'),
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
});
|
||||
let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
|
||||
|
||||
this.add_actor(this._label);
|
||||
this.name = 'panelApplications';
|
||||
this.label_actor = this._label;
|
||||
this._label = new St.Label({ text: _("Applications"),
|
||||
y_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER });
|
||||
hbox.add_child(this._label);
|
||||
hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
|
||||
|
||||
this.actor.add_actor(hbox);
|
||||
this.actor.name = 'panelApplications';
|
||||
this.actor.label_actor = this._label;
|
||||
|
||||
this.actor.connect('captured-event', this._onCapturedEvent.bind(this));
|
||||
this.actor.connect('destroy', this._onDestroy.bind(this));
|
||||
|
||||
this._showingId = Main.overview.connect('showing', () => {
|
||||
this.add_accessible_state(Atk.StateType.CHECKED);
|
||||
this.actor.add_accessible_state (Atk.StateType.CHECKED);
|
||||
});
|
||||
this._hidingId = Main.overview.connect('hiding', () => {
|
||||
this.remove_accessible_state(Atk.StateType.CHECKED);
|
||||
this.actor.remove_accessible_state (Atk.StateType.CHECKED);
|
||||
});
|
||||
Main.wm.addKeybinding(
|
||||
'apps-menu-toggle-menu',
|
||||
ExtensionUtils.getSettings(),
|
||||
Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
|
||||
Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW,
|
||||
() => this.menu.toggle());
|
||||
Main.layoutManager.connect('startup-complete',
|
||||
this._setKeybinding.bind(this));
|
||||
this._setKeybinding();
|
||||
|
||||
this._desktopTarget = new DesktopTarget();
|
||||
this._desktopTarget.connect('app-dropped', () => {
|
||||
@@ -409,16 +447,16 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
});
|
||||
});
|
||||
|
||||
this._tree = new GMenu.Tree({menu_basename: 'applications.menu'});
|
||||
this._tree = new GMenu.Tree({ menu_basename: 'applications.menu' });
|
||||
this._treeChangedId = this._tree.connect('changed',
|
||||
this._onTreeChanged.bind(this));
|
||||
this._onTreeChanged.bind(this));
|
||||
|
||||
this._applicationsButtons = new Map();
|
||||
this.reloadFlag = false;
|
||||
this._createLayout();
|
||||
this._display();
|
||||
this._installedChangedId = appSys.connect('installed-changed',
|
||||
this._onTreeChanged.bind(this));
|
||||
this._onTreeChanged.bind(this));
|
||||
}
|
||||
|
||||
_onTreeChanged() {
|
||||
@@ -430,34 +468,47 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
}
|
||||
|
||||
get hotCorner() {
|
||||
return Main.layoutManager.hotCorners[Main.layoutManager.primaryIndex];
|
||||
}
|
||||
|
||||
_createVertSeparator() {
|
||||
let separator = new St.DrawingArea({
|
||||
style_class: 'calendar-vertical-separator',
|
||||
pseudo_class: 'highlighted',
|
||||
});
|
||||
let separator = new St.DrawingArea({ style_class: 'calendar-vertical-separator',
|
||||
pseudo_class: 'highlighted' });
|
||||
separator.connect('repaint', this._onVertSepRepaint.bind(this));
|
||||
return separator;
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
super._onDestroy();
|
||||
|
||||
Main.overview.disconnect(this._showingId);
|
||||
Main.overview.disconnect(this._hidingId);
|
||||
appSys.disconnect(this._installedChangedId);
|
||||
this._tree.disconnect(this._treeChangedId);
|
||||
this._tree = null;
|
||||
|
||||
Main.wm.removeKeybinding('apps-menu-toggle-menu');
|
||||
Main.wm.setCustomKeybindingHandler('panel-main-menu',
|
||||
Shell.ActionMode.NORMAL |
|
||||
Shell.ActionMode.OVERVIEW,
|
||||
Main.sessionMode.hasOverview ?
|
||||
Main.overview.toggle.bind(Main.overview) :
|
||||
null);
|
||||
|
||||
this._desktopTarget.destroy();
|
||||
}
|
||||
|
||||
_onCapturedEvent(actor, event) {
|
||||
if (event.type() == Clutter.EventType.BUTTON_PRESS) {
|
||||
if (!Main.overview.shouldToggleByCornerOrButton())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
_onMenuKeyPress(actor, event) {
|
||||
let symbol = event.get_key_symbol();
|
||||
if (symbol === Clutter.KEY_Left || symbol === Clutter.KEY_Right) {
|
||||
let direction = symbol === Clutter.KEY_Left
|
||||
? Gtk.DirectionType.LEFT : Gtk.DirectionType.RIGHT;
|
||||
if (symbol == Clutter.KEY_Left || symbol == Clutter.KEY_Right) {
|
||||
let direction = symbol == Clutter.KEY_Left ? Gtk.DirectionType.LEFT
|
||||
: Gtk.DirectionType.RIGHT;
|
||||
if (this.menu.actor.navigate_focus(global.stage.key_focus, direction, false))
|
||||
return true;
|
||||
}
|
||||
@@ -470,7 +521,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
let [width, height] = area.get_surface_size();
|
||||
let stippleColor = themeNode.get_color('-stipple-color');
|
||||
let stippleWidth = themeNode.get_length('-stipple-width');
|
||||
let x = Math.floor(width / 2) + 0.5;
|
||||
let x = Math.floor(width/2) + 0.5;
|
||||
cr.moveTo(x, 0);
|
||||
cr.lineTo(x, height);
|
||||
Clutter.cairo_set_source_color(cr, stippleColor);
|
||||
@@ -480,14 +531,21 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_onOpenStateChanged(menu, open) {
|
||||
if (open) {
|
||||
if (this.reloadFlag) {
|
||||
this._redisplay();
|
||||
this.reloadFlag = false;
|
||||
}
|
||||
this.mainBox.show();
|
||||
}
|
||||
super._onOpenStateChanged(menu, open);
|
||||
if (open) {
|
||||
if (this.reloadFlag) {
|
||||
this._redisplay();
|
||||
this.reloadFlag = false;
|
||||
}
|
||||
this.mainBox.show();
|
||||
}
|
||||
super._onOpenStateChanged(menu, open);
|
||||
}
|
||||
|
||||
_setKeybinding() {
|
||||
Main.wm.setCustomKeybindingHandler('panel-main-menu',
|
||||
Shell.ActionMode.NORMAL |
|
||||
Shell.ActionMode.OVERVIEW,
|
||||
() => { this.menu.toggle(); });
|
||||
}
|
||||
|
||||
_redisplay() {
|
||||
@@ -499,23 +557,23 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
_loadCategory(categoryId, dir) {
|
||||
let iter = dir.iter();
|
||||
let nextType;
|
||||
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
|
||||
if (nextType === GMenu.TreeItemType.ENTRY) {
|
||||
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
|
||||
if (nextType == GMenu.TreeItemType.ENTRY) {
|
||||
let entry = iter.get_entry();
|
||||
let id;
|
||||
try {
|
||||
id = entry.get_desktop_file_id(); // catch non-UTF8 filenames
|
||||
} catch (e) {
|
||||
} catch(e) {
|
||||
continue;
|
||||
}
|
||||
let app = appSys.lookup_app(id);
|
||||
if (!app)
|
||||
app = new Shell.App({app_info: entry.get_app_info()});
|
||||
app = new Shell.App({ app_info: entry.get_app_info() });
|
||||
if (app.get_app_info().should_show())
|
||||
this.applicationsByCategory[categoryId].push(app);
|
||||
} else if (nextType === GMenu.TreeItemType.SEPARATOR) {
|
||||
} else if (nextType == GMenu.TreeItemType.SEPARATOR) {
|
||||
this.applicationsByCategory[categoryId].push('separator');
|
||||
} else if (nextType === GMenu.TreeItemType.DIRECTORY) {
|
||||
} else if (nextType == GMenu.TreeItemType.DIRECTORY) {
|
||||
let subdir = iter.get_directory();
|
||||
if (!subdir.get_is_nodisplay())
|
||||
this._loadCategory(categoryId, subdir);
|
||||
@@ -528,13 +586,13 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
let appsScrollBoxAlloc = this.applicationsScrollBox.get_allocation_box();
|
||||
let currentScrollValue = appsScrollBoxAdj.get_value();
|
||||
let boxHeight = appsScrollBoxAlloc.y2 - appsScrollBoxAlloc.y1;
|
||||
let buttonAlloc = button.get_allocation_box();
|
||||
let buttonAlloc = button.actor.get_allocation_box();
|
||||
let newScrollValue = currentScrollValue;
|
||||
if (currentScrollValue > buttonAlloc.y1 - 10)
|
||||
newScrollValue = buttonAlloc.y1 - 10;
|
||||
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
|
||||
newScrollValue = buttonAlloc.y2 - boxHeight + 10;
|
||||
if (newScrollValue !== currentScrollValue)
|
||||
if (newScrollValue != currentScrollValue)
|
||||
appsScrollBoxAdj.set_value(newScrollValue);
|
||||
}
|
||||
|
||||
@@ -543,25 +601,24 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
let catsScrollBoxAlloc = this.categoriesScrollBox.get_allocation_box();
|
||||
let currentScrollValue = catsScrollBoxAdj.get_value();
|
||||
let boxHeight = catsScrollBoxAlloc.y2 - catsScrollBoxAlloc.y1;
|
||||
let buttonAlloc = button.get_allocation_box();
|
||||
let buttonAlloc = button.actor.get_allocation_box();
|
||||
let newScrollValue = currentScrollValue;
|
||||
if (currentScrollValue > buttonAlloc.y1 - 10)
|
||||
newScrollValue = buttonAlloc.y1 - 10;
|
||||
if (boxHeight + currentScrollValue < buttonAlloc.y2 + 10)
|
||||
newScrollValue = buttonAlloc.y2 - boxHeight + 10;
|
||||
if (newScrollValue !== currentScrollValue)
|
||||
if (newScrollValue != currentScrollValue)
|
||||
catsScrollBoxAdj.set_value(newScrollValue);
|
||||
}
|
||||
|
||||
_createLayout() {
|
||||
let section = new PopupMenu.PopupMenuSection();
|
||||
this.menu.addMenuItem(section);
|
||||
this.mainBox = new St.BoxLayout({vertical: false});
|
||||
this.leftBox = new St.BoxLayout({vertical: true});
|
||||
this.applicationsScrollBox = new St.ScrollView({
|
||||
style_class: 'apps-menu vfade',
|
||||
x_expand: true,
|
||||
});
|
||||
this.mainBox = new St.BoxLayout({ vertical: false });
|
||||
this.leftBox = new St.BoxLayout({ vertical: true });
|
||||
this.applicationsScrollBox = new St.ScrollView({ x_fill: true, y_fill: false,
|
||||
y_align: St.Align.START,
|
||||
style_class: 'apps-menu vfade' });
|
||||
this.applicationsScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
let vscroll = this.applicationsScrollBox.get_vscroll_bar();
|
||||
vscroll.connect('scroll-start', () => {
|
||||
@@ -570,67 +627,69 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
vscroll.connect('scroll-stop', () => {
|
||||
this.menu.passEvents = false;
|
||||
});
|
||||
this.categoriesScrollBox = new St.ScrollView({
|
||||
style_class: 'vfade',
|
||||
});
|
||||
this.categoriesScrollBox = new St.ScrollView({ x_fill: true, y_fill: false,
|
||||
y_align: St.Align.START,
|
||||
style_class: 'vfade' });
|
||||
this.categoriesScrollBox.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
vscroll = this.categoriesScrollBox.get_vscroll_bar();
|
||||
vscroll.connect('scroll-start', () => (this.menu.passEvents = true));
|
||||
vscroll.connect('scroll-stop', () => (this.menu.passEvents = false));
|
||||
this.leftBox.add_child(this.categoriesScrollBox);
|
||||
vscroll.connect('scroll-start', () => { this.menu.passEvents = true; });
|
||||
vscroll.connect('scroll-stop', () => { this.menu.passEvents = false; });
|
||||
this.leftBox.add(this.categoriesScrollBox, { expand: true,
|
||||
x_fill: true, y_fill: true,
|
||||
y_align: St.Align.START });
|
||||
|
||||
this.applicationsBox = new St.BoxLayout({vertical: true});
|
||||
let activities = new ActivitiesMenuItem(this);
|
||||
this.leftBox.add(activities.actor, { expand: false,
|
||||
x_fill: true, y_fill: false,
|
||||
y_align: St.Align.START });
|
||||
|
||||
this.applicationsBox = new St.BoxLayout({ vertical: true });
|
||||
this.applicationsScrollBox.add_actor(this.applicationsBox);
|
||||
this.categoriesBox = new St.BoxLayout({vertical: true});
|
||||
this.categoriesBox = new St.BoxLayout({ vertical: true });
|
||||
this.categoriesScrollBox.add_actor(this.categoriesBox);
|
||||
|
||||
this.mainBox.add(this.leftBox);
|
||||
this.mainBox.add_child(this._createVertSeparator());
|
||||
this.mainBox.add_child(this.applicationsScrollBox);
|
||||
this.mainBox.add(this._createVertSeparator(), { expand: false, x_fill: false, y_fill: true});
|
||||
this.mainBox.add(this.applicationsScrollBox, { expand: true, x_fill: true, y_fill: true });
|
||||
section.actor.add_actor(this.mainBox);
|
||||
}
|
||||
|
||||
_display() {
|
||||
this._applicationsButtons.clear();
|
||||
this.mainBox.style = 'width: 35em;';
|
||||
this.mainBox.style=('width: 35em;');
|
||||
this.mainBox.hide();
|
||||
|
||||
// Load categories
|
||||
//Load categories
|
||||
this.applicationsByCategory = {};
|
||||
this._tree.load_sync();
|
||||
let root = this._tree.get_root_directory();
|
||||
let categoryMenuItem = new CategoryMenuItem(this, null);
|
||||
this.categoriesBox.add_actor(categoryMenuItem);
|
||||
this.categoriesBox.add_actor(categoryMenuItem.actor);
|
||||
let iter = root.iter();
|
||||
let nextType;
|
||||
while ((nextType = iter.next()) !== GMenu.TreeItemType.INVALID) {
|
||||
if (nextType !== GMenu.TreeItemType.DIRECTORY)
|
||||
continue;
|
||||
|
||||
let dir = iter.get_directory();
|
||||
if (dir.get_is_nodisplay())
|
||||
continue;
|
||||
|
||||
let categoryId = dir.get_menu_id();
|
||||
this.applicationsByCategory[categoryId] = [];
|
||||
this._loadCategory(categoryId, dir);
|
||||
if (this.applicationsByCategory[categoryId].length > 0) {
|
||||
categoryMenuItem = new CategoryMenuItem(this, dir);
|
||||
this.categoriesBox.add_actor(categoryMenuItem);
|
||||
while ((nextType = iter.next()) != GMenu.TreeItemType.INVALID) {
|
||||
if (nextType == GMenu.TreeItemType.DIRECTORY) {
|
||||
let dir = iter.get_directory();
|
||||
if (!dir.get_is_nodisplay()) {
|
||||
let categoryId = dir.get_menu_id();
|
||||
this.applicationsByCategory[categoryId] = [];
|
||||
this._loadCategory(categoryId, dir);
|
||||
if (this.applicationsByCategory[categoryId].length > 0) {
|
||||
let categoryMenuItem = new CategoryMenuItem(this, dir);
|
||||
this.categoriesBox.add_actor(categoryMenuItem.actor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Load applications
|
||||
//Load applications
|
||||
this._displayButtons(this._listApplications(null));
|
||||
|
||||
let themeContext = St.ThemeContext.get_for_stage(global.stage);
|
||||
let scaleFactor = themeContext.scale_factor;
|
||||
let categoriesHeight = this.categoriesBox.height / scaleFactor;
|
||||
let height = Math.round(categoriesHeight) + MENU_HEIGHT_OFFSET;
|
||||
this.mainBox.style += `height: ${height}px`;
|
||||
let height = this.categoriesBox.height + MENU_HEIGHT_OFFSET + 'px';
|
||||
this.mainBox.style+=('height: ' + height);
|
||||
}
|
||||
|
||||
selectCategory(dir) {
|
||||
selectCategory(dir, categoryMenuItem) {
|
||||
this.applicationsBox.get_children().forEach(c => {
|
||||
if (c._delegate instanceof PopupMenu.PopupSeparatorMenuItem)
|
||||
c._delegate.destroy();
|
||||
@@ -645,54 +704,64 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_displayButtons(apps) {
|
||||
for (let i = 0; i < apps.length; i++) {
|
||||
let app = apps[i];
|
||||
let item;
|
||||
if (app instanceof Shell.App)
|
||||
item = this._applicationsButtons.get(app);
|
||||
else
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
if (!item) {
|
||||
item = new ApplicationMenuItem(this, app);
|
||||
item.setDragEnabled(this._desktopTarget.hasDesktop);
|
||||
this._applicationsButtons.set(app, item);
|
||||
if (apps) {
|
||||
for (let i = 0; i < apps.length; i++) {
|
||||
let app = apps[i];
|
||||
let item;
|
||||
if (app instanceof Shell.App)
|
||||
item = this._applicationsButtons.get(app);
|
||||
else
|
||||
item = new PopupMenu.PopupSeparatorMenuItem();
|
||||
if (!item) {
|
||||
item = new ApplicationMenuItem(this, app);
|
||||
item.setDragEnabled(this._desktopTarget.hasDesktop);
|
||||
this._applicationsButtons.set(app, item);
|
||||
}
|
||||
if (!item.actor.get_parent())
|
||||
this.applicationsBox.add_actor(item.actor);
|
||||
}
|
||||
if (!item.get_parent())
|
||||
this.applicationsBox.add_actor(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_listApplications(categoryMenuId) {
|
||||
_listApplications(category_menu_id) {
|
||||
let applist;
|
||||
|
||||
if (categoryMenuId) {
|
||||
applist = this.applicationsByCategory[categoryMenuId];
|
||||
if (category_menu_id) {
|
||||
applist = this.applicationsByCategory[category_menu_id];
|
||||
} else {
|
||||
applist = global.settings.get_strv('favorite-apps')
|
||||
.map(id => appSys.lookup_app(id))
|
||||
.filter(app => app);
|
||||
applist = new Array();
|
||||
let favorites = global.settings.get_strv('favorite-apps');
|
||||
for (let i = 0; i < favorites.length; i++) {
|
||||
let app = appSys.lookup_app(favorites[i]);
|
||||
if (app)
|
||||
applist.push(app);
|
||||
}
|
||||
}
|
||||
|
||||
return applist;
|
||||
}
|
||||
}
|
||||
|
||||
destroy() {
|
||||
super.destroy();
|
||||
}
|
||||
};
|
||||
|
||||
let appsMenuButton;
|
||||
let activitiesButton;
|
||||
|
||||
/** */
|
||||
function enable() {
|
||||
activitiesButton = Main.panel.statusArea['activities'];
|
||||
activitiesButton.container.hide();
|
||||
appsMenuButton = new ApplicationsButton();
|
||||
let index = Main.sessionMode.panel.left.indexOf('activities') + 1;
|
||||
Main.panel.addToStatusArea('apps-menu', appsMenuButton, index, 'left');
|
||||
Main.panel.addToStatusArea('apps-menu', appsMenuButton, 1, 'left');
|
||||
}
|
||||
|
||||
/** */
|
||||
function disable() {
|
||||
Main.panel.menuManager.removeMenu(appsMenuButton.menu);
|
||||
appsMenuButton.destroy();
|
||||
activitiesButton.container.show();
|
||||
}
|
||||
|
||||
/** */
|
||||
function init() {
|
||||
ExtensionUtils.initTranslations();
|
||||
function init(metadata) {
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
@@ -3,5 +3,3 @@ extension_data += configure_file(
|
||||
output: metadata_name,
|
||||
configuration: metadata_conf
|
||||
)
|
||||
extension_data += files('stylesheet.css')
|
||||
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
"extension-id": "@extension_id@",
|
||||
"uuid": "@uuid@",
|
||||
"settings-schema": "@gschemaname@",
|
||||
"gettext-domain": "@gettext_domain@",
|
||||
"name": "Applications Menu",
|
||||
"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.",
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<schemalist gettext-domain="gnome-shell-extensions">
|
||||
<schema id="org.gnome.shell.extensions.apps-menu"
|
||||
path="/org/gnome/shell/extensions/apps-menu/">
|
||||
<key name="apps-menu-toggle-menu" type="as">
|
||||
<default>["<Alt>F1"]</default>
|
||||
<summary>Keybinding to open the applications menu</summary>
|
||||
<description>
|
||||
Keybinding to open the applications menu.
|
||||
</description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
@@ -1,22 +1,24 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// Start apps on custom workspaces
|
||||
/* exported init enable disable */
|
||||
|
||||
const {Shell} = imports.gi;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Main = imports.ui.main;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
class WindowMover {
|
||||
constructor() {
|
||||
this._settings = ExtensionUtils.getSettings();
|
||||
this._settings = Convenience.getSettings();
|
||||
this._appSystem = Shell.AppSystem.get_default();
|
||||
this._appConfigs = new Map();
|
||||
this._appData = new Map();
|
||||
|
||||
this._appsChangedId =
|
||||
this._appSystem.connect('installed-changed',
|
||||
this._updateAppData.bind(this));
|
||||
this._updateAppData.bind(this));
|
||||
|
||||
this._settings.connect('changed', this._updateAppConfigs.bind(this));
|
||||
this._updateAppConfigs();
|
||||
@@ -35,23 +37,24 @@ class WindowMover {
|
||||
|
||||
_updateAppData() {
|
||||
let ids = [...this._appConfigs.keys()];
|
||||
let removedApps = [...this._appData.keys()]
|
||||
.filter(a => !ids.includes(a.id));
|
||||
let removedApps = [...this._appData.keys()].filter(
|
||||
a => !ids.includes(a.id)
|
||||
);
|
||||
removedApps.forEach(app => {
|
||||
app.disconnect(this._appData.get(app).windowsChangedId);
|
||||
this._appData.delete(app);
|
||||
});
|
||||
|
||||
let addedApps = ids
|
||||
.map(id => this._appSystem.lookup_app(id))
|
||||
.filter(app => app && !this._appData.has(app));
|
||||
let addedApps = ids.map(id => this._appSystem.lookup_app(id)).filter(
|
||||
app => app != null && !this._appData.has(app)
|
||||
);
|
||||
addedApps.forEach(app => {
|
||||
let data = {
|
||||
windowsChangedId: app.connect('windows-changed',
|
||||
this._appWindowsChanged.bind(this)),
|
||||
this._appWindowsChanged.bind(this)),
|
||||
moveWindowsId: 0,
|
||||
windows: app.get_windows(),
|
||||
};
|
||||
windows: app.get_windows()
|
||||
}
|
||||
this._appData.set(app, data);
|
||||
});
|
||||
}
|
||||
@@ -72,14 +75,13 @@ class WindowMover {
|
||||
}
|
||||
|
||||
_moveWindow(window, workspaceNum) {
|
||||
if (window.skip_taskbar || window.is_on_all_workspaces())
|
||||
if (window.skip_taskbar)
|
||||
return;
|
||||
|
||||
// ensure we have the required number of workspaces
|
||||
let workspaceManager = global.workspace_manager;
|
||||
for (let i = workspaceManager.n_workspaces; i <= workspaceNum; i++) {
|
||||
for (let i = global.screen.n_workspaces; i <= workspaceNum; i++) {
|
||||
window.change_workspace_by_index(i - 1, false);
|
||||
workspaceManager.append_new_workspace(false, 0);
|
||||
global.screen.append_new_workspace(false, 0);
|
||||
}
|
||||
|
||||
window.change_workspace_by_index(workspaceNum, false);
|
||||
@@ -93,9 +95,9 @@ class WindowMover {
|
||||
// the window still exists and is just moved to a different workspace
|
||||
// or something; assume it'll be added back immediately, so keep it
|
||||
// to avoid moving it again
|
||||
windows.push(...data.windows.filter(w => {
|
||||
return !windows.includes(w) && w.get_compositor_private() !== null;
|
||||
}));
|
||||
windows.push(...data.windows.filter(
|
||||
w => !windows.includes(w) && w.get_compositor_private() != null
|
||||
));
|
||||
|
||||
let workspaceNum = this._appConfigs.get(app.id);
|
||||
windows.filter(w => !data.windows.includes(w)).forEach(window => {
|
||||
@@ -103,40 +105,33 @@ class WindowMover {
|
||||
});
|
||||
data.windows = windows;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let prevCheckWorkspaces;
|
||||
let winMover;
|
||||
|
||||
/** */
|
||||
function init() {
|
||||
ExtensionUtils.initTranslations();
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {bool} - false (used as MetaLater handler)
|
||||
*/
|
||||
function myCheckWorkspaces() {
|
||||
let keepAliveWorkspaces = [];
|
||||
let foundNonEmpty = false;
|
||||
for (let i = this._workspaces.length - 1; i >= 0; i--) {
|
||||
if (!foundNonEmpty) {
|
||||
foundNonEmpty = this._workspaces[i].list_windows().some(
|
||||
w => !w.is_on_all_workspaces());
|
||||
} else if (!this._workspaces[i]._keepAliveId) {
|
||||
if (!foundNonEmpty)
|
||||
foundNonEmpty = this._workspaces[i].list_windows().length > 0;
|
||||
else if (!this._workspaces[i]._keepAliveId)
|
||||
keepAliveWorkspaces.push(this._workspaces[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// make sure the original method only removes empty workspaces at the end
|
||||
keepAliveWorkspaces.forEach(ws => (ws._keepAliveId = 1));
|
||||
keepAliveWorkspaces.forEach(ws => { ws._keepAliveId = 1; });
|
||||
prevCheckWorkspaces.call(this);
|
||||
keepAliveWorkspaces.forEach(ws => delete ws._keepAliveId);
|
||||
keepAliveWorkspaces.forEach(ws => { delete ws._keepAliveId; });
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/** */
|
||||
function enable() {
|
||||
prevCheckWorkspaces = Main.wm._workspaceTracker._checkWorkspaces;
|
||||
Main.wm._workspaceTracker._checkWorkspaces = myCheckWorkspaces;
|
||||
@@ -144,7 +139,6 @@ function enable() {
|
||||
winMover = new WindowMover();
|
||||
}
|
||||
|
||||
/** */
|
||||
function disable() {
|
||||
Main.wm._workspaceTracker._checkWorkspaces = prevCheckWorkspaces;
|
||||
winMover.destroy();
|
||||
|
||||
@@ -1,351 +1,260 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// Start apps on custom workspaces
|
||||
/* exported init buildPrefsWidget */
|
||||
|
||||
const {Adw, Gio, GLib, GObject, Gtk} = imports.gi;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GObject = imports.gi.GObject;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
const N_ = e => e;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
|
||||
const _ = ExtensionUtils.gettext;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
const SETTINGS_KEY = 'application-list';
|
||||
|
||||
const WORKSPACE_MAX = 36; // compiled in limit of mutter
|
||||
|
||||
class NewItem extends GObject.Object {}
|
||||
GObject.registerClass(NewItem);
|
||||
const Columns = {
|
||||
APPINFO: 0,
|
||||
DISPLAY_NAME: 1,
|
||||
ICON: 2,
|
||||
WORKSPACE: 3,
|
||||
ADJUSTMENT: 4
|
||||
};
|
||||
|
||||
class NewItemModel extends GObject.Object {
|
||||
static [GObject.interfaces] = [Gio.ListModel];
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
const Widget = GObject.registerClass({
|
||||
GTypeName: 'AutoMoveWindowsPrefsWidget',
|
||||
}, class Widget extends Gtk.Grid {
|
||||
_init(params) {
|
||||
super._init(params);
|
||||
this.set_orientation(Gtk.Orientation.VERTICAL);
|
||||
|
||||
#item = new NewItem();
|
||||
this._settings = Convenience.getSettings();
|
||||
this._settings.connect('changed', this._refresh.bind(this));
|
||||
this._changedPermitted = false;
|
||||
|
||||
vfunc_get_item_type() {
|
||||
return NewItem;
|
||||
}
|
||||
this._store = new Gtk.ListStore();
|
||||
this._store.set_column_types([Gio.AppInfo, GObject.TYPE_STRING, Gio.Icon, GObject.TYPE_INT,
|
||||
Gtk.Adjustment]);
|
||||
|
||||
vfunc_get_n_items() {
|
||||
return 1;
|
||||
}
|
||||
let scrolled = new Gtk.ScrolledWindow({ shadow_type: Gtk.ShadowType.IN});
|
||||
scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
|
||||
this.add(scrolled);
|
||||
|
||||
vfunc_get_item(_pos) {
|
||||
return this.#item;
|
||||
}
|
||||
}
|
||||
|
||||
class Rule extends GObject.Object {
|
||||
static [GObject.properties] = {
|
||||
'app-info': GObject.ParamSpec.object(
|
||||
'app-info', 'app-info', 'app-info',
|
||||
GObject.ParamFlags.READWRITE,
|
||||
Gio.DesktopAppInfo),
|
||||
'workspace': GObject.ParamSpec.uint(
|
||||
'workspace', 'workspace', 'workspace',
|
||||
GObject.ParamFlags.READWRITE,
|
||||
1, WORKSPACE_MAX, 1),
|
||||
};
|
||||
this._treeView = new Gtk.TreeView({ model: this._store,
|
||||
hexpand: true, vexpand: true });
|
||||
this._treeView.get_selection().set_mode(Gtk.SelectionMode.SINGLE);
|
||||
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
}
|
||||
let appColumn = new Gtk.TreeViewColumn({ expand: true, sort_column_id: Columns.DISPLAY_NAME,
|
||||
title: _("Application") });
|
||||
let iconRenderer = new Gtk.CellRendererPixbuf;
|
||||
appColumn.pack_start(iconRenderer, false);
|
||||
appColumn.add_attribute(iconRenderer, "gicon", Columns.ICON);
|
||||
let nameRenderer = new Gtk.CellRendererText;
|
||||
appColumn.pack_start(nameRenderer, true);
|
||||
appColumn.add_attribute(nameRenderer, "text", Columns.DISPLAY_NAME);
|
||||
this._treeView.append_column(appColumn);
|
||||
|
||||
class RulesList extends GObject.Object {
|
||||
static [GObject.interfaces] = [Gio.ListModel];
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
let workspaceColumn = new Gtk.TreeViewColumn({ title: _("Workspace"),
|
||||
sort_column_id: Columns.WORKSPACE });
|
||||
let workspaceRenderer = new Gtk.CellRendererSpin({ editable: true });
|
||||
workspaceRenderer.connect('edited', this._workspaceEdited.bind(this));
|
||||
workspaceColumn.pack_start(workspaceRenderer, true);
|
||||
workspaceColumn.add_attribute(workspaceRenderer, "adjustment", Columns.ADJUSTMENT);
|
||||
workspaceColumn.add_attribute(workspaceRenderer, "text", Columns.WORKSPACE);
|
||||
this._treeView.append_column(workspaceColumn);
|
||||
|
||||
#settings = ExtensionUtils.getSettings();
|
||||
#rules = [];
|
||||
#changedId;
|
||||
scrolled.add(this._treeView);
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
let toolbar = new Gtk.Toolbar({ icon_size: Gtk.IconSize.SMALL_TOOLBAR });
|
||||
toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR);
|
||||
this.add(toolbar);
|
||||
|
||||
this.#changedId =
|
||||
this.#settings.connect(`changed::${SETTINGS_KEY}`,
|
||||
() => this.#sync());
|
||||
this.#sync();
|
||||
}
|
||||
let newButton = new Gtk.ToolButton({ icon_name: 'bookmark-new-symbolic',
|
||||
label: _("Add Rule"),
|
||||
is_important: true });
|
||||
newButton.connect('clicked', this._createNew.bind(this));
|
||||
toolbar.add(newButton);
|
||||
|
||||
append(appInfo) {
|
||||
const pos = this.#rules.length;
|
||||
let delButton = new Gtk.ToolButton({ icon_name: 'edit-delete-symbolic' });
|
||||
delButton.connect('clicked', this._deleteSelected.bind(this));
|
||||
toolbar.add(delButton);
|
||||
|
||||
this.#rules.push(new Rule({appInfo}));
|
||||
this.#saveRules();
|
||||
|
||||
this.items_changed(pos, 0, 1);
|
||||
}
|
||||
|
||||
remove(id) {
|
||||
const pos = this.#rules.findIndex(r => r.appInfo.get_id() === id);
|
||||
if (pos < 0)
|
||||
return;
|
||||
|
||||
this.#rules.splice(pos, 1);
|
||||
this.#saveRules();
|
||||
|
||||
this.items_changed(pos, 1, 0);
|
||||
}
|
||||
|
||||
changeWorkspace(id, workspace) {
|
||||
const pos = this.#rules.findIndex(r => r.appInfo.get_id() === id);
|
||||
if (pos < 0)
|
||||
return;
|
||||
|
||||
this.#rules[pos].set({workspace});
|
||||
this.#saveRules();
|
||||
}
|
||||
|
||||
#saveRules() {
|
||||
this.#settings.block_signal_handler(this.#changedId);
|
||||
this.#settings.set_strv(SETTINGS_KEY,
|
||||
this.#rules.map(r => `${r.app_info.get_id()}:${r.workspace}`));
|
||||
this.#settings.unblock_signal_handler(this.#changedId);
|
||||
}
|
||||
|
||||
#sync() {
|
||||
const removed = this.#rules.length;
|
||||
|
||||
this.#rules = [];
|
||||
for (const stringRule of this.#settings.get_strv(SETTINGS_KEY)) {
|
||||
const [id, workspace] = stringRule.split(':');
|
||||
const appInfo = Gio.DesktopAppInfo.new(id);
|
||||
if (appInfo)
|
||||
this.#rules.push(new Rule({appInfo, workspace}));
|
||||
else
|
||||
log(`Invalid ID ${id}`);
|
||||
}
|
||||
this.items_changed(0, removed, this.#rules.length);
|
||||
}
|
||||
|
||||
vfunc_get_item_type() {
|
||||
return Rule;
|
||||
}
|
||||
|
||||
vfunc_get_n_items() {
|
||||
return this.#rules.length;
|
||||
}
|
||||
|
||||
vfunc_get_item(pos) {
|
||||
return this.#rules[pos] ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
class AutoMoveSettingsWidget extends Adw.PreferencesGroup {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
|
||||
this.install_action('rules.add', null, self => self._addNewRule());
|
||||
this.install_action('rules.remove', 's',
|
||||
(self, name, param) => self._rules.remove(param.unpack()));
|
||||
this.install_action('rules.change-workspace', '(si)',
|
||||
(self, name, param) => self._rules.changeWorkspace(...param.deepUnpack()));
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
title: _('Workspace Rules'),
|
||||
let selection = this._treeView.get_selection();
|
||||
selection.connect('changed', () => {
|
||||
delButton.sensitive = selection.count_selected_rows() > 0;
|
||||
});
|
||||
delButton.sensitive = selection.count_selected_rows() > 0;
|
||||
|
||||
this._rules = new RulesList();
|
||||
|
||||
const store = new Gio.ListStore({item_type: Gio.ListModel});
|
||||
const listModel = new Gtk.FlattenListModel({model: store});
|
||||
store.append(this._rules);
|
||||
store.append(new NewItemModel());
|
||||
|
||||
this._list = new Gtk.ListBox({
|
||||
selection_mode: Gtk.SelectionMode.NONE,
|
||||
css_classes: ['boxed-list'],
|
||||
});
|
||||
this.add(this._list);
|
||||
|
||||
this._list.bind_model(listModel, item => {
|
||||
return item instanceof NewItem
|
||||
? new NewRuleRow()
|
||||
: new RuleRow(item);
|
||||
});
|
||||
this._changedPermitted = true;
|
||||
this._refresh();
|
||||
}
|
||||
|
||||
_addNewRule() {
|
||||
const dialog = new NewRuleDialog(this.get_root());
|
||||
dialog.connect('response', (dlg, id) => {
|
||||
const appInfo = id === Gtk.ResponseType.OK
|
||||
? dialog.get_widget().get_app_info() : null;
|
||||
if (appInfo)
|
||||
this._rules.append(appInfo);
|
||||
_createNew() {
|
||||
let dialog = new Gtk.Dialog({ title: _("Create new matching rule"),
|
||||
transient_for: this.get_toplevel(),
|
||||
use_header_bar: true,
|
||||
modal: true });
|
||||
dialog.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL);
|
||||
let addButton = dialog.add_button(_("Add"), Gtk.ResponseType.OK);
|
||||
dialog.set_default_response(Gtk.ResponseType.OK);
|
||||
|
||||
let grid = new Gtk.Grid({ column_spacing: 10,
|
||||
row_spacing: 15,
|
||||
margin: 10 });
|
||||
dialog._appChooser = new Gtk.AppChooserWidget({ show_all: true });
|
||||
dialog._appChooser.connect('application-selected', (w, appInfo) => {
|
||||
addButton.sensitive = appInfo && this._checkId(appInfo.get_id());
|
||||
});
|
||||
let appInfo = dialog._appChooser.get_app_info();
|
||||
addButton.sensitive = appInfo && this._checkId(appInfo.get_id());
|
||||
|
||||
grid.attach(dialog._appChooser, 0, 0, 2, 1);
|
||||
grid.attach(new Gtk.Label({ label: _("Workspace"),
|
||||
halign: Gtk.Align.END }), 0, 1, 1, 1);
|
||||
let adjustment = new Gtk.Adjustment({ lower: 1,
|
||||
upper: WORKSPACE_MAX,
|
||||
step_increment: 1
|
||||
});
|
||||
dialog._spin = new Gtk.SpinButton({ adjustment: adjustment,
|
||||
snap_to_ticks: true });
|
||||
dialog._spin.set_value(1);
|
||||
grid.attach(dialog._spin, 1, 1, 1, 1);
|
||||
dialog.get_content_area().add(grid);
|
||||
|
||||
dialog.connect('response', (dialog, id) => {
|
||||
if (id != Gtk.ResponseType.OK) {
|
||||
dialog.destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
let appInfo = dialog._appChooser.get_app_info();
|
||||
if (!appInfo)
|
||||
return;
|
||||
let index = Math.floor(dialog._spin.value);
|
||||
if (isNaN(index) || index < 0)
|
||||
index = 1;
|
||||
|
||||
this._changedPermitted = false;
|
||||
this._appendItem(appInfo.get_id(), index);
|
||||
this._changedPermitted = true;
|
||||
|
||||
let iter = this._store.append();
|
||||
let adj = new Gtk.Adjustment({ lower: 1,
|
||||
upper: WORKSPACE_MAX,
|
||||
step_increment: 1,
|
||||
value: index });
|
||||
this._store.set(iter,
|
||||
[Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT],
|
||||
[appInfo, appInfo.get_icon(), appInfo.get_display_name(), index, adj]);
|
||||
|
||||
dialog.destroy();
|
||||
});
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
class WorkspaceSelector extends Gtk.Widget {
|
||||
static [GObject.properties] = {
|
||||
'number': GObject.ParamSpec.uint(
|
||||
'number', 'number', 'number',
|
||||
GObject.ParamFlags.READWRITE,
|
||||
1, WORKSPACE_MAX, 1),
|
||||
};
|
||||
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
|
||||
this.set_layout_manager_type(Gtk.BoxLayout);
|
||||
dialog.show_all();
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
_deleteSelected() {
|
||||
let [any, model, iter] = this._treeView.get_selection().get_selected();
|
||||
|
||||
this.layout_manager.spacing = 6;
|
||||
if (any) {
|
||||
let appInfo = this._store.get_value(iter, Columns.APPINFO);
|
||||
|
||||
const label = new Gtk.Label({
|
||||
xalign: 1,
|
||||
margin_end: 6,
|
||||
});
|
||||
this.bind_property('number',
|
||||
label, 'label',
|
||||
GObject.BindingFlags.SYNC_CREATE);
|
||||
label.set_parent(this);
|
||||
|
||||
const buttonProps = {
|
||||
css_classes: ['circular'],
|
||||
valign: Gtk.Align.CENTER,
|
||||
};
|
||||
|
||||
this._decButton = new Gtk.Button({
|
||||
icon_name: 'list-remove-symbolic',
|
||||
...buttonProps,
|
||||
});
|
||||
this._decButton.set_parent(this);
|
||||
this._decButton.connect('clicked', () => this.number--);
|
||||
|
||||
this._incButton = new Gtk.Button({
|
||||
icon_name: 'list-add-symbolic',
|
||||
...buttonProps,
|
||||
});
|
||||
this._incButton.set_parent(this);
|
||||
this._incButton.connect('clicked', () => this.number++);
|
||||
|
||||
this.connect('notify::number', () => this._syncButtons());
|
||||
this._syncButtons();
|
||||
this._changedPermitted = false;
|
||||
this._removeItem(appInfo.get_id());
|
||||
this._changedPermitted = true;
|
||||
this._store.remove(iter);
|
||||
}
|
||||
}
|
||||
|
||||
_syncButtons() {
|
||||
this._decButton.sensitive = this.number > 1;
|
||||
this._incButton.sensitive = this.number < WORKSPACE_MAX;
|
||||
}
|
||||
}
|
||||
_workspaceEdited(renderer, pathString, text) {
|
||||
let index = parseInt(text);
|
||||
if (isNaN(index) || index < 0)
|
||||
index = 1;
|
||||
let path = Gtk.TreePath.new_from_string(pathString);
|
||||
let [model, iter] = this._store.get_iter(path);
|
||||
let appInfo = this._store.get_value(iter, Columns.APPINFO);
|
||||
|
||||
class RuleRow extends Adw.ActionRow {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
this._changedPermitted = false;
|
||||
this._changeItem(appInfo.get_id(), index);
|
||||
this._store.set_value(iter, Columns.WORKSPACE, index);
|
||||
this._changedPermitted = true;
|
||||
}
|
||||
|
||||
constructor(rule) {
|
||||
const {appInfo} = rule;
|
||||
const id = appInfo.get_id();
|
||||
_refresh() {
|
||||
if (!this._changedPermitted)
|
||||
// Ignore this notification, model is being modified outside
|
||||
return;
|
||||
|
||||
super({
|
||||
activatable: false,
|
||||
title: rule.appInfo.get_display_name(),
|
||||
});
|
||||
this._store.clear();
|
||||
|
||||
const icon = new Gtk.Image({
|
||||
css_classes: ['icon-dropshadow'],
|
||||
gicon: appInfo.get_icon(),
|
||||
pixel_size: 32,
|
||||
});
|
||||
this.add_prefix(icon);
|
||||
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||
let validItems = [ ];
|
||||
for (let i = 0; i < currentItems.length; i++) {
|
||||
let [id, index] = currentItems[i].split(':');
|
||||
let appInfo = Gio.DesktopAppInfo.new(id);
|
||||
if (!appInfo)
|
||||
continue;
|
||||
validItems.push(currentItems[i]);
|
||||
|
||||
const wsButton = new WorkspaceSelector();
|
||||
rule.bind_property('workspace',
|
||||
wsButton, 'number',
|
||||
GObject.BindingFlags.SYNC_CREATE);
|
||||
this.add_suffix(wsButton);
|
||||
let iter = this._store.append();
|
||||
let adj = new Gtk.Adjustment({ lower: 1,
|
||||
upper: WORKSPACE_MAX,
|
||||
step_increment: 1,
|
||||
value: index });
|
||||
this._store.set(iter,
|
||||
[Columns.APPINFO, Columns.ICON, Columns.DISPLAY_NAME, Columns.WORKSPACE, Columns.ADJUSTMENT],
|
||||
[appInfo, appInfo.get_icon(), appInfo.get_display_name(), parseInt(index), adj]);
|
||||
}
|
||||
|
||||
wsButton.connect('notify::number', () => {
|
||||
this.activate_action('rules.change-workspace',
|
||||
new GLib.Variant('(si)', [id, wsButton.number]));
|
||||
});
|
||||
|
||||
const button = new Gtk.Button({
|
||||
action_name: 'rules.remove',
|
||||
action_target: new GLib.Variant('s', id),
|
||||
icon_name: 'edit-delete-symbolic',
|
||||
has_frame: false,
|
||||
valign: Gtk.Align.CENTER,
|
||||
});
|
||||
this.add_suffix(button);
|
||||
}
|
||||
}
|
||||
|
||||
class NewRuleRow extends Gtk.ListBoxRow {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
if (validItems.length != currentItems.length) // some items were filtered out
|
||||
this._settings.set_strv(SETTINGS_KEY, validItems);
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super({
|
||||
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.update_property(
|
||||
[Gtk.AccessibleProperty.LABEL], [_('Add Rule')]);
|
||||
}
|
||||
}
|
||||
|
||||
class NewRuleDialog extends Gtk.AppChooserDialog {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
_checkId(id) {
|
||||
let items = this._settings.get_strv(SETTINGS_KEY);
|
||||
return !items.some(i => i.startsWith(id + ':'));
|
||||
}
|
||||
|
||||
constructor(parent) {
|
||||
super({
|
||||
transient_for: parent,
|
||||
modal: true,
|
||||
});
|
||||
|
||||
this._settings = ExtensionUtils.getSettings();
|
||||
|
||||
this.get_widget().set({
|
||||
show_all: true,
|
||||
show_other: true, // hide more button
|
||||
});
|
||||
|
||||
this.get_widget().connect('application-selected',
|
||||
this._updateSensitivity.bind(this));
|
||||
this._updateSensitivity();
|
||||
_appendItem(id, workspace) {
|
||||
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||
currentItems.push(id + ':' + workspace);
|
||||
this._settings.set_strv(SETTINGS_KEY, currentItems);
|
||||
}
|
||||
|
||||
_updateSensitivity() {
|
||||
const rules = this._settings.get_strv(SETTINGS_KEY);
|
||||
const appInfo = this.get_widget().get_app_info();
|
||||
this.set_response_sensitive(Gtk.ResponseType.OK,
|
||||
appInfo && !rules.some(i => i.startsWith(appInfo.get_id())));
|
||||
}
|
||||
}
|
||||
_removeItem(id) {
|
||||
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||
let index = currentItems.map(el => el.split(':')[0]).indexOf(id);
|
||||
|
||||
if (index < 0)
|
||||
return;
|
||||
currentItems.splice(index, 1);
|
||||
this._settings.set_strv(SETTINGS_KEY, currentItems);
|
||||
}
|
||||
|
||||
_changeItem(id, workspace) {
|
||||
let currentItems = this._settings.get_strv(SETTINGS_KEY);
|
||||
let index = currentItems.map(el => el.split(':')[0]).indexOf(id);
|
||||
|
||||
if (index < 0)
|
||||
currentItems.push(id + ':' + workspace);
|
||||
else
|
||||
currentItems[index] = id + ':' + workspace;
|
||||
this._settings.set_strv(SETTINGS_KEY, currentItems);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/** */
|
||||
function init() {
|
||||
ExtensionUtils.initTranslations();
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Gtk.Widget} - the prefs widget
|
||||
*/
|
||||
function buildPrefsWidget() {
|
||||
return new AutoMoveSettingsWidget();
|
||||
let widget = new Widget({ margin: 12 });
|
||||
widget.show_all();
|
||||
|
||||
return widget;
|
||||
}
|
||||
|
||||
1
extensions/auto-move-windows/stylesheet.css
Normal file
1
extensions/auto-move-windows/stylesheet.css
Normal file
@@ -0,0 +1 @@
|
||||
/* This extensions requires no special styling */
|
||||
@@ -1,57 +1,43 @@
|
||||
/* exported init enable disable */
|
||||
// Drive menu extension
|
||||
const {Clutter, Gio, GObject, Shell, St} = imports.gi;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const St = imports.gi.St;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Main = imports.ui.main;
|
||||
const Panel = imports.ui.panel;
|
||||
const PanelMenu = imports.ui.panelMenu;
|
||||
const PopupMenu = imports.ui.popupMenu;
|
||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||
|
||||
const _ = ExtensionUtils.gettext;
|
||||
|
||||
Gio._promisify(Gio.File.prototype, 'query_filesystem_info_async');
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
constructor(mount) {
|
||||
super({
|
||||
style_class: 'drive-menu-item',
|
||||
});
|
||||
super();
|
||||
|
||||
this.label = new St.Label({
|
||||
text: mount.get_name(),
|
||||
x_expand: true,
|
||||
y_align: Clutter.ActorAlign.CENTER,
|
||||
});
|
||||
this.add_child(this.label);
|
||||
this.label_actor = this.label;
|
||||
this.label = new St.Label({ text: mount.get_name() });
|
||||
this.actor.add(this.label, { expand: true });
|
||||
this.actor.label_actor = this.label;
|
||||
|
||||
this.mount = mount;
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
|
||||
let ejectIcon = new St.Icon({
|
||||
icon_name: 'media-eject-symbolic',
|
||||
style_class: 'popup-menu-icon',
|
||||
});
|
||||
let ejectButton = new St.Button({
|
||||
child: ejectIcon,
|
||||
style_class: 'button',
|
||||
});
|
||||
let ejectIcon = new St.Icon({ icon_name: 'media-eject-symbolic',
|
||||
style_class: 'popup-menu-icon ' });
|
||||
let ejectButton = new St.Button({ child: ejectIcon });
|
||||
ejectButton.connect('clicked', this._eject.bind(this));
|
||||
this.add(ejectButton);
|
||||
|
||||
this.hide();
|
||||
this.actor.add(ejectButton);
|
||||
|
||||
this._changedId = mount.connect('changed', this._syncVisibility.bind(this));
|
||||
this._syncVisibility();
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
destroy() {
|
||||
if (this._changedId) {
|
||||
this.mount.disconnect(this._changedId);
|
||||
this._changedId = 0;
|
||||
@@ -60,7 +46,7 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
async _isInteresting() {
|
||||
_isInteresting() {
|
||||
if (!this.mount.can_eject() && !this.mount.can_unmount())
|
||||
return false;
|
||||
if (this.mount.is_shadowed())
|
||||
@@ -68,47 +54,38 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
|
||||
let volume = this.mount.get_volume();
|
||||
|
||||
if (volume)
|
||||
return volume.get_identifier('class') !== 'network';
|
||||
|
||||
const root = this.mount.get_root();
|
||||
|
||||
try {
|
||||
const attr = Gio.FILE_ATTRIBUTE_FILESYSTEM_REMOTE;
|
||||
const info = await root.query_filesystem_info_async(attr, null);
|
||||
return !info.get_attribute_boolean(attr);
|
||||
} catch (e) {
|
||||
log(`Failed to query filesystem: ${e.message}`);
|
||||
if (volume == null) {
|
||||
// probably a GDaemonMount, could be network or
|
||||
// local, but we can't tell; assume it's local for now
|
||||
return true;
|
||||
}
|
||||
|
||||
// Hack, fall back to looking at GType
|
||||
return Gio._LocalFilePrototype.isPrototypeOf(root);
|
||||
return volume.get_identifier('class') != 'network';
|
||||
}
|
||||
|
||||
async _syncVisibility() {
|
||||
this.visible = await this._isInteresting();
|
||||
_syncVisibility() {
|
||||
this.actor.visible = this._isInteresting();
|
||||
}
|
||||
|
||||
_eject() {
|
||||
let unmountArgs = [
|
||||
Gio.MountUnmountFlags.NONE,
|
||||
new ShellMountOperation.ShellMountOperation(this.mount).mountOp,
|
||||
null, // Gio.Cancellable
|
||||
];
|
||||
let mountOp = new ShellMountOperation.ShellMountOperation(this.mount);
|
||||
|
||||
if (this.mount.can_eject()) {
|
||||
this.mount.eject_with_operation(...unmountArgs,
|
||||
this._ejectFinish.bind(this));
|
||||
} else {
|
||||
this.mount.unmount_with_operation(...unmountArgs,
|
||||
this._unmountFinish.bind(this));
|
||||
}
|
||||
if (this.mount.can_eject())
|
||||
this.mount.eject_with_operation(Gio.MountUnmountFlags.NONE,
|
||||
mountOp.mountOp,
|
||||
null, // Gio.Cancellable
|
||||
this._ejectFinish.bind(this));
|
||||
else
|
||||
this.mount.unmount_with_operation(Gio.MountUnmountFlags.NONE,
|
||||
mountOp.mountOp,
|
||||
null, // Gio.Cancellable
|
||||
this._unmountFinish.bind(this));
|
||||
}
|
||||
|
||||
_unmountFinish(mount, result) {
|
||||
try {
|
||||
mount.unmount_with_operation_finish(result);
|
||||
} catch (e) {
|
||||
} catch(e) {
|
||||
this._reportFailure(e);
|
||||
}
|
||||
}
|
||||
@@ -116,55 +93,54 @@ class MountMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
_ejectFinish(mount, result) {
|
||||
try {
|
||||
mount.eject_with_operation_finish(result);
|
||||
} catch (e) {
|
||||
} catch(e) {
|
||||
this._reportFailure(e);
|
||||
}
|
||||
}
|
||||
|
||||
_reportFailure(exception) {
|
||||
// TRANSLATORS: %s is the filesystem name
|
||||
let msg = _('Ejecting drive “%s” failed:').format(this.mount.get_name());
|
||||
let msg = _("Ejecting drive “%s” failed:").format(this.mount.get_name());
|
||||
Main.notifyError(msg, exception.message);
|
||||
}
|
||||
|
||||
activate(event) {
|
||||
let uri = this.mount.get_root().get_uri();
|
||||
let context = global.create_app_launch_context(event.get_time(), -1);
|
||||
Gio.AppInfo.launch_default_for_uri(uri, context);
|
||||
Gio.AppInfo.launch_default_for_uri(this.mount.get_root().get_uri(),
|
||||
context);
|
||||
|
||||
super.activate(event);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class DriveMenu extends PanelMenu.Button {
|
||||
static {
|
||||
GObject.registerClass(this);
|
||||
}
|
||||
|
||||
constructor() {
|
||||
super(0.5, _('Removable devices'));
|
||||
super(0.0, _("Removable devices"));
|
||||
|
||||
let icon = new St.Icon({
|
||||
icon_name: 'media-eject-symbolic',
|
||||
style_class: 'system-status-icon',
|
||||
});
|
||||
let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
|
||||
let icon = new St.Icon({ icon_name: 'media-eject-symbolic',
|
||||
style_class: 'system-status-icon' });
|
||||
|
||||
this.add_child(icon);
|
||||
hbox.add_child(icon);
|
||||
hbox.add_child(PopupMenu.arrowIcon(St.Side.BOTTOM));
|
||||
this.actor.add_child(hbox);
|
||||
|
||||
this._monitor = Gio.VolumeMonitor.get();
|
||||
this._addedId = this._monitor.connect('mount-added',
|
||||
(monitor, mount) => this._addMount(mount));
|
||||
this._addedId = this._monitor.connect('mount-added', (monitor, mount) => {
|
||||
this._addMount(mount);
|
||||
this._updateMenuVisibility();
|
||||
});
|
||||
this._removedId = this._monitor.connect('mount-removed', (monitor, mount) => {
|
||||
this._removeMount(mount);
|
||||
this._updateMenuVisibility();
|
||||
});
|
||||
|
||||
this._mounts = [];
|
||||
this._mounts = [ ];
|
||||
|
||||
this._monitor.get_mounts().forEach(this._addMount.bind(this));
|
||||
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
this.menu.addAction(_('Open Files'), event => {
|
||||
this.menu.addAction(_("Open Files"), event => {
|
||||
let appSystem = Shell.AppSystem.get_default();
|
||||
let app = appSystem.lookup_app('org.gnome.Nautilus.desktop');
|
||||
app.activate_full(-1, event.get_time());
|
||||
@@ -174,58 +150,53 @@ class DriveMenu extends PanelMenu.Button {
|
||||
}
|
||||
|
||||
_updateMenuVisibility() {
|
||||
if (this._mounts.filter(i => i.visible).length > 0)
|
||||
this.show();
|
||||
if (this._mounts.filter(i => i.actor.visible).length > 0)
|
||||
this.actor.show();
|
||||
else
|
||||
this.hide();
|
||||
this.actor.hide();
|
||||
}
|
||||
|
||||
_addMount(mount) {
|
||||
let item = new MountMenuItem(mount);
|
||||
this._mounts.unshift(item);
|
||||
this.menu.addMenuItem(item, 0);
|
||||
|
||||
item.connect('notify::visible', () => this._updateMenuVisibility());
|
||||
}
|
||||
|
||||
_removeMount(mount) {
|
||||
for (let i = 0; i < this._mounts.length; i++) {
|
||||
let item = this._mounts[i];
|
||||
if (item.mount === mount) {
|
||||
if (item.mount == mount) {
|
||||
item.destroy();
|
||||
this._mounts.splice(i, 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
log('Removing a mount that was never added to the menu');
|
||||
log ('Removing a mount that was never added to the menu');
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
if (this._addedId) {
|
||||
this._monitor.disconnect(this._addedId);
|
||||
this._monitor.disconnect(this._removedId);
|
||||
this._addedId = 0;
|
||||
this._removedId = 0;
|
||||
destroy() {
|
||||
if (this._connectedId) {
|
||||
this._monitor.disconnect(this._connectedId);
|
||||
this._monitor.disconnect(this._disconnectedId);
|
||||
this._connectedId = 0;
|
||||
this._disconnectedId = 0;
|
||||
}
|
||||
|
||||
super._onDestroy();
|
||||
super.destroy();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/** */
|
||||
function init() {
|
||||
ExtensionUtils.initTranslations();
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
let _indicator;
|
||||
|
||||
/** */
|
||||
function enable() {
|
||||
_indicator = new DriveMenu();
|
||||
_indicator = new DriveMenu;
|
||||
Main.panel.addToStatusArea('drive-menu', _indicator);
|
||||
}
|
||||
|
||||
/** */
|
||||
function disable() {
|
||||
_indicator.destroy();
|
||||
}
|
||||
|
||||
@@ -3,4 +3,3 @@ extension_data += configure_file(
|
||||
output: metadata_name,
|
||||
configuration: metadata_conf
|
||||
)
|
||||
extension_data += files('stylesheet.css')
|
||||
|
||||
@@ -1,7 +1 @@
|
||||
.drive-menu-item { spacing: 12px; }
|
||||
|
||||
.drive-menu-item .button {
|
||||
border-radius: 99px;
|
||||
padding: 3px;
|
||||
min-height: auto;
|
||||
}
|
||||
/* This extensions requires no custom styling */
|
||||
|
||||
49
extensions/example/extension.js
Normal file
49
extensions/example/extension.js
Normal file
@@ -0,0 +1,49 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
// Sample extension code, makes clicking on the panel show a message
|
||||
const St = imports.gi.St;
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
function _showHello() {
|
||||
let settings = Convenience.getSettings();
|
||||
let text = settings.get_string('hello-text') || _("Hello, world!");
|
||||
|
||||
let label = new St.Label({ style_class: 'helloworld-label', text: text });
|
||||
let monitor = Main.layoutManager.primaryMonitor;
|
||||
global.stage.add_actor(label);
|
||||
label.set_position(Math.floor (monitor.width / 2 - label.width / 2), Math.floor(monitor.height / 2 - label.height / 2));
|
||||
Mainloop.timeout_add(3000, () => { label.destroy(); });
|
||||
}
|
||||
|
||||
// Put your extension initialization code here
|
||||
function init(metadata) {
|
||||
log ('Example extension initalized');
|
||||
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
let signalId;
|
||||
|
||||
function enable() {
|
||||
log ('Example extension enabled');
|
||||
|
||||
Main.panel.actor.reactive = true;
|
||||
signalId = Main.panel.actor.connect('button-release-event', _showHello);
|
||||
}
|
||||
|
||||
function disable() {
|
||||
log ('Example extension disabled');
|
||||
|
||||
if (signalId) {
|
||||
Main.panel.actor.disconnect(signalId);
|
||||
signalId = 0;
|
||||
}
|
||||
}
|
||||
8
extensions/example/meson.build
Normal file
8
extensions/example/meson.build
Normal file
@@ -0,0 +1,8 @@
|
||||
extension_data += configure_file(
|
||||
input: metadata_name + '.in',
|
||||
output: metadata_name,
|
||||
configuration: metadata_conf
|
||||
)
|
||||
|
||||
extension_sources += files('prefs.js')
|
||||
extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||
10
extensions/example/metadata.json.in
Normal file
10
extensions/example/metadata.json.in
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"extension-id": "@extension_id@",
|
||||
"uuid": "@uuid@",
|
||||
"settings-schema": "@gschemaname@",
|
||||
"gettext-domain": "@gettext_domain@",
|
||||
"name": "Hello, World!",
|
||||
"description": "An example extension to show how it works. Shows Hello, world when clicking on the top panel.",
|
||||
"shell-version": [ "@shell_current@" ],
|
||||
"url": "@url@"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<schemalist gettext-domain="gnome-shell-extensions">
|
||||
<schema id="org.gnome.shell.extensions.example" path="/org/gnome/shell/extensions/example/">
|
||||
<key name="hello-text" type="s">
|
||||
<default>''</default>
|
||||
<summary>Alternative greeting text.</summary>
|
||||
<description>If not empty, it contains the text that will be shown when clicking on the panel.</description>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
54
extensions/example/prefs.js
Normal file
54
extensions/example/prefs.js
Normal file
@@ -0,0 +1,54 @@
|
||||
// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
|
||||
|
||||
const GLib = imports.gi.GLib;
|
||||
const GObject = imports.gi.GObject;
|
||||
const Gio = imports.gi.Gio;
|
||||
const Gtk = imports.gi.Gtk;
|
||||
|
||||
const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
const _ = Gettext.gettext;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
const Convenience = Me.imports.convenience;
|
||||
|
||||
function init() {
|
||||
Convenience.initTranslations();
|
||||
}
|
||||
|
||||
const ExamplePrefsWidget = GObject.registerClass(
|
||||
class ExamplePrefsWidget extends Gtk.Grid {
|
||||
_init(params) {
|
||||
super._init(params);
|
||||
this.margin = 12;
|
||||
this.row_spacing = this.column_spacing = 6;
|
||||
this.set_orientation(Gtk.Orientation.VERTICAL);
|
||||
|
||||
this.add(new Gtk.Label({ label: '<b>' + _("Message") + '</b>',
|
||||
use_markup: true,
|
||||
halign: Gtk.Align.START }));
|
||||
|
||||
let entry = new Gtk.Entry({ hexpand: true,
|
||||
margin_bottom: 12 });
|
||||
this.add(entry);
|
||||
|
||||
this._settings = Convenience.getSettings();
|
||||
this._settings.bind('hello-text', entry, 'text', Gio.SettingsBindFlags.DEFAULT);
|
||||
|
||||
// TRANSLATORS: Example is the name of the extension, should not be
|
||||
// translated
|
||||
let primaryText = _("Example aims to show how to build well behaved \
|
||||
extensions for the Shell and as such it has little functionality on its own.\n\
|
||||
Nevertheless it’s possible to customize the greeting message.");
|
||||
|
||||
this.add(new Gtk.Label({ label: primaryText,
|
||||
wrap: true, xalign: 0 }));
|
||||
}
|
||||
});
|
||||
|
||||
function buildPrefsWidget() {
|
||||
let widget = new ExamplePrefsWidget();
|
||||
widget.show_all();
|
||||
|
||||
return widget;
|
||||
}
|
||||
8
extensions/example/stylesheet.css
Normal file
8
extensions/example/stylesheet.css
Normal file
@@ -0,0 +1,8 @@
|
||||
/* Example stylesheet */
|
||||
.helloworld-label {
|
||||
font-size: 36px;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
background-color: rgba(10,10,10,0.7);
|
||||
border-radius: 5px;
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
/* exported enable disable */
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
|
||||
let _activateOriginal = null;
|
||||
|
||||
/** */
|
||||
function enable() {
|
||||
_activateOriginal = AppDisplay.AppIcon.prototype.activate;
|
||||
AppDisplay.AppIcon.prototype.activate = function () {
|
||||
_activateOriginal.call(this, 2);
|
||||
};
|
||||
function init() {
|
||||
}
|
||||
|
||||
/** */
|
||||
function disable() {
|
||||
AppDisplay.AppIcon.prototype.activate = _activateOriginal;
|
||||
function enable() {
|
||||
_activateOriginal = AppDisplay.AppIcon.prototype.activate;
|
||||
AppDisplay.AppIcon.prototype.activate = function() {
|
||||
_activateOriginal.call(this, 2);
|
||||
};
|
||||
}
|
||||
|
||||
function disable() {
|
||||
AppDisplay.AppIcon.prototype.activate = _activateOriginal;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user