Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
22131d99ad | |||
4e22388089 | |||
c526413119 | |||
1336b197d8 | |||
4b99415215 | |||
1ed107a2bf |
18
.gitignore
vendored
18
.gitignore
vendored
@ -6,8 +6,16 @@
|
|||||||
ABOUT-NLS
|
ABOUT-NLS
|
||||||
ChangeLog
|
ChangeLog
|
||||||
INSTALL
|
INSTALL
|
||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
|
config.h
|
||||||
|
config.h.in
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config
|
||||||
|
configure
|
||||||
data/org.gnome.Shell.desktop
|
data/org.gnome.Shell.desktop
|
||||||
data/org.gnome.Shell.desktop.in
|
data/org.gnome.Shell.desktop.in
|
||||||
data/gnome-shell-extension-prefs.desktop
|
data/gnome-shell-extension-prefs.desktop
|
||||||
@ -33,9 +41,15 @@ docs/reference/*/*.types
|
|||||||
docs/reference/*/html/
|
docs/reference/*/html/
|
||||||
docs/reference/*/xml/
|
docs/reference/*/xml/
|
||||||
docs/reference/shell/doc-gen-*
|
docs/reference/shell/doc-gen-*
|
||||||
|
gtk-doc.make
|
||||||
js/misc/config.js
|
js/misc/config.js
|
||||||
js/js-resources.c
|
js/js-resources.c
|
||||||
js/js-resources.h
|
js/js-resources.h
|
||||||
|
intltool-extract.in
|
||||||
|
intltool-merge.in
|
||||||
|
intltool-update.in
|
||||||
|
libtool
|
||||||
|
m4/
|
||||||
man/gnome-shell.1
|
man/gnome-shell.1
|
||||||
omf.make
|
omf.make
|
||||||
po/*.gmo
|
po/*.gmo
|
||||||
@ -44,6 +58,7 @@ po/*.header
|
|||||||
po/*.sed
|
po/*.sed
|
||||||
po/*.sin
|
po/*.sin
|
||||||
po/.intltool-merge-cache
|
po/.intltool-merge-cache
|
||||||
|
po/Makefile.in.in
|
||||||
po/Makevars.template
|
po/Makevars.template
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
po/Rules-quot
|
po/Rules-quot
|
||||||
@ -53,6 +68,8 @@ src/*.gir
|
|||||||
src/*.typelib
|
src/*.typelib
|
||||||
src/*-enum-types.[ch]
|
src/*-enum-types.[ch]
|
||||||
src/*-marshal.[ch]
|
src/*-marshal.[ch]
|
||||||
|
src/Makefile
|
||||||
|
src/Makefile.in
|
||||||
src/calendar-server/evolution-calendar.desktop
|
src/calendar-server/evolution-calendar.desktop
|
||||||
src/calendar-server/org.gnome.Shell.CalendarServer.service
|
src/calendar-server/org.gnome.Shell.CalendarServer.service
|
||||||
src/gnome-shell
|
src/gnome-shell
|
||||||
@ -76,6 +93,7 @@ src/st-scroll-view-fade-generated.c
|
|||||||
src/stamp-st-scroll-view-fade-generated.c
|
src/stamp-st-scroll-view-fade-generated.c
|
||||||
stamp-h1
|
stamp-h1
|
||||||
tests/run-test.sh
|
tests/run-test.sh
|
||||||
|
xmldocs.make
|
||||||
*~
|
*~
|
||||||
*.patch
|
*.patch
|
||||||
*.sw?
|
*.sw?
|
||||||
|
8
.gitmodules
vendored
8
.gitmodules
vendored
@ -1,6 +1,6 @@
|
|||||||
|
[submodule "src/gvc"]
|
||||||
|
path = src/gvc
|
||||||
|
url = git://git.gnome.org/libgnome-volume-control
|
||||||
[submodule "data/theme/gnome-shell-sass"]
|
[submodule "data/theme/gnome-shell-sass"]
|
||||||
path = data/theme/gnome-shell-sass
|
path = data/theme/gnome-shell-sass
|
||||||
url = https://git.gnome.org/browse/gnome-shell-sass
|
url = git://git.gnome.org/gnome-shell-sass
|
||||||
[submodule "subprojects/gvc"]
|
|
||||||
path = subprojects/gvc
|
|
||||||
url = https://git.gnome.org/browse/libgnome-volume-control
|
|
||||||
|
12
HACKING
12
HACKING
@ -132,7 +132,7 @@ There are many approaches to classes in JavaScript. We use our own class framewo
|
|||||||
(sigh), which is built in gjs. The advantage is that it supports inheriting from
|
(sigh), which is built in gjs. The advantage is that it supports inheriting from
|
||||||
GObjects, although this feature isn't used very often in the Shell itself.
|
GObjects, although this feature isn't used very often in the Shell itself.
|
||||||
|
|
||||||
var IconLabelMenuItem = new Lang.Class({
|
const IconLabelMenuItem = new Lang.Class({
|
||||||
Name: 'IconLabelMenuItem',
|
Name: 'IconLabelMenuItem',
|
||||||
Extends: PopupMenu.PopupMenuBaseItem,
|
Extends: PopupMenu.PopupMenuBaseItem,
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ GObject Introspection is a powerful feature that allows us to have native
|
|||||||
bindings for almost any library built around GObject. If a library requires
|
bindings for almost any library built around GObject. If a library requires
|
||||||
you to inherit from a type to use it, you can do so:
|
you to inherit from a type to use it, you can do so:
|
||||||
|
|
||||||
var MyClutterActor = new Lang.Class({
|
const MyClutterActor = new Lang.Class({
|
||||||
Name: 'MyClutterActor',
|
Name: 'MyClutterActor',
|
||||||
Extends: Clutter.Actor,
|
Extends: Clutter.Actor,
|
||||||
|
|
||||||
@ -215,7 +215,7 @@ that has a property called `actor`. We call this wrapper class the "delegate".
|
|||||||
We sometimes use expando properties to set a property called `_delegate` on
|
We sometimes use expando properties to set a property called `_delegate` on
|
||||||
the actor itself:
|
the actor itself:
|
||||||
|
|
||||||
var MyClass = new Lang.Class({
|
const MyClass = new Lang.Class({
|
||||||
Name: 'MyClass',
|
Name: 'MyClass',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -264,7 +264,7 @@ prototype:
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const FnorbLib = imports.fborbLib;
|
const FnorbLib = imports.fborbLib;
|
||||||
|
|
||||||
var MyClass = new Lang.Class({
|
const MyClass = new Lang.Class({
|
||||||
_init: function() {
|
_init: function() {
|
||||||
let fnorb = new FnorbLib.Fnorb();
|
let fnorb = new FnorbLib.Fnorb();
|
||||||
fnorb.connect('frobate', Lang.bind(this, this._onFnorbFrobate));
|
fnorb.connect('frobate', Lang.bind(this, this._onFnorbFrobate));
|
||||||
@ -304,9 +304,9 @@ designed around setting properties, like Tweener. If you want to animate an
|
|||||||
arbitrary property, create a getter and setter, and use Tweener to animate the
|
arbitrary property, create a getter and setter, and use Tweener to animate the
|
||||||
property.
|
property.
|
||||||
|
|
||||||
var ANIMATION_TIME = 2000;
|
const ANIMATION_TIME = 2000;
|
||||||
|
|
||||||
var MyClass = new Lang.Class({
|
const MyClass = new Lang.Class({
|
||||||
Name: 'MyClass',
|
Name: 'MyClass',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
33
Makefile.am
Normal file
33
Makefile.am
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Point to our macro directory and pick up user flags from the environment
|
||||||
|
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
|
||||||
|
|
||||||
|
SUBDIRS = data js src tests po docs
|
||||||
|
|
||||||
|
if BUILD_BROWSER_PLUGIN
|
||||||
|
SUBDIRS += browser-plugin
|
||||||
|
endif
|
||||||
|
|
||||||
|
if ENABLE_MAN
|
||||||
|
SUBDIRS += man
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
.project \
|
||||||
|
.settings \
|
||||||
|
autogen.sh \
|
||||||
|
tools/check-for-missing.py
|
||||||
|
|
||||||
|
# These are files checked into Git that we don't want to distribute
|
||||||
|
DIST_EXCLUDE = \
|
||||||
|
.gitignore \
|
||||||
|
.gitmodules \
|
||||||
|
gnome-shell.doap \
|
||||||
|
HACKING \
|
||||||
|
MAINTAINERS \
|
||||||
|
tools/build/*
|
||||||
|
|
||||||
|
distcheck-hook:
|
||||||
|
@echo "Checking disted files against files in git"
|
||||||
|
@$(srcdir)/tools/check-for-missing.py $(srcdir) $(distdir) $(DIST_EXCLUDE)
|
||||||
|
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man
|
173
NEWS
173
NEWS
@ -1,162 +1,4 @@
|
|||||||
3.26.2
|
3.24.1
|
||||||
======
|
|
||||||
* Dump javascript stack on aborts, traps and segfaults [Marco; #789237]
|
|
||||||
* Misc. bug fixes [Jonas, Florian, Alessandro; #788607, #789018, #789231,
|
|
||||||
#788542, #789103]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Jonas Ådahl, Alessandro Bono, Florian Müllner, Marco Trevisan (Treviño)
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Xavi Ivars [ca@valencia], Fabio Tomat [fur], Matej Urbančič [sl],
|
|
||||||
Hannie Dumoleyn [nl]
|
|
||||||
|
|
||||||
3.26.1
|
|
||||||
======
|
|
||||||
* Don't detach launched apps to not break pkexec and friends [Florian; #763531]
|
|
||||||
* Allow search providers to not autostart [Bastien, Florian; #785380, #787986]
|
|
||||||
* Fix crash when tray icons are hidden/shown in quick succession [Ray; #787361]
|
|
||||||
* Make window group switcher more consistent [Didier; #786009]
|
|
||||||
* Improve legibility of the top bar when translucent [Jakub; #787940]
|
|
||||||
* Don't crash when running outside a logind session [Florian; #788046]
|
|
||||||
* Allow to run headless [Mario, Jonas; #730551]
|
|
||||||
* Update calendar on timezone changes [Martin; #678507]
|
|
||||||
* Improve keyboard navigation of window previews [Florian; #786546]
|
|
||||||
* Run unit tests on `meson test` [Florian; #786497]
|
|
||||||
* Misc. bug fixes [Florian, Marc-Antoine, Mario, Jakub, Krzesimir; #787423,
|
|
||||||
#766368, #787580, #787907, #787901, #788039, #788003, #786343, #787902,
|
|
||||||
#788265, #788339, #787905, #788282, #787676]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Martin Andersson, Florian Müllner, Bastien Nocera, Krzesimir Nowak,
|
|
||||||
Marc-Antoine Perennou, Didier Roche, Mario Sanchez Prada, Jakub Steiner,
|
|
||||||
Ray Strode
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Efstathios Iosifidis [el], Khaled Hosny [ar], Stas Solovey [ru],
|
|
||||||
Arash Mousavi [fa], Sveinn í Felli [is], Athul R T [ml],
|
|
||||||
Cheng-Chia Tseng [zh_TW], Anders Jonsson [sv]
|
|
||||||
|
|
||||||
3.26.0
|
|
||||||
======
|
|
||||||
* Misc. bug fixes [Ray, Michael, Jonas; #786332] #786783, #786886, #786868]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Jonas Ådahl, Michael Catanzaro, Sebastian Keller, Ray Strode
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Daniel Mustieles [es], Fran Dieguez [gl], Baurzhan Muftakhidinov [kk],
|
|
||||||
Marek Cernocky [cs], Andika Triwidada [id], Aurimas Černius [lt],
|
|
||||||
Piotr Drąg [pl], Trần Ngọc Quân [vi], Jordi Mas [ca], Fabio Tomat [fur],
|
|
||||||
gogo [hr], Dušan Kazik [sk], Piotr Drąg [ne], Emin Tufan Çetin [tr],
|
|
||||||
Ask Hjorth Larsen [da], Cheng-Chia Tseng [zh_TW], Rūdolfs Mazurs [lv],
|
|
||||||
Balázs Meskó [hu], Matej Urbančič [sl], Jiri Grönroos [fi],
|
|
||||||
Милош Поповић [sr], Милош Поповић [sr@latin], Rafael Fontenelle [pt_BR],
|
|
||||||
Wolfgang Stöggl [de], Milo Casagrande [it], hanniedu [nl],
|
|
||||||
Yuras Shumovich [be], Changwoo Ryu [ko], Alain Lojewski [fr],
|
|
||||||
Alexander Shopov [bg], Daniel Korostil [uk], Kris Thomsen [da],
|
|
||||||
A S Alam [pa], Sebastian Rasmussen [sv], Inaki Larranaga Murgoitio [eu],
|
|
||||||
Jiro Matsuzawa [ja]
|
|
||||||
|
|
||||||
3.25.91
|
|
||||||
=======
|
|
||||||
* Open context menu of highlighted search result on Shift+F10 [Florian; #675315]
|
|
||||||
* Fix mid-sentence capitalization in weather forecasts [Florian; #779873]
|
|
||||||
* Add switcher popup to cycle through monitor configurations [Rui; #783550]
|
|
||||||
* Offer system actions in search [Rares; #691900]
|
|
||||||
* Misc. bug fixes [Mario, Florian, Rui; #777519, #786120, #786145, #786419,
|
|
||||||
#786526, #786520, #786520, #786146]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Emmanuele Bassi, Marek Cernocky, Piotr Drąg, Carlos Garnacho, Rui Matos,
|
|
||||||
Florian Müllner, Mario Sanchez Prada, Rares Visalom
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Marek Cernocky [cs], Piotr Drąg [pl], Muhammet Kara [tr],
|
|
||||||
Мирослав Николић [sr, sr@latin], Kukuh Syafaat [id],
|
|
||||||
Baurzhan Muftakhidinov [kk], Aurimas Černius [lt], Fran Dieguez [gl],
|
|
||||||
gogo [hr], Jordi Mas [ca]
|
|
||||||
|
|
||||||
3.25.90
|
|
||||||
=======
|
|
||||||
* Add permission dialog for inhibiting shortucts [Florian; #783342]
|
|
||||||
* Improve window picker layout [Florian, Jakub; #783953]
|
|
||||||
* Remove legacy status icon tray [Florian; #785956]
|
|
||||||
* Drop autotools support [Florian; #785153]
|
|
||||||
* Misc. bug fixes [Florian, Carlos, Cosimo; #785090, #785309, #767805,
|
|
||||||
#747794, #785358, #785556]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Emmanuele Bassi, Cosimo Cecchi, Carlos Garnacho, Florian Müllner,
|
|
||||||
Jakub Steiner
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Fabio Tomat [fur], Pawan Chitrakar [ne], Aurimas Černius [lt], gogo [hr],
|
|
||||||
Daniel Mustieles [es], Baurzhan Muftakhidinov [kk], Matej Urbančič [sl],
|
|
||||||
Marek Cernocky [cs], Dušan Kazik [sk], Jordi Mas [ca], Fran Dieguez [gl],
|
|
||||||
Andika Triwidada [id], Anders Jonsson [sv], Balázs Meskó [hu]
|
|
||||||
|
|
||||||
3.25.4
|
|
||||||
======
|
|
||||||
* gdm: Fix "Not listed" focus indication [Florian; #784040]
|
|
||||||
* Fix missing icons in freedesktop notifications [Florian; #784245]
|
|
||||||
* gdm: Disable user list when empty [Xiaoguang; #731320]
|
|
||||||
* gdm: Allow empty reponse to PAM messages [Ray; #784360]
|
|
||||||
* Fix blocked clicks in shutdown dialog [Florian; #781738]
|
|
||||||
* Show OSD popup when changing volume via scroll wheel [Florian; #781028]
|
|
||||||
* Refine list search results [Rares; #749957]
|
|
||||||
* Replace mutter's unresponsive app dialog [Carlos; #762083]
|
|
||||||
* Improve handling of extension errors [Florian; #781728]
|
|
||||||
* Implement tablet rings/strips configuration [Carlos; #782033]
|
|
||||||
* Adjust to mozjs52 update in gjs [Florian; #785084, #785090]
|
|
||||||
* Support the meson build system [Florian; #783229]
|
|
||||||
* Misc. bug fixes [Ray, Florian, Jonas, Marco, Shih-Yuan, Joaquim, Carlos S.;
|
|
||||||
#780403, #772589, #784130, #783975, #784353, #784361, #772284, #765011,
|
|
||||||
#765011, #765011, #784985, #781471, #785047, #736148, #736148]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Jonas Ådahl, Alessandro Bono, Michael Catanzaro, Carlos Garnacho,
|
|
||||||
Shih-Yuan Lee (FourDollars), Florian Müllner, Joaquim Rocha,
|
|
||||||
Mario Sanchez Prada, Carlos Soriano, Ray Strode, Marco Trevisan (Treviño),
|
|
||||||
Rares Visalom, Xiaoguang Wang
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Jeremy Bicha po/es, he.po, Kukuh Syafaat [id], Fabio Tomat [fur]
|
|
||||||
|
|
||||||
3.25.3
|
|
||||||
======
|
|
||||||
* Bypass proxies for captive portal [Bastien; #769692]
|
|
||||||
* Correctly handle "text-shadow: none;" [Matt; #783485]
|
|
||||||
* Add StEntry:hint-actor property [Mario; #783484]
|
|
||||||
* Support text-shadow CSS property in StEntry [Mario; #783484]
|
|
||||||
* Misc. bug fixes [Jonas, Florian, Bastien, Ting-Wei, Cosimo, Mario, Sebastian;
|
|
||||||
#777732, #783202, #783210, #783206, #783286, #783439, #783483, #783823,
|
|
||||||
#781950]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Jonas Ådahl, Cosimo Cecchi, Sebastian Keller, Ting-Wei Lan, Florian Müllner,
|
|
||||||
Bastien Nocera, Mario Sanchez Prada, Matt Watson
|
|
||||||
|
|
||||||
3.25.2
|
|
||||||
======
|
|
||||||
* Fix StEntry::primary-icon-clicked emission [Florian; #782190]
|
|
||||||
* Add an optional icon parameter to PopupMenu.addAction() [Mario; #782166]
|
|
||||||
* Allow search providers to include clipboard text with results [Daiki; #775099]
|
|
||||||
* Reduce dependency on Caribou [Carlos; #777342]
|
|
||||||
* Add transparency to top bar when free floating [Alessandro; #747163]
|
|
||||||
* Animate maximize/unmaximize operations [Alessandro; #766685]
|
|
||||||
* Misc. bug fixes [Florian, Matthias, Jeremy, Michael, Carlos, Lan; #782000,
|
|
||||||
#780215, #782802, #782637, #782930, #755164, #780215, #782982]
|
|
||||||
|
|
||||||
Contributors:
|
|
||||||
Jeremy Bicha, Michael Biebl, Alessandro Bono, Carlos Garnacho, Ting-Wei Lan,
|
|
||||||
Matthias Liertzer, Florian Müllner, Mario Sanchez Prada, Daiki Ueno
|
|
||||||
|
|
||||||
Translations:
|
|
||||||
Jordi Mas [ca], Christian Stadelmann [de], Милош Поповић [sr],
|
|
||||||
Милош Поповић [sr@latin], Furkan Ahmet Kara [tr]
|
|
||||||
|
|
||||||
3.25.1
|
|
||||||
======
|
======
|
||||||
* Close Wifi selection dialog on lock [Florian; #780054]
|
* Close Wifi selection dialog on lock [Florian; #780054]
|
||||||
* Fix DND over window previews in overview [Florian; #737166]
|
* Fix DND over window previews in overview [Florian; #737166]
|
||||||
@ -164,15 +6,11 @@ Translations:
|
|||||||
* Follow GNOME Weather's location permissions [Florian; #780252]
|
* Follow GNOME Weather's location permissions [Florian; #780252]
|
||||||
* Fix portals that require a new window to be loaded [Catalin; #759044]
|
* Fix portals that require a new window to be loaded [Catalin; #759044]
|
||||||
* Fix restricting menus to screen height on HiDPI displays [Cosimo; #753305]
|
* Fix restricting menus to screen height on HiDPI displays [Cosimo; #753305]
|
||||||
* Misc. bug fixes and cleanups [Florian, Cosimo, Bastien, Catalin, Carlos G.,
|
* Misc. bug fixes and cleanups [Florian, Cosimo, Bastien, Catalin, Carlos;
|
||||||
Jonas, Carlos S., Xiaoguang, Rares, Emilio; #780063, #780321, #780381,
|
#780063, #780321, #780381, #780453, #758873, #780606, #642652]
|
||||||
#780453, #758873, #780606, #642652, #777732, #780157, #781482, #780404,
|
|
||||||
#781545, #781728]
|
|
||||||
|
|
||||||
Contributors:
|
Contributors:
|
||||||
Jonas Ådahl, Cosimo Cecchi, Philip Chimento, Carlos Garnacho, Catalin Iacob,
|
Cosimo Cecchi, Carlos Garnacho, Catalin Iacob, Florian Müllner, Bastien Nocera
|
||||||
Florian Müllner, Bastien Nocera, Emilio Pozuelo Monfort, Carlos Soriano,
|
|
||||||
Rares Visalom, Xiaoguang Wang
|
|
||||||
|
|
||||||
Translations:
|
Translations:
|
||||||
Marek Cernocky [cs], Piotr Drąg [pl], Anders Jonsson [sv], Stas Solovey [ru],
|
Marek Cernocky [cs], Piotr Drąg [pl], Anders Jonsson [sv], Stas Solovey [ru],
|
||||||
@ -182,8 +20,7 @@ Translations:
|
|||||||
Changwoo Ryu [ko], Mario Blättermann [de], Fran Dieguez [gl],
|
Changwoo Ryu [ko], Mario Blättermann [de], Fran Dieguez [gl],
|
||||||
Dušan Kazik [sk], Yuras Shumovich [be], Fabio Tomat [fur],
|
Dušan Kazik [sk], Yuras Shumovich [be], Fabio Tomat [fur],
|
||||||
Kjartan Maraas [nb], Aurimas Černius [lt], Trần Ngọc Quân [vi],
|
Kjartan Maraas [nb], Aurimas Černius [lt], Trần Ngọc Quân [vi],
|
||||||
Rūdolfs Mazurs [lv], Γιάννης Κουτσούκος [el], gogo [hr], Марко Костић [sr],
|
Rūdolfs Mazurs [lv], Ask Hjorth Larsen [da], Tom Tryfonidis [el], gogo [hr]
|
||||||
Jordi Mas [ca], Khaled Hosny [ar]
|
|
||||||
|
|
||||||
3.24.0
|
3.24.0
|
||||||
======
|
======
|
||||||
|
33
autogen.sh
Executable file
33
autogen.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Run this to generate all the initial makefiles, etc.
|
||||||
|
|
||||||
|
srcdir=`dirname $0`
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
|
pushd $srcdir
|
||||||
|
|
||||||
|
(test -f configure.ac \
|
||||||
|
&& test -d src) || {
|
||||||
|
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
||||||
|
echo " top-level gnome-shell directory"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fetch submodules if needed
|
||||||
|
if test ! -f src/gvc/Makefile.am || test ! -f data/theme/gnome-shell-sass/COPYING;
|
||||||
|
then
|
||||||
|
echo "+ Setting up submodules"
|
||||||
|
git submodule init
|
||||||
|
fi
|
||||||
|
git submodule update
|
||||||
|
|
||||||
|
aclocal --install || exit 1
|
||||||
|
gtkdocize --copy || exit 1
|
||||||
|
intltoolize --force --copy --automake || exit 1
|
||||||
|
autoreconf --verbose --force --install || exit 1
|
||||||
|
|
||||||
|
popd
|
||||||
|
|
||||||
|
if [ "$NOCONFIGURE" = "" ]; then
|
||||||
|
$srcdir/configure "$@" || exit 1
|
||||||
|
fi
|
23
browser-plugin/Makefile.am
Normal file
23
browser-plugin/Makefile.am
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
mozillalibdir = $(BROWSER_PLUGIN_DIR)
|
||||||
|
|
||||||
|
mozillalib_LTLIBRARIES = libgnome-shell-browser-plugin.la
|
||||||
|
|
||||||
|
# Browsers can unload and reload the module while browsing, which is not supported by GObject.
|
||||||
|
# We pass -Wl,-z,nodelete to the linker to ensure the module is never unloaded.
|
||||||
|
# https://bugzilla.gnome.org/show_bug.cgi?id=737932
|
||||||
|
libgnome_shell_browser_plugin_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,-z,nodelete
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_LIBADD = \
|
||||||
|
$(BROWSER_PLUGIN_LIBS)
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_SOURCES = \
|
||||||
|
browser-plugin.c \
|
||||||
|
npapi/npapi.h \
|
||||||
|
npapi/npfunctions.h \
|
||||||
|
npapi/npruntime.h \
|
||||||
|
npapi/nptypes.h
|
||||||
|
|
||||||
|
libgnome_shell_browser_plugin_la_CFLAGS = \
|
||||||
|
$(BROWSER_PLUGIN_CFLAGS) \
|
||||||
|
-DG_LOG_DOMAIN=\"GnomeShellBrowserPlugin\"
|
@ -1,19 +0,0 @@
|
|||||||
plugin_sources = [
|
|
||||||
'browser-plugin.c',
|
|
||||||
'npapi/npapi.h',
|
|
||||||
'npapi/npfunctions.h',
|
|
||||||
'npapi/npruntime.h',
|
|
||||||
'npapi/nptypes.h'
|
|
||||||
]
|
|
||||||
|
|
||||||
shared_module('gnome-shell-browser-plugin', plugin_sources,
|
|
||||||
dependencies: [gio_dep, json_glib_dep],
|
|
||||||
c_args: ['-DG_LOG_DOMAIN="GnomeShellBrowserPlugin"'],
|
|
||||||
# Browsers can unload and reload the module while browsing, which is not
|
|
||||||
# supported by GObject.
|
|
||||||
# We pass -Wl,-z,nodelete to the linker to ensure the module is never
|
|
||||||
# unloaded. See https://bugzilla.gnome.org/show_bug.cgi?id=737932.
|
|
||||||
link_args: ['-Wl,-z,nodelete'],
|
|
||||||
install: true,
|
|
||||||
install_dir: plugindir
|
|
||||||
)
|
|
@ -1,26 +0,0 @@
|
|||||||
/* The prefix for our gettext translation domains. */
|
|
||||||
#mesondefine GETTEXT_PACKAGE
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#mesondefine VERSION
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#mesondefine PACKAGE_VERSION
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `fdwalk' function. */
|
|
||||||
#mesondefine HAVE_FDWALK
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mallinfo' function. */
|
|
||||||
#mesondefine HAVE_MALLINFO
|
|
||||||
|
|
||||||
/* Define to 1 fi you have the <sys/resource.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_RESOURCE_H
|
|
||||||
|
|
||||||
/* Define if we have NetworkManager */
|
|
||||||
#mesondefine HAVE_NETWORKMANAGER
|
|
||||||
|
|
||||||
/* Define if we have systemd */
|
|
||||||
#mesondefine HAVE_SYSTEMD
|
|
||||||
|
|
||||||
/* Define if _NL_TIME_FIRST_WEEKDATE is available */
|
|
||||||
#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
|
|
158
configure
vendored
158
configure
vendored
@ -1,158 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# configure script adapter for Meson
|
|
||||||
# Based on build-api: https://github.com/cgwalters/build-api
|
|
||||||
# Copyright 2010, 2011, 2013 Colin Walters <walters@verbum.org>
|
|
||||||
# Copyright 2016, 2017 Emmanuele Bassi
|
|
||||||
# Licensed under the new-BSD license (http://www.opensource.org/licenses/bsd-license.php)
|
|
||||||
|
|
||||||
# Build API variables:
|
|
||||||
|
|
||||||
# Little helper function for reading args from the commandline.
|
|
||||||
# it automatically handles -a b and -a=b variants, and returns 1 if
|
|
||||||
# we need to shift $3.
|
|
||||||
read_arg() {
|
|
||||||
# $1 = arg name
|
|
||||||
# $2 = arg value
|
|
||||||
# $3 = arg parameter
|
|
||||||
local rematch='^[^=]*=(.*)$'
|
|
||||||
if [[ $2 =~ $rematch ]]; then
|
|
||||||
read "$1" <<< "${BASH_REMATCH[1]}"
|
|
||||||
else
|
|
||||||
read "$1" <<< "$3"
|
|
||||||
# There is no way to shift our callers args, so
|
|
||||||
# return 1 to indicate they should do it instead.
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
sanitycheck() {
|
|
||||||
# $1 = arg name
|
|
||||||
# $1 = arg command
|
|
||||||
# $2 = arg alternates
|
|
||||||
local cmd=$( which $2 2>/dev/null )
|
|
||||||
|
|
||||||
if [ -x "$cmd" ]; then
|
|
||||||
read "$1" <<< "$cmd"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
test -z $3 || {
|
|
||||||
for alt in $3; do
|
|
||||||
cmd=$( which $alt 2>/dev/null )
|
|
||||||
|
|
||||||
if [ -x "$cmd" ]; then
|
|
||||||
read "$1" <<< "$cmd"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
echo -e "\e[1;31mERROR\e[0m: Command '$2' not found"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
sanitycheck MESON 'meson'
|
|
||||||
sanitycheck NINJA 'ninja' 'ninja-build'
|
|
||||||
|
|
||||||
enable_docs='-Denable-gtk-doc=false'
|
|
||||||
enable_man='-Denable-man=false'
|
|
||||||
enable_introspection=''
|
|
||||||
|
|
||||||
while (($# > 0)); do
|
|
||||||
case "${1%%=*}" in
|
|
||||||
--prefix) read_arg prefix "$@" || shift;;
|
|
||||||
--bindir) read_arg bindir "$@" || shift;;
|
|
||||||
--sbindir) read_arg sbindir "$@" || shift;;
|
|
||||||
--libexecdir) read_arg libexecdir "$@" || shift;;
|
|
||||||
--datarootdir) read_arg datarootdir "$@" || shift;;
|
|
||||||
--datadir) read_arg datadir "$@" || shift;;
|
|
||||||
--sysconfdir) read_arg sysconfdir "$@" || shift;;
|
|
||||||
--libdir) read_arg libdir "$@" || shift;;
|
|
||||||
--mandir) read_arg mandir "$@" || shift;;
|
|
||||||
--includedir) read_arg includedir "$@" || shift;;
|
|
||||||
--enable-gtk-doc) enable_docs='-Denable-gtk-doc=true';;
|
|
||||||
--disable-gtk-doc) enable_docs='-Denable-gtk-doc=false';;
|
|
||||||
--enable-man) enable_man='-Denable-man=true';;
|
|
||||||
--disable-man) enable_man='-Denable-man=false';;
|
|
||||||
--enable-introspection) enable_introspection='';;
|
|
||||||
--disable-introspection) enable_introspection='-Ddisable_introspection=true';;
|
|
||||||
*) echo -e "\e[1;33mINFO\e[0m: Ignoring unknown option '$1'";;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
# Defaults
|
|
||||||
test -z ${prefix} && prefix="/usr/local"
|
|
||||||
test -z ${bindir} && bindir=${prefix}/bin
|
|
||||||
test -z ${sbindir} && sbindir=${prefix}/sbin
|
|
||||||
test -z ${libexecdir} && libexecdir=${prefix}/bin
|
|
||||||
test -z ${datarootdir} && datarootdir=${prefix}/share
|
|
||||||
test -z ${datadir} && datadir=${datarootdir}
|
|
||||||
test -z ${sysconfdir} && sysconfdir=${prefix}/etc
|
|
||||||
test -z ${libdir} && libdir=${prefix}/lib
|
|
||||||
test -z ${mandir} && mandir=${prefix}/share/man
|
|
||||||
test -z ${includedir} && includedir=${prefix}/include
|
|
||||||
|
|
||||||
# The source directory is the location of this file
|
|
||||||
srcdir=$(dirname $0)
|
|
||||||
|
|
||||||
# The build directory is the current location
|
|
||||||
builddir=`pwd`
|
|
||||||
|
|
||||||
# If we're calling this file from the source directory then
|
|
||||||
# we automatically create a build directory and ensure that
|
|
||||||
# both Meson and Ninja invocations are relative to that
|
|
||||||
# location
|
|
||||||
if [[ -f "${builddir}/meson.build" ]]; then
|
|
||||||
mkdir -p _build
|
|
||||||
builddir="${builddir}/_build"
|
|
||||||
NINJA_OPT="-C ${builddir}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Wrapper Makefile for Ninja
|
|
||||||
cat > Makefile <<END
|
|
||||||
# Generated by configure; do not edit
|
|
||||||
|
|
||||||
all:
|
|
||||||
CC="\$(CC)" CXX="\$(CXX)" ${NINJA} ${NINJA_OPT}
|
|
||||||
|
|
||||||
install:
|
|
||||||
DESTDIR="\$(DESTDIR)" ${NINJA} ${NINJA_OPT} install
|
|
||||||
|
|
||||||
check:
|
|
||||||
${MESON} test ${NINJA_OPT}
|
|
||||||
END
|
|
||||||
|
|
||||||
echo "Summary:"
|
|
||||||
echo " meson:....... ${MESON}"
|
|
||||||
echo " ninja:....... ${NINJA}"
|
|
||||||
echo " prefix:...... ${prefix}"
|
|
||||||
echo " bindir:...... ${bindir}"
|
|
||||||
echo " sbindir:..... ${sbindir}"
|
|
||||||
echo " libexecdir:.. ${libexecdir}"
|
|
||||||
echo " datarootdir:. ${datarootdir}"
|
|
||||||
echo " datadir:..... ${datadir}"
|
|
||||||
echo " sysconfdir:.. ${sysconfdir}"
|
|
||||||
echo " libdir:...... ${libdir}"
|
|
||||||
echo " mandir:...... ${mandir}"
|
|
||||||
echo " includedir:.. ${includedir}"
|
|
||||||
echo " additional:.."
|
|
||||||
echo " - ${enable_docs} ${enable_man} ${enable_introspection}"
|
|
||||||
|
|
||||||
exec ${MESON} \
|
|
||||||
--prefix=${prefix} \
|
|
||||||
--libdir=${libdir} \
|
|
||||||
--libexecdir=${libexecdir} \
|
|
||||||
--datadir=${datadir} \
|
|
||||||
--sysconfdir=${sysconfdir} \
|
|
||||||
--bindir=${bindir} \
|
|
||||||
--includedir=${includedir} \
|
|
||||||
--mandir=${mandir} \
|
|
||||||
--default-library shared \
|
|
||||||
${enable_docs} \
|
|
||||||
${enable_man} \
|
|
||||||
${enable_introspection} \
|
|
||||||
${builddir} \
|
|
||||||
${srcdir}
|
|
||||||
|
|
||||||
# vim: ai ts=8 noet sts=2 ft=sh
|
|
284
configure.ac
Normal file
284
configure.ac
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
AC_PREREQ(2.63)
|
||||||
|
AC_INIT([gnome-shell],[3.24.1],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
|
||||||
|
AX_IS_RELEASE([git-directory])
|
||||||
|
|
||||||
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
AC_CONFIG_SRCDIR([src/shell-global.c])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
AC_CONFIG_AUX_DIR([config])
|
||||||
|
|
||||||
|
AC_SUBST([PACKAGE_NAME], ["$PACKAGE_NAME"])
|
||||||
|
AC_SUBST([PACKAGE_VERSION], ["$PACKAGE_VERSION"])
|
||||||
|
|
||||||
|
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz tar-ustar foreign])
|
||||||
|
AM_MAINTAINER_MODE([enable])
|
||||||
|
|
||||||
|
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
|
# Checks for programs.
|
||||||
|
AC_PROG_CC
|
||||||
|
|
||||||
|
# Initialize libtool
|
||||||
|
LT_PREREQ([2.2.6])
|
||||||
|
LT_INIT([disable-static])
|
||||||
|
|
||||||
|
# i18n
|
||||||
|
GETTEXT_PACKAGE=gnome-shell
|
||||||
|
AC_SUBST(GETTEXT_PACKAGE)
|
||||||
|
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE",
|
||||||
|
[The prefix for our gettext translation domains.])
|
||||||
|
|
||||||
|
AM_GNU_GETTEXT_VERSION([0.19.6])
|
||||||
|
AM_GNU_GETTEXT([external])
|
||||||
|
|
||||||
|
PKG_PROG_PKG_CONFIG([0.22])
|
||||||
|
|
||||||
|
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
||||||
|
|
||||||
|
GLIB_GSETTINGS
|
||||||
|
|
||||||
|
# Get a value to substitute into gnome-shell.in
|
||||||
|
AM_PATH_PYTHON([3])
|
||||||
|
AC_SUBST(PYTHON)
|
||||||
|
|
||||||
|
# We depend on a specific version of the libmutter API. The mutter variants of
|
||||||
|
# the Cogl and Clutter libraries also use this API version.
|
||||||
|
LIBMUTTER_API_VERSION=0
|
||||||
|
|
||||||
|
LIBMUTTER=libmutter-$LIBMUTTER_API_VERSION
|
||||||
|
LIBMUTTER_COGL=mutter-cogl-$LIBMUTTER_API_VERSION
|
||||||
|
LIBMUTTER_COGL_PANGO=mutter-cogl-pango-$LIBMUTTER_API_VERSION
|
||||||
|
LIBMUTTER_CLUTTER=mutter-clutter-$LIBMUTTER_API_VERSION
|
||||||
|
|
||||||
|
# We need at least this, since gst_plugin_register_static() was added
|
||||||
|
# in 0.10.16, but nothing older than 0.10.21 has been tested.
|
||||||
|
GSTREAMER_MIN_VERSION=0.11.92
|
||||||
|
|
||||||
|
recorder_modules=
|
||||||
|
build_recorder=false
|
||||||
|
AC_MSG_CHECKING([for GStreamer (needed for recording functionality)])
|
||||||
|
if $PKG_CONFIG --exists gstreamer-1.0 '>=' $GSTREAMER_MIN_VERSION ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
build_recorder=true
|
||||||
|
recorder_modules="gstreamer-1.0 gstreamer-base-1.0 x11 gtk+-3.0"
|
||||||
|
PKG_CHECK_MODULES(TEST_SHELL_RECORDER, $recorder_modules $LIBMUTTER_CLUTTER)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(BUILD_RECORDER, $build_recorder)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([systemd],
|
||||||
|
AS_HELP_STRING([--enable-systemd], [Use systemd]),
|
||||||
|
[enable_systemd=$enableval],
|
||||||
|
[enable_systemd=auto])
|
||||||
|
AS_IF([test x$enable_systemd != xno], [
|
||||||
|
AC_MSG_CHECKING([for libsystemd])
|
||||||
|
PKG_CHECK_EXISTS([libsystemd],
|
||||||
|
[have_systemd=yes
|
||||||
|
AC_DEFINE([HAVE_SYSTEMD], [1], [Define if we have systemd])],
|
||||||
|
[have_systemd=no])
|
||||||
|
AC_MSG_RESULT($have_systemd)
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_MSG_RESULT($enable_systemd)
|
||||||
|
|
||||||
|
GOBJECT_INTROSPECTION_MIN_VERSION=1.49.1
|
||||||
|
GJS_MIN_VERSION=1.47.0
|
||||||
|
MUTTER_MIN_VERSION=3.24.0
|
||||||
|
GTK_MIN_VERSION=3.15.0
|
||||||
|
GIO_MIN_VERSION=2.45.3
|
||||||
|
LIBECAL_MIN_VERSION=3.5.3
|
||||||
|
LIBEDATASERVER_MIN_VERSION=3.17.2
|
||||||
|
POLKIT_MIN_VERSION=0.100
|
||||||
|
STARTUP_NOTIFICATION_MIN_VERSION=0.11
|
||||||
|
GCR_MIN_VERSION=3.7.5
|
||||||
|
GNOME_DESKTOP_REQUIRED_VERSION=3.7.90
|
||||||
|
NETWORKMANAGER_MIN_VERSION=0.9.8
|
||||||
|
PULSE_MIN_VERS=2.0
|
||||||
|
|
||||||
|
# Collect more than 20 libraries for a prize!
|
||||||
|
SHARED_PCS="gio-unix-2.0 >= $GIO_MIN_VERSION
|
||||||
|
libxml-2.0
|
||||||
|
gtk+-3.0 >= $GTK_MIN_VERSION
|
||||||
|
atk-bridge-2.0
|
||||||
|
gjs-1.0 >= $GJS_MIN_VERSION
|
||||||
|
$recorder_modules
|
||||||
|
gdk-x11-3.0 libsoup-2.4
|
||||||
|
$LIBMUTTER_CLUTTER >= $MUTTER_MIN_VERSION
|
||||||
|
$LIBMUTTER_COGL_PANGO
|
||||||
|
libstartup-notification-1.0 >= $STARTUP_NOTIFICATION_MIN_VERSION
|
||||||
|
gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_MIN_VERSION
|
||||||
|
libcanberra libcanberra-gtk3
|
||||||
|
polkit-agent-1 >= $POLKIT_MIN_VERSION
|
||||||
|
gcr-base-3 >= $GCR_MIN_VERSION"
|
||||||
|
if test x$have_systemd = xyes; then
|
||||||
|
SHARED_PCS="${SHARED_PCS} libsystemd"
|
||||||
|
fi
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(GNOME_SHELL, $SHARED_PCS)
|
||||||
|
PKG_CHECK_MODULES(MUTTER, $LIBMUTTER >= $MUTTER_MIN_VERSION)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(GNOME_SHELL_JS, gio-2.0 gjs-1.0 >= $GJS_MIN_VERSION)
|
||||||
|
PKG_CHECK_MODULES(ST, $LIBMUTTER_CLUTTER gtk+-3.0 libcroco-0.6 >= 0.6.8 x11)
|
||||||
|
PKG_CHECK_MODULES(SHELL_PERF_HELPER, gtk+-3.0 gio-2.0)
|
||||||
|
PKG_CHECK_MODULES(SHELL_HOTPLUG_SNIFFER, gio-2.0 gdk-pixbuf-2.0)
|
||||||
|
PKG_CHECK_MODULES(TRAY, $LIBMUTTER_CLUTTER gtk+-3.0)
|
||||||
|
PKG_CHECK_MODULES(GVC, libpulse >= $PULSE_MIN_VERS libpulse-mainloop-glib gobject-2.0)
|
||||||
|
PKG_CHECK_MODULES(DESKTOP_SCHEMAS, gsettings-desktop-schemas >= 3.21.3)
|
||||||
|
|
||||||
|
AC_SUBST(LIBMUTTER_API_VERSION)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(browser-plugin,
|
||||||
|
[AS_HELP_STRING([--enable-browser-plugin],
|
||||||
|
[Enable browser plugin [default=yes]])],,
|
||||||
|
enable_browser_plugin=yes)
|
||||||
|
AS_IF([test x$enable_browser_plugin = xyes], [
|
||||||
|
PKG_CHECK_MODULES(BROWSER_PLUGIN, gio-2.0 >= $GIO_MIN_VERSION json-glib-1.0 >= 0.13.2)
|
||||||
|
])
|
||||||
|
AM_CONDITIONAL(BUILD_BROWSER_PLUGIN, test x$enable_browser_plugin = xyes)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(BLUETOOTH, gnome-bluetooth-1.0 >= 3.9.0,
|
||||||
|
[AC_DEFINE([HAVE_BLUETOOTH],[1],[Define if you have libgnome-bluetooth-applet])
|
||||||
|
AC_SUBST([HAVE_BLUETOOTH],[1])],
|
||||||
|
[AC_DEFINE([HAVE_BLUETOOTH],[0])
|
||||||
|
AC_SUBST([HAVE_BLUETOOTH],[0])])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(CALENDAR_SERVER, libecal-1.2 >= $LIBECAL_MIN_VERSION libedataserver-1.2 >= $LIBEDATASERVER_MIN_VERSION gio-2.0)
|
||||||
|
AC_SUBST(CALENDAR_SERVER_CFLAGS)
|
||||||
|
AC_SUBST(CALENDAR_SERVER_LIBS)
|
||||||
|
|
||||||
|
GNOME_KEYBINDINGS_KEYSDIR=`$PKG_CONFIG --variable keysdir gnome-keybindings`
|
||||||
|
AC_SUBST([GNOME_KEYBINDINGS_KEYSDIR])
|
||||||
|
|
||||||
|
GOBJECT_INTROSPECTION_CHECK([$GOBJECT_INTROSPECTION_MIN_VERSION])
|
||||||
|
|
||||||
|
MUTTER_GIR_DIR=`$PKG_CONFIG --variable=girdir $LIBMUTTER`
|
||||||
|
AC_SUBST(MUTTER_GIR_DIR)
|
||||||
|
|
||||||
|
MUTTER_TYPELIB_DIR=`$PKG_CONFIG --variable=typelibdir $LIBMUTTER`
|
||||||
|
AC_SUBST(MUTTER_TYPELIB_DIR)
|
||||||
|
|
||||||
|
GJS_CONSOLE=`$PKG_CONFIG --variable=gjs_console gjs-1.0`
|
||||||
|
AC_SUBST(GJS_CONSOLE)
|
||||||
|
|
||||||
|
GLIB_COMPILE_RESOURCES=`$PKG_CONFIG --variable glib_compile_resources gio-2.0`
|
||||||
|
AC_SUBST(GLIB_COMPILE_RESOURCES)
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS(fdwalk)
|
||||||
|
AC_CHECK_FUNCS(mallinfo)
|
||||||
|
AC_CHECK_HEADERS([sys/resource.h])
|
||||||
|
|
||||||
|
# _NL_TIME_FIRST_WEEKDAY is an enum and not a define
|
||||||
|
AC_MSG_CHECKING([for _NL_TIME_FIRST_WEEKDAY])
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
|
||||||
|
[[nl_langinfo(_NL_TIME_FIRST_WEEKDAY);]])],
|
||||||
|
[langinfo_ok=yes], [langinfo_ok=no])
|
||||||
|
AC_MSG_RESULT($langinfo_ok)
|
||||||
|
if test "$langinfo_ok" = "yes"; then
|
||||||
|
AC_DEFINE([HAVE__NL_TIME_FIRST_WEEKDAY], [1],
|
||||||
|
[Define if _NL_TIME_FIRST_WEEKDAY is available])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(networkmanager,
|
||||||
|
AS_HELP_STRING([--disable-networkmanager],
|
||||||
|
[disable NetworkManager support @<:@default=auto@:>@]),,
|
||||||
|
[enable_networkmanager=auto])
|
||||||
|
|
||||||
|
if test "x$enable_networkmanager" != "xno"; then
|
||||||
|
PKG_CHECK_MODULES(NETWORKMANAGER,
|
||||||
|
[libnm-glib
|
||||||
|
libnm-util >= $NETWORKMANAGER_MIN_VERSION
|
||||||
|
libnm-gtk >= $NETWORKMANAGER_MIN_VERSION
|
||||||
|
libsecret-unstable],
|
||||||
|
[have_networkmanager=yes],
|
||||||
|
[have_networkmanager=no])
|
||||||
|
|
||||||
|
GNOME_SHELL_CFLAGS="$GNOME_SHELL_CFLAGS $NETWORKMANAGER_CFLAGS"
|
||||||
|
GNOME_SHELL_LIBS="$GNOME_SHELL_LIBS $NETWORKMANAGER_LIBS"
|
||||||
|
else
|
||||||
|
have_networkmanager="no (disabled)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$have_networkmanager" = "xyes"; then
|
||||||
|
AC_DEFINE(HAVE_NETWORKMANAGER, [1], [Define if we have NetworkManager])
|
||||||
|
AC_SUBST([HAVE_NETWORKMANAGER], [1])
|
||||||
|
else
|
||||||
|
if test "x$enable_networkmanager" = "xyes"; then
|
||||||
|
AC_MSG_ERROR([Couldn't find NetworkManager.])
|
||||||
|
fi
|
||||||
|
AC_SUBST([HAVE_NETWORKMANAGER], [0])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(HAVE_NETWORKMANAGER, test "$have_networkmanager" = "yes")
|
||||||
|
|
||||||
|
# Sets GLIB_GENMARSHAL and GLIB_MKENUMS
|
||||||
|
AM_PATH_GLIB_2_0()
|
||||||
|
|
||||||
|
GTK_DOC_CHECK([1.15], [--flavour no-tmpl])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(man,
|
||||||
|
[AS_HELP_STRING([--enable-man],
|
||||||
|
[generate man pages [default=yes]])],,
|
||||||
|
enable_man=yes)
|
||||||
|
if test "$enable_man" != no; then
|
||||||
|
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
||||||
|
if test -z "$XSLTPROC"; then
|
||||||
|
AC_MSG_ERROR([xsltproc is required for --enable-man])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
|
||||||
|
|
||||||
|
AX_COMPILER_FLAGS()
|
||||||
|
case "$WARN_CFLAGS" in
|
||||||
|
*-Werror*)
|
||||||
|
WARN_CFLAGS="$WARN_CFLAGS -Wno-error=deprecated-declarations"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AM_CFLAGS="$AM_CFLAGS $WARN_CFLAGS"
|
||||||
|
AC_SUBST(AM_CFLAGS)
|
||||||
|
|
||||||
|
if test -z "${BROWSER_PLUGIN_DIR}"; then
|
||||||
|
BROWSER_PLUGIN_DIR="\${libdir}/mozilla/plugins"
|
||||||
|
fi
|
||||||
|
AC_ARG_VAR([BROWSER_PLUGIN_DIR],[Where to install the plugin to])
|
||||||
|
|
||||||
|
AC_ARG_VAR([GDBUS_CODEGEN],[the gdbus-codegen programme])
|
||||||
|
AC_PATH_PROG([GDBUS_CODEGEN],[gdbus-codegen],[])
|
||||||
|
if test -z "$GDBUS_CODEGEN"; then
|
||||||
|
AC_MSG_ERROR([gdbus-codegen not found])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PATH_PROG([SASS],[sass],[])
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
Makefile
|
||||||
|
data/Makefile
|
||||||
|
docs/Makefile
|
||||||
|
docs/reference/Makefile
|
||||||
|
docs/reference/shell/Makefile
|
||||||
|
docs/reference/shell/shell-docs.sgml
|
||||||
|
docs/reference/st/Makefile
|
||||||
|
docs/reference/st/st-docs.sgml
|
||||||
|
js/Makefile
|
||||||
|
src/Makefile
|
||||||
|
src/gvc/Makefile
|
||||||
|
browser-plugin/Makefile
|
||||||
|
tests/Makefile
|
||||||
|
po/Makefile.in
|
||||||
|
man/Makefile
|
||||||
|
])
|
||||||
|
AC_OUTPUT
|
||||||
|
|
||||||
|
echo "
|
||||||
|
Build configuration:
|
||||||
|
|
||||||
|
Prefix: ${prefix}
|
||||||
|
Source code location: ${srcdir}
|
||||||
|
Compiler: ${CC}
|
||||||
|
Compiler Warnings: $ax_enable_compile_warnings
|
||||||
|
|
||||||
|
Support for NetworkManager: $have_networkmanager
|
||||||
|
Support for GStreamer recording: $build_recorder
|
||||||
|
"
|
137
data/Makefile.am
Normal file
137
data/Makefile.am
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
CLEANFILES =
|
||||||
|
NULL =
|
||||||
|
|
||||||
|
desktopdir=$(datadir)/applications
|
||||||
|
desktop_DATA = org.gnome.Shell.desktop gnome-shell-extension-prefs.desktop
|
||||||
|
|
||||||
|
if HAVE_NETWORKMANAGER
|
||||||
|
desktop_DATA += org.gnome.Shell.PortalHelper.desktop
|
||||||
|
|
||||||
|
portaldir = $(datadir)/xdg-desktop-portal/portals
|
||||||
|
portal_DATA = gnome-shell.portal
|
||||||
|
|
||||||
|
servicedir = $(datadir)/dbus-1/services
|
||||||
|
service_DATA = org.gnome.Shell.PortalHelper.service
|
||||||
|
|
||||||
|
CLEANFILES += \
|
||||||
|
org.gnome.Shell.PortalHelper.service \
|
||||||
|
org.gnome.Shell.PortalHelper.desktop \
|
||||||
|
org.gnome.Shell.PortalHelper.desktop.in \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.service: %.service.in
|
||||||
|
$(AM_V_GEN) sed -e "s|@libexecdir[@]|$(libexecdir)|" \
|
||||||
|
$< > $@ || rm $@
|
||||||
|
|
||||||
|
# We substitute in bindir so it works as an autostart
|
||||||
|
# file when built in a non-system prefix
|
||||||
|
%.desktop.in:%.desktop.in.in
|
||||||
|
$(AM_V_GEN) sed -e "s|@bindir[@]|$(bindir)|" \
|
||||||
|
-e "s|@VERSION[@]|$(VERSION)|" \
|
||||||
|
$< > $@ || rm $@
|
||||||
|
|
||||||
|
%.desktop:%.desktop.in
|
||||||
|
$(AM_V_GEN) $(MSGFMT) --desktop --template $(builddir)/$< \
|
||||||
|
-d $(top_srcdir)/po -o $@
|
||||||
|
|
||||||
|
introspectiondir = $(datadir)/dbus-1/interfaces
|
||||||
|
introspection_DATA = \
|
||||||
|
org.gnome.Shell.PadOsd.xml \
|
||||||
|
org.gnome.Shell.Screencast.xml \
|
||||||
|
org.gnome.Shell.Screenshot.xml \
|
||||||
|
org.gnome.ShellSearchProvider.xml \
|
||||||
|
org.gnome.ShellSearchProvider2.xml \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
theme_sources = \
|
||||||
|
theme/gnome-shell-high-contrast.scss \
|
||||||
|
theme/gnome-shell.scss \
|
||||||
|
theme/gnome-shell-sass/_colors.scss \
|
||||||
|
theme/gnome-shell-sass/_common.scss \
|
||||||
|
theme/gnome-shell-sass/_drawing.scss \
|
||||||
|
theme/gnome-shell-sass/_high-contrast-colors.scss \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
dist_theme_files = \
|
||||||
|
$(theme_sources) \
|
||||||
|
theme/Gemfile \
|
||||||
|
theme/HACKING \
|
||||||
|
theme/README \
|
||||||
|
theme/gnome-shell-sass/COPYING \
|
||||||
|
theme/gnome-shell-sass/HACKING \
|
||||||
|
theme/gnome-shell-sass/NEWS \
|
||||||
|
theme/gnome-shell-sass/README \
|
||||||
|
theme/gnome-shell-sass/gnome-shell-sass.doap \
|
||||||
|
theme/pad-osd.css \
|
||||||
|
theme/parse-sass.sh \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
%.css: %.scss $(theme_sources)
|
||||||
|
@if test -n "$(SASS)"; then \
|
||||||
|
if $(AM_V_P); then PS4= set -x; else echo " GEN $@"; fi; \
|
||||||
|
$(SASS) --sourcemap=none -f -q --update $<; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir)/theme --generate-dependencies $(srcdir)/gnome-shell-theme.gresource.xml)
|
||||||
|
gnome-shell-theme.gresource: gnome-shell-theme.gresource.xml $(resource_files)
|
||||||
|
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir)/theme $<
|
||||||
|
resourcedir = $(pkgdatadir)
|
||||||
|
resource_DATA = gnome-shell-theme.gresource
|
||||||
|
|
||||||
|
backgrounddir = $(pkgdatadir)
|
||||||
|
background_DATA = perf-background.xml
|
||||||
|
|
||||||
|
perf-background.xml: perf-background.xml.in
|
||||||
|
$(AM_V_GEN) sed -e "s|@datadir[@]|$(datadir)|" \
|
||||||
|
$< > $@ || rm $@
|
||||||
|
|
||||||
|
keysdir = @GNOME_KEYBINDINGS_KEYSDIR@
|
||||||
|
keys_DATA = 50-gnome-shell-system.xml
|
||||||
|
|
||||||
|
gsettings_SCHEMAS = org.gnome.shell.gschema.xml
|
||||||
|
|
||||||
|
%.gschema.xml: %.gschema.xml.in Makefile
|
||||||
|
$(AM_V_GEN) sed -e 's|@GETTEXT_PACKAGE[@]|$(GETTEXT_PACKAGE)|g' \
|
||||||
|
$< > $@ || rm $@
|
||||||
|
|
||||||
|
@GSETTINGS_RULES@
|
||||||
|
|
||||||
|
# We need to compile schemas at make time
|
||||||
|
# to run from source tree
|
||||||
|
gschemas.compiled: $(gsettings_SCHEMAS:.xml=.valid)
|
||||||
|
$(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --targetdir=. .
|
||||||
|
|
||||||
|
all-local: gschemas.compiled
|
||||||
|
|
||||||
|
convertdir = $(datadir)/GConf/gsettings
|
||||||
|
convert_DATA = gnome-shell-overrides.convert
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
org.gnome.Shell.desktop.in.in \
|
||||||
|
gnome-shell-extension-prefs.desktop.in.in \
|
||||||
|
$(portal_DATA) \
|
||||||
|
$(introspection_DATA) \
|
||||||
|
$(menu_DATA) \
|
||||||
|
$(convert_DATA) \
|
||||||
|
$(keys_DATA) \
|
||||||
|
$(dist_theme_files) \
|
||||||
|
perf-background.xml.in \
|
||||||
|
org.gnome.Shell.PortalHelper.desktop.in.in \
|
||||||
|
org.gnome.Shell.PortalHelper.service.in \
|
||||||
|
org.gnome.shell.gschema.xml.in \
|
||||||
|
gnome-shell-theme.gresource.xml \
|
||||||
|
$(resource_files) \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CLEANFILES += \
|
||||||
|
org.gnome.Shell.desktop.in \
|
||||||
|
gnome-shell-extension-prefs.in \
|
||||||
|
$(desktop_DATA) \
|
||||||
|
$(gsettings_SCHEMAS) \
|
||||||
|
perf-background.xml \
|
||||||
|
gschemas.compiled \
|
||||||
|
org.gnome.shell.gschema.valid \
|
||||||
|
gnome-shell-theme.gresource \
|
||||||
|
$(NULL)
|
@ -9,8 +9,6 @@
|
|||||||
<file>checkbox-off.svg</file>
|
<file>checkbox-off.svg</file>
|
||||||
<file>checkbox.svg</file>
|
<file>checkbox.svg</file>
|
||||||
<file>close-window.svg</file>
|
<file>close-window.svg</file>
|
||||||
<file>close-window-active.svg</file>
|
|
||||||
<file>close-window-hover.svg</file>
|
|
||||||
<file>close.svg</file>
|
<file>close.svg</file>
|
||||||
<file>corner-ripple-ltr.png</file>
|
<file>corner-ripple-ltr.png</file>
|
||||||
<file>corner-ripple-rtl.png</file>
|
<file>corner-ripple-rtl.png</file>
|
||||||
@ -20,7 +18,7 @@
|
|||||||
<file>gnome-shell.css</file>
|
<file>gnome-shell.css</file>
|
||||||
<file>gnome-shell-high-contrast.css</file>
|
<file>gnome-shell-high-contrast.css</file>
|
||||||
<file>logged-in-indicator.svg</file>
|
<file>logged-in-indicator.svg</file>
|
||||||
<file alias="icons/message-indicator-symbolic.svg">message-indicator-symbolic.svg</file>
|
<file>more-results.svg</file>
|
||||||
<file>no-events.svg</file>
|
<file>no-events.svg</file>
|
||||||
<file>no-notifications.svg</file>
|
<file>no-notifications.svg</file>
|
||||||
<file>noise-texture.png</file>
|
<file>noise-texture.png</file>
|
||||||
|
@ -1,95 +0,0 @@
|
|||||||
desktop_files = [
|
|
||||||
'org.gnome.Shell.desktop',
|
|
||||||
'gnome-shell-extension-prefs.desktop'
|
|
||||||
]
|
|
||||||
service_files = []
|
|
||||||
|
|
||||||
if have_networkmanager
|
|
||||||
desktop_files += 'org.gnome.Shell.PortalHelper.desktop'
|
|
||||||
service_files += 'org.gnome.Shell.PortalHelper.service'
|
|
||||||
endif
|
|
||||||
|
|
||||||
desktopconf = configuration_data()
|
|
||||||
# We substitute in bindir so it works as an autostart
|
|
||||||
# file when built in a non-system prefix
|
|
||||||
desktopconf.set('bindir', bindir)
|
|
||||||
desktopconf.set('VERSION', meson.project_version())
|
|
||||||
foreach desktop_file : desktop_files
|
|
||||||
i18n.merge_file('desktop',
|
|
||||||
input: configure_file(
|
|
||||||
input: desktop_file + '.in.in',
|
|
||||||
output: desktop_file + '.in',
|
|
||||||
configuration: desktopconf
|
|
||||||
),
|
|
||||||
output: desktop_file,
|
|
||||||
po_dir: '../po',
|
|
||||||
install: true,
|
|
||||||
install_dir: desktopdir,
|
|
||||||
type: 'desktop'
|
|
||||||
)
|
|
||||||
endforeach
|
|
||||||
|
|
||||||
serviceconf = configuration_data()
|
|
||||||
serviceconf.set('libexecdir', libexecdir)
|
|
||||||
foreach service_file : service_files
|
|
||||||
configure_file(
|
|
||||||
input: service_file + '.in',
|
|
||||||
output: service_file,
|
|
||||||
configuration: serviceconf,
|
|
||||||
install_dir: servicedir
|
|
||||||
)
|
|
||||||
endforeach
|
|
||||||
|
|
||||||
|
|
||||||
dbus_interfaces = [
|
|
||||||
'org.gnome.Shell.PadOsd.xml',
|
|
||||||
'org.gnome.Shell.Screencast.xml',
|
|
||||||
'org.gnome.Shell.Screenshot.xml',
|
|
||||||
'org.gnome.ShellSearchProvider.xml',
|
|
||||||
'org.gnome.ShellSearchProvider2.xml'
|
|
||||||
]
|
|
||||||
install_data(dbus_interfaces, install_dir: ifacedir)
|
|
||||||
|
|
||||||
|
|
||||||
subdir('theme')
|
|
||||||
|
|
||||||
theme_resources = gnome.compile_resources(
|
|
||||||
'gnome-shell-theme', 'gnome-shell-theme.gresource.xml',
|
|
||||||
source_dir: 'theme',
|
|
||||||
dependencies: theme_deps,
|
|
||||||
gresource_bundle: true,
|
|
||||||
install: true,
|
|
||||||
install_dir: pkgdatadir
|
|
||||||
)
|
|
||||||
|
|
||||||
perfconf = configuration_data()
|
|
||||||
perfconf.set('datadir', datadir)
|
|
||||||
configure_file(
|
|
||||||
input: 'perf-background.xml.in',
|
|
||||||
output: 'perf-background.xml',
|
|
||||||
configuration: perfconf,
|
|
||||||
install_dir: pkgdatadir
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
install_data('gnome-shell.portal', install_dir: portaldir)
|
|
||||||
install_data('50-gnome-shell-system.xml', install_dir: keysdir)
|
|
||||||
|
|
||||||
|
|
||||||
schemaconf = configuration_data()
|
|
||||||
schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
|
|
||||||
schema = configure_file(
|
|
||||||
input: 'org.gnome.shell.gschema.xml.in',
|
|
||||||
output: 'org.gnome.shell.gschema.xml',
|
|
||||||
configuration: schemaconf,
|
|
||||||
install_dir: schemadir
|
|
||||||
)
|
|
||||||
|
|
||||||
# for unit tests - gnome.compile_schemas() only looks in srcdir
|
|
||||||
custom_target('compile-schemas',
|
|
||||||
input: schema,
|
|
||||||
output: 'gschemas.compiled',
|
|
||||||
command: [find_program('glib-compile-schemas'), meson.current_build_dir()],
|
|
||||||
build_by_default: true)
|
|
||||||
|
|
||||||
install_data('gnome-shell-overrides.convert', install_dir: convertdir)
|
|
1
data/theme/Gemfile
Normal file
1
data/theme/Gemfile
Normal file
@ -0,0 +1 @@
|
|||||||
|
gem "sass", "~> 3.4.0"
|
@ -3,10 +3,10 @@ Summary
|
|||||||
|
|
||||||
* Do not edit the CSS directly, edit the source SCSS files and process them with SASS (running
|
* Do not edit the CSS directly, edit the source SCSS files and process them with SASS (running
|
||||||
`make` should do that when you have the required software installed, as described below;
|
`make` should do that when you have the required software installed, as described below;
|
||||||
run `./parse-sass.sh` manually if it doesn't)
|
run `/.parse-sass.sh` manually if it doesn't)
|
||||||
* Most SASS preprocessors should produce similar results, however the build system
|
* To be able to use the lates/adequate version of sass, install ruby, gem, sass & bundle.
|
||||||
integration and 'parse-sass.sh' script use sassc. You should be able to install
|
On Fedora F20, this is done with `sudo dnf install rubygems && gem install bundle && bundle install`
|
||||||
it with `pkcon install sassc` or your distribution's package manager.
|
from the same directory this README resides in.
|
||||||
|
|
||||||
How to tweak the theme
|
How to tweak the theme
|
||||||
----------------------
|
----------------------
|
||||||
@ -31,4 +31,6 @@ _common.scss - actual definitions of style for each widget. This is where
|
|||||||
your changes.
|
your changes.
|
||||||
|
|
||||||
You can read about SASS at http://sass-lang.com/documentation/. Once you make your changes to the
|
You can read about SASS at http://sass-lang.com/documentation/. Once you make your changes to the
|
||||||
_common.scss file, you can either run make or the ./parse-sass.sh script.
|
_common.scss file, you can either run the ./parse-sass.sh script or keep SASS watching for changes as you
|
||||||
|
edit. This is done by running `bundle exec sass --watch --sourcemap=none .` If sass is out of date, or is
|
||||||
|
missing, you can install it with `bundle install`.
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
|
||||||
|
|
||||||
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
version="1.0"
|
|
||||||
id="Foreground"
|
|
||||||
x="0px"
|
|
||||||
y="0px"
|
|
||||||
width="32"
|
|
||||||
height="32"
|
|
||||||
viewBox="0 0 32 32"
|
|
||||||
enable-background="new 0 0 16 16"
|
|
||||||
xml:space="preserve"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
|
|
||||||
sodipodi:docname="close-window-active.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
|
||||||
id="metadata2399"><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><defs
|
|
||||||
id="defs2397"><linearGradient
|
|
||||||
id="linearGradient3173"><stop
|
|
||||||
style="stop-color:#c4c4c4;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3175" /><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop3177" /></linearGradient><inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 11 : 1"
|
|
||||||
inkscape:vp_y="0 : 1375 : 0"
|
|
||||||
inkscape:vp_z="22 : 11 : 1"
|
|
||||||
inkscape:persp3d-origin="11 : 7.3333334 : 1"
|
|
||||||
id="perspective2401" /></defs><sodipodi:namedview
|
|
||||||
inkscape:window-height="1106"
|
|
||||||
inkscape:window-width="1700"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
guidetolerance="10.0"
|
|
||||||
gridtolerance="10.0"
|
|
||||||
objecttolerance="10.0"
|
|
||||||
borderopacity="1.0"
|
|
||||||
bordercolor="#666666"
|
|
||||||
pagecolor="#797979"
|
|
||||||
id="base"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="4"
|
|
||||||
inkscape:cx="28.483745"
|
|
||||||
inkscape:cy="67.714004"
|
|
||||||
inkscape:window-x="1427"
|
|
||||||
inkscape:window-y="127"
|
|
||||||
inkscape:current-layer="Foreground"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:document-rotation="0"><inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid11246"
|
|
||||||
empspacing="32"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
|
|
||||||
d="m 4.4362021,16 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 C 9.6090297,27.607281 4.4362021,22.410122 4.4362021,16 Z"
|
|
||||||
id="path883"
|
|
||||||
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#a5c8ec;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
|
||||||
sodipodi:nodetypes="csssc"
|
|
||||||
inkscape:connector-curvature="0" /><path
|
|
||||||
d="m 11.718386,11.764547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,16.018351 12.015167,13.61116 C 11.79279,13.405784 11.69527,13.116003 11.71839,12.819755 Z"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path887"
|
|
||||||
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
|
|
||||||
sodipodi:nodetypes="ccsccccccccccccccccccccccc" /></svg>
|
|
Before Width: | Height: | Size: 4.6 KiB |
@ -1,81 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
|
||||||
|
|
||||||
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
version="1.0"
|
|
||||||
id="Foreground"
|
|
||||||
x="0px"
|
|
||||||
y="0px"
|
|
||||||
width="32"
|
|
||||||
height="32"
|
|
||||||
viewBox="0 0 32 32"
|
|
||||||
enable-background="new 0 0 16 16"
|
|
||||||
xml:space="preserve"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
|
|
||||||
sodipodi:docname="close-window-hover.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
|
||||||
id="metadata2399"><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><defs
|
|
||||||
id="defs2397"><linearGradient
|
|
||||||
id="linearGradient3173"><stop
|
|
||||||
style="stop-color:#c4c4c4;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3175" /><stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop3177" /></linearGradient><inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 11 : 1"
|
|
||||||
inkscape:vp_y="0 : 1375 : 0"
|
|
||||||
inkscape:vp_z="22 : 11 : 1"
|
|
||||||
inkscape:persp3d-origin="11 : 7.3333334 : 1"
|
|
||||||
id="perspective2401" /></defs><sodipodi:namedview
|
|
||||||
inkscape:window-height="1106"
|
|
||||||
inkscape:window-width="1700"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
guidetolerance="10.0"
|
|
||||||
gridtolerance="10.0"
|
|
||||||
objecttolerance="10.0"
|
|
||||||
borderopacity="1.0"
|
|
||||||
bordercolor="#666666"
|
|
||||||
pagecolor="#797979"
|
|
||||||
id="base"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="4"
|
|
||||||
inkscape:cx="28.483745"
|
|
||||||
inkscape:cy="67.714004"
|
|
||||||
inkscape:window-x="1427"
|
|
||||||
inkscape:window-y="127"
|
|
||||||
inkscape:current-layer="Foreground"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
borderlayer="true"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:document-rotation="0"><inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid11246"
|
|
||||||
empspacing="32"
|
|
||||||
visible="true"
|
|
||||||
enabled="true"
|
|
||||||
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
sodipodi:nodetypes="csssc"
|
|
||||||
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#2975c4;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
|
||||||
id="path822"
|
|
||||||
d="m 4.4362021,16 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 C 9.6090297,27.607281 4.4362021,22.410122 4.4362021,16 Z" /><path
|
|
||||||
sodipodi:nodetypes="ccsccccccccccccccccccccccc"
|
|
||||||
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
|
|
||||||
id="path826"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 11.718386,11.764547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,16.018351 12.015167,13.61116 C 11.79279,13.405784 11.69527,13.116003 11.71839,12.819755 Z" /></svg>
|
|
Before Width: | Height: | Size: 4.6 KiB |
@ -7,6 +7,7 @@
|
|||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
version="1.0"
|
version="1.0"
|
||||||
@ -15,71 +16,137 @@
|
|||||||
y="0px"
|
y="0px"
|
||||||
width="32"
|
width="32"
|
||||||
height="32"
|
height="32"
|
||||||
viewBox="0 0 32 32"
|
viewBox="0 0 23.272727 23.272727"
|
||||||
enable-background="new 0 0 16 16"
|
enable-background="new 0 0 16 16"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
sodipodi:version="0.32"
|
sodipodi:version="0.32"
|
||||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
|
inkscape:version="0.48+devel r10081 custom"
|
||||||
sodipodi:docname="close-window.svg"
|
sodipodi:docname="close-window.svg"
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
|
||||||
id="metadata2399"><rdf:RDF><cc:Work
|
id="metadata2399"><rdf:RDF><cc:Work
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
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><defs
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||||
id="defs2397"><linearGradient
|
id="defs2397"><linearGradient
|
||||||
id="linearGradient3173"><stop
|
id="linearGradient3173"><stop
|
||||||
style="stop-color:#c4c4c4;stop-opacity:1;"
|
style="stop-color:#c4c4c4;stop-opacity:1;"
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop3175" /><stop
|
id="stop3175" /><stop
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop3177" /></linearGradient><inkscape:perspective
|
id="stop3177" /></linearGradient><inkscape:perspective
|
||||||
sodipodi:type="inkscape:persp3d"
|
sodipodi:type="inkscape:persp3d"
|
||||||
inkscape:vp_x="0 : 11 : 1"
|
inkscape:vp_x="0 : 8 : 1"
|
||||||
inkscape:vp_y="0 : 1375 : 0"
|
inkscape:vp_y="0 : 1000 : 0"
|
||||||
inkscape:vp_z="22 : 11 : 1"
|
inkscape:vp_z="16 : 8 : 1"
|
||||||
inkscape:persp3d-origin="11 : 7.3333334 : 1"
|
inkscape:persp3d-origin="8 : 5.3333333 : 1"
|
||||||
id="perspective2401" /></defs><sodipodi:namedview
|
id="perspective2401" /><filter
|
||||||
inkscape:window-height="1106"
|
color-interpolation-filters="sRGB"
|
||||||
inkscape:window-width="1700"
|
inkscape:collect="always"
|
||||||
inkscape:pageshadow="2"
|
id="filter16494-4"
|
||||||
inkscape:pageopacity="0"
|
x="-0.20989846"
|
||||||
guidetolerance="10.0"
|
width="1.4197969"
|
||||||
gridtolerance="10.0"
|
y="-0.20903821"
|
||||||
objecttolerance="10.0"
|
height="1.4180764"><feGaussianBlur
|
||||||
borderopacity="1.0"
|
inkscape:collect="always"
|
||||||
bordercolor="#666666"
|
stdDeviation="1.3282637"
|
||||||
pagecolor="#797979"
|
id="feGaussianBlur16496-8" /></filter><radialGradient
|
||||||
id="base"
|
inkscape:collect="always"
|
||||||
showgrid="false"
|
xlink:href="#linearGradient16498-6"
|
||||||
inkscape:zoom="4"
|
id="radialGradient16504-1"
|
||||||
inkscape:cx="28.483745"
|
cx="7.6582627"
|
||||||
inkscape:cy="67.714004"
|
cy="5.8191104"
|
||||||
inkscape:window-x="1427"
|
fx="7.6582627"
|
||||||
inkscape:window-y="127"
|
fy="5.8191104"
|
||||||
inkscape:current-layer="Foreground"
|
r="8.6928644"
|
||||||
showguides="true"
|
gradientTransform="matrix(1.0474339,0,0,1.0517402,-0.3632615,-0.42032492)"
|
||||||
inkscape:guide-bbox="true"
|
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||||
borderlayer="true"
|
inkscape:collect="always"
|
||||||
inkscape:showpageshadow="false"
|
id="linearGradient16498-6"><stop
|
||||||
inkscape:window-maximized="0"
|
style="stop-color:#7b7b7b;stop-opacity:1"
|
||||||
inkscape:document-rotation="0"><inkscape:grid
|
offset="0"
|
||||||
type="xygrid"
|
id="stop16500-8" /><stop
|
||||||
id="grid11246"
|
style="stop-color:#101010;stop-opacity:1"
|
||||||
empspacing="32"
|
offset="1"
|
||||||
visible="true"
|
id="stop16502-0" /></linearGradient><filter
|
||||||
enabled="true"
|
color-interpolation-filters="sRGB"
|
||||||
snapvisiblegridlinesonly="true" /></sodipodi:namedview><path
|
inkscape:collect="always"
|
||||||
d="m 4.4362021,15.860384 c 0,-6.410121 5.1728276,-11.60728 11.5529359,-11.60728 6.380109,0 11.552937,5.197159 11.552937,11.60728 0,6.410122 -5.172828,11.607281 -11.552937,11.607281 -6.3801083,0 -11.5529359,-5.197159 -11.5529359,-11.607281 z"
|
id="filter16524-9"
|
||||||
id="path2394-32"
|
x="-0.212979"
|
||||||
style="color:#000000;clip-rule:evenodd;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#2975c4;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
width="1.425958"
|
||||||
sodipodi:nodetypes="csssc"
|
y="-0.21305652"
|
||||||
inkscape:connector-curvature="0" /><path
|
height="1.426113"><feGaussianBlur
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.49900004;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.74932218;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
inkscape:collect="always"
|
||||||
d="m 6.4654832,15.001321 c -0.025906,0.288419 -0.044417,0.579469 -0.044417,0.874662 0,5.313347 4.2883848,9.621271 9.5768588,9.621271 5.288466,0 9.575143,-4.307924 9.575143,-9.621271 0,-0.295193 -0.01852,-0.586243 -0.04441,-0.874662 -0.440376,4.903023 -4.536071,8.746611 -9.53073,8.746611 -4.994659,0 -9.0920617,-3.843588 -9.5324391,-8.746611 z"
|
stdDeviation="0.71020915"
|
||||||
id="path2561"
|
id="feGaussianBlur16526-0" /></filter></defs><sodipodi:namedview
|
||||||
inkscape:connector-curvature="0" /><path
|
inkscape:window-height="1114"
|
||||||
d="m 11.718386,11.639547 h 1.055207 c 0.01091,-1.26e-4 0.02193,-4.86e-4 0.03298,0 0.269026,0.01183 0.538019,0.135679 0.725455,0.329752 l 2.407192,2.407192 2.440166,-2.407192 c 0.28029,-0.243226 0.471333,-0.322366 0.725455,-0.329752 h 1.055207 v 1.055208 c 0,0.302285 -0.03623,0.581049 -0.263801,0.791405 l -2.407191,2.407191 2.374217,2.374216 c 0.198577,0.198559 0.296768,0.478484 0.296775,0.758432 v 1.055206 h -1.055211 c -0.279947,-10e-6 -0.559877,-0.09824 -0.75843,-0.296777 l -2.407192,-2.407192 -2.407192,2.407192 c -0.198551,0.198579 -0.478493,0.296777 -0.758429,0.296777 H 11.71839 v -1.055206 c -3e-6,-0.279936 0.0982,-0.559873 0.296777,-0.758432 L 14.422359,15.893351 12.015167,13.48616 C 11.79279,13.280784 11.69527,12.991003 11.71839,12.694755 Z"
|
inkscape:window-width="1463"
|
||||||
inkscape:connector-curvature="0"
|
inkscape:pageshadow="2"
|
||||||
id="path27279-0-5"
|
inkscape:pageopacity="0"
|
||||||
style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:'Andale Mono';-inkscape-font-specification:'Andale Mono';text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#4a90d9;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.87958801;marker:none;enable-background:new"
|
guidetolerance="10.0"
|
||||||
sodipodi:nodetypes="ccsccccccccccccccccccccccc" /></svg>
|
gridtolerance="10.0"
|
||||||
|
objecttolerance="10.0"
|
||||||
|
borderopacity="1.0"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#000000"
|
||||||
|
id="base"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="10.720189"
|
||||||
|
inkscape:cy="13.739577"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="26"
|
||||||
|
inkscape:current-layer="Foreground"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
inkscape:window-maximized="0"><inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid11246"
|
||||||
|
empspacing="5"
|
||||||
|
visible="true"
|
||||||
|
enabled="true"
|
||||||
|
snapvisiblegridlinesonly="true" /></sodipodi:namedview>
|
||||||
|
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
id="g16402-8"
|
||||||
|
transform="translate(4.7533483,2.8238929)"><g
|
||||||
|
id="g3175-4"><path
|
||||||
|
sodipodi:type="inkscape:offset"
|
||||||
|
inkscape:radius="0"
|
||||||
|
inkscape:original="M 7.65625 0.125 C 3.2589349 0.125 -0.3125 3.7070002 -0.3125 8.125 C -0.3125 12.543001 3.2589349 16.125 7.65625 16.125 C 12.053566 16.125 15.625 12.543001 15.625 8.125 C 15.625 3.7070002 12.053566 0.125 7.65625 0.125 z "
|
||||||
|
xlink:href="#path2394-32"
|
||||||
|
style="opacity:0.52994014;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.18181825;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16494-4);enable-background:accumulate"
|
||||||
|
id="path16480-5"
|
||||||
|
inkscape:href="#path2394-32"
|
||||||
|
d="m 7.65625,0.125 c -4.3973151,0 -7.96875,3.5820002 -7.96875,8 0,4.418001 3.5714349,8 7.96875,8 4.397316,0 7.96875,-3.581999 7.96875,-8 0,-4.4179998 -3.571434,-8 -7.96875,-8 z"
|
||||||
|
transform="translate(0,1.028519)" /><path
|
||||||
|
clip-rule="evenodd"
|
||||||
|
d="m -0.30428257,8.1237596 c 0,-4.4179998 3.56522987,-7.9999996 7.96254497,-7.9999996 4.3973156,0 7.9625456,3.5819998 7.9625456,7.9999996 0,4.4180014 -3.56523,8.0000004 -7.9625456,8.0000004 -4.3973151,0 -7.96254497,-3.581999 -7.96254497,-8.0000004 z"
|
||||||
|
id="path2394-32"
|
||||||
|
style="color:#000000;fill:url(#radialGradient16504-1);fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1.4545455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||||
|
sodipodi:nodetypes="csssc"
|
||||||
|
inkscape:connector-curvature="0" /><g
|
||||||
|
id="g3172-6" /></g><g
|
||||||
|
transform="matrix(0.72727273,0,0,0.72727273,2.368236,2.1803254)"
|
||||||
|
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||||
|
id="g27275-6-6"
|
||||||
|
inkscape:label="window-close"><g
|
||||||
|
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||||
|
id="g27277-1-1"
|
||||||
|
transform="translate(-41,-760)"><path
|
||||||
|
sodipodi:type="inkscape:offset"
|
||||||
|
inkscape:radius="0"
|
||||||
|
inkscape:original="M 44.21875 764.1875 L 44.21875 765.1875 C 44.19684 765.46825 44.289258 765.74287 44.5 765.9375 L 46.78125 768.21875 L 44.5 770.46875 C 44.31181 770.65692 44.218747 770.92221 44.21875 771.1875 L 44.21875 772.1875 L 45.21875 772.1875 C 45.48404 772.1875 45.749336 772.09444 45.9375 771.90625 L 48.21875 769.625 L 50.5 771.90625 C 50.688164 772.0944 50.953449 772.18749 51.21875 772.1875 L 52.21875 772.1875 L 52.21875 771.1875 C 52.218742 770.9222 52.125688 770.65692 51.9375 770.46875 L 49.6875 768.21875 L 51.96875 765.9375 C 52.18441 765.73815 52.21875 765.47397 52.21875 765.1875 L 52.21875 764.1875 L 51.21875 764.1875 C 50.977922 764.1945 50.796875 764.2695 50.53125 764.5 L 48.21875 766.78125 L 45.9375 764.5 C 45.75987 764.31608 45.504951 764.1987 45.25 764.1875 C 45.23954 764.18704 45.22912 764.18738 45.21875 764.1875 L 44.21875 764.1875 z "
|
||||||
|
xlink:href="#path27279-0-5"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter16524-9);enable-background:new;font-family:Andale Mono;-inkscape-font-specification:Andale Mono"
|
||||||
|
id="path16506-5"
|
||||||
|
inkscape:href="#path27279-0-5"
|
||||||
|
d="m 44.21875,764.1875 0,1 c -0.02191,0.28075 0.07051,0.55537 0.28125,0.75 l 2.28125,2.28125 -2.28125,2.25 c -0.18819,0.18817 -0.281253,0.45346 -0.28125,0.71875 l 0,1 1,0 c 0.26529,0 0.530586,-0.0931 0.71875,-0.28125 L 48.21875,769.625 50.5,771.90625 c 0.188164,0.18815 0.453449,0.28124 0.71875,0.28125 l 1,0 0,-1 c -8e-6,-0.2653 -0.09306,-0.53058 -0.28125,-0.71875 l -2.25,-2.25 2.28125,-2.28125 c 0.21566,-0.19935 0.25,-0.46353 0.25,-0.75 l 0,-1 -1,0 c -0.240828,0.007 -0.421875,0.082 -0.6875,0.3125 l -2.3125,2.28125 L 45.9375,764.5 c -0.17763,-0.18392 -0.432549,-0.3013 -0.6875,-0.3125 -0.01046,-4.6e-4 -0.02088,-1.2e-4 -0.03125,0 l -1,0 z"
|
||||||
|
transform="translate(0,1.3535534)" /><path
|
||||||
|
sodipodi:nodetypes="ccsccccccccccccccccccccccc"
|
||||||
|
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#bebebe;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new;font-family:Andale Mono;-inkscape-font-specification:Andale Mono"
|
||||||
|
id="path27279-0-5"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="m 44.226475,764.17222 1,0 c 0.01037,-1.2e-4 0.02079,-4.6e-4 0.03125,0 0.254951,0.0112 0.50987,0.12858 0.6875,0.3125 l 2.28125,2.28125 2.3125,-2.28125 c 0.265625,-0.2305 0.446672,-0.3055 0.6875,-0.3125 l 1,0 0,1 c 0,0.28647 -0.03434,0.55065 -0.25,0.75 l -2.28125,2.28125 2.25,2.25 c 0.188188,0.18817 0.281242,0.45345 0.28125,0.71875 l 0,1 -1,0 c -0.265301,-1e-5 -0.530586,-0.0931 -0.71875,-0.28125 l -2.28125,-2.28125 -2.28125,2.28125 c -0.188164,0.18819 -0.45346,0.28125 -0.71875,0.28125 l -1,0 0,-1 c -3e-6,-0.26529 0.09306,-0.53058 0.28125,-0.71875 l 2.28125,-2.25 -2.28125,-2.28125 c -0.210742,-0.19463 -0.30316,-0.46925 -0.28125,-0.75 l 0,-1 z" /></g></g></g></svg>
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 9.4 KiB |
@ -118,7 +118,6 @@ StEntry {
|
|||||||
/* Scrollbars */
|
/* Scrollbars */
|
||||||
StScrollView.vfade {
|
StScrollView.vfade {
|
||||||
-st-vfade-offset: 68px; }
|
-st-vfade-offset: 68px; }
|
||||||
|
|
||||||
StScrollView.hfade {
|
StScrollView.hfade {
|
||||||
-st-hfade-offset: 68px; }
|
-st-hfade-offset: 68px; }
|
||||||
|
|
||||||
@ -153,18 +152,14 @@ StScrollBar {
|
|||||||
/* Check Boxes */
|
/* Check Boxes */
|
||||||
.check-box StBoxLayout {
|
.check-box StBoxLayout {
|
||||||
spacing: .8em; }
|
spacing: .8em; }
|
||||||
|
|
||||||
.check-box StBin {
|
.check-box StBin {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 22px;
|
height: 22px;
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); }
|
||||||
|
|
||||||
.check-box:focus StBin {
|
.check-box:focus StBin {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); }
|
||||||
|
|
||||||
.check-box:checked StBin {
|
.check-box:checked StBin {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
|
||||||
|
|
||||||
.check-box:focus:checked StBin {
|
.check-box:focus:checked StBin {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
|
||||||
|
|
||||||
@ -221,30 +216,11 @@ StScrollBar {
|
|||||||
color: #d6d6d1;
|
color: #d6d6d1;
|
||||||
padding-bottom: .4em; }
|
padding-bottom: .4em; }
|
||||||
|
|
||||||
.mount-dialog-subject,
|
.show-processes-dialog-subject,
|
||||||
|
.mount-question-dialog-subject,
|
||||||
.end-session-dialog-subject {
|
.end-session-dialog-subject {
|
||||||
font-size: 14pt; }
|
font-size: 14pt; }
|
||||||
|
|
||||||
/* Message Dialog */
|
|
||||||
.message-dialog-main-layout {
|
|
||||||
padding: 12px 20px 0;
|
|
||||||
spacing: 12px; }
|
|
||||||
|
|
||||||
.message-dialog-content {
|
|
||||||
max-width: 28em;
|
|
||||||
spacing: 20px; }
|
|
||||||
|
|
||||||
.message-dialog-icon {
|
|
||||||
min-width: 48px;
|
|
||||||
icon-size: 48px; }
|
|
||||||
|
|
||||||
.message-dialog-title {
|
|
||||||
font-weight: bold; }
|
|
||||||
|
|
||||||
.message-dialog-subtitle {
|
|
||||||
color: #999999;
|
|
||||||
font-weight: bold; }
|
|
||||||
|
|
||||||
/* End Session Dialog */
|
/* End Session Dialog */
|
||||||
.end-session-dialog {
|
.end-session-dialog {
|
||||||
spacing: 42px;
|
spacing: 42px;
|
||||||
@ -313,62 +289,75 @@ StScrollBar {
|
|||||||
.shell-mount-operation-icon {
|
.shell-mount-operation-icon {
|
||||||
icon-size: 48px; }
|
icon-size: 48px; }
|
||||||
|
|
||||||
.mount-dialog {
|
.show-processes-dialog,
|
||||||
|
.mount-question-dialog {
|
||||||
spacing: 24px; }
|
spacing: 24px; }
|
||||||
.mount-dialog .message-dialog-title {
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-left: 17px;
|
|
||||||
padding-bottom: 6px;
|
|
||||||
max-width: 34em; }
|
|
||||||
.mount-dialog .message-dialog-title:rtl {
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 17px; }
|
|
||||||
.mount-dialog .message-dialog-body {
|
|
||||||
padding-left: 17px;
|
|
||||||
width: 28em; }
|
|
||||||
.mount-dialog .message-dialog-body:rtl {
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 17px; }
|
|
||||||
|
|
||||||
.mount-dialog-app-list {
|
.show-processes-dialog-subject,
|
||||||
|
.mount-question-dialog-subject {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 17px;
|
||||||
|
padding-bottom: 6px; }
|
||||||
|
|
||||||
|
.mount-question-dialog-subject {
|
||||||
|
max-width: 500px; }
|
||||||
|
|
||||||
|
.show-processes-dialog-subject:rtl,
|
||||||
|
.mount-question-dialog-subject:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 17px; }
|
||||||
|
|
||||||
|
.show-processes-dialog-description,
|
||||||
|
.mount-question-dialog-description {
|
||||||
|
padding-left: 17px;
|
||||||
|
width: 28em; }
|
||||||
|
|
||||||
|
.show-processes-dialog-description:rtl,
|
||||||
|
.mount-question-dialog-description:rtl {
|
||||||
|
padding-right: 17px; }
|
||||||
|
|
||||||
|
.show-processes-dialog-app-list {
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
padding-top: 24px;
|
padding-top: 24px;
|
||||||
padding-left: 49px;
|
padding-left: 49px;
|
||||||
padding-right: 32px; }
|
padding-right: 32px; }
|
||||||
|
|
||||||
.mount-dialog-app-list:rtl {
|
.show-processes-dialog-app-list:rtl {
|
||||||
padding-right: 49px;
|
padding-right: 49px;
|
||||||
padding-left: 32px; }
|
padding-left: 32px; }
|
||||||
|
|
||||||
.mount-dialog-app-list-item {
|
.show-processes-dialog-app-list-item {
|
||||||
color: #e6e6e6; }
|
color: #e6e6e6; }
|
||||||
.mount-dialog-app-list-item:hover {
|
.show-processes-dialog-app-list-item:hover {
|
||||||
color: #fff; }
|
color: #fff; }
|
||||||
.mount-dialog-app-list-item:ltr {
|
.show-processes-dialog-app-list-item:ltr {
|
||||||
padding-right: 1em; }
|
padding-right: 1em; }
|
||||||
.mount-dialog-app-list-item:rtl {
|
.show-processes-dialog-app-list-item:rtl {
|
||||||
padding-left: 1em; }
|
padding-left: 1em; }
|
||||||
|
|
||||||
.mount-dialog-app-list-item-icon:ltr {
|
.show-processes-dialog-app-list-item-icon:ltr {
|
||||||
padding-right: 17px; }
|
padding-right: 17px; }
|
||||||
|
.show-processes-dialog-app-list-item-icon:rtl {
|
||||||
.mount-dialog-app-list-item-icon:rtl {
|
|
||||||
padding-left: 17px; }
|
padding-left: 17px; }
|
||||||
|
|
||||||
.mount-dialog-app-list-item-name {
|
.show-processes-dialog-app-list-item-name {
|
||||||
font-size: 10pt; }
|
font-size: 10pt; }
|
||||||
|
|
||||||
/* Password or Authentication Dialog */
|
/* Password or Authentication Dialog */
|
||||||
.prompt-dialog {
|
.prompt-dialog {
|
||||||
width: 34em;
|
width: 500px;
|
||||||
border: 3px solid rgba(238, 238, 236, 0.2); }
|
border: 3px solid rgba(238, 238, 236, 0.2); }
|
||||||
.prompt-dialog .message-dialog-main-layout {
|
|
||||||
spacing: 24px;
|
.prompt-dialog-main-layout {
|
||||||
padding: 10px; }
|
spacing: 24px;
|
||||||
.prompt-dialog .message-dialog-content {
|
padding: 10px; }
|
||||||
spacing: 16px; }
|
|
||||||
.prompt-dialog .message-dialog-title {
|
.prompt-dialog-message-layout {
|
||||||
color: #b2b2a9; }
|
spacing: 16px; }
|
||||||
|
|
||||||
|
.prompt-dialog-headline {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #b2b2a9; }
|
||||||
|
|
||||||
.prompt-dialog-description:rtl {
|
.prompt-dialog-description:rtl {
|
||||||
text-align: right; }
|
text-align: right; }
|
||||||
@ -442,21 +431,44 @@ StScrollBar {
|
|||||||
.access-dialog {
|
.access-dialog {
|
||||||
spacing: 30px; }
|
spacing: 30px; }
|
||||||
|
|
||||||
|
.access-dialog-main-layout {
|
||||||
|
padding: 12px 20px 0;
|
||||||
|
spacing: 12px; }
|
||||||
|
|
||||||
|
.access-dialog-content {
|
||||||
|
max-width: 28em;
|
||||||
|
spacing: 20px; }
|
||||||
|
|
||||||
|
.access-dialog-icon {
|
||||||
|
min-width: 48px;
|
||||||
|
icon-size: 48px; }
|
||||||
|
|
||||||
|
.access-dialog-title {
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.access-dialog-subtitle {
|
||||||
|
color: #999999;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
/* Geolocation Dialog */
|
/* Geolocation Dialog */
|
||||||
.geolocation-dialog {
|
.geolocation-dialog {
|
||||||
spacing: 30px; }
|
spacing: 30px; }
|
||||||
|
|
||||||
/* Extension Dialog */
|
.geolocation-dialog-main-layout {
|
||||||
.extension-dialog .message-dialog-main-layout {
|
spacing: 12px; }
|
||||||
spacing: 24px;
|
|
||||||
padding: 10px; }
|
|
||||||
|
|
||||||
.extension-dialog .message-dialog-title {
|
.geolocation-dialog-content {
|
||||||
color: #b2b2a9; }
|
spacing: 20px; }
|
||||||
|
|
||||||
/* Inhibit-Shortcuts Dialog */
|
.geolocation-dialog-icon {
|
||||||
.inhibit-shortcuts-dialog {
|
icon-size: 48px; }
|
||||||
spacing: 30px; }
|
|
||||||
|
.geolocation-dialog-title {
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.geolocation-dialog-reason {
|
||||||
|
color: #999999;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
/* Network Agent Dialog */
|
/* Network Agent Dialog */
|
||||||
.network-dialog-secret-table {
|
.network-dialog-secret-table {
|
||||||
@ -647,7 +659,7 @@ StScrollBar {
|
|||||||
border: 1px solid #215d9c; }
|
border: 1px solid #215d9c; }
|
||||||
|
|
||||||
.tile-preview-left.on-primary {
|
.tile-preview-left.on-primary {
|
||||||
border-radius: 6px 0 0 0; }
|
border-radius: 6px 6px 0 0; }
|
||||||
|
|
||||||
.tile-preview-right.on-primary {
|
.tile-preview-right.on-primary {
|
||||||
border-radius: 0 6px 0 0; }
|
border-radius: 0 6px 0 0; }
|
||||||
@ -657,9 +669,7 @@ StScrollBar {
|
|||||||
|
|
||||||
/* TOP BAR */
|
/* TOP BAR */
|
||||||
#panel {
|
#panel {
|
||||||
background-color: rgba(0, 0, 0, 0.35);
|
background-color: black;
|
||||||
/* transition from solid to transparent */
|
|
||||||
transition-duration: 500ms;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
height: 1.86em; }
|
height: 1.86em; }
|
||||||
#panel.unlock-screen, #panel.login-screen, #panel.lock-screen {
|
#panel.unlock-screen, #panel.login-screen, #panel.lock-screen {
|
||||||
@ -668,7 +678,7 @@ StScrollBar {
|
|||||||
spacing: 4px; }
|
spacing: 4px; }
|
||||||
#panel .panel-corner {
|
#panel .panel-corner {
|
||||||
-panel-corner-radius: 6px;
|
-panel-corner-radius: 6px;
|
||||||
-panel-corner-background-color: rgba(0, 0, 0, 0.35);
|
-panel-corner-background-color: black;
|
||||||
-panel-corner-border-width: 2px;
|
-panel-corner-border-width: 2px;
|
||||||
-panel-corner-border-color: transparent; }
|
-panel-corner-border-color: transparent; }
|
||||||
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
|
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
|
||||||
@ -681,24 +691,14 @@ StScrollBar {
|
|||||||
-natural-hpadding: 12px;
|
-natural-hpadding: 12px;
|
||||||
-minimum-hpadding: 6px;
|
-minimum-hpadding: 6px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #eee;
|
color: #ccc;
|
||||||
text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
|
|
||||||
transition-duration: 100ms; }
|
transition-duration: 100ms; }
|
||||||
#panel .panel-button .app-menu-icon {
|
#panel .panel-button .app-menu-icon {
|
||||||
-st-icon-style: symbolic;
|
-st-icon-style: symbolic;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
margin-right: 4px; }
|
margin-right: 4px; }
|
||||||
#panel .panel-button .system-status-icon,
|
|
||||||
#panel .panel-button .app-menu-icon > StIcon,
|
|
||||||
#panel .panel-button .popup-menu-arrow {
|
|
||||||
icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); }
|
|
||||||
#panel .panel-button:hover {
|
#panel .panel-button:hover {
|
||||||
color: white;
|
color: white; }
|
||||||
text-shadow: 0px 1px 6px black; }
|
|
||||||
#panel .panel-button:hover .system-status-icon,
|
|
||||||
#panel .panel-button:hover .app-menu-icon > StIcon,
|
|
||||||
#panel .panel-button:hover .popup-menu-arrow {
|
|
||||||
icon-shadow: 0px 1px 6px black; }
|
|
||||||
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
|
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
|
||||||
background-color: rgba(0, 0, 0, 0.01);
|
background-color: rgba(0, 0, 0, 0.01);
|
||||||
box-shadow: inset 0 -2px 0px #256ab1;
|
box-shadow: inset 0 -2px 0px #256ab1;
|
||||||
@ -708,17 +708,9 @@ StScrollBar {
|
|||||||
#panel .panel-button .system-status-icon {
|
#panel .panel-button .system-status-icon {
|
||||||
icon-size: 1.09em;
|
icon-size: 1.09em;
|
||||||
padding: 0 5px; }
|
padding: 0 5px; }
|
||||||
.unlock-screen #panel .panel-button,
|
.unlock-screen #panel .panel-button, .login-screen #panel .panel-button, .lock-screen #panel .panel-button {
|
||||||
.login-screen #panel .panel-button,
|
|
||||||
.lock-screen #panel .panel-button {
|
|
||||||
color: white; }
|
color: white; }
|
||||||
.unlock-screen #panel .panel-button:focus, .unlock-screen #panel .panel-button:hover, .unlock-screen #panel .panel-button:active,
|
.unlock-screen #panel .panel-button:focus, .unlock-screen #panel .panel-button:hover, .unlock-screen #panel .panel-button:active, .login-screen #panel .panel-button:focus, .login-screen #panel .panel-button:hover, .login-screen #panel .panel-button:active, .lock-screen #panel .panel-button:focus, .lock-screen #panel .panel-button:hover, .lock-screen #panel .panel-button:active {
|
||||||
.login-screen #panel .panel-button:focus,
|
|
||||||
.login-screen #panel .panel-button:hover,
|
|
||||||
.login-screen #panel .panel-button:active,
|
|
||||||
.lock-screen #panel .panel-button:focus,
|
|
||||||
.lock-screen #panel .panel-button:hover,
|
|
||||||
.lock-screen #panel .panel-button:active {
|
|
||||||
color: white; }
|
color: white; }
|
||||||
#panel .panel-status-indicators-box,
|
#panel .panel-status-indicators-box,
|
||||||
#panel .panel-status-menu-box {
|
#panel .panel-status-menu-box {
|
||||||
@ -727,21 +719,6 @@ StScrollBar {
|
|||||||
spacing: 0; }
|
spacing: 0; }
|
||||||
#panel .screencast-indicator {
|
#panel .screencast-indicator {
|
||||||
color: #f57900; }
|
color: #f57900; }
|
||||||
#panel.solid {
|
|
||||||
background-color: black;
|
|
||||||
/* transition from transparent to solid */
|
|
||||||
transition-duration: 300ms; }
|
|
||||||
#panel.solid .panel-corner {
|
|
||||||
-panel-corner-background-color: black; }
|
|
||||||
#panel.solid .panel-button {
|
|
||||||
color: #ccc;
|
|
||||||
text-shadow: none; }
|
|
||||||
#panel.solid .panel-button:hover {
|
|
||||||
color: white; }
|
|
||||||
#panel.solid .system-status-icon,
|
|
||||||
#panel.solid .app-menu-icon > StIcon,
|
|
||||||
#panel.solid .popup-menu-arrow {
|
|
||||||
icon-shadow: none; }
|
|
||||||
|
|
||||||
#calendarArea {
|
#calendarArea {
|
||||||
padding: 0.75em 1.0em; }
|
padding: 0.75em 1.0em; }
|
||||||
@ -792,7 +769,6 @@ StScrollBar {
|
|||||||
.events-section-title:hover,
|
.events-section-title:hover,
|
||||||
.events-section-title:focus {
|
.events-section-title:focus {
|
||||||
background-color: #0d0d0d; }
|
background-color: #0d0d0d; }
|
||||||
|
|
||||||
.datemenu-today-button:active,
|
.datemenu-today-button:active,
|
||||||
.world-clocks-button:active,
|
.world-clocks-button:active,
|
||||||
.weather-button:active,
|
.weather-button:active,
|
||||||
@ -918,27 +894,27 @@ StScrollBar {
|
|||||||
background-color: #0d0d0d; }
|
background-color: #0d0d0d; }
|
||||||
|
|
||||||
.message-icon-bin {
|
.message-icon-bin {
|
||||||
padding: 0.68em 0.2em 0.68em 0.68em; }
|
padding: 10px 3px 10px 10px; }
|
||||||
.message-icon-bin:rtl {
|
.message-icon-bin:rtl {
|
||||||
padding: 0.68em 0.68em 0.68em 0.2em; }
|
padding: 10px 10px 10px 3px; }
|
||||||
|
|
||||||
.message-icon-bin > StIcon {
|
.message-icon-bin > StIcon {
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
icon-size: 1.09em;
|
icon-size: 16px;
|
||||||
-st-icon-style: symbolic; }
|
-st-icon-style: symbolic; }
|
||||||
|
|
||||||
.message-secondary-bin {
|
.message-secondary-bin {
|
||||||
padding: 0 0.82em; }
|
padding: 0 12px; }
|
||||||
|
|
||||||
.message-secondary-bin > .event-time {
|
.message-secondary-bin > .event-time {
|
||||||
color: #999999;
|
color: #999999;
|
||||||
font-size: 0.7em;
|
font-size: 0.7em;
|
||||||
/* HACK: the label should be baseline-aligned with a 1em label,
|
/* HACK: the label should be baseline-aligned with a 1em label,
|
||||||
fake this with some bottom padding */
|
fake this with some bottom padding */
|
||||||
padding-bottom: 0.13em; }
|
padding-bottom: 0.13em; }
|
||||||
|
|
||||||
.message-secondary-bin > StIcon {
|
.message-secondary-bin > StIcon {
|
||||||
icon-size: 1.09em; }
|
icon-size: 16px; }
|
||||||
|
|
||||||
.message-title {
|
.message-title {
|
||||||
color: #f2f2f2; }
|
color: #f2f2f2; }
|
||||||
@ -1025,18 +1001,18 @@ StScrollBar {
|
|||||||
background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
|
background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
|
||||||
background-size: 32px;
|
background-size: 32px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
width: 32px;
|
width: 32px; }
|
||||||
|
|
||||||
|
.window-close {
|
||||||
-shell-close-overlap: 16px; }
|
-shell-close-overlap: 16px; }
|
||||||
.window-close:hover {
|
.window-close:rtl {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); }
|
-st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); }
|
||||||
.window-close:active {
|
|
||||||
background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); }
|
|
||||||
|
|
||||||
/* NETWORK DIALOGS */
|
/* NETWORK DIALOGS */
|
||||||
.nm-dialog {
|
.nm-dialog {
|
||||||
max-height: 34em;
|
max-height: 500px;
|
||||||
min-height: 31em;
|
min-height: 450px;
|
||||||
min-width: 32em; }
|
min-width: 470px; }
|
||||||
|
|
||||||
.nm-dialog-content {
|
.nm-dialog-content {
|
||||||
spacing: 20px;
|
spacing: 20px;
|
||||||
@ -1094,11 +1070,13 @@ StScrollBar {
|
|||||||
padding-bottom: 32px; }
|
padding-bottom: 32px; }
|
||||||
|
|
||||||
.window-picker {
|
.window-picker {
|
||||||
-horizontal-spacing: 16px;
|
-horizontal-spacing: 32px;
|
||||||
-vertical-spacing: 16px;
|
-vertical-spacing: 32px;
|
||||||
padding: 0 16px 16px; }
|
padding-left: 32px;
|
||||||
|
padding-right: 32px;
|
||||||
|
padding-bottom: 48px; }
|
||||||
.window-picker.external-monitor {
|
.window-picker.external-monitor {
|
||||||
padding: 16px; }
|
padding: 32px; }
|
||||||
|
|
||||||
.window-clone-border {
|
.window-clone-border {
|
||||||
border: 4px solid #215d9c;
|
border: 4px solid #215d9c;
|
||||||
@ -1107,10 +1085,14 @@ StScrollBar {
|
|||||||
|
|
||||||
.window-caption {
|
.window-caption {
|
||||||
spacing: 25px;
|
spacing: 25px;
|
||||||
color: #ffffff;
|
color: #eeeeec;
|
||||||
background-color: #215d9c;
|
background-color: rgba(46, 52, 54, 0.7);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 4px 12px; }
|
padding: 4px 12px;
|
||||||
|
-shell-caption-spacing: 12px; }
|
||||||
|
.window-caption:hover {
|
||||||
|
background-color: #215d9c;
|
||||||
|
color: #ffffff; }
|
||||||
|
|
||||||
.search-entry {
|
.search-entry {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
@ -1148,30 +1130,31 @@ StScrollBar {
|
|||||||
spacing: 3px; }
|
spacing: 3px; }
|
||||||
|
|
||||||
.search-section-separator {
|
.search-section-separator {
|
||||||
height: 2px;
|
-gradient-height: 1px;
|
||||||
background-color: rgba(255, 255, 255, 0.2); }
|
-gradient-start: rgba(255, 255, 255, 0);
|
||||||
|
-gradient-end: rgba(255, 255, 255, 0.1);
|
||||||
|
-margin-horizontal: 1.5em;
|
||||||
|
height: 1px; }
|
||||||
|
|
||||||
.list-search-result-content {
|
.list-search-result-content {
|
||||||
spacing: 30px; }
|
spacing: 12px;
|
||||||
|
padding: 12px; }
|
||||||
|
|
||||||
.list-search-result-title {
|
.list-search-result-title {
|
||||||
color: #e2e2df;
|
font-size: 1.5em;
|
||||||
spacing: 12px; }
|
color: #e2e2df; }
|
||||||
|
|
||||||
.list-search-result-description {
|
.list-search-result-description {
|
||||||
color: rgba(202, 202, 196, 0.5); }
|
color: #cacac4; }
|
||||||
|
|
||||||
.list-search-provider-details {
|
|
||||||
width: 150px;
|
|
||||||
color: #e2e2df;
|
|
||||||
margin-top: 0.24em; }
|
|
||||||
|
|
||||||
.list-search-provider-content {
|
|
||||||
spacing: 20px; }
|
|
||||||
|
|
||||||
.search-provider-icon {
|
.search-provider-icon {
|
||||||
padding: 15px; }
|
padding: 15px; }
|
||||||
|
|
||||||
|
.search-provider-icon-more {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
background-image: url("resource:///org/gnome/shell/theme/more-results.svg"); }
|
||||||
|
|
||||||
/* DASHBOARD */
|
/* DASHBOARD */
|
||||||
#dash {
|
#dash {
|
||||||
font-size: 9pt;
|
font-size: 9pt;
|
||||||
@ -1210,12 +1193,6 @@ StScrollBar {
|
|||||||
.icon-grid .overview-icon {
|
.icon-grid .overview-icon {
|
||||||
icon-size: 96px; }
|
icon-size: 96px; }
|
||||||
|
|
||||||
.system-action-icon {
|
|
||||||
background-color: black;
|
|
||||||
color: white;
|
|
||||||
border-radius: 99px;
|
|
||||||
icon-size: 48px; }
|
|
||||||
|
|
||||||
.app-view-controls {
|
.app-view-controls {
|
||||||
padding-bottom: 32px; }
|
padding-bottom: 32px; }
|
||||||
|
|
||||||
@ -1238,7 +1215,6 @@ StScrollBar {
|
|||||||
.list-search-result:active,
|
.list-search-result:active,
|
||||||
.list-search-result:checked {
|
.list-search-result:checked {
|
||||||
background-color: rgba(23, 25, 26, 0.9); }
|
background-color: rgba(23, 25, 26, 0.9); }
|
||||||
|
|
||||||
.search-provider-icon:focus, .search-provider-icon:selected, .search-provider-icon:hover,
|
.search-provider-icon:focus, .search-provider-icon:selected, .search-provider-icon:hover,
|
||||||
.list-search-result:focus,
|
.list-search-result:focus,
|
||||||
.list-search-result:selected,
|
.list-search-result:selected,
|
||||||
@ -1246,8 +1222,7 @@ StScrollBar {
|
|||||||
background-color: rgba(238, 238, 236, 0.1);
|
background-color: rgba(238, 238, 236, 0.1);
|
||||||
transition-duration: 200ms; }
|
transition-duration: 200ms; }
|
||||||
|
|
||||||
.app-well-app:active .overview-icon,
|
.app-well-app:active .overview-icon, .app-well-app:checked .overview-icon,
|
||||||
.app-well-app:checked .overview-icon,
|
|
||||||
.app-well-app.app-folder:active .overview-icon,
|
.app-well-app.app-folder:active .overview-icon,
|
||||||
.app-well-app.app-folder:checked .overview-icon,
|
.app-well-app.app-folder:checked .overview-icon,
|
||||||
.show-apps:active .overview-icon,
|
.show-apps:active .overview-icon,
|
||||||
@ -1256,10 +1231,7 @@ StScrollBar {
|
|||||||
.grid-search-result:checked .overview-icon {
|
.grid-search-result:checked .overview-icon {
|
||||||
background-color: rgba(23, 25, 26, 0.9);
|
background-color: rgba(23, 25, 26, 0.9);
|
||||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.7); }
|
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.7); }
|
||||||
|
.app-well-app:hover .overview-icon, .app-well-app:focus .overview-icon, .app-well-app:selected .overview-icon,
|
||||||
.app-well-app:hover .overview-icon,
|
|
||||||
.app-well-app:focus .overview-icon,
|
|
||||||
.app-well-app:selected .overview-icon,
|
|
||||||
.app-well-app.app-folder:hover .overview-icon,
|
.app-well-app.app-folder:hover .overview-icon,
|
||||||
.app-well-app.app-folder:focus .overview-icon,
|
.app-well-app.app-folder:focus .overview-icon,
|
||||||
.app-well-app.app-folder:selected .overview-icon,
|
.app-well-app.app-folder:selected .overview-icon,
|
||||||
@ -1339,10 +1311,6 @@ StScrollBar {
|
|||||||
border-radius: 9px 0 0 9px; }
|
border-radius: 9px 0 0 9px; }
|
||||||
.workspace-thumbnails:rtl {
|
.workspace-thumbnails:rtl {
|
||||||
border-radius: 0 9px 9px 0; }
|
border-radius: 0 9px 9px 0; }
|
||||||
.workspace-thumbnails .placeholder {
|
|
||||||
background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
|
|
||||||
background-size: contain;
|
|
||||||
height: 24px; }
|
|
||||||
|
|
||||||
.workspace-thumbnail-indicator {
|
.workspace-thumbnail-indicator {
|
||||||
border: 4px solid #215d9c;
|
border: 4px solid #215d9c;
|
||||||
@ -1489,6 +1457,38 @@ StScrollBar {
|
|||||||
color: pink; }
|
color: pink; }
|
||||||
|
|
||||||
/* Eeeky things */
|
/* Eeeky things */
|
||||||
|
.legacy-tray {
|
||||||
|
background-color: #000;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-bottom-width: 0; }
|
||||||
|
.legacy-tray:ltr {
|
||||||
|
border-radius: 0 6px 0 0;
|
||||||
|
border-left-width: 0; }
|
||||||
|
.legacy-tray:rtl {
|
||||||
|
border-radius: 6px 0 0 0;
|
||||||
|
border-right-width: 0; }
|
||||||
|
|
||||||
|
.legacy-tray-handle,
|
||||||
|
.legacy-tray-icon {
|
||||||
|
padding: 6px; }
|
||||||
|
.legacy-tray-handle StIcon,
|
||||||
|
.legacy-tray-icon StIcon {
|
||||||
|
icon-size: 24px; }
|
||||||
|
.legacy-tray-handle:hover, .legacy-tray-handle:focus,
|
||||||
|
.legacy-tray-icon:hover,
|
||||||
|
.legacy-tray-icon:focus {
|
||||||
|
background-color: rgba(255, 255, 255, 0.1); }
|
||||||
|
|
||||||
|
.legacy-tray-icon-box {
|
||||||
|
spacing: 12px; }
|
||||||
|
.legacy-tray-icon-box:ltr {
|
||||||
|
padding-left: 12px; }
|
||||||
|
.legacy-tray-icon-box:rtl {
|
||||||
|
padding-right: 12px; }
|
||||||
|
.legacy-tray-icon-box StButton {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px; }
|
||||||
|
|
||||||
.magnifier-zoom-region {
|
.magnifier-zoom-region {
|
||||||
border: 2px solid #215d9c; }
|
border: 2px solid #215d9c; }
|
||||||
.magnifier-zoom-region.full-screen {
|
.magnifier-zoom-region.full-screen {
|
||||||
@ -1657,12 +1657,10 @@ StScrollBar {
|
|||||||
|
|
||||||
.login-dialog-user-selection-box {
|
.login-dialog-user-selection-box {
|
||||||
padding: 100px 0px; }
|
padding: 100px 0px; }
|
||||||
|
.login-dialog-user-selection-box .login-dialog-not-listed-label {
|
||||||
.login-dialog-not-listed-label {
|
padding-left: 2px; }
|
||||||
padding-left: 2px; }
|
.login-dialog-not-listed-button:focus .login-dialog-user-selection-box .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-user-selection-box .login-dialog-not-listed-label {
|
||||||
.login-dialog-not-listed-button:focus .login-dialog-not-listed-label,
|
color: #eeeeec; }
|
||||||
.login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
|
|
||||||
color: #eeeeec; }
|
|
||||||
|
|
||||||
.login-dialog-not-listed-label {
|
.login-dialog-not-listed-label {
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
@ -1677,7 +1675,7 @@ StScrollBar {
|
|||||||
spacing: 12px;
|
spacing: 12px;
|
||||||
padding: .2em;
|
padding: .2em;
|
||||||
width: 23em; }
|
width: 23em; }
|
||||||
.login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
|
.login-dialog-user-list:expanded .login-dialog-user-list-item:focus {
|
||||||
background-color: #215d9c;
|
background-color: #215d9c;
|
||||||
color: #ffffff; }
|
color: #ffffff; }
|
||||||
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
|
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
|
||||||
@ -1691,6 +1689,9 @@ StScrollBar {
|
|||||||
padding-right: 1em; }
|
padding-right: 1em; }
|
||||||
.login-dialog-user-list-item:rtl {
|
.login-dialog-user-list-item:rtl {
|
||||||
padding-left: 1em; }
|
padding-left: 1em; }
|
||||||
|
.login-dialog-user-list-item:hover {
|
||||||
|
background-color: #215d9c;
|
||||||
|
color: #ffffff; }
|
||||||
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
|
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
|
||||||
height: 2px;
|
height: 2px;
|
||||||
margin: 2px 0 0 0;
|
margin: 2px 0 0 0;
|
||||||
@ -1708,7 +1709,6 @@ StScrollBar {
|
|||||||
|
|
||||||
.user-widget-label:ltr {
|
.user-widget-label:ltr {
|
||||||
padding-left: 18px; }
|
padding-left: 18px; }
|
||||||
|
|
||||||
.user-widget-label:rtl {
|
.user-widget-label:rtl {
|
||||||
padding-right: 18px; }
|
padding-right: 18px; }
|
||||||
|
|
||||||
@ -1836,7 +1836,6 @@ StScrollBar {
|
|||||||
.lg-dialog StEntry {
|
.lg-dialog StEntry {
|
||||||
selection-background-color: #bbbbbb;
|
selection-background-color: #bbbbbb;
|
||||||
selected-color: #333333; }
|
selected-color: #333333; }
|
||||||
|
|
||||||
.lg-dialog .shell-link {
|
.lg-dialog .shell-link {
|
||||||
color: #999999; }
|
color: #999999; }
|
||||||
.lg-dialog .shell-link:hover {
|
.lg-dialog .shell-link:hover {
|
||||||
|
Submodule data/theme/gnome-shell-sass updated: 32361ac692...e94bce1fcf
@ -118,7 +118,6 @@ StEntry {
|
|||||||
/* Scrollbars */
|
/* Scrollbars */
|
||||||
StScrollView.vfade {
|
StScrollView.vfade {
|
||||||
-st-vfade-offset: 68px; }
|
-st-vfade-offset: 68px; }
|
||||||
|
|
||||||
StScrollView.hfade {
|
StScrollView.hfade {
|
||||||
-st-hfade-offset: 68px; }
|
-st-hfade-offset: 68px; }
|
||||||
|
|
||||||
@ -153,18 +152,14 @@ StScrollBar {
|
|||||||
/* Check Boxes */
|
/* Check Boxes */
|
||||||
.check-box StBoxLayout {
|
.check-box StBoxLayout {
|
||||||
spacing: .8em; }
|
spacing: .8em; }
|
||||||
|
|
||||||
.check-box StBin {
|
.check-box StBin {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 22px;
|
height: 22px;
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox-off.svg"); }
|
||||||
|
|
||||||
.check-box:focus StBin {
|
.check-box:focus StBin {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg"); }
|
||||||
|
|
||||||
.check-box:checked StBin {
|
.check-box:checked StBin {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
|
||||||
|
|
||||||
.check-box:focus:checked StBin {
|
.check-box:focus:checked StBin {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
|
background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
|
||||||
|
|
||||||
@ -221,30 +216,11 @@ StScrollBar {
|
|||||||
color: #d6d6d1;
|
color: #d6d6d1;
|
||||||
padding-bottom: .4em; }
|
padding-bottom: .4em; }
|
||||||
|
|
||||||
.mount-dialog-subject,
|
.show-processes-dialog-subject,
|
||||||
|
.mount-question-dialog-subject,
|
||||||
.end-session-dialog-subject {
|
.end-session-dialog-subject {
|
||||||
font-size: 14pt; }
|
font-size: 14pt; }
|
||||||
|
|
||||||
/* Message Dialog */
|
|
||||||
.message-dialog-main-layout {
|
|
||||||
padding: 12px 20px 0;
|
|
||||||
spacing: 12px; }
|
|
||||||
|
|
||||||
.message-dialog-content {
|
|
||||||
max-width: 28em;
|
|
||||||
spacing: 20px; }
|
|
||||||
|
|
||||||
.message-dialog-icon {
|
|
||||||
min-width: 48px;
|
|
||||||
icon-size: 48px; }
|
|
||||||
|
|
||||||
.message-dialog-title {
|
|
||||||
font-weight: bold; }
|
|
||||||
|
|
||||||
.message-dialog-subtitle {
|
|
||||||
color: #8e8e80;
|
|
||||||
font-weight: bold; }
|
|
||||||
|
|
||||||
/* End Session Dialog */
|
/* End Session Dialog */
|
||||||
.end-session-dialog {
|
.end-session-dialog {
|
||||||
spacing: 42px;
|
spacing: 42px;
|
||||||
@ -313,62 +289,75 @@ StScrollBar {
|
|||||||
.shell-mount-operation-icon {
|
.shell-mount-operation-icon {
|
||||||
icon-size: 48px; }
|
icon-size: 48px; }
|
||||||
|
|
||||||
.mount-dialog {
|
.show-processes-dialog,
|
||||||
|
.mount-question-dialog {
|
||||||
spacing: 24px; }
|
spacing: 24px; }
|
||||||
.mount-dialog .message-dialog-title {
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-left: 17px;
|
|
||||||
padding-bottom: 6px;
|
|
||||||
max-width: 34em; }
|
|
||||||
.mount-dialog .message-dialog-title:rtl {
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 17px; }
|
|
||||||
.mount-dialog .message-dialog-body {
|
|
||||||
padding-left: 17px;
|
|
||||||
width: 28em; }
|
|
||||||
.mount-dialog .message-dialog-body:rtl {
|
|
||||||
padding-left: 0px;
|
|
||||||
padding-right: 17px; }
|
|
||||||
|
|
||||||
.mount-dialog-app-list {
|
.show-processes-dialog-subject,
|
||||||
|
.mount-question-dialog-subject {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-left: 17px;
|
||||||
|
padding-bottom: 6px; }
|
||||||
|
|
||||||
|
.mount-question-dialog-subject {
|
||||||
|
max-width: 500px; }
|
||||||
|
|
||||||
|
.show-processes-dialog-subject:rtl,
|
||||||
|
.mount-question-dialog-subject:rtl {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 17px; }
|
||||||
|
|
||||||
|
.show-processes-dialog-description,
|
||||||
|
.mount-question-dialog-description {
|
||||||
|
padding-left: 17px;
|
||||||
|
width: 28em; }
|
||||||
|
|
||||||
|
.show-processes-dialog-description:rtl,
|
||||||
|
.mount-question-dialog-description:rtl {
|
||||||
|
padding-right: 17px; }
|
||||||
|
|
||||||
|
.show-processes-dialog-app-list {
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
padding-top: 24px;
|
padding-top: 24px;
|
||||||
padding-left: 49px;
|
padding-left: 49px;
|
||||||
padding-right: 32px; }
|
padding-right: 32px; }
|
||||||
|
|
||||||
.mount-dialog-app-list:rtl {
|
.show-processes-dialog-app-list:rtl {
|
||||||
padding-right: 49px;
|
padding-right: 49px;
|
||||||
padding-left: 32px; }
|
padding-left: 32px; }
|
||||||
|
|
||||||
.mount-dialog-app-list-item {
|
.show-processes-dialog-app-list-item {
|
||||||
color: #d6d6d1; }
|
color: #d6d6d1; }
|
||||||
.mount-dialog-app-list-item:hover {
|
.show-processes-dialog-app-list-item:hover {
|
||||||
color: #eeeeec; }
|
color: #eeeeec; }
|
||||||
.mount-dialog-app-list-item:ltr {
|
.show-processes-dialog-app-list-item:ltr {
|
||||||
padding-right: 1em; }
|
padding-right: 1em; }
|
||||||
.mount-dialog-app-list-item:rtl {
|
.show-processes-dialog-app-list-item:rtl {
|
||||||
padding-left: 1em; }
|
padding-left: 1em; }
|
||||||
|
|
||||||
.mount-dialog-app-list-item-icon:ltr {
|
.show-processes-dialog-app-list-item-icon:ltr {
|
||||||
padding-right: 17px; }
|
padding-right: 17px; }
|
||||||
|
.show-processes-dialog-app-list-item-icon:rtl {
|
||||||
.mount-dialog-app-list-item-icon:rtl {
|
|
||||||
padding-left: 17px; }
|
padding-left: 17px; }
|
||||||
|
|
||||||
.mount-dialog-app-list-item-name {
|
.show-processes-dialog-app-list-item-name {
|
||||||
font-size: 10pt; }
|
font-size: 10pt; }
|
||||||
|
|
||||||
/* Password or Authentication Dialog */
|
/* Password or Authentication Dialog */
|
||||||
.prompt-dialog {
|
.prompt-dialog {
|
||||||
width: 34em;
|
width: 500px;
|
||||||
border: 3px solid rgba(238, 238, 236, 0.2); }
|
border: 3px solid rgba(238, 238, 236, 0.2); }
|
||||||
.prompt-dialog .message-dialog-main-layout {
|
|
||||||
spacing: 24px;
|
.prompt-dialog-main-layout {
|
||||||
padding: 10px; }
|
spacing: 24px;
|
||||||
.prompt-dialog .message-dialog-content {
|
padding: 10px; }
|
||||||
spacing: 16px; }
|
|
||||||
.prompt-dialog .message-dialog-title {
|
.prompt-dialog-message-layout {
|
||||||
color: #b2b2a9; }
|
spacing: 16px; }
|
||||||
|
|
||||||
|
.prompt-dialog-headline {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #b2b2a9; }
|
||||||
|
|
||||||
.prompt-dialog-description:rtl {
|
.prompt-dialog-description:rtl {
|
||||||
text-align: right; }
|
text-align: right; }
|
||||||
@ -442,21 +431,44 @@ StScrollBar {
|
|||||||
.access-dialog {
|
.access-dialog {
|
||||||
spacing: 30px; }
|
spacing: 30px; }
|
||||||
|
|
||||||
|
.access-dialog-main-layout {
|
||||||
|
padding: 12px 20px 0;
|
||||||
|
spacing: 12px; }
|
||||||
|
|
||||||
|
.access-dialog-content {
|
||||||
|
max-width: 28em;
|
||||||
|
spacing: 20px; }
|
||||||
|
|
||||||
|
.access-dialog-icon {
|
||||||
|
min-width: 48px;
|
||||||
|
icon-size: 48px; }
|
||||||
|
|
||||||
|
.access-dialog-title {
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.access-dialog-subtitle {
|
||||||
|
color: #8e8e80;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
/* Geolocation Dialog */
|
/* Geolocation Dialog */
|
||||||
.geolocation-dialog {
|
.geolocation-dialog {
|
||||||
spacing: 30px; }
|
spacing: 30px; }
|
||||||
|
|
||||||
/* Extension Dialog */
|
.geolocation-dialog-main-layout {
|
||||||
.extension-dialog .message-dialog-main-layout {
|
spacing: 12px; }
|
||||||
spacing: 24px;
|
|
||||||
padding: 10px; }
|
|
||||||
|
|
||||||
.extension-dialog .message-dialog-title {
|
.geolocation-dialog-content {
|
||||||
color: #b2b2a9; }
|
spacing: 20px; }
|
||||||
|
|
||||||
/* Inhibit-Shortcuts Dialog */
|
.geolocation-dialog-icon {
|
||||||
.inhibit-shortcuts-dialog {
|
icon-size: 48px; }
|
||||||
spacing: 30px; }
|
|
||||||
|
.geolocation-dialog-title {
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.geolocation-dialog-reason {
|
||||||
|
color: #8e8e80;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
/* Network Agent Dialog */
|
/* Network Agent Dialog */
|
||||||
.network-dialog-secret-table {
|
.network-dialog-secret-table {
|
||||||
@ -647,7 +659,7 @@ StScrollBar {
|
|||||||
border: 1px solid #215d9c; }
|
border: 1px solid #215d9c; }
|
||||||
|
|
||||||
.tile-preview-left.on-primary {
|
.tile-preview-left.on-primary {
|
||||||
border-radius: 6px 0 0 0; }
|
border-radius: 6px 6px 0 0; }
|
||||||
|
|
||||||
.tile-preview-right.on-primary {
|
.tile-preview-right.on-primary {
|
||||||
border-radius: 0 6px 0 0; }
|
border-radius: 0 6px 0 0; }
|
||||||
@ -657,9 +669,7 @@ StScrollBar {
|
|||||||
|
|
||||||
/* TOP BAR */
|
/* TOP BAR */
|
||||||
#panel {
|
#panel {
|
||||||
background-color: rgba(0, 0, 0, 0.35);
|
background-color: black;
|
||||||
/* transition from solid to transparent */
|
|
||||||
transition-duration: 500ms;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
height: 1.86em; }
|
height: 1.86em; }
|
||||||
#panel.unlock-screen, #panel.login-screen, #panel.lock-screen {
|
#panel.unlock-screen, #panel.login-screen, #panel.lock-screen {
|
||||||
@ -668,7 +678,7 @@ StScrollBar {
|
|||||||
spacing: 4px; }
|
spacing: 4px; }
|
||||||
#panel .panel-corner {
|
#panel .panel-corner {
|
||||||
-panel-corner-radius: 6px;
|
-panel-corner-radius: 6px;
|
||||||
-panel-corner-background-color: rgba(0, 0, 0, 0.35);
|
-panel-corner-background-color: black;
|
||||||
-panel-corner-border-width: 2px;
|
-panel-corner-border-width: 2px;
|
||||||
-panel-corner-border-color: transparent; }
|
-panel-corner-border-color: transparent; }
|
||||||
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
|
#panel .panel-corner:active, #panel .panel-corner:overview, #panel .panel-corner:focus {
|
||||||
@ -681,24 +691,14 @@ StScrollBar {
|
|||||||
-natural-hpadding: 12px;
|
-natural-hpadding: 12px;
|
||||||
-minimum-hpadding: 6px;
|
-minimum-hpadding: 6px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #eee;
|
color: #ccc;
|
||||||
text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9);
|
|
||||||
transition-duration: 100ms; }
|
transition-duration: 100ms; }
|
||||||
#panel .panel-button .app-menu-icon {
|
#panel .panel-button .app-menu-icon {
|
||||||
-st-icon-style: symbolic;
|
-st-icon-style: symbolic;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
margin-right: 4px; }
|
margin-right: 4px; }
|
||||||
#panel .panel-button .system-status-icon,
|
|
||||||
#panel .panel-button .app-menu-icon > StIcon,
|
|
||||||
#panel .panel-button .popup-menu-arrow {
|
|
||||||
icon-shadow: 0px 1px 2px rgba(0, 0, 0, 0.9); }
|
|
||||||
#panel .panel-button:hover {
|
#panel .panel-button:hover {
|
||||||
color: white;
|
color: white; }
|
||||||
text-shadow: 0px 1px 6px black; }
|
|
||||||
#panel .panel-button:hover .system-status-icon,
|
|
||||||
#panel .panel-button:hover .app-menu-icon > StIcon,
|
|
||||||
#panel .panel-button:hover .popup-menu-arrow {
|
|
||||||
icon-shadow: 0px 1px 6px black; }
|
|
||||||
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
|
#panel .panel-button:active, #panel .panel-button:overview, #panel .panel-button:focus, #panel .panel-button:checked {
|
||||||
background-color: rgba(0, 0, 0, 0.01);
|
background-color: rgba(0, 0, 0, 0.01);
|
||||||
box-shadow: inset 0 -2px 0px #256ab1;
|
box-shadow: inset 0 -2px 0px #256ab1;
|
||||||
@ -708,17 +708,9 @@ StScrollBar {
|
|||||||
#panel .panel-button .system-status-icon {
|
#panel .panel-button .system-status-icon {
|
||||||
icon-size: 1.09em;
|
icon-size: 1.09em;
|
||||||
padding: 0 5px; }
|
padding: 0 5px; }
|
||||||
.unlock-screen #panel .panel-button,
|
.unlock-screen #panel .panel-button, .login-screen #panel .panel-button, .lock-screen #panel .panel-button {
|
||||||
.login-screen #panel .panel-button,
|
|
||||||
.lock-screen #panel .panel-button {
|
|
||||||
color: white; }
|
color: white; }
|
||||||
.unlock-screen #panel .panel-button:focus, .unlock-screen #panel .panel-button:hover, .unlock-screen #panel .panel-button:active,
|
.unlock-screen #panel .panel-button:focus, .unlock-screen #panel .panel-button:hover, .unlock-screen #panel .panel-button:active, .login-screen #panel .panel-button:focus, .login-screen #panel .panel-button:hover, .login-screen #panel .panel-button:active, .lock-screen #panel .panel-button:focus, .lock-screen #panel .panel-button:hover, .lock-screen #panel .panel-button:active {
|
||||||
.login-screen #panel .panel-button:focus,
|
|
||||||
.login-screen #panel .panel-button:hover,
|
|
||||||
.login-screen #panel .panel-button:active,
|
|
||||||
.lock-screen #panel .panel-button:focus,
|
|
||||||
.lock-screen #panel .panel-button:hover,
|
|
||||||
.lock-screen #panel .panel-button:active {
|
|
||||||
color: white; }
|
color: white; }
|
||||||
#panel .panel-status-indicators-box,
|
#panel .panel-status-indicators-box,
|
||||||
#panel .panel-status-menu-box {
|
#panel .panel-status-menu-box {
|
||||||
@ -727,21 +719,6 @@ StScrollBar {
|
|||||||
spacing: 0; }
|
spacing: 0; }
|
||||||
#panel .screencast-indicator {
|
#panel .screencast-indicator {
|
||||||
color: #f57900; }
|
color: #f57900; }
|
||||||
#panel.solid {
|
|
||||||
background-color: black;
|
|
||||||
/* transition from transparent to solid */
|
|
||||||
transition-duration: 300ms; }
|
|
||||||
#panel.solid .panel-corner {
|
|
||||||
-panel-corner-background-color: black; }
|
|
||||||
#panel.solid .panel-button {
|
|
||||||
color: #ccc;
|
|
||||||
text-shadow: none; }
|
|
||||||
#panel.solid .panel-button:hover {
|
|
||||||
color: white; }
|
|
||||||
#panel.solid .system-status-icon,
|
|
||||||
#panel.solid .app-menu-icon > StIcon,
|
|
||||||
#panel.solid .popup-menu-arrow {
|
|
||||||
icon-shadow: none; }
|
|
||||||
|
|
||||||
#calendarArea {
|
#calendarArea {
|
||||||
padding: 0.75em 1.0em; }
|
padding: 0.75em 1.0em; }
|
||||||
@ -792,7 +769,6 @@ StScrollBar {
|
|||||||
.events-section-title:hover,
|
.events-section-title:hover,
|
||||||
.events-section-title:focus {
|
.events-section-title:focus {
|
||||||
background-color: #454c4c; }
|
background-color: #454c4c; }
|
||||||
|
|
||||||
.datemenu-today-button:active,
|
.datemenu-today-button:active,
|
||||||
.world-clocks-button:active,
|
.world-clocks-button:active,
|
||||||
.weather-button:active,
|
.weather-button:active,
|
||||||
@ -918,27 +894,27 @@ StScrollBar {
|
|||||||
background-color: #454c4c; }
|
background-color: #454c4c; }
|
||||||
|
|
||||||
.message-icon-bin {
|
.message-icon-bin {
|
||||||
padding: 0.68em 0.2em 0.68em 0.68em; }
|
padding: 10px 3px 10px 10px; }
|
||||||
.message-icon-bin:rtl {
|
.message-icon-bin:rtl {
|
||||||
padding: 0.68em 0.68em 0.68em 0.2em; }
|
padding: 10px 10px 10px 3px; }
|
||||||
|
|
||||||
.message-icon-bin > StIcon {
|
.message-icon-bin > StIcon {
|
||||||
color: #bebeb6;
|
color: #bebeb6;
|
||||||
icon-size: 1.09em;
|
icon-size: 16px;
|
||||||
-st-icon-style: symbolic; }
|
-st-icon-style: symbolic; }
|
||||||
|
|
||||||
.message-secondary-bin {
|
.message-secondary-bin {
|
||||||
padding: 0 0.82em; }
|
padding: 0 12px; }
|
||||||
|
|
||||||
.message-secondary-bin > .event-time {
|
.message-secondary-bin > .event-time {
|
||||||
color: #8e8e80;
|
color: #8e8e80;
|
||||||
font-size: 0.7em;
|
font-size: 0.7em;
|
||||||
/* HACK: the label should be baseline-aligned with a 1em label,
|
/* HACK: the label should be baseline-aligned with a 1em label,
|
||||||
fake this with some bottom padding */
|
fake this with some bottom padding */
|
||||||
padding-bottom: 0.13em; }
|
padding-bottom: 0.13em; }
|
||||||
|
|
||||||
.message-secondary-bin > StIcon {
|
.message-secondary-bin > StIcon {
|
||||||
icon-size: 1.09em; }
|
icon-size: 16px; }
|
||||||
|
|
||||||
.message-title {
|
.message-title {
|
||||||
color: #e2e2df; }
|
color: #e2e2df; }
|
||||||
@ -1025,18 +1001,18 @@ StScrollBar {
|
|||||||
background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
|
background-image: url("resource:///org/gnome/shell/theme/close-window.svg");
|
||||||
background-size: 32px;
|
background-size: 32px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
width: 32px;
|
width: 32px; }
|
||||||
|
|
||||||
|
.window-close {
|
||||||
-shell-close-overlap: 16px; }
|
-shell-close-overlap: 16px; }
|
||||||
.window-close:hover {
|
.window-close:rtl {
|
||||||
background-image: url("resource:///org/gnome/shell/theme/close-window-hover.svg"); }
|
-st-background-image-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); }
|
||||||
.window-close:active {
|
|
||||||
background-image: url("resource:///org/gnome/shell/theme/close-window-active.svg"); }
|
|
||||||
|
|
||||||
/* NETWORK DIALOGS */
|
/* NETWORK DIALOGS */
|
||||||
.nm-dialog {
|
.nm-dialog {
|
||||||
max-height: 34em;
|
max-height: 500px;
|
||||||
min-height: 31em;
|
min-height: 450px;
|
||||||
min-width: 32em; }
|
min-width: 470px; }
|
||||||
|
|
||||||
.nm-dialog-content {
|
.nm-dialog-content {
|
||||||
spacing: 20px;
|
spacing: 20px;
|
||||||
@ -1094,11 +1070,13 @@ StScrollBar {
|
|||||||
padding-bottom: 32px; }
|
padding-bottom: 32px; }
|
||||||
|
|
||||||
.window-picker {
|
.window-picker {
|
||||||
-horizontal-spacing: 16px;
|
-horizontal-spacing: 32px;
|
||||||
-vertical-spacing: 16px;
|
-vertical-spacing: 32px;
|
||||||
padding: 0 16px 16px; }
|
padding-left: 32px;
|
||||||
|
padding-right: 32px;
|
||||||
|
padding-bottom: 48px; }
|
||||||
.window-picker.external-monitor {
|
.window-picker.external-monitor {
|
||||||
padding: 16px; }
|
padding: 32px; }
|
||||||
|
|
||||||
.window-clone-border {
|
.window-clone-border {
|
||||||
border: 4px solid #215d9c;
|
border: 4px solid #215d9c;
|
||||||
@ -1107,10 +1085,14 @@ StScrollBar {
|
|||||||
|
|
||||||
.window-caption {
|
.window-caption {
|
||||||
spacing: 25px;
|
spacing: 25px;
|
||||||
color: #ffffff;
|
color: #eeeeec;
|
||||||
background-color: #215d9c;
|
background-color: rgba(46, 52, 54, 0.7);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 4px 12px; }
|
padding: 4px 12px;
|
||||||
|
-shell-caption-spacing: 12px; }
|
||||||
|
.window-caption:hover {
|
||||||
|
background-color: #215d9c;
|
||||||
|
color: #ffffff; }
|
||||||
|
|
||||||
.search-entry {
|
.search-entry {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
@ -1148,30 +1130,31 @@ StScrollBar {
|
|||||||
spacing: 3px; }
|
spacing: 3px; }
|
||||||
|
|
||||||
.search-section-separator {
|
.search-section-separator {
|
||||||
height: 2px;
|
-gradient-height: 1px;
|
||||||
background-color: rgba(255, 255, 255, 0.2); }
|
-gradient-start: rgba(255, 255, 255, 0);
|
||||||
|
-gradient-end: rgba(255, 255, 255, 0.1);
|
||||||
|
-margin-horizontal: 1.5em;
|
||||||
|
height: 1px; }
|
||||||
|
|
||||||
.list-search-result-content {
|
.list-search-result-content {
|
||||||
spacing: 30px; }
|
spacing: 12px;
|
||||||
|
padding: 12px; }
|
||||||
|
|
||||||
.list-search-result-title {
|
.list-search-result-title {
|
||||||
color: #e2e2df;
|
font-size: 1.5em;
|
||||||
spacing: 12px; }
|
color: #e2e2df; }
|
||||||
|
|
||||||
.list-search-result-description {
|
.list-search-result-description {
|
||||||
color: rgba(202, 202, 196, 0.5); }
|
color: #cacac4; }
|
||||||
|
|
||||||
.list-search-provider-details {
|
|
||||||
width: 150px;
|
|
||||||
color: #e2e2df;
|
|
||||||
margin-top: 0.24em; }
|
|
||||||
|
|
||||||
.list-search-provider-content {
|
|
||||||
spacing: 20px; }
|
|
||||||
|
|
||||||
.search-provider-icon {
|
.search-provider-icon {
|
||||||
padding: 15px; }
|
padding: 15px; }
|
||||||
|
|
||||||
|
.search-provider-icon-more {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
background-image: url("resource:///org/gnome/shell/theme/more-results.svg"); }
|
||||||
|
|
||||||
/* DASHBOARD */
|
/* DASHBOARD */
|
||||||
#dash {
|
#dash {
|
||||||
font-size: 9pt;
|
font-size: 9pt;
|
||||||
@ -1210,12 +1193,6 @@ StScrollBar {
|
|||||||
.icon-grid .overview-icon {
|
.icon-grid .overview-icon {
|
||||||
icon-size: 96px; }
|
icon-size: 96px; }
|
||||||
|
|
||||||
.system-action-icon {
|
|
||||||
background-color: black;
|
|
||||||
color: white;
|
|
||||||
border-radius: 99px;
|
|
||||||
icon-size: 48px; }
|
|
||||||
|
|
||||||
.app-view-controls {
|
.app-view-controls {
|
||||||
padding-bottom: 32px; }
|
padding-bottom: 32px; }
|
||||||
|
|
||||||
@ -1238,7 +1215,6 @@ StScrollBar {
|
|||||||
.list-search-result:active,
|
.list-search-result:active,
|
||||||
.list-search-result:checked {
|
.list-search-result:checked {
|
||||||
background-color: rgba(23, 25, 26, 0.9); }
|
background-color: rgba(23, 25, 26, 0.9); }
|
||||||
|
|
||||||
.search-provider-icon:focus, .search-provider-icon:selected, .search-provider-icon:hover,
|
.search-provider-icon:focus, .search-provider-icon:selected, .search-provider-icon:hover,
|
||||||
.list-search-result:focus,
|
.list-search-result:focus,
|
||||||
.list-search-result:selected,
|
.list-search-result:selected,
|
||||||
@ -1246,8 +1222,7 @@ StScrollBar {
|
|||||||
background-color: rgba(238, 238, 236, 0.1);
|
background-color: rgba(238, 238, 236, 0.1);
|
||||||
transition-duration: 200ms; }
|
transition-duration: 200ms; }
|
||||||
|
|
||||||
.app-well-app:active .overview-icon,
|
.app-well-app:active .overview-icon, .app-well-app:checked .overview-icon,
|
||||||
.app-well-app:checked .overview-icon,
|
|
||||||
.app-well-app.app-folder:active .overview-icon,
|
.app-well-app.app-folder:active .overview-icon,
|
||||||
.app-well-app.app-folder:checked .overview-icon,
|
.app-well-app.app-folder:checked .overview-icon,
|
||||||
.show-apps:active .overview-icon,
|
.show-apps:active .overview-icon,
|
||||||
@ -1256,10 +1231,7 @@ StScrollBar {
|
|||||||
.grid-search-result:checked .overview-icon {
|
.grid-search-result:checked .overview-icon {
|
||||||
background-color: rgba(23, 25, 26, 0.9);
|
background-color: rgba(23, 25, 26, 0.9);
|
||||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.7); }
|
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.7); }
|
||||||
|
.app-well-app:hover .overview-icon, .app-well-app:focus .overview-icon, .app-well-app:selected .overview-icon,
|
||||||
.app-well-app:hover .overview-icon,
|
|
||||||
.app-well-app:focus .overview-icon,
|
|
||||||
.app-well-app:selected .overview-icon,
|
|
||||||
.app-well-app.app-folder:hover .overview-icon,
|
.app-well-app.app-folder:hover .overview-icon,
|
||||||
.app-well-app.app-folder:focus .overview-icon,
|
.app-well-app.app-folder:focus .overview-icon,
|
||||||
.app-well-app.app-folder:selected .overview-icon,
|
.app-well-app.app-folder:selected .overview-icon,
|
||||||
@ -1339,10 +1311,6 @@ StScrollBar {
|
|||||||
border-radius: 9px 0 0 9px; }
|
border-radius: 9px 0 0 9px; }
|
||||||
.workspace-thumbnails:rtl {
|
.workspace-thumbnails:rtl {
|
||||||
border-radius: 0 9px 9px 0; }
|
border-radius: 0 9px 9px 0; }
|
||||||
.workspace-thumbnails .placeholder {
|
|
||||||
background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
|
|
||||||
background-size: contain;
|
|
||||||
height: 24px; }
|
|
||||||
|
|
||||||
.workspace-thumbnail-indicator {
|
.workspace-thumbnail-indicator {
|
||||||
border: 4px solid #215d9c;
|
border: 4px solid #215d9c;
|
||||||
@ -1489,6 +1457,38 @@ StScrollBar {
|
|||||||
color: pink; }
|
color: pink; }
|
||||||
|
|
||||||
/* Eeeky things */
|
/* Eeeky things */
|
||||||
|
.legacy-tray {
|
||||||
|
background-color: #393f3f;
|
||||||
|
border: 1px solid #1c1f1f;
|
||||||
|
border-bottom-width: 0; }
|
||||||
|
.legacy-tray:ltr {
|
||||||
|
border-radius: 0 6px 0 0;
|
||||||
|
border-left-width: 0; }
|
||||||
|
.legacy-tray:rtl {
|
||||||
|
border-radius: 6px 0 0 0;
|
||||||
|
border-right-width: 0; }
|
||||||
|
|
||||||
|
.legacy-tray-handle,
|
||||||
|
.legacy-tray-icon {
|
||||||
|
padding: 6px; }
|
||||||
|
.legacy-tray-handle StIcon,
|
||||||
|
.legacy-tray-icon StIcon {
|
||||||
|
icon-size: 24px; }
|
||||||
|
.legacy-tray-handle:hover, .legacy-tray-handle:focus,
|
||||||
|
.legacy-tray-icon:hover,
|
||||||
|
.legacy-tray-icon:focus {
|
||||||
|
background-color: rgba(238, 238, 236, 0.1); }
|
||||||
|
|
||||||
|
.legacy-tray-icon-box {
|
||||||
|
spacing: 12px; }
|
||||||
|
.legacy-tray-icon-box:ltr {
|
||||||
|
padding-left: 12px; }
|
||||||
|
.legacy-tray-icon-box:rtl {
|
||||||
|
padding-right: 12px; }
|
||||||
|
.legacy-tray-icon-box StButton {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px; }
|
||||||
|
|
||||||
.magnifier-zoom-region {
|
.magnifier-zoom-region {
|
||||||
border: 2px solid #215d9c; }
|
border: 2px solid #215d9c; }
|
||||||
.magnifier-zoom-region.full-screen {
|
.magnifier-zoom-region.full-screen {
|
||||||
@ -1657,12 +1657,10 @@ StScrollBar {
|
|||||||
|
|
||||||
.login-dialog-user-selection-box {
|
.login-dialog-user-selection-box {
|
||||||
padding: 100px 0px; }
|
padding: 100px 0px; }
|
||||||
|
.login-dialog-user-selection-box .login-dialog-not-listed-label {
|
||||||
.login-dialog-not-listed-label {
|
padding-left: 2px; }
|
||||||
padding-left: 2px; }
|
.login-dialog-not-listed-button:focus .login-dialog-user-selection-box .login-dialog-not-listed-label, .login-dialog-not-listed-button:hover .login-dialog-user-selection-box .login-dialog-not-listed-label {
|
||||||
.login-dialog-not-listed-button:focus .login-dialog-not-listed-label,
|
color: #eeeeec; }
|
||||||
.login-dialog-not-listed-button:hover .login-dialog-not-listed-label {
|
|
||||||
color: #eeeeec; }
|
|
||||||
|
|
||||||
.login-dialog-not-listed-label {
|
.login-dialog-not-listed-label {
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
@ -1677,7 +1675,7 @@ StScrollBar {
|
|||||||
spacing: 12px;
|
spacing: 12px;
|
||||||
padding: .2em;
|
padding: .2em;
|
||||||
width: 23em; }
|
width: 23em; }
|
||||||
.login-dialog-user-list:expanded .login-dialog-user-list-item:selected {
|
.login-dialog-user-list:expanded .login-dialog-user-list-item:focus {
|
||||||
background-color: #215d9c;
|
background-color: #215d9c;
|
||||||
color: #ffffff; }
|
color: #ffffff; }
|
||||||
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
|
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
|
||||||
@ -1691,6 +1689,9 @@ StScrollBar {
|
|||||||
padding-right: 1em; }
|
padding-right: 1em; }
|
||||||
.login-dialog-user-list-item:rtl {
|
.login-dialog-user-list-item:rtl {
|
||||||
padding-left: 1em; }
|
padding-left: 1em; }
|
||||||
|
.login-dialog-user-list-item:hover {
|
||||||
|
background-color: #215d9c;
|
||||||
|
color: #ffffff; }
|
||||||
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
|
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
|
||||||
height: 2px;
|
height: 2px;
|
||||||
margin: 2px 0 0 0;
|
margin: 2px 0 0 0;
|
||||||
@ -1708,7 +1709,6 @@ StScrollBar {
|
|||||||
|
|
||||||
.user-widget-label:ltr {
|
.user-widget-label:ltr {
|
||||||
padding-left: 18px; }
|
padding-left: 18px; }
|
||||||
|
|
||||||
.user-widget-label:rtl {
|
.user-widget-label:rtl {
|
||||||
padding-right: 18px; }
|
padding-right: 18px; }
|
||||||
|
|
||||||
@ -1836,7 +1836,6 @@ StScrollBar {
|
|||||||
.lg-dialog StEntry {
|
.lg-dialog StEntry {
|
||||||
selection-background-color: #bbbbbb;
|
selection-background-color: #bbbbbb;
|
||||||
selected-color: #333333; }
|
selected-color: #333333; }
|
||||||
|
|
||||||
.lg-dialog .shell-link {
|
.lg-dialog .shell-link {
|
||||||
color: #999999; }
|
color: #999999; }
|
||||||
.lg-dialog .shell-link:hover {
|
.lg-dialog .shell-link:hover {
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
theme_sources = files([
|
|
||||||
'gnome-shell-high-contrast.scss',
|
|
||||||
'gnome-shell.scss',
|
|
||||||
'gnome-shell-sass/_colors.scss',
|
|
||||||
'gnome-shell-sass/_common.scss',
|
|
||||||
'gnome-shell-sass/_drawing.scss',
|
|
||||||
'gnome-shell-sass/_high-contrast-colors.scss'
|
|
||||||
])
|
|
||||||
|
|
||||||
theme_deps = []
|
|
||||||
|
|
||||||
if sassc.found()
|
|
||||||
parse_sass = files('parse-sass.sh')
|
|
||||||
|
|
||||||
theme_deps += custom_target('update-theme',
|
|
||||||
output: 'theme-update.stamp',
|
|
||||||
depend_files: theme_sources,
|
|
||||||
command: [parse_sass, '@OUTPUT@'],
|
|
||||||
build_by_default: true
|
|
||||||
)
|
|
||||||
endif
|
|
@ -1,40 +0,0 @@
|
|||||||
<?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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
viewBox="0 0 4.2333333 4.2333333"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8">
|
|
||||||
<defs
|
|
||||||
id="defs2" />
|
|
||||||
<metadata
|
|
||||||
id="metadata5">
|
|
||||||
<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
|
|
||||||
id="layer1"
|
|
||||||
style="display:inline"
|
|
||||||
transform="translate(0,-292.76667)">
|
|
||||||
<path
|
|
||||||
style="fill:#bebebe;fill-opacity:1;stroke:none;stroke-width:0.17969394"
|
|
||||||
d="m 3.1749998,294.88333 a 1.0583333,1.0583333 0 0 1 -1.0583332,1.05833 1.0583333,1.0583333 0 0 1 -1.0583333,-1.05833 1.0583333,1.0583333 0 0 1 1.0583333,-1.05833 1.0583333,1.0583333 0 0 1 1.0583332,1.05833 z"
|
|
||||||
id="path4485" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
114
data/theme/more-results.svg
Normal file
114
data/theme/more-results.svg
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<?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="16"
|
||||||
|
height="16"
|
||||||
|
id="svg12430"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.48.4 r9939"
|
||||||
|
sodipodi:docname="more-results.svg">
|
||||||
|
<defs
|
||||||
|
id="defs12432" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#7a7a7a"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="90.509668"
|
||||||
|
inkscape:cx="6.5009792"
|
||||||
|
inkscape:cy="8.3589595"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="g14642-3-0"
|
||||||
|
showgrid="false"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
inkscape:window-width="1440"
|
||||||
|
inkscape:window-height="840"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid13002" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata12435">
|
||||||
|
<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,-1036.3622)">
|
||||||
|
<g
|
||||||
|
style="display:inline"
|
||||||
|
transform="translate(-141.99984,638.37113)"
|
||||||
|
inkscape:label="zoom-in"
|
||||||
|
id="g14642-3-0">
|
||||||
|
<path
|
||||||
|
sodipodi:type="inkscape:offset"
|
||||||
|
inkscape:radius="0"
|
||||||
|
inkscape:original="M 145.1875 400 C 144.5248 400 144 400.54899 144 401.21875 L 144 410.78125 C 144 411.45101 144.5248 412 145.1875 412 L 154.8125 412 C 155.4752 412 156 411.45101 156 410.78125 L 156 401.21875 C 156 400.54899 155.4752 400 154.8125 400 L 145.1875 400 z M 149 403 L 151 403 L 151 405 L 153 405 L 153 407 L 151 407 L 151 409 L 149 409 L 149 407 L 147 407 L 147 405 L 149 405 L 149 403 z "
|
||||||
|
xlink:href="#rect11749-5-0-1-8"
|
||||||
|
style="color:#bebebe;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;opacity:0.8"
|
||||||
|
id="path13004"
|
||||||
|
inkscape:href="#rect11749-5-0-1-8"
|
||||||
|
d="M 145.1875,400 C 144.5248,400 144,400.54899 144,401.21875 l 0,9.5625 c 0,0.66976 0.5248,1.21875 1.1875,1.21875 l 9.625,0 c 0.6627,0 1.1875,-0.54899 1.1875,-1.21875 l 0,-9.5625 C 156,400.54899 155.4752,400 154.8125,400 L 145.1875,400 z m 3.8125,3 2,0 0,2 2,0 0,2 -2,0 0,2 -2,0 0,-2 -2,0 0,-2 2,0 L 149,403 Z"
|
||||||
|
transform="translate(0,1)" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#path13004"
|
||||||
|
id="use11960"
|
||||||
|
transform="translate(1,-1)"
|
||||||
|
width="16"
|
||||||
|
height="16" />
|
||||||
|
<use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#use11960"
|
||||||
|
id="use11962"
|
||||||
|
transform="translate(-2,0)"
|
||||||
|
width="16"
|
||||||
|
height="16" />
|
||||||
|
<path
|
||||||
|
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
|
||||||
|
d="M 7 5 L 7 7 L 5 7 L 5 9 L 7 9 L 7 11 L 9 11 L 9 9 L 11 9 L 11 7 L 9 7 L 9 5 L 7 5 z "
|
||||||
|
transform="translate(141.99984,397.99107)"
|
||||||
|
id="rect3757" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="color:#bebebe;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||||
|
d="M 145.1875,400 C 144.5248,400 144,400.54899 144,401.21875 l 0,9.5625 c 0,0.66976 0.5248,1.21875 1.1875,1.21875 l 9.625,0 c 0.6627,0 1.1875,-0.54899 1.1875,-1.21875 l 0,-9.5625 C 156,400.54899 155.4752,400 154.8125,400 L 145.1875,400 z m 3.8125,3 2,0 0,2 2,0 0,2 -2,0 0,2 -2,0 0,-2 -2,0 0,-2 2,0 L 149,403 Z"
|
||||||
|
id="rect11749-5-0-1-8" />
|
||||||
|
<rect
|
||||||
|
style="fill:none;stroke:none"
|
||||||
|
id="rect3620-5-4"
|
||||||
|
width="15.981825"
|
||||||
|
height="16"
|
||||||
|
x="142"
|
||||||
|
y="398"
|
||||||
|
rx="0"
|
||||||
|
ry="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.4 KiB |
@ -1,10 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/bash
|
||||||
|
|
||||||
srcdir=`dirname $0`
|
bundle exec sass --update --sourcemap=none .
|
||||||
stamp=${1}
|
|
||||||
for scss in $srcdir/*.scss
|
|
||||||
do
|
|
||||||
sassc -a $scss ${scss%%.scss}.css || exit 1
|
|
||||||
done
|
|
||||||
|
|
||||||
[ "$stamp" ] && touch $stamp
|
|
||||||
|
1
docs/Makefile.am
Normal file
1
docs/Makefile.am
Normal file
@ -0,0 +1 @@
|
|||||||
|
SUBDIRS = reference
|
1
docs/reference/Makefile.am
Normal file
1
docs/reference/Makefile.am
Normal file
@ -0,0 +1 @@
|
|||||||
|
SUBDIRS = shell st
|
@ -1,5 +0,0 @@
|
|||||||
version_conf = configuration_data()
|
|
||||||
version_conf.set('VERSION', meson.project_version())
|
|
||||||
|
|
||||||
subdir('shell')
|
|
||||||
subdir('st')
|
|
139
docs/reference/shell/Makefile.am
Normal file
139
docs/reference/shell/Makefile.am
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
# We require automake 1.6 at least.
|
||||||
|
AUTOMAKE_OPTIONS = 1.6
|
||||||
|
|
||||||
|
# This is a blank Makefile.am for using gtk-doc.
|
||||||
|
# Copy this to your project's API docs directory and modify the variables to
|
||||||
|
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
|
||||||
|
# of using the various options.
|
||||||
|
|
||||||
|
# The name of the module, e.g. 'glib'.
|
||||||
|
DOC_MODULE=shell
|
||||||
|
|
||||||
|
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
|
||||||
|
#DOC_MODULE_VERSION=2
|
||||||
|
|
||||||
|
|
||||||
|
# The top-level SGML file. You can change this if you want to.
|
||||||
|
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
|
||||||
|
|
||||||
|
# Directories containing the source code
|
||||||
|
# gtk-doc will search all .c and .h files beneath these paths
|
||||||
|
# for inline comments documenting functions and macros.
|
||||||
|
DOC_SOURCE_DIR=$(top_srcdir)/src
|
||||||
|
|
||||||
|
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
|
||||||
|
SCANGOBJ_OPTIONS=
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-scan.
|
||||||
|
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
|
||||||
|
SCAN_OPTIONS=--rebuild-types
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mkdb.
|
||||||
|
# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
|
||||||
|
MKDB_OPTIONS=--xml-mode --output-format=xml
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mktmpl
|
||||||
|
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
|
||||||
|
MKTMPL_OPTIONS=
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mkhtml
|
||||||
|
MKHTML_OPTIONS=
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-fixref. Not normally needed.
|
||||||
|
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
|
||||||
|
FIXXREF_OPTIONS=
|
||||||
|
|
||||||
|
# Used for dependencies. The docs will be rebuilt if any of these change.
|
||||||
|
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
|
||||||
|
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
|
||||||
|
HFILE_GLOB=$(top_srcdir)/src/*.h
|
||||||
|
CFILE_GLOB=$(top_srcdir)/src/*.c
|
||||||
|
|
||||||
|
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
|
||||||
|
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
|
||||||
|
EXTRA_HFILES=
|
||||||
|
|
||||||
|
# Header files or dirs to ignore when scanning. Use base file/dir names
|
||||||
|
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
|
||||||
|
IGNORE_HFILES= \
|
||||||
|
calendar-server \
|
||||||
|
gvc \
|
||||||
|
hotplug-sniffer \
|
||||||
|
st \
|
||||||
|
tray \
|
||||||
|
gactionmuxer.h \
|
||||||
|
gactionobservable.h \
|
||||||
|
gactionobserver.h \
|
||||||
|
shell-network-agent.h \
|
||||||
|
shell-recorder-src.h
|
||||||
|
|
||||||
|
if !BUILD_RECORDER
|
||||||
|
IGNORE_HFILES += shell-recorder.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Images to copy into HTML directory.
|
||||||
|
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
|
||||||
|
HTML_IMAGES=
|
||||||
|
|
||||||
|
doc-gen-org.gnome.Shell.SearchProvider.xml: $(top_srcdir)/data/org.gnome.ShellSearchProvider.xml
|
||||||
|
gdbus-codegen \
|
||||||
|
--interface-prefix org.gnome.ShellSearchProvider. \
|
||||||
|
--generate-docbook doc-gen \
|
||||||
|
$(top_srcdir)/data/org.gnome.ShellSearchProvider.xml
|
||||||
|
|
||||||
|
doc-gen-org.gnome.Shell.SearchProvider2.xml: $(top_srcdir)/data/org.gnome.ShellSearchProvider2.xml
|
||||||
|
gdbus-codegen \
|
||||||
|
--interface-prefix org.gnome.ShellSearchProvider2. \
|
||||||
|
--generate-docbook doc-gen \
|
||||||
|
$(top_srcdir)/data/org.gnome.ShellSearchProvider2.xml
|
||||||
|
|
||||||
|
doc-gen-org.gnome.Shell.Screenshot.xml: $(top_srcdir)/data/org.gnome.Shell.Screenshot.xml
|
||||||
|
gdbus-codegen \
|
||||||
|
--interface-prefix org.gnome.Shell.Screenshot. \
|
||||||
|
--generate-docbook doc-gen \
|
||||||
|
$(top_srcdir)/data/org.gnome.Shell.Screenshot.xml
|
||||||
|
|
||||||
|
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
|
||||||
|
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
|
||||||
|
content_files= \
|
||||||
|
doc-gen-org.gnome.Shell.SearchProvider.xml \
|
||||||
|
doc-gen-org.gnome.Shell.SearchProvider2.xml \
|
||||||
|
doc-gen-org.gnome.Shell.Screenshot.xml
|
||||||
|
|
||||||
|
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
|
||||||
|
# These files must be listed here *and* in content_files
|
||||||
|
# e.g. expand_content_files=running.sgml
|
||||||
|
expand_content_files=
|
||||||
|
|
||||||
|
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
|
||||||
|
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
|
||||||
|
# signals and properties.
|
||||||
|
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||||
|
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
|
GTKDOC_CFLAGS=$(GNOME_SHELL_CFLAGS)
|
||||||
|
GTKDOC_LIBS=$(GNOME_SHELL_LIBS) $(top_builddir)/src/libgnome-shell-menu.la $(top_builddir)/src/libgnome-shell-base.la $(top_builddir)/src/libgnome-shell.la -rpath $(MUTTER_TYPELIB_DIR)
|
||||||
|
|
||||||
|
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||||
|
include $(top_srcdir)/gtk-doc.make
|
||||||
|
|
||||||
|
# Other files to distribute
|
||||||
|
# e.g. EXTRA_DIST += version.xml.in
|
||||||
|
EXTRA_DIST +=
|
||||||
|
|
||||||
|
# Files not to distribute
|
||||||
|
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
|
||||||
|
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
|
||||||
|
DISTCLEANFILES = $(DOC_MODULES).types
|
||||||
|
|
||||||
|
# Comment this out if you want 'make check' to test you doc status
|
||||||
|
# and run some sanity checks
|
||||||
|
if ENABLE_GTK_DOC
|
||||||
|
TESTS_ENVIRONMENT = cd $(srcdir) && \
|
||||||
|
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
|
||||||
|
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
|
||||||
|
#TESTS = $(GTKDOC_CHECK)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
@ -1,57 +0,0 @@
|
|||||||
private_headers = [
|
|
||||||
'gactionmuxer.h',
|
|
||||||
'gactionobservable.h',
|
|
||||||
'gactionobserver.h',
|
|
||||||
'shell-network-agent.h',
|
|
||||||
'shell-recorder-src.h'
|
|
||||||
]
|
|
||||||
|
|
||||||
if not enable_recorder
|
|
||||||
private_headers += 'shell-recorder.h'
|
|
||||||
endif
|
|
||||||
|
|
||||||
exclude_directories = [
|
|
||||||
'calendar-server',
|
|
||||||
'hotplug-sniffer',
|
|
||||||
'st',
|
|
||||||
'tray'
|
|
||||||
]
|
|
||||||
|
|
||||||
ifaces = [
|
|
||||||
['org.gnome.Shell.Screenshot', 'org.gnome.Shell.Screenshot.xml'],
|
|
||||||
['org.gnome.ShellSearchProvider', 'org.gnome.Shell.SearchProvider.xml'],
|
|
||||||
['org.gnome.ShellSearchProvider2', 'org.gnome.Shell.SearchProvider2.xml']
|
|
||||||
]
|
|
||||||
foreach iface : ifaces
|
|
||||||
custom_target(iface[0] + ' docs',
|
|
||||||
input: '../../../data/@0@.xml'.format(iface[0]),
|
|
||||||
output: 'doc-gen-' + iface[1],
|
|
||||||
command: [
|
|
||||||
'gdbus-codegen',
|
|
||||||
'--interface-prefix=@0@.'.format(iface),
|
|
||||||
'--generate-docbook', 'doc-gen',
|
|
||||||
'--output-directory', '@OUTDIR@',
|
|
||||||
'@INPUT@'
|
|
||||||
],
|
|
||||||
build_by_default: true
|
|
||||||
)
|
|
||||||
endforeach
|
|
||||||
|
|
||||||
configure_file(
|
|
||||||
input: 'version.xml.in',
|
|
||||||
output: 'version.xml',
|
|
||||||
configuration: version_conf
|
|
||||||
)
|
|
||||||
|
|
||||||
gnome.gtkdoc('shell',
|
|
||||||
main_sgml: 'shell-docs.sgml',
|
|
||||||
src_dir: [
|
|
||||||
join_paths(meson.source_root(), 'src'),
|
|
||||||
join_paths(meson.build_root(), 'src')
|
|
||||||
],
|
|
||||||
scan_args: [
|
|
||||||
'--ignore-headers=' + ' '.join(private_headers + exclude_directories),
|
|
||||||
'--rebuild-types'
|
|
||||||
],
|
|
||||||
install: true
|
|
||||||
)
|
|
@ -3,13 +3,12 @@
|
|||||||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
|
||||||
[
|
[
|
||||||
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
|
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
|
||||||
<!ENTITY version SYSTEM "version.xml">
|
|
||||||
]>
|
]>
|
||||||
<book id="index">
|
<book id="index">
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
<title>Shell Reference Manual</title>
|
<title>Shell Reference Manual</title>
|
||||||
<releaseinfo>
|
<releaseinfo>
|
||||||
for Shell &version;.
|
for Shell @VERSION@.
|
||||||
<!--The latest version of this documentation can be found on-line at
|
<!--The latest version of this documentation can be found on-line at
|
||||||
<ulink role="online-location" url="http://[SERVER]/shell/index.html">http://[SERVER]/shell/</ulink>.-->
|
<ulink role="online-location" url="http://[SERVER]/shell/index.html">http://[SERVER]/shell/</ulink>.-->
|
||||||
</releaseinfo>
|
</releaseinfo>
|
||||||
@ -52,15 +51,10 @@
|
|||||||
<xi:include href="xml/shell-mount-operation.xml"/>
|
<xi:include href="xml/shell-mount-operation.xml"/>
|
||||||
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
<!-- FIXME:
|
|
||||||
Not generated at the moment, find out whether to blame gtk-doc or meson
|
|
||||||
-->
|
|
||||||
<!--
|
|
||||||
<chapter id="object-tree">
|
<chapter id="object-tree">
|
||||||
<title>Object Hierarchy</title>
|
<title>Object Hierarchy</title>
|
||||||
<xi:include href="xml/tree_index.sgml"/>
|
<xi:include href="xml/tree_index.sgml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
-->
|
|
||||||
<index id="api-index-full">
|
<index id="api-index-full">
|
||||||
<title>API Index</title>
|
<title>API Index</title>
|
||||||
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
|
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
|
@ -1 +0,0 @@
|
|||||||
@VERSION@
|
|
104
docs/reference/st/Makefile.am
Normal file
104
docs/reference/st/Makefile.am
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
# We require automake 1.6 at least.
|
||||||
|
AUTOMAKE_OPTIONS = 1.6
|
||||||
|
|
||||||
|
# This is a blank Makefile.am for using gtk-doc.
|
||||||
|
# Copy this to your project's API docs directory and modify the variables to
|
||||||
|
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
|
||||||
|
# of using the various options.
|
||||||
|
|
||||||
|
# The name of the module, e.g. 'glib'.
|
||||||
|
DOC_MODULE=st
|
||||||
|
|
||||||
|
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
|
||||||
|
#DOC_MODULE_VERSION=2
|
||||||
|
|
||||||
|
|
||||||
|
# The top-level SGML file. You can change this if you want to.
|
||||||
|
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
|
||||||
|
|
||||||
|
# Directories containing the source code
|
||||||
|
# gtk-doc will search all .c and .h files beneath these paths
|
||||||
|
# for inline comments documenting functions and macros.
|
||||||
|
DOC_SOURCE_DIR=$(top_srcdir)/src/st
|
||||||
|
|
||||||
|
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
|
||||||
|
SCANGOBJ_OPTIONS=
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-scan.
|
||||||
|
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
|
||||||
|
SCAN_OPTIONS=--rebuild-types --rebuild-sections
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mkdb.
|
||||||
|
# e.g. MKDB_OPTIONS=--xml-mode --output-format=xml
|
||||||
|
MKDB_OPTIONS=--xml-mode --output-format=xml
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mktmpl
|
||||||
|
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
|
||||||
|
MKTMPL_OPTIONS=
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-mkhtml
|
||||||
|
MKHTML_OPTIONS=
|
||||||
|
|
||||||
|
# Extra options to supply to gtkdoc-fixref. Not normally needed.
|
||||||
|
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
|
||||||
|
FIXXREF_OPTIONS=
|
||||||
|
|
||||||
|
# Used for dependencies. The docs will be rebuilt if any of these change.
|
||||||
|
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
|
||||||
|
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
|
||||||
|
HFILE_GLOB=$(top_srcdir)/src/st/*.h
|
||||||
|
CFILE_GLOB=$(top_srcdir)/src/st/*.c
|
||||||
|
|
||||||
|
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
|
||||||
|
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
|
||||||
|
EXTRA_HFILES=
|
||||||
|
|
||||||
|
# Header files or dirs to ignore when scanning. Use base file/dir names
|
||||||
|
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code
|
||||||
|
IGNORE_HFILES=st-private.h st-theme-node-private.h
|
||||||
|
|
||||||
|
# Images to copy into HTML directory.
|
||||||
|
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
|
||||||
|
HTML_IMAGES=
|
||||||
|
|
||||||
|
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
|
||||||
|
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
|
||||||
|
content_files=
|
||||||
|
|
||||||
|
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
|
||||||
|
# These files must be listed here *and* in content_files
|
||||||
|
# e.g. expand_content_files=running.sgml
|
||||||
|
expand_content_files=
|
||||||
|
|
||||||
|
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
|
||||||
|
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
|
||||||
|
# signals and properties.
|
||||||
|
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||||
|
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
|
GTKDOC_CFLAGS=
|
||||||
|
GTKDOC_LIBS=$(top_builddir)/src/libst-1.0.la -rpath $(MUTTER_TYPELIB_DIR)
|
||||||
|
|
||||||
|
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||||
|
include $(top_srcdir)/gtk-doc.make
|
||||||
|
|
||||||
|
# Other files to distribute
|
||||||
|
# e.g. EXTRA_DIST += version.xml.in
|
||||||
|
EXTRA_DIST +=
|
||||||
|
|
||||||
|
# Files not to distribute
|
||||||
|
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
|
||||||
|
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
|
||||||
|
DISTCLEANFILES = $(DOC_MODULE).types $(DOC_MODULE)-sections.txt
|
||||||
|
|
||||||
|
# Comment this out if you want 'make check' to test you doc status
|
||||||
|
# and run some sanity checks
|
||||||
|
if ENABLE_GTK_DOC
|
||||||
|
TESTS_ENVIRONMENT = cd $(srcdir) && \
|
||||||
|
DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
|
||||||
|
SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
|
||||||
|
#TESTS = $(GTKDOC_CHECK)
|
||||||
|
endif
|
||||||
|
|
||||||
|
-include $(top_srcdir)/git.mk
|
@ -1,24 +0,0 @@
|
|||||||
private_headers = [
|
|
||||||
'st-private.h',
|
|
||||||
'st-theme-node-private.h'
|
|
||||||
]
|
|
||||||
|
|
||||||
configure_file(
|
|
||||||
input: 'version.xml.in',
|
|
||||||
output: 'version.xml',
|
|
||||||
configuration: version_conf
|
|
||||||
)
|
|
||||||
|
|
||||||
gnome.gtkdoc('st',
|
|
||||||
main_sgml: 'st-docs.sgml',
|
|
||||||
src_dir: [
|
|
||||||
join_paths(meson.source_root(), 'src', 'st'),
|
|
||||||
join_paths(meson.build_root(), 'src', 'st')
|
|
||||||
],
|
|
||||||
scan_args: [
|
|
||||||
'--ignore-headers=' + ' '.join(private_headers),
|
|
||||||
'--rebuild-sections',
|
|
||||||
'--rebuild-types'
|
|
||||||
],
|
|
||||||
install: true
|
|
||||||
)
|
|
@ -3,13 +3,12 @@
|
|||||||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
|
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
|
||||||
[
|
[
|
||||||
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
|
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
|
||||||
<!ENTITY version SYSTEM "version.xml">
|
|
||||||
]>
|
]>
|
||||||
<book id="index">
|
<book id="index">
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
<title>St Reference Manual</title>
|
<title>St Reference Manual</title>
|
||||||
<releaseinfo>
|
<releaseinfo>
|
||||||
for St &version;.
|
for St @VERSION@.
|
||||||
<!--The latest version of this documentation can be found on-line at
|
<!--The latest version of this documentation can be found on-line at
|
||||||
<ulink role="online-location" url="http://[SERVER]/st/index.html">http://[SERVER]/st/</ulink>.-->
|
<ulink role="online-location" url="http://[SERVER]/st/index.html">http://[SERVER]/st/</ulink>.-->
|
||||||
</releaseinfo>
|
</releaseinfo>
|
||||||
@ -47,15 +46,10 @@
|
|||||||
<xi:include href="xml/st-texture-cache.xml"/>
|
<xi:include href="xml/st-texture-cache.xml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
</part>
|
</part>
|
||||||
<!-- FIXME:
|
|
||||||
Not generated at the moment, find out whether to blame gtk-doc or meson
|
|
||||||
-->
|
|
||||||
<!--
|
|
||||||
<chapter id="object-tree">
|
<chapter id="object-tree">
|
||||||
<title>Object Hierarchy</title>
|
<title>Object Hierarchy</title>
|
||||||
<xi:include href="xml/tree_index.sgml"/>
|
<xi:include href="xml/tree_index.sgml"/>
|
||||||
</chapter>
|
</chapter>
|
||||||
-->
|
|
||||||
<index id="api-index-full">
|
<index id="api-index-full">
|
||||||
<title>API Index</title>
|
<title>API Index</title>
|
||||||
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
|
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
|
@ -1 +0,0 @@
|
|||||||
@VERSION@
|
|
39
js/Makefile.am
Normal file
39
js/Makefile.am
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
NULL =
|
||||||
|
BUILT_SOURCES =
|
||||||
|
|
||||||
|
misc/config.js: misc/config.js.in Makefile
|
||||||
|
[ -d $(@D) ] || $(mkdir_p) $(@D) ; \
|
||||||
|
sed -e "s|[@]PACKAGE_NAME@|$(PACKAGE_NAME)|g" \
|
||||||
|
-e "s|[@]PACKAGE_VERSION@|$(PACKAGE_VERSION)|g" \
|
||||||
|
-e "s|[@]HAVE_BLUETOOTH@|$(HAVE_BLUETOOTH)|g" \
|
||||||
|
-e "s|[@]HAVE_NETWORKMANAGER@|$(HAVE_NETWORKMANAGER)|g" \
|
||||||
|
-e "s|[@]GETTEXT_PACKAGE@|$(GETTEXT_PACKAGE)|g" \
|
||||||
|
-e "s|[@]datadir@|$(datadir)|g" \
|
||||||
|
-e "s|[@]libexecdir@|$(libexecdir)|g" \
|
||||||
|
-e "s|[@]sysconfdir@|$(sysconfdir)|g" \
|
||||||
|
-e "s|[@]LIBMUTTER_API_VERSION@|$(LIBMUTTER_API_VERSION)|g" \
|
||||||
|
$< > $@
|
||||||
|
|
||||||
|
js_resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate-dependencies $(srcdir)/js-resources.gresource.xml)
|
||||||
|
js-resources.h: js-resources.gresource.xml $(js_resource_files) misc/config.js
|
||||||
|
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate --c-name shell_js_resources $<
|
||||||
|
js-resources.c: js-resources.gresource.xml $(js_resource_files) misc/config.js
|
||||||
|
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --sourcedir=$(builddir) --generate --c-name shell_js_resources $<
|
||||||
|
|
||||||
|
js_built_sources = js-resources.c js-resources.h
|
||||||
|
|
||||||
|
BUILT_SOURCES += $(js_built_sources)
|
||||||
|
|
||||||
|
all-local: $(js_built_sources)
|
||||||
|
|
||||||
|
js_resource_dist_files = $(filter-out misc/config.js, $(js_resource_files))
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
$(js_resource_dist_files) \
|
||||||
|
js-resources.gresource.xml \
|
||||||
|
misc/config.js.in \
|
||||||
|
$(NULL)
|
||||||
|
|
||||||
|
CLEANFILES = \
|
||||||
|
$(js_built_sources) \
|
||||||
|
$(NULL)
|
@ -5,7 +5,6 @@ const GLib = imports.gi.GLib;
|
|||||||
const GObject = imports.gi.GObject;
|
const GObject = imports.gi.GObject;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
const Gdk = imports.gi.Gdk;
|
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
const Format = imports.format;
|
const Format = imports.format;
|
||||||
|
|
||||||
@ -32,7 +31,7 @@ function stripPrefix(string, prefix) {
|
|||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
var Application = new Lang.Class({
|
const Application = new Lang.Class({
|
||||||
Name: 'Application',
|
Name: 'Application',
|
||||||
_init: function() {
|
_init: function() {
|
||||||
GLib.set_prgname('gnome-shell-extension-prefs');
|
GLib.set_prgname('gnome-shell-extension-prefs');
|
||||||
@ -93,11 +92,9 @@ var Application = new Lang.Class({
|
|||||||
widget = this._buildErrorUI(extension, e);
|
widget = this._buildErrorUI(extension, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
let dialog = new Gtk.Window({ modal: !this._skipMainWindow,
|
let dialog = new Gtk.Dialog({ use_header_bar: true,
|
||||||
type_hint: Gdk.WindowTypeHint.DIALOG });
|
modal: true,
|
||||||
dialog.set_titlebar(new Gtk.HeaderBar({ show_close_button: true,
|
title: extension.metadata.name });
|
||||||
title: extension.metadata.name,
|
|
||||||
visible: true }));
|
|
||||||
|
|
||||||
if (this._skipMainWindow) {
|
if (this._skipMainWindow) {
|
||||||
this.application.add_window(dialog);
|
this.application.add_window(dialog);
|
||||||
@ -110,7 +107,7 @@ var Application = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
dialog.set_default_size(600, 400);
|
dialog.set_default_size(600, 400);
|
||||||
dialog.add(widget);
|
dialog.get_content_area().add(widget);
|
||||||
dialog.show();
|
dialog.show();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -157,7 +154,7 @@ var Application = new Lang.Class({
|
|||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
|
this._settings = new Gio.Settings({ schema_id: 'org.gnome.shell' });
|
||||||
this._settings.bind('disable-user-extensions', killSwitch, 'active',
|
this._settings.bind('disable-user-extensions', killSwitch, 'active',
|
||||||
Gio.SettingsBindFlags.DEFAULT |
|
Gio.SettingsBindFlags.BIND_DEFAULT |
|
||||||
Gio.SettingsBindFlags.INVERT_BOOLEAN);
|
Gio.SettingsBindFlags.INVERT_BOOLEAN);
|
||||||
|
|
||||||
let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER });
|
let scroll = new Gtk.ScrolledWindow({ hscrollbar_policy: Gtk.PolicyType.NEVER });
|
||||||
@ -253,7 +250,7 @@ var Application = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var DescriptionLabel = new Lang.Class({
|
const DescriptionLabel = new Lang.Class({
|
||||||
Name: 'DescriptionLabel',
|
Name: 'DescriptionLabel',
|
||||||
Extends: Gtk.Label,
|
Extends: Gtk.Label,
|
||||||
|
|
||||||
@ -265,7 +262,7 @@ var DescriptionLabel = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ExtensionRow = new Lang.Class({
|
const ExtensionRow = new Lang.Class({
|
||||||
Name: 'ExtensionRow',
|
Name: 'ExtensionRow',
|
||||||
Extends: Gtk.ListBoxRow,
|
Extends: Gtk.ListBoxRow,
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gio = imports.gi.Gio;
|
const Gio = imports.gi.Gio;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Pango = imports.gi.Pango;
|
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
@ -14,31 +13,32 @@ const Params = imports.misc.params;
|
|||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
|
const Pango = imports.gi.Pango;
|
||||||
|
|
||||||
var DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
|
const DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
|
||||||
var DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
|
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
|
||||||
var DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
|
const DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
|
||||||
|
|
||||||
var MESSAGE_FADE_OUT_ANIMATION_TIME = 0.5;
|
const MESSAGE_FADE_OUT_ANIMATION_TIME = 0.5;
|
||||||
|
|
||||||
var AuthPromptMode = {
|
const AuthPromptMode = {
|
||||||
UNLOCK_ONLY: 0,
|
UNLOCK_ONLY: 0,
|
||||||
UNLOCK_OR_LOG_IN: 1
|
UNLOCK_OR_LOG_IN: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
var AuthPromptStatus = {
|
const AuthPromptStatus = {
|
||||||
NOT_VERIFYING: 0,
|
NOT_VERIFYING: 0,
|
||||||
VERIFYING: 1,
|
VERIFYING: 1,
|
||||||
VERIFICATION_FAILED: 2,
|
VERIFICATION_FAILED: 2,
|
||||||
VERIFICATION_SUCCEEDED: 3
|
VERIFICATION_SUCCEEDED: 3
|
||||||
};
|
};
|
||||||
|
|
||||||
var BeginRequestType = {
|
const BeginRequestType = {
|
||||||
PROVIDE_USERNAME: 0,
|
PROVIDE_USERNAME: 0,
|
||||||
DONT_PROVIDE_USERNAME: 1
|
DONT_PROVIDE_USERNAME: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
var AuthPrompt = new Lang.Class({
|
const AuthPrompt = new Lang.Class({
|
||||||
Name: 'AuthPrompt',
|
Name: 'AuthPrompt',
|
||||||
|
|
||||||
_init: function(gdmClient, mode) {
|
_init: function(gdmClient, mode) {
|
||||||
@ -188,7 +188,7 @@ var AuthPrompt = new Lang.Class({
|
|||||||
if (!this._userVerifier.hasPendingMessages)
|
if (!this._userVerifier.hasPendingMessages)
|
||||||
this._fadeOutMessage();
|
this._fadeOutMessage();
|
||||||
|
|
||||||
this._updateNextButtonSensitivity(this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING);
|
this._updateNextButtonSensitivity(this._entry.text.length > 0);
|
||||||
}));
|
}));
|
||||||
this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
|
this._entry.clutter_text.connect('activate', Lang.bind(this, function() {
|
||||||
if (this.nextButton.reactive)
|
if (this.nextButton.reactive)
|
||||||
@ -263,7 +263,7 @@ var AuthPrompt = new Lang.Class({
|
|||||||
_onVerificationComplete: function() {
|
_onVerificationComplete: function() {
|
||||||
this.setActorInDefaultButtonWell(null);
|
this.setActorInDefaultButtonWell(null);
|
||||||
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
|
||||||
this.cancelButton.reactive = false;
|
this.cancelButton.reactive = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onReset: function() {
|
_onReset: function() {
|
||||||
@ -416,7 +416,7 @@ var AuthPrompt = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
updateSensitivity: function(sensitive) {
|
updateSensitivity: function(sensitive) {
|
||||||
this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
|
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0);
|
||||||
this._entry.reactive = sensitive;
|
this._entry.reactive = sensitive;
|
||||||
this._entry.clutter_text.editable = sensitive;
|
this._entry.clutter_text.editable = sensitive;
|
||||||
},
|
},
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
var Task = new Lang.Class({
|
const Task = new Lang.Class({
|
||||||
Name: 'Task',
|
Name: 'Task',
|
||||||
|
|
||||||
_init: function(scope, handler) {
|
_init: function(scope, handler) {
|
||||||
@ -68,7 +68,7 @@ var Task = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Task.prototype);
|
Signals.addSignalMethods(Task.prototype);
|
||||||
|
|
||||||
var Hold = new Lang.Class({
|
const Hold = new Lang.Class({
|
||||||
Name: 'Hold',
|
Name: 'Hold',
|
||||||
Extends: Task,
|
Extends: Task,
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ var Hold = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Hold.prototype);
|
Signals.addSignalMethods(Hold.prototype);
|
||||||
|
|
||||||
var Batch = new Lang.Class({
|
const Batch = new Lang.Class({
|
||||||
Name: 'Batch',
|
Name: 'Batch',
|
||||||
Extends: Task,
|
Extends: Task,
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ var Batch = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Batch.prototype);
|
Signals.addSignalMethods(Batch.prototype);
|
||||||
|
|
||||||
var ConcurrentBatch = new Lang.Class({
|
const ConcurrentBatch = new Lang.Class({
|
||||||
Name: 'ConcurrentBatch',
|
Name: 'ConcurrentBatch',
|
||||||
Extends: Batch,
|
Extends: Batch,
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ var ConcurrentBatch = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(ConcurrentBatch.prototype);
|
Signals.addSignalMethods(ConcurrentBatch.prototype);
|
||||||
|
|
||||||
var ConsecutiveBatch = new Lang.Class({
|
const ConsecutiveBatch = new Lang.Class({
|
||||||
Name: 'ConsecutiveBatch',
|
Name: 'ConsecutiveBatch',
|
||||||
Extends: Batch,
|
Extends: Batch,
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
|
|||||||
const _LOGO_ICON_HEIGHT = 48;
|
const _LOGO_ICON_HEIGHT = 48;
|
||||||
const _MAX_BOTTOM_MENU_ITEMS = 5;
|
const _MAX_BOTTOM_MENU_ITEMS = 5;
|
||||||
|
|
||||||
var UserListItem = new Lang.Class({
|
const UserListItem = new Lang.Class({
|
||||||
Name: 'UserListItem',
|
Name: 'UserListItem',
|
||||||
|
|
||||||
_init: function(user) {
|
_init: function(user) {
|
||||||
@ -70,16 +70,6 @@ var UserListItem = new Lang.Class({
|
|||||||
this.actor.connect('destroy',
|
this.actor.connect('destroy',
|
||||||
Lang.bind(this, this._onDestroy));
|
Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
this.actor.connect('key-focus-in', () => {
|
|
||||||
this._setSelected(true);
|
|
||||||
});
|
|
||||||
this.actor.connect('key-focus-out', () => {
|
|
||||||
this._setSelected(false);
|
|
||||||
});
|
|
||||||
this.actor.connect('notify::hover', () => {
|
|
||||||
this._setSelected(this.actor.hover);
|
|
||||||
});
|
|
||||||
|
|
||||||
this._userWidget = new UserWidget.UserWidget(this.user);
|
this._userWidget = new UserWidget.UserWidget(this.user);
|
||||||
layout.add(this._userWidget.actor);
|
layout.add(this._userWidget.actor);
|
||||||
|
|
||||||
@ -113,15 +103,6 @@ var UserListItem = new Lang.Class({
|
|||||||
this.emit('activate');
|
this.emit('activate');
|
||||||
},
|
},
|
||||||
|
|
||||||
_setSelected: function(selected) {
|
|
||||||
if (selected) {
|
|
||||||
this.actor.add_style_pseudo_class('selected');
|
|
||||||
this.actor.grab_key_focus();
|
|
||||||
} else {
|
|
||||||
this.actor.remove_style_pseudo_class('selected');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
showTimedLoginIndicator: function(time) {
|
showTimedLoginIndicator: function(time) {
|
||||||
let hold = new Batch.Hold();
|
let hold = new Batch.Hold();
|
||||||
|
|
||||||
@ -145,7 +126,7 @@ var UserListItem = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(UserListItem.prototype);
|
Signals.addSignalMethods(UserListItem.prototype);
|
||||||
|
|
||||||
var UserList = new Lang.Class({
|
const UserList = new Lang.Class({
|
||||||
Name: 'UserList',
|
Name: 'UserList',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -288,15 +269,11 @@ var UserList = new Lang.Class({
|
|||||||
|
|
||||||
item.actor.destroy();
|
item.actor.destroy();
|
||||||
delete this._items[userName];
|
delete this._items[userName];
|
||||||
},
|
|
||||||
|
|
||||||
numItems: function() {
|
|
||||||
return Object.keys(this._items).length;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(UserList.prototype);
|
Signals.addSignalMethods(UserList.prototype);
|
||||||
|
|
||||||
var SessionMenuButton = new Lang.Class({
|
const SessionMenuButton = new Lang.Class({
|
||||||
Name: 'SessionMenuButton',
|
Name: 'SessionMenuButton',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -402,7 +379,7 @@ var SessionMenuButton = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(SessionMenuButton.prototype);
|
Signals.addSignalMethods(SessionMenuButton.prototype);
|
||||||
|
|
||||||
var LoginDialog = new Lang.Class({
|
const LoginDialog = new Lang.Class({
|
||||||
Name: 'LoginDialog',
|
Name: 'LoginDialog',
|
||||||
|
|
||||||
_init: function(parentActor) {
|
_init: function(parentActor) {
|
||||||
@ -730,10 +707,6 @@ var LoginDialog = new Lang.Class({
|
|||||||
_updateDisableUserList: function() {
|
_updateDisableUserList: function() {
|
||||||
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
|
let disableUserList = this._settings.get_boolean(GdmUtil.DISABLE_USER_LIST_KEY);
|
||||||
|
|
||||||
// Disable user list when there are no users.
|
|
||||||
if (this._userListLoaded && this._userList.numItems() == 0)
|
|
||||||
disableUserList = true;
|
|
||||||
|
|
||||||
if (disableUserList != this._disableUserList) {
|
if (disableUserList != this._disableUserList) {
|
||||||
this._disableUserList = disableUserList;
|
this._disableUserList = disableUserList;
|
||||||
|
|
||||||
@ -802,12 +775,10 @@ var LoginDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onPrompted: function() {
|
_onPrompted: function() {
|
||||||
if (this._shouldShowSessionMenuButton()) {
|
this._sessionMenuButton.updateSensitivity(true);
|
||||||
this._sessionMenuButton.updateSensitivity(true);
|
|
||||||
|
if (this._shouldShowSessionMenuButton())
|
||||||
this._authPrompt.setActorInDefaultButtonWell(this._sessionMenuButton.actor);
|
this._authPrompt.setActorInDefaultButtonWell(this._sessionMenuButton.actor);
|
||||||
} else {
|
|
||||||
this._sessionMenuButton.updateSensitivity(false);
|
|
||||||
}
|
|
||||||
this._showPrompt();
|
this._showPrompt();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -910,7 +881,6 @@ var LoginDialog = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
this._updateCancelButton();
|
this._updateCancelButton();
|
||||||
|
|
||||||
this._sessionMenuButton.updateSensitivity(false);
|
|
||||||
this._authPrompt.updateSensitivity(true);
|
this._authPrompt.updateSensitivity(true);
|
||||||
this._showPrompt();
|
this._showPrompt();
|
||||||
},
|
},
|
||||||
@ -1205,18 +1175,14 @@ var LoginDialog = new Lang.Class({
|
|||||||
this._userList.addUser(users[i]);
|
this._userList.addUser(users[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._updateDisableUserList();
|
|
||||||
|
|
||||||
this._userAddedId = this._userManager.connect('user-added',
|
this._userAddedId = this._userManager.connect('user-added',
|
||||||
Lang.bind(this, function(userManager, user) {
|
Lang.bind(this, function(userManager, user) {
|
||||||
this._userList.addUser(user);
|
this._userList.addUser(user);
|
||||||
this._updateDisableUserList();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._userRemovedId = this._userManager.connect('user-removed',
|
this._userRemovedId = this._userManager.connect('user-removed',
|
||||||
Lang.bind(this, function(userManager, user) {
|
Lang.bind(this, function(userManager, user) {
|
||||||
this._userList.removeUser(user);
|
this._userList.removeUser(user);
|
||||||
this._updateDisableUserList();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._userChangedId = this._userManager.connect('user-changed',
|
this._userChangedId = this._userManager.connect('user-changed',
|
||||||
@ -1225,7 +1191,6 @@ var LoginDialog = new Lang.Class({
|
|||||||
this._userList.removeUser(user);
|
this._userList.removeUser(user);
|
||||||
else if (!this._userList.containsUser(user) && !user.locked)
|
else if (!this._userList.containsUser(user) && !user.locked)
|
||||||
this._userList.addUser(user);
|
this._userList.addUser(user);
|
||||||
this._updateDisableUserList();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
|
@ -27,7 +27,7 @@ function OVirtCredentials() {
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
var OVirtCredentialsManager = new Lang.Class({
|
const OVirtCredentialsManager = new Lang.Class({
|
||||||
Name: 'OVirtCredentialsManager',
|
Name: 'OVirtCredentialsManager',
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._token = null;
|
this._token = null;
|
||||||
|
@ -59,7 +59,7 @@ const RealmIface = '<node> \
|
|||||||
</node>';
|
</node>';
|
||||||
const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface);
|
const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface);
|
||||||
|
|
||||||
var Manager = new Lang.Class({
|
const Manager = new Lang.Class({
|
||||||
Name: 'Manager',
|
Name: 'Manager',
|
||||||
|
|
||||||
_init: function(parentActor) {
|
_init: function(parentActor) {
|
||||||
|
@ -17,28 +17,28 @@ const ShellEntry = imports.ui.shellEntry;
|
|||||||
const SmartcardManager = imports.misc.smartcardManager;
|
const SmartcardManager = imports.misc.smartcardManager;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var PASSWORD_SERVICE_NAME = 'gdm-password';
|
const PASSWORD_SERVICE_NAME = 'gdm-password';
|
||||||
var FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
const FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
|
||||||
var SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
|
const SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
|
||||||
var OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
|
const OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
|
||||||
var FADE_ANIMATION_TIME = 0.16;
|
const FADE_ANIMATION_TIME = 0.16;
|
||||||
var CLONE_FADE_ANIMATION_TIME = 0.25;
|
const CLONE_FADE_ANIMATION_TIME = 0.25;
|
||||||
|
|
||||||
var LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
|
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
|
||||||
var PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
|
const PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
|
||||||
var FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
|
const FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
|
||||||
var SMARTCARD_AUTHENTICATION_KEY = 'enable-smartcard-authentication';
|
const SMARTCARD_AUTHENTICATION_KEY = 'enable-smartcard-authentication';
|
||||||
var BANNER_MESSAGE_KEY = 'banner-message-enable';
|
const BANNER_MESSAGE_KEY = 'banner-message-enable';
|
||||||
var BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
|
const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
|
||||||
var ALLOWED_FAILURES_KEY = 'allowed-failures';
|
const ALLOWED_FAILURES_KEY = 'allowed-failures';
|
||||||
|
|
||||||
var LOGO_KEY = 'logo';
|
const LOGO_KEY = 'logo';
|
||||||
var DISABLE_USER_LIST_KEY = 'disable-user-list';
|
const DISABLE_USER_LIST_KEY = 'disable-user-list';
|
||||||
|
|
||||||
// Give user 48ms to read each character of a PAM message
|
// Give user 48ms to read each character of a PAM message
|
||||||
var USER_READ_TIME = 48
|
const USER_READ_TIME = 48
|
||||||
|
|
||||||
var MessageType = {
|
const MessageType = {
|
||||||
NONE: 0,
|
NONE: 0,
|
||||||
ERROR: 1,
|
ERROR: 1,
|
||||||
INFO: 2,
|
INFO: 2,
|
||||||
@ -119,7 +119,7 @@ function cloneAndFadeOutActor(actor) {
|
|||||||
return hold;
|
return hold;
|
||||||
}
|
}
|
||||||
|
|
||||||
var ShellUserVerifier = new Lang.Class({
|
const ShellUserVerifier = new Lang.Class({
|
||||||
Name: 'ShellUserVerifier',
|
Name: 'ShellUserVerifier',
|
||||||
|
|
||||||
_init: function(client, params) {
|
_init: function(client, params) {
|
||||||
@ -128,9 +128,6 @@ var ShellUserVerifier = new Lang.Class({
|
|||||||
|
|
||||||
this._client = client;
|
this._client = client;
|
||||||
|
|
||||||
this._defaultService = null;
|
|
||||||
this._preemptingService = null;
|
|
||||||
|
|
||||||
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
||||||
this._settings.connect('changed',
|
this._settings.connect('changed',
|
||||||
Lang.bind(this, this._updateDefaultService));
|
Lang.bind(this, this._updateDefaultService));
|
||||||
@ -141,9 +138,8 @@ var ShellUserVerifier = new Lang.Class({
|
|||||||
|
|
||||||
// We check for smartcards right away, since an inserted smartcard
|
// We check for smartcards right away, since an inserted smartcard
|
||||||
// at startup should result in immediately initiating authentication.
|
// at startup should result in immediately initiating authentication.
|
||||||
// This is different than fingerprint readers, where we only check them
|
// This is different than fingeprint readers, where we only check them
|
||||||
// after a user has been picked.
|
// after a user has been picked.
|
||||||
this.smartcardDetected = false;
|
|
||||||
this._checkForSmartcard();
|
this._checkForSmartcard();
|
||||||
|
|
||||||
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted',
|
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted',
|
||||||
@ -544,8 +540,7 @@ var ShellUserVerifier = new Lang.Class({
|
|||||||
let signalId = this.connect('no-more-messages',
|
let signalId = this.connect('no-more-messages',
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
this.disconnect(signalId);
|
this.disconnect(signalId);
|
||||||
if (this._cancellable && !this._cancellable.is_cancelled())
|
this._retry();
|
||||||
this._retry();
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
<file>misc/params.js</file>
|
<file>misc/params.js</file>
|
||||||
<file>misc/permissionStore.js</file>
|
<file>misc/permissionStore.js</file>
|
||||||
<file>misc/smartcardManager.js</file>
|
<file>misc/smartcardManager.js</file>
|
||||||
<file>misc/systemActions.js</file>
|
|
||||||
<file>misc/util.js</file>
|
<file>misc/util.js</file>
|
||||||
<file>misc/weather.js</file>
|
<file>misc/weather.js</file>
|
||||||
|
|
||||||
@ -45,11 +44,9 @@
|
|||||||
<file>ui/boxpointer.js</file>
|
<file>ui/boxpointer.js</file>
|
||||||
<file>ui/calendar.js</file>
|
<file>ui/calendar.js</file>
|
||||||
<file>ui/checkBox.js</file>
|
<file>ui/checkBox.js</file>
|
||||||
<file>ui/closeDialog.js</file>
|
|
||||||
<file>ui/ctrlAltTab.js</file>
|
<file>ui/ctrlAltTab.js</file>
|
||||||
<file>ui/dash.js</file>
|
<file>ui/dash.js</file>
|
||||||
<file>ui/dateMenu.js</file>
|
<file>ui/dateMenu.js</file>
|
||||||
<file>ui/dialog.js</file>
|
|
||||||
<file>ui/dnd.js</file>
|
<file>ui/dnd.js</file>
|
||||||
<file>ui/edgeDragAction.js</file>
|
<file>ui/edgeDragAction.js</file>
|
||||||
<file>ui/endSessionDialog.js</file>
|
<file>ui/endSessionDialog.js</file>
|
||||||
@ -60,11 +57,11 @@
|
|||||||
<file>ui/grabHelper.js</file>
|
<file>ui/grabHelper.js</file>
|
||||||
<file>ui/ibusCandidatePopup.js</file>
|
<file>ui/ibusCandidatePopup.js</file>
|
||||||
<file>ui/iconGrid.js</file>
|
<file>ui/iconGrid.js</file>
|
||||||
<file>ui/inhibitShortcutsDialog.js</file>
|
|
||||||
<file>ui/keyboard.js</file>
|
<file>ui/keyboard.js</file>
|
||||||
<file>ui/layout.js</file>
|
<file>ui/layout.js</file>
|
||||||
<file>ui/lightbox.js</file>
|
<file>ui/lightbox.js</file>
|
||||||
<file>ui/lookingGlass.js</file>
|
<file>ui/lookingGlass.js</file>
|
||||||
|
<file>ui/legacyTray.js</file>
|
||||||
<file>ui/magnifier.js</file>
|
<file>ui/magnifier.js</file>
|
||||||
<file>ui/magnifierDBus.js</file>
|
<file>ui/magnifierDBus.js</file>
|
||||||
<file>ui/main.js</file>
|
<file>ui/main.js</file>
|
||||||
@ -90,13 +87,13 @@
|
|||||||
<file>ui/screenshot.js</file>
|
<file>ui/screenshot.js</file>
|
||||||
<file>ui/scripting.js</file>
|
<file>ui/scripting.js</file>
|
||||||
<file>ui/search.js</file>
|
<file>ui/search.js</file>
|
||||||
|
<file>ui/separator.js</file>
|
||||||
<file>ui/sessionMode.js</file>
|
<file>ui/sessionMode.js</file>
|
||||||
<file>ui/shellDBus.js</file>
|
<file>ui/shellDBus.js</file>
|
||||||
<file>ui/shellEntry.js</file>
|
<file>ui/shellEntry.js</file>
|
||||||
<file>ui/shellMountOperation.js</file>
|
<file>ui/shellMountOperation.js</file>
|
||||||
<file>ui/slider.js</file>
|
<file>ui/slider.js</file>
|
||||||
<file>ui/switcherPopup.js</file>
|
<file>ui/switcherPopup.js</file>
|
||||||
<file>ui/switchMonitor.js</file>
|
|
||||||
<file>ui/tweener.js</file>
|
<file>ui/tweener.js</file>
|
||||||
<file>ui/unlockDialog.js</file>
|
<file>ui/unlockDialog.js</file>
|
||||||
<file>ui/userWidget.js</file>
|
<file>ui/userWidget.js</file>
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
subdir('misc')
|
|
||||||
|
|
||||||
js_resources = gnome.compile_resources(
|
|
||||||
'js-resources', 'js-resources.gresource.xml',
|
|
||||||
source_dir: ['.', meson.current_build_dir()],
|
|
||||||
c_name: 'shell_js_resources',
|
|
||||||
dependencies: [config_js]
|
|
||||||
)
|
|
@ -1,19 +1,19 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
/* The name of this package (not localized) */
|
/* The name of this package (not localized) */
|
||||||
var PACKAGE_NAME = '@PACKAGE_NAME@';
|
const PACKAGE_NAME = '@PACKAGE_NAME@';
|
||||||
/* The version of this package */
|
/* The version of this package */
|
||||||
var PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
const PACKAGE_VERSION = '@PACKAGE_VERSION@';
|
||||||
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
/* 1 if gnome-bluetooth is available, 0 otherwise */
|
||||||
var HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
|
||||||
/* 1 if networkmanager is available, 0 otherwise */
|
/* 1 if networkmanager is available, 0 otherwise */
|
||||||
var HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
|
const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
|
||||||
/* gettext package */
|
/* gettext package */
|
||||||
var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
|
||||||
/* locale dir */
|
/* locale dir */
|
||||||
var LOCALEDIR = '@datadir@/locale';
|
const LOCALEDIR = '@datadir@/locale';
|
||||||
/* other standard directories */
|
/* other standard directories */
|
||||||
var LIBEXECDIR = '@libexecdir@';
|
const LIBEXECDIR = '@libexecdir@';
|
||||||
var SYSCONFDIR = '@sysconfdir@';
|
const SYSCONFDIR = '@sysconfdir@';
|
||||||
/* g-i package versions */
|
/* g-i package versions */
|
||||||
var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'
|
const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'
|
||||||
|
@ -11,13 +11,13 @@ const Gio = imports.gi.Gio;
|
|||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const FileUtils = imports.misc.fileUtils;
|
const FileUtils = imports.misc.fileUtils;
|
||||||
|
|
||||||
var ExtensionType = {
|
const ExtensionType = {
|
||||||
SYSTEM: 1,
|
SYSTEM: 1,
|
||||||
PER_USER: 2
|
PER_USER: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
// Maps uuid -> metadata object
|
// Maps uuid -> metadata object
|
||||||
var extensions = {};
|
const extensions = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* getCurrentExtension:
|
* getCurrentExtension:
|
||||||
@ -158,7 +158,7 @@ function installImporter(extension) {
|
|||||||
imports.searchPath = oldSearchPath;
|
imports.searchPath = oldSearchPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
var ExtensionFinder = new Lang.Class({
|
const ExtensionFinder = new Lang.Class({
|
||||||
Name: 'ExtensionFinder',
|
Name: 'ExtensionFinder',
|
||||||
|
|
||||||
_loadExtension: function(extensionDir, info, perUserDir) {
|
_loadExtension: function(extensionDir, info, perUserDir) {
|
||||||
|
@ -16,7 +16,7 @@ const PresenceIface = '<node> \
|
|||||||
</interface> \
|
</interface> \
|
||||||
</node>';
|
</node>';
|
||||||
|
|
||||||
var PresenceStatus = {
|
const PresenceStatus = {
|
||||||
AVAILABLE: 0,
|
AVAILABLE: 0,
|
||||||
INVISIBLE: 1,
|
INVISIBLE: 1,
|
||||||
BUSY: 2,
|
BUSY: 2,
|
||||||
|
@ -5,9 +5,9 @@ const Signals = imports.signals;
|
|||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
var DEFAULT_LIMIT = 512;
|
const DEFAULT_LIMIT = 512;
|
||||||
|
|
||||||
var HistoryManager = new Lang.Class({
|
const HistoryManager = new Lang.Class({
|
||||||
Name: 'HistoryManager',
|
Name: 'HistoryManager',
|
||||||
|
|
||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
@ -69,7 +69,7 @@ var HistoryManager = new Lang.Class({
|
|||||||
this._indexChanged();
|
this._indexChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._historyIndex ? this._history[this._historyIndex -1] : null;
|
return this._historyIndex[this._history.length];
|
||||||
},
|
},
|
||||||
|
|
||||||
addItem: function(input) {
|
addItem: function(input) {
|
||||||
|
@ -36,7 +36,7 @@ function getIBusManager() {
|
|||||||
return _ibusManager;
|
return _ibusManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
var IBusManager = new Lang.Class({
|
const IBusManager = new Lang.Class({
|
||||||
Name: 'IBusManager',
|
Name: 'IBusManager',
|
||||||
|
|
||||||
// This is the longest we'll keep the keyboard frozen until an input
|
// This is the longest we'll keep the keyboard frozen until an input
|
||||||
@ -190,7 +190,7 @@ var IBusManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
getEngineDesc: function(id) {
|
getEngineDesc: function(id) {
|
||||||
if (!IBus || !this._ready || !this._engines.hasOwnProperty(id))
|
if (!IBus || !this._ready)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return this._engines[id];
|
return this._engines[id];
|
||||||
|
@ -7,9 +7,9 @@ const Meta = imports.gi.Meta;
|
|||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
var DEFAULT_LOCALE = 'en_US';
|
const DEFAULT_LOCALE = 'en_US';
|
||||||
var DEFAULT_LAYOUT = 'us';
|
const DEFAULT_LAYOUT = 'us';
|
||||||
var DEFAULT_VARIANT = '';
|
const DEFAULT_VARIANT = '';
|
||||||
|
|
||||||
let _xkbInfo = null;
|
let _xkbInfo = null;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ function holdKeyboard() {
|
|||||||
global.display.freeze_keyboard(global.get_current_time());
|
global.display.freeze_keyboard(global.get_current_time());
|
||||||
}
|
}
|
||||||
|
|
||||||
var KeyboardManager = new Lang.Class({
|
const KeyboardManager = new Lang.Class({
|
||||||
Name: 'KeyboardManager',
|
Name: 'KeyboardManager',
|
||||||
|
|
||||||
// The XKB protocol doesn't allow for more that 4 layouts in a
|
// The XKB protocol doesn't allow for more that 4 layouts in a
|
||||||
|
@ -102,7 +102,7 @@ function getLoginManager() {
|
|||||||
return _loginManager;
|
return _loginManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
var LoginManagerSystemd = new Lang.Class({
|
const LoginManagerSystemd = new Lang.Class({
|
||||||
Name: 'LoginManagerSystemd',
|
Name: 'LoginManagerSystemd',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -119,13 +119,7 @@ var LoginManagerSystemd = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let sessionId = GLib.getenv('XDG_SESSION_ID');
|
this._proxy.GetSessionRemote(GLib.getenv('XDG_SESSION_ID'), Lang.bind(this,
|
||||||
if (!sessionId) {
|
|
||||||
log('Unset XDG_SESSION_ID, getCurrentSessionProxy() called outside a user session.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._proxy.GetSessionRemote(sessionId, Lang.bind(this,
|
|
||||||
function(result, error) {
|
function(result, error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
logError(error, 'Could not get a proxy for the current session');
|
logError(error, 'Could not get a proxy for the current session');
|
||||||
@ -189,7 +183,7 @@ var LoginManagerSystemd = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(LoginManagerSystemd.prototype);
|
Signals.addSignalMethods(LoginManagerSystemd.prototype);
|
||||||
|
|
||||||
var LoginManagerDummy = new Lang.Class({
|
const LoginManagerDummy = new Lang.Class({
|
||||||
Name: 'LoginManagerDummy',
|
Name: 'LoginManagerDummy',
|
||||||
|
|
||||||
getCurrentSessionProxy: function(callback) {
|
getCurrentSessionProxy: function(callback) {
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
jsconf = configuration_data()
|
|
||||||
jsconf.set('PACKAGE_NAME', meson.project_name())
|
|
||||||
jsconf.set('PACKAGE_VERSION', meson.project_version())
|
|
||||||
jsconf.set('GETTEXT_PACKAGE', meson.project_name())
|
|
||||||
jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
|
|
||||||
jsconf.set10('HAVE_BLUETOOTH', bt_dep.found())
|
|
||||||
jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
|
|
||||||
jsconf.set('datadir', datadir)
|
|
||||||
jsconf.set('libexecdir', libexecdir)
|
|
||||||
jsconf.set('sysconfdir', sysconfdir)
|
|
||||||
|
|
||||||
config_js = configure_file(
|
|
||||||
input: 'config.js.in',
|
|
||||||
output: 'config.js',
|
|
||||||
configuration: jsconf
|
|
||||||
)
|
|
@ -130,7 +130,7 @@ const ModemCdmaInterface = '<node> \
|
|||||||
|
|
||||||
const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface);
|
const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface);
|
||||||
|
|
||||||
var ModemGsm = new Lang.Class({
|
const ModemGsm = new Lang.Class({
|
||||||
Name: 'ModemGsm',
|
Name: 'ModemGsm',
|
||||||
|
|
||||||
_init: function(path) {
|
_init: function(path) {
|
||||||
@ -172,7 +172,7 @@ var ModemGsm = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(ModemGsm.prototype);
|
Signals.addSignalMethods(ModemGsm.prototype);
|
||||||
|
|
||||||
var ModemCdma = new Lang.Class({
|
const ModemCdma = new Lang.Class({
|
||||||
Name: 'ModemCdma',
|
Name: 'ModemCdma',
|
||||||
|
|
||||||
_init: function(path) {
|
_init: function(path) {
|
||||||
@ -244,7 +244,7 @@ const BroadbandModemCdmaInterface = '<node> \
|
|||||||
</node>';
|
</node>';
|
||||||
const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface);
|
const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface);
|
||||||
|
|
||||||
var BroadbandModem = new Lang.Class({
|
const BroadbandModem = new Lang.Class({
|
||||||
Name: 'BroadbandModem',
|
Name: 'BroadbandModem',
|
||||||
|
|
||||||
_init: function(path, capabilities) {
|
_init: function(path, capabilities) {
|
||||||
|
@ -26,7 +26,7 @@ const ObjectManagerIface = '<node> \
|
|||||||
|
|
||||||
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
|
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
|
||||||
|
|
||||||
var ObjectManager = new Lang.Class({
|
const ObjectManager = new Lang.Class({
|
||||||
Name: 'ObjectManager',
|
Name: 'ObjectManager',
|
||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
params = Params.parse(params, { connection: null,
|
params = Params.parse(params, { connection: null,
|
||||||
@ -46,7 +46,7 @@ var ObjectManager = new Lang.Class({
|
|||||||
g_interface_info: ObjectManagerInfo,
|
g_interface_info: ObjectManagerInfo,
|
||||||
g_name: this._serviceName,
|
g_name: this._serviceName,
|
||||||
g_object_path: this._managerPath,
|
g_object_path: this._managerPath,
|
||||||
g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START });
|
g_flags: Gio.DBusProxyFlags.NONE });
|
||||||
|
|
||||||
this._interfaceInfos = {};
|
this._interfaceInfos = {};
|
||||||
this._objects = {};
|
this._objects = {};
|
||||||
@ -65,9 +65,6 @@ var ObjectManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_tryToCompleteLoad: function() {
|
_tryToCompleteLoad: function() {
|
||||||
if (this._numLoadInhibitors == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._numLoadInhibitors--;
|
this._numLoadInhibitors--;
|
||||||
if (this._numLoadInhibitors == 0) {
|
if (this._numLoadInhibitors == 0) {
|
||||||
if (this._onLoaded)
|
if (this._onLoaded)
|
||||||
@ -89,7 +86,7 @@ var ObjectManager = new Lang.Class({
|
|||||||
g_object_path: objectPath,
|
g_object_path: objectPath,
|
||||||
g_interface_name: interfaceName,
|
g_interface_name: interfaceName,
|
||||||
g_interface_info: info,
|
g_interface_info: info,
|
||||||
g_flags: Gio.DBusProxyFlags.DO_NOT_AUTO_START });
|
g_flags: Gio.DBusProxyFlags.NONE });
|
||||||
|
|
||||||
proxy.init_async(GLib.PRIORITY_DEFAULT,
|
proxy.init_async(GLib.PRIORITY_DEFAULT,
|
||||||
this._cancellable,
|
this._cancellable,
|
||||||
@ -184,18 +181,6 @@ var ObjectManager = new Lang.Class({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._managerProxy.connect('notify::g-name-owner', Lang.bind(this, function() {
|
|
||||||
if (this._managerProxy.g_name_owner)
|
|
||||||
this._onNameAppeared();
|
|
||||||
else
|
|
||||||
this._onNameVanished();
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (this._managerProxy.g_name_owner)
|
|
||||||
this._onNameAppeared();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onNameAppeared: function() {
|
|
||||||
this._managerProxy.GetManagedObjectsRemote(Lang.bind(this, function(result, error) {
|
this._managerProxy.GetManagedObjectsRemote(Lang.bind(this, function(result, error) {
|
||||||
if (!result) {
|
if (!result) {
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -208,11 +193,6 @@ var ObjectManager = new Lang.Class({
|
|||||||
|
|
||||||
let [objects] = result;
|
let [objects] = result;
|
||||||
|
|
||||||
if (!objects) {
|
|
||||||
this._tryToCompleteLoad();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let objectPaths = Object.keys(objects);
|
let objectPaths = Object.keys(objects);
|
||||||
for (let i = 0; i < objectPaths.length; i++) {
|
for (let i = 0; i < objectPaths.length; i++) {
|
||||||
let objectPath = objectPaths[i];
|
let objectPath = objectPaths[i];
|
||||||
@ -233,21 +213,6 @@ var ObjectManager = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
_onNameVanished: function() {
|
|
||||||
let objectPaths = Object.keys(this._objects);
|
|
||||||
for (let i = 0; i < objectPaths.length; i++) {
|
|
||||||
let object = this._objects[objectPaths];
|
|
||||||
|
|
||||||
let interfaceNames = Object.keys(object);
|
|
||||||
for (let j = 0; i < interfaceNames.length; i++) {
|
|
||||||
let interfaceName = interfaceNames[i];
|
|
||||||
|
|
||||||
if (object[interfaceName])
|
|
||||||
this._removeInterface(objectPath, interfaceName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_registerInterfaces: function(interfaces) {
|
_registerInterfaces: function(interfaces) {
|
||||||
for (let i = 0; i < interfaces.length; i++) {
|
for (let i = 0; i < interfaces.length; i++) {
|
||||||
let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]);
|
let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]);
|
||||||
|
@ -25,7 +25,7 @@ function getSmartcardManager() {
|
|||||||
return _smartcardManager;
|
return _smartcardManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
var SmartcardManager = new Lang.Class({
|
const SmartcardManager = new Lang.Class({
|
||||||
Name: 'SmartcardManager',
|
Name: 'SmartcardManager',
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._objectManager = new ObjectManager.ObjectManager({ connection: Gio.DBus.session,
|
this._objectManager = new ObjectManager.ObjectManager({ connection: Gio.DBus.session,
|
||||||
|
@ -1,440 +0,0 @@
|
|||||||
const AccountsService = imports.gi.AccountsService;
|
|
||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const Gdm = imports.gi.Gdm;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Meta = imports.gi.Meta;
|
|
||||||
const GObject = imports.gi.GObject;
|
|
||||||
|
|
||||||
const GnomeSession = imports.misc.gnomeSession;
|
|
||||||
const LoginManager = imports.misc.loginManager;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
|
|
||||||
const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
|
|
||||||
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
|
|
||||||
const DISABLE_USER_SWITCH_KEY = 'disable-user-switching';
|
|
||||||
const DISABLE_LOCK_SCREEN_KEY = 'disable-lock-screen';
|
|
||||||
const DISABLE_LOG_OUT_KEY = 'disable-log-out';
|
|
||||||
const DISABLE_RESTART_KEY = 'disable-restart-buttons';
|
|
||||||
const ALWAYS_SHOW_LOG_OUT_KEY = 'always-show-log-out';
|
|
||||||
|
|
||||||
const SENSOR_BUS_NAME = 'net.hadess.SensorProxy';
|
|
||||||
const SENSOR_OBJECT_PATH = '/net/hadess/SensorProxy';
|
|
||||||
|
|
||||||
const SensorProxyInterface = '<node> \
|
|
||||||
<interface name="net.hadess.SensorProxy"> \
|
|
||||||
<property name="HasAccelerometer" type="b" access="read"/> \
|
|
||||||
</interface> \
|
|
||||||
</node>';
|
|
||||||
|
|
||||||
const POWER_OFF_ACTION_ID = 'power-off';
|
|
||||||
const LOCK_SCREEN_ACTION_ID = 'lock-screen';
|
|
||||||
const LOGOUT_ACTION_ID = 'logout';
|
|
||||||
const SUSPEND_ACTION_ID = 'suspend';
|
|
||||||
const SWITCH_USER_ACTION_ID = 'switch-user';
|
|
||||||
const LOCK_ORIENTATION_ACTION_ID = 'lock-orientation';
|
|
||||||
|
|
||||||
const SensorProxy = Gio.DBusProxy.makeProxyWrapper(SensorProxyInterface);
|
|
||||||
|
|
||||||
let _singleton = null;
|
|
||||||
|
|
||||||
function getDefault() {
|
|
||||||
if (_singleton == null)
|
|
||||||
_singleton = new SystemActions();
|
|
||||||
|
|
||||||
return _singleton;
|
|
||||||
}
|
|
||||||
|
|
||||||
const SystemActions = new Lang.Class({
|
|
||||||
Name: 'SystemActions',
|
|
||||||
Extends: GObject.Object,
|
|
||||||
Properties: {
|
|
||||||
'can-power-off': GObject.ParamSpec.boolean('can-power-off',
|
|
||||||
'can-power-off',
|
|
||||||
'can-power-off',
|
|
||||||
GObject.ParamFlags.READABLE,
|
|
||||||
false),
|
|
||||||
'can-suspend': GObject.ParamSpec.boolean('can-suspend',
|
|
||||||
'can-suspend',
|
|
||||||
'can-suspend',
|
|
||||||
GObject.ParamFlags.READABLE,
|
|
||||||
false),
|
|
||||||
'can-lock-screen': GObject.ParamSpec.boolean('can-lock-screen',
|
|
||||||
'can-lock-screen',
|
|
||||||
'can-lock-screen',
|
|
||||||
GObject.ParamFlags.READABLE,
|
|
||||||
false),
|
|
||||||
'can-switch-user': GObject.ParamSpec.boolean('can-switch-user',
|
|
||||||
'can-switch-user',
|
|
||||||
'can-switch-user',
|
|
||||||
GObject.ParamFlags.READABLE,
|
|
||||||
false),
|
|
||||||
'can-logout': GObject.ParamSpec.boolean('can-logout',
|
|
||||||
'can-logout',
|
|
||||||
'can-logout',
|
|
||||||
GObject.ParamFlags.READABLE,
|
|
||||||
false),
|
|
||||||
'can-lock-orientation': GObject.ParamSpec.boolean('can-lock-orientation',
|
|
||||||
'can-lock-orientation',
|
|
||||||
'can-lock-orientation',
|
|
||||||
GObject.ParamFlags.READABLE,
|
|
||||||
false),
|
|
||||||
'orientation-lock-icon': GObject.ParamSpec.string('orientation-lock-icon',
|
|
||||||
'orientation-lock-icon',
|
|
||||||
'orientation-lock-icon',
|
|
||||||
GObject.ParamFlags.READWRITE,
|
|
||||||
null)
|
|
||||||
},
|
|
||||||
|
|
||||||
_init: function() {
|
|
||||||
this.parent();
|
|
||||||
|
|
||||||
this._canHavePowerOff = true;
|
|
||||||
this._canHaveSuspend = true;
|
|
||||||
|
|
||||||
this._actions = new Map();
|
|
||||||
this._actions.set(POWER_OFF_ACTION_ID,
|
|
||||||
{ // Translators: The name of the power-off action in search
|
|
||||||
name: C_("search-result", "Power off"),
|
|
||||||
iconName: 'system-shutdown-symbolic',
|
|
||||||
// Translators: A list of keywords that match the power-off action, separated by semicolons
|
|
||||||
keywords: _("power off;shutdown").split(';'),
|
|
||||||
available: false });
|
|
||||||
this._actions.set(LOCK_SCREEN_ACTION_ID,
|
|
||||||
{ // Translators: The name of the lock screen action in search
|
|
||||||
name: C_("search-result", "Lock screen"),
|
|
||||||
iconName: 'system-lock-screen-symbolic',
|
|
||||||
// Translators: A list of keywords that match the lock screen action, separated by semicolons
|
|
||||||
keywords: _("lock screen").split(';'),
|
|
||||||
available: false });
|
|
||||||
this._actions.set(LOGOUT_ACTION_ID,
|
|
||||||
{ // Translators: The name of the logout action in search
|
|
||||||
name: C_("search-result", "Log out"),
|
|
||||||
iconName: 'application-exit-symbolic',
|
|
||||||
// Translators: A list of keywords that match the logout action, separated by semicolons
|
|
||||||
keywords: _("logout;sign off").split(';'),
|
|
||||||
available: false });
|
|
||||||
this._actions.set(SUSPEND_ACTION_ID,
|
|
||||||
{ // Translators: The name of the suspend action in search
|
|
||||||
name: C_("search-result", "Suspend"),
|
|
||||||
iconName: 'media-playback-pause-symbolic',
|
|
||||||
// Translators: A list of keywords that match the suspend action, separated by semicolons
|
|
||||||
keywords: _("suspend;sleep").split(';'),
|
|
||||||
available: false });
|
|
||||||
this._actions.set(SWITCH_USER_ACTION_ID,
|
|
||||||
{ // Translators: The name of the switch user action in search
|
|
||||||
name: C_("search-result", "Switch user"),
|
|
||||||
iconName: 'system-switch-user-symbolic',
|
|
||||||
// Translators: A list of keywords that match the switch user action, separated by semicolons
|
|
||||||
keywords: _("switch user").split(';'),
|
|
||||||
available: false });
|
|
||||||
this._actions.set(LOCK_ORIENTATION_ACTION_ID,
|
|
||||||
{ // Translators: The name of the lock orientation action in search
|
|
||||||
name: C_("search-result", "Lock orientation"),
|
|
||||||
iconName: '',
|
|
||||||
// Translators: A list of keywords that match the lock orientation action, separated by semicolons
|
|
||||||
keywords: _("lock orientation").split(';'),
|
|
||||||
available: false });
|
|
||||||
|
|
||||||
this._loginScreenSettings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
|
|
||||||
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
|
|
||||||
this._orientationSettings = new Gio.Settings({ schema_id: 'org.gnome.settings-daemon.peripherals.touchscreen' });
|
|
||||||
|
|
||||||
this._session = new GnomeSession.SessionManager();
|
|
||||||
this._loginManager = LoginManager.getLoginManager();
|
|
||||||
this._monitorManager = Meta.MonitorManager.get();
|
|
||||||
|
|
||||||
this._userManager = AccountsService.UserManager.get_default();
|
|
||||||
|
|
||||||
this._userManager.connect('notify::is-loaded',
|
|
||||||
() => { this._updateMultiUser(); });
|
|
||||||
this._userManager.connect('notify::has-multiple-users',
|
|
||||||
() => { this._updateMultiUser(); });
|
|
||||||
this._userManager.connect('user-added',
|
|
||||||
() => { this._updateMultiUser(); });
|
|
||||||
this._userManager.connect('user-removed',
|
|
||||||
() => { this._updateMultiUser(); });
|
|
||||||
|
|
||||||
this._lockdownSettings.connect('changed::' + DISABLE_USER_SWITCH_KEY,
|
|
||||||
() => { this._updateSwitchUser(); });
|
|
||||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
|
||||||
() => { this._updateLogout(); });
|
|
||||||
global.settings.connect('changed::' + ALWAYS_SHOW_LOG_OUT_KEY,
|
|
||||||
() => { this._updateLogout(); });
|
|
||||||
|
|
||||||
this._lockdownSettings.connect('changed::' + DISABLE_LOCK_SCREEN_KEY,
|
|
||||||
() => { this._updateLockScreen(); });
|
|
||||||
|
|
||||||
this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
|
|
||||||
() => { this._updateHaveShutdown(); });
|
|
||||||
|
|
||||||
this.forceUpdate();
|
|
||||||
|
|
||||||
this._orientationSettings.connect('changed::orientation-lock',
|
|
||||||
() => { this._updateOrientationLock();
|
|
||||||
this._updateOrientationLockIcon(); });
|
|
||||||
Main.layoutManager.connect('monitors-changed',
|
|
||||||
() => { this._updateOrientationLock(); });
|
|
||||||
Gio.DBus.system.watch_name(SENSOR_BUS_NAME,
|
|
||||||
Gio.BusNameWatcherFlags.NONE,
|
|
||||||
() => { this._sensorProxyAppeared(); },
|
|
||||||
() => {
|
|
||||||
this._sensorProxy = null;
|
|
||||||
this._updateOrientationLock();
|
|
||||||
});
|
|
||||||
this._updateOrientationLock();
|
|
||||||
this._updateOrientationLockIcon();
|
|
||||||
|
|
||||||
Main.sessionMode.connect('updated', () => { this._sessionUpdated(); });
|
|
||||||
this._sessionUpdated();
|
|
||||||
},
|
|
||||||
|
|
||||||
get can_power_off() {
|
|
||||||
return this._actions.get(POWER_OFF_ACTION_ID).available;
|
|
||||||
},
|
|
||||||
|
|
||||||
get can_suspend() {
|
|
||||||
return this._actions.get(SUSPEND_ACTION_ID).available;
|
|
||||||
},
|
|
||||||
|
|
||||||
get can_lock_screen() {
|
|
||||||
return this._actions.get(LOCK_SCREEN_ACTION_ID).available;
|
|
||||||
},
|
|
||||||
|
|
||||||
get can_switch_user() {
|
|
||||||
return this._actions.get(SWITCH_USER_ACTION_ID).available;
|
|
||||||
},
|
|
||||||
|
|
||||||
get can_logout() {
|
|
||||||
return this._actions.get(LOGOUT_ACTION_ID).available;
|
|
||||||
},
|
|
||||||
|
|
||||||
get can_lock_orientation() {
|
|
||||||
return this._actions.get(LOCK_ORIENTATION_ACTION_ID).available;
|
|
||||||
},
|
|
||||||
|
|
||||||
get orientation_lock_icon() {
|
|
||||||
return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName;
|
|
||||||
},
|
|
||||||
|
|
||||||
_sensorProxyAppeared: function() {
|
|
||||||
this._sensorProxy = new SensorProxy(Gio.DBus.system, SENSOR_BUS_NAME, SENSOR_OBJECT_PATH,
|
|
||||||
(proxy, error) => {
|
|
||||||
if (error) {
|
|
||||||
log(error.message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._sensorProxy.connect('g-properties-changed',
|
|
||||||
() => { this._updateOrientationLock(); });
|
|
||||||
this._updateOrientationLock();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateOrientationLock: function() {
|
|
||||||
let available = false;
|
|
||||||
if (this._sensorProxy)
|
|
||||||
available = this._sensorProxy.HasAccelerometer &&
|
|
||||||
this._monitorManager.get_is_builtin_display_on();
|
|
||||||
|
|
||||||
this._actions.get(LOCK_ORIENTATION_ACTION_ID).available = available;
|
|
||||||
|
|
||||||
this.notify('can-lock-orientation');
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateOrientationLockIcon: function() {
|
|
||||||
let locked = this._orientationSettings.get_boolean('orientation-lock');
|
|
||||||
let iconName = locked ? 'rotation-locked-symbolic'
|
|
||||||
: 'rotation-allowed-symbolic';
|
|
||||||
this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName = iconName;
|
|
||||||
|
|
||||||
this.notify('orientation-lock-icon');
|
|
||||||
},
|
|
||||||
|
|
||||||
_sessionUpdated: function() {
|
|
||||||
this._updateLockScreen();
|
|
||||||
this._updatePowerOff();
|
|
||||||
this._updateSuspend();
|
|
||||||
this._updateMultiUser();
|
|
||||||
},
|
|
||||||
|
|
||||||
forceUpdate: function() {
|
|
||||||
// Whether those actions are available or not depends on both lockdown
|
|
||||||
// settings and Polkit policy - we don't get change notifications for the
|
|
||||||
// latter, so their value may be outdated; force an update now
|
|
||||||
this._updateHaveShutdown();
|
|
||||||
this._updateHaveSuspend();
|
|
||||||
},
|
|
||||||
|
|
||||||
getMatchingActions: function(terms) {
|
|
||||||
// terms is a list of strings
|
|
||||||
terms = terms.map((term) => { return term.toLowerCase(); });
|
|
||||||
|
|
||||||
let results = [];
|
|
||||||
|
|
||||||
for (let [key, {available, keywords}] of this._actions)
|
|
||||||
if (available && terms.every(t => keywords.some(k => (k.indexOf(t) >= 0))))
|
|
||||||
results.push(key);
|
|
||||||
|
|
||||||
return results;
|
|
||||||
},
|
|
||||||
|
|
||||||
getName: function(id) {
|
|
||||||
return this._actions.get(id).name;
|
|
||||||
},
|
|
||||||
|
|
||||||
getIconName: function(id) {
|
|
||||||
return this._actions.get(id).iconName;
|
|
||||||
},
|
|
||||||
|
|
||||||
activateAction: function(id) {
|
|
||||||
switch (id) {
|
|
||||||
case POWER_OFF_ACTION_ID:
|
|
||||||
this.activatePowerOff();
|
|
||||||
break;
|
|
||||||
case LOCK_SCREEN_ACTION_ID:
|
|
||||||
this.activateLockScreen();
|
|
||||||
break;
|
|
||||||
case LOGOUT_ACTION_ID:
|
|
||||||
this.activateLogout();
|
|
||||||
break;
|
|
||||||
case SUSPEND_ACTION_ID:
|
|
||||||
this.activateSuspend();
|
|
||||||
break;
|
|
||||||
case SWITCH_USER_ACTION_ID:
|
|
||||||
this.activateSwitchUser();
|
|
||||||
break;
|
|
||||||
case LOCK_ORIENTATION_ACTION_ID:
|
|
||||||
this.activateLockOrientation();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateLockScreen() {
|
|
||||||
let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
|
||||||
let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
|
|
||||||
this._actions.get(LOCK_SCREEN_ACTION_ID).available = showLock && allowLockScreen && LoginManager.canLock();
|
|
||||||
this.notify('can-lock-screen');
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateHaveShutdown: function() {
|
|
||||||
this._session.CanShutdownRemote((result, error) => {
|
|
||||||
if (error)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._canHavePowerOff = result[0];
|
|
||||||
this._updatePowerOff();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_updatePowerOff: function() {
|
|
||||||
let disabled = Main.sessionMode.isLocked ||
|
|
||||||
(Main.sessionMode.isGreeter &&
|
|
||||||
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
|
|
||||||
this._actions.get(POWER_OFF_ACTION_ID).available = this._canHavePowerOff && !disabled;
|
|
||||||
this.notify('can-power-off');
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateHaveSuspend: function() {
|
|
||||||
this._loginManager.canSuspend(
|
|
||||||
(canSuspend, needsAuth) => {
|
|
||||||
this._canHaveSuspend = canSuspend;
|
|
||||||
this._suspendNeedsAuth = needsAuth;
|
|
||||||
this._updateSuspend();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateSuspend: function() {
|
|
||||||
let disabled = (Main.sessionMode.isLocked &&
|
|
||||||
this._suspendNeedsAuth) ||
|
|
||||||
(Main.sessionMode.isGreeter &&
|
|
||||||
this._loginScreenSettings.get_boolean(DISABLE_RESTART_KEY));
|
|
||||||
this._actions.get(SUSPEND_ACTION_ID).available = this._canHaveSuspend && !disabled;
|
|
||||||
this.notify('can-suspend');
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateMultiUser: function() {
|
|
||||||
this._updateLogout();
|
|
||||||
this._updateSwitchUser();
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateSwitchUser: function() {
|
|
||||||
let allowSwitch = !this._lockdownSettings.get_boolean(DISABLE_USER_SWITCH_KEY);
|
|
||||||
let multiUser = this._userManager.can_switch() && this._userManager.has_multiple_users;
|
|
||||||
let shouldShowInMode = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
|
||||||
|
|
||||||
let visible = allowSwitch && multiUser && shouldShowInMode;
|
|
||||||
this._actions.get(SWITCH_USER_ACTION_ID).available = visible;
|
|
||||||
this.notify('can-switch-user');
|
|
||||||
|
|
||||||
return visible;
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateLogout: function() {
|
|
||||||
let user = this._userManager.get_user(GLib.get_user_name());
|
|
||||||
|
|
||||||
let allowLogout = !this._lockdownSettings.get_boolean(DISABLE_LOG_OUT_KEY);
|
|
||||||
let alwaysShow = global.settings.get_boolean(ALWAYS_SHOW_LOG_OUT_KEY);
|
|
||||||
let systemAccount = user.system_account;
|
|
||||||
let localAccount = user.local_account;
|
|
||||||
let multiUser = this._userManager.has_multiple_users;
|
|
||||||
let multiSession = Gdm.get_session_ids().length > 1;
|
|
||||||
let shouldShowInMode = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
|
||||||
|
|
||||||
let visible = allowLogout && (alwaysShow || multiUser || multiSession || systemAccount || !localAccount) && shouldShowInMode;
|
|
||||||
this._actions.get(LOGOUT_ACTION_ID).available = visible;
|
|
||||||
this.notify('can-logout');
|
|
||||||
|
|
||||||
return visible;
|
|
||||||
},
|
|
||||||
|
|
||||||
activateLockOrientation: function() {
|
|
||||||
if (!this._actions.get(LOCK_ORIENTATION_ACTION_ID).available)
|
|
||||||
throw new Error('The lock-orientation action is not available!');
|
|
||||||
|
|
||||||
let locked = this._orientationSettings.get_boolean('orientation-lock');
|
|
||||||
this._orientationSettings.set_boolean('orientation-lock', !locked);
|
|
||||||
},
|
|
||||||
|
|
||||||
activateLockScreen: function() {
|
|
||||||
if (!this._actions.get(LOCK_SCREEN_ACTION_ID).available)
|
|
||||||
throw new Error('The lock-screen action is not available!');
|
|
||||||
|
|
||||||
Main.screenShield.lock(true);
|
|
||||||
},
|
|
||||||
|
|
||||||
activateSwitchUser: function() {
|
|
||||||
if (!this._actions.get(SWITCH_USER_ACTION_ID).available)
|
|
||||||
throw new Error('The switch-user action is not available!');
|
|
||||||
|
|
||||||
if (Main.screenShield)
|
|
||||||
Main.screenShield.lock(false);
|
|
||||||
|
|
||||||
Clutter.threads_add_repaint_func_full(Clutter.RepaintFlags.POST_PAINT, function() {
|
|
||||||
Gdm.goto_login_session_sync(null);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
activateLogout: function() {
|
|
||||||
if (!this._actions.get(LOGOUT_ACTION_ID).available)
|
|
||||||
throw new Error('The logout action is not available!');
|
|
||||||
|
|
||||||
Main.overview.hide();
|
|
||||||
this._session.LogoutRemote(0);
|
|
||||||
},
|
|
||||||
|
|
||||||
activatePowerOff: function() {
|
|
||||||
if (!this._actions.get(POWER_OFF_ACTION_ID).available)
|
|
||||||
throw new Error('The power-off action is not available!');
|
|
||||||
|
|
||||||
this._session.ShutdownRemote(0);
|
|
||||||
},
|
|
||||||
|
|
||||||
activateSuspend: function() {
|
|
||||||
if (!this._actions.get(SUSPEND_ACTION_ID).available)
|
|
||||||
throw new Error('The suspend action is not available!');
|
|
||||||
|
|
||||||
this._loginManager.suspend();
|
|
||||||
}
|
|
||||||
});
|
|
@ -14,7 +14,7 @@ const Main = imports.ui.main;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
var SCROLL_TIME = 0.1;
|
const SCROLL_TIME = 0.1;
|
||||||
|
|
||||||
// http://daringfireball.net/2010/07/improved_regex_for_matching_urls
|
// http://daringfireball.net/2010/07/improved_regex_for_matching_urls
|
||||||
const _balancedParens = '\\((?:[^\\s()<>]+|(?:\\(?:[^\\s()<>]+\\)))*\\)';
|
const _balancedParens = '\\((?:[^\\s()<>]+|(?:\\(?:[^\\s()<>]+\\)))*\\)';
|
||||||
@ -97,7 +97,7 @@ function spawnApp(argv) {
|
|||||||
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
|
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
|
||||||
|
|
||||||
let context = global.create_app_launch_context(0, -1);
|
let context = global.create_app_launch_context(0, -1);
|
||||||
app.launch([], context);
|
app.launch([], context, false);
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
_handleSpawnError(argv[0], err);
|
_handleSpawnError(argv[0], err);
|
||||||
}
|
}
|
||||||
@ -218,10 +218,11 @@ function formatTime(time, params) {
|
|||||||
if (_desktopSettings == null)
|
if (_desktopSettings == null)
|
||||||
_desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
_desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
|
||||||
let clockFormat = _desktopSettings.get_string('clock-format');
|
let clockFormat = _desktopSettings.get_string('clock-format');
|
||||||
|
let hasAmPm = date.format('%p') != '';
|
||||||
|
|
||||||
params = Params.parse(params, { timeOnly: false });
|
params = Params.parse(params, { timeOnly: false });
|
||||||
|
|
||||||
if (clockFormat == '24h') {
|
if (clockFormat == '24h' || !hasAmPm) {
|
||||||
// Show only the time if date is on today
|
// Show only the time if date is on today
|
||||||
if (daysAgo < 1 || params.timeOnly)
|
if (daysAgo < 1 || params.timeOnly)
|
||||||
/* Translators: Time in 24h format */
|
/* Translators: Time in 24h format */
|
||||||
@ -280,10 +281,7 @@ function formatTime(time, params) {
|
|||||||
// xgettext:no-c-format
|
// xgettext:no-c-format
|
||||||
format = N_("%B %d %Y, %l\u2236%M %p");
|
format = N_("%B %d %Y, %l\u2236%M %p");
|
||||||
}
|
}
|
||||||
|
return date.format(Shell.util_translate_time_string(format));
|
||||||
let formattedTime = date.format(Shell.util_translate_time_string(format));
|
|
||||||
// prepend LTR-mark to colon/ratio to force a text direction on times
|
|
||||||
return formattedTime.replace(/([:\u2236])/g, '\u200e$1');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function createTimeLabel(date, params) {
|
function createTimeLabel(date, params) {
|
||||||
@ -350,7 +348,7 @@ function insertSorted(array, val, cmp) {
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
var CloseButton = new Lang.Class({
|
const CloseButton = new Lang.Class({
|
||||||
Name: 'CloseButton',
|
Name: 'CloseButton',
|
||||||
Extends: St.Button,
|
Extends: St.Button,
|
||||||
|
|
||||||
@ -439,7 +437,7 @@ function ensureActorVisibleInScrollView(scrollView, actor) {
|
|||||||
transition: 'easeOutQuad' });
|
transition: 'easeOutQuad' });
|
||||||
}
|
}
|
||||||
|
|
||||||
var AppSettingsMonitor = new Lang.Class({
|
const AppSettingsMonitor = new Lang.Class({
|
||||||
Name: 'AppSettingsMonitor',
|
Name: 'AppSettingsMonitor',
|
||||||
|
|
||||||
_init: function(appId, schemaId) {
|
_init: function(appId, schemaId) {
|
||||||
|
@ -11,9 +11,9 @@ const PermissionStore = imports.misc.permissionStore;
|
|||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
// Minimum time between updates to show loading indication
|
// Minimum time between updates to show loading indication
|
||||||
var UPDATE_THRESHOLD = 10 * GLib.TIME_SPAN_MINUTE;
|
const UPDATE_THRESHOLD = 10 * GLib.TIME_SPAN_MINUTE;
|
||||||
|
|
||||||
var WeatherClient = new Lang.Class({
|
const WeatherClient = new Lang.Class({
|
||||||
Name: 'WeatherClient',
|
Name: 'WeatherClient',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -54,11 +54,10 @@ var WeatherClient = new Lang.Class({
|
|||||||
|
|
||||||
this._world = GWeather.Location.get_world();
|
this._world = GWeather.Location.get_world();
|
||||||
|
|
||||||
this._providers = GWeather.Provider.METAR |
|
let providers = GWeather.Provider.METAR |
|
||||||
GWeather.Provider.YR_NO |
|
GWeather.Provider.YR_NO |
|
||||||
GWeather.Provider.OWM;
|
GWeather.Provider.OWM;
|
||||||
|
this._weatherInfo = new GWeather.Info({ enabled_providers: providers });
|
||||||
this._weatherInfo = new GWeather.Info({ enabled_providers: 0 });
|
|
||||||
this._weatherInfo.connect_after('updated', () => {
|
this._weatherInfo.connect_after('updated', () => {
|
||||||
this._lastUpdate = GLib.DateTime.new_now_local();
|
this._lastUpdate = GLib.DateTime.new_now_local();
|
||||||
this.emit('changed');
|
this.emit('changed');
|
||||||
@ -142,8 +141,6 @@ var WeatherClient = new Lang.Class({
|
|||||||
this._weatherInfo.set_location(location);
|
this._weatherInfo.set_location(location);
|
||||||
this._locationValid = (location != null);
|
this._locationValid = (location != null);
|
||||||
|
|
||||||
this._weatherInfo.set_enabled_providers(location ? this._providers : 0);
|
|
||||||
|
|
||||||
if (location)
|
if (location)
|
||||||
this._loadInfo();
|
this._loadInfo();
|
||||||
else
|
else
|
||||||
|
@ -50,7 +50,7 @@ const HelperDBusInterface = '<node> \
|
|||||||
</interface> \
|
</interface> \
|
||||||
</node>';
|
</node>';
|
||||||
|
|
||||||
var PortalHeaderBar = new Lang.Class({
|
const PortalHeaderBar = new Lang.Class({
|
||||||
Name: 'PortalHeaderBar',
|
Name: 'PortalHeaderBar',
|
||||||
Extends: Gtk.HeaderBar,
|
Extends: Gtk.HeaderBar,
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ var PortalHeaderBar = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var PortalWindow = new Lang.Class({
|
const PortalWindow = new Lang.Class({
|
||||||
Name: 'PortalWindow',
|
Name: 'PortalWindow',
|
||||||
Extends: Gtk.ApplicationWindow,
|
Extends: Gtk.ApplicationWindow,
|
||||||
|
|
||||||
@ -143,7 +143,6 @@ var PortalWindow = new Lang.Class({
|
|||||||
|
|
||||||
this._webContext = WebKit.WebContext.new_ephemeral();
|
this._webContext = WebKit.WebContext.new_ephemeral();
|
||||||
this._webContext.set_cache_model(WebKit.CacheModel.DOCUMENT_VIEWER);
|
this._webContext.set_cache_model(WebKit.CacheModel.DOCUMENT_VIEWER);
|
||||||
this._webContext.set_network_proxy_settings(WebKit.NetworkProxyMode.NO_PROXY, null);
|
|
||||||
|
|
||||||
this._webView = WebKit.WebView.new_with_context(this._webContext);
|
this._webView = WebKit.WebView.new_with_context(this._webContext);
|
||||||
this._webView.connect('decide-policy', Lang.bind(this, this._onDecidePolicy));
|
this._webView.connect('decide-policy', Lang.bind(this, this._onDecidePolicy));
|
||||||
@ -282,7 +281,7 @@ var PortalWindow = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var WebPortalHelper = new Lang.Class({
|
const WebPortalHelper = new Lang.Class({
|
||||||
Name: 'WebPortalHelper',
|
Name: 'WebPortalHelper',
|
||||||
Extends: Gtk.Application,
|
Extends: Gtk.Application,
|
||||||
|
|
||||||
@ -357,7 +356,7 @@ var WebPortalHelper = new Lang.Class({
|
|||||||
if (top.window != null)
|
if (top.window != null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
top.window = new PortalWindow(this, top.url, top.timestamp, Lang.bind(this, function(result) {
|
top.window = new PortalWindow(this, top.uri, top.timestamp, Lang.bind(this, function(result) {
|
||||||
this._dbusImpl.emit_signal('Done', new GLib.Variant('(ou)', [top.connection, result]));
|
this._dbusImpl.emit_signal('Done', new GLib.Variant('(ou)', [top.connection, result]));
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
@ -7,7 +7,6 @@ const Shell = imports.gi.Shell;
|
|||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const CheckBox = imports.ui.checkBox;
|
const CheckBox = imports.ui.checkBox;
|
||||||
const Dialog = imports.ui.dialog;
|
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
|
|
||||||
const RequestIface = '<node> \
|
const RequestIface = '<node> \
|
||||||
@ -32,13 +31,13 @@ const AccessIface = '<node> \
|
|||||||
</interface> \
|
</interface> \
|
||||||
</node>';
|
</node>';
|
||||||
|
|
||||||
var DialogResponse = {
|
const DialogResponse = {
|
||||||
OK: 0,
|
OK: 0,
|
||||||
CANCEL: 1,
|
CANCEL: 1,
|
||||||
CLOSED: 2
|
CLOSED: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
var AccessDialog = new Lang.Class({
|
const AccessDialog = new Lang.Class({
|
||||||
Name: 'AccessDialog',
|
Name: 'AccessDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
@ -65,11 +64,29 @@ var AccessDialog = new Lang.Class({
|
|||||||
let iconName = options['icon'] || null;
|
let iconName = options['icon'] || null;
|
||||||
let choices = options['choices'] || [];
|
let choices = options['choices'] || [];
|
||||||
|
|
||||||
let contentParams = { title, subtitle, body };
|
let mainContentBox = new St.BoxLayout();
|
||||||
if (iconName)
|
mainContentBox.style_class = 'access-dialog-main-layout';
|
||||||
contentParams.icon = new Gio.ThemedIcon({ name: iconName });
|
this.contentLayout.add_actor(mainContentBox);
|
||||||
let content = new Dialog.MessageDialogContent(contentParams);
|
|
||||||
this.contentLayout.add_actor(content);
|
let icon = new St.Icon({ style_class: 'access-dialog-icon',
|
||||||
|
icon_name: iconName,
|
||||||
|
y_align: Clutter.ActorAlign.START });
|
||||||
|
mainContentBox.add_actor(icon);
|
||||||
|
|
||||||
|
let messageBox = new St.BoxLayout({ vertical: true });
|
||||||
|
messageBox.style_class = 'access-dialog-content',
|
||||||
|
mainContentBox.add_actor(messageBox);
|
||||||
|
|
||||||
|
let label;
|
||||||
|
label = new St.Label({ style_class: 'access-dialog-title headline',
|
||||||
|
text: title });
|
||||||
|
messageBox.add_actor(label);
|
||||||
|
|
||||||
|
label = new St.Label({ style_class: 'access-dialog-subtitle',
|
||||||
|
text: subtitle });
|
||||||
|
label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
label.clutter_text.line_wrap = true;
|
||||||
|
messageBox.add_actor(label);
|
||||||
|
|
||||||
this._choices = new Map();
|
this._choices = new Map();
|
||||||
|
|
||||||
@ -81,11 +98,16 @@ var AccessDialog = new Lang.Class({
|
|||||||
let check = new CheckBox.CheckBox();
|
let check = new CheckBox.CheckBox();
|
||||||
check.getLabelActor().text = name;
|
check.getLabelActor().text = name;
|
||||||
check.actor.checked = selected == "true";
|
check.actor.checked = selected == "true";
|
||||||
content.insertBeforeBody(check.actor);
|
messageBox.add_actor(check.actor);
|
||||||
|
|
||||||
this._choices.set(id, check);
|
this._choices.set(id, check);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label = new St.Label({ text: body });
|
||||||
|
label.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
label.clutter_text.line_wrap = true;
|
||||||
|
messageBox.add_actor(label);
|
||||||
|
|
||||||
this.addButton({ label: denyLabel,
|
this.addButton({ label: denyLabel,
|
||||||
action: () => {
|
action: () => {
|
||||||
this._sendResponse(DialogResponse.CANCEL);
|
this._sendResponse(DialogResponse.CANCEL);
|
||||||
@ -137,7 +159,7 @@ var AccessDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AccessDialogDBus = new Lang.Class({
|
const AccessDialogDBus = new Lang.Class({
|
||||||
Name: 'AccessDialogDBus',
|
Name: 'AccessDialogDBus',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
@ -14,19 +14,19 @@ const Main = imports.ui.main;
|
|||||||
const SwitcherPopup = imports.ui.switcherPopup;
|
const SwitcherPopup = imports.ui.switcherPopup;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var APP_ICON_HOVER_TIMEOUT = 200; // milliseconds
|
const APP_ICON_HOVER_TIMEOUT = 200; // milliseconds
|
||||||
|
|
||||||
var THUMBNAIL_DEFAULT_SIZE = 256;
|
const THUMBNAIL_DEFAULT_SIZE = 256;
|
||||||
var THUMBNAIL_POPUP_TIME = 500; // milliseconds
|
const THUMBNAIL_POPUP_TIME = 500; // milliseconds
|
||||||
var THUMBNAIL_FADE_TIME = 0.1; // seconds
|
const THUMBNAIL_FADE_TIME = 0.1; // seconds
|
||||||
|
|
||||||
var WINDOW_PREVIEW_SIZE = 128;
|
const WINDOW_PREVIEW_SIZE = 128;
|
||||||
var APP_ICON_SIZE = 96;
|
const APP_ICON_SIZE = 96;
|
||||||
var APP_ICON_SIZE_SMALL = 48;
|
const APP_ICON_SIZE_SMALL = 48;
|
||||||
|
|
||||||
const baseIconSizes = [96, 64, 48, 32, 22];
|
const baseIconSizes = [96, 64, 48, 32, 22];
|
||||||
|
|
||||||
var AppIconMode = {
|
const AppIconMode = {
|
||||||
THUMBNAIL_ONLY: 1,
|
THUMBNAIL_ONLY: 1,
|
||||||
APP_ICON_ONLY: 2,
|
APP_ICON_ONLY: 2,
|
||||||
BOTH: 3,
|
BOTH: 3,
|
||||||
@ -58,7 +58,7 @@ function getWindows(workspace) {
|
|||||||
}).filter((w, i, a) => !w.skip_taskbar && a.indexOf(w) == i);
|
}).filter((w, i, a) => !w.skip_taskbar && a.indexOf(w) == i);
|
||||||
}
|
}
|
||||||
|
|
||||||
var AppSwitcherPopup = new Lang.Class({
|
const AppSwitcherPopup = new Lang.Class({
|
||||||
Name: 'AppSwitcherPopup',
|
Name: 'AppSwitcherPopup',
|
||||||
Extends: SwitcherPopup.SwitcherPopup,
|
Extends: SwitcherPopup.SwitcherPopup,
|
||||||
|
|
||||||
@ -158,10 +158,7 @@ var AppSwitcherPopup = new Lang.Class({
|
|||||||
|
|
||||||
_keyPressHandler: function(keysym, action) {
|
_keyPressHandler: function(keysym, action) {
|
||||||
if (action == Meta.KeyBindingAction.SWITCH_GROUP) {
|
if (action == Meta.KeyBindingAction.SWITCH_GROUP) {
|
||||||
if (!this._thumbnailsFocused)
|
this._select(this._selectedIndex, this._nextWindow());
|
||||||
this._select(this._selectedIndex, 0);
|
|
||||||
else
|
|
||||||
this._select(this._selectedIndex, this._nextWindow());
|
|
||||||
} else if (action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) {
|
} else if (action == Meta.KeyBindingAction.SWITCH_GROUP_BACKWARD) {
|
||||||
this._select(this._selectedIndex, this._previousWindow());
|
this._select(this._selectedIndex, this._previousWindow());
|
||||||
} else if (action == Meta.KeyBindingAction.SWITCH_APPLICATIONS) {
|
} else if (action == Meta.KeyBindingAction.SWITCH_APPLICATIONS) {
|
||||||
@ -369,7 +366,7 @@ var AppSwitcherPopup = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var CyclerHighlight = new Lang.Class({
|
const CyclerHighlight = new Lang.Class({
|
||||||
Name: 'CyclerHighlight',
|
Name: 'CyclerHighlight',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -430,7 +427,7 @@ var CyclerHighlight = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var CyclerPopup = new Lang.Class({
|
const CyclerPopup = new Lang.Class({
|
||||||
Name: 'CyclerPopup',
|
Name: 'CyclerPopup',
|
||||||
Extends: SwitcherPopup.SwitcherPopup,
|
Extends: SwitcherPopup.SwitcherPopup,
|
||||||
Abstract: true,
|
Abstract: true,
|
||||||
@ -491,7 +488,7 @@ var CyclerPopup = new Lang.Class({
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var GroupCyclerPopup = new Lang.Class({
|
const GroupCyclerPopup = new Lang.Class({
|
||||||
Name: 'GroupCyclerPopup',
|
Name: 'GroupCyclerPopup',
|
||||||
Extends: CyclerPopup,
|
Extends: CyclerPopup,
|
||||||
|
|
||||||
@ -512,7 +509,7 @@ var GroupCyclerPopup = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var WindowSwitcherPopup = new Lang.Class({
|
const WindowSwitcherPopup = new Lang.Class({
|
||||||
Name: 'WindowSwitcherPopup',
|
Name: 'WindowSwitcherPopup',
|
||||||
Extends: SwitcherPopup.SwitcherPopup,
|
Extends: SwitcherPopup.SwitcherPopup,
|
||||||
|
|
||||||
@ -559,7 +556,7 @@ var WindowSwitcherPopup = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var WindowCyclerPopup = new Lang.Class({
|
const WindowCyclerPopup = new Lang.Class({
|
||||||
Name: 'WindowCyclerPopup',
|
Name: 'WindowCyclerPopup',
|
||||||
Extends: CyclerPopup,
|
Extends: CyclerPopup,
|
||||||
|
|
||||||
@ -585,7 +582,7 @@ var WindowCyclerPopup = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AppIcon = new Lang.Class({
|
const AppIcon = new Lang.Class({
|
||||||
Name: 'AppIcon',
|
Name: 'AppIcon',
|
||||||
|
|
||||||
_init: function(app) {
|
_init: function(app) {
|
||||||
@ -606,7 +603,7 @@ var AppIcon = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AppSwitcher = new Lang.Class({
|
const AppSwitcher = new Lang.Class({
|
||||||
Name: 'AppSwitcher',
|
Name: 'AppSwitcher',
|
||||||
Extends: SwitcherPopup.SwitcherList,
|
Extends: SwitcherPopup.SwitcherList,
|
||||||
|
|
||||||
@ -780,7 +777,7 @@ var AppSwitcher = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ThumbnailList = new Lang.Class({
|
const ThumbnailList = new Lang.Class({
|
||||||
Name: 'ThumbnailList',
|
Name: 'ThumbnailList',
|
||||||
Extends: SwitcherPopup.SwitcherList,
|
Extends: SwitcherPopup.SwitcherList,
|
||||||
|
|
||||||
@ -848,7 +845,7 @@ var ThumbnailList = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var WindowIcon = new Lang.Class({
|
const WindowIcon = new Lang.Class({
|
||||||
Name: 'WindowIcon',
|
Name: 'WindowIcon',
|
||||||
|
|
||||||
_init: function(window, mode) {
|
_init: function(window, mode) {
|
||||||
@ -905,7 +902,7 @@ var WindowIcon = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var WindowList = new Lang.Class({
|
const WindowList = new Lang.Class({
|
||||||
Name: 'WindowList',
|
Name: 'WindowList',
|
||||||
Extends: SwitcherPopup.SwitcherList,
|
Extends: SwitcherPopup.SwitcherList,
|
||||||
|
|
||||||
|
@ -7,9 +7,9 @@ const St = imports.gi.St;
|
|||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Atk = imports.gi.Atk;
|
const Atk = imports.gi.Atk;
|
||||||
|
|
||||||
var ANIMATED_ICON_UPDATE_TIMEOUT = 16;
|
const ANIMATED_ICON_UPDATE_TIMEOUT = 16;
|
||||||
|
|
||||||
var Animation = new Lang.Class({
|
const Animation = new Lang.Class({
|
||||||
Name: 'Animation',
|
Name: 'Animation',
|
||||||
|
|
||||||
_init: function(file, width, height, speed) {
|
_init: function(file, width, height, speed) {
|
||||||
@ -78,7 +78,7 @@ var Animation = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AnimatedIcon = new Lang.Class({
|
const AnimatedIcon = new Lang.Class({
|
||||||
Name: 'AnimatedIcon',
|
Name: 'AnimatedIcon',
|
||||||
Extends: Animation,
|
Extends: Animation,
|
||||||
|
|
||||||
|
@ -24,44 +24,41 @@ const OverviewControls = imports.ui.overviewControls;
|
|||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const Workspace = imports.ui.workspace;
|
const Workspace = imports.ui.workspace;
|
||||||
const Search = imports.ui.search;
|
|
||||||
const System = imports.ui.status.system;
|
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
const SystemActions = imports.misc.systemActions;
|
|
||||||
|
|
||||||
var MAX_APPLICATION_WORK_MILLIS = 75;
|
const MAX_APPLICATION_WORK_MILLIS = 75;
|
||||||
var MENU_POPUP_TIMEOUT = 600;
|
const MENU_POPUP_TIMEOUT = 600;
|
||||||
var MAX_COLUMNS = 6;
|
const MAX_COLUMNS = 6;
|
||||||
var MIN_COLUMNS = 4;
|
const MIN_COLUMNS = 4;
|
||||||
var MIN_ROWS = 4;
|
const MIN_ROWS = 4;
|
||||||
|
|
||||||
var INACTIVE_GRID_OPACITY = 77;
|
const INACTIVE_GRID_OPACITY = 77;
|
||||||
// This time needs to be less than IconGrid.EXTRA_SPACE_ANIMATION_TIME
|
// This time needs to be less than IconGrid.EXTRA_SPACE_ANIMATION_TIME
|
||||||
// to not clash with other animations
|
// to not clash with other animations
|
||||||
var INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.24;
|
const INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.24;
|
||||||
var FOLDER_SUBICON_FRACTION = .4;
|
const FOLDER_SUBICON_FRACTION = .4;
|
||||||
|
|
||||||
var MIN_FREQUENT_APPS_COUNT = 3;
|
const MIN_FREQUENT_APPS_COUNT = 3;
|
||||||
|
|
||||||
var INDICATORS_BASE_TIME = 0.25;
|
const INDICATORS_BASE_TIME = 0.25;
|
||||||
var INDICATORS_ANIMATION_DELAY = 0.125;
|
const INDICATORS_ANIMATION_DELAY = 0.125;
|
||||||
var INDICATORS_ANIMATION_MAX_TIME = 0.75;
|
const INDICATORS_ANIMATION_MAX_TIME = 0.75;
|
||||||
|
|
||||||
var VIEWS_SWITCH_TIME = 0.4;
|
|
||||||
var VIEWS_SWITCH_ANIMATION_DELAY = 0.1;
|
|
||||||
|
|
||||||
// Follow iconGrid animations approach and divide by 2 to animate out to
|
// Follow iconGrid animations approach and divide by 2 to animate out to
|
||||||
// not annoy the user when the user wants to quit appDisplay.
|
// not annoy the user when the user wants to quit appDisplay.
|
||||||
// Also, make sure we don't exceed iconGrid animation total time or
|
// Also, make sure we don't exceed iconGrid animation total time or
|
||||||
// views switch time.
|
// views switch time.
|
||||||
var INDICATORS_BASE_TIME_OUT = 0.125;
|
const INDICATORS_BASE_TIME_OUT = 0.125;
|
||||||
var INDICATORS_ANIMATION_DELAY_OUT = 0.0625;
|
const INDICATORS_ANIMATION_DELAY_OUT = 0.0625;
|
||||||
var INDICATORS_ANIMATION_MAX_TIME_OUT =
|
const INDICATORS_ANIMATION_MAX_TIME_OUT =
|
||||||
Math.min (VIEWS_SWITCH_TIME,
|
Math.min (VIEWS_SWITCH_TIME,
|
||||||
IconGrid.ANIMATION_TIME_OUT + IconGrid.ANIMATION_MAX_DELAY_OUT_FOR_ITEM);
|
IconGrid.ANIMATION_TIME_OUT + IconGrid.ANIMATION_MAX_DELAY_OUT_FOR_ITEM);
|
||||||
|
|
||||||
var PAGE_SWITCH_TIME = 0.3;
|
const PAGE_SWITCH_TIME = 0.3;
|
||||||
|
|
||||||
|
const VIEWS_SWITCH_TIME = 0.4;
|
||||||
|
const VIEWS_SWITCH_ANIMATION_DELAY = 0.1;
|
||||||
|
|
||||||
const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';
|
const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';
|
||||||
const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';
|
const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';
|
||||||
@ -111,7 +108,7 @@ function clamp(value, min, max) {
|
|||||||
return Math.max(min, Math.min(max, value));
|
return Math.max(min, Math.min(max, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
var BaseAppView = new Lang.Class({
|
const BaseAppView = new Lang.Class({
|
||||||
Name: 'BaseAppView',
|
Name: 'BaseAppView',
|
||||||
Abstract: true,
|
Abstract: true,
|
||||||
|
|
||||||
@ -222,10 +219,17 @@ var BaseAppView = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (animationDirection == IconGrid.AnimationDirection.IN) {
|
if (animationDirection == IconGrid.AnimationDirection.IN) {
|
||||||
let id = this._grid.actor.connect('paint', () => {
|
let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this,
|
||||||
this._grid.actor.disconnect(id);
|
function() {
|
||||||
this._doSpringAnimation(animationDirection);
|
this._grid.actor.disconnect(toAnimate);
|
||||||
});
|
// We need to hide the grid temporary to not flash it
|
||||||
|
// for a frame
|
||||||
|
this._grid.actor.opacity = 0;
|
||||||
|
Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._doSpringAnimation(animationDirection)
|
||||||
|
}));
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
this._doSpringAnimation(animationDirection);
|
this._doSpringAnimation(animationDirection);
|
||||||
}
|
}
|
||||||
@ -252,7 +256,7 @@ var BaseAppView = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(BaseAppView.prototype);
|
Signals.addSignalMethods(BaseAppView.prototype);
|
||||||
|
|
||||||
var PageIndicatorsActor = new Lang.Class({
|
const PageIndicatorsActor = new Lang.Class({
|
||||||
Name:'PageIndicatorsActor',
|
Name:'PageIndicatorsActor',
|
||||||
Extends: St.BoxLayout,
|
Extends: St.BoxLayout,
|
||||||
|
|
||||||
@ -276,7 +280,7 @@ var PageIndicatorsActor = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var PageIndicators = new Lang.Class({
|
const PageIndicators = new Lang.Class({
|
||||||
Name:'PageIndicators',
|
Name:'PageIndicators',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -369,7 +373,7 @@ var PageIndicators = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(PageIndicators.prototype);
|
Signals.addSignalMethods(PageIndicators.prototype);
|
||||||
|
|
||||||
var AllView = new Lang.Class({
|
const AllView = new Lang.Class({
|
||||||
Name: 'AllView',
|
Name: 'AllView',
|
||||||
Extends: BaseAppView,
|
Extends: BaseAppView,
|
||||||
|
|
||||||
@ -443,10 +447,7 @@ var AllView = new Lang.Class({
|
|||||||
}));
|
}));
|
||||||
this._grid.connect('space-opened', Lang.bind(this,
|
this._grid.connect('space-opened', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
let fadeEffect = this._scrollView.get_effect('fade');
|
this._scrollView.get_effect('fade').enabled = false;
|
||||||
if (fadeEffect)
|
|
||||||
fadeEffect.enabled = false;
|
|
||||||
|
|
||||||
this.emit('space-ready');
|
this.emit('space-ready');
|
||||||
}));
|
}));
|
||||||
this._grid.connect('space-closed', Lang.bind(this,
|
this._grid.connect('space-closed', Lang.bind(this,
|
||||||
@ -657,11 +658,7 @@ var AllView = new Lang.Class({
|
|||||||
|
|
||||||
_closeSpaceForPopup: function() {
|
_closeSpaceForPopup: function() {
|
||||||
this._updateIconOpacities(false);
|
this._updateIconOpacities(false);
|
||||||
|
this._scrollView.get_effect('fade').enabled = true;
|
||||||
let fadeEffect = this._scrollView.get_effect('fade');
|
|
||||||
if (fadeEffect)
|
|
||||||
fadeEffect.enabled = true;
|
|
||||||
|
|
||||||
this._grid.closeExtraSpace();
|
this._grid.closeExtraSpace();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -795,7 +792,7 @@ var AllView = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(AllView.prototype);
|
Signals.addSignalMethods(AllView.prototype);
|
||||||
|
|
||||||
var FrequentView = new Lang.Class({
|
const FrequentView = new Lang.Class({
|
||||||
Name: 'FrequentView',
|
Name: 'FrequentView',
|
||||||
Extends: BaseAppView,
|
Extends: BaseAppView,
|
||||||
|
|
||||||
@ -869,12 +866,12 @@ var FrequentView = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Views = {
|
const Views = {
|
||||||
FREQUENT: 0,
|
FREQUENT: 0,
|
||||||
ALL: 1
|
ALL: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
var ControlsBoxLayout = Lang.Class({
|
const ControlsBoxLayout = Lang.Class({
|
||||||
Name: 'ControlsBoxLayout',
|
Name: 'ControlsBoxLayout',
|
||||||
Extends: Clutter.BoxLayout,
|
Extends: Clutter.BoxLayout,
|
||||||
|
|
||||||
@ -899,7 +896,7 @@ var ControlsBoxLayout = Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ViewStackLayout = new Lang.Class({
|
const ViewStackLayout = new Lang.Class({
|
||||||
Name: 'ViewStackLayout',
|
Name: 'ViewStackLayout',
|
||||||
Extends: Clutter.BinLayout,
|
Extends: Clutter.BinLayout,
|
||||||
Signals: { 'allocated-size-changed': { param_types: [GObject.TYPE_INT,
|
Signals: { 'allocated-size-changed': { param_types: [GObject.TYPE_INT,
|
||||||
@ -915,7 +912,7 @@ var ViewStackLayout = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AppDisplay = new Lang.Class({
|
const AppDisplay = new Lang.Class({
|
||||||
Name: 'AppDisplay',
|
Name: 'AppDisplay',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -1080,43 +1077,25 @@ var AppDisplay = new Lang.Class({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
var AppSearchProvider = new Lang.Class({
|
const AppSearchProvider = new Lang.Class({
|
||||||
Name: 'AppSearchProvider',
|
Name: 'AppSearchProvider',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this._appSys = Shell.AppSystem.get_default();
|
this._appSys = Shell.AppSystem.get_default();
|
||||||
this.id = 'applications';
|
this.id = 'applications';
|
||||||
this.isRemoteProvider = false;
|
|
||||||
this.canLaunchSearch = false;
|
|
||||||
|
|
||||||
this._systemActions = new SystemActions.getDefault();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getResultMetas: function(apps, callback) {
|
getResultMetas: function(apps, callback) {
|
||||||
let metas = [];
|
let metas = [];
|
||||||
for (let id of apps) {
|
for (let i = 0; i < apps.length; i++) {
|
||||||
if (id.endsWith('.desktop')) {
|
let app = this._appSys.lookup_app(apps[i]);
|
||||||
let app = this._appSys.lookup_app(id);
|
metas.push({ 'id': app.get_id(),
|
||||||
|
'name': app.get_name(),
|
||||||
metas.push({ 'id': app.get_id(),
|
'createIcon': function(size) {
|
||||||
'name': app.get_name(),
|
return app.create_icon_texture(size);
|
||||||
'createIcon': function(size) {
|
}
|
||||||
return app.create_icon_texture(size);
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
let name = this._systemActions.getName(id);
|
|
||||||
let iconName = this._systemActions.getIconName(id);
|
|
||||||
|
|
||||||
let createIcon = size => new St.Icon({ icon_name: iconName,
|
|
||||||
width: size,
|
|
||||||
height: size,
|
|
||||||
style_class: 'system-action-icon' });
|
|
||||||
|
|
||||||
metas.push({ id, name, createIcon });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
callback(metas);
|
callback(metas);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1138,9 +1117,6 @@ var AppSearchProvider = new Lang.Class({
|
|||||||
return usage.compare('', a, b);
|
return usage.compare('', a, b);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
results = results.concat(this._systemActions.getMatchingActions(terms));
|
|
||||||
|
|
||||||
callback(results);
|
callback(results);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1149,14 +1125,12 @@ var AppSearchProvider = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
createResultObject: function (resultMeta) {
|
createResultObject: function (resultMeta) {
|
||||||
if (resultMeta.id.endsWith('.desktop'))
|
let app = this._appSys.lookup_app(resultMeta['id']);
|
||||||
return new AppIcon(this._appSys.lookup_app(resultMeta['id']));
|
return new AppIcon(app);
|
||||||
else
|
|
||||||
return new SystemActionIcon(this, resultMeta);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var FolderView = new Lang.Class({
|
const FolderView = new Lang.Class({
|
||||||
Name: 'FolderView',
|
Name: 'FolderView',
|
||||||
Extends: BaseAppView,
|
Extends: BaseAppView,
|
||||||
|
|
||||||
@ -1196,9 +1170,13 @@ var FolderView = new Lang.Class({
|
|||||||
let numItems = this._allItems.length;
|
let numItems = this._allItems.length;
|
||||||
let rtl = icon.get_text_direction() == Clutter.TextDirection.RTL;
|
let rtl = icon.get_text_direction() == Clutter.TextDirection.RTL;
|
||||||
for (let i = 0; i < 4; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
let bin = new St.Bin({ width: subSize, height: subSize });
|
let bin;
|
||||||
if (i < numItems)
|
if (i < numItems) {
|
||||||
bin.child = this._allItems[i].app.create_icon_texture(subSize);
|
let texture = this._allItems[i].app.create_icon_texture(subSize);
|
||||||
|
bin = new St.Bin({ child: texture });
|
||||||
|
} else {
|
||||||
|
bin = new St.Bin({ width: subSize, height: subSize });
|
||||||
|
}
|
||||||
layout.attach(bin, rtl ? (i + 1) % 2 : i % 2, Math.floor(i / 2), 1, 1);
|
layout.attach(bin, rtl ? (i + 1) % 2 : i % 2, Math.floor(i / 2), 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1268,12 +1246,11 @@ var FolderView = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var FolderIcon = new Lang.Class({
|
const FolderIcon = new Lang.Class({
|
||||||
Name: 'FolderIcon',
|
Name: 'FolderIcon',
|
||||||
|
|
||||||
_init: function(id, path, parentView) {
|
_init: function(id, path, parentView) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.name = '';
|
|
||||||
this._parentView = parentView;
|
this._parentView = parentView;
|
||||||
|
|
||||||
this._folder = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders.folder',
|
this._folder = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders.folder',
|
||||||
@ -1446,7 +1423,7 @@ var FolderIcon = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(FolderIcon.prototype);
|
Signals.addSignalMethods(FolderIcon.prototype);
|
||||||
|
|
||||||
var AppFolderPopup = new Lang.Class({
|
const AppFolderPopup = new Lang.Class({
|
||||||
Name: 'AppFolderPopup',
|
Name: 'AppFolderPopup',
|
||||||
|
|
||||||
_init: function(source, side) {
|
_init: function(source, side) {
|
||||||
@ -1607,7 +1584,7 @@ var AppFolderPopup = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(AppFolderPopup.prototype);
|
Signals.addSignalMethods(AppFolderPopup.prototype);
|
||||||
|
|
||||||
var AppIcon = new Lang.Class({
|
const AppIcon = new Lang.Class({
|
||||||
Name: 'AppIcon',
|
Name: 'AppIcon',
|
||||||
|
|
||||||
_init : function(app, iconParams) {
|
_init : function(app, iconParams) {
|
||||||
@ -1853,7 +1830,7 @@ var AppIcon = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(AppIcon.prototype);
|
Signals.addSignalMethods(AppIcon.prototype);
|
||||||
|
|
||||||
var AppIconMenu = new Lang.Class({
|
const AppIconMenu = new Lang.Class({
|
||||||
Name: 'AppIconMenu',
|
Name: 'AppIconMenu',
|
||||||
Extends: PopupMenu.PopupMenu,
|
Extends: PopupMenu.PopupMenu,
|
||||||
|
|
||||||
@ -2007,13 +1984,3 @@ var AppIconMenu = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(AppIconMenu.prototype);
|
Signals.addSignalMethods(AppIconMenu.prototype);
|
||||||
|
|
||||||
var SystemActionIcon = new Lang.Class({
|
|
||||||
Name: 'SystemActionIcon',
|
|
||||||
Extends: Search.GridSearchResult,
|
|
||||||
|
|
||||||
activate: function() {
|
|
||||||
SystemActions.getDefault().activateAction(this.metaInfo['id']);
|
|
||||||
Main.overview.hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
@ -6,12 +6,10 @@ const Signals = imports.signals;
|
|||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
// In alphabetical order
|
|
||||||
const RENAMED_DESKTOP_IDS = {
|
const RENAMED_DESKTOP_IDS = {
|
||||||
'baobab.desktop': 'org.gnome.baobab.desktop',
|
'baobab.desktop': 'org.gnome.baobab.desktop',
|
||||||
'cheese.desktop': 'org.gnome.Cheese.desktop',
|
'cheese.desktop': 'org.gnome.Cheese.desktop',
|
||||||
'dconf-editor.desktop': 'ca.desrt.dconf-editor.desktop',
|
'dconf-editor.desktop': 'ca.desrt.dconf-editor.desktop',
|
||||||
'empathy.desktop': 'org.gnome.Empathy.desktop',
|
|
||||||
'epiphany.desktop': 'org.gnome.Epiphany.desktop',
|
'epiphany.desktop': 'org.gnome.Epiphany.desktop',
|
||||||
'file-roller.desktop': 'org.gnome.FileRoller.desktop',
|
'file-roller.desktop': 'org.gnome.FileRoller.desktop',
|
||||||
'gcalctool.desktop': 'org.gnome.Calculator.desktop',
|
'gcalctool.desktop': 'org.gnome.Calculator.desktop',
|
||||||
@ -29,7 +27,6 @@ const RENAMED_DESKTOP_IDS = {
|
|||||||
'gnome-documents.desktop': 'org.gnome.Documents.desktop',
|
'gnome-documents.desktop': 'org.gnome.Documents.desktop',
|
||||||
'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop',
|
'gnome-font-viewer.desktop': 'org.gnome.font-viewer.desktop',
|
||||||
'gnome-nibbles.desktop': 'org.gnome.Nibbles.desktop',
|
'gnome-nibbles.desktop': 'org.gnome.Nibbles.desktop',
|
||||||
'gnome-music.desktop': 'org.gnome.Music.desktop',
|
|
||||||
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
'gnome-photos.desktop': 'org.gnome.Photos.desktop',
|
||||||
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
'gnome-screenshot.desktop': 'org.gnome.Screenshot.desktop',
|
||||||
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
'gnome-software.desktop': 'org.gnome.Software.desktop',
|
||||||
@ -44,7 +41,7 @@ const RENAMED_DESKTOP_IDS = {
|
|||||||
'totem.desktop': 'org.gnome.Totem.desktop',
|
'totem.desktop': 'org.gnome.Totem.desktop',
|
||||||
};
|
};
|
||||||
|
|
||||||
var AppFavorites = new Lang.Class({
|
const AppFavorites = new Lang.Class({
|
||||||
Name: 'AppFavorites',
|
Name: 'AppFavorites',
|
||||||
|
|
||||||
FAVORITE_APPS_KEY: 'favorite-apps',
|
FAVORITE_APPS_KEY: 'favorite-apps',
|
||||||
|
@ -9,7 +9,7 @@ const St = imports.gi.St;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
|
|
||||||
var AudioDevice = {
|
const AudioDevice = {
|
||||||
HEADPHONES: 1 << 0,
|
HEADPHONES: 1 << 0,
|
||||||
HEADSET: 1 << 1,
|
HEADSET: 1 << 1,
|
||||||
MICROPHONE: 1 << 2
|
MICROPHONE: 1 << 2
|
||||||
@ -28,7 +28,7 @@ const AudioDeviceSelectionIface = '<node> \
|
|||||||
</interface> \
|
</interface> \
|
||||||
</node>';
|
</node>';
|
||||||
|
|
||||||
var AudioDeviceSelectionDialog = new Lang.Class({
|
const AudioDeviceSelectionDialog = new Lang.Class({
|
||||||
Name: 'AudioDeviceSelectionDialog',
|
Name: 'AudioDeviceSelectionDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AudioDeviceSelectionDBus = new Lang.Class({
|
const AudioDeviceSelectionDBus = new Lang.Class({
|
||||||
Name: 'AudioDeviceSelectionDBus',
|
Name: 'AudioDeviceSelectionDBus',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
@ -107,7 +107,7 @@ const Main = imports.ui.main;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
|
const DEFAULT_BACKGROUND_COLOR = Clutter.Color.from_pixel(0x2e3436ff);
|
||||||
|
|
||||||
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
|
const BACKGROUND_SCHEMA = 'org.gnome.desktop.background';
|
||||||
const PRIMARY_COLOR_KEY = 'primary-color';
|
const PRIMARY_COLOR_KEY = 'primary-color';
|
||||||
@ -117,14 +117,14 @@ const BACKGROUND_STYLE_KEY = 'picture-options';
|
|||||||
const PICTURE_OPACITY_KEY = 'picture-opacity';
|
const PICTURE_OPACITY_KEY = 'picture-opacity';
|
||||||
const PICTURE_URI_KEY = 'picture-uri';
|
const PICTURE_URI_KEY = 'picture-uri';
|
||||||
|
|
||||||
var FADE_ANIMATION_TIME = 1.0;
|
const FADE_ANIMATION_TIME = 1.0;
|
||||||
|
|
||||||
// These parameters affect how often we redraw.
|
// These parameters affect how often we redraw.
|
||||||
// The first is how different (percent crossfaded) the slide show
|
// The first is how different (percent crossfaded) the slide show
|
||||||
// has to look before redrawing and the second is the minimum
|
// has to look before redrawing and the second is the minimum
|
||||||
// frequency (in seconds) we're willing to wake up
|
// frequency (in seconds) we're willing to wake up
|
||||||
var ANIMATION_OPACITY_STEP_INCREMENT = 4.0;
|
const ANIMATION_OPACITY_STEP_INCREMENT = 4.0;
|
||||||
var ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
|
const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
|
||||||
|
|
||||||
let _backgroundCache = null;
|
let _backgroundCache = null;
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ function _fileEqual0(file1, file2) {
|
|||||||
return file1.equal(file2);
|
return file1.equal(file2);
|
||||||
}
|
}
|
||||||
|
|
||||||
var BackgroundCache = new Lang.Class({
|
const BackgroundCache = new Lang.Class({
|
||||||
Name: 'BackgroundCache',
|
Name: 'BackgroundCache',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -154,12 +154,8 @@ var BackgroundCache = new Lang.Class({
|
|||||||
|
|
||||||
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
|
let monitor = file.monitor(Gio.FileMonitorFlags.NONE, null);
|
||||||
monitor.connect('changed',
|
monitor.connect('changed',
|
||||||
Lang.bind(this, function(obj, file, otherFile, eventType) {
|
Lang.bind(this, function() {
|
||||||
// Ignore CHANGED and CREATED events, since in both cases
|
this.emit('file-changed', file);
|
||||||
// we'll get a CHANGES_DONE_HINT event when done.
|
|
||||||
if (eventType != Gio.FileMonitorEvent.CHANGED &&
|
|
||||||
eventType != Gio.FileMonitorEvent.CREATED)
|
|
||||||
this.emit('file-changed', file);
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._fileMonitors[key] = monitor;
|
this._fileMonitors[key] = monitor;
|
||||||
@ -230,7 +226,7 @@ function getBackgroundCache() {
|
|||||||
return _backgroundCache;
|
return _backgroundCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
var Background = new Lang.Class({
|
const Background = new Lang.Class({
|
||||||
Name: 'Background',
|
Name: 'Background',
|
||||||
|
|
||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
@ -492,7 +488,7 @@ Signals.addSignalMethods(Background.prototype);
|
|||||||
|
|
||||||
let _systemBackground;
|
let _systemBackground;
|
||||||
|
|
||||||
var SystemBackground = new Lang.Class({
|
const SystemBackground = new Lang.Class({
|
||||||
Name: 'SystemBackground',
|
Name: 'SystemBackground',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -529,7 +525,7 @@ var SystemBackground = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(SystemBackground.prototype);
|
Signals.addSignalMethods(SystemBackground.prototype);
|
||||||
|
|
||||||
var BackgroundSource = new Lang.Class({
|
const BackgroundSource = new Lang.Class({
|
||||||
Name: 'BackgroundSource',
|
Name: 'BackgroundSource',
|
||||||
|
|
||||||
_init: function(layoutManager, settingsSchema) {
|
_init: function(layoutManager, settingsSchema) {
|
||||||
@ -617,7 +613,7 @@ var BackgroundSource = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Animation = new Lang.Class({
|
const Animation = new Lang.Class({
|
||||||
Name: 'Animation',
|
Name: 'Animation',
|
||||||
|
|
||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
@ -665,7 +661,7 @@ var Animation = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Animation.prototype);
|
Signals.addSignalMethods(Animation.prototype);
|
||||||
|
|
||||||
var BackgroundManager = new Lang.Class({
|
const BackgroundManager = new Lang.Class({
|
||||||
Name: 'BackgroundManager',
|
Name: 'BackgroundManager',
|
||||||
|
|
||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
|
@ -9,7 +9,7 @@ const BoxPointer = imports.ui.boxpointer;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
|
||||||
var BackgroundMenu = new Lang.Class({
|
const BackgroundMenu = new Lang.Class({
|
||||||
Name: 'BackgroundMenu',
|
Name: 'BackgroundMenu',
|
||||||
Extends: PopupMenu.PopupMenu,
|
Extends: PopupMenu.PopupMenu,
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@ const St = imports.gi.St;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var PopupAnimation = {
|
const PopupAnimation = {
|
||||||
NONE: 0,
|
NONE: 0,
|
||||||
SLIDE: 1 << 0,
|
SLIDE: 1 << 0,
|
||||||
FADE: 1 << 1,
|
FADE: 1 << 1,
|
||||||
FULL: ~0,
|
FULL: ~0,
|
||||||
};
|
};
|
||||||
|
|
||||||
var POPUP_ANIMATION_TIME = 0.15;
|
const POPUP_ANIMATION_TIME = 0.15;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BoxPointer:
|
* BoxPointer:
|
||||||
@ -32,7 +32,7 @@ var POPUP_ANIMATION_TIME = 0.15;
|
|||||||
* totally inside the monitor if possible.
|
* totally inside the monitor if possible.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
var BoxPointer = new Lang.Class({
|
const BoxPointer = new Lang.Class({
|
||||||
Name: 'BoxPointer',
|
Name: 'BoxPointer',
|
||||||
|
|
||||||
_init: function(arrowSide, binProperties) {
|
_init: function(arrowSide, binProperties) {
|
||||||
@ -587,10 +587,7 @@ var BoxPointer = new Lang.Class({
|
|||||||
_calculateArrowSide: function(arrowSide) {
|
_calculateArrowSide: function(arrowSide) {
|
||||||
let sourceAllocation = Shell.util_get_transformed_allocation(this._sourceActor);
|
let sourceAllocation = Shell.util_get_transformed_allocation(this._sourceActor);
|
||||||
let [minWidth, minHeight, boxWidth, boxHeight] = this._container.get_preferred_size();
|
let [minWidth, minHeight, boxWidth, boxHeight] = this._container.get_preferred_size();
|
||||||
let monitorActor = this.sourceActor;
|
let monitor = Main.layoutManager.findMonitorForActor(this.actor);
|
||||||
if (!monitorActor)
|
|
||||||
monitorActor = this.actor;
|
|
||||||
let monitor = Main.layoutManager.findMonitorForActor(monitorActor);
|
|
||||||
|
|
||||||
switch (arrowSide) {
|
switch (arrowSide) {
|
||||||
case St.Side.TOP:
|
case St.Side.TOP:
|
||||||
|
@ -16,15 +16,15 @@ const MessageTray = imports.ui.messageTray;
|
|||||||
const Mpris = imports.ui.mpris;
|
const Mpris = imports.ui.mpris;
|
||||||
const Util = imports.misc.util;
|
const Util = imports.misc.util;
|
||||||
|
|
||||||
var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
|
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
|
||||||
var SHOW_WEEKDATE_KEY = 'show-weekdate';
|
const SHOW_WEEKDATE_KEY = 'show-weekdate';
|
||||||
var ELLIPSIS_CHAR = '\u2026';
|
const ELLIPSIS_CHAR = '\u2026';
|
||||||
|
|
||||||
var MESSAGE_ICON_SIZE = -1; // pick up from CSS
|
const MESSAGE_ICON_SIZE = 16;
|
||||||
|
|
||||||
// alias to prevent xgettext from picking up strings translated in GTK+
|
// alias to prevent xgettext from picking up strings translated in GTK+
|
||||||
const gtk30_ = Gettext_gtk30.gettext;
|
const gtk30_ = Gettext_gtk30.gettext;
|
||||||
var NC_ = function(context, str) { return context + '\u0004' + str; };
|
const NC_ = function(context, str) { return context + '\u0004' + str; };
|
||||||
|
|
||||||
function sameYear(dateA, dateB) {
|
function sameYear(dateA, dateB) {
|
||||||
return (dateA.getYear() == dateB.getYear());
|
return (dateA.getYear() == dateB.getYear());
|
||||||
@ -92,7 +92,7 @@ function _getCalendarDayAbbreviation(dayNumber) {
|
|||||||
|
|
||||||
// Abstraction for an appointment/event in a calendar
|
// Abstraction for an appointment/event in a calendar
|
||||||
|
|
||||||
var CalendarEvent = new Lang.Class({
|
const CalendarEvent = new Lang.Class({
|
||||||
Name: 'CalendarEvent',
|
Name: 'CalendarEvent',
|
||||||
|
|
||||||
_init: function(id, date, end, summary, allDay) {
|
_init: function(id, date, end, summary, allDay) {
|
||||||
@ -108,7 +108,7 @@ var CalendarEvent = new Lang.Class({
|
|||||||
//
|
//
|
||||||
|
|
||||||
// First, an implementation with no events
|
// First, an implementation with no events
|
||||||
var EmptyEventSource = new Lang.Class({
|
const EmptyEventSource = new Lang.Class({
|
||||||
Name: 'EmptyEventSource',
|
Name: 'EmptyEventSource',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -179,7 +179,7 @@ function _dateIntervalsOverlap(a0, a1, b0, b1)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// an implementation that reads data from a session bus service
|
// an implementation that reads data from a session bus service
|
||||||
var DBusEventSource = new Lang.Class({
|
const DBusEventSource = new Lang.Class({
|
||||||
Name: 'DBusEventSource',
|
Name: 'DBusEventSource',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -366,7 +366,7 @@ var DBusEventSource = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(DBusEventSource.prototype);
|
Signals.addSignalMethods(DBusEventSource.prototype);
|
||||||
|
|
||||||
var Calendar = new Lang.Class({
|
const Calendar = new Lang.Class({
|
||||||
Name: 'Calendar',
|
Name: 'Calendar',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -428,13 +428,6 @@ var Calendar = new Lang.Class({
|
|||||||
this.emit('selected-date-changed', new Date(this._selectedDate));
|
this.emit('selected-date-changed', new Date(this._selectedDate));
|
||||||
},
|
},
|
||||||
|
|
||||||
updateTimeZone: function() {
|
|
||||||
// The calendar need to be rebuilt after a time zone update because
|
|
||||||
// the date might have changed.
|
|
||||||
this._rebuildCalendar();
|
|
||||||
this._update();
|
|
||||||
},
|
|
||||||
|
|
||||||
_buildHeader: function() {
|
_buildHeader: function() {
|
||||||
let layout = this.actor.layout_manager;
|
let layout = this.actor.layout_manager;
|
||||||
let offsetCols = this._useWeekdate ? 1 : 0;
|
let offsetCols = this._useWeekdate ? 1 : 0;
|
||||||
@ -704,7 +697,7 @@ var Calendar = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Calendar.prototype);
|
Signals.addSignalMethods(Calendar.prototype);
|
||||||
|
|
||||||
var EventMessage = new Lang.Class({
|
const EventMessage = new Lang.Class({
|
||||||
Name: 'EventMessage',
|
Name: 'EventMessage',
|
||||||
Extends: MessageList.Message,
|
Extends: MessageList.Message,
|
||||||
|
|
||||||
@ -761,15 +754,15 @@ var EventMessage = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var NotificationMessage = new Lang.Class({
|
const NotificationMessage = new Lang.Class({
|
||||||
Name: 'NotificationMessage',
|
Name: 'NotificationMessage',
|
||||||
Extends: MessageList.Message,
|
Extends: MessageList.Message,
|
||||||
|
|
||||||
_init: function(notification) {
|
_init: function(notification) {
|
||||||
this.notification = notification;
|
this.notification = notification;
|
||||||
|
|
||||||
this.parent(notification.title, notification.bannerBodyText);
|
|
||||||
this.setUseBodyMarkup(notification.bannerBodyMarkup);
|
this.setUseBodyMarkup(notification.bannerBodyMarkup);
|
||||||
|
this.parent(notification.title, notification.bannerBodyText);
|
||||||
|
|
||||||
this.setIcon(this._getIcon());
|
this.setIcon(this._getIcon());
|
||||||
|
|
||||||
@ -817,7 +810,7 @@ var NotificationMessage = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var EventsSection = new Lang.Class({
|
const EventsSection = new Lang.Class({
|
||||||
Name: 'EventsSection',
|
Name: 'EventsSection',
|
||||||
Extends: MessageList.MessageListSection,
|
Extends: MessageList.MessageListSection,
|
||||||
|
|
||||||
@ -927,7 +920,7 @@ var EventsSection = new Lang.Class({
|
|||||||
let app = this._getCalendarApp();
|
let app = this._getCalendarApp();
|
||||||
if (app.get_id() == 'evolution.desktop')
|
if (app.get_id() == 'evolution.desktop')
|
||||||
app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
|
app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
|
||||||
app.launch([], global.create_app_launch_context(0, -1));
|
app.launch([], global.create_app_launch_context(0, -1), false);
|
||||||
},
|
},
|
||||||
|
|
||||||
setDate: function(date) {
|
setDate: function(date) {
|
||||||
@ -948,7 +941,7 @@ var EventsSection = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var NotificationSection = new Lang.Class({
|
const NotificationSection = new Lang.Class({
|
||||||
Name: 'NotificationSection',
|
Name: 'NotificationSection',
|
||||||
Extends: MessageList.MessageListSection,
|
Extends: MessageList.MessageListSection,
|
||||||
|
|
||||||
@ -1051,7 +1044,7 @@ var NotificationSection = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Placeholder = new Lang.Class({
|
const Placeholder = new Lang.Class({
|
||||||
Name: 'Placeholder',
|
Name: 'Placeholder',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -1098,7 +1091,7 @@ var Placeholder = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var CalendarMessageList = new Lang.Class({
|
const CalendarMessageList = new Lang.Class({
|
||||||
Name: 'CalendarMessageList',
|
Name: 'CalendarMessageList',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
@ -4,7 +4,7 @@ const St = imports.gi.St;
|
|||||||
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
|
|
||||||
var CheckBox = new Lang.Class({
|
const CheckBox = new Lang.Class({
|
||||||
Name: 'CheckBox',
|
Name: 'CheckBox',
|
||||||
|
|
||||||
_init: function(label) {
|
_init: function(label) {
|
||||||
|
@ -1,138 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GObject = imports.gi.GObject;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Meta = imports.gi.Meta;
|
|
||||||
const Shell = imports.gi.Shell;
|
|
||||||
|
|
||||||
const Dialog = imports.ui.dialog;
|
|
||||||
const Main = imports.ui.main;
|
|
||||||
const Tweener = imports.ui.tweener;
|
|
||||||
|
|
||||||
var FROZEN_WINDOW_BRIGHTNESS = -0.3
|
|
||||||
var DIALOG_TRANSITION_TIME = 0.15
|
|
||||||
|
|
||||||
var CloseDialog = new Lang.Class({
|
|
||||||
Name: 'CloseDialog',
|
|
||||||
Extends: GObject.Object,
|
|
||||||
Implements: [ Meta.CloseDialog ],
|
|
||||||
Properties: {
|
|
||||||
'window': GObject.ParamSpec.override('window', Meta.CloseDialog)
|
|
||||||
},
|
|
||||||
|
|
||||||
_init: function (window) {
|
|
||||||
this.parent();
|
|
||||||
this._window = window;
|
|
||||||
this._dialog = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
get window() {
|
|
||||||
return this._window;
|
|
||||||
},
|
|
||||||
|
|
||||||
set window(window) {
|
|
||||||
this._window = window;
|
|
||||||
},
|
|
||||||
|
|
||||||
_createDialogContent: function () {
|
|
||||||
let tracker = Shell.WindowTracker.get_default();
|
|
||||||
let windowApp = tracker.get_window_app(this._window);
|
|
||||||
|
|
||||||
/* Translators: %s is an application name */
|
|
||||||
let title = _("“%s” is not responding.").format(windowApp.get_name());
|
|
||||||
let subtitle = _("You may choose to wait a short while for it to " +
|
|
||||||
"continue or force the application to quit entirely.");
|
|
||||||
let icon = new Gio.ThemedIcon({ name: 'dialog-warning-symbolic' });
|
|
||||||
return new Dialog.MessageDialogContent({ icon, title, subtitle });
|
|
||||||
},
|
|
||||||
|
|
||||||
_initDialog: function () {
|
|
||||||
if (this._dialog)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let windowActor = this._window.get_compositor_private();
|
|
||||||
this._dialog = new Dialog.Dialog(windowActor, 'close-dialog');
|
|
||||||
this._dialog.width = windowActor.width;
|
|
||||||
this._dialog.height = windowActor.height;
|
|
||||||
|
|
||||||
this._dialog.addContent(this._createDialogContent());
|
|
||||||
this._dialog.addButton({ label: _('Force Quit'),
|
|
||||||
action: Lang.bind(this, this._onClose),
|
|
||||||
default: true });
|
|
||||||
this._dialog.addButton({ label: _('Wait'),
|
|
||||||
action: Lang.bind(this, this._onWait),
|
|
||||||
key: Clutter.Escape });
|
|
||||||
|
|
||||||
global.focus_manager.add_group(this._dialog);
|
|
||||||
},
|
|
||||||
|
|
||||||
_addWindowEffect: function () {
|
|
||||||
// We set the effect on the surface actor, so the dialog itself
|
|
||||||
// (which is a child of the MetaWindowActor) does not get the
|
|
||||||
// effect applied itself.
|
|
||||||
let windowActor = this._window.get_compositor_private();
|
|
||||||
let surfaceActor = windowActor.get_first_child();
|
|
||||||
let effect = new Clutter.BrightnessContrastEffect();
|
|
||||||
effect.set_brightness(FROZEN_WINDOW_BRIGHTNESS);
|
|
||||||
surfaceActor.add_effect_with_name("gnome-shell-frozen-window", effect);
|
|
||||||
},
|
|
||||||
|
|
||||||
_removeWindowEffect: function () {
|
|
||||||
let windowActor = this._window.get_compositor_private();
|
|
||||||
let surfaceActor = windowActor.get_first_child();
|
|
||||||
surfaceActor.remove_effect_by_name("gnome-shell-frozen-window");
|
|
||||||
},
|
|
||||||
|
|
||||||
_onWait: function () {
|
|
||||||
this.response(Meta.CloseDialogResponse.WAIT);
|
|
||||||
},
|
|
||||||
|
|
||||||
_onClose: function () {
|
|
||||||
this.response(Meta.CloseDialogResponse.FORCE_CLOSE);
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_show: function () {
|
|
||||||
if (this._dialog != null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._addWindowEffect();
|
|
||||||
this._initDialog();
|
|
||||||
|
|
||||||
this._dialog.scale_y = 0;
|
|
||||||
this._dialog.set_pivot_point(0.5, 0.5);
|
|
||||||
|
|
||||||
Tweener.addTween(this._dialog,
|
|
||||||
{ scale_y: 1,
|
|
||||||
transition: 'linear',
|
|
||||||
time: DIALOG_TRANSITION_TIME,
|
|
||||||
onComplete: Lang.bind(this, function () {
|
|
||||||
Main.layoutManager.trackChrome(this._dialog, { affectsInputRegion: true });
|
|
||||||
})
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_hide: function () {
|
|
||||||
if (this._dialog == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let dialog = this._dialog;
|
|
||||||
this._dialog = null;
|
|
||||||
this._removeWindowEffect();
|
|
||||||
|
|
||||||
Tweener.addTween(dialog,
|
|
||||||
{ scale_y: 0,
|
|
||||||
transition: 'linear',
|
|
||||||
time: DIALOG_TRANSITION_TIME,
|
|
||||||
onComplete: Lang.bind(this, function () {
|
|
||||||
dialog.destroy();
|
|
||||||
})
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_focus: function () {
|
|
||||||
if (this._dialog)
|
|
||||||
this._dialog.grab_key_focus();
|
|
||||||
}
|
|
||||||
});
|
|
@ -2,7 +2,7 @@
|
|||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
var ComponentManager = new Lang.Class({
|
const ComponentManager = new Lang.Class({
|
||||||
Name: 'ComponentManager',
|
Name: 'ComponentManager',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
@ -11,15 +11,15 @@ const GnomeSession = imports.misc.gnomeSession;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const ShellMountOperation = imports.ui.shellMountOperation;
|
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||||
|
|
||||||
var GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
|
const GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
|
||||||
|
|
||||||
// GSettings keys
|
// GSettings keys
|
||||||
const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling';
|
const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling';
|
||||||
const SETTING_ENABLE_AUTOMOUNT = 'automount';
|
const SETTING_ENABLE_AUTOMOUNT = 'automount';
|
||||||
|
|
||||||
var AUTORUN_EXPIRE_TIMEOUT_SECS = 10;
|
const AUTORUN_EXPIRE_TIMEOUT_SECS = 10;
|
||||||
|
|
||||||
var AutomountManager = new Lang.Class({
|
const AutomountManager = new Lang.Class({
|
||||||
Name: 'AutomountManager',
|
Name: 'AutomountManager',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -242,4 +242,4 @@ var AutomountManager = new Lang.Class({
|
|||||||
GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
|
GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var Component = AutomountManager;
|
const Component = AutomountManager;
|
||||||
|
@ -7,6 +7,7 @@ const St = imports.gi.St;
|
|||||||
const GnomeSession = imports.misc.gnomeSession;
|
const GnomeSession = imports.misc.gnomeSession;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
const ShellMountOperation = imports.ui.shellMountOperation;
|
||||||
|
|
||||||
// GSettings keys
|
// GSettings keys
|
||||||
const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling';
|
const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling';
|
||||||
@ -15,7 +16,7 @@ const SETTING_START_APP = 'autorun-x-content-start-app';
|
|||||||
const SETTING_IGNORE = 'autorun-x-content-ignore';
|
const SETTING_IGNORE = 'autorun-x-content-ignore';
|
||||||
const SETTING_OPEN_FOLDER = 'autorun-x-content-open-folder';
|
const SETTING_OPEN_FOLDER = 'autorun-x-content-open-folder';
|
||||||
|
|
||||||
var AutorunSetting = {
|
const AutorunSetting = {
|
||||||
RUN: 0,
|
RUN: 0,
|
||||||
IGNORE: 1,
|
IGNORE: 1,
|
||||||
FILES: 2,
|
FILES: 2,
|
||||||
@ -63,7 +64,8 @@ function startAppForMount(app, mount) {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
retval = app.launch(files,
|
retval = app.launch(files,
|
||||||
global.create_app_launch_context(0, -1));
|
global.create_app_launch_context(0, -1),
|
||||||
|
false)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log('Unable to launch the application ' + app.get_name()
|
log('Unable to launch the application ' + app.get_name()
|
||||||
+ ': ' + e.toString());
|
+ ': ' + e.toString());
|
||||||
@ -90,7 +92,7 @@ function HotplugSniffer() {
|
|||||||
'/org/gnome/Shell/HotplugSniffer');
|
'/org/gnome/Shell/HotplugSniffer');
|
||||||
}
|
}
|
||||||
|
|
||||||
var ContentTypeDiscoverer = new Lang.Class({
|
const ContentTypeDiscoverer = new Lang.Class({
|
||||||
Name: 'ContentTypeDiscoverer',
|
Name: 'ContentTypeDiscoverer',
|
||||||
|
|
||||||
_init: function(callback) {
|
_init: function(callback) {
|
||||||
@ -159,7 +161,7 @@ var ContentTypeDiscoverer = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AutorunManager = new Lang.Class({
|
const AutorunManager = new Lang.Class({
|
||||||
Name: 'AutorunManager',
|
Name: 'AutorunManager',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -196,7 +198,7 @@ var AutorunManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AutorunDispatcher = new Lang.Class({
|
const AutorunDispatcher = new Lang.Class({
|
||||||
Name: 'AutorunDispatcher',
|
Name: 'AutorunDispatcher',
|
||||||
|
|
||||||
_init: function(manager) {
|
_init: function(manager) {
|
||||||
@ -255,11 +257,7 @@ var AutorunDispatcher = new Lang.Class({
|
|||||||
if (!shouldAutorunMount(mount))
|
if (!shouldAutorunMount(mount))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
let setting;
|
let setting = this._getAutorunSettingForType(contentTypes[0]);
|
||||||
if (contentTypes.length > 0)
|
|
||||||
setting = this._getAutorunSettingForType(contentTypes[0]);
|
|
||||||
else
|
|
||||||
setting = AutorunSetting.ASK;
|
|
||||||
|
|
||||||
// check at the settings for the first content type
|
// check at the settings for the first content type
|
||||||
// to see whether we should ask
|
// to see whether we should ask
|
||||||
@ -296,7 +294,7 @@ var AutorunDispatcher = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AutorunSource = new Lang.Class({
|
const AutorunSource = new Lang.Class({
|
||||||
Name: 'AutorunSource',
|
Name: 'AutorunSource',
|
||||||
Extends: MessageTray.Source,
|
Extends: MessageTray.Source,
|
||||||
|
|
||||||
@ -323,7 +321,7 @@ var AutorunSource = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var AutorunNotification = new Lang.Class({
|
const AutorunNotification = new Lang.Class({
|
||||||
Name: 'AutorunNotification',
|
Name: 'AutorunNotification',
|
||||||
Extends: MessageTray.Notification,
|
Extends: MessageTray.Notification,
|
||||||
|
|
||||||
@ -382,4 +380,4 @@ var AutorunNotification = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Component = AutorunManager;
|
const Component = AutorunManager;
|
||||||
|
@ -10,17 +10,16 @@ const GObject = imports.gi.GObject;
|
|||||||
const Gcr = imports.gi.Gcr;
|
const Gcr = imports.gi.Gcr;
|
||||||
|
|
||||||
const Animation = imports.ui.animation;
|
const Animation = imports.ui.animation;
|
||||||
const Dialog = imports.ui.dialog;
|
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const CheckBox = imports.ui.checkBox;
|
const CheckBox = imports.ui.checkBox;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var WORK_SPINNER_ICON_SIZE = 16;
|
const WORK_SPINNER_ICON_SIZE = 16;
|
||||||
var WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
||||||
var WORK_SPINNER_ANIMATION_TIME = 0.3;
|
const WORK_SPINNER_ANIMATION_TIME = 0.3;
|
||||||
|
|
||||||
var KeyringDialog = new Lang.Class({
|
const KeyringDialog = new Lang.Class({
|
||||||
Name: 'KeyringDialog',
|
Name: 'KeyringDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
@ -32,24 +31,38 @@ var KeyringDialog = new Lang.Class({
|
|||||||
this.prompt.connect('show-confirm', Lang.bind(this, this._onShowConfirm));
|
this.prompt.connect('show-confirm', Lang.bind(this, this._onShowConfirm));
|
||||||
this.prompt.connect('prompt-close', Lang.bind(this, this._onHidePrompt));
|
this.prompt.connect('prompt-close', Lang.bind(this, this._onHidePrompt));
|
||||||
|
|
||||||
let icon = new Gio.ThemedIcon({ name: 'dialog-password-symbolic' });
|
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
|
||||||
this._content = new Dialog.MessageDialogContent({ icon });
|
vertical: false });
|
||||||
this.contentLayout.add(this._content);
|
this.contentLayout.add(mainContentBox);
|
||||||
|
|
||||||
// FIXME: Why does this break now?
|
let icon = new St.Icon({ icon_name: 'dialog-password-symbolic' });
|
||||||
/*
|
mainContentBox.add(icon,
|
||||||
this.prompt.bind_property('message', this._content, 'title', GObject.BindingFlags.SYNC_CREATE);
|
{ x_fill: true,
|
||||||
this.prompt.bind_property('description', this._content, 'body', GObject.BindingFlags.SYNC_CREATE);
|
y_fill: false,
|
||||||
*/
|
x_align: St.Align.END,
|
||||||
this.prompt.connect('notify::message', () => {
|
y_align: St.Align.START });
|
||||||
this._content.title = this.prompt.message;
|
|
||||||
});
|
|
||||||
this._content.title = this.prompt.message;
|
|
||||||
|
|
||||||
this.prompt.connect('notify::description', () => {
|
this._messageBox = new St.BoxLayout({ style_class: 'prompt-dialog-message-layout',
|
||||||
this._content.body = this.prompt.description;
|
vertical: true });
|
||||||
});
|
mainContentBox.add(this._messageBox,
|
||||||
this._content.body = this.prompt.description;
|
{ y_align: St.Align.START, expand: true, x_fill: true, y_fill: true });
|
||||||
|
|
||||||
|
let subject = new St.Label({ style_class: 'prompt-dialog-headline headline' });
|
||||||
|
this.prompt.bind_property('message', subject, 'text', GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
|
||||||
|
this._messageBox.add(subject,
|
||||||
|
{ x_fill: false,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: St.Align.START,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
let description = new St.Label({ style_class: 'prompt-dialog-description' });
|
||||||
|
description.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
description.clutter_text.line_wrap = true;
|
||||||
|
this.prompt.bind_property('description', description, 'text', GObject.BindingFlags.SYNC_CREATE);
|
||||||
|
this._messageBox.add(description,
|
||||||
|
{ y_fill: true,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
this._workSpinner = null;
|
this._workSpinner = null;
|
||||||
this._controlTable = null;
|
this._controlTable = null;
|
||||||
@ -182,7 +195,7 @@ var KeyringDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._controlTable = table;
|
this._controlTable = table;
|
||||||
this._content.messageBox.add(table, { x_fill: true, y_fill: true });
|
this._messageBox.add(table, { x_fill: true, y_fill: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateSensitivity: function(sensitive) {
|
_updateSensitivity: function(sensitive) {
|
||||||
@ -258,7 +271,7 @@ var KeyringDialog = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var KeyringDummyDialog = new Lang.Class({
|
const KeyringDummyDialog = new Lang.Class({
|
||||||
Name: 'KeyringDummyDialog',
|
Name: 'KeyringDummyDialog',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -274,7 +287,7 @@ var KeyringDummyDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var KeyringPrompter = new Lang.Class({
|
const KeyringPrompter = new Lang.Class({
|
||||||
Name: 'KeyringPrompter',
|
Name: 'KeyringPrompter',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -311,4 +324,4 @@ var KeyringPrompter = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Component = KeyringPrompter;
|
const Component = KeyringPrompter;
|
||||||
|
@ -12,7 +12,6 @@ const Shell = imports.gi.Shell;
|
|||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const Config = imports.misc.config;
|
const Config = imports.misc.config;
|
||||||
const Dialog = imports.ui.dialog;
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
@ -21,7 +20,7 @@ const ShellEntry = imports.ui.shellEntry;
|
|||||||
|
|
||||||
const VPN_UI_GROUP = 'VPN Plugin UI';
|
const VPN_UI_GROUP = 'VPN Plugin UI';
|
||||||
|
|
||||||
var NetworkSecretDialog = new Lang.Class({
|
const NetworkSecretDialog = new Lang.Class({
|
||||||
Name: 'NetworkSecretDialog',
|
Name: 'NetworkSecretDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
@ -39,12 +38,41 @@ var NetworkSecretDialog = new Lang.Class({
|
|||||||
else
|
else
|
||||||
this._content = this._getContent();
|
this._content = this._getContent();
|
||||||
|
|
||||||
let icon = new Gio.ThemedIcon({ name: 'dialog-password-symbolic' });
|
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
|
||||||
let contentParams = { icon,
|
vertical: false });
|
||||||
title: this._content.title,
|
this.contentLayout.add(mainContentBox,
|
||||||
body: this._content.message };
|
{ x_fill: true,
|
||||||
let contentBox = new Dialog.MessageDialogContent(contentParams);
|
y_fill: true });
|
||||||
this.contentLayout.add_actor(contentBox);
|
|
||||||
|
let icon = new St.Icon({ icon_name: 'dialog-password-symbolic' });
|
||||||
|
mainContentBox.add(icon,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: St.Align.END,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
let messageBox = new St.BoxLayout({ style_class: 'prompt-dialog-message-layout',
|
||||||
|
vertical: true });
|
||||||
|
mainContentBox.add(messageBox,
|
||||||
|
{ y_align: St.Align.START });
|
||||||
|
|
||||||
|
let subjectLabel = new St.Label({ style_class: 'prompt-dialog-headline headline',
|
||||||
|
text: this._content.title });
|
||||||
|
messageBox.add(subjectLabel,
|
||||||
|
{ y_fill: false,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
if (this._content.message != null) {
|
||||||
|
let descriptionLabel = new St.Label({ style_class: 'prompt-dialog-description',
|
||||||
|
text: this._content.message });
|
||||||
|
descriptionLabel.clutter_text.line_wrap = true;
|
||||||
|
descriptionLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
|
||||||
|
messageBox.add(descriptionLabel,
|
||||||
|
{ y_fill: true,
|
||||||
|
y_align: St.Align.START,
|
||||||
|
expand: true });
|
||||||
|
}
|
||||||
|
|
||||||
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
|
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
|
||||||
let secretTable = new St.Widget({ style_class: 'network-dialog-secret-table',
|
let secretTable = new St.Widget({ style_class: 'network-dialog-secret-table',
|
||||||
@ -107,7 +135,7 @@ var NetworkSecretDialog = new Lang.Class({
|
|||||||
secret.entry.clutter_text.set_password_char('\u25cf');
|
secret.entry.clutter_text.set_password_char('\u25cf');
|
||||||
}
|
}
|
||||||
|
|
||||||
contentBox.messageBox.add(secretTable);
|
messageBox.add(secretTable);
|
||||||
|
|
||||||
this._okButton = { label: _("Connect"),
|
this._okButton = { label: _("Connect"),
|
||||||
action: Lang.bind(this, this._onOk),
|
action: Lang.bind(this, this._onOk),
|
||||||
@ -329,7 +357,7 @@ var NetworkSecretDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var VPNRequestHandler = new Lang.Class({
|
const VPNRequestHandler = new Lang.Class({
|
||||||
Name: 'VPNRequestHandler',
|
Name: 'VPNRequestHandler',
|
||||||
|
|
||||||
_init: function(agent, requestId, authHelper, serviceType, connection, hints, flags) {
|
_init: function(agent, requestId, authHelper, serviceType, connection, hints, flags) {
|
||||||
@ -575,7 +603,7 @@ var VPNRequestHandler = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var NetworkAgent = new Lang.Class({
|
const NetworkAgent = new Lang.Class({
|
||||||
Name: 'NetworkAgent',
|
Name: 'NetworkAgent',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -798,4 +826,4 @@ var NetworkAgent = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
var Component = NetworkAgent;
|
const Component = NetworkAgent;
|
||||||
|
@ -15,35 +15,66 @@ const PolkitAgent = imports.gi.PolkitAgent;
|
|||||||
|
|
||||||
const Animation = imports.ui.animation;
|
const Animation = imports.ui.animation;
|
||||||
const Components = imports.ui.components;
|
const Components = imports.ui.components;
|
||||||
const Dialog = imports.ui.dialog;
|
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
const ModalDialog = imports.ui.modalDialog;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var DIALOG_ICON_SIZE = 48;
|
const DIALOG_ICON_SIZE = 48;
|
||||||
|
|
||||||
var WORK_SPINNER_ICON_SIZE = 16;
|
const WORK_SPINNER_ICON_SIZE = 16;
|
||||||
var WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
|
||||||
var WORK_SPINNER_ANIMATION_TIME = 0.3;
|
const WORK_SPINNER_ANIMATION_TIME = 0.3;
|
||||||
|
|
||||||
var AuthenticationDialog = new Lang.Class({
|
const AuthenticationDialog = new Lang.Class({
|
||||||
Name: 'AuthenticationDialog',
|
Name: 'AuthenticationDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
_init: function(actionId, body, cookie, userNames) {
|
_init: function(actionId, message, cookie, userNames) {
|
||||||
this.parent({ styleClass: 'prompt-dialog' });
|
this.parent({ styleClass: 'prompt-dialog' });
|
||||||
|
|
||||||
this.actionId = actionId;
|
this.actionId = actionId;
|
||||||
this.message = body;
|
this.message = message;
|
||||||
this.userNames = userNames;
|
this.userNames = userNames;
|
||||||
this._wasDismissed = false;
|
this._wasDismissed = false;
|
||||||
|
|
||||||
let icon = new Gio.ThemedIcon({ name: 'dialog-password-symbolic' });
|
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
|
||||||
let title = _("Authentication Required");
|
vertical: false });
|
||||||
|
this.contentLayout.add(mainContentBox,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: true });
|
||||||
|
|
||||||
let content = new Dialog.MessageDialogContent({ icon, title, body });
|
let icon = new St.Icon({ icon_name: 'dialog-password-symbolic' });
|
||||||
this.contentLayout.add_actor(content);
|
mainContentBox.add(icon,
|
||||||
|
{ x_fill: true,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: St.Align.END,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
let messageBox = new St.BoxLayout({ style_class: 'prompt-dialog-message-layout',
|
||||||
|
vertical: true });
|
||||||
|
mainContentBox.add(messageBox,
|
||||||
|
{ expand: true, y_align: St.Align.START });
|
||||||
|
|
||||||
|
this._subjectLabel = new St.Label({ style_class: 'prompt-dialog-headline headline',
|
||||||
|
text: _("Authentication Required") });
|
||||||
|
|
||||||
|
messageBox.add(this._subjectLabel,
|
||||||
|
{ x_fill: false,
|
||||||
|
y_fill: false,
|
||||||
|
x_align: St.Align.START,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
|
this._descriptionLabel = new St.Label({ style_class: 'prompt-dialog-description',
|
||||||
|
text: message });
|
||||||
|
this._descriptionLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
|
this._descriptionLabel.clutter_text.line_wrap = true;
|
||||||
|
|
||||||
|
messageBox.add(this._descriptionLabel,
|
||||||
|
{ x_fill: false,
|
||||||
|
y_fill: true,
|
||||||
|
x_align: St.Align.START,
|
||||||
|
y_align: St.Align.START });
|
||||||
|
|
||||||
if (userNames.length > 1) {
|
if (userNames.length > 1) {
|
||||||
log('polkitAuthenticationAgent: Received ' + userNames.length +
|
log('polkitAuthenticationAgent: Received ' + userNames.length +
|
||||||
@ -74,12 +105,12 @@ var AuthenticationDialog = new Lang.Class({
|
|||||||
if (userIsRoot) {
|
if (userIsRoot) {
|
||||||
let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-root-label',
|
let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-root-label',
|
||||||
text: userRealName }));
|
text: userRealName }));
|
||||||
content.messageBox.add(userLabel, { x_fill: false,
|
messageBox.add(userLabel, { x_fill: false,
|
||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
} else {
|
} else {
|
||||||
let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
|
let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
|
||||||
vertical: false });
|
vertical: false });
|
||||||
content.messageBox.add(userBox);
|
messageBox.add(userBox);
|
||||||
this._userAvatar = new UserWidget.Avatar(this._user,
|
this._userAvatar = new UserWidget.Avatar(this._user,
|
||||||
{ iconSize: DIALOG_ICON_SIZE,
|
{ iconSize: DIALOG_ICON_SIZE,
|
||||||
styleClass: 'polkit-dialog-user-icon' });
|
styleClass: 'polkit-dialog-user-icon' });
|
||||||
@ -101,7 +132,7 @@ var AuthenticationDialog = new Lang.Class({
|
|||||||
this._onUserChanged();
|
this._onUserChanged();
|
||||||
|
|
||||||
this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
|
this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
|
||||||
content.messageBox.add(this._passwordBox);
|
messageBox.add(this._passwordBox);
|
||||||
this._passwordLabel = new St.Label(({ style_class: 'prompt-dialog-password-label' }));
|
this._passwordLabel = new St.Label(({ style_class: 'prompt-dialog-password-label' }));
|
||||||
this._passwordBox.add(this._passwordLabel, { y_fill: false, y_align: St.Align.MIDDLE });
|
this._passwordBox.add(this._passwordLabel, { y_fill: false, y_align: St.Align.MIDDLE });
|
||||||
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
this._passwordEntry = new St.Entry({ style_class: 'prompt-dialog-password-entry',
|
||||||
@ -124,13 +155,13 @@ var AuthenticationDialog = new Lang.Class({
|
|||||||
this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label' });
|
this._errorMessageLabel = new St.Label({ style_class: 'prompt-dialog-error-label' });
|
||||||
this._errorMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
this._errorMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
this._errorMessageLabel.clutter_text.line_wrap = true;
|
this._errorMessageLabel.clutter_text.line_wrap = true;
|
||||||
content.messageBox.add(this._errorMessageLabel, { x_fill: false, x_align: St.Align.START });
|
messageBox.add(this._errorMessageLabel, { x_fill: false, x_align: St.Align.START });
|
||||||
this._errorMessageLabel.hide();
|
this._errorMessageLabel.hide();
|
||||||
|
|
||||||
this._infoMessageLabel = new St.Label({ style_class: 'prompt-dialog-info-label' });
|
this._infoMessageLabel = new St.Label({ style_class: 'prompt-dialog-info-label' });
|
||||||
this._infoMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
this._infoMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
this._infoMessageLabel.clutter_text.line_wrap = true;
|
this._infoMessageLabel.clutter_text.line_wrap = true;
|
||||||
content.messageBox.add(this._infoMessageLabel);
|
messageBox.add(this._infoMessageLabel);
|
||||||
this._infoMessageLabel.hide();
|
this._infoMessageLabel.hide();
|
||||||
|
|
||||||
/* text is intentionally non-blank otherwise the height is not the same as for
|
/* text is intentionally non-blank otherwise the height is not the same as for
|
||||||
@ -142,7 +173,7 @@ var AuthenticationDialog = new Lang.Class({
|
|||||||
this._nullMessageLabel.add_style_class_name('hidden');
|
this._nullMessageLabel.add_style_class_name('hidden');
|
||||||
this._nullMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
this._nullMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
|
||||||
this._nullMessageLabel.clutter_text.line_wrap = true;
|
this._nullMessageLabel.clutter_text.line_wrap = true;
|
||||||
content.messageBox.add(this._nullMessageLabel);
|
messageBox.add(this._nullMessageLabel);
|
||||||
this._nullMessageLabel.show();
|
this._nullMessageLabel.show();
|
||||||
|
|
||||||
this._cancelButton = this.addButton({ label: _("Cancel"),
|
this._cancelButton = this.addButton({ label: _("Cancel"),
|
||||||
@ -339,7 +370,7 @@ var AuthenticationDialog = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(AuthenticationDialog.prototype);
|
Signals.addSignalMethods(AuthenticationDialog.prototype);
|
||||||
|
|
||||||
var AuthenticationAgent = new Lang.Class({
|
const AuthenticationAgent = new Lang.Class({
|
||||||
Name: 'AuthenticationAgent',
|
Name: 'AuthenticationAgent',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -400,4 +431,4 @@ var AuthenticationAgent = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var Component = AuthenticationAgent;
|
const Component = AuthenticationAgent;
|
||||||
|
@ -29,25 +29,25 @@ const Util = imports.misc.util;
|
|||||||
const HAVE_TP = (Tp != null && Tpl != null);
|
const HAVE_TP = (Tp != null && Tpl != null);
|
||||||
|
|
||||||
// See Notification.appendMessage
|
// See Notification.appendMessage
|
||||||
var SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
|
const SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
|
||||||
var SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
|
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
|
||||||
var SCROLLBACK_RECENT_LENGTH = 20;
|
const SCROLLBACK_RECENT_LENGTH = 20;
|
||||||
var SCROLLBACK_IDLE_LENGTH = 5;
|
const SCROLLBACK_IDLE_LENGTH = 5;
|
||||||
|
|
||||||
// See Source._displayPendingMessages
|
// See Source._displayPendingMessages
|
||||||
var SCROLLBACK_HISTORY_LINES = 10;
|
const SCROLLBACK_HISTORY_LINES = 10;
|
||||||
|
|
||||||
// See Notification._onEntryChanged
|
// See Notification._onEntryChanged
|
||||||
var COMPOSING_STOP_TIMEOUT = 5;
|
const COMPOSING_STOP_TIMEOUT = 5;
|
||||||
|
|
||||||
var CHAT_EXPAND_LINES = 12;
|
const CHAT_EXPAND_LINES = 12;
|
||||||
|
|
||||||
var NotificationDirection = {
|
const NotificationDirection = {
|
||||||
SENT: 'chat-sent',
|
SENT: 'chat-sent',
|
||||||
RECEIVED: 'chat-received'
|
RECEIVED: 'chat-received'
|
||||||
};
|
};
|
||||||
|
|
||||||
var N_ = function(s) { return s; };
|
const N_ = function(s) { return s; };
|
||||||
|
|
||||||
function makeMessageFromTpMessage(tpMessage, direction) {
|
function makeMessageFromTpMessage(tpMessage, direction) {
|
||||||
let [text, flags] = tpMessage.to_text();
|
let [text, flags] = tpMessage.to_text();
|
||||||
@ -79,7 +79,7 @@ function makeMessageFromTplEvent(event) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var TelepathyComponent = new Lang.Class({
|
const TelepathyComponent = new Lang.Class({
|
||||||
Name: 'TelepathyComponent',
|
Name: 'TelepathyComponent',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -113,7 +113,7 @@ var TelepathyComponent = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var TelepathyClient = HAVE_TP ? new Lang.Class({
|
const TelepathyClient = HAVE_TP ? new Lang.Class({
|
||||||
Name: 'TelepathyClient',
|
Name: 'TelepathyClient',
|
||||||
Extends: Tp.BaseClient,
|
Extends: Tp.BaseClient,
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ var TelepathyClient = HAVE_TP ? new Lang.Class({
|
|||||||
},
|
},
|
||||||
}) : null;
|
}) : null;
|
||||||
|
|
||||||
var ChatSource = new Lang.Class({
|
const ChatSource = new Lang.Class({
|
||||||
Name: 'ChatSource',
|
Name: 'ChatSource',
|
||||||
Extends: MessageTray.Source,
|
Extends: MessageTray.Source,
|
||||||
|
|
||||||
@ -647,7 +647,7 @@ var ChatSource = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ChatNotification = new Lang.Class({
|
const ChatNotification = new Lang.Class({
|
||||||
Name: 'ChatNotification',
|
Name: 'ChatNotification',
|
||||||
Extends: MessageTray.Notification,
|
Extends: MessageTray.Notification,
|
||||||
|
|
||||||
@ -806,7 +806,7 @@ var ChatNotification = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ChatLineBox = new Lang.Class({
|
const ChatLineBox = new Lang.Class({
|
||||||
Name: 'ChatLineBox',
|
Name: 'ChatLineBox',
|
||||||
Extends: St.BoxLayout,
|
Extends: St.BoxLayout,
|
||||||
|
|
||||||
@ -816,7 +816,7 @@ var ChatLineBox = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ChatNotificationBanner = new Lang.Class({
|
const ChatNotificationBanner = new Lang.Class({
|
||||||
Name: 'ChatNotificationBanner',
|
Name: 'ChatNotificationBanner',
|
||||||
Extends: MessageTray.NotificationBanner,
|
Extends: MessageTray.NotificationBanner,
|
||||||
|
|
||||||
@ -996,4 +996,4 @@ var ChatNotificationBanner = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Component = TelepathyComponent;
|
const Component = TelepathyComponent;
|
||||||
|
@ -12,16 +12,16 @@ const SwitcherPopup = imports.ui.switcherPopup;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var POPUP_APPICON_SIZE = 96;
|
const POPUP_APPICON_SIZE = 96;
|
||||||
var POPUP_FADE_TIME = 0.1; // seconds
|
const POPUP_FADE_TIME = 0.1; // seconds
|
||||||
|
|
||||||
var SortGroup = {
|
const SortGroup = {
|
||||||
TOP: 0,
|
TOP: 0,
|
||||||
MIDDLE: 1,
|
MIDDLE: 1,
|
||||||
BOTTOM: 2
|
BOTTOM: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
var CtrlAltTabManager = new Lang.Class({
|
const CtrlAltTabManager = new Lang.Class({
|
||||||
Name: 'CtrlAltTabManager',
|
Name: 'CtrlAltTabManager',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -136,7 +136,7 @@ var CtrlAltTabManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var CtrlAltTabPopup = new Lang.Class({
|
const CtrlAltTabPopup = new Lang.Class({
|
||||||
Name: 'CtrlAltTabPopup',
|
Name: 'CtrlAltTabPopup',
|
||||||
Extends: SwitcherPopup.SwitcherPopup,
|
Extends: SwitcherPopup.SwitcherPopup,
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ var CtrlAltTabPopup = new Lang.Class({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var CtrlAltTabSwitcher = new Lang.Class({
|
const CtrlAltTabSwitcher = new Lang.Class({
|
||||||
Name: 'CtrlAltTabSwitcher',
|
Name: 'CtrlAltTabSwitcher',
|
||||||
Extends: SwitcherPopup.SwitcherList,
|
Extends: SwitcherPopup.SwitcherList,
|
||||||
|
|
||||||
|
@ -18,10 +18,10 @@ const Main = imports.ui.main;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const Workspace = imports.ui.workspace;
|
const Workspace = imports.ui.workspace;
|
||||||
|
|
||||||
var DASH_ANIMATION_TIME = 0.2;
|
const DASH_ANIMATION_TIME = 0.2;
|
||||||
var DASH_ITEM_LABEL_SHOW_TIME = 0.15;
|
const DASH_ITEM_LABEL_SHOW_TIME = 0.15;
|
||||||
var DASH_ITEM_LABEL_HIDE_TIME = 0.1;
|
const DASH_ITEM_LABEL_HIDE_TIME = 0.1;
|
||||||
var DASH_ITEM_HOVER_TIMEOUT = 300;
|
const DASH_ITEM_HOVER_TIMEOUT = 300;
|
||||||
|
|
||||||
function getAppFromSource(source) {
|
function getAppFromSource(source) {
|
||||||
if (source instanceof AppDisplay.AppIcon) {
|
if (source instanceof AppDisplay.AppIcon) {
|
||||||
@ -33,7 +33,7 @@ function getAppFromSource(source) {
|
|||||||
|
|
||||||
// A container like StBin, but taking the child's scale into account
|
// A container like StBin, but taking the child's scale into account
|
||||||
// when requesting a size
|
// when requesting a size
|
||||||
var DashItemContainer = new Lang.Class({
|
const DashItemContainer = new Lang.Class({
|
||||||
Name: 'DashItemContainer',
|
Name: 'DashItemContainer',
|
||||||
Extends: St.Widget,
|
Extends: St.Widget,
|
||||||
|
|
||||||
@ -235,7 +235,7 @@ var DashItemContainer = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var ShowAppsIcon = new Lang.Class({
|
const ShowAppsIcon = new Lang.Class({
|
||||||
Name: 'ShowAppsIcon',
|
Name: 'ShowAppsIcon',
|
||||||
Extends: DashItemContainer,
|
Extends: DashItemContainer,
|
||||||
|
|
||||||
@ -315,7 +315,7 @@ var ShowAppsIcon = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var DragPlaceholderItem = new Lang.Class({
|
const DragPlaceholderItem = new Lang.Class({
|
||||||
Name: 'DragPlaceholderItem',
|
Name: 'DragPlaceholderItem',
|
||||||
Extends: DashItemContainer,
|
Extends: DashItemContainer,
|
||||||
|
|
||||||
@ -325,7 +325,7 @@ var DragPlaceholderItem = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var EmptyDropTargetItem = new Lang.Class({
|
const EmptyDropTargetItem = new Lang.Class({
|
||||||
Name: 'EmptyDropTargetItem',
|
Name: 'EmptyDropTargetItem',
|
||||||
Extends: DashItemContainer,
|
Extends: DashItemContainer,
|
||||||
|
|
||||||
@ -335,7 +335,7 @@ var EmptyDropTargetItem = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var DashActor = new Lang.Class({
|
const DashActor = new Lang.Class({
|
||||||
Name: 'DashActor',
|
Name: 'DashActor',
|
||||||
Extends: St.Widget,
|
Extends: St.Widget,
|
||||||
|
|
||||||
@ -387,7 +387,7 @@ var DashActor = new Lang.Class({
|
|||||||
|
|
||||||
const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ];
|
const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ];
|
||||||
|
|
||||||
var Dash = new Lang.Class({
|
const Dash = new Lang.Class({
|
||||||
Name: 'Dash',
|
Name: 'Dash',
|
||||||
|
|
||||||
_init : function() {
|
_init : function() {
|
||||||
@ -756,44 +756,42 @@ var Dash = new Lang.Class({
|
|||||||
let newIndex = 0;
|
let newIndex = 0;
|
||||||
let oldIndex = 0;
|
let oldIndex = 0;
|
||||||
while (newIndex < newApps.length || oldIndex < oldApps.length) {
|
while (newIndex < newApps.length || oldIndex < oldApps.length) {
|
||||||
let oldApp = oldApps.length > oldIndex ? oldApps[oldIndex] : null;
|
|
||||||
let newApp = newApps.length > newIndex ? newApps[newIndex] : null;
|
|
||||||
|
|
||||||
// No change at oldIndex/newIndex
|
// No change at oldIndex/newIndex
|
||||||
if (oldApp == newApp) {
|
if (oldApps[oldIndex] == newApps[newIndex]) {
|
||||||
oldIndex++;
|
oldIndex++;
|
||||||
newIndex++;
|
newIndex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// App removed at oldIndex
|
// App removed at oldIndex
|
||||||
if (oldApp && newApps.indexOf(oldApp) == -1) {
|
if (oldApps[oldIndex] &&
|
||||||
|
newApps.indexOf(oldApps[oldIndex]) == -1) {
|
||||||
removedActors.push(children[oldIndex]);
|
removedActors.push(children[oldIndex]);
|
||||||
oldIndex++;
|
oldIndex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// App added at newIndex
|
// App added at newIndex
|
||||||
if (newApp && oldApps.indexOf(newApp) == -1) {
|
if (newApps[newIndex] &&
|
||||||
addedItems.push({ app: newApp,
|
oldApps.indexOf(newApps[newIndex]) == -1) {
|
||||||
item: this._createAppItem(newApp),
|
addedItems.push({ app: newApps[newIndex],
|
||||||
|
item: this._createAppItem(newApps[newIndex]),
|
||||||
pos: newIndex });
|
pos: newIndex });
|
||||||
newIndex++;
|
newIndex++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// App moved
|
// App moved
|
||||||
let nextApp = newApps.length > newIndex + 1 ? newApps[newIndex + 1]
|
let insertHere = newApps[newIndex + 1] &&
|
||||||
: null;
|
newApps[newIndex + 1] == oldApps[oldIndex];
|
||||||
let insertHere = nextApp && nextApp == oldApp;
|
|
||||||
let alreadyRemoved = removedActors.reduce(function(result, actor) {
|
let alreadyRemoved = removedActors.reduce(function(result, actor) {
|
||||||
let removedApp = actor.child._delegate.app;
|
let removedApp = actor.child._delegate.app;
|
||||||
return result || removedApp == newApp;
|
return result || removedApp == newApps[newIndex];
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
if (insertHere || alreadyRemoved) {
|
if (insertHere || alreadyRemoved) {
|
||||||
let newItem = this._createAppItem(newApp);
|
let newItem = this._createAppItem(newApps[newIndex]);
|
||||||
addedItems.push({ app: newApp,
|
addedItems.push({ app: newApps[newIndex],
|
||||||
item: newItem,
|
item: newItem,
|
||||||
pos: newIndex + removedActors.length });
|
pos: newIndex + removedActors.length });
|
||||||
newIndex++;
|
newIndex++;
|
||||||
|
@ -22,7 +22,6 @@ const PanelMenu = imports.ui.panelMenu;
|
|||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
const Calendar = imports.ui.calendar;
|
const Calendar = imports.ui.calendar;
|
||||||
const Weather = imports.misc.weather;
|
const Weather = imports.misc.weather;
|
||||||
const System = imports.system;
|
|
||||||
|
|
||||||
function _isToday(date) {
|
function _isToday(date) {
|
||||||
let now = new Date();
|
let now = new Date();
|
||||||
@ -31,7 +30,7 @@ function _isToday(date) {
|
|||||||
now.getDate() == date.getDate();
|
now.getDate() == date.getDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
var TodayButton = new Lang.Class({
|
const TodayButton = new Lang.Class({
|
||||||
Name: 'TodayButton',
|
Name: 'TodayButton',
|
||||||
|
|
||||||
_init: function(calendar) {
|
_init: function(calendar) {
|
||||||
@ -85,7 +84,7 @@ var TodayButton = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var WorldClocksSection = new Lang.Class({
|
const WorldClocksSection = new Lang.Class({
|
||||||
Name: 'WorldClocksSection',
|
Name: 'WorldClocksSection',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -195,7 +194,7 @@ var WorldClocksSection = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var WeatherSection = new Lang.Class({
|
const WeatherSection = new Lang.Class({
|
||||||
Name: 'WeatherSection',
|
Name: 'WeatherSection',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -234,18 +233,11 @@ var WeatherSection = new Lang.Class({
|
|||||||
this._sync();
|
this._sync();
|
||||||
},
|
},
|
||||||
|
|
||||||
_getSummary: function(info, capitalize=false) {
|
_getSummary: function(info) {
|
||||||
let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION
|
let summary = info.get_conditions();
|
||||||
: GWeather.FormatOptions.NO_CAPITALIZATION;
|
if (summary == '-')
|
||||||
|
return info.get_sky();
|
||||||
let [ok, phenomenon, qualifier] = info.get_value_conditions();
|
return summary;
|
||||||
if (ok)
|
|
||||||
return new GWeather.Conditions({ significant: true,
|
|
||||||
phenomenon,
|
|
||||||
qualifier }).to_string_full(options);
|
|
||||||
|
|
||||||
let [, sky] = info.get_value_sky();
|
|
||||||
return GWeather.Sky.to_string_full(sky, options);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_sameSummary: function(info1, info2) {
|
_sameSummary: function(info1, info2) {
|
||||||
@ -263,10 +255,10 @@ var WeatherSection = new Lang.Class({
|
|||||||
let info = this._weatherClient.info;
|
let info = this._weatherClient.info;
|
||||||
let forecasts = info.get_forecast_list();
|
let forecasts = info.get_forecast_list();
|
||||||
if (forecasts.length == 0) // No forecasts, just current conditions
|
if (forecasts.length == 0) // No forecasts, just current conditions
|
||||||
return '%s.'.format(this._getSummary(info, true));
|
return '%s.'.format(this._getSummary(info));
|
||||||
|
|
||||||
let current = info;
|
let current = info;
|
||||||
let infos = [info];
|
let summaries = [this._getSummary(info)];
|
||||||
for (let i = 0; i < forecasts.length; i++) {
|
for (let i = 0; i < forecasts.length; i++) {
|
||||||
let [ok, timestamp] = forecasts[i].get_value_update();
|
let [ok, timestamp] = forecasts[i].get_value_update();
|
||||||
if (!_isToday(new Date(timestamp * 1000)))
|
if (!_isToday(new Date(timestamp * 1000)))
|
||||||
@ -276,12 +268,12 @@ var WeatherSection = new Lang.Class({
|
|||||||
continue; // Ignore consecutive runs of equal summaries
|
continue; // Ignore consecutive runs of equal summaries
|
||||||
|
|
||||||
current = forecasts[i];
|
current = forecasts[i];
|
||||||
if (infos.push(current) == 3)
|
if (summaries.push(this._getSummary(current)) == 3)
|
||||||
break; // Use a maximum of three summaries
|
break; // Use a maximum of three summaries
|
||||||
}
|
}
|
||||||
|
|
||||||
let fmt;
|
let fmt;
|
||||||
switch(infos.length) {
|
switch(summaries.length) {
|
||||||
/* Translators: %s is a weather condition like "Clear sky"; see
|
/* Translators: %s is a weather condition like "Clear sky"; see
|
||||||
libgweather for the possible condition strings. If at all
|
libgweather for the possible condition strings. If at all
|
||||||
possible, the sentence should match the grammatical case etc. of
|
possible, the sentence should match the grammatical case etc. of
|
||||||
@ -300,10 +292,6 @@ var WeatherSection = new Lang.Class({
|
|||||||
the inserted conditions. */
|
the inserted conditions. */
|
||||||
case 3: fmt = _("%s, then %s, followed by %s later."); break;
|
case 3: fmt = _("%s, then %s, followed by %s later."); break;
|
||||||
}
|
}
|
||||||
let summaries = infos.map((info, i) => {
|
|
||||||
let capitalize = i == 0 && fmt.startsWith('%s');
|
|
||||||
return this._getSummary(info, capitalize);
|
|
||||||
});
|
|
||||||
return String.prototype.format.apply(fmt, summaries);
|
return String.prototype.format.apply(fmt, summaries);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -336,14 +324,12 @@ var WeatherSection = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var MessagesIndicator = new Lang.Class({
|
const MessagesIndicator = new Lang.Class({
|
||||||
Name: 'MessagesIndicator',
|
Name: 'MessagesIndicator',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
this.actor = new St.Icon({ icon_name: 'message-indicator-symbolic',
|
this.actor = new St.Label({ text: '⚫', visible: false, y_expand: true,
|
||||||
icon_size: 16,
|
y_align: Clutter.ActorAlign.CENTER });
|
||||||
visible: false, y_expand: true,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER });
|
|
||||||
|
|
||||||
this._sources = [];
|
this._sources = [];
|
||||||
|
|
||||||
@ -378,13 +364,14 @@ var MessagesIndicator = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var IndicatorPad = new Lang.Class({
|
const IndicatorPad = new Lang.Class({
|
||||||
Name: 'IndicatorPad',
|
Name: 'IndicatorPad',
|
||||||
Extends: St.Widget,
|
Extends: St.Widget,
|
||||||
|
|
||||||
_init: function(actor) {
|
_init: function(actor) {
|
||||||
this._source = actor;
|
this._source = actor;
|
||||||
this._source.connect('notify::visible', () => { this.queue_relayout(); });
|
this._source.connect('notify::visible',
|
||||||
|
Lang.bind(this, this.queue_relayout));
|
||||||
this.parent();
|
this.parent();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -401,7 +388,7 @@ var IndicatorPad = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var FreezableBinLayout = new Lang.Class({
|
const FreezableBinLayout = new Lang.Class({
|
||||||
Name: 'FreezableBinLayout',
|
Name: 'FreezableBinLayout',
|
||||||
Extends: Clutter.BinLayout,
|
Extends: Clutter.BinLayout,
|
||||||
|
|
||||||
@ -443,7 +430,7 @@ var FreezableBinLayout = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var CalendarColumnLayout = new Lang.Class({
|
const CalendarColumnLayout = new Lang.Class({
|
||||||
Name: 'CalendarColumnLayout',
|
Name: 'CalendarColumnLayout',
|
||||||
Extends: Clutter.BoxLayout,
|
Extends: Clutter.BoxLayout,
|
||||||
|
|
||||||
@ -459,7 +446,7 @@ var CalendarColumnLayout = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var DateMenuButton = new Lang.Class({
|
const DateMenuButton = new Lang.Class({
|
||||||
Name: 'DateMenuButton',
|
Name: 'DateMenuButton',
|
||||||
Extends: PanelMenu.Button,
|
Extends: PanelMenu.Button,
|
||||||
|
|
||||||
@ -488,8 +475,6 @@ var DateMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
let layout = new FreezableBinLayout();
|
let layout = new FreezableBinLayout();
|
||||||
let bin = new St.Widget({ layout_manager: layout });
|
let bin = new St.Widget({ layout_manager: layout });
|
||||||
// For some minimal compatibility with PopupMenuItem
|
|
||||||
bin._delegate = this;
|
|
||||||
this.menu.box.add_child(bin);
|
this.menu.box.add_child(bin);
|
||||||
|
|
||||||
hbox = new St.BoxLayout({ name: 'calendarArea' });
|
hbox = new St.BoxLayout({ name: 'calendarArea' });
|
||||||
@ -548,7 +533,6 @@ var DateMenuButton = new Lang.Class({
|
|||||||
|
|
||||||
this._clock = new GnomeDesktop.WallClock();
|
this._clock = new GnomeDesktop.WallClock();
|
||||||
this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE);
|
this._clock.bind_property('clock', this._clockDisplay, 'text', GObject.BindingFlags.SYNC_CREATE);
|
||||||
this._clock.connect('notify::timezone', Lang.bind(this, this._updateTimeZone));
|
|
||||||
|
|
||||||
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
|
||||||
this._sessionUpdated();
|
this._sessionUpdated();
|
||||||
@ -568,15 +552,6 @@ var DateMenuButton = new Lang.Class({
|
|||||||
this._eventSource = eventSource;
|
this._eventSource = eventSource;
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateTimeZone: function() {
|
|
||||||
// SpiderMonkey caches the time zone so we must explicitly clear it
|
|
||||||
// before we can update the calendar, see
|
|
||||||
// https://bugzilla.gnome.org/show_bug.cgi?id=678507
|
|
||||||
System.clearDateCaches();
|
|
||||||
|
|
||||||
this._calendar.updateTimeZone();
|
|
||||||
},
|
|
||||||
|
|
||||||
_sessionUpdated: function() {
|
_sessionUpdated: function() {
|
||||||
let eventSource;
|
let eventSource;
|
||||||
let showEvents = Main.sessionMode.showCalendarEvents;
|
let showEvents = Main.sessionMode.showCalendarEvents;
|
||||||
|
249
js/ui/dialog.js
249
js/ui/dialog.js
@ -1,249 +0,0 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GObject = imports.gi.GObject;
|
|
||||||
const Pango = imports.gi.Pango;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
|
|
||||||
var Dialog = new Lang.Class({
|
|
||||||
Name: 'Dialog',
|
|
||||||
Extends: St.Widget,
|
|
||||||
|
|
||||||
_init: function (parentActor, styleClass) {
|
|
||||||
this.parent({ layout_manager: new Clutter.BinLayout() });
|
|
||||||
this.connect('destroy', Lang.bind(this, this._onDestroy));
|
|
||||||
|
|
||||||
this._initialKeyFocus = null;
|
|
||||||
this._initialKeyFocusDestroyId = 0;
|
|
||||||
this._pressedKey = null;
|
|
||||||
this._buttonKeys = {};
|
|
||||||
this._createDialog();
|
|
||||||
this.add_child(this._dialog);
|
|
||||||
|
|
||||||
if (styleClass != null)
|
|
||||||
this._dialog.add_style_class_name(styleClass);
|
|
||||||
|
|
||||||
this._parentActor = parentActor;
|
|
||||||
this._eventId = this._parentActor.connect('event', Lang.bind(this, this._modalEventHandler));
|
|
||||||
this._parentActor.add_child(this);
|
|
||||||
},
|
|
||||||
|
|
||||||
_createDialog: function () {
|
|
||||||
this._dialog = new St.BoxLayout({ style_class: 'modal-dialog',
|
|
||||||
x_align: Clutter.ActorAlign.CENTER,
|
|
||||||
y_align: Clutter.ActorAlign.CENTER,
|
|
||||||
vertical: true });
|
|
||||||
|
|
||||||
// modal dialogs are fixed width and grow vertically; set the request
|
|
||||||
// mode accordingly so wrapped labels are handled correctly during
|
|
||||||
// size requests.
|
|
||||||
this._dialog.request_mode = Clutter.RequestMode.HEIGHT_FOR_WIDTH;
|
|
||||||
|
|
||||||
this.contentLayout = new St.BoxLayout({ vertical: true,
|
|
||||||
style_class: "modal-dialog-content-box" });
|
|
||||||
this._dialog.add(this.contentLayout,
|
|
||||||
{ expand: true,
|
|
||||||
x_fill: true,
|
|
||||||
y_fill: true,
|
|
||||||
x_align: St.Align.MIDDLE,
|
|
||||||
y_align: St.Align.START });
|
|
||||||
|
|
||||||
this.buttonLayout = new St.Widget ({ layout_manager: new Clutter.BoxLayout({ homogeneous:true }) });
|
|
||||||
this._dialog.add(this.buttonLayout,
|
|
||||||
{ x_align: St.Align.MIDDLE,
|
|
||||||
y_align: St.Align.START });
|
|
||||||
},
|
|
||||||
|
|
||||||
_onDestroy: function () {
|
|
||||||
if (this._eventId != 0)
|
|
||||||
this._parentActor.disconnect(this._eventId);
|
|
||||||
this._eventId = 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
_modalEventHandler: function (actor, event) {
|
|
||||||
if (event.type() == Clutter.EventType.KEY_PRESS) {
|
|
||||||
this._pressedKey = event.get_key_symbol();
|
|
||||||
} else if (event.type() == Clutter.EventType.KEY_RELEASE) {
|
|
||||||
let pressedKey = this._pressedKey;
|
|
||||||
this._pressedKey = null;
|
|
||||||
|
|
||||||
let symbol = event.get_key_symbol();
|
|
||||||
if (symbol != pressedKey)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
let buttonInfo = this._buttonKeys[symbol];
|
|
||||||
if (!buttonInfo)
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
|
|
||||||
let { button, action } = buttonInfo;
|
|
||||||
|
|
||||||
if (action && button.reactive) {
|
|
||||||
action();
|
|
||||||
return Clutter.EVENT_STOP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
|
||||||
},
|
|
||||||
|
|
||||||
_setInitialKeyFocus: function(actor) {
|
|
||||||
if (this._initialKeyFocus)
|
|
||||||
this._initialKeyFocus.disconnect(this._initialKeyFocusDestroyId);
|
|
||||||
|
|
||||||
this._initialKeyFocus = actor;
|
|
||||||
|
|
||||||
this._initialKeyFocusDestroyId = actor.connect('destroy', () => {
|
|
||||||
this._initialKeyFocus = null;
|
|
||||||
this._initialKeyFocusDestroyId = 0;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
get initialKeyFocus() {
|
|
||||||
return this._initialKeyFocus || this;
|
|
||||||
},
|
|
||||||
|
|
||||||
addContent: function (actor) {
|
|
||||||
this.contentLayout.add (actor, { expand: true });
|
|
||||||
},
|
|
||||||
|
|
||||||
addButton: function (buttonInfo) {
|
|
||||||
let { label, action, key } = buttonInfo;
|
|
||||||
let isDefault = buttonInfo['default'];
|
|
||||||
let keys;
|
|
||||||
|
|
||||||
if (key)
|
|
||||||
keys = [key];
|
|
||||||
else if (isDefault)
|
|
||||||
keys = [Clutter.KEY_Return, Clutter.KEY_KP_Enter, Clutter.KEY_ISO_Enter];
|
|
||||||
else
|
|
||||||
keys = [];
|
|
||||||
|
|
||||||
let button = new St.Button({ style_class: 'modal-dialog-linked-button',
|
|
||||||
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
|
|
||||||
reactive: true,
|
|
||||||
can_focus: true,
|
|
||||||
x_expand: true,
|
|
||||||
y_expand: true,
|
|
||||||
label: label });
|
|
||||||
button.connect('clicked', action);
|
|
||||||
|
|
||||||
buttonInfo['button'] = button;
|
|
||||||
|
|
||||||
if (isDefault)
|
|
||||||
button.add_style_pseudo_class('default');
|
|
||||||
|
|
||||||
if (this._initialKeyFocus == null || isDefault)
|
|
||||||
this._setInitialKeyFocus(button);
|
|
||||||
|
|
||||||
for (let i in keys)
|
|
||||||
this._buttonKeys[keys[i]] = buttonInfo;
|
|
||||||
|
|
||||||
this.buttonLayout.add_actor(button);
|
|
||||||
|
|
||||||
return button;
|
|
||||||
},
|
|
||||||
|
|
||||||
clearButtons: function () {
|
|
||||||
this.buttonLayout.destroy_all_children();
|
|
||||||
this._buttonKeys = {};
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
var MessageDialogContent = new Lang.Class({
|
|
||||||
Name: 'MessageDialogContent',
|
|
||||||
Extends: St.BoxLayout,
|
|
||||||
Properties: {
|
|
||||||
'icon': GObject.ParamSpec.object('icon', 'icon', 'icon',
|
|
||||||
GObject.ParamFlags.READWRITE |
|
|
||||||
GObject.ParamFlags.CONSTRUCT,
|
|
||||||
Gio.Icon.$gtype),
|
|
||||||
'title': GObject.ParamSpec.string('title', 'title', 'title',
|
|
||||||
GObject.ParamFlags.READWRITE |
|
|
||||||
GObject.ParamFlags.CONSTRUCT,
|
|
||||||
null),
|
|
||||||
'subtitle': GObject.ParamSpec.string('subtitle', 'subtitle', 'subtitle',
|
|
||||||
GObject.ParamFlags.READWRITE |
|
|
||||||
GObject.ParamFlags.CONSTRUCT,
|
|
||||||
null),
|
|
||||||
'body': GObject.ParamSpec.string('body', 'body', 'body',
|
|
||||||
GObject.ParamFlags.READWRITE |
|
|
||||||
GObject.ParamFlags.CONSTRUCT,
|
|
||||||
null)
|
|
||||||
},
|
|
||||||
|
|
||||||
_init: function(params) {
|
|
||||||
this._icon = new St.Icon({ y_align: Clutter.ActorAlign.START });
|
|
||||||
this._title = new St.Label({ style_class: 'headline' });
|
|
||||||
this._subtitle = new St.Label();
|
|
||||||
this._body = new St.Label();
|
|
||||||
|
|
||||||
['icon', 'title', 'subtitle', 'body'].forEach(prop => {
|
|
||||||
this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
|
|
||||||
line_wrap: true };
|
|
||||||
Object.assign(this._subtitle.clutter_text, textProps);
|
|
||||||
Object.assign(this._body.clutter_text, textProps);
|
|
||||||
|
|
||||||
if (!params.hasOwnProperty('style_class'))
|
|
||||||
params.style_class = 'message-dialog-main-layout';
|
|
||||||
|
|
||||||
this.parent(params);
|
|
||||||
|
|
||||||
this.messageBox = new St.BoxLayout({ style_class: 'message-dialog-content',
|
|
||||||
x_expand: true,
|
|
||||||
vertical: true });
|
|
||||||
|
|
||||||
this.messageBox.add_actor(this._title);
|
|
||||||
this.messageBox.add_actor(this._subtitle);
|
|
||||||
this.messageBox.add_actor(this._body);
|
|
||||||
|
|
||||||
this.add_actor(this._icon);
|
|
||||||
this.add_actor(this.messageBox);
|
|
||||||
},
|
|
||||||
|
|
||||||
get icon() {
|
|
||||||
return this._icon.gicon;
|
|
||||||
},
|
|
||||||
|
|
||||||
get title() {
|
|
||||||
return this._title.text;
|
|
||||||
},
|
|
||||||
|
|
||||||
get subtitle() {
|
|
||||||
return this._subtitle.text;
|
|
||||||
},
|
|
||||||
|
|
||||||
get body() {
|
|
||||||
return this._body.text;
|
|
||||||
},
|
|
||||||
|
|
||||||
set icon(icon) {
|
|
||||||
Object.assign(this._icon, { gicon: icon, visible: icon != null });
|
|
||||||
this.notify('icon');
|
|
||||||
},
|
|
||||||
|
|
||||||
set title(title) {
|
|
||||||
this._setLabel(this._title, 'title', title);
|
|
||||||
},
|
|
||||||
|
|
||||||
set subtitle(subtitle) {
|
|
||||||
this._setLabel(this._subtitle, 'subtitle', subtitle);
|
|
||||||
},
|
|
||||||
|
|
||||||
set body(body) {
|
|
||||||
this._setLabel(this._body, 'body', body);
|
|
||||||
},
|
|
||||||
|
|
||||||
_setLabel(label, prop, value) {
|
|
||||||
Object.assign(label, { text: value || '', visible: value != null });
|
|
||||||
this.notify(prop);
|
|
||||||
},
|
|
||||||
|
|
||||||
insertBeforeBody: function(actor) {
|
|
||||||
this.messageBox.insert_child_below(actor, this._body);
|
|
||||||
}
|
|
||||||
});
|
|
19
js/ui/dnd.js
19
js/ui/dnd.js
@ -14,34 +14,34 @@ const Main = imports.ui.main;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
|
||||||
// Time to scale down to maxDragActorSize
|
// Time to scale down to maxDragActorSize
|
||||||
var SCALE_ANIMATION_TIME = 0.25;
|
const SCALE_ANIMATION_TIME = 0.25;
|
||||||
// Time to animate to original position on cancel
|
// Time to animate to original position on cancel
|
||||||
var SNAP_BACK_ANIMATION_TIME = 0.25;
|
const SNAP_BACK_ANIMATION_TIME = 0.25;
|
||||||
// Time to animate to original position on success
|
// Time to animate to original position on success
|
||||||
var REVERT_ANIMATION_TIME = 0.75;
|
const REVERT_ANIMATION_TIME = 0.75;
|
||||||
|
|
||||||
var DragMotionResult = {
|
const DragMotionResult = {
|
||||||
NO_DROP: 0,
|
NO_DROP: 0,
|
||||||
COPY_DROP: 1,
|
COPY_DROP: 1,
|
||||||
MOVE_DROP: 2,
|
MOVE_DROP: 2,
|
||||||
CONTINUE: 3
|
CONTINUE: 3
|
||||||
};
|
};
|
||||||
|
|
||||||
var DRAG_CURSOR_MAP = {
|
const DRAG_CURSOR_MAP = {
|
||||||
0: Meta.Cursor.DND_UNSUPPORTED_TARGET,
|
0: Meta.Cursor.DND_UNSUPPORTED_TARGET,
|
||||||
1: Meta.Cursor.DND_COPY,
|
1: Meta.Cursor.DND_COPY,
|
||||||
2: Meta.Cursor.DND_MOVE
|
2: Meta.Cursor.DND_MOVE
|
||||||
};
|
};
|
||||||
|
|
||||||
var DragDropResult = {
|
const DragDropResult = {
|
||||||
FAILURE: 0,
|
FAILURE: 0,
|
||||||
SUCCESS: 1,
|
SUCCESS: 1,
|
||||||
CONTINUE: 2
|
CONTINUE: 2
|
||||||
};
|
};
|
||||||
var dragMonitors = [];
|
|
||||||
|
|
||||||
let eventHandlerActor = null;
|
let eventHandlerActor = null;
|
||||||
let currentDraggable = null;
|
let currentDraggable = null;
|
||||||
|
let dragMonitors = [];
|
||||||
|
|
||||||
function _getEventHandlerActor() {
|
function _getEventHandlerActor() {
|
||||||
if (!eventHandlerActor) {
|
if (!eventHandlerActor) {
|
||||||
@ -69,7 +69,7 @@ function removeDragMonitor(monitor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _Draggable = new Lang.Class({
|
const _Draggable = new Lang.Class({
|
||||||
Name: 'Draggable',
|
Name: 'Draggable',
|
||||||
|
|
||||||
_init : function(actor, params) {
|
_init : function(actor, params) {
|
||||||
@ -94,7 +94,6 @@ var _Draggable = new Lang.Class({
|
|||||||
this.disconnectAll();
|
this.disconnectAll();
|
||||||
}));
|
}));
|
||||||
this._onEventId = null;
|
this._onEventId = null;
|
||||||
this._touchSequence = null;
|
|
||||||
|
|
||||||
this._restoreOnSuccess = params.restoreOnSuccess;
|
this._restoreOnSuccess = params.restoreOnSuccess;
|
||||||
this._dragActorMaxSize = params.dragActorMaxSize;
|
this._dragActorMaxSize = params.dragActorMaxSize;
|
||||||
@ -531,7 +530,7 @@ var _Draggable = new Lang.Class({
|
|||||||
// Snap the clone back to its source
|
// Snap the clone back to its source
|
||||||
[x, y] = this._dragActorSource.get_transformed_position();
|
[x, y] = this._dragActorSource.get_transformed_position();
|
||||||
let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size();
|
let [sourceScaledWidth, sourceScaledHeight] = this._dragActorSource.get_transformed_size();
|
||||||
scale = sourceScaledWidth ? this._dragActor.width / sourceScaledWidth : 0;
|
scale = this._dragActor.width / sourceScaledWidth;
|
||||||
} else if (this._dragOrigParent) {
|
} else if (this._dragOrigParent) {
|
||||||
// Snap the actor back to its original position within
|
// Snap the actor back to its original position within
|
||||||
// its parent, adjusting for the fact that the parent
|
// its parent, adjusting for the fact that the parent
|
||||||
|
@ -8,10 +8,10 @@ const St = imports.gi.St;
|
|||||||
|
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
var EDGE_THRESHOLD = 20;
|
const EDGE_THRESHOLD = 20;
|
||||||
var DRAG_DISTANCE = 80;
|
const DRAG_DISTANCE = 80;
|
||||||
|
|
||||||
var EdgeDragAction = new Lang.Class({
|
const EdgeDragAction = new Lang.Class({
|
||||||
Name: 'EdgeDragAction',
|
Name: 'EdgeDragAction',
|
||||||
Extends: Clutter.GestureAction,
|
Extends: Clutter.GestureAction,
|
||||||
Signals: { 'activated': {} },
|
Signals: { 'activated': {} },
|
||||||
|
@ -41,7 +41,7 @@ let _endSessionDialog = null;
|
|||||||
const _ITEM_ICON_SIZE = 48;
|
const _ITEM_ICON_SIZE = 48;
|
||||||
const _DIALOG_ICON_SIZE = 48;
|
const _DIALOG_ICON_SIZE = 48;
|
||||||
|
|
||||||
var GSM_SESSION_MANAGER_LOGOUT_FORCE = 2;
|
const GSM_SESSION_MANAGER_LOGOUT_FORCE = 2;
|
||||||
|
|
||||||
const EndSessionDialogIface = '<node> \
|
const EndSessionDialogIface = '<node> \
|
||||||
<interface name="org.gnome.SessionManager.EndSessionDialog"> \
|
<interface name="org.gnome.SessionManager.EndSessionDialog"> \
|
||||||
@ -166,7 +166,7 @@ const DialogContent = {
|
|||||||
4 /* DialogType.UPGRADE_RESTART */: restartUpgradeDialogContent
|
4 /* DialogType.UPGRADE_RESTART */: restartUpgradeDialogContent
|
||||||
};
|
};
|
||||||
|
|
||||||
var MAX_USERS_IN_SESSION_DIALOG = 5;
|
const MAX_USERS_IN_SESSION_DIALOG = 5;
|
||||||
|
|
||||||
const LogindSessionIface = '<node> \
|
const LogindSessionIface = '<node> \
|
||||||
<interface name="org.freedesktop.login1.Session"> \
|
<interface name="org.freedesktop.login1.Session"> \
|
||||||
@ -275,7 +275,7 @@ function init() {
|
|||||||
_endSessionDialog = new EndSessionDialog();
|
_endSessionDialog = new EndSessionDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
var EndSessionDialog = new Lang.Class({
|
const EndSessionDialog = new Lang.Class({
|
||||||
Name: 'EndSessionDialog',
|
Name: 'EndSessionDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ imports.gi.versions.Gtk = '3.0';
|
|||||||
imports.gi.versions.TelepathyGLib = '0.12';
|
imports.gi.versions.TelepathyGLib = '0.12';
|
||||||
imports.gi.versions.TelepathyLogger = '0.2';
|
imports.gi.versions.TelepathyLogger = '0.2';
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;;
|
||||||
const Gettext = imports.gettext;
|
const Gettext = imports.gettext;
|
||||||
const GLib = imports.gi.GLib;
|
const GLib = imports.gi.GLib;
|
||||||
const Gtk = imports.gi.Gtk;
|
const Gtk = imports.gi.Gtk;
|
||||||
|
@ -17,10 +17,10 @@ const ModalDialog = imports.ui.modalDialog;
|
|||||||
|
|
||||||
const _signals = ExtensionSystem._signals;
|
const _signals = ExtensionSystem._signals;
|
||||||
|
|
||||||
var REPOSITORY_URL_BASE = 'https://extensions.gnome.org';
|
const REPOSITORY_URL_BASE = 'https://extensions.gnome.org';
|
||||||
var REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
|
const REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
|
||||||
var REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
|
const REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
|
||||||
var REPOSITORY_URL_UPDATE = REPOSITORY_URL_BASE + '/update-info/';
|
const REPOSITORY_URL_UPDATE = REPOSITORY_URL_BASE + '/update-info/';
|
||||||
|
|
||||||
let _httpSession;
|
let _httpSession;
|
||||||
|
|
||||||
@ -130,14 +130,12 @@ function updateExtension(uuid) {
|
|||||||
FileUtils.recursivelyMoveDir(extensionDir, oldExtensionTmpDir);
|
FileUtils.recursivelyMoveDir(extensionDir, oldExtensionTmpDir);
|
||||||
FileUtils.recursivelyMoveDir(newExtensionTmpDir, extensionDir);
|
FileUtils.recursivelyMoveDir(newExtensionTmpDir, extensionDir);
|
||||||
|
|
||||||
let extension = null;
|
let extension = ExtensionUtils.createExtensionObject(uuid, extensionDir, ExtensionUtils.ExtensionType.PER_USER);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
extension = ExtensionUtils.createExtensionObject(uuid, extensionDir, ExtensionUtils.ExtensionType.PER_USER);
|
|
||||||
ExtensionSystem.loadExtension(extension);
|
ExtensionSystem.loadExtension(extension);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
if (extension)
|
ExtensionSystem.unloadExtension(extension);
|
||||||
ExtensionSystem.unloadExtension(extension);
|
|
||||||
|
|
||||||
logError(e, 'Error loading extension %s'.format(uuid));
|
logError(e, 'Error loading extension %s'.format(uuid));
|
||||||
|
|
||||||
@ -183,7 +181,7 @@ function checkForUpdates() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var InstallExtensionDialog = new Lang.Class({
|
const InstallExtensionDialog = new Lang.Class({
|
||||||
Name: 'InstallExtensionDialog',
|
Name: 'InstallExtensionDialog',
|
||||||
Extends: ModalDialog.ModalDialog,
|
Extends: ModalDialog.ModalDialog,
|
||||||
|
|
||||||
@ -205,7 +203,7 @@ var InstallExtensionDialog = new Lang.Class({
|
|||||||
|
|
||||||
let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name);
|
let message = _("Download and install “%s” from extensions.gnome.org?").format(info.name);
|
||||||
|
|
||||||
let box = new St.BoxLayout({ style_class: 'message-dialog-main-layout',
|
let box = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
|
||||||
vertical: false });
|
vertical: false });
|
||||||
this.contentLayout.add(box);
|
this.contentLayout.add(box);
|
||||||
|
|
||||||
@ -213,7 +211,7 @@ var InstallExtensionDialog = new Lang.Class({
|
|||||||
let icon = new St.Icon({ gicon: gicon });
|
let icon = new St.Icon({ gicon: gicon });
|
||||||
box.add(icon);
|
box.add(icon);
|
||||||
|
|
||||||
let label = new St.Label({ style_class: 'message-dialog-title headline',
|
let label = new St.Label({ style_class: 'prompt-dialog-headline headline',
|
||||||
text: message });
|
text: message });
|
||||||
box.add(label);
|
box.add(label);
|
||||||
},
|
},
|
||||||
@ -244,8 +242,9 @@ var InstallExtensionDialog = new Lang.Class({
|
|||||||
global.settings.set_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY, enabledExtensions);
|
global.settings.set_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY, enabledExtensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let extension = ExtensionUtils.createExtensionObject(uuid, dir, ExtensionUtils.ExtensionType.PER_USER);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let extension = ExtensionUtils.createExtensionObject(uuid, dir, ExtensionUtils.ExtensionType.PER_USER);
|
|
||||||
ExtensionSystem.loadExtension(extension);
|
ExtensionSystem.loadExtension(extension);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
uninstallExtension(uuid);
|
uninstallExtension(uuid);
|
||||||
|
@ -10,7 +10,7 @@ const St = imports.gi.St;
|
|||||||
const ExtensionUtils = imports.misc.extensionUtils;
|
const ExtensionUtils = imports.misc.extensionUtils;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
var ExtensionState = {
|
const ExtensionState = {
|
||||||
ENABLED: 1,
|
ENABLED: 1,
|
||||||
DISABLED: 2,
|
DISABLED: 2,
|
||||||
ERROR: 3,
|
ERROR: 3,
|
||||||
@ -26,7 +26,7 @@ var ExtensionState = {
|
|||||||
// Arrays of uuids
|
// Arrays of uuids
|
||||||
var enabledExtensions;
|
var enabledExtensions;
|
||||||
// Contains the order that extensions were enabled in.
|
// Contains the order that extensions were enabled in.
|
||||||
var extensionOrder = [];
|
const extensionOrder = [];
|
||||||
|
|
||||||
// We don't really have a class to add signals on. So, create
|
// We don't really have a class to add signals on. So, create
|
||||||
// a simple dummy object, add the signal methods, and export those
|
// a simple dummy object, add the signal methods, and export those
|
||||||
@ -34,8 +34,8 @@ var extensionOrder = [];
|
|||||||
var _signals = {};
|
var _signals = {};
|
||||||
Signals.addSignalMethods(_signals);
|
Signals.addSignalMethods(_signals);
|
||||||
|
|
||||||
var connect = Lang.bind(_signals, _signals.connect);
|
const connect = Lang.bind(_signals, _signals.connect);
|
||||||
var disconnect = Lang.bind(_signals, _signals.disconnect);
|
const disconnect = Lang.bind(_signals, _signals.disconnect);
|
||||||
|
|
||||||
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
|
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
|
||||||
const DISABLE_USER_EXTENSIONS_KEY = 'disable-user-extensions';
|
const DISABLE_USER_EXTENSIONS_KEY = 'disable-user-extensions';
|
||||||
@ -199,14 +199,7 @@ function reloadExtension(oldExtension) {
|
|||||||
unloadExtension(oldExtension);
|
unloadExtension(oldExtension);
|
||||||
|
|
||||||
// Now, recreate the extension and load it.
|
// Now, recreate the extension and load it.
|
||||||
let newExtension;
|
let newExtension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
||||||
try {
|
|
||||||
newExtension = ExtensionUtils.createExtensionObject(uuid, dir, type);
|
|
||||||
} catch(e) {
|
|
||||||
logExtensionError(uuid, e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
loadExtension(newExtension);
|
loadExtension(newExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,21 +211,14 @@ function initExtension(uuid) {
|
|||||||
throw new Error("Extension was not properly created. Call loadExtension first");
|
throw new Error("Extension was not properly created. Call loadExtension first");
|
||||||
|
|
||||||
let extensionJs = dir.get_child('extension.js');
|
let extensionJs = dir.get_child('extension.js');
|
||||||
if (!extensionJs.query_exists(null)) {
|
if (!extensionJs.query_exists(null))
|
||||||
logExtensionError(uuid, new Error('Missing extension.js'));
|
throw new Error('Missing extension.js');
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let extensionModule;
|
let extensionModule;
|
||||||
let extensionState = null;
|
let extensionState = null;
|
||||||
|
|
||||||
ExtensionUtils.installImporter(extension);
|
ExtensionUtils.installImporter(extension);
|
||||||
try {
|
extensionModule = extension.imports.extension;
|
||||||
extensionModule = extension.imports.extension;
|
|
||||||
} catch(e) {
|
|
||||||
logExtensionError(uuid, e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (extensionModule.init) {
|
if (extensionModule.init) {
|
||||||
try {
|
try {
|
||||||
|
@ -28,7 +28,7 @@ const Signals = imports.signals;
|
|||||||
const CARETMOVED = 'object:text-caret-moved';
|
const CARETMOVED = 'object:text-caret-moved';
|
||||||
const STATECHANGED = 'object:state-changed';
|
const STATECHANGED = 'object:state-changed';
|
||||||
|
|
||||||
var FocusCaretTracker = new Lang.Class({
|
const FocusCaretTracker = new Lang.Class({
|
||||||
Name: 'FocusCaretTracker',
|
Name: 'FocusCaretTracker',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -47,27 +47,30 @@ var FocusCaretTracker = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_initAtspi: function() {
|
_initAtspi: function() {
|
||||||
if (!this._atspiInited && Atspi.init() == 0) {
|
if (!this._atspiInited) {
|
||||||
|
Atspi.init();
|
||||||
Atspi.set_timeout(250, 250);
|
Atspi.set_timeout(250, 250);
|
||||||
this._atspiInited = true;
|
this._atspiInited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this._atspiInited;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
registerFocusListener: function() {
|
registerFocusListener: function() {
|
||||||
if (!this._initAtspi() || this._focusListenerRegistered)
|
if (this._focusListenerRegistered)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._initAtspi();
|
||||||
|
|
||||||
this._atspiListener.register(STATECHANGED + ':focused');
|
this._atspiListener.register(STATECHANGED + ':focused');
|
||||||
this._atspiListener.register(STATECHANGED + ':selected');
|
this._atspiListener.register(STATECHANGED + ':selected');
|
||||||
this._focusListenerRegistered = true;
|
this._focusListenerRegistered = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
registerCaretListener: function() {
|
registerCaretListener: function() {
|
||||||
if (!this._initAtspi() || this._caretListenerRegistered)
|
if (this._caretListenerRegistered)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._initAtspi();
|
||||||
|
|
||||||
this._atspiListener.register(CARETMOVED);
|
this._atspiListener.register(CARETMOVED);
|
||||||
this._caretListenerRegistered = true;
|
this._caretListenerRegistered = true;
|
||||||
},
|
},
|
||||||
|
@ -46,7 +46,7 @@ function _popGrabHelper(grabHelper) {
|
|||||||
// your code just needs to deal with it; you shouldn't adjust behavior directly
|
// your code just needs to deal with it; you shouldn't adjust behavior directly
|
||||||
// after you call ungrab(), but instead pass an 'onUngrab' callback when you
|
// after you call ungrab(), but instead pass an 'onUngrab' callback when you
|
||||||
// call grab().
|
// call grab().
|
||||||
var GrabHelper = new Lang.Class({
|
const GrabHelper = new Lang.Class({
|
||||||
Name: 'GrabHelper',
|
Name: 'GrabHelper',
|
||||||
|
|
||||||
_init: function(owner, params) {
|
_init: function(owner, params) {
|
||||||
|
@ -9,12 +9,12 @@ const St = imports.gi.St;
|
|||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
var MAX_CANDIDATES_PER_PAGE = 16;
|
const MAX_CANDIDATES_PER_PAGE = 16;
|
||||||
|
|
||||||
var DEFAULT_INDEX_LABELS = [ '1', '2', '3', '4', '5', '6', '7', '8',
|
const DEFAULT_INDEX_LABELS = [ '1', '2', '3', '4', '5', '6', '7', '8',
|
||||||
'9', '0', 'a', 'b', 'c', 'd', 'e', 'f' ];
|
'9', '0', 'a', 'b', 'c', 'd', 'e', 'f' ];
|
||||||
|
|
||||||
var CandidateArea = new Lang.Class({
|
const CandidateArea = new Lang.Class({
|
||||||
Name: 'CandidateArea',
|
Name: 'CandidateArea',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
@ -128,7 +128,7 @@ var CandidateArea = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(CandidateArea.prototype);
|
Signals.addSignalMethods(CandidateArea.prototype);
|
||||||
|
|
||||||
var CandidatePopup = new Lang.Class({
|
const CandidatePopup = new Lang.Class({
|
||||||
Name: 'CandidatePopup',
|
Name: 'CandidatePopup',
|
||||||
|
|
||||||
_init: function() {
|
_init: function() {
|
||||||
|
@ -12,29 +12,29 @@ const Params = imports.misc.params;
|
|||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
|
|
||||||
var ICON_SIZE = 96;
|
const ICON_SIZE = 96;
|
||||||
var MIN_ICON_SIZE = 16;
|
const MIN_ICON_SIZE = 16;
|
||||||
|
|
||||||
var EXTRA_SPACE_ANIMATION_TIME = 0.25;
|
const EXTRA_SPACE_ANIMATION_TIME = 0.25;
|
||||||
|
|
||||||
var ANIMATION_TIME_IN = 0.350;
|
const ANIMATION_TIME_IN = 0.350;
|
||||||
var ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN;
|
const ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN;
|
||||||
var ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * ANIMATION_TIME_IN;
|
const ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * ANIMATION_TIME_IN;
|
||||||
var ANIMATION_BASE_DELAY_FOR_ITEM = 1/4 * ANIMATION_MAX_DELAY_FOR_ITEM;
|
const ANIMATION_BASE_DELAY_FOR_ITEM = 1/4 * ANIMATION_MAX_DELAY_FOR_ITEM;
|
||||||
var ANIMATION_MAX_DELAY_OUT_FOR_ITEM = 2/3 * ANIMATION_TIME_OUT;
|
const ANIMATION_MAX_DELAY_OUT_FOR_ITEM = 2/3 * ANIMATION_TIME_OUT;
|
||||||
var ANIMATION_FADE_IN_TIME_FOR_ITEM = 1/4 * ANIMATION_TIME_IN;
|
const ANIMATION_FADE_IN_TIME_FOR_ITEM = 1/4 * ANIMATION_TIME_IN;
|
||||||
|
|
||||||
var ANIMATION_BOUNCE_ICON_SCALE = 1.1;
|
const ANIMATION_BOUNCE_ICON_SCALE = 1.1;
|
||||||
|
|
||||||
var AnimationDirection = {
|
const AnimationDirection = {
|
||||||
IN: 0,
|
IN: 0,
|
||||||
OUT: 1
|
OUT: 1
|
||||||
};
|
};
|
||||||
|
|
||||||
var APPICON_ANIMATION_OUT_SCALE = 3;
|
const APPICON_ANIMATION_OUT_SCALE = 3;
|
||||||
var APPICON_ANIMATION_OUT_TIME = 0.25;
|
const APPICON_ANIMATION_OUT_TIME = 0.25;
|
||||||
|
|
||||||
var BaseIcon = new Lang.Class({
|
const BaseIcon = new Lang.Class({
|
||||||
Name: 'BaseIcon',
|
Name: 'BaseIcon',
|
||||||
|
|
||||||
_init : function(label, params) {
|
_init : function(label, params) {
|
||||||
@ -240,7 +240,7 @@ function zoomOutActor(actor) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var IconGrid = new Lang.Class({
|
const IconGrid = new Lang.Class({
|
||||||
Name: 'IconGrid',
|
Name: 'IconGrid',
|
||||||
|
|
||||||
_init: function(params) {
|
_init: function(params) {
|
||||||
@ -267,7 +267,6 @@ var IconGrid = new Lang.Class({
|
|||||||
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
|
||||||
vertical: true });
|
vertical: true });
|
||||||
this._items = [];
|
this._items = [];
|
||||||
this._clonesAnimating = [];
|
|
||||||
// Pulled from CSS, but hardcode some defaults here
|
// Pulled from CSS, but hardcode some defaults here
|
||||||
this._spacing = 0;
|
this._spacing = 0;
|
||||||
this._hItemSize = this._vItemSize = ICON_SIZE;
|
this._hItemSize = this._vItemSize = ICON_SIZE;
|
||||||
@ -276,13 +275,6 @@ var IconGrid = new Lang.Class({
|
|||||||
this.actor.add(this._grid, { expand: true, y_align: St.Align.START });
|
this.actor.add(this._grid, { expand: true, y_align: St.Align.START });
|
||||||
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
this.actor.connect('style-changed', Lang.bind(this, this._onStyleChanged));
|
||||||
|
|
||||||
// Cancel animations when hiding the overview, to avoid icons
|
|
||||||
// swarming into the void ...
|
|
||||||
this.actor.connect('notify::mapped', () => {
|
|
||||||
if (!this.actor.mapped)
|
|
||||||
this._cancelAnimation();
|
|
||||||
});
|
|
||||||
|
|
||||||
this._grid.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
this._grid.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
|
||||||
this._grid.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
this._grid.connect('get-preferred-height', Lang.bind(this, this._getPreferredHeight));
|
||||||
this._grid.connect('allocate', Lang.bind(this, this._allocate));
|
this._grid.connect('allocate', Lang.bind(this, this._allocate));
|
||||||
@ -418,13 +410,8 @@ var IconGrid = new Lang.Class({
|
|||||||
return this._getVisibleChildren();
|
return this._getVisibleChildren();
|
||||||
},
|
},
|
||||||
|
|
||||||
_cancelAnimation: function() {
|
|
||||||
this._clonesAnimating.forEach(clone => { clone.destroy(); });
|
|
||||||
this._clonesAnimating = [];
|
|
||||||
},
|
|
||||||
|
|
||||||
_animationDone: function() {
|
_animationDone: function() {
|
||||||
this._clonesAnimating = [];
|
this._animating = false;
|
||||||
this.emit('animation-done');
|
this.emit('animation-done');
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -432,7 +419,10 @@ var IconGrid = new Lang.Class({
|
|||||||
if (animationDirection != AnimationDirection.IN)
|
if (animationDirection != AnimationDirection.IN)
|
||||||
throw new Error("Pulse animation only implements 'in' animation direction");
|
throw new Error("Pulse animation only implements 'in' animation direction");
|
||||||
|
|
||||||
this._cancelAnimation();
|
if (this._animating)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._animating = true;
|
||||||
|
|
||||||
let actors = this._getChildrenToAnimate();
|
let actors = this._getChildrenToAnimate();
|
||||||
if (actors.length == 0) {
|
if (actors.length == 0) {
|
||||||
@ -480,7 +470,10 @@ var IconGrid = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
animateSpring: function(animationDirection, sourceActor) {
|
animateSpring: function(animationDirection, sourceActor) {
|
||||||
this._cancelAnimation();
|
if (this._animating)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._animating = true;
|
||||||
|
|
||||||
let actors = this._getChildrenToAnimate();
|
let actors = this._getChildrenToAnimate();
|
||||||
if (actors.length == 0) {
|
if (actors.length == 0) {
|
||||||
@ -514,7 +507,6 @@ var IconGrid = new Lang.Class({
|
|||||||
actor.reactive = false;
|
actor.reactive = false;
|
||||||
|
|
||||||
let actorClone = new Clutter.Clone({ source: actor });
|
let actorClone = new Clutter.Clone({ source: actor });
|
||||||
this._clonesAnimating.push(actorClone);
|
|
||||||
Main.uiGroup.add_actor(actorClone);
|
Main.uiGroup.add_actor(actorClone);
|
||||||
|
|
||||||
let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor);
|
let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor);
|
||||||
@ -798,7 +790,7 @@ var IconGrid = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(IconGrid.prototype);
|
Signals.addSignalMethods(IconGrid.prototype);
|
||||||
|
|
||||||
var PaginatedIconGrid = new Lang.Class({
|
const PaginatedIconGrid = new Lang.Class({
|
||||||
Name: 'PaginatedIconGrid',
|
Name: 'PaginatedIconGrid',
|
||||||
Extends: IconGrid,
|
Extends: IconGrid,
|
||||||
|
|
||||||
|
@ -1,102 +0,0 @@
|
|||||||
const Clutter = imports.gi.Clutter;
|
|
||||||
const Gio = imports.gi.Gio;
|
|
||||||
const GObject = imports.gi.GObject;
|
|
||||||
const Gtk = imports.gi.Gtk;
|
|
||||||
const Lang = imports.lang;
|
|
||||||
const Meta = imports.gi.Meta;
|
|
||||||
const Shell = imports.gi.Shell;
|
|
||||||
const St = imports.gi.St;
|
|
||||||
|
|
||||||
const Dialog = imports.ui.dialog;
|
|
||||||
const ModalDialog = imports.ui.modalDialog;
|
|
||||||
|
|
||||||
const WAYLAND_KEYBINDINGS_SCHEMA = 'org.gnome.mutter.wayland.keybindings';
|
|
||||||
|
|
||||||
const APP_WHITELIST = ['gnome-control-center.desktop'];
|
|
||||||
|
|
||||||
var DialogResponse = Meta.InhibitShortcutsDialogResponse;
|
|
||||||
|
|
||||||
var InhibitShortcutsDialog = new Lang.Class({
|
|
||||||
Name: 'InhibitShortcutsDialog',
|
|
||||||
Extends: GObject.Object,
|
|
||||||
Implements: [Meta.InhibitShortcutsDialog],
|
|
||||||
Properties: {
|
|
||||||
'window': GObject.ParamSpec.override('window', Meta.InhibitShortcutsDialog)
|
|
||||||
},
|
|
||||||
|
|
||||||
_init: function(window) {
|
|
||||||
this.parent();
|
|
||||||
this._window = window;
|
|
||||||
|
|
||||||
this._dialog = new ModalDialog.ModalDialog();
|
|
||||||
this._buildLayout();
|
|
||||||
},
|
|
||||||
|
|
||||||
get window() {
|
|
||||||
return this._window;
|
|
||||||
},
|
|
||||||
|
|
||||||
set window(window) {
|
|
||||||
this._window = window;
|
|
||||||
},
|
|
||||||
|
|
||||||
get _app() {
|
|
||||||
let windowTracker = Shell.WindowTracker.get_default();
|
|
||||||
return windowTracker.get_window_app(this._window);
|
|
||||||
},
|
|
||||||
|
|
||||||
_getRestoreAccel: function() {
|
|
||||||
let settings = new Gio.Settings({ schema_id: WAYLAND_KEYBINDINGS_SCHEMA });
|
|
||||||
let accel = settings.get_strv('restore-shortcuts')[0] || '';
|
|
||||||
return Gtk.accelerator_get_label.apply(null,
|
|
||||||
Gtk.accelerator_parse(accel));
|
|
||||||
},
|
|
||||||
|
|
||||||
_buildLayout: function() {
|
|
||||||
let name = this._app ? this._app.get_name() : this._window.title;
|
|
||||||
|
|
||||||
/* Translators: %s is an application name like "Settings" */
|
|
||||||
let title = name ? _("%s wants to inhibit shortcuts").format(name)
|
|
||||||
: _("Application wants to inhibit shortcuts");
|
|
||||||
let icon = new Gio.ThemedIcon({ name: 'dialog-warning-symbolic' });
|
|
||||||
|
|
||||||
let contentParams = { icon, title };
|
|
||||||
|
|
||||||
let restoreAccel = this._getRestoreAccel();
|
|
||||||
if (restoreAccel)
|
|
||||||
contentParams.subtitle =
|
|
||||||
/* Translators: %s is a keyboard shortcut like "Super+x" */
|
|
||||||
_("You can restore shortcuts by pressing %s.").format(restoreAccel);
|
|
||||||
|
|
||||||
let content = new Dialog.MessageDialogContent(contentParams);
|
|
||||||
this._dialog.contentLayout.add_actor(content);
|
|
||||||
|
|
||||||
this._dialog.addButton({ label: _("Deny"),
|
|
||||||
action: () => {
|
|
||||||
this._emitResponse(DialogResponse.DENY);
|
|
||||||
},
|
|
||||||
key: Clutter.KEY_Escape });
|
|
||||||
|
|
||||||
this._dialog.addButton({ label: _("Allow"),
|
|
||||||
action: () => {
|
|
||||||
this._emitResponse(DialogResponse.ALLOW);
|
|
||||||
},
|
|
||||||
default: true });
|
|
||||||
},
|
|
||||||
|
|
||||||
_emitResponse: function(response) {
|
|
||||||
this.emit('response', response);
|
|
||||||
this._dialog.close();
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_show: function() {
|
|
||||||
if (this._app && APP_WHITELIST.indexOf(this._app.get_id()) != -1)
|
|
||||||
this._emitResponse(DialogResponse.ALLOW);
|
|
||||||
else
|
|
||||||
this._dialog.open();
|
|
||||||
},
|
|
||||||
|
|
||||||
vfunc_hide: function() {
|
|
||||||
this._dialog.close();
|
|
||||||
}
|
|
||||||
});
|
|
@ -1,7 +1,5 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
|
|
||||||
const FocusCaretTracker = imports.ui.focusCaretTracker;
|
|
||||||
const Atspi = imports.gi.Atspi;
|
|
||||||
const Caribou = imports.gi.Caribou;
|
const Caribou = imports.gi.Caribou;
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const Gdk = imports.gi.Gdk;
|
const Gdk = imports.gi.Gdk;
|
||||||
@ -19,7 +17,7 @@ const Layout = imports.ui.layout;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
|
||||||
var KEYBOARD_REST_TIME = Layout.KEYBOARD_ANIMATION_TIME * 2 * 1000;
|
const KEYBOARD_REST_TIME = Layout.KEYBOARD_ANIMATION_TIME * 2 * 1000;
|
||||||
|
|
||||||
const KEYBOARD_SCHEMA = 'org.gnome.shell.keyboard';
|
const KEYBOARD_SCHEMA = 'org.gnome.shell.keyboard';
|
||||||
const KEYBOARD_TYPE = 'keyboard-type';
|
const KEYBOARD_TYPE = 'keyboard-type';
|
||||||
@ -27,7 +25,43 @@ const KEYBOARD_TYPE = 'keyboard-type';
|
|||||||
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
|
||||||
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
|
||||||
|
|
||||||
var Key = new Lang.Class({
|
const CARIBOU_BUS_NAME = 'org.gnome.Caribou.Daemon';
|
||||||
|
const CARIBOU_OBJECT_PATH = '/org/gnome/Caribou/Daemon';
|
||||||
|
|
||||||
|
const CaribouKeyboardIface = '<node> \
|
||||||
|
<interface name="org.gnome.Caribou.Keyboard"> \
|
||||||
|
<method name="Show"> \
|
||||||
|
<arg type="u" direction="in" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="Hide"> \
|
||||||
|
<arg type="u" direction="in" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="SetCursorLocation"> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
</method> \
|
||||||
|
<method name="SetEntryLocation"> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
<arg type="i" direction="in" /> \
|
||||||
|
</method> \
|
||||||
|
<property name="Name" access="read" type="s" /> \
|
||||||
|
</interface> \
|
||||||
|
</node>';
|
||||||
|
|
||||||
|
const CaribouDaemonIface = '<node> \
|
||||||
|
<interface name="org.gnome.Caribou.Daemon"> \
|
||||||
|
<method name="Run" /> \
|
||||||
|
<method name="Quit" /> \
|
||||||
|
</interface> \
|
||||||
|
</node>';
|
||||||
|
|
||||||
|
const CaribouDaemonProxy = Gio.DBusProxy.makeProxyWrapper(CaribouDaemonIface);
|
||||||
|
|
||||||
|
const Key = new Lang.Class({
|
||||||
Name: 'Key',
|
Name: 'Key',
|
||||||
|
|
||||||
_init : function(key) {
|
_init : function(key) {
|
||||||
@ -153,28 +187,30 @@ var Key = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(Key.prototype);
|
Signals.addSignalMethods(Key.prototype);
|
||||||
|
|
||||||
var Keyboard = new Lang.Class({
|
const Keyboard = new Lang.Class({
|
||||||
Name: 'Keyboard',
|
// HACK: we can't set Name, because it collides with Name dbus property
|
||||||
|
// Name: 'Keyboard',
|
||||||
|
|
||||||
_init: function () {
|
_init: function () {
|
||||||
|
this._impl = Gio.DBusExportedObject.wrapJSObject(CaribouKeyboardIface, this);
|
||||||
|
this._impl.export(Gio.DBus.session, '/org/gnome/Caribou/Keyboard');
|
||||||
|
|
||||||
this.actor = null;
|
this.actor = null;
|
||||||
this._focusInTray = false;
|
this._focusInTray = false;
|
||||||
this._focusInExtendedKeys = false;
|
this._focusInExtendedKeys = false;
|
||||||
|
|
||||||
this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
|
this._timestamp = global.display.get_current_time_roundtrip();
|
||||||
this._focusCaretTracker.connect('focus-changed', Lang.bind(this, this._onFocusChanged));
|
|
||||||
this._focusCaretTracker.connect('caret-moved', Lang.bind(this, this._onCaretMoved));
|
|
||||||
this._currentAccessible = null;
|
|
||||||
this._caretTrackingEnabled = false;
|
|
||||||
this._updateCaretPositionId = 0;
|
|
||||||
|
|
||||||
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
|
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
|
||||||
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
|
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
|
||||||
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
||||||
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._syncEnabled));
|
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync));
|
||||||
|
this._daemonProxy = null;
|
||||||
this._lastDeviceId = null;
|
this._lastDeviceId = null;
|
||||||
|
|
||||||
Caribou.DisplayAdapter.set_default(new LocalAdapter());
|
if (Meta.is_wayland_compositor() &&
|
||||||
|
Caribou.DisplayAdapter.set_default)
|
||||||
|
Caribou.DisplayAdapter.set_default(new ShellWaylandAdapter());
|
||||||
|
|
||||||
Meta.get_backend().connect('last-device-changed', Lang.bind(this,
|
Meta.get_backend().connect('last-device-changed', Lang.bind(this,
|
||||||
function (backend, deviceId) {
|
function (backend, deviceId) {
|
||||||
@ -183,7 +219,7 @@ var Keyboard = new Lang.Class({
|
|||||||
|
|
||||||
if (device.get_device_name().indexOf('XTEST') < 0) {
|
if (device.get_device_name().indexOf('XTEST') < 0) {
|
||||||
this._lastDeviceId = deviceId;
|
this._lastDeviceId = deviceId;
|
||||||
this._syncEnabled();
|
this._sync();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
this._sync();
|
this._sync();
|
||||||
@ -204,93 +240,6 @@ var Keyboard = new Lang.Class({
|
|||||||
this._redraw();
|
this._redraw();
|
||||||
},
|
},
|
||||||
|
|
||||||
_setCaretTrackerEnabled: function (enabled) {
|
|
||||||
if (this._caretTrackingEnabled == enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._caretTrackingEnabled = enabled;
|
|
||||||
|
|
||||||
if (enabled) {
|
|
||||||
this._focusCaretTracker.registerFocusListener();
|
|
||||||
this._focusCaretTracker.registerCaretListener();
|
|
||||||
} else {
|
|
||||||
this._focusCaretTracker.deregisterFocusListener();
|
|
||||||
this._focusCaretTracker.deregisterCaretListener();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_updateCaretPosition: function (accessible) {
|
|
||||||
if (this._updateCaretPositionId)
|
|
||||||
GLib.source_remove(this._updateCaretPositionId);
|
|
||||||
this._updateCaretPositionId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, Lang.bind(this, function() {
|
|
||||||
this._updateCaretPositionId = 0;
|
|
||||||
|
|
||||||
let currentWindow = global.screen.get_display().focus_window;
|
|
||||||
if (!currentWindow)
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
|
|
||||||
let windowRect = currentWindow.get_frame_rect();
|
|
||||||
let text = accessible.get_text_iface();
|
|
||||||
let component = accessible.get_component_iface();
|
|
||||||
|
|
||||||
try {
|
|
||||||
let caretOffset = text.get_caret_offset();
|
|
||||||
let caretRect = text.get_character_extents(caretOffset, Atspi.CoordType.WINDOW);
|
|
||||||
let focusRect = component.get_extents(Atspi.CoordType.WINDOW);
|
|
||||||
|
|
||||||
caretRect.x += windowRect.x;
|
|
||||||
caretRect.y += windowRect.y;
|
|
||||||
focusRect.x += windowRect.x;
|
|
||||||
focusRect.y += windowRect.y;
|
|
||||||
|
|
||||||
if (caretRect.width == 0 && caretRect.height == 0)
|
|
||||||
caretRect = focusRect;
|
|
||||||
|
|
||||||
this.setEntryLocation(focusRect.x, focusRect.y, focusRect.width, focusRect.height);
|
|
||||||
this.setCursorLocation(caretRect.x, caretRect.y, caretRect.width, caretRect.height);
|
|
||||||
} catch (e) {
|
|
||||||
log('Error updating caret position for OSK: ' + e.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
return GLib.SOURCE_REMOVE;
|
|
||||||
}));
|
|
||||||
|
|
||||||
GLib.Source.set_name_by_id(this._updateCaretPositionId, '[gnome-shell] this._updateCaretPosition');
|
|
||||||
},
|
|
||||||
|
|
||||||
_focusIsTextEntry: function (accessible) {
|
|
||||||
try {
|
|
||||||
let role = accessible.get_role();
|
|
||||||
let stateSet = accessible.get_state_set();
|
|
||||||
return stateSet.contains(Atspi.StateType.EDITABLE) || role == Atspi.Role.TERMINAL;
|
|
||||||
} catch (e) {
|
|
||||||
log('Error determining accessible role: ' + e.message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onFocusChanged: function (caretTracker, event) {
|
|
||||||
let accessible = event.source;
|
|
||||||
if (!this._focusIsTextEntry(accessible))
|
|
||||||
return;
|
|
||||||
|
|
||||||
let focused = event.detail1 != 0;
|
|
||||||
if (focused) {
|
|
||||||
this._currentAccessible = accessible;
|
|
||||||
this._updateCaretPosition(accessible);
|
|
||||||
this.show(Main.layoutManager.focusIndex);
|
|
||||||
} else if (this._currentAccessible == accessible) {
|
|
||||||
this._currentAccessible = null;
|
|
||||||
this.hide();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_onCaretMoved: function (caretTracker, event) {
|
|
||||||
let accessible = event.source;
|
|
||||||
if (this._currentAccessible == accessible)
|
|
||||||
this._updateCaretPosition(accessible);
|
|
||||||
},
|
|
||||||
|
|
||||||
_lastDeviceIsTouchscreen: function () {
|
_lastDeviceIsTouchscreen: function () {
|
||||||
if (!this._lastDeviceId)
|
if (!this._lastDeviceId)
|
||||||
return false;
|
return false;
|
||||||
@ -304,32 +253,22 @@ var Keyboard = new Lang.Class({
|
|||||||
return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE;
|
return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE;
|
||||||
},
|
},
|
||||||
|
|
||||||
_syncEnabled: function () {
|
_sync: function () {
|
||||||
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD) ||
|
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD) ||
|
||||||
this._lastDeviceIsTouchscreen();
|
this._lastDeviceIsTouchscreen();
|
||||||
if (!this._enableKeyboard && !this._keyboard)
|
if (!this._enableKeyboard && !this._keyboard)
|
||||||
return;
|
return;
|
||||||
|
if (this._enableKeyboard && this._keyboard &&
|
||||||
|
this._keyboard.keyboard_type == this._keyboardSettings.get_string(KEYBOARD_TYPE))
|
||||||
|
return;
|
||||||
|
|
||||||
this._setCaretTrackerEnabled(this._enableKeyboard);
|
if (this._keyboard)
|
||||||
|
|
||||||
if (this._enableKeyboard) {
|
|
||||||
if (!this._keyboard)
|
|
||||||
this._setupKeyboard();
|
|
||||||
else
|
|
||||||
Main.layoutManager.showKeyboard();
|
|
||||||
} else {
|
|
||||||
Main.layoutManager.hideKeyboard(true);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
_sync: function () {
|
|
||||||
if (this._keyboard &&
|
|
||||||
this._keyboard.keyboard_type != this._keyboardSettings.get_string(KEYBOARD_TYPE)) {
|
|
||||||
this._destroyKeyboard();
|
this._destroyKeyboard();
|
||||||
this._setupKeyboard();
|
|
||||||
}
|
|
||||||
|
|
||||||
this._syncEnabled();
|
if (this._enableKeyboard)
|
||||||
|
this._setupKeyboard();
|
||||||
|
else
|
||||||
|
Main.layoutManager.hideKeyboard(true);
|
||||||
},
|
},
|
||||||
|
|
||||||
_destroyKeyboard: function() {
|
_destroyKeyboard: function() {
|
||||||
@ -346,9 +285,35 @@ var Keyboard = new Lang.Class({
|
|||||||
this.actor = null;
|
this.actor = null;
|
||||||
|
|
||||||
this._destroySource();
|
this._destroySource();
|
||||||
|
if (this._daemonProxy) {
|
||||||
|
this._daemonProxy.QuitRemote(function (result, error) {
|
||||||
|
if (error) {
|
||||||
|
log(error.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this._daemonProxy = null;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_setupKeyboard: function() {
|
_setupKeyboard: function() {
|
||||||
|
if (!this._daemonProxy) {
|
||||||
|
this._daemonProxy = new CaribouDaemonProxy(Gio.DBus.session, CARIBOU_BUS_NAME,
|
||||||
|
CARIBOU_OBJECT_PATH,
|
||||||
|
Lang.bind(this, function(proxy, error) {
|
||||||
|
if (error) {
|
||||||
|
log(error.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
this._daemonProxy.RunRemote(function (result, error) {
|
||||||
|
if (error) {
|
||||||
|
log(error.message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true });
|
this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true });
|
||||||
Main.layoutManager.keyboardBox.add_actor(this.actor);
|
Main.layoutManager.keyboardBox.add_actor(this.actor);
|
||||||
Main.layoutManager.trackChrome(this.actor);
|
Main.layoutManager.trackChrome(this.actor);
|
||||||
@ -394,17 +359,17 @@ var Keyboard = new Lang.Class({
|
|||||||
|
|
||||||
let time = global.get_current_time();
|
let time = global.get_current_time();
|
||||||
if (!(focus instanceof Clutter.Text)) {
|
if (!(focus instanceof Clutter.Text)) {
|
||||||
this.hide();
|
this.Hide(time);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._showIdleId) {
|
if (!this._showIdleId) {
|
||||||
this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE,
|
this._showIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE,
|
||||||
Lang.bind(this, function() {
|
Lang.bind(this, function() {
|
||||||
this.show(Main.layoutManager.focusIndex);
|
this.Show(time);
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
}));
|
}));
|
||||||
GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show');
|
GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.Show');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -605,7 +570,7 @@ var Keyboard = new Lang.Class({
|
|||||||
shouldTakeEvent: function(event) {
|
shouldTakeEvent: function(event) {
|
||||||
let actor = event.get_source();
|
let actor = event.get_source();
|
||||||
return Main.layoutManager.keyboardBox.contains(actor) ||
|
return Main.layoutManager.keyboardBox.contains(actor) ||
|
||||||
!!actor._extended_keys || !!actor.extended_key;
|
actor._extended_keys || actor.extended_key;
|
||||||
},
|
},
|
||||||
|
|
||||||
_clearKeyboardRestTimer: function() {
|
_clearKeyboardRestTimer: function() {
|
||||||
@ -616,10 +581,6 @@ var Keyboard = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
show: function (monitor) {
|
show: function (monitor) {
|
||||||
if (!this._enableKeyboard)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._clearShowIdle();
|
|
||||||
this._keyboardRequested = true;
|
this._keyboardRequested = true;
|
||||||
|
|
||||||
if (this._keyboardVisible) {
|
if (this._keyboardVisible) {
|
||||||
@ -652,10 +613,6 @@ var Keyboard = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
hide: function () {
|
hide: function () {
|
||||||
if (!this._enableKeyboard)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._clearShowIdle();
|
|
||||||
this._keyboardRequested = false;
|
this._keyboardRequested = false;
|
||||||
|
|
||||||
if (!this._keyboardVisible)
|
if (!this._keyboardVisible)
|
||||||
@ -707,6 +664,20 @@ var Keyboard = new Lang.Class({
|
|||||||
this._moveTemporarily();
|
this._moveTemporarily();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// _compareTimestamp:
|
||||||
|
//
|
||||||
|
// Compare two timestamps taking into account
|
||||||
|
// CURRENT_TIME (0)
|
||||||
|
_compareTimestamp: function(one, two) {
|
||||||
|
if (one == two)
|
||||||
|
return 0;
|
||||||
|
if (one == Clutter.CURRENT_TIME)
|
||||||
|
return 1;
|
||||||
|
if (two == Clutter.CURRENT_TIME)
|
||||||
|
return -1;
|
||||||
|
return one - two;
|
||||||
|
},
|
||||||
|
|
||||||
_clearShowIdle: function() {
|
_clearShowIdle: function() {
|
||||||
if (!this._showIdleId)
|
if (!this._showIdleId)
|
||||||
return;
|
return;
|
||||||
@ -714,22 +685,55 @@ var Keyboard = new Lang.Class({
|
|||||||
this._showIdleId = 0;
|
this._showIdleId = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
setCursorLocation: function(x, y, w, h) {
|
// D-Bus methods
|
||||||
|
Show: function(timestamp) {
|
||||||
|
if (!this._enableKeyboard)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this._compareTimestamp(timestamp, this._timestamp) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._clearShowIdle();
|
||||||
|
|
||||||
|
if (timestamp != Clutter.CURRENT_TIME)
|
||||||
|
this._timestamp = timestamp;
|
||||||
|
this.show(Main.layoutManager.focusIndex);
|
||||||
|
},
|
||||||
|
|
||||||
|
Hide: function(timestamp) {
|
||||||
|
if (!this._enableKeyboard)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this._compareTimestamp(timestamp, this._timestamp) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._clearShowIdle();
|
||||||
|
|
||||||
|
if (timestamp != Clutter.CURRENT_TIME)
|
||||||
|
this._timestamp = timestamp;
|
||||||
|
this.hide();
|
||||||
|
},
|
||||||
|
|
||||||
|
SetCursorLocation: function(x, y, w, h) {
|
||||||
if (!this._enableKeyboard)
|
if (!this._enableKeyboard)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// this._setLocation(x, y);
|
// this._setLocation(x, y);
|
||||||
},
|
},
|
||||||
|
|
||||||
setEntryLocation: function(x, y, w, h) {
|
SetEntryLocation: function(x, y, w, h) {
|
||||||
if (!this._enableKeyboard)
|
if (!this._enableKeyboard)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// this._setLocation(x, y);
|
// this._setLocation(x, y);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get Name() {
|
||||||
|
return 'gnome-shell';
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var KeyboardSource = new Lang.Class({
|
const KeyboardSource = new Lang.Class({
|
||||||
Name: 'KeyboardSource',
|
Name: 'KeyboardSource',
|
||||||
Extends: MessageTray.Source,
|
Extends: MessageTray.Source,
|
||||||
|
|
||||||
@ -750,8 +754,8 @@ var KeyboardSource = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var LocalAdapter = new Lang.Class({
|
const ShellWaylandAdapter = new Lang.Class({
|
||||||
Name: 'LocalAdapter',
|
Name: 'ShellWaylandAdapter',
|
||||||
Extends: Caribou.XAdapter,
|
Extends: Caribou.XAdapter,
|
||||||
|
|
||||||
_init: function () {
|
_init: function () {
|
||||||
|
@ -18,12 +18,12 @@ const Main = imports.ui.main;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var STARTUP_ANIMATION_TIME = 0.5;
|
const STARTUP_ANIMATION_TIME = 0.5;
|
||||||
var KEYBOARD_ANIMATION_TIME = 0.15;
|
const KEYBOARD_ANIMATION_TIME = 0.15;
|
||||||
var BACKGROUND_FADE_ANIMATION_TIME = 1.0;
|
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
|
||||||
|
|
||||||
var HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
|
const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
|
||||||
var HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
|
const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
|
||||||
|
|
||||||
function isPopupMetaWindow(actor) {
|
function isPopupMetaWindow(actor) {
|
||||||
switch(actor.meta_window.get_window_type()) {
|
switch(actor.meta_window.get_window_type()) {
|
||||||
@ -36,7 +36,7 @@ function isPopupMetaWindow(actor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var MonitorConstraint = new Lang.Class({
|
const MonitorConstraint = new Lang.Class({
|
||||||
Name: 'MonitorConstraint',
|
Name: 'MonitorConstraint',
|
||||||
Extends: Clutter.Constraint,
|
Extends: Clutter.Constraint,
|
||||||
Properties: {'primary': GObject.ParamSpec.boolean('primary',
|
Properties: {'primary': GObject.ParamSpec.boolean('primary',
|
||||||
@ -129,9 +129,6 @@ var MonitorConstraint = new Lang.Class({
|
|||||||
if (!this._primary && this._index < 0)
|
if (!this._primary && this._index < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!Main.layoutManager.primaryMonitor)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let index;
|
let index;
|
||||||
if (this._primary)
|
if (this._primary)
|
||||||
index = Main.layoutManager.primaryIndex;
|
index = Main.layoutManager.primaryIndex;
|
||||||
@ -150,7 +147,7 @@ var MonitorConstraint = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var Monitor = new Lang.Class({
|
const Monitor = new Lang.Class({
|
||||||
Name: 'Monitor',
|
Name: 'Monitor',
|
||||||
|
|
||||||
_init: function(index, geometry) {
|
_init: function(index, geometry) {
|
||||||
@ -172,7 +169,7 @@ const defaultParams = {
|
|||||||
affectsInputRegion: true
|
affectsInputRegion: true
|
||||||
};
|
};
|
||||||
|
|
||||||
var LayoutManager = new Lang.Class({
|
const LayoutManager = new Lang.Class({
|
||||||
Name: 'LayoutManager',
|
Name: 'LayoutManager',
|
||||||
|
|
||||||
_init: function () {
|
_init: function () {
|
||||||
@ -192,7 +189,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
this._topActors = [];
|
this._topActors = [];
|
||||||
this._isPopupWindowVisible = false;
|
this._isPopupWindowVisible = false;
|
||||||
this._startingUp = true;
|
this._startingUp = true;
|
||||||
this._pendingLoadBackground = false;
|
|
||||||
|
|
||||||
// We don't want to paint the stage background color because either
|
// We don't want to paint the stage background color because either
|
||||||
// the SystemBackground we create or the MetaBackgroundActor inside
|
// the SystemBackground we create or the MetaBackgroundActor inside
|
||||||
@ -327,9 +323,7 @@ var LayoutManager = new Lang.Class({
|
|||||||
for (let i = 0; i < nMonitors; i++)
|
for (let i = 0; i < nMonitors; i++)
|
||||||
this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i)));
|
this.monitors.push(new Monitor(i, screen.get_monitor_geometry(i)));
|
||||||
|
|
||||||
if (nMonitors == 0) {
|
if (nMonitors == 1) {
|
||||||
this.primaryIndex = this.bottomIndex = -1;
|
|
||||||
} else if (nMonitors == 1) {
|
|
||||||
this.primaryIndex = this.bottomIndex = 0;
|
this.primaryIndex = this.bottomIndex = 0;
|
||||||
} else {
|
} else {
|
||||||
// If there are monitors below the primary, then we need
|
// If there are monitors below the primary, then we need
|
||||||
@ -343,18 +337,8 @@ var LayoutManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.primaryIndex != -1) {
|
this.primaryMonitor = this.monitors[this.primaryIndex];
|
||||||
this.primaryMonitor = this.monitors[this.primaryIndex];
|
this.bottomMonitor = this.monitors[this.bottomIndex];
|
||||||
this.bottomMonitor = this.monitors[this.bottomIndex];
|
|
||||||
|
|
||||||
if (this._pendingLoadBackground) {
|
|
||||||
this._loadBackground();
|
|
||||||
this._pendingLoadBackground = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.primaryMonitor = null;
|
|
||||||
this.bottomMonitor = null;
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_updateHotCorners: function() {
|
_updateHotCorners: function() {
|
||||||
@ -474,9 +458,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
this.screenShieldGroup.set_position(0, 0);
|
this.screenShieldGroup.set_position(0, 0);
|
||||||
this.screenShieldGroup.set_size(global.screen_width, global.screen_height);
|
this.screenShieldGroup.set_size(global.screen_width, global.screen_height);
|
||||||
|
|
||||||
if (!this.primaryMonitor)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
|
this.panelBox.set_position(this.primaryMonitor.x, this.primaryMonitor.y);
|
||||||
this.panelBox.set_size(this.primaryMonitor.width, -1);
|
this.panelBox.set_size(this.primaryMonitor.width, -1);
|
||||||
|
|
||||||
@ -499,9 +480,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
this._rightPanelBarrier = null;
|
this._rightPanelBarrier = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.primaryMonitor)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (this.panelBox.height) {
|
if (this.panelBox.height) {
|
||||||
let primary = this.primaryMonitor;
|
let primary = this.primaryMonitor;
|
||||||
|
|
||||||
@ -571,10 +549,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_loadBackground: function() {
|
_loadBackground: function() {
|
||||||
if (!this.primaryMonitor) {
|
|
||||||
this._pendingLoadBackground = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._systemBackground = new Background.SystemBackground();
|
this._systemBackground = new Background.SystemBackground();
|
||||||
this._systemBackground.actor.hide();
|
this._systemBackground.actor.hide();
|
||||||
|
|
||||||
@ -710,10 +684,8 @@ var LayoutManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
showKeyboard: function () {
|
showKeyboard: function () {
|
||||||
this.keyboardBox.show();
|
|
||||||
Tweener.addTween(this.keyboardBox,
|
Tweener.addTween(this.keyboardBox,
|
||||||
{ anchor_y: this.keyboardBox.height,
|
{ anchor_y: this.keyboardBox.height,
|
||||||
opacity: 255,
|
|
||||||
time: KEYBOARD_ANIMATION_TIME,
|
time: KEYBOARD_ANIMATION_TIME,
|
||||||
transition: 'easeOutQuad',
|
transition: 'easeOutQuad',
|
||||||
onComplete: this._showKeyboardComplete,
|
onComplete: this._showKeyboardComplete,
|
||||||
@ -739,7 +711,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
}
|
}
|
||||||
Tweener.addTween(this.keyboardBox,
|
Tweener.addTween(this.keyboardBox,
|
||||||
{ anchor_y: 0,
|
{ anchor_y: 0,
|
||||||
opacity: 0,
|
|
||||||
time: immediate ? 0 : KEYBOARD_ANIMATION_TIME,
|
time: immediate ? 0 : KEYBOARD_ANIMATION_TIME,
|
||||||
transition: 'easeInQuad',
|
transition: 'easeInQuad',
|
||||||
onComplete: this._hideKeyboardComplete,
|
onComplete: this._hideKeyboardComplete,
|
||||||
@ -750,7 +721,6 @@ var LayoutManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_hideKeyboardComplete: function() {
|
_hideKeyboardComplete: function() {
|
||||||
this.keyboardBox.hide();
|
|
||||||
this._updateRegions();
|
this._updateRegions();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -799,7 +769,8 @@ var LayoutManager = new Lang.Class({
|
|||||||
// @actor: a descendant of the chrome to begin tracking
|
// @actor: a descendant of the chrome to begin tracking
|
||||||
// @params: parameters describing how to track @actor
|
// @params: parameters describing how to track @actor
|
||||||
//
|
//
|
||||||
// Tells the chrome to track @actor. This can be used to extend the
|
// Tells the chrome to track @actor, which must be a descendant
|
||||||
|
// of an actor added via addChrome(). This can be used to extend the
|
||||||
// struts or input region to cover specific children.
|
// struts or input region to cover specific children.
|
||||||
//
|
//
|
||||||
// @params can have any of the same values as in addChrome(),
|
// @params can have any of the same values as in addChrome(),
|
||||||
@ -812,9 +783,10 @@ var LayoutManager = new Lang.Class({
|
|||||||
ancestor = ancestor.get_parent();
|
ancestor = ancestor.get_parent();
|
||||||
index = this._findActor(ancestor);
|
index = this._findActor(ancestor);
|
||||||
}
|
}
|
||||||
|
if (!ancestor)
|
||||||
|
throw new Error('actor is not a descendent of a chrome actor');
|
||||||
|
|
||||||
let ancestorData = ancestor ? this._trackedActors[index]
|
let ancestorData = this._trackedActors[index];
|
||||||
: defaultParams;
|
|
||||||
if (!params)
|
if (!params)
|
||||||
params = {};
|
params = {};
|
||||||
// We can't use Params.parse here because we want to drop
|
// We can't use Params.parse here because we want to drop
|
||||||
@ -924,10 +896,7 @@ var LayoutManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
findMonitorForActor: function(actor) {
|
findMonitorForActor: function(actor) {
|
||||||
let index = this.findIndexForActor(actor);
|
return this.monitors[this.findIndexForActor(actor)];
|
||||||
if (index >= 0 && index < this.monitors.length)
|
|
||||||
return this.monitors[index];
|
|
||||||
return null;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_queueUpdateRegions: function() {
|
_queueUpdateRegions: function() {
|
||||||
@ -997,11 +966,7 @@ var LayoutManager = new Lang.Class({
|
|||||||
if (actorData.affectsInputRegion && wantsInputRegion && actorData.actor.get_paint_visibility())
|
if (actorData.affectsInputRegion && wantsInputRegion && actorData.actor.get_paint_visibility())
|
||||||
rects.push(new Meta.Rectangle({ x: x, y: y, width: w, height: h }));
|
rects.push(new Meta.Rectangle({ x: x, y: y, width: w, height: h }));
|
||||||
|
|
||||||
let monitor = null;
|
if (actorData.affectsStruts) {
|
||||||
if (actorData.affectsStruts)
|
|
||||||
monitor = this.findMonitorForActor(actorData.actor);
|
|
||||||
|
|
||||||
if (monitor) {
|
|
||||||
// Limit struts to the size of the screen
|
// Limit struts to the size of the screen
|
||||||
let x1 = Math.max(x, 0);
|
let x1 = Math.max(x, 0);
|
||||||
let x2 = Math.min(x + w, global.screen_width);
|
let x2 = Math.min(x + w, global.screen_width);
|
||||||
@ -1018,6 +983,7 @@ var LayoutManager = new Lang.Class({
|
|||||||
// spans the width/height across the middle of the
|
// spans the width/height across the middle of the
|
||||||
// screen, then we don't create a strut for it at all.
|
// screen, then we don't create a strut for it at all.
|
||||||
|
|
||||||
|
let monitor = this.findMonitorForActor(actorData.actor);
|
||||||
let side;
|
let side;
|
||||||
if (x1 <= monitor.x && x2 >= monitor.x + monitor.width) {
|
if (x1 <= monitor.x && x2 >= monitor.x + monitor.width) {
|
||||||
if (y1 <= monitor.y)
|
if (y1 <= monitor.y)
|
||||||
@ -1075,7 +1041,7 @@ Signals.addSignalMethods(LayoutManager.prototype);
|
|||||||
//
|
//
|
||||||
// This class manages a "hot corner" that can toggle switching to
|
// This class manages a "hot corner" that can toggle switching to
|
||||||
// overview.
|
// overview.
|
||||||
var HotCorner = new Lang.Class({
|
const HotCorner = new Lang.Class({
|
||||||
Name: 'HotCorner',
|
Name: 'HotCorner',
|
||||||
|
|
||||||
_init : function(layoutManager, monitor, x, y) {
|
_init : function(layoutManager, monitor, x, y) {
|
||||||
@ -1269,7 +1235,7 @@ var HotCorner = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var PressureBarrier = new Lang.Class({
|
const PressureBarrier = new Lang.Class({
|
||||||
Name: 'PressureBarrier',
|
Name: 'PressureBarrier',
|
||||||
|
|
||||||
_init: function(threshold, timeout, actionMode) {
|
_init: function(threshold, timeout, actionMode) {
|
||||||
|
272
js/ui/legacyTray.js
Normal file
272
js/ui/legacyTray.js
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
|
const GObject = imports.gi.GObject;
|
||||||
|
const Meta = imports.gi.Meta;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
|
|
||||||
|
const CtrlAltTab = imports.ui.ctrlAltTab;
|
||||||
|
const Lang = imports.lang;
|
||||||
|
const Layout = imports.ui.layout;
|
||||||
|
const Main = imports.ui.main;
|
||||||
|
const Overview = imports.ui.overview;
|
||||||
|
const OverviewControls = imports.ui.overviewControls;
|
||||||
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
|
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
|
||||||
|
'bluetooth-applet': 'bluetooth',
|
||||||
|
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
|
||||||
|
// when moved to control center
|
||||||
|
'gnome-sound-applet': 'volume',
|
||||||
|
'nm-applet': 'network',
|
||||||
|
'gnome-power-manager': 'battery',
|
||||||
|
'keyboard': 'keyboard',
|
||||||
|
'a11y-keyboard': 'a11y',
|
||||||
|
'kbd-scrolllock': 'keyboard',
|
||||||
|
'kbd-numlock': 'keyboard',
|
||||||
|
'kbd-capslock': 'keyboard',
|
||||||
|
'ibus-ui-gtk': 'keyboard'
|
||||||
|
};
|
||||||
|
|
||||||
|
// Offset of the original position from the bottom-right corner
|
||||||
|
const CONCEALED_WIDTH = 3;
|
||||||
|
const REVEAL_ANIMATION_TIME = 0.2;
|
||||||
|
const TEMP_REVEAL_TIME = 2;
|
||||||
|
|
||||||
|
const BARRIER_THRESHOLD = 70;
|
||||||
|
const BARRIER_TIMEOUT = 1000;
|
||||||
|
|
||||||
|
const LegacyTray = new Lang.Class({
|
||||||
|
Name: 'LegacyTray',
|
||||||
|
|
||||||
|
_init: function() {
|
||||||
|
this.actor = new St.Widget({ clip_to_allocation: true,
|
||||||
|
layout_manager: new Clutter.BinLayout() });
|
||||||
|
let constraint = new Layout.MonitorConstraint({ primary: true,
|
||||||
|
work_area: true });
|
||||||
|
this.actor.add_constraint(constraint);
|
||||||
|
|
||||||
|
this._slideLayout = new OverviewControls.SlideLayout();
|
||||||
|
this._slideLayout.translationX = 0;
|
||||||
|
this._slideLayout.slideDirection = OverviewControls.SlideDirection.LEFT;
|
||||||
|
|
||||||
|
this._slider = new St.Widget({ x_expand: true, y_expand: true,
|
||||||
|
x_align: Clutter.ActorAlign.START,
|
||||||
|
y_align: Clutter.ActorAlign.END,
|
||||||
|
layout_manager: this._slideLayout });
|
||||||
|
this.actor.add_actor(this._slider);
|
||||||
|
this._slider.connect('notify::allocation', Lang.bind(this, this._syncBarrier));
|
||||||
|
|
||||||
|
this._box = new St.BoxLayout({ style_class: 'legacy-tray' });
|
||||||
|
this._slider.add_actor(this._box);
|
||||||
|
|
||||||
|
this._concealHandle = new St.Button({ style_class: 'legacy-tray-handle',
|
||||||
|
/* translators: 'Hide' is a verb */
|
||||||
|
accessible_name: _("Hide tray"),
|
||||||
|
can_focus: true });
|
||||||
|
this._concealHandle.child = new St.Icon({ icon_name: 'go-previous-symbolic' });
|
||||||
|
this._box.add_child(this._concealHandle);
|
||||||
|
|
||||||
|
this._iconBox = new St.BoxLayout({ style_class: 'legacy-tray-icon-box' });
|
||||||
|
this._box.add_actor(this._iconBox);
|
||||||
|
|
||||||
|
this._revealHandle = new St.Button({ style_class: 'legacy-tray-handle' });
|
||||||
|
this._revealHandle.child = new St.Icon({ icon_name: 'go-next-symbolic' });
|
||||||
|
this._box.add_child(this._revealHandle);
|
||||||
|
|
||||||
|
this._revealHandle.bind_property('visible',
|
||||||
|
this._concealHandle, 'visible',
|
||||||
|
GObject.BindingFlags.BIDIRECTIONAL |
|
||||||
|
GObject.BindingFlags.INVERT_BOOLEAN);
|
||||||
|
this._revealHandle.connect('notify::visible',
|
||||||
|
Lang.bind(this, this._sync));
|
||||||
|
this._revealHandle.connect('notify::hover',
|
||||||
|
Lang.bind(this ,this._sync));
|
||||||
|
this._revealHandle.connect('clicked', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._concealHandle.show();
|
||||||
|
}));
|
||||||
|
this._concealHandle.connect('clicked', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._revealHandle.show();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._horizontalBarrier = null;
|
||||||
|
this._pressureBarrier = new Layout.PressureBarrier(BARRIER_THRESHOLD,
|
||||||
|
BARRIER_TIMEOUT,
|
||||||
|
Shell.ActionMode.NORMAL);
|
||||||
|
this._pressureBarrier.connect('trigger', Lang.bind(this, function() {
|
||||||
|
this._concealHandle.show();
|
||||||
|
}));
|
||||||
|
|
||||||
|
Main.layoutManager.addChrome(this.actor, { affectsInputRegion: false });
|
||||||
|
Main.layoutManager.trackChrome(this._slider, { affectsInputRegion: true });
|
||||||
|
Main.uiGroup.set_child_below_sibling(this.actor, Main.layoutManager.modalDialogGroup);
|
||||||
|
Main.ctrlAltTabManager.addGroup(this.actor,
|
||||||
|
_("Status Icons"), 'focus-legacy-systray-symbolic',
|
||||||
|
{ sortGroup: CtrlAltTab.SortGroup.BOTTOM });
|
||||||
|
|
||||||
|
this._trayManager = new Shell.TrayManager();
|
||||||
|
this._trayIconAddedId = this._trayManager.connect('tray-icon-added', Lang.bind(this, this._onTrayIconAdded));
|
||||||
|
this._trayIconRemovedId = this._trayManager.connect('tray-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
|
||||||
|
this._trayManager.manage_screen(global.screen, this.actor);
|
||||||
|
|
||||||
|
Main.overview.connect('showing', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
Tweener.removeTweens(this._slider);
|
||||||
|
Tweener.addTween(this._slider, { opacity: 0,
|
||||||
|
time: Overview.ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
}));
|
||||||
|
Main.overview.connect('shown', Lang.bind(this, this._sync));
|
||||||
|
Main.overview.connect('hiding', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._sync();
|
||||||
|
Tweener.removeTweens(this._slider);
|
||||||
|
Tweener.addTween(this._slider, { opacity: 255,
|
||||||
|
time: Overview.ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
}));
|
||||||
|
|
||||||
|
Main.layoutManager.connect('monitors-changed',
|
||||||
|
Lang.bind(this, this._sync));
|
||||||
|
global.screen.connect('in-fullscreen-changed',
|
||||||
|
Lang.bind(this, this._sync));
|
||||||
|
Main.sessionMode.connect('updated', Lang.bind(this, this._sync));
|
||||||
|
|
||||||
|
this._sync();
|
||||||
|
},
|
||||||
|
|
||||||
|
_onTrayIconAdded: function(tm, icon) {
|
||||||
|
let wmClass = icon.wm_class ? icon.wm_class.toLowerCase() : '';
|
||||||
|
if (STANDARD_TRAY_ICON_IMPLEMENTATIONS[wmClass] !== undefined)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let button = new St.Button({ child: icon,
|
||||||
|
style_class: 'legacy-tray-icon',
|
||||||
|
button_mask: St.ButtonMask.ONE |
|
||||||
|
St.ButtonMask.TWO |
|
||||||
|
St.ButtonMask.THREE,
|
||||||
|
can_focus: true,
|
||||||
|
x_fill: true, y_fill: true });
|
||||||
|
|
||||||
|
let app = Shell.WindowTracker.get_default().get_app_from_pid(icon.pid);
|
||||||
|
if (!app)
|
||||||
|
app = Shell.AppSystem.get_default().lookup_startup_wmclass(wmClass);
|
||||||
|
if (!app)
|
||||||
|
app = Shell.AppSystem.get_default().lookup_desktop_wmclass(wmClass);
|
||||||
|
if (app)
|
||||||
|
button.accessible_name = app.get_name();
|
||||||
|
else
|
||||||
|
button.accessible_name = icon.title;
|
||||||
|
|
||||||
|
button.connect('clicked',
|
||||||
|
function() {
|
||||||
|
icon.click(Clutter.get_current_event());
|
||||||
|
});
|
||||||
|
button.connect('key-press-event',
|
||||||
|
function() {
|
||||||
|
icon.click(Clutter.get_current_event());
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
});
|
||||||
|
button.connect('key-focus-in', Lang.bind(this,
|
||||||
|
function() {
|
||||||
|
this._concealHandle.show();
|
||||||
|
}));
|
||||||
|
|
||||||
|
this._iconBox.add_actor(button);
|
||||||
|
|
||||||
|
if (!this._concealHandle.visible) {
|
||||||
|
this._concealHandle.show();
|
||||||
|
GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, TEMP_REVEAL_TIME,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._concealHandle.hide();
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onTrayIconRemoved: function(tm, icon) {
|
||||||
|
if (!this.actor.contains(icon))
|
||||||
|
return;
|
||||||
|
|
||||||
|
icon.get_parent().destroy();
|
||||||
|
this._sync();
|
||||||
|
},
|
||||||
|
|
||||||
|
_syncBarrier: function() {
|
||||||
|
let rtl = (this._slider.get_text_direction() == Clutter.TextDirection.RTL);
|
||||||
|
let [x, y] = this._slider.get_transformed_position();
|
||||||
|
let [w, h] = this._slider.get_transformed_size();
|
||||||
|
|
||||||
|
let x1 = Math.round(x);
|
||||||
|
if (rtl)
|
||||||
|
x1 += Math.round(w);
|
||||||
|
|
||||||
|
let x2 = x1;
|
||||||
|
let y1 = Math.round(y);
|
||||||
|
let y2 = y1 + Math.round(h);
|
||||||
|
|
||||||
|
if (this._horizontalBarrier &&
|
||||||
|
this._horizontalBarrier.x1 == x1 &&
|
||||||
|
this._horizontalBarrier.y1 == y1 &&
|
||||||
|
this._horizontalBarrier.x2 == x2 &&
|
||||||
|
this._horizontalBarrier.y2 == y2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._unsetBarrier();
|
||||||
|
|
||||||
|
let directions = (rtl ? Meta.BarrierDirection.NEGATIVE_X : Meta.BarrierDirection.POSITIVE_X);
|
||||||
|
this._horizontalBarrier = new Meta.Barrier({ display: global.display,
|
||||||
|
x1: x1, x2: x2,
|
||||||
|
y1: y1, y2: y2,
|
||||||
|
directions: directions });
|
||||||
|
this._pressureBarrier.addBarrier(this._horizontalBarrier);
|
||||||
|
},
|
||||||
|
|
||||||
|
_unsetBarrier: function() {
|
||||||
|
if (this._horizontalBarrier == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._pressureBarrier.removeBarrier(this._horizontalBarrier);
|
||||||
|
this._horizontalBarrier.destroy();
|
||||||
|
this._horizontalBarrier = null;
|
||||||
|
},
|
||||||
|
|
||||||
|
_sync: function() {
|
||||||
|
// FIXME: we no longer treat tray icons as notifications
|
||||||
|
let allowed = Main.sessionMode.hasNotifications;
|
||||||
|
let hasIcons = this._iconBox.get_n_children() > 0;
|
||||||
|
let inOverview = Main.overview.visible && !Main.overview.animationInProgress;
|
||||||
|
let inFullscreen = Main.layoutManager.primaryMonitor.inFullscreen;
|
||||||
|
this.actor.visible = allowed && hasIcons && !inOverview && !inFullscreen;
|
||||||
|
|
||||||
|
if (!hasIcons)
|
||||||
|
this._concealHandle.hide();
|
||||||
|
|
||||||
|
let targetSlide;
|
||||||
|
if (this._concealHandle.visible) {
|
||||||
|
targetSlide = 1.0;
|
||||||
|
} else if (!hasIcons) {
|
||||||
|
targetSlide = 0.0;
|
||||||
|
} else {
|
||||||
|
let [, boxWidth] = this._box.get_preferred_width(-1);
|
||||||
|
let [, handleWidth] = this._revealHandle.get_preferred_width(-1);
|
||||||
|
|
||||||
|
if (this._revealHandle.hover)
|
||||||
|
targetSlide = handleWidth / boxWidth;
|
||||||
|
else
|
||||||
|
targetSlide = CONCEALED_WIDTH / boxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.actor.visible) {
|
||||||
|
Tweener.addTween(this._slideLayout,
|
||||||
|
{ slideX: targetSlide,
|
||||||
|
time: REVEAL_ANIMATION_TIME,
|
||||||
|
transition: 'easeOutQuad' });
|
||||||
|
} else {
|
||||||
|
this._slideLayout.slideX = targetSlide;
|
||||||
|
this._unsetBarrier();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
@ -10,9 +10,9 @@ const Shell = imports.gi.Shell;
|
|||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
|
|
||||||
var DEFAULT_FADE_FACTOR = 0.4;
|
const DEFAULT_FADE_FACTOR = 0.4;
|
||||||
var VIGNETTE_BRIGHTNESS = 0.8;
|
const VIGNETTE_BRIGHTNESS = 0.8;
|
||||||
var VIGNETTE_SHARPNESS = 0.7;
|
const VIGNETTE_SHARPNESS = 0.7;
|
||||||
|
|
||||||
const VIGNETTE_DECLARATIONS = '\
|
const VIGNETTE_DECLARATIONS = '\
|
||||||
uniform float brightness;\n\
|
uniform float brightness;\n\
|
||||||
@ -27,7 +27,7 @@ t = clamp(t, 0.0, 1.0);\n\
|
|||||||
float pixel_brightness = mix(1.0, 1.0 - vignette_sharpness, t);\n\
|
float pixel_brightness = mix(1.0, 1.0 - vignette_sharpness, t);\n\
|
||||||
cogl_color_out.a = cogl_color_out.a * (1 - pixel_brightness * brightness);';
|
cogl_color_out.a = cogl_color_out.a * (1 - pixel_brightness * brightness);';
|
||||||
|
|
||||||
var RadialShaderQuad = new Lang.Class({
|
const RadialShaderQuad = new Lang.Class({
|
||||||
Name: 'RadialShaderQuad',
|
Name: 'RadialShaderQuad',
|
||||||
Extends: Shell.GLSLQuad,
|
Extends: Shell.GLSLQuad,
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ var RadialShaderQuad = new Lang.Class({
|
|||||||
* @container and will track any changes in its size. You can override
|
* @container and will track any changes in its size. You can override
|
||||||
* this by passing an explicit width and height in @params.
|
* this by passing an explicit width and height in @params.
|
||||||
*/
|
*/
|
||||||
var Lightbox = new Lang.Class({
|
const Lightbox = new Lang.Class({
|
||||||
Name: 'Lightbox',
|
Name: 'Lightbox',
|
||||||
|
|
||||||
_init : function(container, params) {
|
_init : function(container, params) {
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user