Compare commits

..

13 Commits

Author SHA1 Message Date
raresvis
de814752d6 search.js: Vertically center the provider icon 2017-07-05 01:00:49 +03:00
raresvis
c36f006b88 update sass 2017-07-05 00:56:41 +03:00
raresvis
bf884ae9ea search.js: Apply the bold style in real time 2017-07-05 00:32:16 +03:00
raresvis
7bbff9d0c0 search.js: Propagate searchResultsView down the hierarchy 2017-07-05 00:32:09 +03:00
Florian Müllner
04ad2b24d8 util: Wrap g_regex_escape_string() 2017-07-04 22:34:18 +03:00
raresvis
4ffbec5b75 search.js: Increase maximum number of visible list search results 2017-07-04 22:34:18 +03:00
raresvis
d35f2d375b gnome-shell.css: Make search result description semitransparent 2017-07-04 22:34:18 +03:00
raresvis
235d4b244d gnome-shell.css: Use standard font size for the search-result-title class 2017-07-04 22:34:18 +03:00
raresvis
9a007058ae search.js: Replace the gradient separator with a simple line 2017-07-04 22:34:18 +03:00
raresvis
985e53a04e search.js: Tweak the sizes of search results icons
Just a small tweak of icon sizes. This patch could be easily
included in any of the two bigger patches.
2017-07-04 22:34:18 +03:00
raresvis
aed6d466cb search.js: Refactor providerIcon into providerInfo
In order to match the current mockups, the providerIcon
class needed to include both the name of the provider
and the label that informs the user about how many more
search results are available for that specific provider.
The latter replaces the plus sign icon that has been
used so far.

https://bugzilla.gnome.org/show_bug.cgi?id=749957
2017-07-04 22:34:14 +03:00
raresvis
c62e3614d5 search.js: Make the results take more horizontal space
In order to make gnome-shell search functionality fit on
smaller screens, like those of devices, search results
need to take advantage of more horizontal space so that
any extra space can be used efficiently.

In order to do so, change the layout of the ListSearchResult
class from a vertical one, to a horizontal one and also
decrease the padding of the list-search-result-content css
class.

https://bugzilla.gnome.org/show_bug.cgi?id=749957
2017-07-01 02:53:25 +03:00
raresvis
8dae0b5767 update sass 2017-07-01 02:24:57 +03:00
173 changed files with 3241 additions and 5152 deletions

6
.gitmodules vendored
View File

@@ -1,6 +1,6 @@
[submodule "src/gvc"]
path = src/gvc
url = git://git.gnome.org/libgnome-volume-control
[submodule "data/theme/gnome-shell-sass"]
path = data/theme/gnome-shell-sass
url = git://git.gnome.org/gnome-shell-sass
[submodule "subprojects/gvc"]
path = subprojects/gvc
url = git://git.gnome.org/libgnome-volume-control

12
HACKING
View File

@@ -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
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',
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
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',
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
the actor itself:
var MyClass = new Lang.Class({
const MyClass = new Lang.Class({
Name: 'MyClass',
_init: function() {
@@ -264,7 +264,7 @@ prototype:
const Lang = imports.lang;
const FnorbLib = imports.fborbLib;
var MyClass = new Lang.Class({
const MyClass = new Lang.Class({
_init: function() {
let fnorb = new FnorbLib.Fnorb();
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
property.
var ANIMATION_TIME = 2000;
const ANIMATION_TIME = 2000;
var MyClass = new Lang.Class({
const MyClass = new Lang.Class({
Name: 'MyClass',
_init: function() {

View File

@@ -1,7 +1,7 @@
# Point to our macro directory and pick up user flags from the environment
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = data js subprojects/gvc src tests po docs
SUBDIRS = data js src tests po docs
if BUILD_BROWSER_PLUGIN
SUBDIRS += browser-plugin

27
NEWS
View File

@@ -1,30 +1,3 @@
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]

View File

@@ -16,7 +16,7 @@ cd "${srcdir}"
}
# Fetch submodules if needed
if test ! -f subprojects/gvc/Makefile.am || test ! -f data/theme/gnome-shell-sass/COPYING;
if test ! -f src/gvc/Makefile.am || test ! -f data/theme/gnome-shell-sass/COPYING;
then
echo "+ Setting up submodules"
git submodule init

View File

@@ -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
)

View File

@@ -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

View File

@@ -1,5 +1,5 @@
AC_PREREQ(2.63)
AC_INIT([gnome-shell],[3.25.4],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AC_INIT([gnome-shell],[3.25.3],[https://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell],[gnome-shell])
AX_IS_RELEASE([git-directory])
AC_CONFIG_HEADERS([config.h])
@@ -254,12 +254,12 @@ AC_CONFIG_FILES([
docs/Makefile
docs/reference/Makefile
docs/reference/shell/Makefile
docs/reference/shell/version.xml
docs/reference/shell/shell-docs.sgml
docs/reference/st/Makefile
docs/reference/st/version.xml
docs/reference/st/st-docs.sgml
js/Makefile
src/Makefile
subprojects/gvc/Makefile
src/gvc/Makefile
browser-plugin/Makefile
tests/Makefile
po/Makefile.in

View File

@@ -18,6 +18,7 @@
<file>gnome-shell.css</file>
<file>gnome-shell-high-contrast.css</file>
<file>logged-in-indicator.svg</file>
<file>more-results.svg</file>
<file>no-events.svg</file>
<file>no-notifications.svg</file>
<file>noise-texture.png</file>

View File

@@ -1,88 +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())
configure_file(
input: 'org.gnome.shell.gschema.xml.in',
output: 'org.gnome.shell.gschema.xml',
configuration: schemaconf,
install_dir: schemadir
)
install_data('gnome-shell-overrides.convert', install_dir: convertdir)

View File

@@ -221,30 +221,11 @@ StScrollBar {
color: #d6d6d1;
padding-bottom: .4em; }
.mount-dialog-subject,
.show-processes-dialog-subject,
.mount-question-dialog-subject,
.end-session-dialog-subject {
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 {
spacing: 42px;
@@ -313,62 +294,76 @@ StScrollBar {
.shell-mount-operation-icon {
icon-size: 48px; }
.mount-dialog {
.show-processes-dialog,
.mount-question-dialog {
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: 34em; }
.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;
padding-top: 24px;
padding-left: 49px;
padding-right: 32px; }
.mount-dialog-app-list:rtl {
.show-processes-dialog-app-list:rtl {
padding-right: 49px;
padding-left: 32px; }
.mount-dialog-app-list-item {
.show-processes-dialog-app-list-item {
color: #e6e6e6; }
.mount-dialog-app-list-item:hover {
.show-processes-dialog-app-list-item:hover {
color: #fff; }
.mount-dialog-app-list-item:ltr {
.show-processes-dialog-app-list-item:ltr {
padding-right: 1em; }
.mount-dialog-app-list-item:rtl {
.show-processes-dialog-app-list-item:rtl {
padding-left: 1em; }
.mount-dialog-app-list-item-icon:ltr {
.show-processes-dialog-app-list-item-icon:ltr {
padding-right: 17px; }
.mount-dialog-app-list-item-icon:rtl {
.show-processes-dialog-app-list-item-icon:rtl {
padding-left: 17px; }
.mount-dialog-app-list-item-name {
.show-processes-dialog-app-list-item-name {
font-size: 10pt; }
/* Password or Authentication Dialog */
.prompt-dialog {
width: 34em;
border: 3px solid rgba(238, 238, 236, 0.2); }
.prompt-dialog .message-dialog-main-layout {
spacing: 24px;
padding: 10px; }
.prompt-dialog .message-dialog-content {
spacing: 16px; }
.prompt-dialog .message-dialog-title {
color: #b2b2a9; }
.prompt-dialog-main-layout {
spacing: 24px;
padding: 10px; }
.prompt-dialog-message-layout {
spacing: 16px; }
.prompt-dialog-headline {
font-weight: bold;
color: #b2b2a9; }
.prompt-dialog-description:rtl {
text-align: right; }
@@ -442,17 +437,44 @@ StScrollBar {
.access-dialog {
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 {
spacing: 30px; }
/* Extension Dialog */
.extension-dialog .message-dialog-main-layout {
spacing: 24px;
padding: 10px; }
.geolocation-dialog-main-layout {
spacing: 12px; }
.extension-dialog .message-dialog-title {
color: #b2b2a9; }
.geolocation-dialog-content {
spacing: 20px; }
.geolocation-dialog-icon {
icon-size: 48px; }
.geolocation-dialog-title {
font-weight: bold; }
.geolocation-dialog-reason {
color: #999999;
font-weight: bold; }
/* Network Agent Dialog */
.network-dialog-secret-table {
@@ -1150,30 +1172,36 @@ StScrollBar {
spacing: 3px; }
.search-section-separator {
height: 2px;
background-color: rgba(255, 255, 255, 0.2); }
-gradient-height: 1px;
-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 {
spacing: 30px; }
spacing: 12px;
padding: 2px; }
.list-search-result-title {
color: #e2e2df;
spacing: 12px; }
font-size: 1.5em;
color: #e2e2df; }
.list-search-result-description {
color: rgba(202, 202, 196, 0.5); }
.list-search-provider-details {
width: 150px;
.list-search-result-provider {
color: #e2e2df;
margin-top: 0.24em; }
.list-search-provider-content {
spacing: 20px; }
.list-search-result-description {
color: #cacac4;
margin-left: 30px; }
.search-provider-icon {
padding: 15px; }
.search-provider-icon-more {
width: 16px;
height: 16px;
background-image: url("resource:///org/gnome/shell/theme/more-results.svg"); }
/* DASHBOARD */
#dash {
font-size: 9pt;
@@ -1701,7 +1729,7 @@ StScrollBar {
spacing: 12px;
padding: .2em;
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;
color: #ffffff; }
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
@@ -1715,6 +1743,9 @@ StScrollBar {
padding-right: 1em; }
.login-dialog-user-list-item:rtl {
padding-left: 1em; }
.login-dialog-user-list-item:hover {
background-color: #215d9c;
color: #ffffff; }
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
height: 2px;
margin: 2px 0 0 0;

View File

@@ -221,30 +221,11 @@ StScrollBar {
color: #d6d6d1;
padding-bottom: .4em; }
.mount-dialog-subject,
.show-processes-dialog-subject,
.mount-question-dialog-subject,
.end-session-dialog-subject {
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 {
spacing: 42px;
@@ -313,62 +294,76 @@ StScrollBar {
.shell-mount-operation-icon {
icon-size: 48px; }
.mount-dialog {
.show-processes-dialog,
.mount-question-dialog {
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: 34em; }
.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;
padding-top: 24px;
padding-left: 49px;
padding-right: 32px; }
.mount-dialog-app-list:rtl {
.show-processes-dialog-app-list:rtl {
padding-right: 49px;
padding-left: 32px; }
.mount-dialog-app-list-item {
.show-processes-dialog-app-list-item {
color: #d6d6d1; }
.mount-dialog-app-list-item:hover {
.show-processes-dialog-app-list-item:hover {
color: #eeeeec; }
.mount-dialog-app-list-item:ltr {
.show-processes-dialog-app-list-item:ltr {
padding-right: 1em; }
.mount-dialog-app-list-item:rtl {
.show-processes-dialog-app-list-item:rtl {
padding-left: 1em; }
.mount-dialog-app-list-item-icon:ltr {
.show-processes-dialog-app-list-item-icon:ltr {
padding-right: 17px; }
.mount-dialog-app-list-item-icon:rtl {
.show-processes-dialog-app-list-item-icon:rtl {
padding-left: 17px; }
.mount-dialog-app-list-item-name {
.show-processes-dialog-app-list-item-name {
font-size: 10pt; }
/* Password or Authentication Dialog */
.prompt-dialog {
width: 34em;
border: 3px solid rgba(238, 238, 236, 0.2); }
.prompt-dialog .message-dialog-main-layout {
spacing: 24px;
padding: 10px; }
.prompt-dialog .message-dialog-content {
spacing: 16px; }
.prompt-dialog .message-dialog-title {
color: #b2b2a9; }
.prompt-dialog-main-layout {
spacing: 24px;
padding: 10px; }
.prompt-dialog-message-layout {
spacing: 16px; }
.prompt-dialog-headline {
font-weight: bold;
color: #b2b2a9; }
.prompt-dialog-description:rtl {
text-align: right; }
@@ -442,17 +437,44 @@ StScrollBar {
.access-dialog {
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 {
spacing: 30px; }
/* Extension Dialog */
.extension-dialog .message-dialog-main-layout {
spacing: 24px;
padding: 10px; }
.geolocation-dialog-main-layout {
spacing: 12px; }
.extension-dialog .message-dialog-title {
color: #b2b2a9; }
.geolocation-dialog-content {
spacing: 20px; }
.geolocation-dialog-icon {
icon-size: 48px; }
.geolocation-dialog-title {
font-weight: bold; }
.geolocation-dialog-reason {
color: #8e8e80;
font-weight: bold; }
/* Network Agent Dialog */
.network-dialog-secret-table {
@@ -1149,31 +1171,39 @@ StScrollBar {
.list-search-results {
spacing: 3px; }
.list-search-provider-details {
spacing: 3px;
width: 150px;
margin-left: 30px; }
.search-section-separator {
height: 2px;
background-color: rgba(255, 255, 255, 0.2); }
.list-search-result-content {
spacing: 30px; }
spacing: 12px;
padding: 2px; }
.list-search-result-title {
color: #e2e2df; }
.list-search-result-provider {
color: #e2e2df;
spacing: 12px; }
margin-top: 0.24em;
}
.list-search-result-description {
color: rgba(202, 202, 196, 0.5); }
.list-search-provider-details {
width: 150px;
color: #e2e2df;
margin-top: 0.24em; }
.list-search-provider-content {
spacing: 20px; }
color: rgba(202, 202, 196, 0.5);
margin-left: 30px; }
.search-provider-icon {
padding: 15px; }
.search-provider-icon-more {
width: 16px;
height: 16px;
background-image: url("resource:///org/gnome/shell/theme/more-results.svg"); }
/* DASHBOARD */
#dash {
font-size: 9pt;
@@ -1701,7 +1731,7 @@ StScrollBar {
spacing: 12px;
padding: .2em;
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;
color: #ffffff; }
.login-dialog-user-list:expanded .login-dialog-user-list-item:logged-in {
@@ -1715,6 +1745,9 @@ StScrollBar {
padding-right: 1em; }
.login-dialog-user-list-item:rtl {
padding-left: 1em; }
.login-dialog-user-list-item:hover {
background-color: #215d9c;
color: #ffffff; }
.login-dialog-user-list-item .login-dialog-timed-login-indicator {
height: 2px;
margin: 2px 0 0 0;

View File

@@ -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

114
data/theme/more-results.svg Normal file
View 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

View File

@@ -1,10 +1,7 @@
#!/usr/bin/sh
srcdir=`dirname $0`
stamp=${1}
for scss in $srcdir/*.scss
do
sassc -a $scss ${scss%%.scss}.css || exit 1
sassc -a $scss ${scss%%.scss}.css
done
[ "$stamp" ] && touch $stamp

View File

@@ -1,5 +0,0 @@
version_conf = configuration_data()
version_conf.set('VERSION', meson.project_version())
subdir('shell')
subdir('st')

View File

@@ -120,7 +120,7 @@ include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
EXTRA_DIST +=
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types

View File

@@ -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
)

View File

@@ -3,13 +3,12 @@
"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 version SYSTEM "version.xml">
]>
<book id="index">
<bookinfo>
<title>Shell Reference Manual</title>
<releaseinfo>
for Shell &version;.
for Shell @VERSION@.
<!--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>.-->
</releaseinfo>
@@ -52,15 +51,10 @@
<xi:include href="xml/shell-mount-operation.xml"/>
<xi:include href="xml/shell-polkit-authentication-agent.xml"/>
</chapter>
<!-- FIXME:
Not generated at the moment, find out whether to blame gtk-doc or meson
-->
<!--
<chapter id="object-tree">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
</chapter>
-->
<index id="api-index-full">
<title>API Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>

View File

@@ -1 +0,0 @@
@VERSION@

View File

@@ -85,7 +85,7 @@ include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
EXTRA_DIST +=
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types

View File

@@ -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
)

View File

@@ -3,13 +3,12 @@
"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 version SYSTEM "version.xml">
]>
<book id="index">
<bookinfo>
<title>St Reference Manual</title>
<releaseinfo>
for St &version;.
for St @VERSION@.
<!--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>.-->
</releaseinfo>
@@ -47,15 +46,10 @@
<xi:include href="xml/st-texture-cache.xml"/>
</chapter>
</part>
<!-- FIXME:
Not generated at the moment, find out whether to blame gtk-doc or meson
-->
<!--
<chapter id="object-tree">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
</chapter>
-->
<index id="api-index-full">
<title>API Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>

View File

@@ -1 +0,0 @@
@VERSION@

View File

@@ -32,7 +32,7 @@ function stripPrefix(string, prefix) {
return string;
}
var Application = new Lang.Class({
const Application = new Lang.Class({
Name: 'Application',
_init: function() {
GLib.set_prgname('gnome-shell-extension-prefs');
@@ -253,7 +253,7 @@ var Application = new Lang.Class({
}
});
var DescriptionLabel = new Lang.Class({
const DescriptionLabel = new Lang.Class({
Name: 'DescriptionLabel',
Extends: Gtk.Label,
@@ -265,7 +265,7 @@ var DescriptionLabel = new Lang.Class({
}
});
var ExtensionRow = new Lang.Class({
const ExtensionRow = new Lang.Class({
Name: 'ExtensionRow',
Extends: Gtk.ListBoxRow,

View File

@@ -1,190 +0,0 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/*
* Copyright 2017 Red Hat, Inc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
const Clutter = imports.gi.Clutter;
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Signals = imports.signals;
const St = imports.gi.St;
const Tweener = imports.ui.tweener;
const _SCROLL_ANIMATION_TIME = 0.5;
const AuthListItem = new Lang.Class({
Name: 'AuthListItem',
_init: function(key, text) {
this.key = key;
let label = new St.Label({ style_class: 'auth-list-item-label',
y_align: Clutter.ActorAlign.CENTER });
label.text = text;
this.actor = new St.Button({ style_class: 'login-dialog-user-list-item',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,
can_focus: true,
child: label,
reactive: true,
x_align: St.Align.START,
x_fill: true });
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.actor.connect('clicked', Lang.bind(this, this._onClicked));
},
_onClicked: function() {
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');
}
}
});
Signals.addSignalMethods(AuthListItem.prototype);
const AuthList = new Lang.Class({
Name: 'AuthList',
_init: function() {
this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'});
this.actor.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC);
this._box = new St.BoxLayout({ vertical: true,
style_class: 'login-dialog-user-list',
pseudo_class: 'expanded' });
this.actor.add_actor(this._box);
this._items = {};
this.actor.connect('key-focus-in', Lang.bind(this, this._moveFocusToItems));
},
_moveFocusToItems: function() {
let hasItems = Object.keys(this._items).length > 0;
if (!hasItems)
return;
if (global.stage.get_key_focus() != this.actor)
return;
let focusSet = this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
if (!focusSet) {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() {
this._moveFocusToItems();
return false;
}));
}
},
_onItemActivated: function(activatedItem) {
this.emit('activate', activatedItem.key);
},
scrollToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
Tweener.removeTweens(adjustment);
Tweener.addTween (adjustment,
{ value: value,
time: _SCROLL_ANIMATION_TIME,
transition: 'easeOutQuad' });
},
jumpToItem: function(item) {
let box = item.actor.get_allocation_box();
let adjustment = this.actor.get_vscroll_bar().get_adjustment();
let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
adjustment.set_value(value);
},
getItem: function(key) {
let item = this._items[key];
if (!item)
return null;
return item;
},
addItem: function(key, text) {
this.removeItem(key);
let item = new AuthListItem(key, text);
this._box.add(item.actor, { x_fill: true });
this._items[key] = item;
item.connect('activate',
Lang.bind(this, this._onItemActivated));
// Try to keep the focused item front-and-center
item.actor.connect('key-focus-in',
Lang.bind(this,
function() {
this.scrollToItem(item);
}));
this._moveFocusToItems();
this.emit('item-added', item);
},
removeItem: function(key) {
let item = this._items[key];
if (!item)
return;
item.actor.destroy();
delete this._items[key];
},
numItems: function() {
return Object.keys(this._items).length;
},
clear: function() {
this._box.destroy_all_children();
this._items = {};
}
});
Signals.addSignalMethods(AuthList.prototype);

View File

@@ -8,7 +8,6 @@ const Signals = imports.signals;
const St = imports.gi.St;
const Animation = imports.ui.animation;
const AuthList = imports.gdm.authList;
const Batch = imports.gdm.batch;
const GdmUtil = imports.gdm.util;
const Params = imports.misc.params;
@@ -16,30 +15,30 @@ const ShellEntry = imports.ui.shellEntry;
const Tweener = imports.ui.tweener;
const UserWidget = imports.ui.userWidget;
var DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
var DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
var DEFAULT_BUTTON_WELL_ANIMATION_TIME = 0.3;
const DEFAULT_BUTTON_WELL_ICON_SIZE = 16;
const DEFAULT_BUTTON_WELL_ANIMATION_DELAY = 1.0;
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_OR_LOG_IN: 1
};
var AuthPromptStatus = {
const AuthPromptStatus = {
NOT_VERIFYING: 0,
VERIFYING: 1,
VERIFICATION_FAILED: 2,
VERIFICATION_SUCCEEDED: 3
};
var BeginRequestType = {
const BeginRequestType = {
PROVIDE_USERNAME: 0,
DONT_PROVIDE_USERNAME: 1
};
var AuthPrompt = new Lang.Class({
const AuthPrompt = new Lang.Class({
Name: 'AuthPrompt',
_init: function(gdmClient, mode) {
@@ -58,7 +57,6 @@ var AuthPrompt = new Lang.Class({
this._userVerifier.connect('ask-question', Lang.bind(this, this._onAskQuestion));
this._userVerifier.connect('show-message', Lang.bind(this, this._onShowMessage));
this._userVerifier.connect('show-choice-list', Lang.bind(this, this._onShowChoiceList));
this._userVerifier.connect('verification-failed', Lang.bind(this, this._onVerificationFailed));
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
@@ -119,17 +117,6 @@ var AuthPrompt = new Lang.Class({
this._message.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this.actor.add(this._message, { x_fill: false, x_align: St.Align.START, y_align: St.Align.START });
this._authList = new AuthList.AuthList();
this._authList.connect('activate', (list, key) => {
this._userVerifier.selectChoice(this._queryingService, key);
});
this._authList.actor.hide();
this.actor.add(this._authList.actor,
{ expand: true,
x_fill: true,
y_fill: false,
x_align: St.Align.START });
this._buttonBox = new St.BoxLayout({ style_class: 'login-dialog-button-box',
vertical: false });
this.actor.add(this._buttonBox,
@@ -201,7 +188,7 @@ var AuthPrompt = new Lang.Class({
if (!this._userVerifier.hasPendingMessages)
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() {
if (this.nextButton.reactive)
@@ -235,21 +222,6 @@ var AuthPrompt = new Lang.Class({
this.emit('prompted');
},
_onShowChoiceList: function(userVerifier, serviceName, choiceList) {
if (this._queryingService)
this.clear();
this._queryingService = serviceName;
if (this._preemptiveAnswer)
this._preemptiveAnswer = null;
this.nextButton.label = _("Next");
this.setChoiceList(choiceList);
this.updateSensitivity(true);
this.emit('prompted');
},
_onOVirtUserAuthenticated: function() {
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset();
@@ -378,8 +350,6 @@ var AuthPrompt = new Lang.Class({
clear: function() {
this._entry.text = '';
this.stopSpinning();
this._authList.clear();
this._authList.actor.hide();
},
setPasswordChar: function(passwordChar) {
@@ -390,25 +360,12 @@ var AuthPrompt = new Lang.Class({
setQuestion: function(question) {
this._label.set_text(question);
this._authList.actor.hide();
this._label.show();
this._entry.show();
this._entry.grab_key_focus();
},
setChoiceList: function(choiceList) {
this._label.hide();
this._entry.hide();
this._authList.clear();
for (let key in choiceList) {
let text = choiceList[key];
this._authList.addItem(key, text);
}
this._authList.actor.show();
},
getAnswer: function() {
let text;
@@ -459,7 +416,7 @@ var AuthPrompt = new Lang.Class({
},
updateSensitivity: function(sensitive) {
this._updateNextButtonSensitivity(sensitive && !this._authList.actor.visible && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
this._updateNextButtonSensitivity(sensitive && this._entry.text.length > 0);
this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive;
},

View File

@@ -47,7 +47,7 @@
const Lang = imports.lang;
const Signals = imports.signals;
var Task = new Lang.Class({
const Task = new Lang.Class({
Name: 'Task',
_init: function(scope, handler) {
@@ -68,7 +68,7 @@ var Task = new Lang.Class({
});
Signals.addSignalMethods(Task.prototype);
var Hold = new Lang.Class({
const Hold = new Lang.Class({
Name: 'Hold',
Extends: Task,
@@ -110,7 +110,7 @@ var Hold = new Lang.Class({
});
Signals.addSignalMethods(Hold.prototype);
var Batch = new Lang.Class({
const Batch = new Lang.Class({
Name: 'Batch',
Extends: Task,
@@ -185,7 +185,7 @@ var Batch = new Lang.Class({
});
Signals.addSignalMethods(Batch.prototype);
var ConcurrentBatch = new Lang.Class({
const ConcurrentBatch = new Lang.Class({
Name: 'ConcurrentBatch',
Extends: Batch,
@@ -204,7 +204,7 @@ var ConcurrentBatch = new Lang.Class({
});
Signals.addSignalMethods(ConcurrentBatch.prototype);
var ConsecutiveBatch = new Lang.Class({
const ConsecutiveBatch = new Lang.Class({
Name: 'ConsecutiveBatch',
Extends: Batch,

View File

@@ -51,7 +51,7 @@ const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_HEIGHT = 48;
const _MAX_BOTTOM_MENU_ITEMS = 5;
var UserListItem = new Lang.Class({
const UserListItem = new Lang.Class({
Name: 'UserListItem',
_init: function(user) {
@@ -70,16 +70,6 @@ var UserListItem = new Lang.Class({
this.actor.connect('destroy',
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);
layout.add(this._userWidget.actor);
@@ -113,15 +103,6 @@ var UserListItem = new Lang.Class({
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) {
let hold = new Batch.Hold();
@@ -145,7 +126,7 @@ var UserListItem = new Lang.Class({
});
Signals.addSignalMethods(UserListItem.prototype);
var UserList = new Lang.Class({
const UserList = new Lang.Class({
Name: 'UserList',
_init: function() {
@@ -288,15 +269,11 @@ var UserList = new Lang.Class({
item.actor.destroy();
delete this._items[userName];
},
numItems: function() {
return Object.keys(this._items).length;
}
});
Signals.addSignalMethods(UserList.prototype);
var SessionMenuButton = new Lang.Class({
const SessionMenuButton = new Lang.Class({
Name: 'SessionMenuButton',
_init: function() {
@@ -402,7 +379,7 @@ var SessionMenuButton = new Lang.Class({
});
Signals.addSignalMethods(SessionMenuButton.prototype);
var LoginDialog = new Lang.Class({
const LoginDialog = new Lang.Class({
Name: 'LoginDialog',
_init: function(parentActor) {
@@ -418,11 +395,6 @@ var LoginDialog = new Lang.Class({
this._userManager = AccountsService.UserManager.get_default()
this._gdmClient = new Gdm.Client();
try {
this._gdmClient.set_enabled_extensions([Gdm.UserVerifierChoiceList.interface_info().name]);
} catch(e) {
}
this._settings = new Gio.Settings({ schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed::' + GdmUtil.BANNER_MESSAGE_KEY,
@@ -735,10 +707,6 @@ var LoginDialog = new Lang.Class({
_updateDisableUserList: function() {
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) {
this._disableUserList = disableUserList;
@@ -1210,18 +1178,14 @@ var LoginDialog = new Lang.Class({
this._userList.addUser(users[i]);
}
this._updateDisableUserList();
this._userAddedId = this._userManager.connect('user-added',
Lang.bind(this, function(userManager, user) {
this._userList.addUser(user);
this._updateDisableUserList();
}));
this._userRemovedId = this._userManager.connect('user-removed',
Lang.bind(this, function(userManager, user) {
this._userList.removeUser(user);
this._updateDisableUserList();
}));
this._userChangedId = this._userManager.connect('user-changed',
@@ -1230,7 +1194,6 @@ var LoginDialog = new Lang.Class({
this._userList.removeUser(user);
else if (!this._userList.containsUser(user) && !user.locked)
this._userList.addUser(user);
this._updateDisableUserList();
}));
return GLib.SOURCE_REMOVE;

View File

@@ -27,7 +27,7 @@ function OVirtCredentials() {
return self;
}
var OVirtCredentialsManager = new Lang.Class({
const OVirtCredentialsManager = new Lang.Class({
Name: 'OVirtCredentialsManager',
_init: function() {
this._token = null;

View File

@@ -59,7 +59,7 @@ const RealmIface = '<node> \
</node>';
const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface);
var Manager = new Lang.Class({
const Manager = new Lang.Class({
Name: 'Manager',
_init: function(parentActor) {

View File

@@ -21,8 +21,8 @@ const PASSWORD_SERVICE_NAME = 'gdm-password';
const FINGERPRINT_SERVICE_NAME = 'gdm-fingerprint';
const SMARTCARD_SERVICE_NAME = 'gdm-smartcard';
const OVIRT_SERVICE_NAME = 'gdm-ovirtcred';
var FADE_ANIMATION_TIME = 0.16;
var CLONE_FADE_ANIMATION_TIME = 0.25;
const FADE_ANIMATION_TIME = 0.16;
const CLONE_FADE_ANIMATION_TIME = 0.25;
const LOGIN_SCREEN_SCHEMA = 'org.gnome.login-screen';
const PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
@@ -36,9 +36,9 @@ const LOGO_KEY = 'logo';
const DISABLE_USER_LIST_KEY = 'disable-user-list';
// 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,
ERROR: 1,
INFO: 2,
@@ -119,7 +119,7 @@ function cloneAndFadeOutActor(actor) {
return hold;
}
var ShellUserVerifier = new Lang.Class({
const ShellUserVerifier = new Lang.Class({
Name: 'ShellUserVerifier',
_init: function(client, params) {
@@ -128,9 +128,6 @@ var ShellUserVerifier = new Lang.Class({
this._client = client;
this._defaultService = null;
this._preemptingService = null;
this._settings = new Gio.Settings({ schema_id: LOGIN_SCREEN_SCHEMA });
this._settings.connect('changed',
Lang.bind(this, this._updateDefaultService));
@@ -143,7 +140,6 @@ var ShellUserVerifier = new Lang.Class({
// at startup should result in immediately initiating authentication.
// This is different than fingerprint readers, where we only check them
// after a user has been picked.
this.smartcardDetected = false;
this._checkForSmartcard();
this._smartcardInsertedId = this._smartcardManager.connect('smartcard-inserted',
@@ -199,8 +195,6 @@ var ShellUserVerifier = new Lang.Class({
if (this._userVerifier) {
this._userVerifier.run_dispose();
this._userVerifier = null;
this._userVerifierChoiceList.run_dispose();
this._userVerifierChoiceList = null;
}
},
@@ -228,10 +222,6 @@ var ShellUserVerifier = new Lang.Class({
this._oVirtCredentialsManager = null;
},
selectChoice: function(serviceName, key) {
this._userVerifierChoiceList.call_select_choice(serviceName, key, this._cancellable, null);
},
answerQuery: function(serviceName, answer) {
if (!this.hasPendingMessages) {
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
@@ -371,8 +361,6 @@ var ShellUserVerifier = new Lang.Class({
return;
}
this._userVerifierChoiceList = client.get_user_verifier_choice_list();
this.reauthenticating = true;
this._connectSignals();
this._beginVerification();
@@ -390,8 +378,6 @@ var ShellUserVerifier = new Lang.Class({
return;
}
this._userVerifierChoiceList = client.get_user_verifier_choice_list();
this._connectSignals();
this._beginVerification();
this._hold.release();
@@ -405,9 +391,6 @@ var ShellUserVerifier = new Lang.Class({
this._userVerifier.connect('conversation-stopped', Lang.bind(this, this._onConversationStopped));
this._userVerifier.connect('reset', Lang.bind(this, this._onReset));
this._userVerifier.connect('verification-complete', Lang.bind(this, this._onVerificationComplete));
if (this._userVerifierChoiceList)
this._userVerifierChoiceList.connect('choice-query', Lang.bind(this, this._onChoiceListQuery));
},
_getForegroundService: function() {
@@ -477,13 +460,6 @@ var ShellUserVerifier = new Lang.Class({
this._startService(FINGERPRINT_SERVICE_NAME);
},
_onChoiceListQuery: function(client, serviceName, list) {
if (!this.serviceIsForeground(serviceName))
return;
this.emit('show-choice-list', serviceName, list.deep_unpack());
},
_onInfo: function(client, serviceName, info) {
if (this.serviceIsForeground(serviceName)) {
this._queueMessage(info, MessageType.INFO);
@@ -564,8 +540,7 @@ var ShellUserVerifier = new Lang.Class({
let signalId = this.connect('no-more-messages',
Lang.bind(this, function() {
this.disconnect(signalId);
if (this._cancellable && !this._cancellable.is_cancelled())
this._retry();
this._retry();
}));
}
} else {

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/shell">
<file>gdm/authList.js</file>
<file>gdm/authPrompt.js</file>
<file>gdm/batch.js</file>
<file>gdm/fingerprint.js</file>
@@ -45,11 +44,9 @@
<file>ui/boxpointer.js</file>
<file>ui/calendar.js</file>
<file>ui/checkBox.js</file>
<file>ui/closeDialog.js</file>
<file>ui/ctrlAltTab.js</file>
<file>ui/dash.js</file>
<file>ui/dateMenu.js</file>
<file>ui/dialog.js</file>
<file>ui/dnd.js</file>
<file>ui/edgeDragAction.js</file>
<file>ui/endSessionDialog.js</file>
@@ -90,6 +87,7 @@
<file>ui/screenshot.js</file>
<file>ui/scripting.js</file>
<file>ui/search.js</file>
<file>ui/separator.js</file>
<file>ui/sessionMode.js</file>
<file>ui/shellDBus.js</file>
<file>ui/shellEntry.js</file>

View 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]
)

View File

@@ -1,19 +1,19 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* The name of this package (not localized) */
var PACKAGE_NAME = '@PACKAGE_NAME@';
const PACKAGE_NAME = '@PACKAGE_NAME@';
/* The version of this package */
var PACKAGE_VERSION = '@PACKAGE_VERSION@';
const PACKAGE_VERSION = '@PACKAGE_VERSION@';
/* 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 */
var HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
/* gettext package */
var GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
/* locale dir */
var LOCALEDIR = '@datadir@/locale';
const LOCALEDIR = '@datadir@/locale';
/* other standard directories */
var LIBEXECDIR = '@libexecdir@';
var SYSCONFDIR = '@sysconfdir@';
const LIBEXECDIR = '@libexecdir@';
const SYSCONFDIR = '@sysconfdir@';
/* g-i package versions */
var LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'
const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@'

View File

@@ -11,13 +11,13 @@ const Gio = imports.gi.Gio;
const Config = imports.misc.config;
const FileUtils = imports.misc.fileUtils;
var ExtensionType = {
const ExtensionType = {
SYSTEM: 1,
PER_USER: 2
};
// Maps uuid -> metadata object
var extensions = {};
const extensions = {};
/**
* getCurrentExtension:
@@ -158,7 +158,7 @@ function installImporter(extension) {
imports.searchPath = oldSearchPath;
}
var ExtensionFinder = new Lang.Class({
const ExtensionFinder = new Lang.Class({
Name: 'ExtensionFinder',
_loadExtension: function(extensionDir, info, perUserDir) {

View File

@@ -16,7 +16,7 @@ const PresenceIface = '<node> \
</interface> \
</node>';
var PresenceStatus = {
const PresenceStatus = {
AVAILABLE: 0,
INVISIBLE: 1,
BUSY: 2,

View File

@@ -5,9 +5,9 @@ const Signals = imports.signals;
const Clutter = imports.gi.Clutter;
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',
_init: function(params) {
@@ -69,7 +69,7 @@ var HistoryManager = new Lang.Class({
this._indexChanged();
}
return this._historyIndex ? this._history[this._historyIndex -1] : null;
return this._historyIndex[this._history.length];
},
addItem: function(input) {

View File

@@ -36,7 +36,7 @@ function getIBusManager() {
return _ibusManager;
}
var IBusManager = new Lang.Class({
const IBusManager = new Lang.Class({
Name: 'IBusManager',
// 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) {
if (!IBus || !this._ready || !this._engines.hasOwnProperty(id))
if (!IBus || !this._ready)
return null;
return this._engines[id];

View File

@@ -7,9 +7,9 @@ const Meta = imports.gi.Meta;
const Main = imports.ui.main;
var DEFAULT_LOCALE = 'en_US';
var DEFAULT_LAYOUT = 'us';
var DEFAULT_VARIANT = '';
const DEFAULT_LOCALE = 'en_US';
const DEFAULT_LAYOUT = 'us';
const DEFAULT_VARIANT = '';
let _xkbInfo = null;
@@ -38,7 +38,7 @@ function holdKeyboard() {
global.display.freeze_keyboard(global.get_current_time());
}
var KeyboardManager = new Lang.Class({
const KeyboardManager = new Lang.Class({
Name: 'KeyboardManager',
// The XKB protocol doesn't allow for more that 4 layouts in a

View File

@@ -102,7 +102,7 @@ function getLoginManager() {
return _loginManager;
}
var LoginManagerSystemd = new Lang.Class({
const LoginManagerSystemd = new Lang.Class({
Name: 'LoginManagerSystemd',
_init: function() {
@@ -183,7 +183,7 @@ var LoginManagerSystemd = new Lang.Class({
});
Signals.addSignalMethods(LoginManagerSystemd.prototype);
var LoginManagerDummy = new Lang.Class({
const LoginManagerDummy = new Lang.Class({
Name: 'LoginManagerDummy',
getCurrentSessionProxy: function(callback) {

View File

@@ -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
)

View File

@@ -130,7 +130,7 @@ const ModemCdmaInterface = '<node> \
const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface);
var ModemGsm = new Lang.Class({
const ModemGsm = new Lang.Class({
Name: 'ModemGsm',
_init: function(path) {
@@ -172,7 +172,7 @@ var ModemGsm = new Lang.Class({
});
Signals.addSignalMethods(ModemGsm.prototype);
var ModemCdma = new Lang.Class({
const ModemCdma = new Lang.Class({
Name: 'ModemCdma',
_init: function(path) {
@@ -244,7 +244,7 @@ const BroadbandModemCdmaInterface = '<node> \
</node>';
const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface);
var BroadbandModem = new Lang.Class({
const BroadbandModem = new Lang.Class({
Name: 'BroadbandModem',
_init: function(path, capabilities) {

View File

@@ -26,7 +26,7 @@ const ObjectManagerIface = '<node> \
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
var ObjectManager = new Lang.Class({
const ObjectManager = new Lang.Class({
Name: 'ObjectManager',
_init: function(params) {
params = Params.parse(params, { connection: null,

View File

@@ -25,7 +25,7 @@ function getSmartcardManager() {
return _smartcardManager;
}
var SmartcardManager = new Lang.Class({
const SmartcardManager = new Lang.Class({
Name: 'SmartcardManager',
_init: function() {
this._objectManager = new ObjectManager.ObjectManager({ connection: Gio.DBus.session,

View File

@@ -14,7 +14,7 @@ const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
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
const _balancedParens = '\\((?:[^\\s()<>]+|(?:\\(?:[^\\s()<>]+\\)))*\\)';
@@ -97,7 +97,7 @@ function spawnApp(argv) {
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
let context = global.create_app_launch_context(0, -1);
app.launch([], context);
app.launch([], context, false);
} catch(err) {
_handleSpawnError(argv[0], err);
}
@@ -280,10 +280,7 @@ function formatTime(time, params) {
// xgettext:no-c-format
format = N_("%B %d %Y, %l\u2236%M %p");
}
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');
return date.format(Shell.util_translate_time_string(format));
}
function createTimeLabel(date, params) {
@@ -350,7 +347,7 @@ function insertSorted(array, val, cmp) {
return pos;
}
var CloseButton = new Lang.Class({
const CloseButton = new Lang.Class({
Name: 'CloseButton',
Extends: St.Button,
@@ -439,7 +436,7 @@ function ensureActorVisibleInScrollView(scrollView, actor) {
transition: 'easeOutQuad' });
}
var AppSettingsMonitor = new Lang.Class({
const AppSettingsMonitor = new Lang.Class({
Name: 'AppSettingsMonitor',
_init: function(appId, schemaId) {

View File

@@ -11,9 +11,9 @@ const PermissionStore = imports.misc.permissionStore;
const Util = imports.misc.util;
// 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',
_init: function() {

View File

@@ -50,7 +50,7 @@ const HelperDBusInterface = '<node> \
</interface> \
</node>';
var PortalHeaderBar = new Lang.Class({
const PortalHeaderBar = new Lang.Class({
Name: 'PortalHeaderBar',
Extends: Gtk.HeaderBar,
@@ -115,7 +115,7 @@ var PortalHeaderBar = new Lang.Class({
},
});
var PortalWindow = new Lang.Class({
const PortalWindow = new Lang.Class({
Name: 'PortalWindow',
Extends: Gtk.ApplicationWindow,
@@ -282,7 +282,7 @@ var PortalWindow = new Lang.Class({
},
});
var WebPortalHelper = new Lang.Class({
const WebPortalHelper = new Lang.Class({
Name: 'WebPortalHelper',
Extends: Gtk.Application,

View File

@@ -7,7 +7,6 @@ const Shell = imports.gi.Shell;
const St = imports.gi.St;
const CheckBox = imports.ui.checkBox;
const Dialog = imports.ui.dialog;
const ModalDialog = imports.ui.modalDialog;
const RequestIface = '<node> \
@@ -32,13 +31,13 @@ const AccessIface = '<node> \
</interface> \
</node>';
var DialogResponse = {
const DialogResponse = {
OK: 0,
CANCEL: 1,
CLOSED: 2
};
var AccessDialog = new Lang.Class({
const AccessDialog = new Lang.Class({
Name: 'AccessDialog',
Extends: ModalDialog.ModalDialog,
@@ -65,11 +64,29 @@ var AccessDialog = new Lang.Class({
let iconName = options['icon'] || null;
let choices = options['choices'] || [];
let contentParams = { title, subtitle, body };
if (iconName)
contentParams.icon = new Gio.ThemedIcon({ name: iconName });
let content = new Dialog.MessageDialogContent(contentParams);
this.contentLayout.add_actor(content);
let mainContentBox = new St.BoxLayout();
mainContentBox.style_class = 'access-dialog-main-layout';
this.contentLayout.add_actor(mainContentBox);
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();
@@ -81,11 +98,16 @@ var AccessDialog = new Lang.Class({
let check = new CheckBox.CheckBox();
check.getLabelActor().text = name;
check.actor.checked = selected == "true";
content.insertBeforeBody(check.actor);
messageBox.add_actor(check.actor);
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,
action: () => {
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',
_init: function() {

View File

@@ -14,19 +14,19 @@ const Main = imports.ui.main;
const SwitcherPopup = imports.ui.switcherPopup;
const Tweener = imports.ui.tweener;
var APP_ICON_HOVER_TIMEOUT = 200; // milliseconds
const APP_ICON_HOVER_TIMEOUT = 200; // milliseconds
var THUMBNAIL_DEFAULT_SIZE = 256;
var THUMBNAIL_POPUP_TIME = 500; // milliseconds
var THUMBNAIL_FADE_TIME = 0.1; // seconds
const THUMBNAIL_DEFAULT_SIZE = 256;
const THUMBNAIL_POPUP_TIME = 500; // milliseconds
const THUMBNAIL_FADE_TIME = 0.1; // seconds
var WINDOW_PREVIEW_SIZE = 128;
var APP_ICON_SIZE = 96;
var APP_ICON_SIZE_SMALL = 48;
const WINDOW_PREVIEW_SIZE = 128;
const APP_ICON_SIZE = 96;
const APP_ICON_SIZE_SMALL = 48;
const baseIconSizes = [96, 64, 48, 32, 22];
var AppIconMode = {
const AppIconMode = {
THUMBNAIL_ONLY: 1,
APP_ICON_ONLY: 2,
BOTH: 3,
@@ -58,7 +58,7 @@ function getWindows(workspace) {
}).filter((w, i, a) => !w.skip_taskbar && a.indexOf(w) == i);
}
var AppSwitcherPopup = new Lang.Class({
const AppSwitcherPopup = new Lang.Class({
Name: 'AppSwitcherPopup',
Extends: SwitcherPopup.SwitcherPopup,
@@ -366,7 +366,7 @@ var AppSwitcherPopup = new Lang.Class({
}
});
var CyclerHighlight = new Lang.Class({
const CyclerHighlight = new Lang.Class({
Name: 'CyclerHighlight',
_init: function() {
@@ -427,7 +427,7 @@ var CyclerHighlight = new Lang.Class({
}
});
var CyclerPopup = new Lang.Class({
const CyclerPopup = new Lang.Class({
Name: 'CyclerPopup',
Extends: SwitcherPopup.SwitcherPopup,
Abstract: true,
@@ -488,7 +488,7 @@ var CyclerPopup = new Lang.Class({
});
var GroupCyclerPopup = new Lang.Class({
const GroupCyclerPopup = new Lang.Class({
Name: 'GroupCyclerPopup',
Extends: CyclerPopup,
@@ -509,7 +509,7 @@ var GroupCyclerPopup = new Lang.Class({
}
});
var WindowSwitcherPopup = new Lang.Class({
const WindowSwitcherPopup = new Lang.Class({
Name: 'WindowSwitcherPopup',
Extends: SwitcherPopup.SwitcherPopup,
@@ -556,7 +556,7 @@ var WindowSwitcherPopup = new Lang.Class({
}
});
var WindowCyclerPopup = new Lang.Class({
const WindowCyclerPopup = new Lang.Class({
Name: 'WindowCyclerPopup',
Extends: CyclerPopup,
@@ -582,7 +582,7 @@ var WindowCyclerPopup = new Lang.Class({
}
});
var AppIcon = new Lang.Class({
const AppIcon = new Lang.Class({
Name: 'AppIcon',
_init: function(app) {
@@ -603,7 +603,7 @@ var AppIcon = new Lang.Class({
}
});
var AppSwitcher = new Lang.Class({
const AppSwitcher = new Lang.Class({
Name: 'AppSwitcher',
Extends: SwitcherPopup.SwitcherList,
@@ -777,7 +777,7 @@ var AppSwitcher = new Lang.Class({
}
});
var ThumbnailList = new Lang.Class({
const ThumbnailList = new Lang.Class({
Name: 'ThumbnailList',
Extends: SwitcherPopup.SwitcherList,
@@ -845,7 +845,7 @@ var ThumbnailList = new Lang.Class({
}
});
var WindowIcon = new Lang.Class({
const WindowIcon = new Lang.Class({
Name: 'WindowIcon',
_init: function(window, mode) {
@@ -902,7 +902,7 @@ var WindowIcon = new Lang.Class({
}
});
var WindowList = new Lang.Class({
const WindowList = new Lang.Class({
Name: 'WindowList',
Extends: SwitcherPopup.SwitcherList,

View File

@@ -7,9 +7,9 @@ const St = imports.gi.St;
const Signals = imports.signals;
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',
_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',
Extends: Animation,

View File

@@ -27,38 +27,38 @@ const Workspace = imports.ui.workspace;
const Params = imports.misc.params;
const Util = imports.misc.util;
var MAX_APPLICATION_WORK_MILLIS = 75;
var MENU_POPUP_TIMEOUT = 600;
var MAX_COLUMNS = 6;
var MIN_COLUMNS = 4;
var MIN_ROWS = 4;
const MAX_APPLICATION_WORK_MILLIS = 75;
const MENU_POPUP_TIMEOUT = 600;
const MAX_COLUMNS = 6;
const MIN_COLUMNS = 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
// to not clash with other animations
var INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.24;
var FOLDER_SUBICON_FRACTION = .4;
const INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.24;
const FOLDER_SUBICON_FRACTION = .4;
var MIN_FREQUENT_APPS_COUNT = 3;
const MIN_FREQUENT_APPS_COUNT = 3;
var INDICATORS_BASE_TIME = 0.25;
var INDICATORS_ANIMATION_DELAY = 0.125;
var INDICATORS_ANIMATION_MAX_TIME = 0.75;
var VIEWS_SWITCH_TIME = 0.4;
var VIEWS_SWITCH_ANIMATION_DELAY = 0.1;
const INDICATORS_BASE_TIME = 0.25;
const INDICATORS_ANIMATION_DELAY = 0.125;
const INDICATORS_ANIMATION_MAX_TIME = 0.75;
// Follow iconGrid animations approach and divide by 2 to animate out to
// not annoy the user when the user wants to quit appDisplay.
// Also, make sure we don't exceed iconGrid animation total time or
// views switch time.
var INDICATORS_BASE_TIME_OUT = 0.125;
var INDICATORS_ANIMATION_DELAY_OUT = 0.0625;
var INDICATORS_ANIMATION_MAX_TIME_OUT =
const INDICATORS_BASE_TIME_OUT = 0.125;
const INDICATORS_ANIMATION_DELAY_OUT = 0.0625;
const INDICATORS_ANIMATION_MAX_TIME_OUT =
Math.min (VIEWS_SWITCH_TIME,
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_OBJECT_PATH = '/net/hadess/SwitcherooControl';
@@ -108,7 +108,7 @@ function clamp(value, min, max) {
return Math.max(min, Math.min(max, value));
}
var BaseAppView = new Lang.Class({
const BaseAppView = new Lang.Class({
Name: 'BaseAppView',
Abstract: true,
@@ -219,10 +219,17 @@ var BaseAppView = new Lang.Class({
}
if (animationDirection == IconGrid.AnimationDirection.IN) {
let id = this._grid.actor.connect('paint', () => {
this._grid.actor.disconnect(id);
this._doSpringAnimation(animationDirection);
});
let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this,
function() {
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 {
this._doSpringAnimation(animationDirection);
}
@@ -249,7 +256,7 @@ var BaseAppView = new Lang.Class({
});
Signals.addSignalMethods(BaseAppView.prototype);
var PageIndicatorsActor = new Lang.Class({
const PageIndicatorsActor = new Lang.Class({
Name:'PageIndicatorsActor',
Extends: St.BoxLayout,
@@ -273,7 +280,7 @@ var PageIndicatorsActor = new Lang.Class({
}
});
var PageIndicators = new Lang.Class({
const PageIndicators = new Lang.Class({
Name:'PageIndicators',
_init: function() {
@@ -366,7 +373,7 @@ var PageIndicators = new Lang.Class({
});
Signals.addSignalMethods(PageIndicators.prototype);
var AllView = new Lang.Class({
const AllView = new Lang.Class({
Name: 'AllView',
Extends: BaseAppView,
@@ -792,7 +799,7 @@ var AllView = new Lang.Class({
});
Signals.addSignalMethods(AllView.prototype);
var FrequentView = new Lang.Class({
const FrequentView = new Lang.Class({
Name: 'FrequentView',
Extends: BaseAppView,
@@ -866,12 +873,12 @@ var FrequentView = new Lang.Class({
}
});
var Views = {
const Views = {
FREQUENT: 0,
ALL: 1
};
var ControlsBoxLayout = Lang.Class({
const ControlsBoxLayout = Lang.Class({
Name: 'ControlsBoxLayout',
Extends: Clutter.BoxLayout,
@@ -896,7 +903,7 @@ var ControlsBoxLayout = Lang.Class({
}
});
var ViewStackLayout = new Lang.Class({
const ViewStackLayout = new Lang.Class({
Name: 'ViewStackLayout',
Extends: Clutter.BinLayout,
Signals: { 'allocated-size-changed': { param_types: [GObject.TYPE_INT,
@@ -912,7 +919,7 @@ var ViewStackLayout = new Lang.Class({
}
});
var AppDisplay = new Lang.Class({
const AppDisplay = new Lang.Class({
Name: 'AppDisplay',
_init: function() {
@@ -1077,14 +1084,12 @@ var AppDisplay = new Lang.Class({
}
})
var AppSearchProvider = new Lang.Class({
const AppSearchProvider = new Lang.Class({
Name: 'AppSearchProvider',
_init: function() {
this._appSys = Shell.AppSystem.get_default();
this.id = 'applications';
this.isRemoteProvider = false;
this.canLaunchSearch = false;
},
getResultMetas: function(apps, callback) {
@@ -1126,13 +1131,13 @@ var AppSearchProvider = new Lang.Class({
this.getInitialResultSet(terms, callback, cancellable);
},
createResultObject: function (resultMeta) {
createResultObject: function (resultMeta, searchResultsView) {
let app = this._appSys.lookup_app(resultMeta['id']);
return new AppIcon(app);
}
});
var FolderView = new Lang.Class({
const FolderView = new Lang.Class({
Name: 'FolderView',
Extends: BaseAppView,
@@ -1248,12 +1253,11 @@ var FolderView = new Lang.Class({
}
});
var FolderIcon = new Lang.Class({
const FolderIcon = new Lang.Class({
Name: 'FolderIcon',
_init: function(id, path, parentView) {
this.id = id;
this.name = '';
this._parentView = parentView;
this._folder = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders.folder',
@@ -1426,7 +1430,7 @@ var FolderIcon = new Lang.Class({
});
Signals.addSignalMethods(FolderIcon.prototype);
var AppFolderPopup = new Lang.Class({
const AppFolderPopup = new Lang.Class({
Name: 'AppFolderPopup',
_init: function(source, side) {
@@ -1587,7 +1591,7 @@ var AppFolderPopup = new Lang.Class({
});
Signals.addSignalMethods(AppFolderPopup.prototype);
var AppIcon = new Lang.Class({
const AppIcon = new Lang.Class({
Name: 'AppIcon',
_init : function(app, iconParams) {
@@ -1833,7 +1837,7 @@ var AppIcon = new Lang.Class({
});
Signals.addSignalMethods(AppIcon.prototype);
var AppIconMenu = new Lang.Class({
const AppIconMenu = new Lang.Class({
Name: 'AppIconMenu',
Extends: PopupMenu.PopupMenu,

View File

@@ -43,7 +43,7 @@ const RENAMED_DESKTOP_IDS = {
'totem.desktop': 'org.gnome.Totem.desktop',
};
var AppFavorites = new Lang.Class({
const AppFavorites = new Lang.Class({
Name: 'AppFavorites',
FAVORITE_APPS_KEY: 'favorite-apps',

View File

@@ -9,7 +9,7 @@ const St = imports.gi.St;
const Main = imports.ui.main;
const ModalDialog = imports.ui.modalDialog;
var AudioDevice = {
const AudioDevice = {
HEADPHONES: 1 << 0,
HEADSET: 1 << 1,
MICROPHONE: 1 << 2
@@ -28,7 +28,7 @@ const AudioDeviceSelectionIface = '<node> \
</interface> \
</node>';
var AudioDeviceSelectionDialog = new Lang.Class({
const AudioDeviceSelectionDialog = new Lang.Class({
Name: 'AudioDeviceSelectionDialog',
Extends: ModalDialog.ModalDialog,
@@ -146,7 +146,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({
}
});
var AudioDeviceSelectionDBus = new Lang.Class({
const AudioDeviceSelectionDBus = new Lang.Class({
Name: 'AudioDeviceSelectionDBus',
_init: function() {

View File

@@ -107,7 +107,7 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
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 PRIMARY_COLOR_KEY = 'primary-color';
@@ -117,14 +117,14 @@ const BACKGROUND_STYLE_KEY = 'picture-options';
const PICTURE_OPACITY_KEY = 'picture-opacity';
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.
// The first is how different (percent crossfaded) the slide show
// has to look before redrawing and the second is the minimum
// frequency (in seconds) we're willing to wake up
var ANIMATION_OPACITY_STEP_INCREMENT = 4.0;
var ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
const ANIMATION_OPACITY_STEP_INCREMENT = 4.0;
const ANIMATION_MIN_WAKEUP_INTERVAL = 1.0;
let _backgroundCache = null;
@@ -138,7 +138,7 @@ function _fileEqual0(file1, file2) {
return file1.equal(file2);
}
var BackgroundCache = new Lang.Class({
const BackgroundCache = new Lang.Class({
Name: 'BackgroundCache',
_init: function() {
@@ -226,7 +226,7 @@ function getBackgroundCache() {
return _backgroundCache;
}
var Background = new Lang.Class({
const Background = new Lang.Class({
Name: 'Background',
_init: function(params) {
@@ -488,7 +488,7 @@ Signals.addSignalMethods(Background.prototype);
let _systemBackground;
var SystemBackground = new Lang.Class({
const SystemBackground = new Lang.Class({
Name: 'SystemBackground',
_init: function() {
@@ -525,7 +525,7 @@ var SystemBackground = new Lang.Class({
});
Signals.addSignalMethods(SystemBackground.prototype);
var BackgroundSource = new Lang.Class({
const BackgroundSource = new Lang.Class({
Name: 'BackgroundSource',
_init: function(layoutManager, settingsSchema) {
@@ -613,7 +613,7 @@ var BackgroundSource = new Lang.Class({
}
});
var Animation = new Lang.Class({
const Animation = new Lang.Class({
Name: 'Animation',
_init: function(params) {
@@ -661,7 +661,7 @@ var Animation = new Lang.Class({
});
Signals.addSignalMethods(Animation.prototype);
var BackgroundManager = new Lang.Class({
const BackgroundManager = new Lang.Class({
Name: 'BackgroundManager',
_init: function(params) {

View File

@@ -9,7 +9,7 @@ const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
var BackgroundMenu = new Lang.Class({
const BackgroundMenu = new Lang.Class({
Name: 'BackgroundMenu',
Extends: PopupMenu.PopupMenu,

View File

@@ -10,14 +10,14 @@ const St = imports.gi.St;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
var PopupAnimation = {
const PopupAnimation = {
NONE: 0,
SLIDE: 1 << 0,
FADE: 1 << 1,
FULL: ~0,
};
var POPUP_ANIMATION_TIME = 0.15;
const POPUP_ANIMATION_TIME = 0.15;
/**
* BoxPointer:
@@ -32,7 +32,7 @@ var POPUP_ANIMATION_TIME = 0.15;
* totally inside the monitor if possible.
*
*/
var BoxPointer = new Lang.Class({
const BoxPointer = new Lang.Class({
Name: 'BoxPointer',
_init: function(arrowSide, binProperties) {

View File

@@ -16,15 +16,15 @@ const MessageTray = imports.ui.messageTray;
const Mpris = imports.ui.mpris;
const Util = imports.misc.util;
var MSECS_IN_DAY = 24 * 60 * 60 * 1000;
var SHOW_WEEKDATE_KEY = 'show-weekdate';
var ELLIPSIS_CHAR = '\u2026';
const MSECS_IN_DAY = 24 * 60 * 60 * 1000;
const SHOW_WEEKDATE_KEY = 'show-weekdate';
const ELLIPSIS_CHAR = '\u2026';
var MESSAGE_ICON_SIZE = 16;
const MESSAGE_ICON_SIZE = 16;
// alias to prevent xgettext from picking up strings translated in GTK+
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) {
return (dateA.getYear() == dateB.getYear());
@@ -92,7 +92,7 @@ function _getCalendarDayAbbreviation(dayNumber) {
// Abstraction for an appointment/event in a calendar
var CalendarEvent = new Lang.Class({
const CalendarEvent = new Lang.Class({
Name: 'CalendarEvent',
_init: function(id, date, end, summary, allDay) {
@@ -108,7 +108,7 @@ var CalendarEvent = new Lang.Class({
//
// First, an implementation with no events
var EmptyEventSource = new Lang.Class({
const EmptyEventSource = new Lang.Class({
Name: 'EmptyEventSource',
_init: function() {
@@ -179,7 +179,7 @@ function _dateIntervalsOverlap(a0, a1, b0, b1)
}
// an implementation that reads data from a session bus service
var DBusEventSource = new Lang.Class({
const DBusEventSource = new Lang.Class({
Name: 'DBusEventSource',
_init: function() {
@@ -366,7 +366,7 @@ var DBusEventSource = new Lang.Class({
});
Signals.addSignalMethods(DBusEventSource.prototype);
var Calendar = new Lang.Class({
const Calendar = new Lang.Class({
Name: 'Calendar',
_init: function() {
@@ -697,7 +697,7 @@ var Calendar = new Lang.Class({
});
Signals.addSignalMethods(Calendar.prototype);
var EventMessage = new Lang.Class({
const EventMessage = new Lang.Class({
Name: 'EventMessage',
Extends: MessageList.Message,
@@ -754,15 +754,15 @@ var EventMessage = new Lang.Class({
}
});
var NotificationMessage = new Lang.Class({
const NotificationMessage = new Lang.Class({
Name: 'NotificationMessage',
Extends: MessageList.Message,
_init: function(notification) {
this.notification = notification;
this.parent(notification.title, notification.bannerBodyText);
this.setUseBodyMarkup(notification.bannerBodyMarkup);
this.parent(notification.title, notification.bannerBodyText);
this.setIcon(this._getIcon());
@@ -810,7 +810,7 @@ var NotificationMessage = new Lang.Class({
}
});
var EventsSection = new Lang.Class({
const EventsSection = new Lang.Class({
Name: 'EventsSection',
Extends: MessageList.MessageListSection,
@@ -920,7 +920,7 @@ var EventsSection = new Lang.Class({
let app = this._getCalendarApp();
if (app.get_id() == 'evolution.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) {
@@ -941,7 +941,7 @@ var EventsSection = new Lang.Class({
}
});
var NotificationSection = new Lang.Class({
const NotificationSection = new Lang.Class({
Name: 'NotificationSection',
Extends: MessageList.MessageListSection,
@@ -1044,7 +1044,7 @@ var NotificationSection = new Lang.Class({
}
});
var Placeholder = new Lang.Class({
const Placeholder = new Lang.Class({
Name: 'Placeholder',
_init: function() {
@@ -1091,7 +1091,7 @@ var Placeholder = new Lang.Class({
}
});
var CalendarMessageList = new Lang.Class({
const CalendarMessageList = new Lang.Class({
Name: 'CalendarMessageList',
_init: function() {

View File

@@ -4,7 +4,7 @@ const St = imports.gi.St;
const Lang = imports.lang;
var CheckBox = new Lang.Class({
const CheckBox = new Lang.Class({
Name: 'CheckBox',
_init: function(label) {

View File

@@ -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();
}
});

View File

@@ -2,7 +2,7 @@
const Lang = imports.lang;
const Main = imports.ui.main;
var ComponentManager = new Lang.Class({
const ComponentManager = new Lang.Class({
Name: 'ComponentManager',
_init: function() {

View File

@@ -11,15 +11,15 @@ const GnomeSession = imports.misc.gnomeSession;
const Main = imports.ui.main;
const ShellMountOperation = imports.ui.shellMountOperation;
var GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
const GNOME_SESSION_AUTOMOUNT_INHIBIT = 16;
// GSettings keys
const SETTINGS_SCHEMA = 'org.gnome.desktop.media-handling';
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',
_init: function() {
@@ -242,4 +242,4 @@ var AutomountManager = new Lang.Class({
GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
}
});
var Component = AutomountManager;
const Component = AutomountManager;

View File

@@ -15,7 +15,7 @@ const SETTING_START_APP = 'autorun-x-content-start-app';
const SETTING_IGNORE = 'autorun-x-content-ignore';
const SETTING_OPEN_FOLDER = 'autorun-x-content-open-folder';
var AutorunSetting = {
const AutorunSetting = {
RUN: 0,
IGNORE: 1,
FILES: 2,
@@ -63,7 +63,8 @@ function startAppForMount(app, mount) {
try {
retval = app.launch(files,
global.create_app_launch_context(0, -1));
global.create_app_launch_context(0, -1),
false)
} catch (e) {
log('Unable to launch the application ' + app.get_name()
+ ': ' + e.toString());
@@ -90,7 +91,7 @@ function HotplugSniffer() {
'/org/gnome/Shell/HotplugSniffer');
}
var ContentTypeDiscoverer = new Lang.Class({
const ContentTypeDiscoverer = new Lang.Class({
Name: 'ContentTypeDiscoverer',
_init: function(callback) {
@@ -159,7 +160,7 @@ var ContentTypeDiscoverer = new Lang.Class({
}
});
var AutorunManager = new Lang.Class({
const AutorunManager = new Lang.Class({
Name: 'AutorunManager',
_init: function() {
@@ -196,7 +197,7 @@ var AutorunManager = new Lang.Class({
}
});
var AutorunDispatcher = new Lang.Class({
const AutorunDispatcher = new Lang.Class({
Name: 'AutorunDispatcher',
_init: function(manager) {
@@ -292,7 +293,7 @@ var AutorunDispatcher = new Lang.Class({
}
});
var AutorunSource = new Lang.Class({
const AutorunSource = new Lang.Class({
Name: 'AutorunSource',
Extends: MessageTray.Source,
@@ -319,7 +320,7 @@ var AutorunSource = new Lang.Class({
}
});
var AutorunNotification = new Lang.Class({
const AutorunNotification = new Lang.Class({
Name: 'AutorunNotification',
Extends: MessageTray.Notification,
@@ -378,4 +379,4 @@ var AutorunNotification = new Lang.Class({
}
});
var Component = AutorunManager;
const Component = AutorunManager;

View File

@@ -10,17 +10,16 @@ const GObject = imports.gi.GObject;
const Gcr = imports.gi.Gcr;
const Animation = imports.ui.animation;
const Dialog = imports.ui.dialog;
const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry;
const CheckBox = imports.ui.checkBox;
const Tweener = imports.ui.tweener;
var WORK_SPINNER_ICON_SIZE = 16;
var WORK_SPINNER_ANIMATION_DELAY = 1.0;
var WORK_SPINNER_ANIMATION_TIME = 0.3;
const WORK_SPINNER_ICON_SIZE = 16;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
var KeyringDialog = new Lang.Class({
const KeyringDialog = new Lang.Class({
Name: 'KeyringDialog',
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('prompt-close', Lang.bind(this, this._onHidePrompt));
let icon = new Gio.ThemedIcon({ name: 'dialog-password-symbolic' });
this._content = new Dialog.MessageDialogContent({ icon });
this.contentLayout.add(this._content);
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
this.contentLayout.add(mainContentBox);
// FIXME: Why does this break now?
/*
this.prompt.bind_property('message', this._content, 'title', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('description', this._content, 'body', GObject.BindingFlags.SYNC_CREATE);
*/
this.prompt.connect('notify::message', () => {
this._content.title = this.prompt.message;
});
this._content.title = this.prompt.message;
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 });
this.prompt.connect('notify::description', () => {
this._content.body = this.prompt.description;
});
this._content.body = this.prompt.description;
this._messageBox = new St.BoxLayout({ style_class: 'prompt-dialog-message-layout',
vertical: true });
mainContentBox.add(this._messageBox,
{ 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._controlTable = null;
@@ -182,7 +195,7 @@ var KeyringDialog = new Lang.Class({
}
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) {
@@ -258,7 +271,7 @@ var KeyringDialog = new Lang.Class({
},
});
var KeyringDummyDialog = new Lang.Class({
const KeyringDummyDialog = new Lang.Class({
Name: 'KeyringDummyDialog',
_init: function() {
@@ -274,7 +287,7 @@ var KeyringDummyDialog = new Lang.Class({
}
});
var KeyringPrompter = new Lang.Class({
const KeyringPrompter = new Lang.Class({
Name: 'KeyringPrompter',
_init: function() {
@@ -311,4 +324,4 @@ var KeyringPrompter = new Lang.Class({
}
});
var Component = KeyringPrompter;
const Component = KeyringPrompter;

View File

@@ -12,7 +12,6 @@ const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Config = imports.misc.config;
const Dialog = imports.ui.dialog;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const ModalDialog = imports.ui.modalDialog;
@@ -21,7 +20,7 @@ const ShellEntry = imports.ui.shellEntry;
const VPN_UI_GROUP = 'VPN Plugin UI';
var NetworkSecretDialog = new Lang.Class({
const NetworkSecretDialog = new Lang.Class({
Name: 'NetworkSecretDialog',
Extends: ModalDialog.ModalDialog,
@@ -39,12 +38,41 @@ var NetworkSecretDialog = new Lang.Class({
else
this._content = this._getContent();
let icon = new Gio.ThemedIcon({ name: 'dialog-password-symbolic' });
let contentParams = { icon,
title: this._content.title,
body: this._content.message };
let contentBox = new Dialog.MessageDialogContent(contentParams);
this.contentLayout.add_actor(contentBox);
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
this.contentLayout.add(mainContentBox,
{ x_fill: true,
y_fill: true });
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 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');
}
contentBox.messageBox.add(secretTable);
messageBox.add(secretTable);
this._okButton = { label: _("Connect"),
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',
_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',
_init: function() {
@@ -798,4 +826,4 @@ var NetworkAgent = new Lang.Class({
}
}
});
var Component = NetworkAgent;
const Component = NetworkAgent;

View File

@@ -15,35 +15,66 @@ const PolkitAgent = imports.gi.PolkitAgent;
const Animation = imports.ui.animation;
const Components = imports.ui.components;
const Dialog = imports.ui.dialog;
const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry;
const UserWidget = imports.ui.userWidget;
const Tweener = imports.ui.tweener;
var DIALOG_ICON_SIZE = 48;
const DIALOG_ICON_SIZE = 48;
var WORK_SPINNER_ICON_SIZE = 16;
var WORK_SPINNER_ANIMATION_DELAY = 1.0;
var WORK_SPINNER_ANIMATION_TIME = 0.3;
const WORK_SPINNER_ICON_SIZE = 16;
const WORK_SPINNER_ANIMATION_DELAY = 1.0;
const WORK_SPINNER_ANIMATION_TIME = 0.3;
var AuthenticationDialog = new Lang.Class({
const AuthenticationDialog = new Lang.Class({
Name: 'AuthenticationDialog',
Extends: ModalDialog.ModalDialog,
_init: function(actionId, body, cookie, userNames) {
_init: function(actionId, message, cookie, userNames) {
this.parent({ styleClass: 'prompt-dialog' });
this.actionId = actionId;
this.message = body;
this.message = message;
this.userNames = userNames;
this._wasDismissed = false;
let icon = new Gio.ThemedIcon({ name: 'dialog-password-symbolic' });
let title = _("Authentication Required");
let mainContentBox = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
this.contentLayout.add(mainContentBox,
{ x_fill: true,
y_fill: true });
let content = new Dialog.MessageDialogContent({ icon, title, body });
this.contentLayout.add_actor(content);
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,
{ 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) {
log('polkitAuthenticationAgent: Received ' + userNames.length +
@@ -74,12 +105,12 @@ var AuthenticationDialog = new Lang.Class({
if (userIsRoot) {
let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-root-label',
text: userRealName }));
content.messageBox.add(userLabel, { x_fill: false,
x_align: St.Align.START });
messageBox.add(userLabel, { x_fill: false,
x_align: St.Align.START });
} else {
let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
vertical: false });
content.messageBox.add(userBox);
messageBox.add(userBox);
this._userAvatar = new UserWidget.Avatar(this._user,
{ iconSize: DIALOG_ICON_SIZE,
styleClass: 'polkit-dialog-user-icon' });
@@ -101,7 +132,7 @@ var AuthenticationDialog = new Lang.Class({
this._onUserChanged();
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._passwordBox.add(this._passwordLabel, { y_fill: false, y_align: St.Align.MIDDLE });
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.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
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._infoMessageLabel = new St.Label({ style_class: 'prompt-dialog-info-label' });
this._infoMessageLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this._infoMessageLabel.clutter_text.line_wrap = true;
content.messageBox.add(this._infoMessageLabel);
messageBox.add(this._infoMessageLabel);
this._infoMessageLabel.hide();
/* 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.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
this._nullMessageLabel.clutter_text.line_wrap = true;
content.messageBox.add(this._nullMessageLabel);
messageBox.add(this._nullMessageLabel);
this._nullMessageLabel.show();
this._cancelButton = this.addButton({ label: _("Cancel"),
@@ -339,7 +370,7 @@ var AuthenticationDialog = new Lang.Class({
});
Signals.addSignalMethods(AuthenticationDialog.prototype);
var AuthenticationAgent = new Lang.Class({
const AuthenticationAgent = new Lang.Class({
Name: 'AuthenticationAgent',
_init: function() {
@@ -400,4 +431,4 @@ var AuthenticationAgent = new Lang.Class({
},
});
var Component = AuthenticationAgent;
const Component = AuthenticationAgent;

View File

@@ -29,25 +29,25 @@ const Util = imports.misc.util;
const HAVE_TP = (Tp != null && Tpl != null);
// See Notification.appendMessage
var SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
var SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
var SCROLLBACK_RECENT_LENGTH = 20;
var SCROLLBACK_IDLE_LENGTH = 5;
const SCROLLBACK_IMMEDIATE_TIME = 3 * 60; // 3 minutes
const SCROLLBACK_RECENT_TIME = 15 * 60; // 15 minutes
const SCROLLBACK_RECENT_LENGTH = 20;
const SCROLLBACK_IDLE_LENGTH = 5;
// See Source._displayPendingMessages
var SCROLLBACK_HISTORY_LINES = 10;
const SCROLLBACK_HISTORY_LINES = 10;
// 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',
RECEIVED: 'chat-received'
};
var N_ = function(s) { return s; };
const N_ = function(s) { return s; };
function makeMessageFromTpMessage(tpMessage, direction) {
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',
_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',
Extends: Tp.BaseClient,
@@ -280,7 +280,7 @@ var TelepathyClient = HAVE_TP ? new Lang.Class({
},
}) : null;
var ChatSource = new Lang.Class({
const ChatSource = new Lang.Class({
Name: 'ChatSource',
Extends: MessageTray.Source,
@@ -647,7 +647,7 @@ var ChatSource = new Lang.Class({
}
});
var ChatNotification = new Lang.Class({
const ChatNotification = new Lang.Class({
Name: 'ChatNotification',
Extends: MessageTray.Notification,
@@ -806,7 +806,7 @@ var ChatNotification = new Lang.Class({
}
});
var ChatLineBox = new Lang.Class({
const ChatLineBox = new Lang.Class({
Name: 'ChatLineBox',
Extends: St.BoxLayout,
@@ -816,7 +816,7 @@ var ChatLineBox = new Lang.Class({
}
});
var ChatNotificationBanner = new Lang.Class({
const ChatNotificationBanner = new Lang.Class({
Name: 'ChatNotificationBanner',
Extends: MessageTray.NotificationBanner,
@@ -996,4 +996,4 @@ var ChatNotificationBanner = new Lang.Class({
}
});
var Component = TelepathyComponent;
const Component = TelepathyComponent;

View File

@@ -12,16 +12,16 @@ const SwitcherPopup = imports.ui.switcherPopup;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
var POPUP_APPICON_SIZE = 96;
var POPUP_FADE_TIME = 0.1; // seconds
const POPUP_APPICON_SIZE = 96;
const POPUP_FADE_TIME = 0.1; // seconds
var SortGroup = {
const SortGroup = {
TOP: 0,
MIDDLE: 1,
BOTTOM: 2
};
var CtrlAltTabManager = new Lang.Class({
const CtrlAltTabManager = new Lang.Class({
Name: 'CtrlAltTabManager',
_init: function() {
@@ -136,7 +136,7 @@ var CtrlAltTabManager = new Lang.Class({
}
});
var CtrlAltTabPopup = new Lang.Class({
const CtrlAltTabPopup = new Lang.Class({
Name: 'CtrlAltTabPopup',
Extends: SwitcherPopup.SwitcherPopup,
@@ -167,7 +167,7 @@ var CtrlAltTabPopup = new Lang.Class({
},
});
var CtrlAltTabSwitcher = new Lang.Class({
const CtrlAltTabSwitcher = new Lang.Class({
Name: 'CtrlAltTabSwitcher',
Extends: SwitcherPopup.SwitcherList,

View File

@@ -18,10 +18,10 @@ const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
const Workspace = imports.ui.workspace;
var DASH_ANIMATION_TIME = 0.2;
var DASH_ITEM_LABEL_SHOW_TIME = 0.15;
var DASH_ITEM_LABEL_HIDE_TIME = 0.1;
var DASH_ITEM_HOVER_TIMEOUT = 300;
const DASH_ANIMATION_TIME = 0.2;
const DASH_ITEM_LABEL_SHOW_TIME = 0.15;
const DASH_ITEM_LABEL_HIDE_TIME = 0.1;
const DASH_ITEM_HOVER_TIMEOUT = 300;
function getAppFromSource(source) {
if (source instanceof AppDisplay.AppIcon) {
@@ -33,7 +33,7 @@ function getAppFromSource(source) {
// A container like StBin, but taking the child's scale into account
// when requesting a size
var DashItemContainer = new Lang.Class({
const DashItemContainer = new Lang.Class({
Name: 'DashItemContainer',
Extends: St.Widget,
@@ -235,7 +235,7 @@ var DashItemContainer = new Lang.Class({
}
});
var ShowAppsIcon = new Lang.Class({
const ShowAppsIcon = new Lang.Class({
Name: 'ShowAppsIcon',
Extends: DashItemContainer,
@@ -315,7 +315,7 @@ var ShowAppsIcon = new Lang.Class({
}
});
var DragPlaceholderItem = new Lang.Class({
const DragPlaceholderItem = new Lang.Class({
Name: 'DragPlaceholderItem',
Extends: DashItemContainer,
@@ -325,7 +325,7 @@ var DragPlaceholderItem = new Lang.Class({
}
});
var EmptyDropTargetItem = new Lang.Class({
const EmptyDropTargetItem = new Lang.Class({
Name: 'EmptyDropTargetItem',
Extends: DashItemContainer,
@@ -335,7 +335,7 @@ var EmptyDropTargetItem = new Lang.Class({
}
});
var DashActor = new Lang.Class({
const DashActor = new Lang.Class({
Name: 'DashActor',
Extends: St.Widget,
@@ -387,7 +387,7 @@ var DashActor = new Lang.Class({
const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ];
var Dash = new Lang.Class({
const Dash = new Lang.Class({
Name: 'Dash',
_init : function() {
@@ -756,44 +756,42 @@ var Dash = new Lang.Class({
let newIndex = 0;
let oldIndex = 0;
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
if (oldApp == newApp) {
if (oldApps[oldIndex] == newApps[newIndex]) {
oldIndex++;
newIndex++;
continue;
}
// App removed at oldIndex
if (oldApp && newApps.indexOf(oldApp) == -1) {
if (oldApps[oldIndex] &&
newApps.indexOf(oldApps[oldIndex]) == -1) {
removedActors.push(children[oldIndex]);
oldIndex++;
continue;
}
// App added at newIndex
if (newApp && oldApps.indexOf(newApp) == -1) {
addedItems.push({ app: newApp,
item: this._createAppItem(newApp),
if (newApps[newIndex] &&
oldApps.indexOf(newApps[newIndex]) == -1) {
addedItems.push({ app: newApps[newIndex],
item: this._createAppItem(newApps[newIndex]),
pos: newIndex });
newIndex++;
continue;
}
// App moved
let nextApp = newApps.length > newIndex + 1 ? newApps[newIndex + 1]
: null;
let insertHere = nextApp && nextApp == oldApp;
let insertHere = newApps[newIndex + 1] &&
newApps[newIndex + 1] == oldApps[oldIndex];
let alreadyRemoved = removedActors.reduce(function(result, actor) {
let removedApp = actor.child._delegate.app;
return result || removedApp == newApp;
return result || removedApp == newApps[newIndex];
}, false);
if (insertHere || alreadyRemoved) {
let newItem = this._createAppItem(newApp);
addedItems.push({ app: newApp,
let newItem = this._createAppItem(newApps[newIndex]);
addedItems.push({ app: newApps[newIndex],
item: newItem,
pos: newIndex + removedActors.length });
newIndex++;

View File

@@ -30,7 +30,7 @@ function _isToday(date) {
now.getDate() == date.getDate();
}
var TodayButton = new Lang.Class({
const TodayButton = new Lang.Class({
Name: 'TodayButton',
_init: function(calendar) {
@@ -84,7 +84,7 @@ var TodayButton = new Lang.Class({
}
});
var WorldClocksSection = new Lang.Class({
const WorldClocksSection = new Lang.Class({
Name: 'WorldClocksSection',
_init: function() {
@@ -194,7 +194,7 @@ var WorldClocksSection = new Lang.Class({
}
});
var WeatherSection = new Lang.Class({
const WeatherSection = new Lang.Class({
Name: 'WeatherSection',
_init: function() {
@@ -324,7 +324,7 @@ var WeatherSection = new Lang.Class({
}
});
var MessagesIndicator = new Lang.Class({
const MessagesIndicator = new Lang.Class({
Name: 'MessagesIndicator',
_init: function() {
@@ -364,7 +364,7 @@ var MessagesIndicator = new Lang.Class({
}
});
var IndicatorPad = new Lang.Class({
const IndicatorPad = new Lang.Class({
Name: 'IndicatorPad',
Extends: St.Widget,
@@ -387,7 +387,7 @@ var IndicatorPad = new Lang.Class({
}
});
var FreezableBinLayout = new Lang.Class({
const FreezableBinLayout = new Lang.Class({
Name: 'FreezableBinLayout',
Extends: Clutter.BinLayout,
@@ -429,7 +429,7 @@ var FreezableBinLayout = new Lang.Class({
}
});
var CalendarColumnLayout = new Lang.Class({
const CalendarColumnLayout = new Lang.Class({
Name: 'CalendarColumnLayout',
Extends: Clutter.BoxLayout,
@@ -445,7 +445,7 @@ var CalendarColumnLayout = new Lang.Class({
}
});
var DateMenuButton = new Lang.Class({
const DateMenuButton = new Lang.Class({
Name: 'DateMenuButton',
Extends: PanelMenu.Button,
@@ -474,8 +474,6 @@ var DateMenuButton = new Lang.Class({
let layout = new FreezableBinLayout();
let bin = new St.Widget({ layout_manager: layout });
// For some minimal compatibility with PopupMenuItem
bin._delegate = this;
this.menu.box.add_child(bin);
hbox = new St.BoxLayout({ name: 'calendarArea' });

View File

@@ -1,231 +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._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;
},
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._initialKeyFocusDestroyId)
this._initialKeyFocus = 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);
}
});

View File

@@ -14,26 +14,26 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
// 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
var SNAP_BACK_ANIMATION_TIME = 0.25;
const SNAP_BACK_ANIMATION_TIME = 0.25;
// 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,
COPY_DROP: 1,
MOVE_DROP: 2,
CONTINUE: 3
};
var DRAG_CURSOR_MAP = {
const DRAG_CURSOR_MAP = {
0: Meta.Cursor.DND_UNSUPPORTED_TARGET,
1: Meta.Cursor.DND_COPY,
2: Meta.Cursor.DND_MOVE
};
var DragDropResult = {
const DragDropResult = {
FAILURE: 0,
SUCCESS: 1,
CONTINUE: 2
@@ -69,7 +69,7 @@ function removeDragMonitor(monitor) {
}
}
var _Draggable = new Lang.Class({
const _Draggable = new Lang.Class({
Name: 'Draggable',
_init : function(actor, params) {

View File

@@ -8,10 +8,10 @@ const St = imports.gi.St;
const Main = imports.ui.main;
var EDGE_THRESHOLD = 20;
var DRAG_DISTANCE = 80;
const EDGE_THRESHOLD = 20;
const DRAG_DISTANCE = 80;
var EdgeDragAction = new Lang.Class({
const EdgeDragAction = new Lang.Class({
Name: 'EdgeDragAction',
Extends: Clutter.GestureAction,
Signals: { 'activated': {} },

View File

@@ -41,7 +41,7 @@ let _endSessionDialog = null;
const _ITEM_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> \
<interface name="org.gnome.SessionManager.EndSessionDialog"> \
@@ -166,7 +166,7 @@ const DialogContent = {
4 /* DialogType.UPGRADE_RESTART */: restartUpgradeDialogContent
};
var MAX_USERS_IN_SESSION_DIALOG = 5;
const MAX_USERS_IN_SESSION_DIALOG = 5;
const LogindSessionIface = '<node> \
<interface name="org.freedesktop.login1.Session"> \
@@ -275,7 +275,7 @@ function init() {
_endSessionDialog = new EndSessionDialog();
}
var EndSessionDialog = new Lang.Class({
const EndSessionDialog = new Lang.Class({
Name: 'EndSessionDialog',
Extends: ModalDialog.ModalDialog,

View File

@@ -10,7 +10,7 @@ imports.gi.versions.Gtk = '3.0';
imports.gi.versions.TelepathyGLib = '0.12';
imports.gi.versions.TelepathyLogger = '0.2';
const Clutter = imports.gi.Clutter;
const Clutter = imports.gi.Clutter;;
const Gettext = imports.gettext;
const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk;

View File

@@ -17,10 +17,10 @@ const ModalDialog = imports.ui.modalDialog;
const _signals = ExtensionSystem._signals;
var REPOSITORY_URL_BASE = 'https://extensions.gnome.org';
var REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
var REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
var REPOSITORY_URL_UPDATE = REPOSITORY_URL_BASE + '/update-info/';
const REPOSITORY_URL_BASE = 'https://extensions.gnome.org';
const REPOSITORY_URL_DOWNLOAD = REPOSITORY_URL_BASE + '/download-extension/%s.shell-extension.zip';
const REPOSITORY_URL_INFO = REPOSITORY_URL_BASE + '/extension-info/';
const REPOSITORY_URL_UPDATE = REPOSITORY_URL_BASE + '/update-info/';
let _httpSession;
@@ -130,14 +130,12 @@ function updateExtension(uuid) {
FileUtils.recursivelyMoveDir(extensionDir, oldExtensionTmpDir);
FileUtils.recursivelyMoveDir(newExtensionTmpDir, extensionDir);
let extension = null;
let extension = ExtensionUtils.createExtensionObject(uuid, extensionDir, ExtensionUtils.ExtensionType.PER_USER);
try {
extension = ExtensionUtils.createExtensionObject(uuid, extensionDir, ExtensionUtils.ExtensionType.PER_USER);
ExtensionSystem.loadExtension(extension);
} catch(e) {
if (extension)
ExtensionSystem.unloadExtension(extension);
ExtensionSystem.unloadExtension(extension);
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',
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 box = new St.BoxLayout({ style_class: 'message-dialog-main-layout',
let box = new St.BoxLayout({ style_class: 'prompt-dialog-main-layout',
vertical: false });
this.contentLayout.add(box);
@@ -213,7 +211,7 @@ var InstallExtensionDialog = new Lang.Class({
let icon = new St.Icon({ gicon: gicon });
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 });
box.add(label);
},
@@ -244,8 +242,9 @@ var InstallExtensionDialog = new Lang.Class({
global.settings.set_strv(ExtensionSystem.ENABLED_EXTENSIONS_KEY, enabledExtensions);
}
let extension = ExtensionUtils.createExtensionObject(uuid, dir, ExtensionUtils.ExtensionType.PER_USER);
try {
let extension = ExtensionUtils.createExtensionObject(uuid, dir, ExtensionUtils.ExtensionType.PER_USER);
ExtensionSystem.loadExtension(extension);
} catch(e) {
uninstallExtension(uuid);

View File

@@ -10,7 +10,7 @@ const St = imports.gi.St;
const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main;
var ExtensionState = {
const ExtensionState = {
ENABLED: 1,
DISABLED: 2,
ERROR: 3,
@@ -26,7 +26,7 @@ var ExtensionState = {
// Arrays of uuids
var enabledExtensions;
// 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
// a simple dummy object, add the signal methods, and export those
@@ -34,8 +34,8 @@ var extensionOrder = [];
var _signals = {};
Signals.addSignalMethods(_signals);
var connect = Lang.bind(_signals, _signals.connect);
var disconnect = Lang.bind(_signals, _signals.disconnect);
const connect = Lang.bind(_signals, _signals.connect);
const disconnect = Lang.bind(_signals, _signals.disconnect);
const ENABLED_EXTENSIONS_KEY = 'enabled-extensions';
const DISABLE_USER_EXTENSIONS_KEY = 'disable-user-extensions';
@@ -199,14 +199,7 @@ function reloadExtension(oldExtension) {
unloadExtension(oldExtension);
// Now, recreate the extension and load it.
let newExtension;
try {
newExtension = ExtensionUtils.createExtensionObject(uuid, dir, type);
} catch(e) {
logExtensionError(uuid, e);
return;
}
let newExtension = ExtensionUtils.createExtensionObject(uuid, dir, type);
loadExtension(newExtension);
}
@@ -218,21 +211,14 @@ function initExtension(uuid) {
throw new Error("Extension was not properly created. Call loadExtension first");
let extensionJs = dir.get_child('extension.js');
if (!extensionJs.query_exists(null)) {
logExtensionError(uuid, new Error('Missing extension.js'));
return false;
}
if (!extensionJs.query_exists(null))
throw new Error('Missing extension.js');
let extensionModule;
let extensionState = null;
ExtensionUtils.installImporter(extension);
try {
extensionModule = extension.imports.extension;
} catch(e) {
logExtensionError(uuid, e);
return false;
}
extensionModule = extension.imports.extension;
if (extensionModule.init) {
try {
@@ -296,12 +282,20 @@ function _onVersionValidationChanged() {
// temporarily disable them all
enabledExtensions = [];
for (let uuid in ExtensionUtils.extensions)
reloadExtension(ExtensionUtils.extensions[uuid]);
try {
reloadExtension(ExtensionUtils.extensions[uuid]);
} catch(e) {
logExtensionError(uuid, e);
}
enabledExtensions = getEnabledExtensions();
if (Main.sessionMode.allowExtensions) {
enabledExtensions.forEach(function(uuid) {
enableExtension(uuid);
try {
enableExtension(uuid);
} catch(e) {
logExtensionError(uuid, e);
}
});
}
}

View File

@@ -28,7 +28,7 @@ const Signals = imports.signals;
const CARETMOVED = 'object:text-caret-moved';
const STATECHANGED = 'object:state-changed';
var FocusCaretTracker = new Lang.Class({
const FocusCaretTracker = new Lang.Class({
Name: 'FocusCaretTracker',
_init: function() {
@@ -47,27 +47,30 @@ var FocusCaretTracker = new Lang.Class({
},
_initAtspi: function() {
if (!this._atspiInited && Atspi.init() == 0) {
if (!this._atspiInited) {
Atspi.init();
Atspi.set_timeout(250, 250);
this._atspiInited = true;
}
return this._atspiInited;
},
registerFocusListener: function() {
if (!this._initAtspi() || this._focusListenerRegistered)
if (this._focusListenerRegistered)
return;
this._initAtspi();
this._atspiListener.register(STATECHANGED + ':focused');
this._atspiListener.register(STATECHANGED + ':selected');
this._focusListenerRegistered = true;
},
registerCaretListener: function() {
if (!this._initAtspi() || this._caretListenerRegistered)
if (this._caretListenerRegistered)
return;
this._initAtspi();
this._atspiListener.register(CARETMOVED);
this._caretListenerRegistered = true;
},

View File

@@ -46,7 +46,7 @@ function _popGrabHelper(grabHelper) {
// 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
// call grab().
var GrabHelper = new Lang.Class({
const GrabHelper = new Lang.Class({
Name: 'GrabHelper',
_init: function(owner, params) {

View File

@@ -9,12 +9,12 @@ const St = imports.gi.St;
const BoxPointer = imports.ui.boxpointer;
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',
'9', '0', 'a', 'b', 'c', 'd', 'e', 'f' ];
const DEFAULT_INDEX_LABELS = [ '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0', 'a', 'b', 'c', 'd', 'e', 'f' ];
var CandidateArea = new Lang.Class({
const CandidateArea = new Lang.Class({
Name: 'CandidateArea',
_init: function() {
@@ -128,7 +128,7 @@ var CandidateArea = new Lang.Class({
});
Signals.addSignalMethods(CandidateArea.prototype);
var CandidatePopup = new Lang.Class({
const CandidatePopup = new Lang.Class({
Name: 'CandidatePopup',
_init: function() {

View File

@@ -12,29 +12,29 @@ const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
const Main = imports.ui.main;
var ICON_SIZE = 96;
var MIN_ICON_SIZE = 16;
const ICON_SIZE = 96;
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;
var ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN;
var ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * ANIMATION_TIME_IN;
var ANIMATION_BASE_DELAY_FOR_ITEM = 1/4 * ANIMATION_MAX_DELAY_FOR_ITEM;
var 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_TIME_IN = 0.350;
const ANIMATION_TIME_OUT = 1/2 * ANIMATION_TIME_IN;
const ANIMATION_MAX_DELAY_FOR_ITEM = 2/3 * ANIMATION_TIME_IN;
const ANIMATION_BASE_DELAY_FOR_ITEM = 1/4 * ANIMATION_MAX_DELAY_FOR_ITEM;
const ANIMATION_MAX_DELAY_OUT_FOR_ITEM = 2/3 * ANIMATION_TIME_OUT;
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,
OUT: 1
};
var APPICON_ANIMATION_OUT_SCALE = 3;
var APPICON_ANIMATION_OUT_TIME = 0.25;
const APPICON_ANIMATION_OUT_SCALE = 3;
const APPICON_ANIMATION_OUT_TIME = 0.25;
var BaseIcon = new Lang.Class({
const BaseIcon = new Lang.Class({
Name: 'BaseIcon',
_init : function(label, params) {
@@ -240,7 +240,7 @@ function zoomOutActor(actor) {
});
}
var IconGrid = new Lang.Class({
const IconGrid = new Lang.Class({
Name: 'IconGrid',
_init: function(params) {
@@ -267,7 +267,6 @@ var IconGrid = new Lang.Class({
this.actor = new St.BoxLayout({ style_class: 'icon-grid',
vertical: true });
this._items = [];
this._clonesAnimating = [];
// Pulled from CSS, but hardcode some defaults here
this._spacing = 0;
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.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-height', Lang.bind(this, this._getPreferredHeight));
this._grid.connect('allocate', Lang.bind(this, this._allocate));
@@ -418,13 +410,8 @@ var IconGrid = new Lang.Class({
return this._getVisibleChildren();
},
_cancelAnimation: function() {
this._clonesAnimating.forEach(clone => { clone.destroy(); });
this._clonesAnimating = [];
},
_animationDone: function() {
this._clonesAnimating = [];
this._animating = false;
this.emit('animation-done');
},
@@ -432,7 +419,10 @@ var IconGrid = new Lang.Class({
if (animationDirection != AnimationDirection.IN)
throw new Error("Pulse animation only implements 'in' animation direction");
this._cancelAnimation();
if (this._animating)
return;
this._animating = true;
let actors = this._getChildrenToAnimate();
if (actors.length == 0) {
@@ -480,7 +470,10 @@ var IconGrid = new Lang.Class({
},
animateSpring: function(animationDirection, sourceActor) {
this._cancelAnimation();
if (this._animating)
return;
this._animating = true;
let actors = this._getChildrenToAnimate();
if (actors.length == 0) {
@@ -514,7 +507,6 @@ var IconGrid = new Lang.Class({
actor.reactive = false;
let actorClone = new Clutter.Clone({ source: actor });
this._clonesAnimating.push(actorClone);
Main.uiGroup.add_actor(actorClone);
let [width, height,,] = this._getAllocatedChildSizeAndSpacing(actor);
@@ -798,7 +790,7 @@ var IconGrid = new Lang.Class({
});
Signals.addSignalMethods(IconGrid.prototype);
var PaginatedIconGrid = new Lang.Class({
const PaginatedIconGrid = new Lang.Class({
Name: 'PaginatedIconGrid',
Extends: IconGrid,

View File

@@ -19,7 +19,7 @@ const Layout = imports.ui.layout;
const Main = imports.ui.main;
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_TYPE = 'keyboard-type';
@@ -27,7 +27,7 @@ const KEYBOARD_TYPE = 'keyboard-type';
const A11Y_APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
const SHOW_KEYBOARD = 'screen-keyboard-enabled';
var Key = new Lang.Class({
const Key = new Lang.Class({
Name: 'Key',
_init : function(key) {
@@ -153,7 +153,7 @@ var Key = new Lang.Class({
});
Signals.addSignalMethods(Key.prototype);
var Keyboard = new Lang.Class({
const Keyboard = new Lang.Class({
Name: 'Keyboard',
_init: function () {
@@ -171,7 +171,8 @@ var Keyboard = new Lang.Class({
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
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;
Caribou.DisplayAdapter.set_default(new LocalAdapter());
@@ -183,7 +184,7 @@ var Keyboard = new Lang.Class({
if (device.get_device_name().indexOf('XTEST') < 0) {
this._lastDeviceId = deviceId;
this._syncEnabled();
this._sync();
}
}));
this._sync();
@@ -304,32 +305,24 @@ var Keyboard = new Lang.Class({
return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE;
},
_syncEnabled: function () {
_sync: function () {
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD) ||
this._lastDeviceIsTouchscreen();
if (!this._enableKeyboard && !this._keyboard)
return;
if (this._enableKeyboard && this._keyboard &&
this._keyboard.keyboard_type == this._keyboardSettings.get_string(KEYBOARD_TYPE))
return;
this._setCaretTrackerEnabled(this._enableKeyboard);
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)) {
if (this._keyboard)
this._destroyKeyboard();
this._setupKeyboard();
}
this._syncEnabled();
if (this._enableKeyboard)
this._setupKeyboard();
else
Main.layoutManager.hideKeyboard(true);
},
_destroyKeyboard: function() {
@@ -346,6 +339,15 @@ var Keyboard = new Lang.Class({
this.actor = null;
this._destroySource();
if (this._daemonProxy) {
this._daemonProxy.QuitRemote(function (result, error) {
if (error) {
log(error.message);
return;
}
});
this._daemonProxy = null;
}
},
_setupKeyboard: function() {
@@ -605,7 +607,7 @@ var Keyboard = new Lang.Class({
shouldTakeEvent: function(event) {
let actor = event.get_source();
return Main.layoutManager.keyboardBox.contains(actor) ||
!!actor._extended_keys || !!actor.extended_key;
actor._extended_keys || actor.extended_key;
},
_clearKeyboardRestTimer: function() {
@@ -729,7 +731,7 @@ var Keyboard = new Lang.Class({
},
});
var KeyboardSource = new Lang.Class({
const KeyboardSource = new Lang.Class({
Name: 'KeyboardSource',
Extends: MessageTray.Source,
@@ -750,7 +752,7 @@ var KeyboardSource = new Lang.Class({
}
});
var LocalAdapter = new Lang.Class({
const LocalAdapter = new Lang.Class({
Name: 'LocalAdapter',
Extends: Caribou.XAdapter,

View File

@@ -18,12 +18,12 @@ const Main = imports.ui.main;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
var STARTUP_ANIMATION_TIME = 0.5;
var KEYBOARD_ANIMATION_TIME = 0.15;
var BACKGROUND_FADE_ANIMATION_TIME = 1.0;
const STARTUP_ANIMATION_TIME = 0.5;
const KEYBOARD_ANIMATION_TIME = 0.15;
const BACKGROUND_FADE_ANIMATION_TIME = 1.0;
var HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
var HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
const HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
const HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
function isPopupMetaWindow(actor) {
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',
Extends: Clutter.Constraint,
Properties: {'primary': GObject.ParamSpec.boolean('primary',
@@ -147,7 +147,7 @@ var MonitorConstraint = new Lang.Class({
}
});
var Monitor = new Lang.Class({
const Monitor = new Lang.Class({
Name: 'Monitor',
_init: function(index, geometry) {
@@ -169,7 +169,7 @@ const defaultParams = {
affectsInputRegion: true
};
var LayoutManager = new Lang.Class({
const LayoutManager = new Lang.Class({
Name: 'LayoutManager',
_init: function () {
@@ -769,7 +769,8 @@ var LayoutManager = new Lang.Class({
// @actor: a descendant of the chrome to begin tracking
// @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.
//
// @params can have any of the same values as in addChrome(),
@@ -782,9 +783,10 @@ var LayoutManager = new Lang.Class({
ancestor = ancestor.get_parent();
index = this._findActor(ancestor);
}
if (!ancestor)
throw new Error('actor is not a descendent of a chrome actor');
let ancestorData = ancestor ? this._trackedActors[index]
: defaultParams;
let ancestorData = this._trackedActors[index];
if (!params)
params = {};
// We can't use Params.parse here because we want to drop
@@ -894,10 +896,7 @@ var LayoutManager = new Lang.Class({
},
findMonitorForActor: function(actor) {
let index = this.findIndexForActor(actor);
if (index >= 0 && index < this.monitors.length)
return this.monitors[index];
return null;
return this.monitors[this.findIndexForActor(actor)];
},
_queueUpdateRegions: function() {
@@ -967,11 +966,7 @@ var LayoutManager = new Lang.Class({
if (actorData.affectsInputRegion && wantsInputRegion && actorData.actor.get_paint_visibility())
rects.push(new Meta.Rectangle({ x: x, y: y, width: w, height: h }));
let monitor = null;
if (actorData.affectsStruts)
monitor = this.findMonitorForActor(actorData.actor);
if (monitor) {
if (actorData.affectsStruts) {
// Limit struts to the size of the screen
let x1 = Math.max(x, 0);
let x2 = Math.min(x + w, global.screen_width);
@@ -988,6 +983,7 @@ var LayoutManager = new Lang.Class({
// spans the width/height across the middle of the
// screen, then we don't create a strut for it at all.
let monitor = this.findMonitorForActor(actorData.actor);
let side;
if (x1 <= monitor.x && x2 >= monitor.x + monitor.width) {
if (y1 <= monitor.y)
@@ -1045,7 +1041,7 @@ Signals.addSignalMethods(LayoutManager.prototype);
//
// This class manages a "hot corner" that can toggle switching to
// overview.
var HotCorner = new Lang.Class({
const HotCorner = new Lang.Class({
Name: 'HotCorner',
_init : function(layoutManager, monitor, x, y) {
@@ -1239,7 +1235,7 @@ var HotCorner = new Lang.Class({
}
});
var PressureBarrier = new Lang.Class({
const PressureBarrier = new Lang.Class({
Name: 'PressureBarrier',
_init: function(threshold, timeout, actionMode) {

View File

@@ -13,7 +13,7 @@ const Overview = imports.ui.overview;
const OverviewControls = imports.ui.overviewControls;
const Tweener = imports.ui.tweener;
var STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
const STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
'bluetooth-applet': 'bluetooth',
'gnome-volume-control-applet': 'volume', // renamed to gnome-sound-applet
// when moved to control center
@@ -29,14 +29,14 @@ var STANDARD_TRAY_ICON_IMPLEMENTATIONS = {
};
// Offset of the original position from the bottom-right corner
var CONCEALED_WIDTH = 3;
var REVEAL_ANIMATION_TIME = 0.2;
var TEMP_REVEAL_TIME = 2;
const CONCEALED_WIDTH = 3;
const REVEAL_ANIMATION_TIME = 0.2;
const TEMP_REVEAL_TIME = 2;
var BARRIER_THRESHOLD = 70;
var BARRIER_TIMEOUT = 1000;
const BARRIER_THRESHOLD = 70;
const BARRIER_TIMEOUT = 1000;
var LegacyTray = new Lang.Class({
const LegacyTray = new Lang.Class({
Name: 'LegacyTray',
_init: function() {

View File

@@ -10,9 +10,9 @@ const Shell = imports.gi.Shell;
const Params = imports.misc.params;
const Tweener = imports.ui.tweener;
var DEFAULT_FADE_FACTOR = 0.4;
var VIGNETTE_BRIGHTNESS = 0.8;
var VIGNETTE_SHARPNESS = 0.7;
const DEFAULT_FADE_FACTOR = 0.4;
const VIGNETTE_BRIGHTNESS = 0.8;
const VIGNETTE_SHARPNESS = 0.7;
const VIGNETTE_DECLARATIONS = '\
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\
cogl_color_out.a = cogl_color_out.a * (1 - pixel_brightness * brightness);';
var RadialShaderQuad = new Lang.Class({
const RadialShaderQuad = new Lang.Class({
Name: 'RadialShaderQuad',
Extends: Shell.GLSLQuad,
@@ -91,7 +91,7 @@ var RadialShaderQuad = new Lang.Class({
* @container and will track any changes in its size. You can override
* this by passing an explicit width and height in @params.
*/
var Lightbox = new Lang.Class({
const Lightbox = new Lang.Class({
Name: 'Lightbox',
_init : function(container, params) {

View File

@@ -46,9 +46,9 @@ var commandHeader = 'const Clutter = imports.gi.Clutter; ' +
const HISTORY_KEY = 'looking-glass-history';
// Time between tabs for them to count as a double-tab event
var AUTO_COMPLETE_DOUBLE_TAB_DELAY = 500;
var AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION = 0.2;
var AUTO_COMPLETE_GLOBAL_KEYWORDS = _getAutoCompleteGlobalKeywords();
const AUTO_COMPLETE_DOUBLE_TAB_DELAY = 500;
const AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION = 0.2;
const AUTO_COMPLETE_GLOBAL_KEYWORDS = _getAutoCompleteGlobalKeywords();
function _getAutoCompleteGlobalKeywords() {
const keywords = ['true', 'false', 'null', 'new'];
@@ -59,7 +59,7 @@ function _getAutoCompleteGlobalKeywords() {
return keywords.concat(windowProperties).concat(headerProperties);
}
var AutoComplete = new Lang.Class({
const AutoComplete = new Lang.Class({
Name: 'AutoComplete',
_init: function(entry) {
@@ -125,7 +125,7 @@ var AutoComplete = new Lang.Class({
Signals.addSignalMethods(AutoComplete.prototype);
var Notebook = new Lang.Class({
const Notebook = new Lang.Class({
Name: 'Notebook',
_init: function() {
@@ -263,7 +263,7 @@ function objectToString(o) {
}
}
var ObjLink = new Lang.Class({
const ObjLink = new Lang.Class({
Name: 'ObjLink',
_init: function(lookingGlass, o, title) {
@@ -290,7 +290,7 @@ var ObjLink = new Lang.Class({
}
});
var Result = new Lang.Class({
const Result = new Lang.Class({
Name: 'Result',
_init: function(lookingGlass, command, o, index) {
@@ -313,7 +313,7 @@ var Result = new Lang.Class({
}
});
var WindowList = new Lang.Class({
const WindowList = new Lang.Class({
Name: 'WindowList',
_init: function(lookingGlass) {
@@ -361,7 +361,7 @@ var WindowList = new Lang.Class({
});
Signals.addSignalMethods(WindowList.prototype);
var ObjInspector = new Lang.Class({
const ObjInspector = new Lang.Class({
Name: 'ObjInspector',
_init: function(lookingGlass) {
@@ -471,7 +471,7 @@ var ObjInspector = new Lang.Class({
}
});
var RedBorderEffect = new Lang.Class({
const RedBorderEffect = new Lang.Class({
Name: 'RedBorderEffect',
Extends: Clutter.Effect,
@@ -497,7 +497,7 @@ var RedBorderEffect = new Lang.Class({
},
});
var Inspector = new Lang.Class({
const Inspector = new Lang.Class({
Name: 'Inspector',
_init: function(lookingGlass) {
@@ -631,7 +631,7 @@ var Inspector = new Lang.Class({
Signals.addSignalMethods(Inspector.prototype);
var Extensions = new Lang.Class({
const Extensions = new Lang.Class({
Name: 'Extensions',
_init: function(lookingGlass) {
@@ -774,7 +774,7 @@ var Extensions = new Lang.Class({
}
});
var LookingGlass = new Lang.Class({
const LookingGlass = new Lang.Class({
Name: 'LookingGlass',
_init : function() {
@@ -783,7 +783,6 @@ var LookingGlass = new Lang.Class({
this._open = false;
this._it = null;
this._offset = 0;
this._results = [];

View File

@@ -19,11 +19,11 @@ const MagnifierDBus = imports.ui.magnifierDBus;
const Params = imports.misc.params;
const PointerWatcher = imports.ui.pointerWatcher;
var MOUSE_POLL_FREQUENCY = 50;
var CROSSHAIRS_CLIP_SIZE = [100, 100];
var NO_CHANGE = 0.0;
const MOUSE_POLL_FREQUENCY = 50;
const CROSSHAIRS_CLIP_SIZE = [100, 100];
const NO_CHANGE = 0.0;
var POINTER_REST_TIME = 1000; // milliseconds
const POINTER_REST_TIME = 1000; // milliseconds
// Settings
const APPLICATIONS_SCHEMA = 'org.gnome.desktop.a11y.applications';
@@ -54,7 +54,7 @@ const CROSS_HAIRS_CLIP_KEY = 'cross-hairs-clip';
let magDBusService = null;
var Magnifier = new Lang.Class({
const Magnifier = new Lang.Class({
Name: 'Magnifier',
_init: function() {
@@ -672,7 +672,7 @@ var Magnifier = new Lang.Class({
});
Signals.addSignalMethods(Magnifier.prototype);
var ZoomRegion = new Lang.Class({
const ZoomRegion = new Lang.Class({
Name: 'ZoomRegion',
_init: function(magnifier, mouseSourceActor) {
@@ -1536,7 +1536,7 @@ var ZoomRegion = new Lang.Class({
}
});
var Crosshairs = new Lang.Class({
const Crosshairs = new Lang.Class({
Name: 'Crosshairs',
_init: function() {
@@ -1781,7 +1781,7 @@ var Crosshairs = new Lang.Class({
}
});
var MagShaderEffects = new Lang.Class({
const MagShaderEffects = new Lang.Class({
Name: 'MagShaderEffects',
_init: function(uiGroupClone) {

View File

@@ -98,7 +98,7 @@ const ZoomRegionIface = '<node> \
// '/org/gnome/Magnifier/ZoomRegion/zoomer1', etc.
let _zoomRegionInstanceCount = 0;
var ShellMagnifier = new Lang.Class({
const ShellMagnifier = new Lang.Class({
Name: 'ShellMagnifier',
_init: function() {
@@ -334,7 +334,7 @@ var ShellMagnifier = new Lang.Class({
* @zoomerObjectPath: String that is the path to a DBus ZoomRegion.
* @zoomRegion: The actual zoom region associated with the object path.
*/
var ShellMagnifierZoomRegion = new Lang.Class({
const ShellMagnifierZoomRegion = new Lang.Class({
Name: 'ShellMagnifierZoomRegion',
_init: function(zoomerObjectPath, zoomRegion) {

View File

@@ -50,36 +50,36 @@ const A11Y_SCHEMA = 'org.gnome.desktop.a11y.keyboard';
const STICKY_KEYS_ENABLE = 'stickykeys-enable';
const GNOMESHELL_STARTED_MESSAGE_ID = 'f3ea493c22934e26811cd62abe8e203a';
var componentManager = null;
var panel = null;
var overview = null;
var runDialog = null;
var lookingGlass = null;
var wm = null;
var legacyTray = null;
var messageTray = null;
var screenShield = null;
var notificationDaemon = null;
var windowAttentionHandler = null;
var ctrlAltTabManager = null;
var padOsdService = null;
var osdWindowManager = null;
var osdMonitorLabeler = null;
var sessionMode = null;
var shellAccessDialogDBusService = null;
var shellAudioSelectionDBusService = null;
var shellDBusService = null;
var shellMountOpDBusService = null;
var screenSaverDBus = null;
var screencastService = null;
var modalCount = 0;
var actionMode = Shell.ActionMode.NONE;
var modalActorFocusStack = [];
var uiGroup = null;
var magnifier = null;
var xdndHandler = null;
var keyboard = null;
var layoutManager = null;
let componentManager = null;
let panel = null;
let overview = null;
let runDialog = null;
let lookingGlass = null;
let wm = null;
let legacyTray = null;
let messageTray = null;
let screenShield = null;
let notificationDaemon = null;
let windowAttentionHandler = null;
let ctrlAltTabManager = null;
let padOsdService = null;
let osdWindowManager = null;
let osdMonitorLabeler = null;
let sessionMode = null;
let shellAccessDialogDBusService = null;
let shellAudioSelectionDBusService = null;
let shellDBusService = null;
let shellMountOpDBusService = null;
let screenSaverDBus = null;
let screencastService = null;
let modalCount = 0;
let actionMode = Shell.ActionMode.NONE;
let modalActorFocusStack = [];
let uiGroup = null;
let magnifier = null;
let xdndHandler = null;
let keyboard = null;
let layoutManager = null;
let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
@@ -552,7 +552,7 @@ function activateWindow(window, time, workspaceNum) {
// TODO - replace this timeout with some system to guess when the user might
// be e.g. just reading the screen and not likely to interact.
var DEFERRED_TIMEOUT_SECONDS = 20;
const DEFERRED_TIMEOUT_SECONDS = 20;
var _deferredWorkData = {};
// Work scheduled for some point in the future
var _deferredWorkQueue = [];
@@ -669,7 +669,7 @@ function queueDeferredWork(workId) {
}
}
var RestartMessage = new Lang.Class({
const RestartMessage = new Lang.Class({
Name: 'RestartMessage',
Extends: ModalDialog.ModalDialog,

View File

@@ -15,9 +15,9 @@ const Calendar = imports.ui.calendar;
const Tweener = imports.ui.tweener;
const Util = imports.misc.util;
var MESSAGE_ANIMATION_TIME = 0.1;
const MESSAGE_ANIMATION_TIME = 0.1;
var DEFAULT_EXPAND_LINES = 6;
const DEFAULT_EXPAND_LINES = 6;
function _fixMarkup(text, allowMarkup) {
if (allowMarkup) {
@@ -39,7 +39,7 @@ function _fixMarkup(text, allowMarkup) {
return GLib.markup_escape_text(text, -1);
}
var URLHighlighter = new Lang.Class({
const URLHighlighter = new Lang.Class({
Name: 'URLHighlighter',
_init: function(text, lineWrap, allowMarkup) {
@@ -161,15 +161,10 @@ var URLHighlighter = new Lang.Class({
}
});
var ScaleLayout = new Lang.Class({
const ScaleLayout = new Lang.Class({
Name: 'ScaleLayout',
Extends: Clutter.BinLayout,
_init: function(params) {
this._container = null;
this.parent(params);
},
_connectContainer: function(container) {
if (this._container == container)
return;
@@ -208,7 +203,7 @@ var ScaleLayout = new Lang.Class({
}
});
var LabelExpanderLayout = new Lang.Class({
const LabelExpanderLayout = new Lang.Class({
Name: 'LabelExpanderLayout',
Extends: Clutter.LayoutManager,
Properties: { 'expansion': GObject.ParamSpec.double('expansion',
@@ -298,14 +293,12 @@ var LabelExpanderLayout = new Lang.Class({
}
});
var Message = new Lang.Class({
const Message = new Lang.Class({
Name: 'Message',
_init: function(title, body) {
this.expanded = false;
this._useBodyMarkup = false;
this.actor = new St.Button({ style_class: 'message',
accessible_role: Atk.Role.NOTIFICATION,
can_focus: true,
@@ -524,7 +517,7 @@ var Message = new Lang.Class({
});
Signals.addSignalMethods(Message.prototype);
var MessageListSection = new Lang.Class({
const MessageListSection = new Lang.Class({
Name: 'MessageListSection',
_init: function() {

View File

@@ -24,23 +24,23 @@ const Util = imports.misc.util;
const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
var ANIMATION_TIME = 0.2;
var NOTIFICATION_TIMEOUT = 4;
const ANIMATION_TIME = 0.2;
const NOTIFICATION_TIMEOUT = 4;
var HIDE_TIMEOUT = 0.2;
var LONGER_HIDE_TIMEOUT = 0.6;
const HIDE_TIMEOUT = 0.2;
const LONGER_HIDE_TIMEOUT = 0.6;
var MAX_NOTIFICATIONS_IN_QUEUE = 3;
var MAX_NOTIFICATIONS_PER_SOURCE = 3;
var MAX_NOTIFICATION_BUTTONS = 3;
const MAX_NOTIFICATIONS_IN_QUEUE = 3;
const MAX_NOTIFICATIONS_PER_SOURCE = 3;
const MAX_NOTIFICATION_BUTTONS = 3;
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
// range from the point where it left the tray.
var MOUSE_LEFT_ACTOR_THRESHOLD = 20;
const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
var IDLE_TIME = 1000;
const IDLE_TIME = 1000;
var State = {
const State = {
HIDDEN: 0,
SHOWING: 1,
SHOWN: 2,
@@ -52,7 +52,7 @@ var State = {
// and the user did not interact with, DISMISSED for all other notifications
// that were destroyed as a result of a user action, and SOURCE_CLOSED for the
// notifications that were requested to be destroyed by the associated source.
var NotificationDestroyedReason = {
const NotificationDestroyedReason = {
EXPIRED: 1,
DISMISSED: 2,
SOURCE_CLOSED: 3
@@ -62,14 +62,14 @@ var NotificationDestroyedReason = {
// urgency values map to the corresponding values for the notifications received
// through the notification daemon. HIGH urgency value is used for chats received
// through the Telepathy client.
var Urgency = {
const Urgency = {
LOW: 0,
NORMAL: 1,
HIGH: 2,
CRITICAL: 3
};
var FocusGrabber = new Lang.Class({
const FocusGrabber = new Lang.Class({
Name: 'FocusGrabber',
_init: function(actor) {
@@ -132,7 +132,7 @@ var FocusGrabber = new Lang.Class({
// source, such as whether to play sound or honour the critical bit.
//
// A notification without a policy object will inherit the default one.
var NotificationPolicy = new Lang.Class({
const NotificationPolicy = new Lang.Class({
Name: 'NotificationPolicy',
_init: function(params) {
@@ -153,7 +153,7 @@ var NotificationPolicy = new Lang.Class({
});
Signals.addSignalMethods(NotificationPolicy.prototype);
var NotificationGenericPolicy = new Lang.Class({
const NotificationGenericPolicy = new Lang.Class({
Name: 'NotificationGenericPolicy',
Extends: NotificationPolicy,
@@ -202,7 +202,7 @@ var NotificationGenericPolicy = new Lang.Class({
}
});
var NotificationApplicationPolicy = new Lang.Class({
const NotificationApplicationPolicy = new Lang.Class({
Name: 'NotificationApplicationPolicy',
Extends: NotificationPolicy,
@@ -328,7 +328,7 @@ var NotificationApplicationPolicy = new Lang.Class({
// If @params contains 'soundName' or 'soundFile', the corresponding
// event sound is played when the notification is shown (if the policy for
// @source allows playing sounds).
var Notification = new Lang.Class({
const Notification = new Lang.Class({
Name: 'Notification',
_init: function(source, title, banner, params) {
@@ -489,7 +489,7 @@ var Notification = new Lang.Class({
});
Signals.addSignalMethods(Notification.prototype);
var NotificationBanner = new Lang.Class({
const NotificationBanner = new Lang.Class({
Name: 'NotificationBanner',
Extends: Calendar.NotificationMessage,
@@ -585,7 +585,7 @@ var NotificationBanner = new Lang.Class({
}
});
var SourceActor = new Lang.Class({
const SourceActor = new Lang.Class({
Name: 'SourceActor',
_init: function(source, size) {
@@ -642,7 +642,7 @@ var SourceActor = new Lang.Class({
}
});
var SourceActorWithLabel = new Lang.Class({
const SourceActorWithLabel = new Lang.Class({
Name: 'SourceActorWithLabel',
Extends: SourceActor,
@@ -715,7 +715,7 @@ var SourceActorWithLabel = new Lang.Class({
}
});
var Source = new Lang.Class({
const Source = new Lang.Class({
Name: 'MessageTraySource',
SOURCE_ICON_SIZE: 48,
@@ -840,7 +840,7 @@ var Source = new Lang.Class({
});
Signals.addSignalMethods(Source.prototype);
var MessageTray = new Lang.Class({
const MessageTray = new Lang.Class({
Name: 'MessageTray',
_init: function() {
@@ -1042,7 +1042,7 @@ var MessageTray = new Lang.Class({
},
getSources: function() {
return [...this._sources.keys()];
return [k for (k of this._sources.keys())];
},
_onSourceEnableChanged: function(policy, source) {
@@ -1485,7 +1485,7 @@ var MessageTray = new Lang.Class({
});
Signals.addSignalMethods(MessageTray.prototype);
var SystemNotificationSource = new Lang.Class({
const SystemNotificationSource = new Lang.Class({
Name: 'SystemNotificationSource',
Extends: Source,

View File

@@ -14,16 +14,15 @@ const Atk = imports.gi.Atk;
const Params = imports.misc.params;
const Dialog = imports.ui.dialog;
const Layout = imports.ui.layout;
const Lightbox = imports.ui.lightbox;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
var OPEN_AND_CLOSE_TIME = 0.1;
var FADE_OUT_DIALOG_TIME = 1.0;
const OPEN_AND_CLOSE_TIME = 0.1;
const FADE_OUT_DIALOG_TIME = 1.0;
var State = {
const State = {
OPENED: 0,
CLOSED: 1,
OPENING: 2,
@@ -31,7 +30,7 @@ var State = {
FADED_OUT: 4
};
var ModalDialog = new Lang.Class({
const ModalDialog = new Lang.Class({
Name: 'ModalDialog',
_init: function(params) {
@@ -62,6 +61,11 @@ var ModalDialog = new Lang.Class({
this._group.connect('destroy', Lang.bind(this, this._onGroupDestroy));
this._pressedKey = null;
this._buttonKeys = {};
this._group.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
this._group.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent));
this.backgroundStack = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._backgroundBin = new St.Bin({ child: this.backgroundStack,
x_fill: true, y_fill: true });
@@ -69,9 +73,17 @@ var ModalDialog = new Lang.Class({
this._backgroundBin.add_constraint(this._monitorConstraint);
this._group.add_actor(this._backgroundBin);
this.dialogLayout = new Dialog.Dialog(this.backgroundStack, params.styleClass);
this.contentLayout = this.dialogLayout.contentLayout;
this.buttonLayout = this.dialogLayout.buttonLayout;
this.dialogLayout = 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.dialogLayout.request_mode = Clutter.RequestMode.HEIGHT_FOR_WIDTH;
if (params.styleClass != null)
this.dialogLayout.add_style_class_name(params.styleClass);
if (!this._shellReactive) {
this._lightbox = new Lightbox.Lightbox(this._group,
@@ -82,6 +94,22 @@ var ModalDialog = new Lang.Class({
this._eventBlocker = new Clutter.Actor({ reactive: true });
this.backgroundStack.add_actor(this._eventBlocker);
}
this.backgroundStack.add_actor(this.dialogLayout);
this.contentLayout = new St.BoxLayout({ vertical: true,
style_class: "modal-dialog-content-box" });
this.dialogLayout.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.dialogLayout.add(this.buttonLayout,
{ x_align: St.Align.MIDDLE,
y_align: St.Align.END });
global.focus_manager.add_group(this.dialogLayout);
this._initialKeyFocus = this.dialogLayout;
@@ -94,7 +122,8 @@ var ModalDialog = new Lang.Class({
},
clearButtons: function() {
this.dialogLayout.clearButtons();
this.buttonLayout.destroy_all_children();
this._buttonKeys = {};
},
setButtons: function(buttons) {
@@ -117,8 +146,72 @@ var ModalDialog = new Lang.Class({
}
},
addButton: function (buttonInfo) {
return this.dialogLayout.addButton(buttonInfo);
addButton: function(buttonInfo) {
let label = buttonInfo['label']
let action = buttonInfo['action'];
let key = buttonInfo['key'];
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._initialKeyFocusDestroyId)
this._initialKeyFocus = button;
for (let i in keys)
this._buttonKeys[keys[i]] = buttonInfo;
this.buttonLayout.add_actor(button);
return button;
},
_onKeyPressEvent: function(object, event) {
this._pressedKey = event.get_key_symbol();
return Clutter.EVENT_PROPAGATE;
},
_onKeyReleaseEvent: function(object, event) {
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 = buttonInfo['button'];
let action = buttonInfo['action'];
if (action && button.reactive) {
action();
return Clutter.EVENT_STOP;
}
return Clutter.EVENT_PROPAGATE;
},
_onGroupDestroy: function() {

View File

@@ -47,7 +47,7 @@ const MprisPlayerProxy = Gio.DBusProxy.makeProxyWrapper(MprisPlayerIface);
const MPRIS_PLAYER_PREFIX = 'org.mpris.MediaPlayer2.';
var MediaMessage = new Lang.Class({
const MediaMessage = new Lang.Class({
Name: 'MediaMessage',
Extends: MessageList.Message,
@@ -111,7 +111,7 @@ var MediaMessage = new Lang.Class({
}
});
var MprisPlayer = new Lang.Class({
const MprisPlayer = new Lang.Class({
Name: 'MprisPlayer',
_init: function(busName) {
@@ -226,7 +226,7 @@ var MprisPlayer = new Lang.Class({
});
Signals.addSignalMethods(MprisPlayer.prototype);
var MediaSection = new Lang.Class({
const MediaSection = new Lang.Class({
Name: 'MediaSection',
Extends: MessageList.MessageListSection,

View File

@@ -67,14 +67,14 @@ const FdoNotificationsIface = '<node> \
</interface> \
</node>';
var NotificationClosedReason = {
const NotificationClosedReason = {
EXPIRED: 1,
DISMISSED: 2,
APP_CLOSED: 3,
UNDEFINED: 4
};
var Urgency = {
const Urgency = {
LOW: 0,
NORMAL: 1,
CRITICAL: 2
@@ -91,7 +91,7 @@ const rewriteRules = {
]
};
var FdoNotificationDaemon = new Lang.Class({
const FdoNotificationDaemon = new Lang.Class({
Name: 'FdoNotificationDaemon',
_init: function() {
@@ -128,10 +128,10 @@ var FdoNotificationDaemon = new Lang.Class({
switch (hints.urgency) {
case Urgency.LOW:
case Urgency.NORMAL:
stockIcon = 'dialog-information';
stockIcon = 'gtk-dialog-info';
break;
case Urgency.CRITICAL:
stockIcon = 'dialog-error';
stockIcon = 'gtk-dialog-error';
break;
}
return new Gio.ThemedIcon({ name: stockIcon });
@@ -186,8 +186,7 @@ var FdoNotificationDaemon = new Lang.Class({
return source;
}
let appId = ndata ? ndata.hints['desktop-entry'] || null : null;
source = new FdoNotificationDaemonSource(title, pid, sender, appId);
source = new FdoNotificationDaemonSource(title, pid, sender, ndata ? ndata.hints['desktop-entry'] : null);
this._sources.push(source);
source.connect('destroy', Lang.bind(this, function() {
@@ -392,10 +391,10 @@ var FdoNotificationDaemon = new Lang.Class({
notification.setUrgency(MessageTray.Urgency.CRITICAL);
break;
}
notification.setResident(!!hints.resident);
notification.setResident(hints.resident == true);
// 'transient' is a reserved keyword in JS, so we have to retrieve the value
// of the 'transient' hint with hints['transient'] rather than hints.transient
notification.setTransient(!!hints['transient']);
notification.setTransient(hints['transient'] == true);
let sourceGIcon = source.useNotificationIcon ? gicon : null;
source.processNotification(notification, sourceGIcon);
@@ -459,7 +458,7 @@ var FdoNotificationDaemon = new Lang.Class({
}
});
var FdoNotificationDaemonSource = new Lang.Class({
const FdoNotificationDaemonSource = new Lang.Class({
Name: 'FdoNotificationDaemonSource',
Extends: MessageTray.Source,
@@ -586,7 +585,7 @@ const PRIORITY_URGENCY_MAP = {
urgent: MessageTray.Urgency.CRITICAL
};
var GtkNotificationDaemonNotification = new Lang.Class({
const GtkNotificationDaemonNotification = new Lang.Class({
Name: 'GtkNotificationDaemonNotification',
Extends: MessageTray.Notification,
@@ -680,7 +679,7 @@ function getPlatformData() {
function InvalidAppError() {}
var GtkNotificationDaemonAppSource = new Lang.Class({
const GtkNotificationDaemonAppSource = new Lang.Class({
Name: 'GtkNotificationDaemonAppSource',
Extends: MessageTray.Source,
@@ -787,7 +786,7 @@ const GtkNotificationsIface = '<node> \
</interface> \
</node>';
var GtkNotificationDaemon = new Lang.Class({
const GtkNotificationDaemon = new Lang.Class({
Name: 'GtkNotificationDaemon',
_init: function() {
@@ -885,7 +884,7 @@ var GtkNotificationDaemon = new Lang.Class({
},
});
var NotificationDaemon = new Lang.Class({
const NotificationDaemon = new Lang.Class({
Name: 'NotificationDaemon',
_init: function() {

View File

@@ -9,9 +9,9 @@ const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
const Meta = imports.gi.Meta;
var FADE_TIME = 0.1;
const FADE_TIME = 0.1;
var OsdMonitorLabel = new Lang.Class({
const OsdMonitorLabel = new Lang.Class({
Name: 'OsdMonitorLabel',
_init: function(monitor, label) {
@@ -52,7 +52,7 @@ var OsdMonitorLabel = new Lang.Class({
}
});
var OsdMonitorLabeler = new Lang.Class({
const OsdMonitorLabeler = new Lang.Class({
Name: 'OsdMonitorLabeler',
_init: function() {

View File

@@ -11,11 +11,11 @@ const Mainloop = imports.mainloop;
const Tweener = imports.ui.tweener;
const Meta = imports.gi.Meta;
var HIDE_TIMEOUT = 1500;
var FADE_TIME = 0.1;
var LEVEL_ANIMATION_TIME = 0.1;
const HIDE_TIMEOUT = 1500;
const FADE_TIME = 0.1;
const LEVEL_ANIMATION_TIME = 0.1;
var LevelBar = new Lang.Class({
const LevelBar = new Lang.Class({
Name: 'LevelBar',
_init: function() {
@@ -45,7 +45,7 @@ var LevelBar = new Lang.Class({
}
});
var OsdWindowConstraint = new Lang.Class({
const OsdWindowConstraint = new Lang.Class({
Name: 'OsdWindowConstraint',
Extends: Clutter.Constraint,
@@ -77,7 +77,7 @@ var OsdWindowConstraint = new Lang.Class({
}
});
var OsdWindow = new Lang.Class({
const OsdWindow = new Lang.Class({
Name: 'OsdWindow',
_init: function(monitorIndex) {
@@ -209,7 +209,7 @@ var OsdWindow = new Lang.Class({
}
});
var OsdWindowManager = new Lang.Class({
const OsdWindowManager = new Lang.Class({
Name: 'OsdWindowManager',
_init: function() {

View File

@@ -24,18 +24,18 @@ const Tweener = imports.ui.tweener;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
// Time for initial animation going into Overview mode
var ANIMATION_TIME = 0.25;
const ANIMATION_TIME = 0.25;
// Must be less than ANIMATION_TIME, since we switch to
// or from the overview completely after ANIMATION_TIME,
// and don't want the shading animation to get cut off
var SHADE_ANIMATION_TIME = .20;
const SHADE_ANIMATION_TIME = .20;
var DND_WINDOW_SWITCH_TIMEOUT = 750;
const DND_WINDOW_SWITCH_TIMEOUT = 750;
var OVERVIEW_ACTIVATION_TIMEOUT = 0.5;
const OVERVIEW_ACTIVATION_TIMEOUT = 0.5;
var ShellInfo = new Lang.Class({
const ShellInfo = new Lang.Class({
Name: 'ShellInfo',
_init: function() {
@@ -87,7 +87,7 @@ var ShellInfo = new Lang.Class({
}
});
var Overview = new Lang.Class({
const Overview = new Lang.Class({
Name: 'Overview',
_init: function() {

View File

@@ -14,7 +14,7 @@ const Tweener = imports.ui.tweener;
const ViewSelector = imports.ui.viewSelector;
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
var SIDE_CONTROLS_ANIMATION_TIME = 0.16;
const SIDE_CONTROLS_ANIMATION_TIME = 0.16;
function getRtlSlideDirection(direction, actor) {
let rtl = (actor.text_direction == Clutter.TextDirection.RTL);
@@ -25,12 +25,12 @@ function getRtlSlideDirection(direction, actor) {
return direction;
};
var SlideDirection = {
const SlideDirection = {
LEFT: 0,
RIGHT: 1
};
var SlideLayout = new Lang.Class({
const SlideLayout = new Lang.Class({
Name: 'SlideLayout',
Extends: Clutter.FixedLayout,
@@ -104,7 +104,7 @@ var SlideLayout = new Lang.Class({
},
});
var SlidingControl = new Lang.Class({
const SlidingControl = new Lang.Class({
Name: 'SlidingControl',
_init: function(params) {
@@ -238,7 +238,7 @@ var SlidingControl = new Lang.Class({
}
});
var ThumbnailsSlider = new Lang.Class({
const ThumbnailsSlider = new Lang.Class({
Name: 'ThumbnailsSlider',
Extends: SlidingControl,
@@ -314,7 +314,7 @@ var ThumbnailsSlider = new Lang.Class({
}
});
var DashSlider = new Lang.Class({
const DashSlider = new Lang.Class({
Name: 'DashSlider',
Extends: SlidingControl,
@@ -353,7 +353,7 @@ var DashSlider = new Lang.Class({
}
});
var DashSpacer = new Lang.Class({
const DashSpacer = new Lang.Class({
Name: 'DashSpacer',
Extends: St.Widget,
@@ -391,7 +391,7 @@ var DashSpacer = new Lang.Class({
}
});
var ControlsLayout = new Lang.Class({
const ControlsLayout = new Lang.Class({
Name: 'ControlsLayout',
Extends: Clutter.BinLayout,
Signals: { 'allocation-changed': { flags: GObject.SignalFlags.RUN_LAST } },
@@ -402,7 +402,7 @@ var ControlsLayout = new Lang.Class({
}
});
var ControlsManager = new Lang.Class({
const ControlsManager = new Lang.Class({
Name: 'ControlsManager',
_init: function(searchEntry) {

View File

@@ -30,7 +30,7 @@ const CCW = 1;
const UP = 0;
const DOWN = 1;
var PadChooser = new Lang.Class({
const PadChooser = new Lang.Class({
Name: 'PadChooser',
_init: function (device, groupDevices) {
@@ -96,7 +96,7 @@ var PadChooser = new Lang.Class({
});
Signals.addSignalMethods(PadChooser.prototype);
var KeybindingEntry = new Lang.Class({
const KeybindingEntry = new Lang.Class({
Name: 'KeybindingEntry',
_init: function () {
@@ -120,7 +120,7 @@ var KeybindingEntry = new Lang.Class({
});
Signals.addSignalMethods(KeybindingEntry.prototype);
var ActionComboBox = new Lang.Class({
const ActionComboBox = new Lang.Class({
Name: 'ActionComboBox',
_init: function () {
@@ -154,16 +154,9 @@ var ActionComboBox = new Lang.Class({
this._actionLabels.set(GDesktopEnums.PadButtonAction.SWITCH_MONITOR, _("Switch monitor"));
this._actionLabels.set(GDesktopEnums.PadButtonAction.KEYBINDING, _("Assign keystroke"));
this._buttonItems = [];
for (let [action, label] of this._actionLabels.entries()) {
let selectedAction = action;
let item = this._editMenu.addAction(label, Lang.bind(this, function() { this._onActionSelected(selectedAction) }));
/* These actions only apply to pad buttons */
if (selectedAction == GDesktopEnums.PadButtonAction.HELP ||
selectedAction == GDesktopEnums.PadButtonAction.SWITCH_MONITOR)
this._buttonItems.push(item);
this._editMenu.addAction(label, Lang.bind(this, function() { this._onActionSelected(selectedAction) }));
}
this.setAction(GDesktopEnums.PadButtonAction.NONE);
@@ -192,15 +185,11 @@ var ActionComboBox = new Lang.Class({
this.popup();
else
this.popdown();
},
setButtonActionsActive: function (active) {
this._buttonItems.forEach(item => { item.setSensitive(active); });
}
});
Signals.addSignalMethods(ActionComboBox.prototype);
var ActionEditor = new Lang.Class({
const ActionEditor = new Lang.Class({
Name: 'ActionEditor',
_init: function () {
@@ -234,16 +223,13 @@ var ActionEditor = new Lang.Class({
}
},
setSettings: function (settings, action) {
setSettings: function (settings) {
this._buttonSettings = settings;
this._currentAction = this._buttonSettings.get_enum('action');
this._currentKeybinding = this._buttonSettings.get_string('keybinding');
this._actionComboBox.setAction(this._currentAction);
this._updateKeybindingEntryState();
let isButton = (action == Meta.PadActionType.BUTTON);
this._actionComboBox.setButtonActionsActive(isButton);
},
close: function() {
@@ -285,7 +271,7 @@ var ActionEditor = new Lang.Class({
});
Signals.addSignalMethods(ActionEditor.prototype);
var PadDiagram = new Lang.Class({
const PadDiagram = new Lang.Class({
Name: 'PadDiagram',
Extends: St.DrawingArea,
Properties: { 'left-handed': GObject.ParamSpec.boolean('left-handed',
@@ -307,8 +293,6 @@ var PadDiagram = new Lang.Class({
_init: function (params) {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/pad-osd.css');
let [success, css, etag] = file.load_contents(null);
this._curEdited = null;
this._prevEdited = null;
this._css = css;
this._labels = [];
this._activeButtons = [];
@@ -566,39 +550,25 @@ var PadDiagram = new Lang.Class({
this.add_actor(label);
},
_applyLabel: function(label, action, idx, dir, str) {
if (str != null) {
label.set_text(str);
let [found, x, y, arrangement] = this.getLabelCoords(action, idx, dir);
this._allocateChild(label, x, y, arrangement);
}
label.show();
},
stopEdition: function (continues, str) {
stopEdition: function (str) {
this._editorActor.hide();
if (this._prevEdited) {
let [label, action, idx, dir] = this._prevEdited;
this._applyLabel(label, action, idx, dir, str);
this._prevEdited = null;
}
if (this._curEdited) {
let [label, action, idx, dir] = this._curEdited;
this._applyLabel(label, action, idx, dir, str);
if (continues)
this._prevEdited = this._curEdited;
if (str != null) {
label.set_text(str);
let [found, x, y, arrangement] = this.getLabelCoords(action, idx, dir);
this._allocateChild(label, x, y, arrangement);
}
label.show();
this._curEdited = null;
}
},
startEdition: function(action, idx, dir) {
let editedLabel;
if (this._curEdited)
return;
this.stopEdition();
for (let i = 0; i < this._labels.length; i++) {
let [label, itemAction, itemIdx, itemDir] = this._labels[i];
@@ -619,7 +589,7 @@ var PadDiagram = new Lang.Class({
}
});
var PadOsd = new Lang.Class({
const PadOsd = new Lang.Class({
Name: 'PadOsd',
_init: function (padDevice, settings, imagePath, editionMode, monitorIndex) {
@@ -692,7 +662,7 @@ var PadOsd = new Lang.Class({
this._updatePadChooser();
this._actionEditor = new ActionEditor();
this._actionEditor.connect('done', Lang.bind(this, this._endActionEdition));
this._actionEditor.connect('done', Lang.bind(this, this._endButtonActionEdition));
this._padDiagram = new PadDiagram({ image: this._imagePath,
left_handed: settings.get_boolean('left-handed'),
@@ -711,17 +681,11 @@ var PadOsd = new Lang.Class({
}
for (i = 0; i < padDevice.get_n_rings(); i++) {
let [found] = this._padDiagram.getRingLabelCoords(i, CW);
if (!found)
break;
this._createLabel(Meta.PadActionType.RING, i, CW);
this._createLabel(Meta.PadActionType.RING, i, CCW);
}
for (i = 0; i < padDevice.get_n_strips(); i++) {
let [found] = this._padDiagram.getStripLabelCoords(i, UP);
if (!found)
break;
this._createLabel(Meta.PadActionType.STRIP, i, UP);
this._createLabel(Meta.PadActionType.STRIP, i, DOWN);
}
@@ -779,10 +743,8 @@ var PadOsd = new Lang.Class({
if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS &&
event.get_source_device() == this.padDevice) {
this._padDiagram.activateButton(event.get_button());
let isModeSwitch = this.padDevice.get_mode_switch_button_group(event.get_button()) >= 0;
/* Buttons that switch between modes cannot be edited */
if (this._editionMode && !isModeSwitch)
if (this._editionMode)
this._startButtonActionEdition(event.get_button());
return Clutter.EVENT_STOP;
} else if (event.type() == Clutter.EventType.PAD_BUTTON_RELEASE &&
@@ -791,23 +753,11 @@ var PadOsd = new Lang.Class({
return Clutter.EVENT_STOP;
} else if (event.type() == Clutter.EventType.KEY_PRESS &&
(!this._editionMode || event.get_key_symbol() == Clutter.Escape)) {
if (this._editedAction != null)
this._endActionEdition();
if (this._editingButtonAction != null)
this._endButtonActionEdition();
else
this.destroy();
return Clutter.EVENT_STOP;
} else if (event.get_source_device() == this.padDevice &&
event.type() == Clutter.EventType.PAD_STRIP) {
if (this._editionMode) {
let [retval, number, mode] = event.get_pad_event_details();
this._startStripActionEdition(number, UP, mode);
}
} else if (event.get_source_device() == this.padDevice &&
event.type() == Clutter.EventType.PAD_RING) {
if (this._editionMode) {
let [retval, number, mode] = event.get_pad_event_details();
this._startRingActionEdition(number, CCW, mode);
}
}
// If the event comes from another pad in the same group,
@@ -840,79 +790,33 @@ var PadOsd = new Lang.Class({
this._titleLabel.clutter_text.set_markup('<span size="larger"><b>' + title + '</b></span>');
},
_isEditedAction: function (type, number, dir) {
if (!this._editedAction)
return false;
return (this._editedAction.type == type &&
this._editedAction.number == number &&
this._editedAction.dir == dir);
},
_followUpActionEdition: function (str) {
let { type, dir, number, mode } = this._editedAction;
let hasNextAction = (type == Meta.PadActionType.RING && dir == CCW ||
type == Meta.PadActionType.STRIP && dir == UP);
if (!hasNextAction)
return false;
this._padDiagram.stopEdition(true, str);
this._editedAction = null;
if (type == Meta.PadActionType.RING)
this._startRingActionEdition(number, CW, mode);
else
this._startStripActionEdition(number, DOWN, mode);
return true;
},
_endActionEdition: function () {
_endButtonActionEdition: function () {
this._actionEditor.close();
if (this._editedAction != null) {
if (this._editingButtonAction != null) {
let str = global.display.get_pad_action_label(this.padDevice,
this._editedAction.type,
this._editedAction.number);
if (this._followUpActionEdition(str))
return;
this._padDiagram.stopEdition(false, str ? str : _("None"))
this._editedAction = null;
Meta.PadActionType.BUTTON,
this._editingButtonAction);
this._padDiagram.stopEdition(str ? str : _("None"))
this._editingButtonAction = null;
}
this._editedActionSettings = null;
},
_startActionEdition: function (key, type, number, dir, mode) {
if (this._isEditedAction(type, number, dir))
return;
this._endActionEdition();
this._editedAction = { type, number, dir, mode };
let settingsPath = this._settings.path + key + '/';
this._editedActionSettings = Gio.Settings.new_with_path('org.gnome.desktop.peripherals.tablet.pad-button',
settingsPath);
this._actionEditor.setSettings(this._editedActionSettings, type);
this._padDiagram.startEdition(type, number, dir);
this._editedButtonSettings = null;
},
_startButtonActionEdition: function (button) {
if (this._editingButtonAction == button)
return;
this._endButtonActionEdition();
this._editingButtonAction = button;
let ch = String.fromCharCode('A'.charCodeAt() + button);
let key = 'button' + ch;
this._startActionEdition(key, Meta.PadActionType.BUTTON, button);
},
_startRingActionEdition: function (ring, dir, mode) {
let ch = String.fromCharCode('A'.charCodeAt() + ring);
let key = 'ring%s-%s-mode-%d'.format(ch, dir == CCW ? 'ccw' : 'cw', mode);
this._startActionEdition(key, Meta.PadActionType.RING, ring, dir, mode);
},
_startStripActionEdition: function (strip, dir, mode) {
let ch = String.fromCharCode('A'.charCodeAt() + strip);
let key = 'strip%s-%s-mode-%d'.format(ch, dir == UP ? 'up' : 'down', mode);
this._startActionEdition(key, Meta.PadActionType.STRIP, strip, dir, mode);
let settingsPath = this._settings.path + "button" + ch + '/';
this._editedButtonSettings = Gio.Settings.new_with_path('org.gnome.desktop.peripherals.tablet.pad-button',
settingsPath);
this._actionEditor.setSettings(this._editedButtonSettings);
this._padDiagram.startEdition(Meta.PadActionType.BUTTON, button);
},
setEditionMode: function (editionMode) {
@@ -961,7 +865,7 @@ const PadOsdIface = '<node> \
</interface> \
</node>';
var PadOsdService = new Lang.Class({
const PadOsdService = new Lang.Class({
Name: 'PadOsdService',
_init: function() {

Some files were not shown because too many files have changed in this diff Show More