diff --git a/js/extensionPrefs/main.js b/js/extensionPrefs/main.js index 7660856f5..e6b1a6eb7 100644 --- a/js/extensionPrefs/main.js +++ b/js/extensionPrefs/main.js @@ -1,4 +1,3 @@ - const Lang = imports.lang; const Gettext = imports.gettext; const GLib = imports.gi.GLib; @@ -24,9 +23,8 @@ function stripPrefix(string, prefix) { return string; } -var Application = new Lang.Class({ - Name: 'Application', - _init() { +var Application = class { + constructor() { GLib.set_prgname('gnome-shell-extension-prefs'); this.application = new Gtk.Application({ application_id: 'org.gnome.shell.ExtensionPrefs', @@ -42,7 +40,7 @@ var Application = new Lang.Class({ this._startupUuid = null; this._loaded = false; this._skipMainWindow = false; - }, + } _extensionAvailable(uuid) { let extension = ExtensionUtils.extensions[uuid]; @@ -54,7 +52,7 @@ var Application = new Lang.Class({ return false; return true; - }, + } _getExtensionPrefsModule(extension) { let uuid = extension.metadata.uuid; @@ -69,7 +67,7 @@ var Application = new Lang.Class({ this._extensionPrefsModules[uuid] = prefsModule; return prefsModule; - }, + } _selectExtension(uuid) { if (!this._extensionAvailable(uuid)) @@ -104,7 +102,7 @@ var Application = new Lang.Class({ dialog.set_default_size(600, 400); dialog.add(widget); dialog.show(); - }, + } _buildErrorUI(extension, exc) { let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); @@ -130,7 +128,7 @@ var Application = new Lang.Class({ box.show_all(); return box; - }, + } _buildUI(app) { this._window = new Gtk.ApplicationWindow({ application: app, @@ -167,13 +165,13 @@ var Application = new Lang.Class({ }); this._window.show_all(); - }, + } _sortList(row1, row2) { let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name; let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name; return name1.localeCompare(name2); - }, + } _updateHeader(row, before) { if (!before || row.get_header()) @@ -181,14 +179,14 @@ var Application = new Lang.Class({ let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL }); row.set_header(sep); - }, + } _scanExtensions() { let finder = new ExtensionUtils.ExtensionFinder(); finder.connect('extension-found', this._extensionFound.bind(this)); finder.scanExtensions(); this._extensionsLoaded(); - }, + } _extensionFound(finder, extension) { let row = new ExtensionRow(extension.uuid); @@ -200,7 +198,7 @@ var Application = new Lang.Class({ row.show_all(); this._extensionSelector.add(row); - }, + } _extensionsLoaded() { if (this._startupUuid && this._extensionAvailable(this._startupUuid)) @@ -208,16 +206,16 @@ var Application = new Lang.Class({ this._startupUuid = null; this._skipMainWindow = false; this._loaded = true; - }, + } _onActivate() { this._window.present(); - }, + } _onStartup(app) { this._buildUI(app); this._scanExtensions(); - }, + } _onCommandLine(app, commandLine) { app.activate(); @@ -240,7 +238,7 @@ var Application = new Lang.Class({ } return 0; } -}); +}; var DescriptionLabel = new Lang.Class({ Name: 'DescriptionLabel', diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js index fcb1a585b..6dd5cdba6 100644 --- a/js/gdm/authPrompt.js +++ b/js/gdm/authPrompt.js @@ -2,7 +2,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; -const Lang = imports.lang; const Pango = imports.gi.Pango; const Signals = imports.signals; const St = imports.gi.St; @@ -38,10 +37,8 @@ var BeginRequestType = { DONT_PROVIDE_USERNAME: 1 }; -var AuthPrompt = new Lang.Class({ - Name: 'AuthPrompt', - - _init(gdmClient, mode) { +var AuthPrompt = class { + constructor(gdmClient, mode) { this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this._gdmClient = gdmClient; @@ -131,12 +128,12 @@ var AuthPrompt = new Lang.Class({ this._spinner.actor.opacity = 0; this._spinner.actor.show(); this._defaultButtonWell.add_child(this._spinner.actor); - }, + } _onDestroy() { this._userVerifier.destroy(); this._userVerifier = null; - }, + } _initButtons() { this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button', @@ -184,7 +181,7 @@ var AuthPrompt = new Lang.Class({ if (this.nextButton.reactive) this.emit('next'); }); - }, + } _onAskQuestion(verifier, serviceName, question, passwordChar) { if (this._queryingService) @@ -210,12 +207,12 @@ var AuthPrompt = new Lang.Class({ this.updateSensitivity(true); this.emit('prompted'); - }, + } _onOVirtUserAuthenticated() { if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) this.reset(); - }, + } _onSmartcardStatusChanged() { this.smartcardDetected = this._userVerifier.smartcardDetected; @@ -234,12 +231,12 @@ var AuthPrompt = new Lang.Class({ if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) this.reset(); - }, + } _onShowMessage(userVerifier, message, type) { this.setMessage(message, type); this.emit('prompted'); - }, + } _onVerificationFailed(userVerifier, canRetry) { this._queryingService = null; @@ -248,22 +245,22 @@ var AuthPrompt = new Lang.Class({ this.updateSensitivity(canRetry); this.setActorInDefaultButtonWell(null); this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED; - }, + } _onVerificationComplete() { this.setActorInDefaultButtonWell(null); this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; this.cancelButton.reactive = false; - }, + } _onReset() { this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.reset(); - }, + } addActorToDefaultButtonWell(actor) { this._defaultButtonWell.add_child(actor); - }, + } setActorInDefaultButtonWell(actor, animate) { if (!this._defaultButtonWellActor && @@ -327,25 +324,25 @@ var AuthPrompt = new Lang.Class({ } this._defaultButtonWellActor = actor; - }, + } startSpinning() { this.setActorInDefaultButtonWell(this._spinner.actor, true); - }, + } stopSpinning() { this.setActorInDefaultButtonWell(null, false); - }, + } clear() { this._entry.text = ''; this.stopSpinning(); - }, + } setPasswordChar(passwordChar) { this._entry.clutter_text.set_password_char(passwordChar); this._entry.menu.isPassword = passwordChar != ''; - }, + } setQuestion(question) { this._label.set_text(question); @@ -354,7 +351,7 @@ var AuthPrompt = new Lang.Class({ this._entry.show(); this._entry.grab_key_focus(); - }, + } getAnswer() { let text; @@ -367,7 +364,7 @@ var AuthPrompt = new Lang.Class({ } return text; - }, + } _fadeOutMessage() { if (this._message.opacity == 0) @@ -378,7 +375,7 @@ var AuthPrompt = new Lang.Class({ time: MESSAGE_FADE_OUT_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } setMessage(message, type) { if (type == GdmUtil.MessageType.ERROR) @@ -398,18 +395,18 @@ var AuthPrompt = new Lang.Class({ } else { this._message.opacity = 0; } - }, + } _updateNextButtonSensitivity(sensitive) { this.nextButton.reactive = sensitive; this.nextButton.can_focus = sensitive; - }, + } updateSensitivity(sensitive) { this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING)); this._entry.reactive = sensitive; this._entry.clutter_text.editable = sensitive; - }, + } hide() { this.setActorInDefaultButtonWell(null, true); @@ -420,7 +417,7 @@ var AuthPrompt = new Lang.Class({ this.updateSensitivity(true); this._entry.set_text(''); - }, + } setUser(user) { let oldChild = this._userWell.get_child(); @@ -431,7 +428,7 @@ var AuthPrompt = new Lang.Class({ let userWidget = new UserWidget.UserWidget(user); this._userWell.set_child(userWidget.actor); } - }, + } reset() { let oldStatus = this.verificationStatus; @@ -469,7 +466,7 @@ var AuthPrompt = new Lang.Class({ } this.emit('reset', beginRequestType); - }, + } addCharacter(unichar) { if (!this._entry.visible) @@ -477,7 +474,7 @@ var AuthPrompt = new Lang.Class({ this._entry.grab_key_focus(); this._entry.clutter_text.insert_unichar(unichar); - }, + } begin(params) { params = Params.parse(params, { userName: null, @@ -491,7 +488,7 @@ var AuthPrompt = new Lang.Class({ this._userVerifier.begin(params.userName, hold); this.verificationStatus = AuthPromptStatus.VERIFYING; - }, + } finish(onComplete) { if (!this._userVerifier.hasPendingMessages) { @@ -505,7 +502,7 @@ var AuthPrompt = new Lang.Class({ this._userVerifier.clear(); onComplete(); }); - }, + } cancel() { if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) { @@ -514,5 +511,5 @@ var AuthPrompt = new Lang.Class({ this.reset(); this.emit('cancelled'); } -}); +}; Signals.addSignalMethods(AuthPrompt.prototype); diff --git a/js/gdm/batch.js b/js/gdm/batch.js index 29c222343..bd84c9230 100644 --- a/js/gdm/batch.js +++ b/js/gdm/batch.js @@ -44,45 +44,39 @@ * replaced by something else. */ -const Lang = imports.lang; const Signals = imports.signals; -var Task = new Lang.Class({ - Name: 'Task', - - _init(scope, handler) { +var Task = class { + constructor(scope, handler) { if (scope) this.scope = scope; else this.scope = this; this.handler = handler; - }, + } run() { if (this.handler) return this.handler.call(this.scope); return null; - }, -}); + } +}; Signals.addSignalMethods(Task.prototype); -var Hold = new Lang.Class({ - Name: 'Hold', - Extends: Task, - - _init() { - this.parent(this, () => this); +var Hold = class extends Task { + constructor() { + super(null, () => this); this._acquisitions = 1; - }, + } acquire() { if (this._acquisitions <= 0) throw new Error("Cannot acquire hold after it's been released"); this._acquisitions++; - }, + } acquireUntilAfter(hold) { if (!hold.isAcquired()) @@ -93,27 +87,24 @@ var Hold = new Lang.Class({ hold.disconnect(signalId); this.release(); }); - }, + } release() { this._acquisitions--; if (this._acquisitions == 0) this.emit('release'); - }, + } isAcquired() { return this._acquisitions > 0; } -}); +}; Signals.addSignalMethods(Hold.prototype); -var Batch = new Lang.Class({ - Name: 'Batch', - Extends: Task, - - _init(scope, tasks) { - this.parent(); +var Batch = class extends Task { + constructor(scope, tasks) { + super(); this.tasks = []; @@ -130,11 +121,11 @@ var Batch = new Lang.Class({ this.tasks.push(task); } - }, + } process() { throw new Error('Not implemented'); - }, + } runTask() { if (!(this._currentTaskIndex in this.tasks)) { @@ -142,11 +133,11 @@ var Batch = new Lang.Class({ } return this.tasks[this._currentTaskIndex].run(); - }, + } _finish() { this.hold.release(); - }, + } nextTask() { this._currentTaskIndex++; @@ -159,7 +150,7 @@ var Batch = new Lang.Class({ } this.process(); - }, + } _start() { // acquire a hold to get released when the entire @@ -167,7 +158,7 @@ var Batch = new Lang.Class({ this.hold = new Hold(); this._currentTaskIndex = 0; this.process(); - }, + } run() { this._start(); @@ -175,18 +166,15 @@ var Batch = new Lang.Class({ // hold may be destroyed at this point // if we're already done running return this.hold; - }, + } cancel() { this.tasks = this.tasks.splice(0, this._currentTaskIndex + 1); } -}); +}; Signals.addSignalMethods(Batch.prototype); -var ConcurrentBatch = new Lang.Class({ - Name: 'ConcurrentBatch', - Extends: Batch, - +var ConcurrentBatch = class extends Batch { process() { let hold = this.runTask(); @@ -199,13 +187,10 @@ var ConcurrentBatch = new Lang.Class({ // concurrently. this.nextTask(); } -}); +}; Signals.addSignalMethods(ConcurrentBatch.prototype); -var ConsecutiveBatch = new Lang.Class({ - Name: 'ConsecutiveBatch', - Extends: Batch, - +var ConsecutiveBatch = class extends Batch { process() { let hold = this.runTask(); @@ -222,5 +207,5 @@ var ConsecutiveBatch = new Lang.Class({ this.nextTask(); } } -}); +}; Signals.addSignalMethods(ConsecutiveBatch.prototype); diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js index 16a8682e2..252caa24d 100644 --- a/js/gdm/loginDialog.js +++ b/js/gdm/loginDialog.js @@ -50,10 +50,8 @@ const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0; const _LOGO_ICON_HEIGHT = 48; const _MAX_BOTTOM_MENU_ITEMS = 5; -var UserListItem = new Lang.Class({ - Name: 'UserListItem', - - _init(user) { +var UserListItem = class { + constructor(user) { this.user = user; this._userChangedId = this.user.connect('changed', this._onUserChanged.bind(this)); @@ -91,26 +89,26 @@ var UserListItem = new Lang.Class({ this.actor.connect('clicked', this._onClicked.bind(this)); this._onUserChanged(); - }, + } _onUserChanged() { this._updateLoggedIn(); - }, + } _updateLoggedIn() { if (this.user.is_logged_in()) this.actor.add_style_pseudo_class('logged-in'); else this.actor.remove_style_pseudo_class('logged-in'); - }, + } _onDestroy() { this.user.disconnect(this._userChangedId); - }, + } _onClicked() { this.emit('activate'); - }, + } _setSelected(selected) { if (selected) { @@ -119,7 +117,7 @@ var UserListItem = new Lang.Class({ } else { this.actor.remove_style_pseudo_class('selected'); } - }, + } showTimedLoginIndicator(time) { let hold = new Batch.Hold(); @@ -147,7 +145,7 @@ var UserListItem = new Lang.Class({ GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId'); return hold; - }, + } hideTimedLoginIndicator() { if (this._timedLoginTimeoutId) { @@ -158,13 +156,11 @@ var UserListItem = new Lang.Class({ this._timedLoginIndicator.visible = false; this._timedLoginIndicator.scale_x = 0.; } -}); +}; Signals.addSignalMethods(UserListItem.prototype); -var UserList = new Lang.Class({ - Name: 'UserList', - - _init() { +var UserList = class { + constructor() { this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'}); this.actor.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC); @@ -177,7 +173,7 @@ var UserList = new Lang.Class({ this._items = {}; this.actor.connect('key-focus-in', this._moveFocusToItems.bind(this)); - }, + } _moveFocusToItems() { let hasItems = Object.keys(this._items).length > 0; @@ -195,11 +191,11 @@ var UserList = new Lang.Class({ return false; }); } - }, + } _onItemActivated(activatedItem) { this.emit('activate', activatedItem); - }, + } updateStyle(isExpanded) { let tasks = []; @@ -213,7 +209,7 @@ var UserList = new Lang.Class({ let item = this._items[userName]; item.actor.sync_hover(); } - }, + } scrollToItem(item) { let box = item.actor.get_allocation_box(); @@ -226,7 +222,7 @@ var UserList = new Lang.Class({ { value: value, time: _SCROLL_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } jumpToItem(item) { let box = item.actor.get_allocation_box(); @@ -236,7 +232,7 @@ var UserList = new Lang.Class({ let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0); adjustment.set_value(value); - }, + } getItemFromUserName(userName) { let item = this._items[userName]; @@ -245,11 +241,11 @@ var UserList = new Lang.Class({ return null; return item; - }, + } containsUser(user) { return this._items[user.get_user_name()] != null; - }, + } addUser(user) { if (!user.is_loaded) @@ -281,7 +277,7 @@ var UserList = new Lang.Class({ this._moveFocusToItems(); this.emit('item-added', item); - }, + } removeUser(user) { if (!user.is_loaded) @@ -299,18 +295,16 @@ var UserList = new Lang.Class({ item.actor.destroy(); delete this._items[userName]; - }, + } numItems() { return Object.keys(this._items).length; } -}); +}; Signals.addSignalMethods(UserList.prototype); -var SessionMenuButton = new Lang.Class({ - Name: 'SessionMenuButton', - - _init() { +var SessionMenuButton = class { + constructor() { let gearIcon = new St.Icon({ icon_name: 'emblem-system-symbolic' }); this._button = new St.Button({ style_class: 'login-dialog-session-list-button', reactive: true, @@ -350,13 +344,13 @@ var SessionMenuButton = new Lang.Class({ this._items = {}; this._activeSessionId = null; this._populate(); - }, + } updateSensitivity(sensitive) { this._button.reactive = sensitive; this._button.can_focus = sensitive; this._menu.close(BoxPointer.PopupAnimation.NONE); - }, + } _updateOrnament() { let itemIds = Object.keys(this._items); @@ -366,7 +360,7 @@ var SessionMenuButton = new Lang.Class({ else this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE); } - }, + } setActiveSession(sessionId) { if (sessionId == this._activeSessionId) @@ -374,11 +368,11 @@ var SessionMenuButton = new Lang.Class({ this._activeSessionId = sessionId; this._updateOrnament(); - }, + } close() { this._menu.close(); - }, + } _populate() { let ids = Gdm.get_session_ids(); @@ -403,7 +397,7 @@ var SessionMenuButton = new Lang.Class({ }); } } -}); +}; Signals.addSignalMethods(SessionMenuButton.prototype); var LoginDialog = new Lang.Class({ diff --git a/js/gdm/oVirt.js b/js/gdm/oVirt.js index e53e0ff7b..d5f6fbbac 100644 --- a/js/gdm/oVirt.js +++ b/js/gdm/oVirt.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const Signals = imports.signals; const OVirtCredentialsIface = ` @@ -28,33 +27,32 @@ function OVirtCredentials() { return self; } -var OVirtCredentialsManager = new Lang.Class({ - Name: 'OVirtCredentialsManager', - _init() { +var OVirtCredentialsManager = class { + constructor() { this._token = null; this._credentials = new OVirtCredentials(); this._credentials.connectSignal('UserAuthenticated', this._onUserAuthenticated.bind(this)); - }, + } _onUserAuthenticated(proxy, sender, [token]) { this._token = token; this.emit('user-authenticated', token); - }, + } hasToken() { return this._token != null; - }, + } getToken() { return this._token; - }, + } resetToken() { this._token = null; } -}); +}; Signals.addSignalMethods(OVirtCredentialsManager.prototype); function getOVirtCredentialsManager() { diff --git a/js/gdm/realmd.js b/js/gdm/realmd.js index 7b1fb907d..94007aa49 100644 --- a/js/gdm/realmd.js +++ b/js/gdm/realmd.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -16,10 +15,8 @@ const Service = Gio.DBusProxy.makeProxyWrapper(ServiceIface); const RealmIface = loadInterfaceXML("org.freedesktop.realmd.Realm"); const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface); -var Manager = new Lang.Class({ - Name: 'Manager', - - _init(parentActor) { +var Manager = class { + constructor(parentActor) { this._aggregateProvider = Provider(Gio.DBus.system, 'org.freedesktop.realmd', '/org/freedesktop/realmd', @@ -31,7 +28,7 @@ var Manager = new Lang.Class({ if ('Realms' in properties.deep_unpack()) this._reloadRealms(); }); - }, + } _reloadRealms() { let realmPaths = this._aggregateProvider.Realms; @@ -45,7 +42,7 @@ var Manager = new Lang.Class({ realmPaths[i], this._onRealmLoaded.bind(this)); } - }, + } _reloadRealm(realm) { if (!realm.Configured) { @@ -58,7 +55,7 @@ var Manager = new Lang.Class({ this._realms[realm.get_object_path()] = realm; this._updateLoginFormat(); - }, + } _onRealmLoaded(realm, error) { if (error) @@ -70,7 +67,7 @@ var Manager = new Lang.Class({ if ('Configured' in properties.deep_unpack()) this._reloadRealm(realm); }); - }, + } _updateLoginFormat() { let newLoginFormat; @@ -87,7 +84,7 @@ var Manager = new Lang.Class({ this._loginFormat = newLoginFormat; this.emit('login-format-changed', newLoginFormat); } - }, + } get loginFormat() { if (this._loginFormat !== undefined) @@ -96,7 +93,7 @@ var Manager = new Lang.Class({ this._updateLoginFormat(); return this._loginFormat; - }, + } release() { Service(Gio.DBus.system, @@ -107,5 +104,5 @@ var Manager = new Lang.Class({ this._realms = { }; this._updateLoginFormat(); } -}); +}; Signals.addSignalMethods(Manager.prototype) diff --git a/js/gdm/util.js b/js/gdm/util.js index eac8ccd50..63376873e 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -3,7 +3,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Signals = imports.signals; const St = imports.gi.St; @@ -119,10 +118,8 @@ function cloneAndFadeOutActor(actor) { return hold; } -var ShellUserVerifier = new Lang.Class({ - Name: 'ShellUserVerifier', - - _init(client, params) { +var ShellUserVerifier = class { + constructor(client, params) { params = Params.parse(params, { reauthenticationOnly: false }); this._reauthOnly = params.reauthenticationOnly; @@ -165,7 +162,7 @@ var ShellUserVerifier = new Lang.Class({ this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated', this._oVirtUserAuthenticated.bind(this)); - }, + } begin(userName, hold) { this._cancellable = new Gio.Cancellable(); @@ -183,7 +180,7 @@ var ShellUserVerifier = new Lang.Class({ } else { this._client.get_user_verifier(this._cancellable, this._userVerifierGot.bind(this)); } - }, + } cancel() { if (this._cancellable) @@ -193,14 +190,14 @@ var ShellUserVerifier = new Lang.Class({ this._userVerifier.call_cancel_sync(null); this.clear(); } - }, + } _clearUserVerifier() { if (this._userVerifier) { this._userVerifier.run_dispose(); this._userVerifier = null; } - }, + } clear() { if (this._cancellable) { @@ -210,7 +207,7 @@ var ShellUserVerifier = new Lang.Class({ this._clearUserVerifier(); this._clearMessageQueue(); - }, + } destroy() { this.clear(); @@ -224,7 +221,7 @@ var ShellUserVerifier = new Lang.Class({ this._oVirtCredentialsManager.disconnect(this._oVirtUserAuthenticatedId); this._oVirtCredentialsManager = null; - }, + } answerQuery(serviceName, answer) { if (!this.hasPendingMessages) { @@ -235,12 +232,12 @@ var ShellUserVerifier = new Lang.Class({ this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); }); } - }, + } _getIntervalForMessage(message) { // We probably could be smarter here return message.length * USER_READ_TIME; - }, + } finishMessageQueue() { if (!this.hasPendingMessages) @@ -250,7 +247,7 @@ var ShellUserVerifier = new Lang.Class({ this.hasPendingMessages = false; this.emit('no-more-messages'); - }, + } _queueMessageTimeout() { if (this._messageQueue.length == 0) { @@ -273,7 +270,7 @@ var ShellUserVerifier = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(this._messageQueueTimeoutId, '[gnome-shell] this._queueMessageTimeout'); - }, + } _queueMessage(message, messageType) { let interval = this._getIntervalForMessage(message); @@ -281,7 +278,7 @@ var ShellUserVerifier = new Lang.Class({ this.hasPendingMessages = true; this._messageQueue.push({ text: message, type: messageType, interval: interval }); this._queueMessageTimeout(); - }, + } _clearMessageQueue() { this.finishMessageQueue(); @@ -291,7 +288,7 @@ var ShellUserVerifier = new Lang.Class({ this._messageQueueTimeoutId = 0; } this.emit('show-message', null, MessageType.NONE); - }, + } _checkForFingerprintReader() { this._haveFingerprintReader = false; @@ -309,12 +306,12 @@ var ShellUserVerifier = new Lang.Class({ this._updateDefaultService(); } }); - }, + } _oVirtUserAuthenticated(token) { this._preemptingService = OVIRT_SERVICE_NAME; this.emit('ovirt-user-authenticated'); - }, + } _checkForSmartcard() { let smartcardDetected; @@ -336,7 +333,7 @@ var ShellUserVerifier = new Lang.Class({ this.emit('smartcard-status-changed'); } - }, + } _reportInitError(where, error) { logError(error, where); @@ -344,7 +341,7 @@ var ShellUserVerifier = new Lang.Class({ this._queueMessage(_("Authentication error"), MessageType.ERROR); this._verificationFailed(false); - }, + } _reauthenticationChannelOpened(client, result) { try { @@ -371,7 +368,7 @@ var ShellUserVerifier = new Lang.Class({ this._connectSignals(); this._beginVerification(); this._hold.release(); - }, + } _userVerifierGot(client, result) { try { @@ -387,7 +384,7 @@ var ShellUserVerifier = new Lang.Class({ this._connectSignals(); this._beginVerification(); this._hold.release(); - }, + } _connectSignals() { this._userVerifier.connect('info', this._onInfo.bind(this)); @@ -397,22 +394,22 @@ var ShellUserVerifier = new Lang.Class({ this._userVerifier.connect('conversation-stopped', this._onConversationStopped.bind(this)); this._userVerifier.connect('reset', this._onReset.bind(this)); this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this)); - }, + } _getForegroundService() { if (this._preemptingService) return this._preemptingService; return this._defaultService; - }, + } serviceIsForeground(serviceName) { return serviceName == this._getForegroundService(); - }, + } serviceIsDefault(serviceName) { return serviceName == this._defaultService; - }, + } _updateDefaultService() { if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY)) @@ -426,7 +423,7 @@ var ShellUserVerifier = new Lang.Class({ log("no authentication service is enabled, using password authentication"); this._defaultService = PASSWORD_SERVICE_NAME; } - }, + } _startService(serviceName) { this._hold.acquire(); @@ -462,14 +459,14 @@ var ShellUserVerifier = new Lang.Class({ this._hold.release(); }); } - }, + } _beginVerification() { this._startService(this._getForegroundService()); if (this._userName && this._haveFingerprintReader && !this.serviceIsForeground(FINGERPRINT_SERVICE_NAME)) this._startService(FINGERPRINT_SERVICE_NAME); - }, + } _onInfo(client, serviceName, info) { if (this.serviceIsForeground(serviceName)) { @@ -484,21 +481,21 @@ var ShellUserVerifier = new Lang.Class({ // to indicate the user can swipe their finger instead this._queueMessage(_("(or swipe finger)"), MessageType.HINT); } - }, + } _onProblem(client, serviceName, problem) { if (!this.serviceIsForeground(serviceName)) return; this._queueMessage(problem, MessageType.ERROR); - }, + } _onInfoQuery(client, serviceName, question) { if (!this.serviceIsForeground(serviceName)) return; this.emit('ask-question', serviceName, question, ''); - }, + } _onSecretInfoQuery(client, serviceName, secretQuestion) { if (!this.serviceIsForeground(serviceName)) @@ -511,7 +508,7 @@ var ShellUserVerifier = new Lang.Class({ } this.emit('ask-question', serviceName, secretQuestion, '\u25cf'); - }, + } _onReset() { // Clear previous attempts to authenticate @@ -519,20 +516,20 @@ var ShellUserVerifier = new Lang.Class({ this._updateDefaultService(); this.emit('reset'); - }, + } _onVerificationComplete() { this.emit('verification-complete'); - }, + } _cancelAndReset() { this.cancel(); this._onReset(); - }, + } _retry() { this.begin(this._userName, new Batch.Hold()); - }, + } _verificationFailed(retry) { // For Not Listed / enterprise logins, immediately reset @@ -567,7 +564,7 @@ var ShellUserVerifier = new Lang.Class({ } this.emit('verification-failed', canRetry); - }, + } _onConversationStopped(client, serviceName) { // If the login failed with the preauthenticated oVirt credentials @@ -586,6 +583,6 @@ var ShellUserVerifier = new Lang.Class({ if (this.serviceIsForeground(serviceName)) { this._verificationFailed(true); } - }, -}); + } +}; Signals.addSignalMethods(ShellUserVerifier.prototype); diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js index 6e39f87d7..be6db8343 100644 --- a/js/misc/extensionUtils.js +++ b/js/misc/extensionUtils.js @@ -3,7 +3,6 @@ // Common utils for the extension system and the extension // preferences tool -const Lang = imports.lang; const Signals = imports.signals; const Gio = imports.gi.Gio; @@ -160,9 +159,7 @@ function installImporter(extension) { imports.searchPath = oldSearchPath; } -var ExtensionFinder = new Lang.Class({ - Name: 'ExtensionFinder', - +var ExtensionFinder = class { _loadExtension(extensionDir, info, perUserDir) { let fileType = info.get_file_type(); if (fileType != Gio.FileType.DIRECTORY) @@ -184,7 +181,7 @@ var ExtensionFinder = new Lang.Class({ return; } this.emit('extension-found', extension); - }, + } scanExtensions() { let perUserDir = Gio.File.new_for_path(global.userdatadir); @@ -192,5 +189,5 @@ var ExtensionFinder = new Lang.Class({ this._loadExtension(dir, info, perUserDir); }); } -}); +}; Signals.addSignalMethods(ExtensionFinder.prototype); diff --git a/js/misc/history.js b/js/misc/history.js index f1d037018..fbe1c088f 100644 --- a/js/misc/history.js +++ b/js/misc/history.js @@ -1,16 +1,13 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Signals = imports.signals; const Clutter = imports.gi.Clutter; const Params = imports.misc.params; var DEFAULT_LIMIT = 512; -var HistoryManager = new Lang.Class({ - Name: 'HistoryManager', - - _init(params) { +var HistoryManager = class { + constructor(params) { params = Params.parse(params, { gsettingsKey: null, limit: DEFAULT_LIMIT, entry: null }); @@ -34,12 +31,12 @@ var HistoryManager = new Lang.Class({ this._entry.connect('key-press-event', this._onEntryKeyPress.bind(this)); } - }, + } _historyChanged() { this._history = global.settings.get_strv(this._key); this._historyIndex = this._history.length; - }, + } _setPrevItem(text) { if (this._historyIndex <= 0) @@ -50,7 +47,7 @@ var HistoryManager = new Lang.Class({ this._historyIndex--; this._indexChanged(); return true; - }, + } _setNextItem(text) { if (this._historyIndex >= this._history.length) @@ -61,7 +58,7 @@ var HistoryManager = new Lang.Class({ this._historyIndex++; this._indexChanged(); return true; - }, + } lastItem() { if (this._historyIndex != this._history.length) { @@ -70,7 +67,7 @@ var HistoryManager = new Lang.Class({ } return this._historyIndex ? this._history[this._historyIndex -1] : null; - }, + } addItem(input) { if (this._history.length == 0 || @@ -81,7 +78,7 @@ var HistoryManager = new Lang.Class({ this._save(); } this._historyIndex = this._history.length; - }, + } _onEntryKeyPress(entry, event) { let symbol = event.get_key_symbol(); @@ -91,7 +88,7 @@ var HistoryManager = new Lang.Class({ return this._setNextItem(entry.get_text()); } return Clutter.EVENT_PROPAGATE; - }, + } _indexChanged() { let current = this._history[this._historyIndex] || ''; @@ -99,7 +96,7 @@ var HistoryManager = new Lang.Class({ if (this._entry) this._entry.set_text(current); - }, + } _save() { if (this._history.length > this._limit) @@ -108,5 +105,5 @@ var HistoryManager = new Lang.Class({ if (this._key) global.settings.set_strv(this._key, this._history); } -}); +}; Signals.addSignalMethods(HistoryManager.prototype); diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js index 33ad8777e..fe86a8326 100644 --- a/js/misc/ibusManager.js +++ b/js/misc/ibusManager.js @@ -2,7 +2,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Signals = imports.signals; @@ -32,17 +31,16 @@ function getIBusManager() { return _ibusManager; } -var IBusManager = new Lang.Class({ - Name: 'IBusManager', - - // This is the longest we'll keep the keyboard frozen until an input - // source is active. - _MAX_INPUT_SOURCE_ACTIVATION_TIME: 4000, // ms - _PRELOAD_ENGINES_DELAY_TIME: 30, // sec - - _init() { +var IBusManager = class { + constructor() { IBus.init(); + // This is the longest we'll keep the keyboard frozen until an input + // source is active. + this._MAX_INPUT_SOURCE_ACTIVATION_TIME = 4000; // ms + this._PRELOAD_ENGINES_DELAY_TIME = 30; // sec + + this._candidatePopup = new IBusCandidatePopup.CandidatePopup(); this._panelService = null; @@ -60,7 +58,7 @@ var IBusManager = new Lang.Class({ this._ibus.connect('global-engine-changed', this._engineChanged.bind(this)); this._spawn(); - }, + } _spawn() { try { @@ -69,7 +67,7 @@ var IBusManager = new Lang.Class({ } catch(e) { log('Failed to launch ibus-daemon: ' + e.message); } - }, + } _clear() { if (this._panelService) @@ -85,7 +83,7 @@ var IBusManager = new Lang.Class({ this.emit('ready', false); this._spawn(); - }, + } _onConnected() { this._ibus.list_engines_async(-1, null, this._initEngines.bind(this)); @@ -93,7 +91,7 @@ var IBusManager = new Lang.Class({ IBus.BusNameFlag.REPLACE_EXISTING, -1, null, this._initPanelService.bind(this)); - }, + } _initEngines(ibus, result) { let enginesList = this._ibus.list_engines_async_finish(result); @@ -106,7 +104,7 @@ var IBusManager = new Lang.Class({ } else { this._clear(); } - }, + } _initPanelService(ibus, result) { let success = this._ibus.request_name_async_finish(result); @@ -151,13 +149,13 @@ var IBusManager = new Lang.Class({ } else { this._clear(); } - }, + } _updateReadiness() { this._ready = (Object.keys(this._engines).length > 0 && this._panelService != null); this.emit('ready', this._ready); - }, + } _engineChanged(bus, engineName) { if (!this._ready) @@ -178,26 +176,26 @@ var IBusManager = new Lang.Class({ this.emit('properties-registered', this._currentEngineName, props); }); - }, + } _updateProperty(panel, prop) { this.emit('property-updated', this._currentEngineName, prop); - }, + } _setContentType(panel, purpose, hints) { this.emit('set-content-type', purpose, hints); - }, + } activateProperty(key, state) { this._panelService.property_activate(key, state); - }, + } getEngineDesc(id) { if (!this._ready || !this._engines.hasOwnProperty(id)) return null; return this._engines[id]; - }, + } setEngine(id, callback) { // Send id even if id == this._currentEngineName @@ -211,7 +209,7 @@ var IBusManager = new Lang.Class({ this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME, null, callback || null); - }, + } preloadEngines(ids) { if (!this._ibus || ids.length == 0) @@ -233,6 +231,6 @@ var IBusManager = new Lang.Class({ this._preloadEnginesId = 0; return GLib.SOURCE_REMOVE; }); - }, -}); + } +}; Signals.addSignalMethods(IBusManager.prototype); diff --git a/js/misc/introspect.js b/js/misc/introspect.js index 5599e1a66..b9b0a987b 100644 --- a/js/misc/introspect.js +++ b/js/misc/introspect.js @@ -1,6 +1,5 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; @@ -12,10 +11,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils; const IntrospectDBusIface = loadInterfaceXML('org.gnome.Shell.Introspect'); -var IntrospectService = new Lang.Class({ - Name: 'IntrospectService', - - _init() { +var IntrospectService = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(IntrospectDBusIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Introspect'); @@ -45,21 +42,21 @@ var IntrospectService = new Lang.Class({ }); this._syncRunningApplications(); - }, + } _isStandaloneApp(app) { let windows = app.get_windows(); return app.get_windows().some(w => w.transient_for == null); - }, + } _isIntrospectEnabled() { return this._settings.get_boolean(INTROSPECT_KEY); - }, + } _isSenderWhitelisted(sender) { return APP_WHITELIST.includes(sender); - }, + } _syncRunningApplications() { let tracker = Shell.WindowTracker.get_default(); @@ -95,7 +92,7 @@ var IntrospectService = new Lang.Class({ } this._runningApplicationsDirty = false; this._activeApplicationDirty = false; - }, + } _isEligibleWindow(window) { if (window.is_override_redirect()) @@ -106,7 +103,7 @@ var IntrospectService = new Lang.Class({ type == Meta.WindowType.DIALOG || type == Meta.WindowType.MODAL_DIALOG || type == Meta.WindowType.UTILITY); - }, + } GetRunningApplicationsAsync(params, invocation) { if (!this._isIntrospectEnabled() && @@ -118,7 +115,7 @@ var IntrospectService = new Lang.Class({ } invocation.return_value(new GLib.Variant('(a{sa{sv}})', [this._runningApplications])); - }, + } GetWindowsAsync(params, invocation) { let focusWindow = global.display.get_focus_window(); @@ -163,4 +160,4 @@ var IntrospectService = new Lang.Class({ } invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList])); } -}); +}; diff --git a/js/misc/keyboardManager.js b/js/misc/keyboardManager.js index f4001f130..5d720e88a 100644 --- a/js/misc/keyboardManager.js +++ b/js/misc/keyboardManager.js @@ -2,7 +2,6 @@ const GLib = imports.gi.GLib; const GnomeDesktop = imports.gi.GnomeDesktop; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Main = imports.ui.main; @@ -38,22 +37,20 @@ function holdKeyboard() { global.display.freeze_keyboard(global.get_current_time()); } -var KeyboardManager = new Lang.Class({ - Name: 'KeyboardManager', +var KeyboardManager = class { + constructor() { + // The XKB protocol doesn't allow for more that 4 layouts in a + // keymap. Wayland doesn't impose this limit and libxkbcommon can + // handle up to 32 layouts but since we need to support X clients + // even as a Wayland compositor, we can't bump this. + this.MAX_LAYOUTS_PER_GROUP = 4; - // The XKB protocol doesn't allow for more that 4 layouts in a - // keymap. Wayland doesn't impose this limit and libxkbcommon can - // handle up to 32 layouts but since we need to support X clients - // even as a Wayland compositor, we can't bump this. - MAX_LAYOUTS_PER_GROUP: 4, - - _init() { this._xkbInfo = getXkbInfo(); this._current = null; this._localeLayoutInfo = this._getLocaleLayout(); this._layoutInfos = {}; this._currentKeymap = null; - }, + } _applyLayoutGroup(group) { let options = this._buildOptionsString(); @@ -67,11 +64,11 @@ var KeyboardManager = new Lang.Class({ this._currentKeymap = {layouts, variants, options}; Meta.get_backend().set_keymap(layouts, variants, options); - }, + } _applyLayoutGroupIndex(idx) { Meta.get_backend().lock_layout_group(idx); - }, + } apply(id) { let info = this._layoutInfos[id]; @@ -87,7 +84,7 @@ var KeyboardManager = new Lang.Class({ } this._current = info; - }, + } reapply() { if (!this._current) @@ -95,7 +92,7 @@ var KeyboardManager = new Lang.Class({ this._applyLayoutGroup(this._current.group); this._applyLayoutGroupIndex(this._current.groupIndex); - }, + } setUserLayouts(ids) { this._current = null; @@ -126,7 +123,7 @@ var KeyboardManager = new Lang.Class({ i += 1; } - }, + } _getLocaleLayout() { let locale = GLib.get_language_names()[0]; @@ -143,21 +140,21 @@ var KeyboardManager = new Lang.Class({ return { layout: _layout, variant: _variant }; else return { layout: DEFAULT_LAYOUT, variant: DEFAULT_VARIANT }; - }, + } _buildGroupStrings(_group) { let group = _group.concat(this._localeLayoutInfo); let layouts = group.map(g => g.layout).join(','); let variants = group.map(g => g.variant).join(','); return [layouts, variants]; - }, + } setKeyboardOptions(options) { this._xkbOptions = options; - }, + } _buildOptionsString() { let options = this._xkbOptions.join(','); return options; } -}); +}; diff --git a/js/misc/loginManager.js b/js/misc/loginManager.js index d3868184e..139129b60 100644 --- a/js/misc/loginManager.js +++ b/js/misc/loginManager.js @@ -2,7 +2,6 @@ const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -70,10 +69,8 @@ function getLoginManager() { return _loginManager; } -var LoginManagerSystemd = new Lang.Class({ - Name: 'LoginManagerSystemd', - - _init() { +var LoginManagerSystemd = class { + constructor() { this._proxy = new SystemdLoginManager(Gio.DBus.system, 'org.freedesktop.login1', '/org/freedesktop/login1'); @@ -82,7 +79,7 @@ var LoginManagerSystemd = new Lang.Class({ '/org/freedesktop/login1/user/self'); this._proxy.connectSignal('PrepareForSleep', this._prepareForSleep.bind(this)); - }, + } getCurrentSessionProxy(callback) { if (this._currentSession) { @@ -129,7 +126,7 @@ var LoginManagerSystemd = new Lang.Class({ callback(this._currentSession); } }); - }, + } canSuspend(asyncCallback) { this._proxy.CanSuspendRemote((result, error) => { @@ -141,7 +138,7 @@ var LoginManagerSystemd = new Lang.Class({ asyncCallback(canSuspend, needsAuth); } }); - }, + } listSessions(asyncCallback) { this._proxy.ListSessionsRemote((result, error) => { @@ -150,11 +147,11 @@ var LoginManagerSystemd = new Lang.Class({ else asyncCallback(result[0]); }); - }, + } suspend() { this._proxy.SuspendRemote(true); - }, + } inhibit(reason, callback) { let inVariant = GLib.Variant.new('(ssss)', @@ -174,38 +171,36 @@ var LoginManagerSystemd = new Lang.Class({ callback(null); } }); - }, + } _prepareForSleep(proxy, sender, [aboutToSuspend]) { this.emit('prepare-for-sleep', aboutToSuspend); } -}); +}; Signals.addSignalMethods(LoginManagerSystemd.prototype); -var LoginManagerDummy = new Lang.Class({ - Name: 'LoginManagerDummy', - +var LoginManagerDummy = class { getCurrentSessionProxy(callback) { // we could return a DummySession object that fakes whatever callers // expect (at the time of writing: connect() and connectSignal() // methods), but just never calling the callback should be safer - }, + } canSuspend(asyncCallback) { asyncCallback(false, false); - }, + } listSessions(asyncCallback) { asyncCallback([]); - }, + } suspend() { this.emit('prepare-for-sleep', true); this.emit('prepare-for-sleep', false); - }, + } inhibit(reason, callback) { callback(null); } -}); +}; Signals.addSignalMethods(LoginManagerDummy.prototype); diff --git a/js/misc/modemManager.js b/js/misc/modemManager.js index f57057848..82849ba1e 100644 --- a/js/misc/modemManager.js +++ b/js/misc/modemManager.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const NMA = imports.gi.NMA; const Signals = imports.signals; @@ -100,10 +99,8 @@ const ModemGsmNetworkProxy = Gio.DBusProxy.makeProxyWrapper(ModemGsmNetworkInter const ModemCdmaInterface = loadInterfaceXML('org.freedesktop.ModemManager.Modem.Cdma'); const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface); -var ModemGsm = new Lang.Class({ - Name: 'ModemGsm', - - _init(path) { +var ModemGsm = class { + constructor(path) { this._proxy = new ModemGsmNetworkProxy(Gio.DBus.system, 'org.freedesktop.ModemManager', path); this.signal_quality = 0; @@ -139,13 +136,11 @@ var ModemGsm = new Lang.Class({ this.emit('notify::signal-quality'); }); } -}); +}; Signals.addSignalMethods(ModemGsm.prototype); -var ModemCdma = new Lang.Class({ - Name: 'ModemCdma', - - _init(path) { +var ModemCdma = class { + constructor(path) { this._proxy = new ModemCdmaProxy(Gio.DBus.system, 'org.freedesktop.ModemManager', path); this.signal_quality = 0; @@ -169,7 +164,7 @@ var ModemCdma = new Lang.Class({ } this.emit('notify::signal-quality'); }); - }, + } _refreshServingSystem() { this._proxy.GetServingSystemRemote(([result], err) => { @@ -184,7 +179,7 @@ var ModemCdma = new Lang.Class({ this.emit('notify::operator-name'); }); } -}); +}; Signals.addSignalMethods(ModemCdma.prototype); @@ -201,10 +196,8 @@ const BroadbandModem3gppProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModem3gp const BroadbandModemCdmaInterface = loadInterfaceXML('org.freedesktop.ModemManager1.Modem.ModemCdma'); const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface); -var BroadbandModem = new Lang.Class({ - Name: 'BroadbandModem', - - _init(path, capabilities) { +var BroadbandModem = class { + constructor(path, capabilities) { this._proxy = new BroadbandModemProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path); this._proxy_3gpp = new BroadbandModem3gppProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path); this._proxy_cdma = new BroadbandModemCdmaProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path); @@ -229,13 +222,13 @@ var BroadbandModem = new Lang.Class({ this._reloadCdmaOperatorName(); }); this._reloadCdmaOperatorName(); - }, + } _reloadSignalQuality() { let [quality, recent] = this._proxy.SignalQuality; this.signal_quality = quality; this.emit('notify::signal-quality'); - }, + } _reloadOperatorName() { let new_name = ""; @@ -250,19 +243,19 @@ var BroadbandModem = new Lang.Class({ this.operator_name = new_name; this.emit('notify::operator-name'); - }, + } _reload3gppOperatorName() { let name = this._proxy_3gpp.OperatorName; let code = this._proxy_3gpp.OperatorCode; this.operator_name_3gpp = _findProviderForMccMnc(name, code); this._reloadOperatorName(); - }, + } _reloadCdmaOperatorName() { let sid = this._proxy_cdma.Sid; this.operator_name_cdma = _findProviderForSid(sid); this._reloadOperatorName(); } -}); +}; Signals.addSignalMethods(BroadbandModem.prototype); diff --git a/js/misc/objectManager.js b/js/misc/objectManager.js index a1b7eb9d2..5a1ee3180 100644 --- a/js/misc/objectManager.js +++ b/js/misc/objectManager.js @@ -2,7 +2,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Params = imports.misc.params; const Signals = imports.signals; @@ -27,9 +26,8 @@ const ObjectManagerIface = ` const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface); -var ObjectManager = new Lang.Class({ - Name: 'ObjectManager', - _init(params) { +var ObjectManager = class { + constructor(params) { params = Params.parse(params, { connection: null, name: null, objectPath: null, @@ -63,7 +61,7 @@ var ObjectManager = new Lang.Class({ this._managerProxy.init_async(GLib.PRIORITY_DEFAULT, this._cancellable, this._onManagerProxyLoaded.bind(this)); - }, + } _tryToCompleteLoad() { if (this._numLoadInhibitors == 0) @@ -74,7 +72,7 @@ var ObjectManager = new Lang.Class({ if (this._onLoaded) this._onLoaded(); } - }, + } _addInterface(objectPath, interfaceName, onFinished) { let info = this._interfaceInfos[interfaceName]; @@ -129,7 +127,7 @@ var ObjectManager = new Lang.Class({ if (onFinished) onFinished(); }); - }, + } _removeInterface(objectPath, interfaceName) { if (!this._objects[objectPath]) @@ -155,7 +153,7 @@ var ObjectManager = new Lang.Class({ delete this._objects[objectPath]; this.emit('object-removed', objectPath); } - }, + } _onManagerProxyLoaded(initable, result) { let error = null; @@ -194,7 +192,7 @@ var ObjectManager = new Lang.Class({ if (this._managerProxy.g_name_owner) this._onNameAppeared(); - }, + } _onNameAppeared() { this._managerProxy.GetManagedObjectsRemote((result, error) => { @@ -232,7 +230,7 @@ var ObjectManager = new Lang.Class({ } this._tryToCompleteLoad(); }); - }, + } _onNameVanished() { let objectPaths = Object.keys(this._objects); @@ -248,14 +246,14 @@ var ObjectManager = new Lang.Class({ this._removeInterface(objectPath, interfaceName); } } - }, + } _registerInterfaces(interfaces) { for (let i = 0; i < interfaces.length; i++) { let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]); this._interfaceInfos[info.name] = info; } - }, + } getProxy(objectPath, interfaceName) { let object = this._objects[objectPath]; @@ -264,7 +262,7 @@ var ObjectManager = new Lang.Class({ return null; return object[interfaceName]; - }, + } getProxiesForInterface(interfaceName) { let proxyList = this._interfaces[interfaceName]; @@ -273,7 +271,7 @@ var ObjectManager = new Lang.Class({ return []; return proxyList; - }, + } getAllProxies() { let proxies = []; @@ -292,5 +290,5 @@ var ObjectManager = new Lang.Class({ return proxies; } -}); +}; Signals.addSignalMethods(ObjectManager.prototype); diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js index 51d2ea9cc..b67f9a785 100644 --- a/js/misc/smartcardManager.js +++ b/js/misc/smartcardManager.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -26,9 +25,8 @@ function getSmartcardManager() { return _smartcardManager; } -var SmartcardManager = new Lang.Class({ - Name: 'SmartcardManager', - _init() { +var SmartcardManager = class { + constructor() { this._objectManager = new ObjectManager.ObjectManager({ connection: Gio.DBus.session, name: "org.gnome.SettingsDaemon.Smartcard", objectPath: '/org/gnome/SettingsDaemon/Smartcard', @@ -36,7 +34,7 @@ var SmartcardManager = new Lang.Class({ onLoaded: this._onLoaded.bind(this) }); this._insertedTokens = {}; this._loginToken = null; - }, + } _onLoaded() { let tokens = this._objectManager.getProxiesForInterface('org.gnome.SettingsDaemon.Smartcard.Token'); @@ -53,7 +51,7 @@ var SmartcardManager = new Lang.Class({ if (interfaceName == 'org.gnome.SettingsDaemon.Smartcard.Token') this._removeToken(proxy); }); - }, + } _updateToken(token) { let objectPath = token.get_object_path(); @@ -65,7 +63,7 @@ var SmartcardManager = new Lang.Class({ if (token.UsedToLogin) this._loginToken = token; - }, + } _addToken(token) { this._updateToken(token); @@ -85,7 +83,7 @@ var SmartcardManager = new Lang.Class({ // Emit a smartcard-inserted at startup if it's already plugged in if (token.IsInserted) this.emit('smartcard-inserted', token); - }, + } _removeToken(token) { let objectPath = token.get_object_path(); @@ -99,11 +97,11 @@ var SmartcardManager = new Lang.Class({ this._loginToken = null; token.disconnectAll(); - }, + } hasInsertedTokens() { return Object.keys(this._insertedTokens).length > 0; - }, + } hasInsertedLoginToken() { if (!this._loginToken) @@ -115,5 +113,5 @@ var SmartcardManager = new Lang.Class({ return true; } -}); +}; Signals.addSignalMethods(SmartcardManager.prototype); diff --git a/js/misc/util.js b/js/misc/util.js index 4e1f5de55..25fe3d02e 100644 --- a/js/misc/util.js +++ b/js/misc/util.js @@ -437,10 +437,8 @@ function ensureActorVisibleInScrollView(scrollView, actor) { transition: 'easeOutQuad' }); } -var AppSettingsMonitor = new Lang.Class({ - Name: 'AppSettingsMonitor', - - _init(appId, schemaId) { +var AppSettingsMonitor = class { + constructor(appId, schemaId) { this._appId = appId; this._schemaId = schemaId; @@ -454,23 +452,23 @@ var AppSettingsMonitor = new Lang.Class({ this._appSystem.connect('installed-changed', this._onInstalledChanged.bind(this)); this._onInstalledChanged(); - }, + } get available() { return this._app != null && this._settings != null; - }, + } activateApp() { if (this._app) this._app.activate(); - }, + } watchSetting(key, callback) { let handler = { id: 0, key: key, callback: callback }; this._handlers.push(handler); this._connectHandler(handler); - }, + } _connectHandler(handler) { if (!this._settings || handler.id > 0) @@ -479,13 +477,13 @@ var AppSettingsMonitor = new Lang.Class({ handler.id = this._settings.connect('changed::' + handler.key, handler.callback); handler.callback(this._settings, handler.key); - }, + } _disconnectHandler(handler) { if (this._settings && handler.id > 0) this._settings.disconnect(handler.id); handler.id = 0; - }, + } _onInstalledChanged() { let hadApp = (this._app != null); @@ -499,7 +497,7 @@ var AppSettingsMonitor = new Lang.Class({ this._checkSettings(); else this._setSettings(null); - }, + } _setSettings(settings) { this._handlers.forEach((handler) => { this._disconnectHandler(handler); }); @@ -512,7 +510,7 @@ var AppSettingsMonitor = new Lang.Class({ if (hadSettings != haveSettings) this.emit('available-changed'); - }, + } _checkSettings() { let schema = this._schemaSource.lookup(this._schemaId, true); @@ -525,5 +523,5 @@ var AppSettingsMonitor = new Lang.Class({ }); } } -}); +}; Signals.addSignalMethods(AppSettingsMonitor.prototype); diff --git a/js/misc/weather.js b/js/misc/weather.js index 398f1fd52..ce50b2ff4 100644 --- a/js/misc/weather.js +++ b/js/misc/weather.js @@ -4,7 +4,6 @@ const Geoclue = imports.gi.Geoclue; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const GWeather = imports.gi.GWeather; -const Lang = imports.lang; const Signals = imports.signals; const PermissionStore = imports.misc.permissionStore; @@ -13,10 +12,8 @@ const Util = imports.misc.util; // Minimum time between updates to show loading indication var UPDATE_THRESHOLD = 10 * GLib.TIME_SPAN_MINUTE; -var WeatherClient = new Lang.Class({ - Name: 'WeatherClient', - - _init() { +var WeatherClient = class { + constructor() { this._loading = false; this._locationValid = false; this._lastUpdate = GLib.DateTime.new_from_unix_local(0); @@ -71,27 +68,27 @@ var WeatherClient = new Lang.Class({ this._onAutomaticLocationChanged.bind(this)); this._weatherAppMon.watchSetting('locations', this._onLocationsChanged.bind(this)); - }, + } get available() { return this._weatherAppMon.available; - }, + } get loading() { return this._loading; - }, + } get hasLocation() { return this._locationValid; - }, + } get info() { return this._weatherInfo; - }, + } activateApp() { this._weatherAppMon.activateApp(); - }, + } update() { if (!this._locationValid) @@ -104,13 +101,13 @@ var WeatherClient = new Lang.Class({ this._weatherInfo.update(); else this._loadInfo(); - }, + } get _useAutoLocation() { return this._autoLocationRequested && this._locationSettings.get_boolean('enabled') && this._weatherAuthorized; - }, + } _loadInfo() { let id = this._weatherInfo.connect('updated', () => { @@ -122,7 +119,7 @@ var WeatherClient = new Lang.Class({ this.emit('changed'); this._weatherInfo.update(); - }, + } _locationsEqual(loc1, loc2) { if (loc1 == loc2) @@ -132,7 +129,7 @@ var WeatherClient = new Lang.Class({ return false; return loc1.equal(loc2); - }, + } _setLocation(location) { if (this._locationsEqual(this._weatherInfo.location, location)) @@ -148,7 +145,7 @@ var WeatherClient = new Lang.Class({ this._loadInfo(); else this.emit('changed'); - }, + } _updateLocationMonitoring() { if (this._useAutoLocation) { @@ -164,7 +161,7 @@ var WeatherClient = new Lang.Class({ this._gclueService.disconnect(this._gclueLocationChangedId); this._gclueLocationChangedId = 0; } - }, + } _startGClueService() { if (this._gclueStarting) @@ -185,7 +182,7 @@ var WeatherClient = new Lang.Class({ this._gclueService.get_client().distance_threshold = 100; this._updateLocationMonitoring(); }); - }, + } _onGClueLocationChanged() { let geoLocation = this._gclueService.location; @@ -194,7 +191,7 @@ var WeatherClient = new Lang.Class({ geoLocation.latitude, geoLocation.longitude); this._setLocation(location); - }, + } _onAutomaticLocationChanged(settings, key) { let useAutoLocation = settings.get_boolean(key); @@ -204,7 +201,7 @@ var WeatherClient = new Lang.Class({ this._autoLocationRequested = useAutoLocation; this._updateAutoLocation(); - }, + } _updateAutoLocation() { this._updateLocationMonitoring(); @@ -213,7 +210,7 @@ var WeatherClient = new Lang.Class({ this._startGClueService(); else this._setLocation(this._mostRecentLocation); - }, + } _onLocationsChanged(settings, key) { let serialized = settings.get_value(key).deep_unpack().shift(); @@ -229,7 +226,7 @@ var WeatherClient = new Lang.Class({ if (!this._useAutoLocation || !this._gclueStarted) this._setLocation(this._mostRecentLocation); - }, + } _onPermStoreChanged(proxy, sender, params) { let [table, id, deleted, data, perms] = params; @@ -243,5 +240,5 @@ var WeatherClient = new Lang.Class({ this._updateAutoLocation(); } -}); +}; Signals.addSignalMethods(WeatherClient.prototype); diff --git a/js/ui/accessDialog.js b/js/ui/accessDialog.js index ca0ff54a5..c6a5a1882 100644 --- a/js/ui/accessDialog.js +++ b/js/ui/accessDialog.js @@ -1,7 +1,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Pango = imports.gi.Pango; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -21,12 +20,9 @@ var DialogResponse = { CLOSED: 2 }; -var AccessDialog = new Lang.Class({ - Name: 'AccessDialog', - Extends: ModalDialog.ModalDialog, - - _init(invocation, handle, title, subtitle, body, options) { - this.parent({ styleClass: 'access-dialog' }); +var AccessDialog = class extends ModalDialog.ModalDialog { + constructor(invocation, handle, title, subtitle, body, options) { + super({ styleClass: 'access-dialog' }); this._invocation = invocation; this._handle = handle; @@ -38,7 +34,7 @@ var AccessDialog = new Lang.Class({ options[option] = options[option].deep_unpack(); this._buildLayout(title, subtitle, body, options); - }, + } _buildLayout(title, subtitle, body, options) { // No support for non-modal system dialogs, so ignore the option @@ -78,14 +74,14 @@ var AccessDialog = new Lang.Class({ action: () => { this._sendResponse(DialogResponse.OK); }}); - }, + } open() { - this.parent(); + super.open(); let connection = this._invocation.get_connection(); this._requestExported = this._request.export(connection, this._handle); - }, + } CloseAsync(invocation, params) { if (this._invocation.get_sender() != invocation.get_sender()) { @@ -96,7 +92,7 @@ var AccessDialog = new Lang.Class({ } this._sendResponse(DialogResponse.CLOSED); - }, + } _sendResponse(response) { if (this._requestExported) @@ -118,12 +114,10 @@ var AccessDialog = new Lang.Class({ }); this.close(); } -}); +}; -var AccessDialogDBus = new Lang.Class({ - Name: 'AccessDialogDBus', - - _init() { +var AccessDialogDBus = class { + constructor() { this._accessDialog = null; this._windowTracker = Shell.WindowTracker.get_default(); @@ -132,7 +126,7 @@ var AccessDialogDBus = new Lang.Class({ this._dbusImpl.export(Gio.DBus.session, '/org/freedesktop/portal/desktop'); Gio.DBus.session.own_name('org.freedesktop.impl.portal.desktop.gnome', Gio.BusNameOwnerFlags.REPLACE, null, null); - }, + } AccessDialogAsync(params, invocation) { if (this._accessDialog) { @@ -160,4 +154,4 @@ var AccessDialogDBus = new Lang.Class({ this._accessDialog = dialog; } -}); +}; diff --git a/js/ui/altTab.js b/js/ui/altTab.js index d6d99f270..7544a3d1f 100644 --- a/js/ui/altTab.js +++ b/js/ui/altTab.js @@ -411,10 +411,8 @@ var AppSwitcherPopup = new Lang.Class({ } }); -var CyclerHighlight = new Lang.Class({ - Name: 'CyclerHighlight', - - _init() { +class CyclerHighlight { + constructor() { this._window = null; this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout() }); @@ -434,7 +432,7 @@ var CyclerHighlight = new Lang.Class({ this.actor.connect('notify::allocation', this._onAllocationChanged.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this)); - }, + } set window(w) { if (this._window == w) @@ -452,7 +450,7 @@ var CyclerHighlight = new Lang.Class({ windowActor.hide(); this._clone.source = windowActor; - }, + } _onAllocationChanged() { if (!this._window) { @@ -465,12 +463,12 @@ var CyclerHighlight = new Lang.Class({ this._highlight.set_position(rect.x - x, rect.y - y); this._highlight.show(); } - }, + } _onDestroy() { this.window = null; } -}); +}; // We don't show an actual popup, so just provide what SwitcherPopup // expects instead of inheriting from SwitcherList diff --git a/js/ui/animation.js b/js/ui/animation.js index 65fff2cd7..12e2ab282 100644 --- a/js/ui/animation.js +++ b/js/ui/animation.js @@ -2,7 +2,6 @@ const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; -const Lang = imports.lang; const Mainloop = imports.mainloop; const St = imports.gi.St; const Signals = imports.signals; @@ -14,10 +13,8 @@ var ANIMATED_ICON_UPDATE_TIMEOUT = 16; var SPINNER_ANIMATION_TIME = 0.3; var SPINNER_ANIMATION_DELAY = 1.0; -var Animation = new Lang.Class({ - Name: 'Animation', - - _init(file, width, height, speed) { +var Animation = class { + constructor(file, width, height, speed) { this.actor = new St.Bin(); this.actor.connect('destroy', this._onDestroy.bind(this)); this._speed = speed; @@ -31,7 +28,7 @@ var Animation = new Lang.Class({ this._animations = St.TextureCache.get_default().load_sliced_image (file, width, height, scaleFactor, this._animationsLoaded.bind(this)); this.actor.set_child(this._animations); - }, + } play() { if (this._isLoaded && this._timeoutId == 0) { @@ -43,7 +40,7 @@ var Animation = new Lang.Class({ } this._isPlaying = true; - }, + } stop() { if (this._timeoutId > 0) { @@ -52,7 +49,7 @@ var Animation = new Lang.Class({ } this._isPlaying = false; - }, + } _showFrame(frame) { let oldFrameActor = this._animations.get_child_at_index(this._frame); @@ -64,56 +61,50 @@ var Animation = new Lang.Class({ let newFrameActor = this._animations.get_child_at_index(this._frame); if (newFrameActor) newFrameActor.show(); - }, + } _update() { this._showFrame(this._frame + 1); return GLib.SOURCE_CONTINUE; - }, + } _animationsLoaded() { this._isLoaded = this._animations.get_n_children() > 0; if (this._isPlaying) this.play(); - }, + } _onDestroy() { this.stop(); } -}); +}; -var AnimatedIcon = new Lang.Class({ - Name: 'AnimatedIcon', - Extends: Animation, - - _init(file, size) { - this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); +var AnimatedIcon = class extends Animation { + constructor(file, size) { + super(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT); } -}); +}; -var Spinner = new Lang.Class({ - Name: 'Spinner', - Extends: AnimatedIcon, - - _init(size, animate=false) { +var Spinner = class extends AnimatedIcon { + constructor(size, animate=false) { let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); - this.parent(file, size); + super(file, size); this.actor.opacity = 0; this._animate = animate; - }, + } _onDestroy() { this._animate = false; - this.parent(); - }, + super._onDestroy(); + } play() { Tweener.removeTweens(this.actor); if (this._animate) { - this.parent(); + super.play(); Tweener.addTween(this.actor, { opacity: 255, delay: SPINNER_ANIMATION_DELAY, @@ -122,9 +113,9 @@ var Spinner = new Lang.Class({ }); } else { this.actor.opacity = 255; - this.parent(); + super.play(); } - }, + } stop() { Tweener.removeTweens(this.actor); @@ -140,7 +131,7 @@ var Spinner = new Lang.Class({ }); } else { this.actor.opacity = 0; - this.parent(); + super.stop(); } } -}); +}; diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index c705a0d77..0feb26ff5 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -108,11 +108,11 @@ function clamp(value, min, max) { return Math.max(min, Math.min(max, value)); } -var BaseAppView = new Lang.Class({ - Name: 'BaseAppView', - Abstract: true, +class BaseAppView { + constructor(params, gridParams) { + if (new.target === BaseAppView) + throw new TypeError('Cannot instantiate abstract class ' + new.target.name); - _init(params, gridParams) { gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE, columnLimit: MAX_COLUMNS, minRows: MIN_ROWS, @@ -134,26 +134,26 @@ var BaseAppView = new Lang.Class({ this._items = {}; this._allItems = []; - }, + } _childFocused(actor) { // Nothing by default - }, + } removeAll() { this._grid.destroyAll(); this._items = {}; this._allItems = []; - }, + } _redisplay() { this.removeAll(); this._loadApps(); - }, + } getAllItems() { return this._allItems; - }, + } addItem(icon) { let id = icon.id; @@ -162,24 +162,24 @@ var BaseAppView = new Lang.Class({ this._allItems.push(icon); this._items[id] = icon; - }, + } _compareItems(a, b) { return a.name.localeCompare(b.name); - }, + } loadGrid() { this._allItems.sort(this._compareItems); this._allItems.forEach(item => { this._grid.addItem(item); }); this.emit('view-loaded'); - }, + } _selectAppInternal(id) { if (this._items[id]) this._items[id].actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); else log('No such application ' + id); - }, + } selectApp(id) { if (this._items[id] && this._items[id].actor.mapped) { @@ -200,13 +200,13 @@ var BaseAppView = new Lang.Class({ this.selectApp(id); }); } - }, + } _doSpringAnimation(animationDirection) { this._grid.opacity = 255; this._grid.animateSpring(animationDirection, Main.overview.getShowAppsButton()); - }, + } animate(animationDirection, onComplete) { if (onComplete) { @@ -224,7 +224,7 @@ var BaseAppView = new Lang.Class({ } else { this._doSpringAnimation(animationDirection); } - }, + } animateSwitch(animationDirection) { Tweener.removeTweens(this.actor); @@ -244,7 +244,7 @@ var BaseAppView = new Lang.Class({ Tweener.addTween(this._grid, params); } -}); +}; Signals.addSignalMethods(BaseAppView.prototype); var PageIndicatorsActor = new Lang.Class({ @@ -271,10 +271,8 @@ var PageIndicatorsActor = new Lang.Class({ } }); -var PageIndicators = new Lang.Class({ - Name:'PageIndicators', - - _init() { +class PageIndicators { + constructor() { this.actor = new PageIndicatorsActor(); this._nPages = 0; this._currentPage = undefined; @@ -282,7 +280,7 @@ var PageIndicators = new Lang.Class({ this.actor.connect('notify::mapped', () => { this.animateIndicators(IconGrid.AnimationDirection.IN); }); - }, + } setNPages(nPages) { if (this._nPages == nPages) @@ -311,7 +309,7 @@ var PageIndicators = new Lang.Class({ } this._nPages = nPages; this.actor.visible = (this._nPages > 1); - }, + } setCurrentPage(currentPage) { this._currentPage = currentPage; @@ -319,7 +317,7 @@ var PageIndicators = new Lang.Class({ let children = this.actor.get_children(); for (let i = 0; i < children.length; i++) children[i].set_checked(i == this._currentPage); - }, + } animateIndicators(animationDirection) { if (!this.actor.mapped) @@ -358,15 +356,12 @@ var PageIndicators = new Lang.Class({ }); } } -}); +}; Signals.addSignalMethods(PageIndicators.prototype); -var AllView = new Lang.Class({ - Name: 'AllView', - Extends: BaseAppView, - - _init() { - this.parent({ usePagination: true }, null); +var AllView = class AllView extends BaseAppView { + constructor() { + super({ usePagination: true }, null); this._scrollView = new St.ScrollView({ style_class: 'all-apps', x_expand: true, y_expand: true, @@ -462,12 +457,12 @@ var AllView = new Lang.Class({ this._folderSettings.connect('changed::folder-children', () => { Main.queueDeferredWork(this._redisplayWorkId); }); - }, + } removeAll() { this.folderIcons = []; - this.parent(); - }, + super.removeAll(); + } _itemNameChanged(item) { // If an item's name changed, we can pluck it out of where it's @@ -478,7 +473,7 @@ var AllView = new Lang.Class({ this._grid.removeItem(item); this._grid.addItem(item, newIdx); - }, + } _refilterApps() { this._allItems.forEach(icon => { @@ -493,7 +488,7 @@ var AllView = new Lang.Class({ appIcon.actor.visible = false; }); }); - }, + } _loadApps() { let apps = Gio.AppInfo.get_all().filter(appInfo => { @@ -535,7 +530,7 @@ var AllView = new Lang.Class({ this.loadGrid(); this._refilterApps(); - }, + } // Overriden from BaseAppView animate(animationDirection, onComplete) { @@ -551,21 +546,17 @@ var AllView = new Lang.Class({ this._currentPopup.popdown(); let spaceClosedId = this._grid.connect('space-closed', () => { this._grid.disconnect(spaceClosedId); - // Given that we can't call this.parent() inside the - // signal handler, call again animate which will - // call the parent given that popup is already - // closed. - this.animate(animationDirection, completionFunc); + super.animate(animationDirection, completionFunc); }); } else { - this.parent(animationDirection, completionFunc); + super.animate(animationDirection, completionFunc); if (animationDirection == IconGrid.AnimationDirection.OUT) this._pageIndicators.animateIndicators(animationDirection); } - }, + } animateSwitch(animationDirection) { - this.parent(animationDirection); + super.animateSwitch(animationDirection); if (this._currentPopup && this._displayingPopup && animationDirection == IconGrid.AnimationDirection.OUT) @@ -579,11 +570,11 @@ var AllView = new Lang.Class({ if (animationDirection == IconGrid.AnimationDirection.OUT) this._pageIndicators.animateIndicators(animationDirection); - }, + } getCurrentPageY() { return this._grid.getPageY(this._grid.currentPage); - }, + } goToPage(pageNumber) { pageNumber = clamp(pageNumber, 0, this._grid.nPages() - 1); @@ -625,18 +616,18 @@ var AllView = new Lang.Class({ time: time, transition: 'easeOutQuad' }); this._pageIndicators.setCurrentPage(pageNumber); - }, + } _diffToPage(pageNumber) { let currentScrollPosition = this._adjustment.value; return Math.abs(currentScrollPosition - this._grid.getPageY(pageNumber)); - }, + } openSpaceForPopup(item, side, nRows) { this._updateIconOpacities(true); this._displayingPopup = true; this._grid.openExtraSpace(item, side, nRows); - }, + } _closeSpaceForPopup() { this._updateIconOpacities(false); @@ -646,7 +637,7 @@ var AllView = new Lang.Class({ fadeEffect.enabled = true; this._grid.closeExtraSpace(); - }, + } _onScroll(actor, event) { if (this._displayingPopup || !this._scrollView.reactive) @@ -659,7 +650,7 @@ var AllView = new Lang.Class({ this.goToPage(this._grid.currentPage + 1); return Clutter.EVENT_STOP; - }, + } _onPan(action) { if (this._displayingPopup) @@ -670,7 +661,7 @@ var AllView = new Lang.Class({ let adjustment = this._adjustment; adjustment.value -= (dy / this._scrollView.height) * adjustment.page_size; return false; - }, + } _onPanEnd(action) { if (this._displayingPopup) @@ -689,7 +680,7 @@ var AllView = new Lang.Class({ this.goToPage(closestPage); this._panning = false; - }, + } _onKeyPressEvent(actor, event) { if (this._displayingPopup) @@ -704,7 +695,7 @@ var AllView = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } addFolderPopup(popup) { this._stack.add_actor(popup.actor); @@ -715,12 +706,12 @@ var AllView = new Lang.Class({ if(!isOpen) this._closeSpaceForPopup(); }); - }, + } _childFocused(icon) { let itemPage = this._grid.getItemPage(icon); this.goToPage(itemPage); - }, + } _updateIconOpacities(folderOpen) { for (let id in this._items) { @@ -734,7 +725,7 @@ var AllView = new Lang.Class({ transition: 'easeOutQuad' }; Tweener.addTween(this._items[id].actor, params); } - }, + } // Called before allocation to calculate dynamic spacing adaptToSize(width, height) { @@ -773,15 +764,12 @@ var AllView = new Lang.Class({ for (let i = 0; i < this.folderIcons.length; i++) this.folderIcons[i].adaptToSize(availWidth, availHeight); } -}); +}; Signals.addSignalMethods(AllView.prototype); -var FrequentView = new Lang.Class({ - Name: 'FrequentView', - Extends: BaseAppView, - - _init() { - this.parent(null, { fillParent: true }); +var FrequentView = class FrequentView extends BaseAppView { + constructor() { + super(null, { fillParent: true }); this.actor = new St.Widget({ style_class: 'frequent-apps', layout_manager: new Clutter.BinLayout(), @@ -806,11 +794,11 @@ var FrequentView = new Lang.Class({ if (this.actor.mapped) this._redisplay(); }); - }, + } hasUsefulData() { return this._usage.get_most_used().length >= MIN_FREQUENT_APPS_COUNT; - }, + } _loadApps() { let mostUsed = this._usage.get_most_used(); @@ -834,7 +822,7 @@ var FrequentView = new Lang.Class({ { isDraggable: favoritesWritable }); this._grid.addItem(appIcon, -1); } - }, + } // Called before allocation to calculate dynamic spacing adaptToSize(width, height) { @@ -848,7 +836,7 @@ var FrequentView = new Lang.Class({ let availHeight = box.y2 - box.y1; this._grid.adaptToSize(availWidth, availHeight); } -}); +}; var Views = { FREQUENT: 0, @@ -896,10 +884,8 @@ var ViewStackLayout = new Lang.Class({ } }); -var AppDisplay = new Lang.Class({ - Name: 'AppDisplay', - - _init() { +var AppDisplay = class AppDisplay { + constructor() { this._privacySettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.privacy' }); this._privacySettings.connect('changed::remember-app-usage', this._updateFrequentVisibility.bind(this)); @@ -972,14 +958,14 @@ var AppDisplay = new Lang.Class({ this._switcherooProxy = null; this._updateDiscreteGpuAvailable(); }); - }, + } _updateDiscreteGpuAvailable() { if (!this._switcherooProxy) discreteGpuAvailable = false; else discreteGpuAvailable = this._switcherooProxy.HasDualGpu; - }, + } _switcherooProxyAppeared() { this._switcherooProxy = new SwitcherooProxy(Gio.DBus.system, SWITCHEROO_BUS_NAME, SWITCHEROO_OBJECT_PATH, @@ -990,7 +976,7 @@ var AppDisplay = new Lang.Class({ } this._updateDiscreteGpuAvailable(); }); - }, + } animate(animationDirection, onComplete) { let currentView = this._views.filter(v => v.control.has_style_pseudo_class('checked')).pop().view; @@ -1013,7 +999,7 @@ var AppDisplay = new Lang.Class({ }); currentView.animate(animationDirection, onComplete); - }, + } _showView(activeIndex) { for (let i = 0; i < this._views.length; i++) { @@ -1026,7 +1012,7 @@ var AppDisplay = new Lang.Class({ IconGrid.AnimationDirection.OUT; this._views[i].view.animateSwitch(animationDirection); } - }, + } _updateFrequentVisibility() { let enabled = this._privacySettings.get_boolean('remember-app-usage'); @@ -1037,12 +1023,12 @@ var AppDisplay = new Lang.Class({ if (!enabled && this._views[Views.FREQUENT].view.actor.visible) this._showView(Views.ALL); - }, + } selectApp(id) { this._showView(Views.ALL); this._views[Views.ALL].view.selectApp(id); - }, + } _onAllocatedSizeChanged(actor, width, height) { let box = new Clutter.ActorBox(); @@ -1055,19 +1041,17 @@ var AppDisplay = new Lang.Class({ for (let i = 0; i < this._views.length; i++) this._views[i].view.adaptToSize(availWidth, availHeight); } -}) +}; -var AppSearchProvider = new Lang.Class({ - Name: 'AppSearchProvider', - - _init() { +var AppSearchProvider = class AppSearchProvider { + constructor() { this._appSys = Shell.AppSystem.get_default(); this.id = 'applications'; this.isRemoteProvider = false; this.canLaunchSearch = false; this._systemActions = new SystemActions.getDefault(); - }, + } getResultMetas(apps, callback) { let metas = []; @@ -1095,11 +1079,11 @@ var AppSearchProvider = new Lang.Class({ } callback(metas); - }, + } filterResults(results, maxNumber) { return results.slice(0, maxNumber); - }, + } getInitialResultSet(terms, callback, cancellable) { let query = terms.join(' '); @@ -1119,11 +1103,11 @@ var AppSearchProvider = new Lang.Class({ results = results.concat(this._systemActions.getMatchingActions(terms)); callback(results); - }, + } getSubsearchResultSet(previousResults, terms, callback, cancellable) { this.getInitialResultSet(terms, callback, cancellable); - }, + } createResultObject(resultMeta) { if (resultMeta.id.endsWith('.desktop')) @@ -1131,14 +1115,11 @@ var AppSearchProvider = new Lang.Class({ else return new SystemActionIcon(this, resultMeta); } -}); +}; -var FolderView = new Lang.Class({ - Name: 'FolderView', - Extends: BaseAppView, - - _init() { - this.parent(null, null); +var FolderView = class FolderView extends BaseAppView { + constructor() { + super(null, null); // If it not expand, the parent doesn't take into account its preferred_width when allocating // the second time it allocates, so we apply the "Standard hack for ClutterBinLayout" this._grid.x_expand = true; @@ -1152,16 +1133,16 @@ var FolderView = new Lang.Class({ let action = new Clutter.PanAction({ interpolate: true }); action.connect('pan', this._onPan.bind(this)); this.actor.add_action(action); - }, + } _childFocused(actor) { Util.ensureActorVisibleInScrollView(this.actor, actor); - }, + } // Overriden from BaseAppView animate(animationDirection) { this._grid.animatePulse(animationDirection); - }, + } createFolderIcon(size) { let layout = new Clutter.GridLayout(); @@ -1181,14 +1162,14 @@ var FolderView = new Lang.Class({ } return icon; - }, + } _onPan(action) { let [dist, dx, dy] = action.get_motion_delta(0); let adjustment = this.actor.vscroll.adjustment; adjustment.value -= (dy / this.actor.height) * adjustment.page_size; return false; - }, + } adaptToSize(width, height) { this._parentAvailableWidth = width; @@ -1212,7 +1193,7 @@ var FolderView = new Lang.Class({ this.actor.set_width(this.usedWidth()); this.actor.set_height(this.usedHeight()); - }, + } _getPageAvailableSize() { let pageBox = new Clutter.ActorBox(); @@ -1224,32 +1205,30 @@ var FolderView = new Lang.Class({ // We only can show icons inside the collection view boxPointer // so we have to substract the required padding etc of the boxpointer return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide]; - }, + } usedWidth() { let [availWidthPerPage, availHeightPerPage] = this._getPageAvailableSize(); return this._grid.usedWidth(availWidthPerPage); - }, + } usedHeight() { return this._grid.usedHeightForNRows(this.nRowsDisplayedAtOnce()); - }, + } nRowsDisplayedAtOnce() { let [availWidthPerPage, availHeightPerPage] = this._getPageAvailableSize(); let maxRows = this._grid.rowsForHeight(availHeightPerPage) - 1; return Math.min(this._grid.nRows(availWidthPerPage), maxRows); - }, + } setPaddingOffsets(offset) { this._offsetForEachSide = offset; } -}); +}; -var FolderIcon = new Lang.Class({ - Name: 'FolderIcon', - - _init(id, path, parentView) { +var FolderIcon = class FolderIcon { + constructor(id, path, parentView) { this.id = id; this.name = ''; this._parentView = parentView; @@ -1284,11 +1263,11 @@ var FolderIcon = new Lang.Class({ this._folder.connect('changed', this._redisplay.bind(this)); this._redisplay(); - }, + } getAppIds() { return this.view.getAllItems().map(item => item.id); - }, + } _updateName() { let name = _getFolderName(this._folder); @@ -1298,7 +1277,7 @@ var FolderIcon = new Lang.Class({ this.name = name; this.icon.label.text = this.name; this.emit('name-changed'); - }, + } _redisplay() { this._updateName(); @@ -1340,16 +1319,16 @@ var FolderIcon = new Lang.Class({ this.actor.visible = this.view.getAllItems().length > 0; this.view.loadGrid(); this.emit('apps-changed'); - }, + } _createIcon(iconSize) { return this.view.createFolderIcon(iconSize, this); - }, + } _popupHeight() { let usedHeight = this.view.usedHeight() + this._popup.getOffset(St.Side.TOP) + this._popup.getOffset(St.Side.BOTTOM); return usedHeight; - }, + } _openSpaceForPopup() { let id = this._parentView.connect('space-ready', () => { @@ -1358,14 +1337,14 @@ var FolderIcon = new Lang.Class({ this._updatePopupPosition(); }); this._parentView.openSpaceForPopup(this, this._boxPointerArrowside, this.view.nRowsDisplayedAtOnce()); - }, + } _calculateBoxPointerArrowSide() { let spaceTop = this.actor.y - this._parentView.getCurrentPageY(); let spaceBottom = this._parentView.actor.height - (spaceTop + this.actor.height); return spaceTop > spaceBottom ? St.Side.BOTTOM : St.Side.TOP; - }, + } _updatePopupSize() { // StWidget delays style calculation until needed, make sure we use the correct values @@ -1377,7 +1356,7 @@ var FolderIcon = new Lang.Class({ // Add extra padding to prevent boxpointer decorations and close button being cut off this.view.setPaddingOffsets(offsetForEachSide); this.view.adaptToSize(this._parentAvailableWidth, this._parentAvailableHeight); - }, + } _updatePopupPosition() { if (!this._popup) @@ -1387,7 +1366,7 @@ var FolderIcon = new Lang.Class({ this._popup.actor.y = this.actor.allocation.y1 + this.actor.translation_y - this._popupHeight(); else this._popup.actor.y = this.actor.allocation.y1 + this.actor.translation_y + this.actor.height; - }, + } _ensurePopup() { if (this._popup && !this._popupInvalidated) @@ -1406,7 +1385,7 @@ var FolderIcon = new Lang.Class({ this._updatePopupSize(); this._updatePopupPosition(); this._popupInvalidated = false; - }, + } adaptToSize(width, height) { this._parentAvailableWidth = width; @@ -1414,14 +1393,12 @@ var FolderIcon = new Lang.Class({ if(this._popup) this.view.adaptToSize(width, height); this._popupInvalidated = true; - }, -}); + } +}; Signals.addSignalMethods(FolderIcon.prototype); -var AppFolderPopup = new Lang.Class({ - Name: 'AppFolderPopup', - - _init(source, side) { +var AppFolderPopup = class AppFolderPopup { + constructor(source, side) { this._source = source; this._view = source.view; this._arrowSide = side; @@ -1467,7 +1444,7 @@ var AppFolderPopup = new Lang.Class({ }); this._grabHelper.addActor(Main.layoutManager.overviewGroup); this.actor.connect('key-press-event', this._onKeyPress.bind(this)); - }, + } _onKeyPress(actor, event) { if (global.stage.get_key_focus() != actor) @@ -1511,14 +1488,14 @@ var AppFolderPopup = new Lang.Class({ return Clutter.EVENT_PROPAGATE; } return actor.navigate_focus(null, direction, false); - }, + } toggle() { if (this._isOpen) this.popdown(); else this.popup(); - }, + } popup() { if (this._isOpen) @@ -1545,7 +1522,7 @@ var AppFolderPopup = new Lang.Class({ }); this.emit('open-state-changed', true); - }, + } popdown() { if (!this._isOpen) @@ -1557,30 +1534,28 @@ var AppFolderPopup = new Lang.Class({ BoxPointer.PopupAnimation.SLIDE); this._isOpen = false; this.emit('open-state-changed', false); - }, + } getCloseButtonOverlap() { return this.closeButton.get_theme_node().get_length('-shell-close-overlap-y'); - }, + } getOffset(side) { let offset = this._boxPointer.getPadding(side); if (this._arrowSide == side) offset += this._boxPointer.getArrowHeight(); return offset; - }, + } updateArrowSide(side) { this._arrowSide = side; this._boxPointer.updateArrowSide(side); } -}); +}; Signals.addSignalMethods(AppFolderPopup.prototype); -var AppIcon = new Lang.Class({ - Name: 'AppIcon', - - _init(app, iconParams) { +var AppIcon = class AppIcon { + constructor(app, iconParams) { this.app = app; this.id = app.get_id(); this.name = app.get_name(); @@ -1651,32 +1626,32 @@ var AppIcon = new Lang.Class({ this._updateRunningStyle(); }); this._updateRunningStyle(); - }, + } _onDestroy() { if (this._stateChangedId > 0) this.app.disconnect(this._stateChangedId); this._stateChangedId = 0; this._removeMenuTimeout(); - }, + } _createIcon(iconSize) { return this.app.create_icon_texture(iconSize); - }, + } _removeMenuTimeout() { if (this._menuTimeoutId > 0) { Mainloop.source_remove(this._menuTimeoutId); this._menuTimeoutId = 0; } - }, + } _updateRunningStyle() { if (this.app.state != Shell.AppState.STOPPED) this._dot.show(); else this._dot.hide(); - }, + } _setPopupTimeout() { this._removeMenuTimeout(); @@ -1686,12 +1661,12 @@ var AppIcon = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu'); - }, + } _onLeaveEvent(actor, event) { this.actor.fake_release(); this._removeMenuTimeout(); - }, + } _onButtonPress(actor, event) { let button = event.get_button(); @@ -1702,28 +1677,28 @@ var AppIcon = new Lang.Class({ return Clutter.EVENT_STOP; } return Clutter.EVENT_PROPAGATE; - }, + } _onTouchEvent(actor, event) { if (event.type() == Clutter.EventType.TOUCH_BEGIN) this._setPopupTimeout(); return Clutter.EVENT_PROPAGATE; - }, + } _onClicked(actor, button) { this._removeMenuTimeout(); this.activate(button); - }, + } _onKeyboardPopupMenu() { this.popupMenu(); this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); - }, + } getId() { return this.app.get_id(); - }, + } popupMenu() { this._removeMenuTimeout(); @@ -1759,7 +1734,7 @@ var AppIcon = new Lang.Class({ this.emit('sync-tooltip'); return false; - }, + } activateWindow(metaWindow) { if (metaWindow) { @@ -1767,12 +1742,12 @@ var AppIcon = new Lang.Class({ } else { Main.overview.hide(); } - }, + } _onMenuPoppedDown() { this.actor.sync_hover(); this.emit('menu-state-changed', false); - }, + } activate(button) { let event = Clutter.get_current_event(); @@ -1792,45 +1767,42 @@ var AppIcon = new Lang.Class({ this.app.activate(); Main.overview.hide(); - }, + } animateLaunch() { this.icon.animateZoomOut(); - }, + } shellWorkspaceLaunch(params) { params = Params.parse(params, { workspace: -1, timestamp: 0 }); this.app.open_new_window(params.workspace); - }, + } getDragActor() { return this.app.create_icon_texture(Main.overview.dashIconSize); - }, + } // Returns the original actor that should align with the actor // we show as the item is being dragged. getDragActorSource() { return this.icon.icon; - }, + } shouldShowTooltip() { return this.actor.hover && (!this._menu || !this._menu.isOpen); - }, -}); + } +}; Signals.addSignalMethods(AppIcon.prototype); -var AppIconMenu = new Lang.Class({ - Name: 'AppIconMenu', - Extends: PopupMenu.PopupMenu, - - _init(source) { +var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu { + constructor(source) { let side = St.Side.LEFT; if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) side = St.Side.RIGHT; - this.parent(source.actor, 0.5, side); + super(source.actor, 0.5, side); // We want to keep the item hovered while the menu is up this.blockSourceEvents = true; @@ -1850,7 +1822,7 @@ var AppIconMenu = new Lang.Class({ }); Main.uiGroup.add_actor(this.actor); - }, + } _redisplay() { this.removeAll(); @@ -1960,33 +1932,30 @@ var AppIconMenu = new Lang.Class({ }); } } - }, + } _appendSeparator() { let separator = new PopupMenu.PopupSeparatorMenuItem(); this.addMenuItem(separator); - }, + } _appendMenuItem(labelText) { // FIXME: app-well-menu-item style let item = new PopupMenu.PopupMenuItem(labelText); this.addMenuItem(item); return item; - }, + } popup(activatingButton) { this._redisplay(); this.open(); } -}); +}; Signals.addSignalMethods(AppIconMenu.prototype); -var SystemActionIcon = new Lang.Class({ - Name: 'SystemActionIcon', - Extends: Search.GridSearchResult, - +var SystemActionIcon = class SystemActionIcon extends Search.GridSearchResult { activate() { SystemActions.getDefault().activateAction(this.metaInfo['id']); Main.overview.hide(); } -}); +}; diff --git a/js/ui/appFavorites.js b/js/ui/appFavorites.js index 3bdf04efb..0bdf41b22 100644 --- a/js/ui/appFavorites.js +++ b/js/ui/appFavorites.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Shell = imports.gi.Shell; -const Lang = imports.lang; const Signals = imports.signals; const Main = imports.ui.main; @@ -49,21 +48,18 @@ const RENAMED_DESKTOP_IDS = { 'evince.desktop': 'org.gnome.Evince.desktop', }; -var AppFavorites = new Lang.Class({ - Name: 'AppFavorites', - - FAVORITE_APPS_KEY: 'favorite-apps', - - _init() { +class AppFavorites { + constructor() { + this.FAVORITE_APPS_KEY = 'favorite-apps'; this._favorites = {}; global.settings.connect('changed::' + this.FAVORITE_APPS_KEY, this._onFavsChanged.bind(this)); this.reload(); - }, + } _onFavsChanged() { this.reload(); this.emit('changed'); - }, + } reload() { let ids = global.settings.get_strv(this.FAVORITE_APPS_KEY); @@ -91,29 +87,29 @@ var AppFavorites = new Lang.Class({ let app = apps[i]; this._favorites[app.get_id()] = app; } - }, + } _getIds() { let ret = []; for (let id in this._favorites) ret.push(id); return ret; - }, + } getFavoriteMap() { return this._favorites; - }, + } getFavorites() { let ret = []; for (let id in this._favorites) ret.push(this._favorites[id]); return ret; - }, + } isFavorite(appId) { return appId in this._favorites; - }, + } _addFavorite(appId, pos) { if (appId in this._favorites) @@ -131,7 +127,7 @@ var AppFavorites = new Lang.Class({ ids.splice(pos, 0, appId); global.settings.set_strv(this.FAVORITE_APPS_KEY, ids); return true; - }, + } addFavoriteAtPos(appId, pos) { if (!this._addFavorite(appId, pos)) @@ -145,16 +141,16 @@ var AppFavorites = new Lang.Class({ this._removeFavorite(appId); } }); - }, + } addFavorite(appId) { this.addFavoriteAtPos(appId, -1); - }, + } moveFavoriteToPos(appId, pos) { this._removeFavorite(appId); this._addFavorite(appId, pos); - }, + } _removeFavorite(appId) { if (!appId in this._favorites) @@ -163,7 +159,7 @@ var AppFavorites = new Lang.Class({ let ids = this._getIds().filter(id => id != appId); global.settings.set_strv(this.FAVORITE_APPS_KEY, ids); return true; - }, + } removeFavorite(appId) { let ids = this._getIds(); @@ -180,7 +176,7 @@ var AppFavorites = new Lang.Class({ } }); } -}); +}; Signals.addSignalMethods(AppFavorites.prototype); var appFavoritesInstance = null; diff --git a/js/ui/audioDeviceSelection.js b/js/ui/audioDeviceSelection.js index b44a3e7ac..b10eb7d3e 100644 --- a/js/ui/audioDeviceSelection.js +++ b/js/ui/audioDeviceSelection.js @@ -1,7 +1,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -19,12 +18,10 @@ var AudioDevice = { const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection'); -var AudioDeviceSelectionDialog = new Lang.Class({ - Name: 'AudioDeviceSelectionDialog', - Extends: ModalDialog.ModalDialog, - - _init(devices) { - this.parent({ styleClass: 'audio-device-selection-dialog' }); +var AudioDeviceSelectionDialog = +class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog { + constructor(devices) { + super({ styleClass: 'audio-device-selection-dialog' }); this._deviceItems = {}; @@ -39,11 +36,11 @@ var AudioDeviceSelectionDialog = new Lang.Class({ if (this._selectionBox.get_n_children() < 2) throw new Error('Too few devices for a selection'); - }, + } destroy() { - this.parent(); - }, + super.destroy(); + } _buildLayout(devices) { let title = new St.Label({ style_class: 'audio-selection-title', @@ -62,7 +59,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({ this.addButton({ action: this.close.bind(this), label: _("Cancel"), key: Clutter.Escape }); - }, + } _getDeviceLabel(device) { switch(device) { @@ -75,7 +72,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({ default: return null; } - }, + } _getDeviceIcon(device) { switch(device) { @@ -88,7 +85,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({ default: return null; } - }, + } _addDevice(device) { let box = new St.BoxLayout({ style_class: 'audio-selection-device-box', @@ -118,7 +115,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({ this.close(); Main.overview.hide(); }); - }, + } _openSettings() { let desktopFile = 'gnome-sound-panel.desktop' @@ -133,23 +130,21 @@ var AudioDeviceSelectionDialog = new Lang.Class({ Main.overview.hide(); app.activate(); } -}); +}; -var AudioDeviceSelectionDBus = new Lang.Class({ - Name: 'AudioDeviceSelectionDBus', - - _init() { +var AudioDeviceSelectionDBus = class AudioDeviceSelectionDBus { + constructor() { this._audioSelectionDialog = null; this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(AudioDeviceSelectionIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/AudioDeviceSelection'); Gio.DBus.session.own_name('org.gnome.Shell.AudioDeviceSelection', Gio.BusNameOwnerFlags.REPLACE, null, null); - }, + } _onDialogClosed() { this._audioSelectionDialog = null; - }, + } _onDeviceSelected(dialog, device) { let connection = this._dbusImpl.get_connection(); @@ -162,7 +157,7 @@ var AudioDeviceSelectionDBus = new Lang.Class({ info ? info.name : null, 'DeviceSelected', GLib.Variant.new('(s)', [deviceName])); - }, + } OpenAsync(params, invocation) { if (this._audioSelectionDialog) { @@ -190,7 +185,7 @@ var AudioDeviceSelectionDBus = new Lang.Class({ this._audioSelectionDialog = dialog; invocation.return_value(null); - }, + } CloseAsync(params, invocation) { if (this._audioSelectionDialog && @@ -199,4 +194,4 @@ var AudioDeviceSelectionDBus = new Lang.Class({ invocation.return_value(null); } -}); +}; diff --git a/js/ui/background.js b/js/ui/background.js index 941b28903..874bda390 100644 --- a/js/ui/background.js +++ b/js/ui/background.js @@ -98,7 +98,6 @@ const GDesktopEnums = imports.gi.GDesktopEnums; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const GnomeDesktop = imports.gi.GnomeDesktop; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Signals = imports.signals; @@ -138,14 +137,12 @@ function _fileEqual0(file1, file2) { return file1.equal(file2); } -var BackgroundCache = new Lang.Class({ - Name: 'BackgroundCache', - - _init() { +var BackgroundCache = class BackgroundCache { + constructor() { this._fileMonitors = {}; this._backgroundSources = {}; this._animations = {}; - }, + } monitorFile(file) { let key = file.hash(); @@ -163,7 +160,7 @@ var BackgroundCache = new Lang.Class({ }); this._fileMonitors[key] = monitor; - }, + } getAnimation(params) { params = Params.parse(params, { file: null, @@ -195,7 +192,7 @@ var BackgroundCache = new Lang.Class({ GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); } }); - }, + } getBackgroundSource(layoutManager, settingsSchema) { // The layoutManager is always the same one; we pass in it since @@ -209,7 +206,7 @@ var BackgroundCache = new Lang.Class({ } return this._backgroundSources[settingsSchema]; - }, + } releaseBackgroundSource(settingsSchema) { if (settingsSchema in this._backgroundSources) { @@ -221,7 +218,7 @@ var BackgroundCache = new Lang.Class({ } } } -}); +}; Signals.addSignalMethods(BackgroundCache.prototype); function getBackgroundCache() { @@ -230,10 +227,8 @@ function getBackgroundCache() { return _backgroundCache; } -var Background = new Lang.Class({ - Name: 'Background', - - _init(params) { +var Background = class Background { + constructor(params) { params = Params.parse(params, { monitorIndex: 0, layoutManager: Main.layoutManager, settings: null, @@ -272,7 +267,7 @@ var Background = new Lang.Class({ }); this._load(); - }, + } destroy() { this._cancellable.cancel(); @@ -298,12 +293,12 @@ var Background = new Lang.Class({ if (this._settingsChangedSignalId != 0) this._settings.disconnect(this._settingsChangedSignalId); this._settingsChangedSignalId = 0; - }, + } updateResolution() { if (this._animation) this._refreshAnimation(); - }, + } _refreshAnimation() { if (!this._animation) @@ -311,7 +306,7 @@ var Background = new Lang.Class({ this._removeAnimationTimeout(); this._updateAnimation(); - }, + } _setLoaded() { if (this.isLoaded) @@ -324,7 +319,7 @@ var Background = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(id, '[gnome-shell] this.emit'); - }, + } _loadPattern() { let colorString, res, color, secondColor; @@ -340,7 +335,7 @@ var Background = new Lang.Class({ this.background.set_color(color); else this.background.set_gradient(shadingType, color, secondColor); - }, + } _watchFile(file) { let key = file.hash(); @@ -357,14 +352,14 @@ var Background = new Lang.Class({ } }); this._fileWatches[key] = signalId; - }, + } _removeAnimationTimeout() { if (this._updateAnimationTimeoutId) { GLib.source_remove(this._updateAnimationTimeoutId); this._updateAnimationTimeoutId = 0; } - }, + } _updateAnimation() { this._updateAnimationTimeoutId = 0; @@ -404,7 +399,7 @@ var Background = new Lang.Class({ }); } } - }, + } _queueUpdateAnimation() { if (this._updateAnimationTimeoutId != 0) @@ -433,7 +428,7 @@ var Background = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation'); - }, + } _loadAnimation(file) { this._cache.getAnimation({ file: file, @@ -450,7 +445,7 @@ var Background = new Lang.Class({ this._watchFile(file); } }); - }, + } _loadImage(file) { this.background.set_file(file, this._style); @@ -466,14 +461,14 @@ var Background = new Lang.Class({ image.disconnect(id); }); } - }, + } _loadFile(file) { if (file.get_basename().endsWith('.xml')) this._loadAnimation(file); else this._loadImage(file); - }, + } _load() { this._cache = getBackgroundCache(); @@ -486,16 +481,14 @@ var Background = new Lang.Class({ } this._loadFile(this._file); - }, -}); + } +}; Signals.addSignalMethods(Background.prototype); let _systemBackground; -var SystemBackground = new Lang.Class({ - Name: 'SystemBackground', - - _init() { +var SystemBackground = class SystemBackground { + constructor() { let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png'); if (_systemBackground == null) { @@ -524,14 +517,12 @@ var SystemBackground = new Lang.Class({ image = null; }); } - }, -}); + } +}; Signals.addSignalMethods(SystemBackground.prototype); -var BackgroundSource = new Lang.Class({ - Name: 'BackgroundSource', - - _init(layoutManager, settingsSchema) { +var BackgroundSource = class BackgroundSource { + constructor(layoutManager, settingsSchema) { // Allow override the background image setting for performance testing this._layoutManager = layoutManager; this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE'); @@ -542,7 +533,7 @@ var BackgroundSource = new Lang.Class({ this._monitorsChangedId = monitorManager.connect('monitors-changed', this._onMonitorsChanged.bind(this)); - }, + } _onMonitorsChanged() { for (let monitorIndex in this._backgrounds) { @@ -556,7 +547,7 @@ var BackgroundSource = new Lang.Class({ delete this._backgrounds[monitorIndex]; } } - }, + } getBackground(monitorIndex) { let file = null; @@ -603,7 +594,7 @@ var BackgroundSource = new Lang.Class({ } return this._backgrounds[monitorIndex]; - }, + } destroy() { let monitorManager = Meta.MonitorManager.get(); @@ -617,12 +608,10 @@ var BackgroundSource = new Lang.Class({ this._backgrounds = null; } -}); +}; -var Animation = new Lang.Class({ - Name: 'Animation', - - _init(params) { +var Animation = class Animation { + constructor(params) { params = Params.parse(params, { file: null }); this.file = params.file; @@ -630,7 +619,7 @@ var Animation = new Lang.Class({ this.transitionProgress = 0.0; this.transitionDuration = 0.0; this.loaded = false; - }, + } load(callback) { this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() }); @@ -640,7 +629,7 @@ var Animation = new Lang.Class({ if (callback) callback(); }); - }, + } update(monitor) { this.keyFrameFiles = []; @@ -661,14 +650,12 @@ var Animation = new Lang.Class({ if (filename2) this.keyFrameFiles.push(Gio.File.new_for_path(filename2)); - }, -}); + } +}; Signals.addSignalMethods(Animation.prototype); -var BackgroundManager = new Lang.Class({ - Name: 'BackgroundManager', - - _init(params) { +var BackgroundManager = class BackgroundManager { + constructor(params) { params = Params.parse(params, { container: null, layoutManager: Main.layoutManager, monitorIndex: null, @@ -688,7 +675,7 @@ var BackgroundManager = new Lang.Class({ this.backgroundActor = this._createBackgroundActor(); this._newBackgroundActor = null; - }, + } destroy() { let cache = getBackgroundCache(); @@ -704,7 +691,7 @@ var BackgroundManager = new Lang.Class({ this.backgroundActor.destroy(); this.backgroundActor = null; } - }, + } _swapBackgroundActor() { let oldBackgroundActor = this.backgroundActor; @@ -721,7 +708,7 @@ var BackgroundManager = new Lang.Class({ oldBackgroundActor.destroy(); } }); - }, + } _updateBackgroundActor() { if (this._newBackgroundActor) { @@ -750,7 +737,7 @@ var BackgroundManager = new Lang.Class({ this._swapBackgroundActor(); }); } - }, + } _createBackgroundActor() { let background = this._backgroundSource.getBackground(this._monitorIndex); @@ -787,6 +774,6 @@ var BackgroundManager = new Lang.Class({ }); return backgroundActor; - }, -}); + } +}; Signals.addSignalMethods(BackgroundManager.prototype); diff --git a/js/ui/backgroundMenu.js b/js/ui/backgroundMenu.js index 4d748bd63..352c7d31a 100644 --- a/js/ui/backgroundMenu.js +++ b/js/ui/backgroundMenu.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; -const Lang = imports.lang; const St = imports.gi.St; const Shell = imports.gi.Shell; @@ -9,12 +8,9 @@ const BoxPointer = imports.ui.boxpointer; const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; -var BackgroundMenu = new Lang.Class({ - Name: 'BackgroundMenu', - Extends: PopupMenu.PopupMenu, - - _init(layoutManager) { - this.parent(layoutManager.dummyCursor, 0, St.Side.TOP); +var BackgroundMenu = class BackgroundMenu extends PopupMenu.PopupMenu { + constructor(layoutManager) { + super(layoutManager.dummyCursor, 0, St.Side.TOP); this.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop'); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); @@ -26,7 +22,7 @@ var BackgroundMenu = new Lang.Class({ layoutManager.uiGroup.add_actor(this.actor); this.actor.hide(); } -}); +}; function addBackgroundMenu(actor, layoutManager) { actor.reactive = true; diff --git a/js/ui/barLevel.js b/js/ui/barLevel.js index 408f10dbf..6b0e72464 100644 --- a/js/ui/barLevel.js +++ b/js/ui/barLevel.js @@ -3,14 +3,11 @@ const Atk = imports.gi.Atk; const Cairo = imports.cairo; const Clutter = imports.gi.Clutter; -const Lang = imports.lang; const St = imports.gi.St; const Signals = imports.signals; -var BarLevel = new Lang.Class({ - Name: "BarLevel", - - _init(value, params) { +var BarLevel = class { + constructor(value, params) { if (isNaN(value)) // Avoid spreading NaNs around throw TypeError('The bar level value must be a number'); @@ -40,7 +37,7 @@ var BarLevel = new Lang.Class({ this._customAccessible.connect('set-current-value', this._setCurrentValue.bind(this)); this.connect('value-changed', this._valueChanged.bind(this)); - }, + } setValue(value) { if (isNaN(value)) @@ -48,7 +45,7 @@ var BarLevel = new Lang.Class({ this._value = Math.max(Math.min(value, this._maxValue), 0); this.actor.queue_repaint(); - }, + } setMaximumValue(value) { if (isNaN(value)) @@ -57,7 +54,7 @@ var BarLevel = new Lang.Class({ this._maxValue = Math.max(value, 1); this._overdriveStart = Math.min(this._overdriveStart, this._maxValue); this.actor.queue_repaint(); - }, + } setOverdriveStart(value) { if (isNaN(value)) @@ -69,7 +66,7 @@ var BarLevel = new Lang.Class({ this._overdriveStart = value; this._value = Math.max(Math.min(value, this._maxValue), 0); this.actor.queue_repaint(); - }, + } _barLevelRepaint(area) { let cr = area.get_context(); @@ -176,35 +173,34 @@ var BarLevel = new Lang.Class({ } cr.$dispose(); - }, + } _getCurrentValue(actor) { return this._value; - }, + } _getOverdriveStart(actor) { return this._overdriveStart; - }, + } _getMinimumValue(actor) { return 0; - }, + } _getMaximumValue(actor) { return this._maxValue; - }, + } _setCurrentValue(actor, value) { this._value = value; - }, + } _valueChanged(barLevel, value, property) { this._customAccessible.notify("accessible-value"); - }, + } get value() { return this._value; } -}); - +}; Signals.addSignalMethods(BarLevel.prototype); diff --git a/js/ui/calendar.js b/js/ui/calendar.js index a64cba89c..bbe44d022 100644 --- a/js/ui/calendar.js +++ b/js/ui/calendar.js @@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const St = imports.gi.St; const Signals = imports.signals; const Shell = imports.gi.Shell; @@ -89,46 +88,42 @@ function _getCalendarDayAbbreviation(dayNumber) { // Abstraction for an appointment/event in a calendar -var CalendarEvent = new Lang.Class({ - Name: 'CalendarEvent', - - _init(id, date, end, summary, allDay) { +var CalendarEvent = class CalendarEvent { + constructor(id, date, end, summary, allDay) { this.id = id; this.date = date; this.end = end; this.summary = summary; this.allDay = allDay; } -}); +}; // Interface for appointments/events - e.g. the contents of a calendar // // First, an implementation with no events -var EmptyEventSource = new Lang.Class({ - Name: 'EmptyEventSource', - - _init() { +var EmptyEventSource = class EmptyEventSource { + constructor() { this.isLoading = false; this.isDummy = true; this.hasCalendars = false; - }, + } destroy() { - }, + } requestRange(begin, end) { - }, + } getEvents(begin, end) { let result = []; return result; - }, + } hasEvents(day) { return false; } -}); +}; Signals.addSignalMethods(EmptyEventSource.prototype); const CalendarServerIface = ` @@ -174,10 +169,8 @@ function _dateIntervalsOverlap(a0, a1, b0, b1) } // an implementation that reads data from a session bus service -var DBusEventSource = new Lang.Class({ - Name: 'DBusEventSource', - - _init() { +var DBusEventSource = class DBusEventSource { + constructor() { this._resetCache(); this.isLoading = false; this.isDummy = false; @@ -224,39 +217,39 @@ var DBusEventSource = new Lang.Class({ this._onNameAppeared(); } }); - }, + } destroy() { this._dbusProxy.run_dispose(); - }, + } get hasCalendars() { if (this._initialized) return this._dbusProxy.HasCalendars; else return false; - }, + } _resetCache() { this._events = []; this._lastRequestBegin = null; this._lastRequestEnd = null; - }, + } _onNameAppeared(owner) { this._initialized = true; this._resetCache(); this._loadEvents(true); - }, + } _onNameVanished(oldOwner) { this._resetCache(); this.emit('changed'); - }, + } _onChanged() { this._loadEvents(false); - }, + } _onEventsReceived(results, error) { let newEvents = []; @@ -278,7 +271,7 @@ var DBusEventSource = new Lang.Class({ this._events = newEvents; this.isLoading = false; this.emit('changed'); - }, + } _loadEvents(forceReload) { // Ignore while loading @@ -292,7 +285,7 @@ var DBusEventSource = new Lang.Class({ this._onEventsReceived.bind(this), Gio.DBusCallFlags.NONE); } - }, + } requestRange(begin, end) { if (!(_datesEqual(begin, this._lastRequestBegin) && _datesEqual(end, this._lastRequestEnd))) { @@ -303,7 +296,7 @@ var DBusEventSource = new Lang.Class({ this._curRequestEnd = end; this._loadEvents(false); } - }, + } getEvents(begin, end) { let result = []; @@ -321,7 +314,7 @@ var DBusEventSource = new Lang.Class({ return d1.getTime() - d2.getTime(); }); return result; - }, + } hasEvents(day) { let dayBegin = _getBeginningOfDay(day); @@ -334,13 +327,11 @@ var DBusEventSource = new Lang.Class({ return true; } -}); +}; Signals.addSignalMethods(DBusEventSource.prototype); -var Calendar = new Lang.Class({ - Name: 'Calendar', - - _init() { +var Calendar = class Calendar { + constructor() { this._weekStart = Shell.util_get_week_start(); this._settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.calendar' }); @@ -378,7 +369,7 @@ var Calendar = new Lang.Class({ this._onScroll.bind(this)); this._buildHeader (); - }, + } // @eventSource: is an object implementing the EventSource API, e.g. the // requestRange(), getEvents(), hasEvents() methods and the ::changed signal. @@ -390,7 +381,7 @@ var Calendar = new Lang.Class({ }); this._rebuildCalendar(); this._update(); - }, + } // Sets the calendar to show a specific date setDate(date) { @@ -400,14 +391,14 @@ var Calendar = new Lang.Class({ this._selectedDate = date; this._update(); this.emit('selected-date-changed', new Date(this._selectedDate)); - }, + } updateTimeZone() { // The calendar need to be rebuilt after a time zone update because // the date might have changed. this._rebuildCalendar(); this._update(); - }, + } _buildHeader() { let layout = this.actor.layout_manager; @@ -464,7 +455,7 @@ var Calendar = new Lang.Class({ // All the children after this are days, and get removed when we update the calendar this._firstDayIndex = this.actor.get_n_children(); - }, + } _onScroll(actor, event) { switch (event.get_scroll_direction()) { @@ -478,7 +469,7 @@ var Calendar = new Lang.Class({ break; } return Clutter.EVENT_PROPAGATE; - }, + } _onPrevMonthButtonClicked() { let newDate = new Date(this._selectedDate); @@ -502,7 +493,7 @@ var Calendar = new Lang.Class({ this._backButton.grab_key_focus(); this.setDate(newDate); - }, + } _onNextMonthButtonClicked() { let newDate = new Date(this._selectedDate); @@ -526,14 +517,14 @@ var Calendar = new Lang.Class({ this._forwardButton.grab_key_focus(); this.setDate(newDate); - }, + } _onSettingsChange() { this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY); this._buildHeader(); this._rebuildCalendar(); this._update(); - }, + } _rebuildCalendar() { let now = new Date(); @@ -654,7 +645,7 @@ var Calendar = new Lang.Class({ // Signal to the event source that we are interested in events // only from this date range this._eventSource.requestRange(beginDate, iter); - }, + } _update() { let now = new Date(); @@ -677,18 +668,17 @@ var Calendar = new Lang.Class({ button.remove_style_pseudo_class('selected'); }); } -}); +}; Signals.addSignalMethods(Calendar.prototype); -var EventMessage = new Lang.Class({ - Name: 'EventMessage', - Extends: MessageList.Message, +var EventMessage = class EventMessage extends MessageList.Message { + constructor(event, date) { + super('', event.summary); - _init(event, date) { this._event = event; this._date = date; - this.parent(this._formatEventTime(), event.summary); + this.setTitle(this._formatEventTime()); this._icon = new St.Icon({ icon_name: 'x-office-calendar-symbolic' }); this.setIcon(this._icon); @@ -697,7 +687,7 @@ var EventMessage = new Lang.Class({ let iconVisible = this.actor.get_parent().has_style_pseudo_class('first-child'); this._icon.opacity = (iconVisible ? 255 : 0); }); - }, + } _formatEventTime() { let periodBegin = _getBeginningOfDay(this._date); @@ -731,18 +721,16 @@ var EventMessage = new Lang.Class({ } return title; } -}); +}; -var NotificationMessage = new Lang.Class({ - Name: 'NotificationMessage', - Extends: MessageList.Message, - - _init(notification) { - this.notification = notification; - - this.parent(notification.title, notification.bannerBodyText); +var NotificationMessage = +class NotificationMessage extends MessageList.Message { + constructor(notification) { + super(notification.title, notification.bannerBodyText); this.setUseBodyMarkup(notification.bannerBodyMarkup); + this.notification = notification; + this.setIcon(this._getIcon()); this.connect('close', () => { @@ -758,7 +746,7 @@ var NotificationMessage = new Lang.Class({ }); this._updatedId = notification.connect('updated', this._onUpdated.bind(this)); - }, + } _getIcon() { if (this.notification.gicon) @@ -766,23 +754,23 @@ var NotificationMessage = new Lang.Class({ icon_size: MESSAGE_ICON_SIZE }); else return this.notification.source.createIcon(MESSAGE_ICON_SIZE); - }, + } _onUpdated(n, clear) { this.setIcon(this._getIcon()); this.setTitle(n.title); this.setBody(n.bannerBodyText); this.setUseBodyMarkup(n.bannerBodyMarkup); - }, + } _onClicked() { this.notification.activate(); - }, + } _onDestroy() { - this.parent(); + super._onDestroy(); this._disconnectNotificationSignals(); - }, + } _disconnectNotificationSignals() { if (this._updatedId) @@ -792,26 +780,23 @@ var NotificationMessage = new Lang.Class({ if (this._destroyId) this.notification.disconnect(this._destroyId); this._destroyId = 0; - }, + } canClose() { return true; } -}); +}; -var EventsSection = new Lang.Class({ - Name: 'EventsSection', - Extends: MessageList.MessageListSection, +var EventsSection = class EventsSection extends MessageList.MessageListSection { + constructor() { + super(); - _init() { this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' }); this._desktopSettings.connect('changed', this._reloadEvents.bind(this)); this._eventSource = new EmptyEventSource(); this._messageById = new Map(); - this.parent(); - this._title = new St.Button({ style_class: 'events-section-title', label: '', x_align: St.Align.START, @@ -824,16 +809,16 @@ var EventsSection = new Lang.Class({ Shell.AppSystem.get_default().connect('installed-changed', this._appInstalledChanged.bind(this)); this._appInstalledChanged(); - }, + } setEventSource(eventSource) { this._eventSource = eventSource; this._eventSource.connect('changed', this._reloadEvents.bind(this)); - }, + } get allowed() { return Main.sessionMode.showCalendarEvents; - }, + } _updateTitle() { this._title.visible = !isToday(this._date); @@ -852,7 +837,7 @@ var EventsSection = new Lang.Class({ dayFormat = Shell.util_translate_time_string(NC_("calendar heading", "%A, %B %-d, %Y")); this._title.label = this._date.toLocaleFormat(dayFormat); - }, + } _reloadEvents() { if (this._eventSource.isLoading) @@ -887,12 +872,12 @@ var EventsSection = new Lang.Class({ this._reloading = false; this._sync(); - }, + } _appInstalledChanged() { this._calendarApp = undefined; this._title.reactive = (this._getCalendarApp() != null); - }, + } _getCalendarApp() { if (this._calendarApp !== undefined) @@ -907,7 +892,7 @@ var EventsSection = new Lang.Class({ this._calendarApp = null; } return this._calendarApp; - }, + } _onTitleClicked() { Main.overview.hide(); @@ -917,32 +902,30 @@ var EventsSection = new Lang.Class({ if (app.get_id() == 'evolution.desktop') app = Gio.DesktopAppInfo.new('evolution-calendar.desktop'); app.launch([], global.create_app_launch_context(0, -1)); - }, + } setDate(date) { - this.parent(date); + super.setDate(date); this._updateTitle(); this._reloadEvents(); - }, + } _shouldShow() { return !this.empty || !isToday(this._date); - }, + } _sync() { if (this._reloading) return; - this.parent(); + super._sync(); } -}); +}; -var NotificationSection = new Lang.Class({ - Name: 'NotificationSection', - Extends: MessageList.MessageListSection, - - _init() { - this.parent(); +var NotificationSection = +class NotificationSection extends MessageList.MessageListSection { + constructor() { + super(); this._sources = new Map(); this._nUrgent = 0; @@ -953,12 +936,12 @@ var NotificationSection = new Lang.Class({ }); this.actor.connect('notify::mapped', this._onMapped.bind(this)); - }, + } get allowed() { return Main.sessionMode.hasNotifications && !Main.sessionMode.isGreeter; - }, + } _createTimeLabel(datetime) { let label = new St.Label({ style_class: 'event-time', @@ -969,7 +952,7 @@ var NotificationSection = new Lang.Class({ label.text = Util.formatTimeSpan(datetime); }); return label; - }, + } _sourceAdded(tray, source) { let obj = { @@ -984,7 +967,7 @@ var NotificationSection = new Lang.Class({ this._onNotificationAdded.bind(this)); this._sources.set(source, obj); - }, + } _onNotificationAdded(source, notification) { let message = new NotificationMessage(notification); @@ -1015,14 +998,14 @@ var NotificationSection = new Lang.Class({ let index = isUrgent ? 0 : this._nUrgent; this.addMessageAtIndex(message, index, this.actor.mapped); - }, + } _onSourceDestroy(source, obj) { source.disconnect(obj.destroyId); source.disconnect(obj.notificationAddedId); this._sources.delete(source); - }, + } _onMapped() { if (!this.actor.mapped) @@ -1031,17 +1014,15 @@ var NotificationSection = new Lang.Class({ for (let message of this._messages.keys()) if (message.notification.urgency != MessageTray.Urgency.CRITICAL) message.notification.acknowledged = true; - }, + } _shouldShow() { return !this.empty && isToday(this._date); } -}); +}; -var Placeholder = new Lang.Class({ - Name: 'Placeholder', - - _init() { +var Placeholder = class Placeholder { + constructor() { this.actor = new St.BoxLayout({ style_class: 'message-list-placeholder', vertical: true }); @@ -1059,14 +1040,14 @@ var Placeholder = new Lang.Class({ this.actor.add_actor(this._label); this._sync(); - }, + } setDate(date) { if (sameDay(this._date, date)) return; this._date = date; this._sync(); - }, + } _sync() { let today = isToday(this._date); @@ -1083,12 +1064,10 @@ var Placeholder = new Lang.Class({ this._label.text = _("No Events"); } } -}); +}; -var CalendarMessageList = new Lang.Class({ - Name: 'CalendarMessageList', - - _init() { +var CalendarMessageList = class CalendarMessageList { + constructor() { this.actor = new St.Widget({ style_class: 'message-list', layout_manager: new Clutter.BinLayout(), x_expand: true, y_expand: true }); @@ -1134,7 +1113,7 @@ var CalendarMessageList = new Lang.Class({ this._addSection(this._eventsSection); Main.sessionMode.connect('updated', this._sync.bind(this)); - }, + } _addSection(section) { let obj = { @@ -1159,7 +1138,7 @@ var CalendarMessageList = new Lang.Class({ this._sections.set(section, obj); this._sectionList.add_actor(section.actor); this._sync(); - }, + } _removeSection(section) { let obj = this._sections.get(section); @@ -1172,11 +1151,11 @@ var CalendarMessageList = new Lang.Class({ this._sections.delete(section); this._sectionList.remove_actor(section.actor); this._sync(); - }, + } _onKeyFocusIn(section, actor) { Util.ensureActorVisibleInScrollView(this._scrollView, actor); - }, + } _sync() { let sections = [...this._sections.keys()]; @@ -1191,15 +1170,15 @@ var CalendarMessageList = new Lang.Class({ let canClear = sections.some(s => s.canClear && s.actor.visible); this._clearButton.reactive = canClear; - }, + } setEventSource(eventSource) { this._eventsSection.setEventSource(eventSource); - }, + } setDate(date) { for (let section of this._sections.keys()) section.setDate(date); this._placeholder.setDate(date); } -}); +}; diff --git a/js/ui/checkBox.js b/js/ui/checkBox.js index 8fa481777..2d3787b70 100644 --- a/js/ui/checkBox.js +++ b/js/ui/checkBox.js @@ -2,12 +2,8 @@ const Clutter = imports.gi.Clutter; const Pango = imports.gi.Pango; const St = imports.gi.St; -const Lang = imports.lang; - -var CheckBox = new Lang.Class({ - Name: 'CheckBox', - - _init(label) { +var CheckBox = class CheckBox { + constructor(label) { let container = new St.BoxLayout(); this.actor = new St.Button({ style_class: 'check-box', child: container, @@ -28,13 +24,13 @@ var CheckBox = new Lang.Class({ if (label) this.setLabel(label); - }, + } setLabel(label) { this._label.set_text(label); - }, + } getLabelActor() { return this._label; } -}); +}; diff --git a/js/ui/components/__init__.js b/js/ui/components/__init__.js index 055900b72..6d6cc9d69 100644 --- a/js/ui/components/__init__.js +++ b/js/ui/components/__init__.js @@ -1,17 +1,13 @@ - -const Lang = imports.lang; const Main = imports.ui.main; -var ComponentManager = new Lang.Class({ - Name: 'ComponentManager', - - _init() { +var ComponentManager = class { + constructor() { this._allComponents = {}; this._enabledComponents = []; Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); - }, + } _sessionUpdated() { let newEnabledComponents = Main.sessionMode.components; @@ -29,12 +25,12 @@ var ComponentManager = new Lang.Class({ }); this._enabledComponents = newEnabledComponents; - }, + } _importComponent(name) { let module = imports.ui.components[name]; return module.Component; - }, + } _ensureComponent(name) { let component = this._allComponents[name]; @@ -48,13 +44,13 @@ var ComponentManager = new Lang.Class({ component = new constructor(); this._allComponents[name] = component; return component; - }, + } _enableComponent(name) { let component = this._ensureComponent(name); if (component) component.enable(); - }, + } _disableComponent(name) { let component = this._allComponents[name]; @@ -62,4 +58,4 @@ var ComponentManager = new Lang.Class({ return; component.disable(); } -}); +}; diff --git a/js/ui/components/automountManager.js b/js/ui/components/automountManager.js index 579c8a6b3..9903a48f5 100644 --- a/js/ui/components/automountManager.js +++ b/js/ui/components/automountManager.js @@ -1,6 +1,5 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Mainloop = imports.mainloop; const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; @@ -19,10 +18,8 @@ const SETTING_ENABLE_AUTOMOUNT = 'automount'; var AUTORUN_EXPIRE_TIMEOUT_SECS = 10; -var AutomountManager = new Lang.Class({ - Name: 'AutomountManager', - - _init() { +var AutomountManager = class { + constructor() { this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA }); this._volumeQueue = []; this._activeOperations = new Map(); @@ -34,7 +31,7 @@ var AutomountManager = new Lang.Class({ this._inhibited = false; this._volumeMonitor = Gio.VolumeMonitor.get(); - }, + } enable() { this._volumeAddedId = this._volumeMonitor.connect('volume-added', this._onVolumeAdded.bind(this)); @@ -45,7 +42,7 @@ var AutomountManager = new Lang.Class({ this._mountAllId = Mainloop.idle_add(this._startupMountAll.bind(this)); GLib.Source.set_name_by_id(this._mountAllId, '[gnome-shell] this._startupMountAll'); - }, + } disable() { this._volumeMonitor.disconnect(this._volumeAddedId); @@ -58,7 +55,7 @@ var AutomountManager = new Lang.Class({ Mainloop.source_remove(this._mountAllId); this._mountAllId = 0; } - }, + } _InhibitorsChanged(object, senderName, [inhibtor]) { this._session.IsInhibitedRemote(GNOME_SESSION_AUTOMOUNT_INHIBIT, @@ -67,7 +64,7 @@ var AutomountManager = new Lang.Class({ this._inhibited = result[0]; } }); - }, + } _startupMountAll() { let volumes = this._volumeMonitor.get_volumes(); @@ -79,7 +76,7 @@ var AutomountManager = new Lang.Class({ this._mountAllId = 0; return GLib.SOURCE_REMOVE; - }, + } _onDriveConnected() { // if we're not in the current ConsoleKit session, @@ -91,7 +88,7 @@ var AutomountManager = new Lang.Class({ player.play_from_theme('device-added-media', _("External drive connected"), null); - }, + } _onDriveDisconnected() { // if we're not in the current ConsoleKit session, @@ -103,7 +100,7 @@ var AutomountManager = new Lang.Class({ sound.play_from_theme('device-removed-media', _("External drive disconnected"), null); - }, + } _onDriveEjectButton(monitor, drive) { // TODO: this code path is not tested, as the GVfs volume monitor @@ -134,11 +131,11 @@ var AutomountManager = new Lang.Class({ } }); } - }, + } _onVolumeAdded(monitor, volume) { this._checkAndMountVolume(volume); - }, + } _checkAndMountVolume(volume, params) { params = Params.parse(params, { checkSession: true, @@ -178,7 +175,7 @@ var AutomountManager = new Lang.Class({ } else { this._mountVolume(volume, null, params.allowAutorun); } - }, + } _mountVolume(volume, operation, allowAutorun) { if (allowAutorun) @@ -189,7 +186,7 @@ var AutomountManager = new Lang.Class({ volume.mount(0, mountOp, null, this._onVolumeMounted.bind(this)); - }, + } _onVolumeMounted(volume, res) { this._allowAutorunExpire(volume); @@ -214,7 +211,7 @@ var AutomountManager = new Lang.Class({ this._closeOperation(volume); } } - }, + } _onVolumeRemoved(monitor, volume) { if (volume._allowAutorunExpireId && volume._allowAutorunExpireId > 0) { @@ -223,7 +220,7 @@ var AutomountManager = new Lang.Class({ } this._volumeQueue = this._volumeQueue.filter(element => (element != volume)); - }, + } _reaskPassword(volume) { let prevOperation = this._activeOperations.get(volume); @@ -232,7 +229,7 @@ var AutomountManager = new Lang.Class({ new ShellMountOperation.ShellMountOperation(volume, { existingDialog: existingDialog }); this._mountVolume(volume, operation); - }, + } _closeOperation(volume) { let operation = this._activeOperations.get(volume); @@ -240,11 +237,11 @@ var AutomountManager = new Lang.Class({ return; operation.close(); this._activeOperations.delete(volume); - }, + } _allowAutorun(volume) { volume.allowAutorun = true; - }, + } _allowAutorunExpire(volume) { let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => { @@ -255,5 +252,5 @@ var AutomountManager = new Lang.Class({ volume._allowAutorunExpireId = id; GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun'); } -}); +}; var Component = AutomountManager; diff --git a/js/ui/components/autorunManager.js b/js/ui/components/autorunManager.js index 68a1643f2..20499daee 100644 --- a/js/ui/components/autorunManager.js +++ b/js/ui/components/autorunManager.js @@ -1,6 +1,5 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Gio = imports.gi.Gio; const St = imports.gi.St; @@ -84,13 +83,11 @@ function HotplugSniffer() { '/org/gnome/Shell/HotplugSniffer'); } -var ContentTypeDiscoverer = new Lang.Class({ - Name: 'ContentTypeDiscoverer', - - _init(callback) { +var ContentTypeDiscoverer = class { + constructor(callback) { this._callback = callback; this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA }); - }, + } guessContentTypes(mount) { let autorunEnabled = !this._settings.get_boolean(SETTING_DISABLE_AUTORUN); @@ -103,7 +100,7 @@ var ContentTypeDiscoverer = new Lang.Class({ } else { this._emitCallback(mount, []); } - }, + } _onContentTypeGuessed(mount, res) { let contentTypes = []; @@ -126,7 +123,7 @@ var ContentTypeDiscoverer = new Lang.Class({ this._emitCallback(mount, contentTypes); }); } - }, + } _emitCallback(mount, contentTypes) { if (!contentTypes) @@ -150,27 +147,25 @@ var ContentTypeDiscoverer = new Lang.Class({ this._callback(mount, apps, contentTypes); } -}); +}; -var AutorunManager = new Lang.Class({ - Name: 'AutorunManager', - - _init() { +var AutorunManager = class { + constructor() { this._session = new GnomeSession.SessionManager(); this._volumeMonitor = Gio.VolumeMonitor.get(); this._dispatcher = new AutorunDispatcher(this); - }, + } enable() { this._mountAddedId = this._volumeMonitor.connect('mount-added', this._onMountAdded.bind(this)); this._mountRemovedId = this._volumeMonitor.connect('mount-removed', this._onMountRemoved.bind(this)); - }, + } disable() { this._volumeMonitor.disconnect(this._mountAddedId); this._volumeMonitor.disconnect(this._mountRemovedId); - }, + } _onMountAdded(monitor, mount) { // don't do anything if our session is not the currently @@ -182,21 +177,19 @@ var AutorunManager = new Lang.Class({ this._dispatcher.addMount(mount, apps, contentTypes); }); discoverer.guessContentTypes(mount); - }, + } _onMountRemoved(monitor, mount) { this._dispatcher.removeMount(mount); } -}); +}; -var AutorunDispatcher = new Lang.Class({ - Name: 'AutorunDispatcher', - - _init(manager) { +var AutorunDispatcher = class { + constructor(manager) { this._manager = manager; this._sources = []; this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA }); - }, + } _getAutorunSettingForType(contentType) { let runApp = this._settings.get_strv(SETTING_START_APP); @@ -212,7 +205,7 @@ var AutorunDispatcher = new Lang.Class({ return AutorunSetting.FILES; return AutorunSetting.ASK; - }, + } _getSourceForMount(mount) { let filtered = this._sources.filter(source => (source.mount == mount)); @@ -224,7 +217,7 @@ var AutorunDispatcher = new Lang.Class({ return filtered[0]; return null; - }, + } _addSource(mount, apps) { // if we already have a source showing for this @@ -234,7 +227,7 @@ var AutorunDispatcher = new Lang.Class({ // add a new source this._sources.push(new AutorunSource(this._manager, mount, apps)); - }, + } addMount(mount, apps, contentTypes) { // if autorun is disabled globally, return @@ -272,7 +265,7 @@ var AutorunDispatcher = new Lang.Class({ // but we failed launching the default app or the default file manager if (!success) this._addSource(mount, apps); - }, + } removeMount(mount) { let source = this._getSourceForMount(mount); @@ -284,45 +277,39 @@ var AutorunDispatcher = new Lang.Class({ // destroy the notification source source.destroy(); } -}); +}; -var AutorunSource = new Lang.Class({ - Name: 'AutorunSource', - Extends: MessageTray.Source, +var AutorunSource = class extends MessageTray.Source { + constructor(manager, mount, apps) { + super(mount.get_name()); - _init(manager, mount, apps) { this._manager = manager; this.mount = mount; this.apps = apps; - this.parent(mount.get_name()); - this._notification = new AutorunNotification(this._manager, this); // add ourselves as a source, and popup the notification Main.messageTray.add(this); this.notify(this._notification); - }, + } getIcon() { return this.mount.get_icon(); - }, + } _createPolicy() { return new MessageTray.NotificationApplicationPolicy('org.gnome.Nautilus'); } -}); +}; -var AutorunNotification = new Lang.Class({ - Name: 'AutorunNotification', - Extends: MessageTray.Notification, - - _init(manager, source) { - this.parent(source, source.title); +var AutorunNotification = class extends MessageTray.Notification { + constructor(manager, source) { + super(source, source.title); this._manager = manager; this._mount = source.mount; - }, + } createBanner() { let banner = new MessageTray.NotificationBanner(this); @@ -335,7 +322,7 @@ var AutorunNotification = new Lang.Class({ }); return banner; - }, + } _buttonForApp(app) { let box = new St.BoxLayout(); @@ -362,14 +349,14 @@ var AutorunNotification = new Lang.Class({ }); return button; - }, + } activate() { - this.parent(); + super.activate(); let app = Gio.app_info_get_default_for_type('inode/directory', false); startAppForMount(app, this._mount); } -}); +}; var Component = AutorunManager; diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js index 180b86556..22ea5d25b 100644 --- a/js/ui/components/keyring.js +++ b/js/ui/components/keyring.js @@ -1,6 +1,5 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Shell = imports.gi.Shell; const Clutter = imports.gi.Clutter; const St = imports.gi.St; @@ -18,12 +17,9 @@ const Tweener = imports.ui.tweener; var WORK_SPINNER_ICON_SIZE = 16; -var KeyringDialog = new Lang.Class({ - Name: 'KeyringDialog', - Extends: ModalDialog.ModalDialog, - - _init() { - this.parent({ styleClass: 'prompt-dialog' }); +var KeyringDialog = class extends ModalDialog.ModalDialog { + constructor() { + super({ styleClass: 'prompt-dialog' }); this.prompt = new Shell.KeyringPrompt(); this.prompt.connect('show-password', this._onShowPassword.bind(this)); @@ -61,7 +57,7 @@ var KeyringDialog = new Lang.Class({ this.prompt.bind_property('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE); - }, + } _setWorking(working) { if (!this._workSpinner) @@ -71,7 +67,7 @@ var KeyringDialog = new Lang.Class({ this._workSpinner.play(); else this._workSpinner.stop(); - }, + } _buildControlTable() { let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL }); @@ -162,7 +158,7 @@ var KeyringDialog = new Lang.Class({ this._controlTable = table; this._content.messageBox.add(table, { x_fill: true, y_fill: true }); - }, + } _updateSensitivity(sensitive) { if (this._passwordEntry) { @@ -178,7 +174,7 @@ var KeyringDialog = new Lang.Class({ this._continueButton.can_focus = sensitive; this._continueButton.reactive = sensitive; this._setWorking(!sensitive); - }, + } _ensureOpen() { // NOTE: ModalDialog.open() is safe to call if the dialog is @@ -196,65 +192,61 @@ var KeyringDialog = new Lang.Class({ ' Dismissing prompt request'); this.prompt.cancel() return false; - }, + } _onShowPassword(prompt) { this._buildControlTable(); this._ensureOpen(); this._updateSensitivity(true); this._passwordEntry.grab_key_focus(); - }, + } _onShowConfirm(prompt) { this._buildControlTable(); this._ensureOpen(); this._updateSensitivity(true); this._continueButton.grab_key_focus(); - }, + } _onHidePrompt(prompt) { this.close(); - }, + } _onPasswordActivate() { if (this.prompt.confirm_visible) this._confirmEntry.grab_key_focus(); else this._onContinueButton(); - }, + } _onConfirmActivate() { this._onContinueButton(); - }, + } _onContinueButton() { this._updateSensitivity(false); this.prompt.complete(); - }, + } _onCancelButton() { this.prompt.cancel(); - }, -}); + } +}; -var KeyringDummyDialog = new Lang.Class({ - Name: 'KeyringDummyDialog', - - _init() { +var KeyringDummyDialog = class { + constructor() { this.prompt = new Shell.KeyringPrompt(); this.prompt.connect('show-password', this._cancelPrompt.bind(this)); this.prompt.connect('show-confirm', this._cancelPrompt.bind(this)); - }, + } _cancelPrompt() { this.prompt.cancel(); } -}); +}; -var KeyringPrompter = new Lang.Class({ - Name: 'KeyringPrompter', - - _init() { +var KeyringPrompter = class { + constructor() { this._prompter = new Gcr.SystemPrompter(); this._prompter.connect('new-prompt', () => { let dialog = this._enabled ? new KeyringDialog() @@ -266,7 +258,7 @@ var KeyringPrompter = new Lang.Class({ this._registered = false; this._enabled = false; this._currentPrompt = null; - }, + } enable() { if (!this._registered) { @@ -276,7 +268,7 @@ var KeyringPrompter = new Lang.Class({ this._registered = true; } this._enabled = true; - }, + } disable() { this._enabled = false; @@ -285,6 +277,6 @@ var KeyringPrompter = new Lang.Class({ this._currentPrompt.cancel(); this._currentPrompt = null; } -}); +}; var Component = KeyringPrompter; diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js index 6f7b81f94..7a6011ce9 100644 --- a/js/ui/components/networkAgent.js +++ b/js/ui/components/networkAgent.js @@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; -const Lang = imports.lang; const NM = imports.gi.NM; const Pango = imports.gi.Pango; const Shell = imports.gi.Shell; @@ -21,12 +20,9 @@ const ShellEntry = imports.ui.shellEntry; const VPN_UI_GROUP = 'VPN Plugin UI'; -var NetworkSecretDialog = new Lang.Class({ - Name: 'NetworkSecretDialog', - Extends: ModalDialog.ModalDialog, - - _init(agent, requestId, connection, settingName, hints, contentOverride) { - this.parent({ styleClass: 'prompt-dialog' }); +var NetworkSecretDialog = class extends ModalDialog.ModalDialog { + constructor(agent, requestId, connection, settingName, hints, contentOverride) { + super({ styleClass: 'prompt-dialog' }); this._agent = agent; this._requestId = requestId; @@ -121,7 +117,7 @@ var NetworkSecretDialog = new Lang.Class({ this._okButton]); this._updateOkButton(); - }, + } _updateOkButton() { let valid = true; @@ -132,7 +128,7 @@ var NetworkSecretDialog = new Lang.Class({ this._okButton.button.reactive = valid; this._okButton.button.can_focus = valid; - }, + } _onOk() { let valid = true; @@ -148,12 +144,12 @@ var NetworkSecretDialog = new Lang.Class({ this.close(global.get_current_time()); } // do nothing if not valid - }, + } cancel() { this._agent.respond(this._requestId, Shell.NetworkAgentResponse.USER_CANCELED); this.close(global.get_current_time()); - }, + } _validateWpaPsk(secret) { let value = secret.value; @@ -169,7 +165,7 @@ var NetworkSecretDialog = new Lang.Class({ } return (value.length >= 8 && value.length <= 63); - }, + } _validateStaticWep(secret) { let value = secret.value; @@ -194,7 +190,7 @@ var NetworkSecretDialog = new Lang.Class({ return false; } return true; - }, + } _getWirelessSecrets(secrets, wirelessSetting) { let wirelessSecuritySetting = this._connection.get_setting_wireless_security(); @@ -231,7 +227,7 @@ var NetworkSecretDialog = new Lang.Class({ default: log('Invalid wireless key management: ' + wirelessSecuritySetting.key_mgmt); } - }, + } _get8021xSecrets(secrets) { let ieee8021xSetting = this._connection.get_setting_802_1x(); @@ -274,7 +270,7 @@ var NetworkSecretDialog = new Lang.Class({ default: log('Invalid EAP/IEEE802.1x method: ' + ieee8021xSetting.get_eap_method(0)); } - }, + } _getPPPoESecrets(secrets) { let pppoeSetting = this._connection.get_setting_pppoe(); @@ -284,7 +280,7 @@ var NetworkSecretDialog = new Lang.Class({ value: pppoeSetting.service || '', password: false }); secrets.push({ label: _("Password: "), key: 'password', value: pppoeSetting.password || '', password: true }); - }, + } _getMobileSecrets(secrets, connectionType) { let setting; @@ -294,7 +290,7 @@ var NetworkSecretDialog = new Lang.Class({ setting = this._connection.get_setting_by_name(connectionType); secrets.push({ label: _("Password: "), key: 'password', value: setting.value || '', password: true }); - }, + } _getContent() { let connectionSetting = this._connection.get_setting_connection(); @@ -347,12 +343,10 @@ var NetworkSecretDialog = new Lang.Class({ return content; } -}); +}; -var VPNRequestHandler = new Lang.Class({ - Name: 'VPNRequestHandler', - - _init(agent, requestId, authHelper, serviceType, connection, hints, flags) { +var VPNRequestHandler = class { + constructor(agent, requestId, authHelper, serviceType, connection, hints, flags) { this._agent = agent; this._requestId = requestId; this._connection = connection; @@ -412,7 +406,7 @@ var VPNRequestHandler = new Lang.Class({ this._agent.respond(requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR); } - }, + } cancel(respond) { if (respond) @@ -428,7 +422,7 @@ var VPNRequestHandler = new Lang.Class({ } this.destroy(); - }, + } destroy() { if (this._destroyed) @@ -442,7 +436,7 @@ var VPNRequestHandler = new Lang.Class({ // Stdout is closed when we finish reading from it this._destroyed = true; - }, + } _vpnChildFinished(pid, status, requestObj) { this._childWatch = 0; @@ -463,7 +457,7 @@ var VPNRequestHandler = new Lang.Class({ this._agent.respond(this._requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR); this.destroy(); - }, + } _vpnChildProcessLineOldStyle(line) { if (this._previousLine != undefined) { @@ -481,7 +475,7 @@ var VPNRequestHandler = new Lang.Class({ } else { this._previousLine = line; } - }, + } _readStdoutOldStyle() { this._dataStdout.read_line_async(GLib.PRIORITY_DEFAULT, null, (stream, result) => { @@ -498,7 +492,7 @@ var VPNRequestHandler = new Lang.Class({ // try to read more! this._readStdoutOldStyle(); }); - }, + } _readStdoutNewStyle() { this._dataStdout.fill_async(-1, GLib.PRIORITY_DEFAULT, null, (stream, result) => { @@ -516,7 +510,7 @@ var VPNRequestHandler = new Lang.Class({ this._dataStdout.set_buffer_size(2 * this._dataStdout.get_buffer_size()); this._readStdoutNewStyle(); }); - }, + } _showNewStyleDialog() { let keyfile = new GLib.KeyFile(); @@ -580,7 +574,7 @@ var VPNRequestHandler = new Lang.Class({ this._agent.respond(this._requestId, Shell.NetworkAgentResponse.CONFIRMED); this.destroy(); } - }, + } _writeConnection() { let vpnSetting = this._connection.get_setting_vpn(); @@ -601,14 +595,12 @@ var VPNRequestHandler = new Lang.Class({ this._agent.respond(this._requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR); this.destroy(); } - }, -}); + } +}; Signals.addSignalMethods(VPNRequestHandler.prototype); -var NetworkAgent = new Lang.Class({ - Name: 'NetworkAgent', - - _init() { +var NetworkAgent = class { + constructor() { this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent', capabilities: NM.SecretAgentCapabilities.VPN_HINTS, auto_register: false @@ -639,7 +631,7 @@ var NetworkAgent = new Lang.Class({ logError(e, 'error initializing the NetworkManager Agent'); } }); - }, + } enable() { if (!this._native) @@ -648,7 +640,7 @@ var NetworkAgent = new Lang.Class({ this._native.auto_register = true; if (this._initialized && !this._native.registered) this._native.register_async(null, null); - }, + } disable() { let requestId; @@ -671,7 +663,7 @@ var NetworkAgent = new Lang.Class({ this._native.auto_register = false; if (this._initialized && this._native.registered) this._native.unregister_async(null, null); - }, + } _showNotification(requestId, connection, settingName, hints, flags) { let source = new MessageTray.Source(_("Network Manager"), 'network-transmit-receive'); @@ -731,14 +723,14 @@ var NetworkAgent = new Lang.Class({ Main.messageTray.add(source); source.notify(notification); - }, + } _newRequest(agent, requestId, connection, settingName, hints, flags) { if (!(flags & NM.SecretAgentGetSecretsFlags.USER_REQUESTED)) this._showNotification(requestId, connection, settingName, hints, flags); else this._handleRequest(requestId, connection, settingName, hints, flags); - }, + } _handleRequest(requestId, connection, settingName, hints, flags) { if (settingName == 'vpn') { @@ -752,7 +744,7 @@ var NetworkAgent = new Lang.Class({ }); this._dialogs[requestId] = dialog; dialog.open(global.get_current_time()); - }, + } _cancelRequest(agent, requestId) { if (this._dialogs[requestId]) { @@ -763,7 +755,7 @@ var NetworkAgent = new Lang.Class({ this._vpnRequests[requestId].cancel(false); delete this._vpnRequests[requestId]; } - }, + } _vpnRequest(requestId, connection, hints, flags) { let vpnSetting = connection.get_setting_vpn(); @@ -785,7 +777,7 @@ var NetworkAgent = new Lang.Class({ delete this._vpnRequests[requestId]; }); this._vpnRequests[requestId] = vpnRequest; - }, + } _buildVPNServiceCache() { if (this._vpnCacheBuilt) @@ -818,5 +810,5 @@ var NetworkAgent = new Lang.Class({ } }); } -}); +}; var Component = NetworkAgent; diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js index dee5f38b3..3e5090fb1 100644 --- a/js/ui/components/polkitAgent.js +++ b/js/ui/components/polkitAgent.js @@ -1,6 +1,5 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Signals = imports.signals; const Shell = imports.gi.Shell; const AccountsService = imports.gi.AccountsService; @@ -26,12 +25,9 @@ var DIALOG_ICON_SIZE = 48; var WORK_SPINNER_ICON_SIZE = 16; -var AuthenticationDialog = new Lang.Class({ - Name: 'AuthenticationDialog', - Extends: ModalDialog.ModalDialog, - - _init(actionId, body, cookie, userNames) { - this.parent({ styleClass: 'prompt-dialog' }); +var AuthenticationDialog = class extends ModalDialog.ModalDialog { + constructor(actionId, body, cookie, userNames) { + super({ styleClass: 'prompt-dialog' }); this.actionId = actionId; this.message = body; @@ -158,14 +154,14 @@ var AuthenticationDialog = new Lang.Class({ this._identityToAuth = Polkit.UnixUser.new_for_name(userName); this._cookie = cookie; - }, + } _setWorking(working) { if (working) this._workSpinner.play(); else this._workSpinner.stop(); - }, + } performAuthentication() { this._destroySession(); @@ -176,7 +172,7 @@ var AuthenticationDialog = new Lang.Class({ this._sessionShowErrorId = this._session.connect('show-error', this._onSessionShowError.bind(this)); this._sessionShowInfoId = this._session.connect('show-info', this._onSessionShowInfo.bind(this)); this._session.initiate(); - }, + } _ensureOpen() { // NOTE: ModalDialog.open() is safe to call if the dialog is @@ -198,14 +194,14 @@ var AuthenticationDialog = new Lang.Class({ ' cookie ' + this._cookie); this._emitDone(true); } - }, + } _emitDone(dismissed) { if (!this._doneEmitted) { this._doneEmitted = true; this.emit('done', dismissed); } - }, + } _updateSensitivity(sensitive) { this._passwordEntry.reactive = sensitive; @@ -214,7 +210,7 @@ var AuthenticationDialog = new Lang.Class({ this._okButton.can_focus = sensitive; this._okButton.reactive = sensitive; this._setWorking(!sensitive); - }, + } _onEntryActivate() { let response = this._passwordEntry.get_text(); @@ -225,11 +221,11 @@ var AuthenticationDialog = new Lang.Class({ this._errorMessageLabel.hide(); this._infoMessageLabel.hide(); this._nullMessageLabel.show(); - }, + } _onAuthenticateButtonPressed() { this._onEntryActivate(); - }, + } _onSessionCompleted(session, gainedAuthorization) { if (this._completed || this._doneEmitted) @@ -261,7 +257,7 @@ var AuthenticationDialog = new Lang.Class({ /* Try and authenticate again */ this.performAuthentication(); } - }, + } _onSessionRequest(session, request, echo_on) { // Cheap localization trick @@ -280,7 +276,7 @@ var AuthenticationDialog = new Lang.Class({ this._passwordEntry.grab_key_focus(); this._updateSensitivity(true); this._ensureOpen(); - }, + } _onSessionShowError(session, text) { this._passwordEntry.set_text(''); @@ -289,7 +285,7 @@ var AuthenticationDialog = new Lang.Class({ this._infoMessageLabel.hide(); this._nullMessageLabel.hide(); this._ensureOpen(); - }, + } _onSessionShowInfo(session, text) { this._passwordEntry.set_text(''); @@ -298,7 +294,7 @@ var AuthenticationDialog = new Lang.Class({ this._errorMessageLabel.hide(); this._nullMessageLabel.hide(); this._ensureOpen(); - }, + } _destroySession() { if (this._session) { @@ -312,20 +308,20 @@ var AuthenticationDialog = new Lang.Class({ this._session.disconnect(this._sessionShowInfoId); this._session = null; } - }, + } _onUserChanged() { if (this._user.is_loaded && this._userAvatar) { this._userAvatar.update(); this._userAvatar.actor.show(); } - }, + } cancel() { this._wasDismissed = true; this.close(global.get_current_time()); this._emitDone(true); - }, + } _onDialogClosed() { if (this._sessionUpdatedId) @@ -339,21 +335,19 @@ var AuthenticationDialog = new Lang.Class({ } this._destroySession(); - }, -}); + } +}; Signals.addSignalMethods(AuthenticationDialog.prototype); -var AuthenticationAgent = new Lang.Class({ - Name: 'AuthenticationAgent', - - _init() { +var AuthenticationAgent = class { + constructor() { this._currentDialog = null; this._handle = null; this._native = new Shell.PolkitAuthenticationAgent(); this._native.connect('initiate', this._onInitiate.bind(this)); this._native.connect('cancel', this._onCancel.bind(this)); this._sessionUpdatedId = 0; - }, + } enable() { try { @@ -361,7 +355,7 @@ var AuthenticationAgent = new Lang.Class({ } catch(e) { log('Failed to register AuthenticationAgent'); } - }, + } disable() { try { @@ -369,7 +363,7 @@ var AuthenticationAgent = new Lang.Class({ } catch(e) { log('Failed to unregister AuthenticationAgent'); } - }, + } _onInitiate(nativeAgent, actionId, message, iconName, cookie, userNames) { // Don't pop up a dialog while locked @@ -397,15 +391,15 @@ var AuthenticationAgent = new Lang.Class({ this._currentDialog.connect('done', this._onDialogDone.bind(this)); this._currentDialog.performAuthentication(); - }, + } _onCancel(nativeAgent) { this._completeRequest(false); - }, + } _onDialogDone(dialog, dismissed) { this._completeRequest(dismissed); - }, + } _completeRequest(dismissed) { this._currentDialog.close(); @@ -416,7 +410,7 @@ var AuthenticationAgent = new Lang.Class({ this._sessionUpdatedId = 0; this._native.complete(dismissed); - }, -}); + } +}; var Component = AuthenticationAgent; diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js index 257b24fdd..d26e8a07e 100644 --- a/js/ui/components/telepathyClient.js +++ b/js/ui/components/telepathyClient.js @@ -79,17 +79,15 @@ function makeMessageFromTplEvent(event) { }; } -var TelepathyComponent = new Lang.Class({ - Name: 'TelepathyComponent', - - _init() { +var TelepathyComponent = class { + constructor() { this._client = null; if (!HAVE_TP) return; // Telepathy isn't available this._client = new TelepathyClient(); - }, + } enable() { if (!this._client) @@ -103,7 +101,7 @@ var TelepathyComponent = new Lang.Class({ if (!this._client.account_manager.is_prepared(Tp.AccountManager.get_feature_quark_core())) this._client.account_manager.prepare_async(null, null); - }, + } disable() { if (!this._client) @@ -111,7 +109,7 @@ var TelepathyComponent = new Lang.Class({ this._client.unregister(); } -}); +}; var TelepathyClient = HAVE_TP ? new Lang.Class({ Name: 'TelepathyClient', @@ -279,17 +277,14 @@ var TelepathyClient = HAVE_TP ? new Lang.Class({ }, }) : null; -var ChatSource = new Lang.Class({ - Name: 'ChatSource', - Extends: MessageTray.Source, +var ChatSource = class extends MessageTray.Source { + constructor(account, conn, channel, contact, client) { + super(contact.get_alias()); - _init(account, conn, channel, contact, client) { this._account = account; this._contact = contact; this._client = client; - this.parent(contact.get_alias()); - this.isChat = true; this._pendingMessages = []; @@ -313,7 +308,7 @@ var ChatSource = new Lang.Class({ Main.messageTray.add(this); this._getLogMessages(); - }, + } _ensureNotification() { if (this._notification) @@ -329,13 +324,13 @@ var ChatSource = new Lang.Class({ this._notification = null; }); this.pushNotification(this._notification); - }, + } _createPolicy() { if (this._account.protocol_name == 'irc') return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari'); return new MessageTray.NotificationApplicationPolicy('empathy'); - }, + } createBanner() { this._banner = new ChatNotificationBanner(this._notification); @@ -348,7 +343,7 @@ var ChatSource = new Lang.Class({ }); return this._banner; - }, + } _updateAlias() { let oldAlias = this.title; @@ -360,7 +355,7 @@ var ChatSource = new Lang.Class({ this.setTitle(newAlias); if (this._notification) this._notification.appendAliasChange(oldAlias, newAlias); - }, + } getIcon() { let file = this._contact.get_avatar_file(); @@ -369,7 +364,7 @@ var ChatSource = new Lang.Class({ } else { return new Gio.ThemedIcon({ name: 'avatar-default' }); } - }, + } getSecondaryIcon() { let iconName; @@ -398,7 +393,7 @@ var ChatSource = new Lang.Class({ iconName = 'user-offline'; } return new Gio.ThemedIcon({ name: iconName }); - }, + } _updateAvatarIcon() { this.iconUpdated(); @@ -406,7 +401,7 @@ var ChatSource = new Lang.Class({ this._notification.update(this._notification.title, this._notification.bannerBodyText, { gicon: this.getIcon() }); - }, + } open() { Main.overview.hide(); @@ -431,7 +426,7 @@ var ChatSource = new Lang.Class({ cd.present_channel_async(this._channel, global.get_current_time(), null); } - }, + } _getLogMessages() { let logManager = Tpl.LogManager.dup_singleton(); @@ -440,7 +435,7 @@ var ChatSource = new Lang.Class({ logManager.get_filtered_events_async(this._account, entity, Tpl.EventTypeMask.TEXT, SCROLLBACK_HISTORY_LINES, null, this._displayPendingMessages.bind(this)); - }, + } _displayPendingMessages(logManager, result) { let [success, events] = logManager.get_filtered_events_finish(result); @@ -493,7 +488,7 @@ var ChatSource = new Lang.Class({ if (pendingMessages.length > 0) this.notify(); - }, + } destroy(reason) { if (this._client.is_handling_channel(this._channel)) { @@ -527,25 +522,25 @@ var ChatSource = new Lang.Class({ this._contact.disconnect(this._notifyAvatarId); this._contact.disconnect(this._presenceChangedId); - this.parent(reason); - }, + super.destroy(reason); + } _channelClosed() { this.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); - }, + } /* All messages are new messages for Telepathy sources */ get count() { return this._pendingMessages.length; - }, + } get unseenCount() { return this.count; - }, + } get countVisible() { return this.count > 0; - }, + } _messageReceived(channel, message) { if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT) @@ -565,7 +560,7 @@ var ChatSource = new Lang.Class({ this._notifyTimeoutId = Mainloop.timeout_add(500, this._notifyTimeout.bind(this)); GLib.Source.set_name_by_id(this._notifyTimeoutId, '[gnome-shell] this._notifyTimeout'); - }, + } _notifyTimeout() { if (this._pendingMessages.length != 0) @@ -574,7 +569,7 @@ var ChatSource = new Lang.Class({ this._notifyTimeoutId = 0; return GLib.SOURCE_REMOVE; - }, + } // This is called for both messages we send from // our client and other clients as well. @@ -582,11 +577,11 @@ var ChatSource = new Lang.Class({ this._ensureNotification(); message = makeMessageFromTpMessage(message, NotificationDirection.SENT); this._notification.appendMessage(message); - }, + } notify() { - this.parent(this._notification); - }, + super.notify(this._notification); + } respond(text) { let type; @@ -601,7 +596,7 @@ var ChatSource = new Lang.Class({ this._channel.send_message_async(msg, 0, (src, result) => { this._channel.send_message_finish(result); }); - }, + } setChatState(state) { // We don't want to send COMPOSING every time a letter is typed into @@ -614,14 +609,14 @@ var ChatSource = new Lang.Class({ this._chatState = state; this._channel.set_chat_state_async(state, null); } - }, + } _presenceChanged(contact, presence, status, message) { if (this._notification) this._notification.update(this._notification.title, this._notification.bannerBodyText, { secondaryGIcon: this.getSecondaryIcon() }); - }, + } _pendingRemoved(channel, message) { let idx = this._pendingMessages.indexOf(message); @@ -634,35 +629,32 @@ var ChatSource = new Lang.Class({ if (this._pendingMessages.length == 0 && this._banner && !this._banner.expanded) this._banner.hide(); - }, + } _ackMessages() { // Don't clear our messages here, tp-glib will send a // 'pending-message-removed' for each one. this._channel.ack_all_pending_messages_async(null); } -}); +}; -var ChatNotification = new Lang.Class({ - Name: 'ChatNotification', - Extends: MessageTray.Notification, - - _init(source) { - this.parent(source, source.title, null, - { secondaryGIcon: source.getSecondaryIcon() }); +var ChatNotification = class extends MessageTray.Notification { + constructor(source) { + super(source, source.title, null, + { secondaryGIcon: source.getSecondaryIcon() }); this.setUrgency(MessageTray.Urgency.HIGH); this.setResident(true); this.messages = []; this._timestampTimeoutId = 0; - }, + } destroy(reason) { if (this._timestampTimeoutId) Mainloop.source_remove(this._timestampTimeoutId); this._timestampTimeoutId = 0; - this.parent(reason); - }, + super.destroy(reason); + } /** * appendMessage: @@ -700,7 +692,7 @@ var ChatNotification = new Lang.Class({ styles: styles, timestamp: message.timestamp, noTimestamp: noTimestamp }); - }, + } _filterMessages() { if (this.messages.length < 1) @@ -725,7 +717,7 @@ var ChatNotification = new Lang.Class({ for (let i = 0; i < expired.length; i++) this.emit('message-removed', expired[i]); } - }, + } /** * _append: @@ -773,7 +765,7 @@ var ChatNotification = new Lang.Class({ } this._filterMessages(); - }, + } appendTimestamp() { this._timestampTimeoutId = 0; @@ -784,7 +776,7 @@ var ChatNotification = new Lang.Class({ this._filterMessages(); return GLib.SOURCE_REMOVE; - }, + } appendAliasChange(oldAlias, newAlias) { oldAlias = GLib.markup_escape_text(oldAlias, -1); @@ -800,7 +792,7 @@ var ChatNotification = new Lang.Class({ this._filterMessages(); } -}); +}; var ChatLineBox = new Lang.Class({ Name: 'ChatLineBox', @@ -812,12 +804,9 @@ var ChatLineBox = new Lang.Class({ } }); -var ChatNotificationBanner = new Lang.Class({ - Name: 'ChatNotificationBanner', - Extends: MessageTray.NotificationBanner, - - _init(notification) { - this.parent(notification); +var ChatNotificationBanner = class extends MessageTray.NotificationBanner { + constructor(notification) { + super(notification); this._responseEntry = new St.Entry({ style_class: 'chat-response', x_expand: true, @@ -880,14 +869,14 @@ var ChatNotificationBanner = new Lang.Class({ for (let i = this.notification.messages.length - 1; i >= 0; i--) this._addMessage(this.notification.messages[i]); - }, + } _onDestroy() { - this.parent(); + super._onDestroy(); this.notification.disconnect(this._messageAddedId); this.notification.disconnect(this._messageRemovedId); this.notification.disconnect(this._timestampChangedId); - }, + } scrollTo(side) { let adjustment = this._scrollArea.vscroll.adjustment; @@ -895,11 +884,11 @@ var ChatNotificationBanner = new Lang.Class({ adjustment.value = adjustment.lower; else if (side == St.Side.BOTTOM) adjustment.value = adjustment.upper; - }, + } hide() { this.emit('done-displaying'); - }, + } _addMessage(message) { let highlighter = new MessageList.URLHighlighter(message.body, true, true); @@ -921,7 +910,7 @@ var ChatNotificationBanner = new Lang.Class({ this._messageActors.set(message, lineBox); this._updateTimestamp(message); - }, + } _updateTimestamp(message) { let actor = this._messageActors.get(message); @@ -942,7 +931,7 @@ var ChatNotificationBanner = new Lang.Class({ actor.add_actor(timeLabel); } - }, + } _onEntryActivated() { let text = this._responseEntry.get_text(); @@ -955,7 +944,7 @@ var ChatNotificationBanner = new Lang.Class({ // see Source._messageSent this._responseEntry.set_text(''); this.notification.source.respond(text); - }, + } _composingStopTimeout() { this._composingTimeoutId = 0; @@ -963,7 +952,7 @@ var ChatNotificationBanner = new Lang.Class({ this.notification.source.setChatState(Tp.ChannelChatState.PAUSED); return GLib.SOURCE_REMOVE; - }, + } _onEntryChanged() { let text = this._responseEntry.get_text(); @@ -990,6 +979,6 @@ var ChatNotificationBanner = new Lang.Class({ this.notification.source.setChatState(Tp.ChannelChatState.ACTIVE); } } -}); +}; var Component = TelepathyComponent; diff --git a/js/ui/ctrlAltTab.js b/js/ui/ctrlAltTab.js index 8ab1db9ba..62e1f3d93 100644 --- a/js/ui/ctrlAltTab.js +++ b/js/ui/ctrlAltTab.js @@ -2,7 +2,6 @@ const Clutter = imports.gi.Clutter; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -21,15 +20,13 @@ var SortGroup = { BOTTOM: 2 }; -var CtrlAltTabManager = new Lang.Class({ - Name: 'CtrlAltTabManager', - - _init() { +var CtrlAltTabManager = class CtrlAltTabManager { + constructor() { this._items = []; this.addGroup(global.window_group, _("Windows"), 'focus-windows-symbolic', { sortGroup: SortGroup.TOP, focusCallback: this._focusWindows.bind(this) }); - }, + } addGroup(root, name, icon, params) { let item = Params.parse(params, { sortGroup: SortGroup.MIDDLE, @@ -44,7 +41,7 @@ var CtrlAltTabManager = new Lang.Class({ root.connect('destroy', () => { this.removeGroup(root); }); if (root instanceof St.Widget) global.focus_manager.add_group(root); - }, + } removeGroup(root) { if (root instanceof St.Widget) @@ -55,14 +52,14 @@ var CtrlAltTabManager = new Lang.Class({ return; } } - }, + } focusGroup(item, timestamp) { if (item.focusCallback) item.focusCallback(timestamp); else item.root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); - }, + } // Sort the items into a consistent order; panel first, tray last, // and everything else in between, sorted by X coordinate, so that @@ -77,7 +74,7 @@ var CtrlAltTabManager = new Lang.Class({ [bx, y] = b.proxy.get_transformed_position(); return ax - bx; - }, + } popup(backward, binding, mask) { // Start with the set of focus groups that are currently mapped @@ -130,22 +127,20 @@ var CtrlAltTabManager = new Lang.Class({ this._popup = null; }); } - }, + } _focusWindows(timestamp) { global.display.focus_default_window(timestamp); } -}); +}; -var CtrlAltTabPopup = new Lang.Class({ - Name: 'CtrlAltTabPopup', - Extends: SwitcherPopup.SwitcherPopup, - - _init(items) { - this.parent(items); +var CtrlAltTabPopup = +class CtrlAltTabPopup extends SwitcherPopup.SwitcherPopup { + constructor(items) { + super(items); this._switcherList = new CtrlAltTabSwitcher(this._items); - }, + } _keyPressHandler(keysym, action) { if (action == Meta.KeyBindingAction.SWITCH_PANELS) @@ -160,24 +155,22 @@ var CtrlAltTabPopup = new Lang.Class({ return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_STOP; - }, + } _finish(time) { - this.parent(time); + super._finish(time); Main.ctrlAltTabManager.focusGroup(this._items[this._selectedIndex], time); - }, -}); + } +}; -var CtrlAltTabSwitcher = new Lang.Class({ - Name: 'CtrlAltTabSwitcher', - Extends: SwitcherPopup.SwitcherList, - - _init(items) { - this.parent(true); +var CtrlAltTabSwitcher = +class CtrlAltTabSwitcher extends SwitcherPopup.SwitcherList { + constructor(items) { + super(true); for (let i = 0; i < items.length; i++) this._addIcon(items[i]); - }, + } _addIcon(item) { let box = new St.BoxLayout({ style_class: 'alt-tab-app', @@ -195,4 +188,4 @@ var CtrlAltTabSwitcher = new Lang.Class({ this.addItem(box, text); } -}); +}; diff --git a/js/ui/dash.js b/js/ui/dash.js index ce970a610..be529213e 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -347,10 +347,8 @@ var DashActor = new Lang.Class({ const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ]; -var Dash = new Lang.Class({ - Name: 'Dash', - - _init() { +var Dash = class Dash { + constructor() { this._maxHeight = -1; this.iconSize = 64; this._shownInitially = false; @@ -407,7 +405,7 @@ var Dash = new Lang.Class({ // Translators: this is the name of the dock/favorites area on // the left of the overview Main.ctrlAltTabManager.addGroup(this.actor, _("Dash"), 'user-bookmarks-symbolic'); - }, + } _onDragBegin() { this._dragCancelled = false; @@ -421,26 +419,26 @@ var Dash = new Lang.Class({ this._box.insert_child_at_index(this._emptyDropTarget, 0); this._emptyDropTarget.show(true); } - }, + } _onDragCancelled() { this._dragCancelled = true; this._endDrag(); - }, + } _onDragEnd() { if (this._dragCancelled) return; this._endDrag(); - }, + } _endDrag() { this._clearDragPlaceholder(); this._clearEmptyDropTarget(); this._showAppsIcon.setDragApp(null); DND.removeDragMonitor(this._dragMonitor); - }, + } _onDragMotion(dragEvent) { let app = getAppFromSource(dragEvent.source); @@ -459,18 +457,18 @@ var Dash = new Lang.Class({ this._showAppsIcon.setDragApp(null); return DND.DragMotionResult.CONTINUE; - }, + } _appIdListToHash(apps) { let ids = {}; for (let i = 0; i < apps.length; i++) ids[apps[i].get_id()] = apps[i]; return ids; - }, + } _queueRedisplay() { Main.queueDeferredWork(this._workId); - }, + } _hookUpLabel(item, appIcon) { item.child.connect('notify::hover', () => { @@ -490,7 +488,7 @@ var Dash = new Lang.Class({ this._syncLabel(item, appIcon); }); } - }, + } _createAppItem(app) { let appIcon = new AppDisplay.AppIcon(app, @@ -524,7 +522,7 @@ var Dash = new Lang.Class({ this._hookUpLabel(item, appIcon); return item; - }, + } _itemMenuStateChanged(item, opened) { // When the menu closes, it calls sync_hover, which means @@ -537,7 +535,7 @@ var Dash = new Lang.Class({ item.hideLabel(); } - }, + } _syncLabel(item, appIcon) { let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover(); @@ -573,7 +571,7 @@ var Dash = new Lang.Class({ GLib.Source.set_name_by_id(this._resetHoverTimeoutId, '[gnome-shell] this._labelShowing'); } } - }, + } _adjustIconSize() { // For the icon size, we only consider children which are "proper" @@ -663,7 +661,7 @@ var Dash = new Lang.Class({ transition: 'easeOutQuad', }); } - }, + } _redisplay() { let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); @@ -792,7 +790,7 @@ var Dash = new Lang.Class({ // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744 // Without it, StBoxLayout may use a stale size cache this._box.queue_relayout(); - }, + } _clearDragPlaceholder() { if (this._dragPlaceholder) { @@ -804,14 +802,14 @@ var Dash = new Lang.Class({ this._dragPlaceholder = null; } this._dragPlaceholderPos = -1; - }, + } _clearEmptyDropTarget() { if (this._emptyDropTarget) { this._emptyDropTarget.animateOutAndDestroy(); this._emptyDropTarget = null; } - }, + } handleDragOver(source, actor, x, y, time) { let app = getAppFromSource(source); @@ -888,7 +886,7 @@ var Dash = new Lang.Class({ return DND.DragMotionResult.MOVE_DROP; return DND.DragMotionResult.COPY_DROP; - }, + } // Draggable target interface acceptDrop(source, actor, x, y, time) { @@ -938,6 +936,5 @@ var Dash = new Lang.Class({ return true; } -}); - +}; Signals.addSignalMethods(Dash.prototype); diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js index 83967c9f4..a95c09ec2 100644 --- a/js/ui/dateMenu.js +++ b/js/ui/dateMenu.js @@ -31,10 +31,8 @@ function _isToday(date) { now.getDate() == date.getDate(); } -var TodayButton = new Lang.Class({ - Name: 'TodayButton', - - _init(calendar) { +var TodayButton = class TodayButton { + constructor(calendar) { // Having the ability to go to the current date if the user is already // on the current date can be confusing. So don't make the button reactive // until the selected date changes. @@ -63,7 +61,7 @@ var TodayButton = new Lang.Class({ // current date. this.actor.reactive = !_isToday(date) }); - }, + } setDate(date) { this._dayLabel.set_text(date.toLocaleFormat('%A')); @@ -83,12 +81,10 @@ var TodayButton = new Lang.Class({ dateFormat = Shell.util_translate_time_string (N_("%A %B %e %Y")); this.actor.accessible_name = date.toLocaleFormat(dateFormat); } -}); +}; -var WorldClocksSection = new Lang.Class({ - Name: 'WorldClocksSection', - - _init() { +var WorldClocksSection = class WorldClocksSection { + constructor() { this._clock = new GnomeDesktop.WallClock(); this._clockNotifyId = 0; @@ -118,11 +114,11 @@ var WorldClocksSection = new Lang.Class({ this._clockAppMon.watchSetting('world-clocks', this._clocksChanged.bind(this)); this._sync(); - }, + } _sync() { this.actor.visible = this._clockAppMon.available; - }, + } _clocksChanged(settings) { this._grid.destroy_all_children(); @@ -187,7 +183,7 @@ var WorldClocksSection = new Lang.Class({ this._clock.disconnect(this._clockNotifyId); this._clockNotifyId = 0; } - }, + } _updateLabels() { for (let i = 0; i < this._locations.length; i++) { @@ -197,12 +193,10 @@ var WorldClocksSection = new Lang.Class({ l.actor.text = Util.formatTime(now, { timeOnly: true }); } } -}); +}; -var WeatherSection = new Lang.Class({ - Name: 'WeatherSection', - - _init() { +var WeatherSection = class WeatherSection { + constructor() { this._weatherClient = new Weather.WeatherClient(); this.actor = new St.Button({ style_class: 'weather-button', @@ -236,7 +230,7 @@ var WeatherSection = new Lang.Class({ this._weatherClient.connect('changed', this._sync.bind(this)); this._sync(); - }, + } _getSummary(info, capitalize=false) { let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION @@ -250,7 +244,7 @@ var WeatherSection = new Lang.Class({ let [, sky] = info.get_value_sky(); return GWeather.Sky.to_string_full(sky, options); - }, + } _sameSummary(info1, info2) { let [ok1, phenom1, qualifier1] = info1.get_value_conditions(); @@ -261,7 +255,7 @@ var WeatherSection = new Lang.Class({ let [, sky1] = info1.get_value_sky(); let [, sky2] = info2.get_value_sky(); return sky1 == sky2; - }, + } _getSummaryText() { let info = this._weatherClient.info; @@ -309,7 +303,7 @@ var WeatherSection = new Lang.Class({ return this._getSummary(info, capitalize); }); return String.prototype.format.apply(fmt, summaries); - }, + } _getLabelText() { if (!this._weatherClient.hasLocation) @@ -328,7 +322,7 @@ var WeatherSection = new Lang.Class({ return _("Go online for weather information"); return _("Weather information is currently unavailable"); - }, + } _sync() { this.actor.visible = this._weatherClient.available; @@ -338,12 +332,10 @@ var WeatherSection = new Lang.Class({ this._conditionsLabel.text = this._getLabelText(); } -}); +}; -var MessagesIndicator = new Lang.Class({ - Name: 'MessagesIndicator', - - _init() { +var MessagesIndicator = class MessagesIndicator { + constructor() { this.actor = new St.Icon({ icon_name: 'message-indicator-symbolic', icon_size: 16, visible: false, y_expand: true, @@ -357,18 +349,18 @@ var MessagesIndicator = new Lang.Class({ let sources = Main.messageTray.getSources(); sources.forEach(source => { this._onSourceAdded(null, source); }); - }, + } _onSourceAdded(tray, source) { source.connect('count-updated', this._updateCount.bind(this)); this._sources.push(source); this._updateCount(); - }, + } _onSourceRemoved(tray, source) { this._sources.splice(this._sources.indexOf(source), 1); this._updateCount(); - }, + } _updateCount() { let count = 0; @@ -377,7 +369,7 @@ var MessagesIndicator = new Lang.Class({ this.actor.visible = (count > 0); } -}); +}; var IndicatorPad = new Lang.Class({ Name: 'IndicatorPad', @@ -592,5 +584,5 @@ var DateMenuButton = new Lang.Class({ // but the corresponding app (clocks, weather); however we can consider // that display-specific settings, so re-use "allowSettings" here ... this._displaysSection.visible = Main.sessionMode.allowSettings; - } + }, }); diff --git a/js/ui/dnd.js b/js/ui/dnd.js index 665881363..4aca7c341 100644 --- a/js/ui/dnd.js +++ b/js/ui/dnd.js @@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; const St = imports.gi.St; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -74,10 +73,8 @@ function removeDragMonitor(monitor) { } } -var _Draggable = new Lang.Class({ - Name: 'Draggable', - - _init(actor, params) { +var _Draggable = class _Draggable { + constructor(actor, params) { params = Params.parse(params, { manualMode: false, restoreOnSuccess: false, dragActorMaxSize: undefined, @@ -112,7 +109,7 @@ var _Draggable = new Lang.Class({ this._dragCancellable = true; this._eventsGrabbed = false; - }, + } _onButtonPress(actor, event) { if (event.get_button() != 1) @@ -129,7 +126,7 @@ var _Draggable = new Lang.Class({ this._dragStartY = stageY; return Clutter.EVENT_PROPAGATE; - }, + } _onTouchEvent(actor, event) { if (event.type() != Clutter.EventType.TOUCH_BEGIN || @@ -149,7 +146,7 @@ var _Draggable = new Lang.Class({ this._dragStartY = stageY; return Clutter.EVENT_PROPAGATE; - }, + } _grabDevice(actor) { let manager = Clutter.DeviceManager.get_default(); @@ -161,7 +158,7 @@ var _Draggable = new Lang.Class({ pointer.grab (actor); this._grabbedDevice = pointer; - }, + } _ungrabDevice() { if (this._touchSequence) @@ -171,13 +168,13 @@ var _Draggable = new Lang.Class({ this._touchSequence = null; this._grabbedDevice = null; - }, + } _grabActor() { this._grabDevice(this.actor); this._onEventId = this.actor.connect('event', this._onEvent.bind(this)); - }, + } _ungrabActor() { if (!this._onEventId) @@ -186,7 +183,7 @@ var _Draggable = new Lang.Class({ this._ungrabDevice(); this.actor.disconnect(this._onEventId); this._onEventId = null; - }, + } _grabEvents() { if (!this._eventsGrabbed) { @@ -194,7 +191,7 @@ var _Draggable = new Lang.Class({ if (this._eventsGrabbed) this._grabDevice(_getEventHandlerActor()); } - }, + } _ungrabEvents() { if (this._eventsGrabbed) { @@ -202,7 +199,7 @@ var _Draggable = new Lang.Class({ Main.popModal(_getEventHandlerActor()); this._eventsGrabbed = false; } - }, + } _onEvent(actor, event) { // We intercept BUTTON_RELEASE event to know that the button was released in case we @@ -246,7 +243,7 @@ var _Draggable = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } /** * fakeRelease: @@ -259,7 +256,7 @@ var _Draggable = new Lang.Class({ fakeRelease() { this._buttonDown = false; this._ungrabActor(); - }, + } /** * startDrag: @@ -395,7 +392,7 @@ var _Draggable = new Lang.Class({ onUpdateScope: this }); } } - }, + } _maybeStartDrag(event) { let [stageX, stageY] = event.get_coords(); @@ -409,12 +406,12 @@ var _Draggable = new Lang.Class({ } return true; - }, + } _pickTargetActor() { return this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL, this._dragX, this._dragY); - }, + } _updateDragHover() { this._updateHoverId = 0; @@ -471,7 +468,7 @@ var _Draggable = new Lang.Class({ } global.display.set_cursor(Meta.Cursor.DND_IN_DRAG); return GLib.SOURCE_REMOVE; - }, + } _queueUpdateDragHover() { if (this._updateHoverId) @@ -480,7 +477,7 @@ var _Draggable = new Lang.Class({ this._updateHoverId = GLib.idle_add(GLib.PRIORITY_DEFAULT, this._updateDragHover.bind(this)); GLib.Source.set_name_by_id(this._updateHoverId, '[gnome-shell] this._updateDragHover'); - }, + } _updateDragPosition(event) { let [stageX, stageY] = event.get_coords(); @@ -491,7 +488,7 @@ var _Draggable = new Lang.Class({ this._queueUpdateDragHover(); return true; - }, + } _dragActorDropped(event) { let [dropX, dropY] = event.get_coords(); @@ -554,7 +551,7 @@ var _Draggable = new Lang.Class({ this._cancelDrag(event.get_time()); return true; - }, + } _getRestoreLocation() { let x, y, scale; @@ -586,7 +583,7 @@ var _Draggable = new Lang.Class({ } return [x, y, scale]; - }, + } _cancelDrag(eventTime) { this.emit('drag-cancelled', eventTime); @@ -613,7 +610,7 @@ var _Draggable = new Lang.Class({ scale_y: snapBackScale, time: SNAP_BACK_ANIMATION_TIME, }); - }, + } _restoreDragActor(eventTime) { this._dragState = DragState.INIT; @@ -626,7 +623,7 @@ var _Draggable = new Lang.Class({ this._animateDragEnd(eventTime, { time: REVERT_ANIMATION_TIME }); - }, + } _animateDragEnd(eventTime, params) { this._animationInProgress = true; @@ -639,7 +636,7 @@ var _Draggable = new Lang.Class({ // start the animation Tweener.addTween(this._dragActor, params) - }, + } _finishAnimation() { if (!this._animationInProgress) @@ -650,7 +647,7 @@ var _Draggable = new Lang.Class({ this._dragComplete(); global.display.set_cursor(Meta.Cursor.DEFAULT); - }, + } _onAnimationComplete(dragActor, eventTime) { if (this._dragOrigParent) { @@ -664,7 +661,7 @@ var _Draggable = new Lang.Class({ this.emit('drag-end', eventTime, false); this._finishAnimation(); - }, + } _dragComplete() { if (!this._actorDestroyed && this._dragActor) @@ -686,8 +683,7 @@ var _Draggable = new Lang.Class({ this._dragState = DragState.INIT; currentDraggable = null; } -}); - +}; Signals.addSignalMethods(_Draggable.prototype); /** diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js index 4804333d4..7c3a02256 100644 --- a/js/ui/endSessionDialog.js +++ b/js/ui/endSessionDialog.js @@ -16,7 +16,6 @@ * along with this program; if not, see . */ -const Lang = imports.lang; const Mainloop = imports.mainloop; const AccountsService = imports.gi.AccountsService; @@ -235,13 +234,10 @@ function init() { _endSessionDialog = new EndSessionDialog(); } -var EndSessionDialog = new Lang.Class({ - Name: 'EndSessionDialog', - Extends: ModalDialog.ModalDialog, - - _init() { - this.parent({ styleClass: 'end-session-dialog', - destroyOnClose: false }); +var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog { + constructor() { + super({ styleClass: 'end-session-dialog', + destroyOnClose: false }); this._loginManager = LoginManager.getLoginManager(); this._userManager = AccountsService.UserManager.get_default(); @@ -356,12 +352,12 @@ var EndSessionDialog = new Lang.Class({ this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog'); - }, + } _onDestroy() { this._user.disconnect(this._userLoadedId); this._user.disconnect(this._userChangedId); - }, + } _sync() { let open = (this.state == ModalDialog.State.OPENING || this.state == ModalDialog.State.OPENED); @@ -434,7 +430,7 @@ var EndSessionDialog = new Lang.Class({ this._scrollView.visible = hasApplications || hasSessions; this._applicationHeader.visible = hasApplications; this._sessionHeader.visible = hasSessions; - }, + } _updateButtons() { let dialogContent = DialogContent[this._type]; @@ -456,20 +452,20 @@ var EndSessionDialog = new Lang.Class({ } this.setButtons(buttons); - }, + } close(skipSignal) { - this.parent(); + super.close(); if (!skipSignal) this._dbusImpl.emit_signal('Closed', null); - }, + } cancel() { this._stopTimer(); this._dbusImpl.emit_signal('Canceled', null); this.close(); - }, + } _confirm(signal) { let callback = () => { @@ -504,11 +500,11 @@ var EndSessionDialog = new Lang.Class({ } else { this._triggerOfflineUpdateCancel(callback); } - }, + } _onOpened() { this._sync(); - }, + } _triggerOfflineUpdateReboot(callback) { this._pkOfflineProxy.TriggerRemote('reboot', (result, error) => { @@ -517,7 +513,7 @@ var EndSessionDialog = new Lang.Class({ callback(); }); - }, + } _triggerOfflineUpdateShutdown(callback) { this._pkOfflineProxy.TriggerRemote('power-off', (result, error) => { @@ -526,7 +522,7 @@ var EndSessionDialog = new Lang.Class({ callback(); }); - }, + } _triggerOfflineUpdateCancel(callback) { this._pkOfflineProxy.CancelRemote((result, error) => { @@ -535,7 +531,7 @@ var EndSessionDialog = new Lang.Class({ callback(); }); - }, + } _startTimer() { let startTime = GLib.get_monotonic_time(); @@ -559,7 +555,7 @@ var EndSessionDialog = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(this._timerId, '[gnome-shell] this._confirm'); - }, + } _stopTimer() { if (this._timerId > 0) { @@ -568,7 +564,7 @@ var EndSessionDialog = new Lang.Class({ } this._secondsLeft = 0; - }, + } _constructListItemForApp(inhibitor, app) { let actor = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item', @@ -593,7 +589,7 @@ var EndSessionDialog = new Lang.Class({ } return actor; - }, + } _onInhibitorLoaded(inhibitor) { if (this._applications.indexOf(inhibitor) < 0) { @@ -612,7 +608,7 @@ var EndSessionDialog = new Lang.Class({ } this._sync(); - }, + } _constructListItemForSession(session) { let avatar = new UserWidget.Avatar(session.user, { iconSize: _ITEM_ICON_SIZE }); @@ -642,7 +638,7 @@ var EndSessionDialog = new Lang.Class({ actor.label_actor = nameLabel; return actor; - }, + } _loadSessions() { this._loginManager.listSessions(result => { @@ -684,7 +680,7 @@ var EndSessionDialog = new Lang.Class({ this._sync(); }); - }, + } OpenAsync(parameters, invocation) { let [type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths] = parameters; @@ -754,9 +750,9 @@ var EndSessionDialog = new Lang.Class({ invocation.return_value(null); this.disconnect(signalId); }); - }, + } Close(parameters, invocation) { this.close(); } -}); +}; diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js index 9b6f7a3a4..828f6f789 100644 --- a/js/ui/extensionDownloader.js +++ b/js/ui/extensionDownloader.js @@ -1,7 +1,5 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; - const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; @@ -183,12 +181,10 @@ function checkForUpdates() { }); } -var InstallExtensionDialog = new Lang.Class({ - Name: 'InstallExtensionDialog', - Extends: ModalDialog.ModalDialog, - - _init(uuid, info, invocation) { - this.parent({ styleClass: 'extension-dialog' }); +var InstallExtensionDialog = +class InstallExtensionDialog extends ModalDialog.ModalDialog { + constructor(uuid, info, invocation) { + super({ styleClass: 'extension-dialog' }); this._uuid = uuid; this._info = info; @@ -216,12 +212,12 @@ var InstallExtensionDialog = new Lang.Class({ let label = new St.Label({ style_class: 'message-dialog-title headline', text: message }); box.add(label); - }, + } _onCancelButtonPressed(button, event) { this.close(); this._invocation.return_value(GLib.Variant.new('(s)', ['cancelled'])); - }, + } _onInstallButtonPressed(button, event) { let params = { shell_version: Config.PACKAGE_VERSION }; @@ -264,7 +260,7 @@ var InstallExtensionDialog = new Lang.Class({ this.close(); } -}); +}; function init() { _httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true }); diff --git a/js/ui/focusCaretTracker.js b/js/ui/focusCaretTracker.js index 6695cbadf..473ae3e6e 100644 --- a/js/ui/focusCaretTracker.js +++ b/js/ui/focusCaretTracker.js @@ -22,29 +22,26 @@ */ const Atspi = imports.gi.Atspi; -const Lang = imports.lang; const Signals = imports.signals; const CARETMOVED = 'object:text-caret-moved'; const STATECHANGED = 'object:state-changed'; -var FocusCaretTracker = new Lang.Class({ - Name: 'FocusCaretTracker', - - _init() { +var FocusCaretTracker = class FocusCaretTracker { + constructor() { this._atspiListener = Atspi.EventListener.new(this._onChanged.bind(this)); this._atspiInited = false; this._focusListenerRegistered = false; this._caretListenerRegistered = false; - }, + } _onChanged(event) { if (event.type.indexOf(STATECHANGED) == 0) this.emit('focus-changed', event); else if (event.type == CARETMOVED) this.emit('caret-moved', event); - }, + } _initAtspi() { if (!this._atspiInited && Atspi.init() == 0) { @@ -53,7 +50,7 @@ var FocusCaretTracker = new Lang.Class({ } return this._atspiInited; - }, + } registerFocusListener() { if (!this._initAtspi() || this._focusListenerRegistered) @@ -62,7 +59,7 @@ var FocusCaretTracker = new Lang.Class({ this._atspiListener.register(STATECHANGED + ':focused'); this._atspiListener.register(STATECHANGED + ':selected'); this._focusListenerRegistered = true; - }, + } registerCaretListener() { if (!this._initAtspi() || this._caretListenerRegistered) @@ -70,7 +67,7 @@ var FocusCaretTracker = new Lang.Class({ this._atspiListener.register(CARETMOVED); this._caretListenerRegistered = true; - }, + } deregisterFocusListener() { if (!this._focusListenerRegistered) @@ -79,7 +76,7 @@ var FocusCaretTracker = new Lang.Class({ this._atspiListener.deregister(STATECHANGED + ':focused'); this._atspiListener.deregister(STATECHANGED + ':selected'); this._focusListenerRegistered = false; - }, + } deregisterCaretListener() { if (!this._caretListenerRegistered) @@ -88,5 +85,5 @@ var FocusCaretTracker = new Lang.Class({ this._atspiListener.deregister(CARETMOVED); this._caretListenerRegistered = false; } -}); +}; Signals.addSignalMethods(FocusCaretTracker.prototype); diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js index 38e116fd9..9f6f188bd 100644 --- a/js/ui/grabHelper.js +++ b/js/ui/grabHelper.js @@ -2,7 +2,6 @@ const Clutter = imports.gi.Clutter; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -46,10 +45,8 @@ 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({ - Name: 'GrabHelper', - - _init(owner, params) { +var GrabHelper = class GrabHelper { + constructor(owner, params) { this._owner = owner; this._modalParams = params; @@ -59,7 +56,7 @@ var GrabHelper = new Lang.Class({ this._ignoreUntilRelease = false; this._modalCount = 0; - }, + } // addActor: // @actor: an actor @@ -71,7 +68,7 @@ var GrabHelper = new Lang.Class({ this.removeActor(actor); }); this._actors.push(actor); - }, + } // removeActor: // @actor: an actor @@ -86,7 +83,7 @@ var GrabHelper = new Lang.Class({ actor.disconnect(actor.__grabHelperDestroyId); delete actor.__grabHelperDestroyId; } - }, + } _isWithinGrabbedActor(actor) { let currentActor = this.currentGrab.actor; @@ -98,19 +95,19 @@ var GrabHelper = new Lang.Class({ actor = actor.get_parent(); } return false; - }, + } get currentGrab() { return this._grabStack[this._grabStack.length - 1] || {}; - }, + } get grabbed() { return this._grabStack.length > 0; - }, + } get grabStack() { return this._grabStack; - }, + } _findStackIndex(actor) { if (!actor) @@ -121,7 +118,7 @@ var GrabHelper = new Lang.Class({ return i; } return -1; - }, + } _actorInGrabStack(actor) { while (actor) { @@ -131,11 +128,11 @@ var GrabHelper = new Lang.Class({ actor = actor.get_parent(); } return -1; - }, + } isActorGrabbed(actor) { return this._findStackIndex(actor) >= 0; - }, + } // grab: // @params: A bunch of parameters, see below @@ -195,7 +192,7 @@ var GrabHelper = new Lang.Class({ } return true; - }, + } _takeModalGrab() { let firstGrab = (this._modalCount == 0); @@ -208,7 +205,7 @@ var GrabHelper = new Lang.Class({ this._modalCount++; return true; - }, + } _releaseModalGrab() { this._modalCount--; @@ -221,7 +218,7 @@ var GrabHelper = new Lang.Class({ Main.popModal(this._owner); global.sync_pointer(); - }, + } // ignoreRelease: // @@ -231,7 +228,7 @@ var GrabHelper = new Lang.Class({ // the next release event. ignoreRelease() { this._ignoreUntilRelease = true; - }, + } // ungrab: // @params: The parameters for the grab; see below. @@ -274,7 +271,7 @@ var GrabHelper = new Lang.Class({ if (poppedGrab.savedFocus) poppedGrab.savedFocus.grab_key_focus(); } - }, + } onCapturedEvent(event) { let type = event.type(); @@ -322,5 +319,5 @@ var GrabHelper = new Lang.Class({ } return Clutter.EVENT_STOP; - }, -}); + } +}; diff --git a/js/ui/ibusCandidatePopup.js b/js/ui/ibusCandidatePopup.js index 085aaaa25..124426887 100644 --- a/js/ui/ibusCandidatePopup.js +++ b/js/ui/ibusCandidatePopup.js @@ -2,7 +2,6 @@ const Clutter = imports.gi.Clutter; const IBus = imports.gi.IBus; -const Lang = imports.lang; const Signals = imports.signals; const St = imports.gi.St; @@ -14,10 +13,8 @@ var 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' ]; -var CandidateArea = new Lang.Class({ - Name: 'CandidateArea', - - _init() { +var CandidateArea = class CandidateArea { + constructor() { this.actor = new St.BoxLayout({ vertical: true, reactive: true, visible: false }); @@ -74,7 +71,7 @@ var CandidateArea = new Lang.Class({ this._orientation = -1; this._cursorPosition = 0; - }, + } setOrientation(orientation) { if (this._orientation == orientation) @@ -95,7 +92,7 @@ var CandidateArea = new Lang.Class({ this._previousButton.child.icon_name = 'go-up-symbolic'; this._nextButton.child.icon_name = 'go-down-symbolic'; } - }, + } setCandidates(indexes, candidates, cursorPosition, cursorVisible) { for (let i = 0; i < MAX_CANDIDATES_PER_PAGE; ++i) { @@ -114,7 +111,7 @@ var CandidateArea = new Lang.Class({ this._cursorPosition = cursorPosition; if (cursorVisible) this._candidateBoxes[cursorPosition].add_style_pseudo_class('selected'); - }, + } updateButtons(wrapsAround, page, nPages) { if (nPages < 2) { @@ -124,14 +121,12 @@ var CandidateArea = new Lang.Class({ this._buttonBox.show(); this._previousButton.reactive = wrapsAround || page > 0; this._nextButton.reactive = wrapsAround || page < nPages - 1; - }, -}); + } +}; Signals.addSignalMethods(CandidateArea.prototype); -var CandidatePopup = new Lang.Class({ - Name: 'CandidatePopup', - - _init() { +var CandidatePopup = class CandidatePopup { + constructor() { this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP); this._boxPointer.visible = false; this._boxPointer.style_class = 'candidate-popup-boxpointer'; @@ -171,7 +166,7 @@ var CandidatePopup = new Lang.Class({ }); this._panelService = null; - }, + } setPanelService(panelService) { this._panelService = panelService; @@ -275,13 +270,13 @@ var CandidatePopup = new Lang.Class({ this._boxPointer.close(BoxPointer.PopupAnimation.NONE); Main.keyboard.resetSuggestions(); }); - }, + } _setDummyCursorGeometry(x, y, w, h) { Main.layoutManager.setDummyCursorGeometry(x, y, w, h); if (this._boxPointer.actor.visible) this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); - }, + } _updateVisibility() { let isVisible = (!Main.keyboard.visible && @@ -296,7 +291,7 @@ var CandidatePopup = new Lang.Class({ } else { this._boxPointer.close(BoxPointer.PopupAnimation.NONE); } - }, + } _setTextAttributes(clutterText, ibusAttrList) { let attr; @@ -304,4 +299,4 @@ var CandidatePopup = new Lang.Class({ if (attr.get_attr_type() == IBus.AttrType.BACKGROUND) clutterText.set_selection(attr.get_start_index(), attr.get_end_index()); } -}); +}; diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index fac42671d..518379cbe 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -6,6 +6,7 @@ const Gdk = imports.gi.Gdk; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Lang = imports.lang; +const GObject = imports.gi.GObject; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -155,33 +156,28 @@ var KeyContainer = new Lang.Class({ } }); -var Suggestions = new Lang.Class({ - Name: 'Suggestions', - - _init() { +var Suggestions = class { + constructor() { this.actor = new St.BoxLayout({ style_class: 'word-suggestions', vertical: false }); this.actor.show(); - }, + } add(word, callback) { let button = new St.Button({ label: word }); button.connect('clicked', callback); this.actor.add(button); - }, + } clear() { this.actor.remove_all_children(); - }, -}); + } +}; Signals.addSignalMethods(Suggestions.prototype); -var LanguageSelectionPopup = new Lang.Class({ - Name: 'LanguageSelectionPopup', - Extends: PopupMenu.PopupMenu, - - _init(actor) { - this.parent(actor, 0.5, St.Side.BOTTOM); +var LanguageSelectionPopup = class extends PopupMenu.PopupMenu { + constructor(actor) { + super(actor, 0.5, St.Side.BOTTOM); let inputSourceManager = InputSourceManager.getInputSourceManager(); let inputSources = inputSourceManager.inputSources; @@ -202,7 +198,7 @@ var LanguageSelectionPopup = new Lang.Class({ if (!actor.is_mapped()) this.close(true); }); - }, + } _onCapturedEvent(actor, event) { if (event.get_source() == this.actor || @@ -213,35 +209,33 @@ var LanguageSelectionPopup = new Lang.Class({ this.close(true); return Clutter.EVENT_STOP; - }, + } open(animate) { - this.parent(animate); + super.open(animate); this._capturedEventId = global.stage.connect('captured-event', this._onCapturedEvent.bind(this)); - }, + } close(animate) { - this.parent(animate); + super.close(animate); if (this._capturedEventId != 0) { global.stage.disconnect(this._capturedEventId); this._capturedEventId = 0; } - }, + } destroy() { if (this._capturedEventId != 0) global.stage.disconnect(this._capturedEventId); if (this._unmapId != 0) this.sourceActor.disconnect(this._unmapId); - this.parent(); - }, -}); + super.destroy(); + } +}; -var Key = new Lang.Class({ - Name: 'Key', - - _init(key, extendedKeys) { +var Key = class Key { + constructor(key) { this.key = key || ""; this.keyButton = this._makeKey(this.key); @@ -260,14 +254,14 @@ var Key = new Lang.Class({ this._capturedEventId = 0; this._unmapId = 0; this._longPress = false; - }, + } _onDestroy() { if (this._boxPointer) { this._boxPointer.destroy(); this._boxPointer = null; } - }, + } _ensureExtendedKeysPopup() { if (this._extended_keys.length == 0) @@ -285,12 +279,12 @@ var Key = new Lang.Class({ this._boxPointer.actor.add_style_class_name('keyboard-subkeys'); this._getExtendedKeys(); this.keyButton._extended_keys = this._extended_keyboard; - }, + } _getKeyval(key) { let unicode = String.charCodeAt(key, 0); return Gdk.unicode_to_keyval(unicode); - }, + } _press(key) { if (key != this.key || this._extended_keys.length == 0) { @@ -317,7 +311,7 @@ var Key = new Lang.Class({ return GLib.SOURCE_REMOVE; }); } - }, + } _release(key) { if (this._pressTimeoutId != 0) { @@ -331,7 +325,7 @@ var Key = new Lang.Class({ this.emit('released', this._getKeyval(key), key); this._hideSubkeys(); this._longPress = false; - }, + } _onCapturedEvent(actor, event) { let type = event.type(); @@ -348,7 +342,7 @@ var Key = new Lang.Class({ this._hideSubkeys(); return Clutter.EVENT_STOP; - }, + } _showSubkeys() { this._boxPointer.open(BoxPointer.PopupAnimation.FULL); @@ -358,7 +352,7 @@ var Key = new Lang.Class({ if (!this.keyButton.is_mapped()) this._hideSubkeys(); }); - }, + } _hideSubkeys() { if (this._boxPointer) @@ -372,7 +366,7 @@ var Key = new Lang.Class({ this._unmapId = 0; } this._capturedPress = false; - }, + } _makeKey(key) { let label = GLib.markup_escape_text(key, -1); @@ -418,7 +412,7 @@ var Key = new Lang.Class({ }); return button; - }, + } _getExtendedKeys() { this._extended_keyboard = new St.BoxLayout({ style_class: 'key-container', @@ -434,35 +428,33 @@ var Key = new Lang.Class({ key.height = this.keyButton.height; } this._boxPointer.bin.add_actor(this._extended_keyboard); - }, + } get subkeys() { return this._boxPointer; - }, + } setWidth(width) { this.keyButton.keyWidth = width; - }, + } setLatched(latched) { if (latched) this.keyButton.add_style_pseudo_class('latched'); else this.keyButton.remove_style_pseudo_class('latched'); - }, -}); + } +}; Signals.addSignalMethods(Key.prototype); -var KeyboardModel = new Lang.Class({ - Name: 'KeyboardModel', - - _init(groupName) { +var KeyboardModel = class { + constructor(groupName) { try { this._model = this._loadModel(groupName); } catch (e) { this._model = this._loadModel('us'); } - }, + } _loadModel(groupName) { let file = Gio.File.new_for_uri('resource:///org/gnome/shell/osk-layouts/%s.json'.format(groupName)); @@ -471,21 +463,19 @@ var KeyboardModel = new Lang.Class({ contents = imports.byteArray.toString(contents); return JSON.parse(contents); - }, + } getLevels() { return this._model.levels; - }, + } getKeysForLevel(levelName) { return this._model.levels.find(level => level == levelName); } -}); +}; -var FocusTracker = new Lang.Class({ - Name: 'FocusTracker', - - _init() { +var FocusTracker = class { + constructor() { this._currentWindow = null; this._rect = null; @@ -520,15 +510,15 @@ var FocusTracker = new Lang.Class({ this._ibusManager.connect('focus-out', () => { this.emit('focus-changed', false); }); - }, + } get currentWindow() { return this._currentWindow; - }, + } _setCurrentWindow(window) { this._currentWindow = window; - }, + } _setCurrentRect(rect) { if (this._currentWindow) { @@ -546,7 +536,7 @@ var FocusTracker = new Lang.Class({ this._rect = rect; this.emit('position-changed'); - }, + } getCurrentRect() { let rect = { x: this._rect.x, y: this._rect.y, @@ -560,13 +550,11 @@ var FocusTracker = new Lang.Class({ return rect; } -}); +}; Signals.addSignalMethods(FocusTracker.prototype); -var Keyboard = new Lang.Class({ - Name: 'Keyboard', - - _init() { +var Keyboard = class Keyboard { + constructor() { this.actor = null; this._focusInExtendedKeys = false; @@ -624,16 +612,16 @@ var Keyboard = new Lang.Class({ this._keyboardRestingId = 0; Main.layoutManager.connect('monitors-changed', this._relayout.bind(this)); - }, + } get visible() { return this._keyboardVisible; - }, + } _onFocusPositionChanged(focusTracker) { let rect = focusTracker.getCurrentRect(); this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height); - }, + } _lastDeviceIsTouchscreen() { if (!this._lastDeviceId) @@ -646,7 +634,7 @@ var Keyboard = new Lang.Class({ return false; return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE; - }, + } _syncEnabled() { let wasEnabled = this._enabled; @@ -662,7 +650,7 @@ var Keyboard = new Lang.Class({ if (!this._enabled && wasEnabled) Main.layoutManager.hideKeyboard(true); - }, + } _destroyKeyboard() { if (this._keyboardNotifyId) @@ -681,7 +669,7 @@ var Keyboard = new Lang.Class({ this._languagePopup.destroy(); this._languagePopup = null; } - }, + } _setupKeyboard() { this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true }); @@ -715,7 +703,7 @@ var Keyboard = new Lang.Class({ this._focusNotifyId = global.stage.connect('notify::key-focus', this._onKeyFocusChanged.bind(this)); this._relayout(); - }, + } _onKeyFocusChanged() { let focus = global.stage.key_focus; @@ -739,7 +727,7 @@ var Keyboard = new Lang.Class({ }); GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show'); } - }, + } _createLayersForGroup(groupName) { let keyboardModel = new KeyboardModel(groupName); @@ -764,12 +752,12 @@ var Keyboard = new Lang.Class({ layout.hide(); } return layers; - }, + } _ensureKeysForGroup(group) { if (!this._groups[group]) this._groups[group] = this._createLayersForGroup(group); - }, + } _addRowKeys(keys, layout) { for (let i = 0; i < keys.length; ++i) { @@ -802,7 +790,7 @@ var Keyboard = new Lang.Class({ layout.appendKey(button.actor, button.keyButton.keyWidth); } - }, + } _popupLanguageMenu(keyActor) { if (this._languagePopup) @@ -811,7 +799,7 @@ var Keyboard = new Lang.Class({ this._languagePopup = new LanguageSelectionPopup(keyActor); Main.layoutManager.addChrome(this._languagePopup.actor); this._languagePopup.open(true); - }, + } _loadDefaultKeys(keys, layout, numLevels, numKeys) { let extraButton; @@ -876,14 +864,14 @@ var Keyboard = new Lang.Class({ layout.appendKey(extraButton.actor, extraButton.keyButton.keyWidth); } - }, + } _setCurrentLevelLatched(layout, latched) { for (let i = 0; layout.shiftKeys[i]; i++) { let key = layout.shiftKeys[i]; key.setLatched(latched); } - }, + } _getDefaultKeysForRow(row, numRows, level) { let pre, post; @@ -901,7 +889,7 @@ var Keyboard = new Lang.Class({ } else { return [null, null]; } - }, + } _mergeRowKeys(layout, pre, row, post, numLevels) { if (pre != null) @@ -911,7 +899,7 @@ var Keyboard = new Lang.Class({ if (post != null) this._loadDefaultKeys(post, layout, numLevels, row.length); - }, + } _loadRows(model, level, numLevels, layout) { let rows = model.rows; @@ -920,7 +908,7 @@ var Keyboard = new Lang.Class({ let [pre, post] = this._getDefaultKeysForRow(i, rows.length, level); this._mergeRowKeys (layout, pre, rows[i], post, numLevels); } - }, + } _getGridSlots() { let numOfHorizSlots = 0, numOfVertSlots; @@ -935,7 +923,7 @@ var Keyboard = new Lang.Class({ } return [numOfHorizSlots, numOfVertSlots]; - }, + } _relayout() { let monitor = Main.layoutManager.keyboardMonitor; @@ -946,17 +934,17 @@ var Keyboard = new Lang.Class({ let maxHeight = monitor.height / 3; this.actor.width = monitor.width; this.actor.height = maxHeight; - }, + } _onGroupChanged() { this._ensureKeysForGroup(this._keyboardController.getCurrentGroup()); this._setActiveLayer(0); - }, + } _onKeyboardGroupsChanged(keyboard) { this._groups = []; this._onGroupChanged(); - }, + } _onKeyboardStateChanged(controller, state) { let enabled; @@ -973,7 +961,7 @@ var Keyboard = new Lang.Class({ this.show(Main.layoutManager.focusIndex); else this.hide(); - }, + } _setActiveLayer(activeLevel) { let activeGroupName = this._keyboardController.getCurrentGroup(); @@ -986,20 +974,20 @@ var Keyboard = new Lang.Class({ this._current_page = layers[activeLevel]; this._current_page.show(); - }, + } shouldTakeEvent(event) { let actor = event.get_source(); return Main.layoutManager.keyboardBox.contains(actor) || !!actor._extended_keys || !!actor.extended_key; - }, + } _clearKeyboardRestTimer() { if (!this._keyboardRestingId) return; GLib.source_remove(this._keyboardRestingId); this._keyboardRestingId = 0; - }, + } show(monitor) { if (!this._enabled) @@ -1025,7 +1013,7 @@ var Keyboard = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(this._keyboardRestingId, '[gnome-shell] this._clearKeyboardRestTimer'); - }, + } _show(monitor) { if (!this._keyboardRequested) @@ -1039,7 +1027,7 @@ var Keyboard = new Lang.Class({ this._setAnimationWindow(this._delayedAnimFocusWindow); this._delayedAnimFocusWindow = null; } - }, + } hide() { if (!this._enabled) @@ -1060,7 +1048,7 @@ var Keyboard = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(this._keyboardRestingId, '[gnome-shell] this._clearKeyboardRestTimer'); - }, + } _hide() { if (this._keyboardRequested) @@ -1068,7 +1056,7 @@ var Keyboard = new Lang.Class({ Main.layoutManager.hideKeyboard(); this.setCursorLocation(null); - }, + } _hideSubkeys() { if (this._subkeysBoxPointer) { @@ -1080,26 +1068,26 @@ var Keyboard = new Lang.Class({ this._capturedEventId = 0; } this._capturedPress = false; - }, + } resetSuggestions() { if (this._suggestions) this._suggestions.clear(); - }, + } addSuggestion(text, callback) { if (!this._suggestions) return; this._suggestions.add(text, callback); this._suggestions.actor.show(); - }, + } _clearShowIdle() { if (!this._showIdleId) return; GLib.source_remove(this._showIdleId); this._showIdleId = 0; - }, + } _windowSlideAnimationComplete(window, delta) { // Synchronize window and actor positions again. @@ -1107,7 +1095,7 @@ var Keyboard = new Lang.Class({ let frameRect = window.get_frame_rect(); frameRect.y += delta; window.move_frame(true, frameRect.x, frameRect.y); - }, + } _animateWindow(window, show) { let windowActor = window.get_compositor_private(); @@ -1130,7 +1118,7 @@ var Keyboard = new Lang.Class({ onComplete: this._windowSlideAnimationComplete, onCompleteParams: [window, deltaY] }); } - }, + } _setAnimationWindow(window) { if (this._animFocusedWindow == window) @@ -1142,7 +1130,7 @@ var Keyboard = new Lang.Class({ this._animateWindow(window, true); this._animFocusedWindow = window; - }, + } setCursorLocation(window, x, y , w, h) { let monitor = Main.layoutManager.keyboardMonitor; @@ -1165,14 +1153,11 @@ var Keyboard = new Lang.Class({ } this._oskFocusWindow = window; - }, -}); + } +}; -var KeyboardController = new Lang.Class({ - Name: 'KeyboardController', - - _init() { - this.parent(); +var KeyboardController = class { + constructor() { let deviceManager = Clutter.DeviceManager.get_default(); this._virtualDevice = deviceManager.create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); @@ -1190,24 +1175,24 @@ var KeyboardController = new Lang.Class({ Main.inputMethod.connect('input-panel-state', (o, state) => { this.emit('panel-state', state); }); - }, + } _onSourcesModified() { this.emit('groups-changed'); - }, + } _onSourceChanged(inputSourceManager, oldSource) { let source = inputSourceManager.currentSource; this._currentSource = source; this.emit('active-group', source.id); - }, + } _onContentPurposeHintsChanged(method) { let hints = method.content_hints; let purpose = method.content_purpose; // XXX: hook numeric/emoji/etc special keyboards - }, + } getGroups() { let inputSources = this._inputSourceManager.inputSources; @@ -1219,11 +1204,11 @@ var KeyboardController = new Lang.Class({ } return groups; - }, + } getCurrentGroup() { return this._currentSource.xkbId; - }, + } commitString(string, fromKey) { if (string == null) @@ -1234,16 +1219,16 @@ var KeyboardController = new Lang.Class({ Main.inputMethod.commit(string); return true; - }, + } keyvalPress(keyval) { this._virtualDevice.notify_keyval(Clutter.get_current_event_time(), keyval, Clutter.KeyState.PRESSED); - }, + } keyvalRelease(keyval) { this._virtualDevice.notify_keyval(Clutter.get_current_event_time(), keyval, Clutter.KeyState.RELEASED); - }, -}); + } +}; Signals.addSignalMethods(KeyboardController.prototype); diff --git a/js/ui/layout.js b/js/ui/layout.js index 1e223934c..22b2807a9 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -153,21 +153,19 @@ var MonitorConstraint = new Lang.Class({ } }); -var Monitor = new Lang.Class({ - Name: 'Monitor', - - _init(index, geometry) { +var Monitor = class Monitor { + constructor(index, geometry) { this.index = index; this.x = geometry.x; this.y = geometry.y; this.width = geometry.width; this.height = geometry.height; - }, + } get inFullscreen() { return global.display.get_monitor_in_fullscreen(this.index); } -}) +}; const defaultParams = { trackFullscreen: false, @@ -1083,10 +1081,8 @@ var LayoutManager = new Lang.Class({ // // This class manages a "hot corner" that can toggle switching to // overview. -var HotCorner = new Lang.Class({ - Name: 'HotCorner', - - _init(layoutManager, monitor, x, y) { +var HotCorner = class HotCorner { + constructor(layoutManager, monitor, x, y) { // We use this flag to mark the case where the user has entered the // hot corner and has not left both the hot corner and a surrounding // guard area (the "environs"). This avoids triggering the hot corner @@ -1114,7 +1110,7 @@ var HotCorner = new Lang.Class({ layoutManager.uiGroup.add_actor(this._ripple1); layoutManager.uiGroup.add_actor(this._ripple2); layoutManager.uiGroup.add_actor(this._ripple3); - }, + } setBarrierSize(size) { if (this._verticalBarrier) { @@ -1149,7 +1145,7 @@ var HotCorner = new Lang.Class({ this._pressureBarrier.addBarrier(this._verticalBarrier); this._pressureBarrier.addBarrier(this._horizontalBarrier); } - }, + } _setupFallbackCornerIfNeeded(layoutManager) { if (!global.display.supports_extended_barriers()) { @@ -1184,7 +1180,7 @@ var HotCorner = new Lang.Class({ this._corner.connect('leave-event', this._onCornerLeft.bind(this)); } - }, + } destroy() { this.setBarrierSize(0); @@ -1193,7 +1189,7 @@ var HotCorner = new Lang.Class({ if (this.actor) this.actor.destroy(); - }, + } _animRipple(ripple, delay, time, startScale, startOpacity, finalScale) { // We draw a ripple by using a source image and animating it scaling @@ -1223,7 +1219,7 @@ var HotCorner = new Lang.Class({ transition: 'linear', onUpdate() { ripple.opacity = 255 * Math.sqrt(ripple._opacity); }, onComplete() { ripple.visible = false; } }); - }, + } _rippleAnimation() { // Show three concentric ripples expanding outwards; the exact @@ -1234,7 +1230,7 @@ var HotCorner = new Lang.Class({ this._animRipple(this._ripple1, 0.0, 0.83, 0.25, 1.0, 1.5); this._animRipple(this._ripple2, 0.05, 1.0, 0.0, 0.7, 1.25); this._animRipple(this._ripple3, 0.35, 1.0, 0.0, 0.3, 1); - }, + } _toggleOverview() { if (this._monitor.inFullscreen && !Main.overview.visible) @@ -1244,7 +1240,7 @@ var HotCorner = new Lang.Class({ this._rippleAnimation(); Main.overview.toggle(); } - }, + } handleDragOver(source, actor, x, y, time) { if (source != Main.xdndHandler) @@ -1253,7 +1249,7 @@ var HotCorner = new Lang.Class({ this._toggleOverview(); return DND.DragMotionResult.CONTINUE; - }, + } _onCornerEntered() { if (!this._entered) { @@ -1261,26 +1257,24 @@ var HotCorner = new Lang.Class({ this._toggleOverview(); } return Clutter.EVENT_PROPAGATE; - }, + } _onCornerLeft(actor, event) { if (event.get_related() != this.actor) this._entered = false; // Consume event, otherwise this will confuse onEnvironsLeft return Clutter.EVENT_STOP; - }, + } _onEnvironsLeft(actor, event) { if (event.get_related() != this._corner) this._entered = false; return Clutter.EVENT_PROPAGATE; } -}); +}; -var PressureBarrier = new Lang.Class({ - Name: 'PressureBarrier', - - _init(threshold, timeout, actionMode) { +var PressureBarrier = class PressureBarrier { + constructor(threshold, timeout, actionMode) { this._threshold = threshold; this._timeout = timeout; this._actionMode = actionMode; @@ -1289,57 +1283,57 @@ var PressureBarrier = new Lang.Class({ this._isTriggered = false; this._reset(); - }, + } addBarrier(barrier) { barrier._pressureHitId = barrier.connect('hit', this._onBarrierHit.bind(this)); barrier._pressureLeftId = barrier.connect('left', this._onBarrierLeft.bind(this)); this._barriers.push(barrier); - }, + } _disconnectBarrier(barrier) { barrier.disconnect(barrier._pressureHitId); barrier.disconnect(barrier._pressureLeftId); - }, + } removeBarrier(barrier) { this._disconnectBarrier(barrier); this._barriers.splice(this._barriers.indexOf(barrier), 1); - }, + } destroy() { this._barriers.forEach(this._disconnectBarrier.bind(this)); this._barriers = []; - }, + } setEventFilter(filter) { this._eventFilter = filter; - }, + } _reset() { this._barrierEvents = []; this._currentPressure = 0; this._lastTime = 0; - }, + } _isHorizontal(barrier) { return barrier.y1 == barrier.y2; - }, + } _getDistanceAcrossBarrier(barrier, event) { if (this._isHorizontal(barrier)) return Math.abs(event.dy); else return Math.abs(event.dx); - }, + } _getDistanceAlongBarrier(barrier, event) { if (this._isHorizontal(barrier)) return Math.abs(event.dx); else return Math.abs(event.dy); - }, + } _trimBarrierEvents() { // Events are guaranteed to be sorted in time order from @@ -1363,7 +1357,7 @@ var PressureBarrier = new Lang.Class({ } this._barrierEvents = this._barrierEvents.slice(firstNewEvent); - }, + } _onBarrierLeft(barrier, event) { barrier._isHit = false; @@ -1371,13 +1365,13 @@ var PressureBarrier = new Lang.Class({ this._reset(); this._isTriggered = false; } - }, + } _trigger() { this._isTriggered = true; this.emit('trigger'); this._reset(); - }, + } _onBarrierHit(barrier, event) { barrier._isHit = true; @@ -1419,5 +1413,5 @@ var PressureBarrier = new Lang.Class({ if (this._currentPressure >= this._threshold) this._trigger(); } -}); +}; Signals.addSignalMethods(PressureBarrier.prototype); diff --git a/js/ui/lightbox.js b/js/ui/lightbox.js index 76562492a..120aafd6f 100644 --- a/js/ui/lightbox.js +++ b/js/ui/lightbox.js @@ -91,10 +91,8 @@ 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({ - Name: 'Lightbox', - - _init(container, params) { +var Lightbox = class Lightbox { + constructor(container, params) { params = Params.parse(params, { inhibitEvents: false, width: null, height: null, @@ -137,7 +135,7 @@ var Lightbox = new Lang.Class({ this._actorRemovedSignalId = container.connect('actor-removed', this._actorRemoved.bind(this)); this._highlighted = null; - }, + } _actorAdded(container, newChild) { let children = this._container.get_children(); @@ -159,7 +157,7 @@ var Lightbox = new Lang.Class({ if (prevChild != -1) // paranoia this._children.splice(prevChild + 1, 0, newChild); } - }, + } show(fadeInTime) { fadeInTime = fadeInTime || 0; @@ -189,7 +187,7 @@ var Lightbox = new Lang.Class({ } this.actor.show(); - }, + } hide(fadeOutTime) { fadeOutTime = fadeOutTime || 0; @@ -217,7 +215,7 @@ var Lightbox = new Lang.Class({ } }); } - }, + } _actorRemoved(container, child) { let index = this._children.indexOf(child); @@ -226,7 +224,7 @@ var Lightbox = new Lang.Class({ if (child == this._highlighted) this._highlighted = null; - }, + } /** * highlight: @@ -257,7 +255,7 @@ var Lightbox = new Lang.Class({ } this._highlighted = window; - }, + } /** * destroy: @@ -266,7 +264,7 @@ var Lightbox = new Lang.Class({ */ destroy() { this.actor.destroy(); - }, + } /** * _onDestroy: @@ -280,5 +278,5 @@ var Lightbox = new Lang.Class({ this.highlight(null); } -}); +}; Signals.addSignalMethods(Lightbox.prototype); diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js index 186b53ce3..26e21c4ee 100644 --- a/js/ui/lookingGlass.js +++ b/js/ui/lookingGlass.js @@ -62,14 +62,12 @@ function _getAutoCompleteGlobalKeywords() { return keywords.concat(windowProperties).concat(headerProperties); } -var AutoComplete = new Lang.Class({ - Name: 'AutoComplete', - - _init(entry) { +var AutoComplete = class AutoComplete { + constructor(entry) { this._entry = entry; this._entry.connect('key-press-event', this._entryKeyPressEvent.bind(this)); this._lastTabTime = global.get_current_time(); - }, + } _processCompletionRequest(event) { if (event.completions.length == 0) { @@ -91,7 +89,7 @@ var AutoComplete = new Lang.Class({ } else if (event.completions.length > 1 && event.tabType === 'double') { this.emit('suggest', { completions: event.completions}); } - }, + } _entryKeyPressEvent(actor, event) { let cursorPos = this._entry.clutter_text.get_cursor_position(); @@ -114,7 +112,7 @@ var AutoComplete = new Lang.Class({ this._lastTabTime = currTime; } return Clutter.EVENT_PROPAGATE; - }, + } // Insert characters of text not already included in head at cursor position. i.e., if text="abc" and head="a", // the string "bc" will be appended to this._entry @@ -124,21 +122,19 @@ var AutoComplete = new Lang.Class({ this._entry.clutter_text.insert_text(additionalCompletionText, cursorPos); } -}); +}; Signals.addSignalMethods(AutoComplete.prototype); -var Notebook = new Lang.Class({ - Name: 'Notebook', - - _init() { +var Notebook = class Notebook { + constructor() { this.actor = new St.BoxLayout({ vertical: true }); this.tabControls = new St.BoxLayout({ style_class: 'labels' }); this._selectedIndex = -1; this._tabs = []; - }, + } appendPage(name, child) { let labelBox = new St.BoxLayout({ style_class: 'notebook-tab', @@ -171,7 +167,7 @@ var Notebook = new Lang.Class({ if (this._selectedIndex == -1) this.selectIndex(0); - }, + } _unselect() { if (this._selectedIndex < 0) @@ -180,7 +176,7 @@ var Notebook = new Lang.Class({ tabData.labelBox.remove_style_pseudo_class('selected'); tabData.scrollView.hide(); this._selectedIndex = -1; - }, + } selectIndex(index) { if (index == this._selectedIndex) @@ -202,7 +198,7 @@ var Notebook = new Lang.Class({ tabData.scrollView.show(); this._selectedIndex = index; this.emit('selection', tabData.child); - }, + } selectChild(child) { if (child == null) @@ -216,26 +212,26 @@ var Notebook = new Lang.Class({ } } } - }, + } scrollToBottom(index) { let tabData = this._tabs[index]; tabData._scrollToBottom = true; - }, + } _onAdjustValueChanged(tabData) { let vAdjust = tabData.scrollView.vscroll.adjustment; if (vAdjust.value < (vAdjust.upper - vAdjust.lower - 0.5)) tabData._scrolltoBottom = false; - }, + } _onAdjustScopeChanged(tabData) { if (!tabData._scrollToBottom) return; let vAdjust = tabData.scrollView.vscroll.adjustment; vAdjust.value = vAdjust.upper - vAdjust.page_size; - }, + } nextTab() { let nextIndex = this._selectedIndex; @@ -244,7 +240,7 @@ var Notebook = new Lang.Class({ } this.selectIndex(nextIndex); - }, + } prevTab() { let prevIndex = this._selectedIndex; @@ -254,7 +250,7 @@ var Notebook = new Lang.Class({ this.selectIndex(prevIndex); } -}); +}; Signals.addSignalMethods(Notebook.prototype); function objectToString(o) { @@ -266,10 +262,8 @@ function objectToString(o) { } } -var ObjLink = new Lang.Class({ - Name: 'ObjLink', - - _init(lookingGlass, o, title) { +var ObjLink = class ObjLink { + constructor(lookingGlass, o, title) { let text; if (title) text = title; @@ -286,17 +280,15 @@ var ObjLink = new Lang.Class({ this.actor.connect('clicked', this._onClicked.bind(this)); this._lookingGlass = lookingGlass; - }, + } _onClicked(link) { this._lookingGlass.inspectObject(this._obj, this.actor); } -}); +}; -var Result = new Lang.Class({ - Name: 'Result', - - _init(lookingGlass, command, o, index) { +var Result = class Result { + constructor(lookingGlass, command, o, index) { this.index = index; this.o = o; @@ -314,12 +306,10 @@ var Result = new Lang.Class({ let objLink = new ObjLink(this._lookingGlass, o); box.add(objLink.actor); } -}); +}; -var WindowList = new Lang.Class({ - Name: 'WindowList', - - _init(lookingGlass) { +var WindowList = class WindowList { + constructor(lookingGlass) { this.actor = new St.BoxLayout({ name: 'Windows', vertical: true, style: 'spacing: 8px' }); let tracker = Shell.WindowTracker.get_default(); this._updateId = Main.initializeDeferredWork(this.actor, this._updateWindowList.bind(this)); @@ -327,7 +317,7 @@ var WindowList = new Lang.Class({ tracker.connect('tracked-windows-changed', this._updateWindowList.bind(this)); this._lookingGlass = lookingGlass; - }, + } _updateWindowList() { this.actor.destroy_all_children(); @@ -361,13 +351,11 @@ var WindowList = new Lang.Class({ } } } -}); +}; Signals.addSignalMethods(WindowList.prototype); -var ObjInspector = new Lang.Class({ - Name: 'ObjInspector', - - _init(lookingGlass) { +var ObjInspector = class ObjInspector { + constructor(lookingGlass) { this._obj = null; this._previousObj = null; @@ -382,7 +370,7 @@ var ObjInspector = new Lang.Class({ this.actor.add_actor(this._container); this._lookingGlass = lookingGlass; - }, + } selectObject(obj, skipPrevious) { if (!skipPrevious) @@ -436,7 +424,7 @@ var ObjInspector = new Lang.Class({ this._container.add_actor(hbox); } } - }, + } open(sourceActor) { if (this._open) @@ -452,7 +440,7 @@ var ObjInspector = new Lang.Class({ } else { this.actor.set_scale(1, 1); } - }, + } close() { if (!this._open) @@ -461,18 +449,18 @@ var ObjInspector = new Lang.Class({ this.actor.hide(); this._previousObj = null; this._obj = null; - }, + } _onInsert() { let obj = this._obj; this.close(); this._lookingGlass.insertObject(obj); - }, + } _onBack() { this.selectObject(this._previousObj, true); } -}); +}; var RedBorderEffect = new Lang.Class({ Name: 'RedBorderEffect', @@ -637,10 +625,8 @@ var Inspector = new Lang.Class({ } }); -var Extensions = new Lang.Class({ - Name: 'Extensions', - - _init(lookingGlass) { +var Extensions = class Extensions { + constructor(lookingGlass) { this._lookingGlass = lookingGlass; this.actor = new St.BoxLayout({ vertical: true, name: 'lookingGlassExtensions' }); @@ -657,7 +643,7 @@ var Extensions = new Lang.Class({ ExtensionSystem.connect('extension-loaded', this._loadExtension.bind(this)); - }, + } _loadExtension(o, uuid) { let extension = ExtensionUtils.extensions[uuid]; @@ -672,20 +658,20 @@ var Extensions = new Lang.Class({ this._numExtensions ++; this._extensionsList.add(extensionDisplay); - }, + } _onViewSource(actor) { let extension = actor._extension; let uri = extension.dir.get_uri(); Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context(0, -1)); this._lookingGlass.close(); - }, + } _onWebPage(actor) { let extension = actor._extension; Gio.app_info_launch_default_for_uri(extension.metadata.url, global.create_app_launch_context(0, -1)); this._lookingGlass.close(); - }, + } _onViewErrors(actor) { let extension = actor._extension; @@ -713,7 +699,7 @@ var Extensions = new Lang.Class({ } actor._isShowing = shouldShow; - }, + } _stateToString(extensionState) { switch (extensionState) { @@ -730,7 +716,7 @@ var Extensions = new Lang.Class({ return _("Downloading"); } return 'Unknown'; // Not translated, shouldn't appear - }, + } _createExtensionDisplay(extension) { let box = new St.BoxLayout({ style_class: 'lg-extension', vertical: true }); @@ -778,12 +764,10 @@ var Extensions = new Lang.Class({ return box; } -}); +}; -var LookingGlass = new Lang.Class({ - Name: 'LookingGlass', - - _init() { +var LookingGlass = class LookingGlass { + constructor() { this._borderPaintTarget = null; this._redBorderEffect = new RedBorderEffect(); @@ -917,7 +901,7 @@ var LookingGlass = new Lang.Class({ }); this._resize(); - }, + } _updateFont() { let fontName = this._interfaceSettings.get_string('monospace-font-name'); @@ -927,7 +911,7 @@ var LookingGlass = new Lang.Class({ this.actor.style = 'font-size: ' + fontDesc.get_size() / 1024. + (fontDesc.get_size_is_absolute() ? 'px' : 'pt') + ';' + 'font-family: "' + fontDesc.get_family() + '";'; - }, + } setBorderPaintTarget(obj) { if (this._borderPaintTarget != null) @@ -935,7 +919,7 @@ var LookingGlass = new Lang.Class({ this._borderPaintTarget = obj; if (this._borderPaintTarget != null) this._borderPaintTarget.add_effect(this._redBorderEffect); - }, + } _pushResult(command, obj) { let index = this._results.length + this._offset; @@ -955,7 +939,7 @@ var LookingGlass = new Lang.Class({ // Scroll to bottom this._notebook.scrollToBottom(0); - }, + } _showCompletions(completions) { if (!this._completionActor) { @@ -984,7 +968,7 @@ var LookingGlass = new Lang.Class({ opacity: 255 }); } - }, + } _hideCompletions() { if (this._completionActor) { @@ -998,7 +982,7 @@ var LookingGlass = new Lang.Class({ } }); } - }, + } _evaluate(command) { this._history.addItem(command); @@ -1017,30 +1001,30 @@ var LookingGlass = new Lang.Class({ this._pushResult(command, resultObj); this._entry.text = ''; - }, + } inspect(x, y) { return global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); - }, + } getIt() { return this._it; - }, + } getResult(idx) { return this._results[idx - this._offset].o; - }, + } toggle() { if (this._open) this.close(); else this.open(); - }, + } _queueResize() { Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { this._resize(); }); - }, + } _resize() { let primary = Main.layoutManager.primaryMonitor; @@ -1056,16 +1040,16 @@ var LookingGlass = new Lang.Class({ this._objInspector.actor.set_size(Math.floor(myWidth * 0.8), Math.floor(myHeight * 0.8)); this._objInspector.actor.set_position(this.actor.x + Math.floor(myWidth * 0.1), this._targetY + Math.floor(myHeight * 0.1)); - }, + } insertObject(obj) { this._pushResult('', obj); - }, + } inspectObject(obj, sourceActor) { this._objInspector.open(sourceActor); this._objInspector.selectObject(obj); - }, + } // Handle key events which are relevant for all tabs of the LookingGlass _globalKeyPressEvent(actor, event) { @@ -1088,7 +1072,7 @@ var LookingGlass = new Lang.Class({ } } return Clutter.EVENT_PROPAGATE; - }, + } open() { if (this._open) @@ -1110,7 +1094,7 @@ var LookingGlass = new Lang.Class({ transition: 'easeOutQuad', y: this._targetY }); - }, + } close() { if (!this._open) @@ -1133,5 +1117,5 @@ var LookingGlass = new Lang.Class({ } }); } -}); +}; Signals.addSignalMethods(LookingGlass.prototype); diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js index 11f00088d..6931c7d4f 100644 --- a/js/ui/magnifier.js +++ b/js/ui/magnifier.js @@ -7,7 +7,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Shell = imports.gi.Shell; const St = imports.gi.St; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; const Signals = imports.signals; @@ -53,10 +52,8 @@ const CROSS_HAIRS_CLIP_KEY = 'cross-hairs-clip'; let magDBusService = null; -var Magnifier = new Lang.Class({ - Name: 'Magnifier', - - _init() { +var Magnifier = class Magnifier { + constructor() { // Magnifier is a manager of ZoomRegions. this._zoomRegions = []; @@ -84,7 +81,7 @@ var Magnifier = new Lang.Class({ // Export to dbus. magDBusService = new MagnifierDBus.ShellMagnifier(); this.setActive(showAtLaunch); - }, + } /** * showSystemCursor: @@ -92,7 +89,7 @@ var Magnifier = new Lang.Class({ */ showSystemCursor() { this._cursorTracker.set_pointer_visible(true); - }, + } /** * hideSystemCursor: @@ -100,7 +97,7 @@ var Magnifier = new Lang.Class({ */ hideSystemCursor() { this._cursorTracker.set_pointer_visible(false); - }, + } /** * setActive: @@ -131,7 +128,7 @@ var Magnifier = new Lang.Class({ // Notify interested parties of this change this.emit('active-changed', activate); - }, + } /** * isActive: @@ -144,7 +141,7 @@ var Magnifier = new Lang.Class({ return false; else return this._zoomRegions[0].isActive(); - }, + } /** * startTrackingMouse: @@ -155,7 +152,7 @@ var Magnifier = new Lang.Class({ let interval = 1000 / Clutter.get_default_frame_rate(); this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this)); } - }, + } /** * stopTrackingMouse: @@ -166,7 +163,7 @@ var Magnifier = new Lang.Class({ this._pointerWatch.remove(); this._pointerWatch = null; - }, + } /** * isTrackingMouse: @@ -174,7 +171,7 @@ var Magnifier = new Lang.Class({ */ isTrackingMouse() { return !!this._mouseTrackingId; - }, + } /** * scrollToMousePos: @@ -200,7 +197,7 @@ var Magnifier = new Lang.Class({ this.showSystemCursor(); } return true; - }, + } /** * createZoomRegion: @@ -229,7 +226,7 @@ var Magnifier = new Lang.Class({ zoomRegion.addCrosshairs(this._crossHairs); return zoomRegion; - }, + } /** * addZoomRegion: @@ -243,7 +240,7 @@ var Magnifier = new Lang.Class({ if (!this.isTrackingMouse()) this.startTrackingMouse(); } - }, + } /** * getZoomRegions: @@ -252,7 +249,7 @@ var Magnifier = new Lang.Class({ */ getZoomRegions() { return this._zoomRegions; - }, + } /** * clearAllZoomRegions: @@ -265,7 +262,7 @@ var Magnifier = new Lang.Class({ this._zoomRegions.length = 0; this.stopTrackingMouse(); this.showSystemCursor(); - }, + } /** * addCrosshairs: @@ -291,7 +288,7 @@ var Magnifier = new Lang.Class({ this._zoomRegions.forEach ((zoomRegion, index, array) => { zoomRegion.addCrosshairs(theCrossHairs); }); - }, + } /** * setCrosshairsVisible: @@ -308,7 +305,7 @@ var Magnifier = new Lang.Class({ if (this._crossHairs) this._crossHairs.hide(); } - }, + } /** * setCrosshairsColor: @@ -320,7 +317,7 @@ var Magnifier = new Lang.Class({ let [res, clutterColor] = Clutter.Color.from_string(color); this._crossHairs.setColor(clutterColor); } - }, + } /** * getCrosshairsColor: @@ -334,7 +331,7 @@ var Magnifier = new Lang.Class({ } else return '#00000000'; - }, + } /** * setCrosshairsThickness: @@ -345,7 +342,7 @@ var Magnifier = new Lang.Class({ setCrosshairsThickness(thickness) { if (this._crossHairs) this._crossHairs.setThickness(thickness); - }, + } /** * getCrosshairsThickness: @@ -358,7 +355,7 @@ var Magnifier = new Lang.Class({ return this._crossHairs.getThickness(); else return 0; - }, + } /** * setCrosshairsOpacity: @@ -367,7 +364,7 @@ var Magnifier = new Lang.Class({ setCrosshairsOpacity(opacity) { if (this._crossHairs) this._crossHairs.setOpacity(opacity * 255); - }, + } /** * getCrosshairsOpacity: @@ -378,7 +375,7 @@ var Magnifier = new Lang.Class({ return this._crossHairs.getOpacity() / 255.0; else return 0.0; - }, + } /** * setCrosshairsLength: @@ -389,7 +386,7 @@ var Magnifier = new Lang.Class({ setCrosshairsLength(length) { if (this._crossHairs) this._crossHairs.setLength(length); - }, + } /** * getCrosshairsLength: @@ -402,7 +399,7 @@ var Magnifier = new Lang.Class({ return this._crossHairs.getLength(); else return 0; - }, + } /** * setCrosshairsClip: @@ -420,7 +417,7 @@ var Magnifier = new Lang.Class({ if (this._crossHairs) this._crossHairs.setClip([0, 0]); } - }, + } /** * getCrosshairsClip: @@ -434,7 +431,7 @@ var Magnifier = new Lang.Class({ } else return false; - }, + } //// Private methods //// @@ -442,7 +439,7 @@ var Magnifier = new Lang.Class({ Shell.util_cursor_tracker_to_clutter(this._cursorTracker, this._mouseSprite); let [xHot, yHot] = this._cursorTracker.get_hot(); this._mouseSprite.set_anchor_point(xHot, yHot); - }, + } _settingsInit(zoomRegion) { this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA }); @@ -560,7 +557,7 @@ var Magnifier = new Lang.Class({ this.setCrosshairsVisible(showCrosshairs); return this._appSettings.get_boolean(SHOW_KEY); - }, + } _updateScreenPosition() { // Applies only to the first zoom region. @@ -570,7 +567,7 @@ var Magnifier = new Lang.Class({ if (position != GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN) this._updateLensMode(); } - }, + } _updateMagFactor() { // Applies only to the first zoom region. @@ -579,14 +576,14 @@ var Magnifier = new Lang.Class({ let magFactor = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2)); this._zoomRegions[0].setMagFactor(magFactor, magFactor); } - }, + } _updateLensMode() { // Applies only to the first zoom region. if (this._zoomRegions.length) { this._zoomRegions[0].setLensMode(this._settings.get_boolean(LENS_MODE_KEY)); } - }, + } _updateClampMode() { // Applies only to the first zoom region. @@ -595,7 +592,7 @@ var Magnifier = new Lang.Class({ !this._settings.get_boolean(CLAMP_MODE_KEY) ); } - }, + } _updateMouseTrackingMode() { // Applies only to the first zoom region. @@ -604,7 +601,7 @@ var Magnifier = new Lang.Class({ this._settings.get_enum(MOUSE_TRACKING_KEY) ); } - }, + } _updateFocusTrackingMode() { // Applies only to the first zoom region. @@ -613,7 +610,7 @@ var Magnifier = new Lang.Class({ this._settings.get_enum(FOCUS_TRACKING_KEY) ); } - }, + } _updateCaretTrackingMode() { // Applies only to the first zoom region. @@ -622,7 +619,7 @@ var Magnifier = new Lang.Class({ this._settings.get_enum(CARET_TRACKING_KEY) ); } - }, + } _updateInvertLightness() { // Applies only to the first zoom region. @@ -631,7 +628,7 @@ var Magnifier = new Lang.Class({ this._settings.get_boolean(INVERT_LIGHTNESS_KEY) ); } - }, + } _updateColorSaturation() { // Applies only to the first zoom region. @@ -640,7 +637,7 @@ var Magnifier = new Lang.Class({ this._settings.get_double(COLOR_SATURATION_KEY) ); } - }, + } _updateBrightness() { // Applies only to the first zoom region. @@ -651,7 +648,7 @@ var Magnifier = new Lang.Class({ brightness.b = this._settings.get_double(BRIGHT_BLUE_KEY); this._zoomRegions[0].setBrightness(brightness); } - }, + } _updateContrast() { // Applies only to the first zoom region. @@ -663,13 +660,11 @@ var Magnifier = new Lang.Class({ this._zoomRegions[0].setContrast(contrast); } } -}); +}; Signals.addSignalMethods(Magnifier.prototype); -var ZoomRegion = new Lang.Class({ - Name: 'ZoomRegion', - - _init(magnifier, mouseSourceActor) { +var ZoomRegion = class ZoomRegion { + constructor(magnifier, mouseSourceActor) { this._magnifier = magnifier; this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker(); @@ -715,7 +710,7 @@ var ZoomRegion = new Lang.Class({ this._updateCaret.bind(this)); this._focusCaretTracker.connect('focus-changed', this._updateFocus.bind(this)); - }, + } _updateFocus(caller, event) { let component = event.source.get_component_iface(); @@ -732,7 +727,7 @@ var ZoomRegion = new Lang.Class({ [this._xFocus, this._yFocus] = [extents.x + (extents.width / 2), extents.y + (extents.height / 2)]; this._centerFromFocusPosition(); - }, + } _updateCaret(caller, event) { let text = event.source.get_text_iface(); @@ -748,7 +743,7 @@ var ZoomRegion = new Lang.Class({ [this._xCaret, this._yCaret] = [extents.x, extents.y]; this._centerFromCaretPosition(); - }, + } /** * setActive: @@ -771,7 +766,7 @@ var ZoomRegion = new Lang.Class({ this._syncCaretTracking(); this._syncFocusTracking(); - }, + } /** * isActive: @@ -779,7 +774,7 @@ var ZoomRegion = new Lang.Class({ */ isActive() { return this._magView != null; - }, + } /** * setMagFactor: @@ -793,7 +788,7 @@ var ZoomRegion = new Lang.Class({ this._changeROI({ xMagFactor: xMagFactor, yMagFactor: yMagFactor, redoCursorTracking: this._followingCursor }); - }, + } /** * getMagFactor: @@ -804,7 +799,7 @@ var ZoomRegion = new Lang.Class({ */ getMagFactor() { return [this._xMagFactor, this._yMagFactor]; - }, + } /** * setMouseTrackingMode @@ -814,7 +809,7 @@ var ZoomRegion = new Lang.Class({ if (mode >= GDesktopEnums.MagnifierMouseTrackingMode.NONE && mode <= GDesktopEnums.MagnifierMouseTrackingMode.PUSH) this._mouseTrackingMode = mode; - }, + } /** * getMouseTrackingMode @@ -822,7 +817,7 @@ var ZoomRegion = new Lang.Class({ */ getMouseTrackingMode() { return this._mouseTrackingMode; - }, + } /** * setFocusTrackingMode @@ -831,7 +826,7 @@ var ZoomRegion = new Lang.Class({ setFocusTrackingMode(mode) { this._focusTrackingMode = mode; this._syncFocusTracking(); - }, + } /** * setCaretTrackingMode @@ -840,7 +835,7 @@ var ZoomRegion = new Lang.Class({ setCaretTrackingMode(mode) { this._caretTrackingMode = mode; this._syncCaretTracking(); - }, + } _syncFocusTracking() { let enabled = this._focusTrackingMode != GDesktopEnums.MagnifierFocusTrackingMode.NONE && @@ -850,7 +845,7 @@ var ZoomRegion = new Lang.Class({ this._focusCaretTracker.registerFocusListener(); else this._focusCaretTracker.deregisterFocusListener(); - }, + } _syncCaretTracking() { let enabled = this._caretTrackingMode != GDesktopEnums.MagnifierCaretTrackingMode.NONE && @@ -860,7 +855,7 @@ var ZoomRegion = new Lang.Class({ this._focusCaretTracker.registerCaretListener(); else this._focusCaretTracker.deregisterCaretListener(); - }, + } /** * setViewPort @@ -872,7 +867,7 @@ var ZoomRegion = new Lang.Class({ setViewPort(viewPort) { this._setViewPort(viewPort); this._screenPosition = GDesktopEnums.MagnifierScreenPosition.NONE; - }, + } /** * setROI @@ -890,7 +885,7 @@ var ZoomRegion = new Lang.Class({ yMagFactor: this._viewPortHeight / roi.height, xCenter: roi.x + roi.width / 2, yCenter: roi.y + roi.height / 2 }); - }, + } /** * getROI: @@ -907,7 +902,7 @@ var ZoomRegion = new Lang.Class({ return [this._xCenter - roiWidth / 2, this._yCenter - roiHeight / 2, roiWidth, roiHeight]; - }, + } /** * setLensMode: @@ -919,7 +914,7 @@ var ZoomRegion = new Lang.Class({ this._lensMode = lensMode; if (!this._lensMode) this.setScreenPosition (this._screenPosition); - }, + } /** * isLensMode: @@ -928,7 +923,7 @@ var ZoomRegion = new Lang.Class({ */ isLensMode() { return this._lensMode; - }, + } /** * setClampScrollingAtEdges: @@ -940,7 +935,7 @@ var ZoomRegion = new Lang.Class({ this._clampScrollingAtEdges = clamp; if (clamp) this._changeROI(); - }, + } /** * setTopHalf: @@ -954,7 +949,7 @@ var ZoomRegion = new Lang.Class({ viewPort.height = global.screen_height/2; this._setViewPort(viewPort); this._screenPosition = GDesktopEnums.MagnifierScreenPosition.TOP_HALF; - }, + } /** * setBottomHalf: @@ -968,7 +963,7 @@ var ZoomRegion = new Lang.Class({ viewPort.height = global.screen_height/2; this._setViewPort(viewPort); this._screenPosition = GDesktopEnums.MagnifierScreenPosition.BOTTOM_HALF; - }, + } /** * setLeftHalf: @@ -982,7 +977,7 @@ var ZoomRegion = new Lang.Class({ viewPort.height = global.screen_height; this._setViewPort(viewPort); this._screenPosition = GDesktopEnums.MagnifierScreenPosition.LEFT_HALF; - }, + } /** * setRightHalf: @@ -996,7 +991,7 @@ var ZoomRegion = new Lang.Class({ viewPort.height = global.screen_height; this._setViewPort(viewPort); this._screenPosition = GDesktopEnums.MagnifierScreenPosition.RIGHT_HALF; - }, + } /** * setFullScreenMode: @@ -1012,7 +1007,7 @@ var ZoomRegion = new Lang.Class({ this.setViewPort(viewPort); this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN; - }, + } /** * setScreenPosition: @@ -1040,7 +1035,7 @@ var ZoomRegion = new Lang.Class({ this.setRightHalf(); break; } - }, + } /** * getScreenPosition: @@ -1050,7 +1045,7 @@ var ZoomRegion = new Lang.Class({ */ getScreenPosition() { return this._screenPosition; - }, + } /** * scrollToMousePos: @@ -1066,14 +1061,14 @@ var ZoomRegion = new Lang.Class({ // Determine whether the system mouse pointer is over this zoom region. return this._isMouseOverRegion(); - }, + } _clearScrollContentsTimer() { if (this._scrollContentsTimerId != 0) { Mainloop.source_remove(this._scrollContentsTimerId); this._scrollContentsTimerId = 0; } - }, + } _scrollContentsToDelayed(x, y) { if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) { @@ -1086,7 +1081,7 @@ var ZoomRegion = new Lang.Class({ this._scrollContentsToDelayed(x, y); return GLib.SOURCE_REMOVE; }); - }, + } /** * scrollContentsTo: @@ -1101,7 +1096,7 @@ var ZoomRegion = new Lang.Class({ this._followingCursor = false; this._changeROI({ xCenter: x, yCenter: y }); - }, + } /** * addCrosshairs: @@ -1116,7 +1111,7 @@ var ZoomRegion = new Lang.Class({ if (crossHairs && this.isActive()) { this._crossHairsActor = crossHairs.addToZoomRegion(this, this._mouseActor); } - }, + } /** * setInvertLightness: @@ -1127,7 +1122,7 @@ var ZoomRegion = new Lang.Class({ this._invertLightness = flag; if (this._magShaderEffects) this._magShaderEffects.setInvertLightness(this._invertLightness); - }, + } /** * getInvertLightness: @@ -1136,7 +1131,7 @@ var ZoomRegion = new Lang.Class({ */ getInvertLightness() { return this._invertLightness; - }, + } /** * setColorSaturation: @@ -1149,7 +1144,7 @@ var ZoomRegion = new Lang.Class({ this._colorSaturation = saturation; if (this._magShaderEffects) this._magShaderEffects.setColorSaturation(this._colorSaturation); - }, + } /** * getColorSaturation: @@ -1157,7 +1152,7 @@ var ZoomRegion = new Lang.Class({ */ getColorSaturation() { return this._colorSaturation; - }, + } /** * setBrightness: @@ -1173,7 +1168,7 @@ var ZoomRegion = new Lang.Class({ this._brightness.b = brightness.b; if (this._magShaderEffects) this._magShaderEffects.setBrightness(this._brightness); - }, + } /** * setContrast: @@ -1189,7 +1184,7 @@ var ZoomRegion = new Lang.Class({ this._contrast.b = contrast.b; if (this._magShaderEffects) this._magShaderEffects.setContrast(this._contrast); - }, + } /** * getContrast: @@ -1203,7 +1198,7 @@ var ZoomRegion = new Lang.Class({ contrast.g = this._contrast.g; contrast.b = this._contrast.b; return contrast; - }, + } //// Private methods //// @@ -1249,7 +1244,7 @@ var ZoomRegion = new Lang.Class({ this._magShaderEffects.setInvertLightness(this._invertLightness); this._magShaderEffects.setBrightness(this._brightness); this._magShaderEffects.setContrast(this._contrast); - }, + } _destroyActors() { if (this._mouseActor == this._mouseSourceActor) @@ -1265,7 +1260,7 @@ var ZoomRegion = new Lang.Class({ this._uiGroupClone = null; this._mouseActor = null; this._crossHairsActor = null; - }, + } _setViewPort(viewPort, fromROIUpdate) { // Sets the position of the zoom region on the screen @@ -1290,7 +1285,7 @@ var ZoomRegion = new Lang.Class({ if (this.isActive() && this._isMouseOverRegion()) this._magnifier.hideSystemCursor(); - }, + } _changeROI(params) { // Updates the area we are viewing; the magnification factors @@ -1341,7 +1336,7 @@ var ZoomRegion = new Lang.Class({ this._updateCloneGeometry(); this._updateMousePosition(); - }, + } _isMouseOverRegion() { // Return whether the system mouse sprite is over this ZoomRegion. If the @@ -1357,7 +1352,7 @@ var ZoomRegion = new Lang.Class({ ); } return mouseIsOver; - }, + } _isFullScreen() { // Does the magnified view occupy the whole screen? Note that this @@ -1370,7 +1365,7 @@ var ZoomRegion = new Lang.Class({ this._viewPortHeight != global.screen_height) return false; return true; - }, + } _centerFromMousePosition() { // Determines where the center should be given the current cursor @@ -1390,7 +1385,7 @@ var ZoomRegion = new Lang.Class({ } return null; // Should never be hit - }, + } _centerFromCaretPosition() { let xCaret = this._xCaret; @@ -1404,7 +1399,7 @@ var ZoomRegion = new Lang.Class({ [xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret); this._scrollContentsToDelayed(xCaret, yCaret); - }, + } _centerFromFocusPosition() { let xFocus = this._xFocus; @@ -1418,7 +1413,7 @@ var ZoomRegion = new Lang.Class({ [xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus); this._scrollContentsToDelayed(xFocus, yFocus); - }, + } _centerFromPointPush(xPoint, yPoint) { let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI(); @@ -1439,7 +1434,7 @@ var ZoomRegion = new Lang.Class({ yPos += (yPoint - yRoiBottom); return [xPos, yPos]; - }, + } _centerFromPointProportional(xPoint, yPoint) { let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI(); @@ -1456,18 +1451,18 @@ var ZoomRegion = new Lang.Class({ let yPos = yPoint - yProportion * (heightRoi /2 - yPadding); return [xPos, yPos]; - }, + } _centerFromPointCentered(xPoint, yPoint) { return [xPoint, yPoint]; - }, + } _screenToViewPort(screenX, screenY) { // Converts coordinates relative to the (unmagnified) screen to coordinates // relative to the origin of this._magView return [this._viewPortWidth / 2 + (screenX - this._xCenter) * this._xMagFactor, this._viewPortHeight / 2 + (screenY - this._yCenter) * this._yMagFactor]; - }, + } _updateMagViewGeometry() { if (!this.isActive()) @@ -1480,7 +1475,7 @@ var ZoomRegion = new Lang.Class({ this._magView.set_size(this._viewPortWidth, this._viewPortHeight); this._magView.set_position(this._viewPortX, this._viewPortY); - }, + } _updateCloneGeometry() { if (!this.isActive()) @@ -1493,7 +1488,7 @@ var ZoomRegion = new Lang.Class({ this._uiGroupClone.set_position(Math.round(x), Math.round(y)); this._updateMousePosition(); - }, + } _updateMousePosition() { if (!this.isActive()) @@ -1512,7 +1507,7 @@ var ZoomRegion = new Lang.Class({ this._crossHairsActor.set_position(xMagMouse - groupWidth / 2, yMagMouse - groupHeight / 2); } - }, + } _monitorsChanged() { if (!this.isActive()) @@ -1528,12 +1523,10 @@ var ZoomRegion = new Lang.Class({ else this.setScreenPosition(this._screenPosition); } -}); +}; -var Crosshairs = new Lang.Class({ - Name: 'Crosshairs', - - _init() { +var Crosshairs = class Crosshairs { + constructor() { // Set the group containing the crosshairs to three times the desktop // size in case the crosshairs need to appear to be infinite in @@ -1560,12 +1553,12 @@ var Crosshairs = new Lang.Class({ Main.layoutManager.connect('monitors-changed', this._monitorsChanged.bind(this)); - }, + } _monitorsChanged() { this._actor.set_size(global.screen_width * 3, global.screen_height * 3); this.reCenter(); - }, + } /** * addToZoomRegion @@ -1599,7 +1592,7 @@ var Crosshairs = new Lang.Class({ } } return crosshairsActor; - }, + } /** * removeFromParent: @@ -1612,7 +1605,7 @@ var Crosshairs = new Lang.Class({ childActor.get_parent().remove_actor(childActor); else childActor.destroy(); - }, + } /** * setColor: @@ -1624,7 +1617,7 @@ var Crosshairs = new Lang.Class({ this._horizRightHair.background_color = clutterColor; this._vertTopHair.background_color = clutterColor; this._vertBottomHair.background_color = clutterColor; - }, + } /** * getColor: @@ -1633,7 +1626,7 @@ var Crosshairs = new Lang.Class({ */ getColor() { return this._horizLeftHair.get_color(); - }, + } /** * setThickness: @@ -1646,7 +1639,7 @@ var Crosshairs = new Lang.Class({ this._vertTopHair.set_width(thickness); this._vertBottomHair.set_width(thickness); this.reCenter(); - }, + } /** * getThickness: @@ -1655,7 +1648,7 @@ var Crosshairs = new Lang.Class({ */ getThickness() { return this._horizLeftHair.get_height(); - }, + } /** * setOpacity: @@ -1674,7 +1667,7 @@ var Crosshairs = new Lang.Class({ this._horizRightHair.set_opacity(opacity); this._vertTopHair.set_opacity(opacity); this._vertBottomHair.set_opacity(opacity); - }, + } /** * setLength: @@ -1687,7 +1680,7 @@ var Crosshairs = new Lang.Class({ this._vertTopHair.set_height(length); this._vertBottomHair.set_height(length); this.reCenter(); - }, + } /** * getLength: @@ -1696,7 +1689,7 @@ var Crosshairs = new Lang.Class({ */ getLength() { return this._horizLeftHair.get_width(); - }, + } /** * setClip: @@ -1717,7 +1710,7 @@ var Crosshairs = new Lang.Class({ this._clipSize = [0, 0]; this.reCenter(); } - }, + } /** * show: @@ -1728,7 +1721,7 @@ var Crosshairs = new Lang.Class({ // Clones don't share visibility. for (let i = 0; i < this._clones.length; i++) this._clones[i].show(); - }, + } /** * hide: @@ -1739,7 +1732,7 @@ var Crosshairs = new Lang.Class({ // Clones don't share visibility. for (let i = 0; i < this._clones.length; i++) this._clones[i].hide(); - }, + } /** * reCenter: @@ -1773,12 +1766,10 @@ var Crosshairs = new Lang.Class({ this._vertTopHair.set_position((groupWidth - thickness) / 2, top); this._vertBottomHair.set_position((groupWidth - thickness) / 2, bottom); } -}); +}; -var MagShaderEffects = new Lang.Class({ - Name: 'MagShaderEffects', - - _init(uiGroupClone) { +var MagShaderEffects = class MagShaderEffects { + constructor(uiGroupClone) { this._inverse = new Shell.InvertLightnessEffect(); this._brightnessContrast = new Clutter.BrightnessContrastEffect(); this._colorDesaturation = new Clutter.DesaturateEffect(); @@ -1789,7 +1780,7 @@ var MagShaderEffects = new Lang.Class({ this._magView.add_effect(this._inverse); this._magView.add_effect(this._brightnessContrast); this._magView.add_effect(this._colorDesaturation); - }, + } /** * destroyEffects: @@ -1803,7 +1794,7 @@ var MagShaderEffects = new Lang.Class({ this._brightnessContrast = null; this._inverse = null; this._magView = null; - }, + } /** * setInvertLightness: @@ -1812,11 +1803,11 @@ var MagShaderEffects = new Lang.Class({ */ setInvertLightness(invertFlag) { this._inverse.set_enabled(invertFlag); - }, + } setColorSaturation(factor) { this._colorDesaturation.set_factor(1.0 - factor); - }, + } /** * setBrightness: @@ -1840,7 +1831,7 @@ var MagShaderEffects = new Lang.Class({ (bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE || cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE) ); - }, + } /** * Set the contrast of the magnified view. @@ -1865,5 +1856,5 @@ var MagShaderEffects = new Lang.Class({ cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE || bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE ); - }, -}); + } +}; diff --git a/js/ui/magnifierDBus.js b/js/ui/magnifierDBus.js index 210c5e337..e26724544 100644 --- a/js/ui/magnifierDBus.js +++ b/js/ui/magnifierDBus.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const Main = imports.ui.main; const { loadInterfaceXML } = imports.misc.fileUtils; @@ -22,15 +21,13 @@ const ZoomRegionIface = loadInterfaceXML('org.gnome.Magnifier.ZoomRegion'); // '/org/gnome/Magnifier/ZoomRegion/zoomer1', etc. let _zoomRegionInstanceCount = 0; -var ShellMagnifier = new Lang.Class({ - Name: 'ShellMagnifier', - - _init() { +var ShellMagnifier = class ShellMagnifier { + constructor() { this._zoomers = {}; this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(MagnifierIface, this); this._dbusImpl.export(Gio.DBus.session, MAG_SERVICE_PATH); - }, + } /** * setActive: @@ -38,7 +35,7 @@ var ShellMagnifier = new Lang.Class({ */ setActive(activate) { Main.magnifier.setActive(activate); - }, + } /** * isActive: @@ -46,7 +43,7 @@ var ShellMagnifier = new Lang.Class({ */ isActive() { return Main.magnifier.isActive(); - }, + } /** * showCursor: @@ -54,7 +51,7 @@ var ShellMagnifier = new Lang.Class({ */ showCursor() { Main.magnifier.showSystemCursor(); - }, + } /** * hideCursor: @@ -62,7 +59,7 @@ var ShellMagnifier = new Lang.Class({ */ hideCursor() { Main.magnifier.hideSystemCursor(); - }, + } /** * createZoomRegion: @@ -97,7 +94,7 @@ var ShellMagnifier = new Lang.Class({ proxyAndZoomRegion.zoomRegion = realZoomRegion; this._zoomers[objectPath] = proxyAndZoomRegion; return objectPath; - }, + } /** * addZoomRegion: @@ -112,7 +109,7 @@ var ShellMagnifier = new Lang.Class({ } else return false; - }, + } /** * getZoomRegions: @@ -150,7 +147,7 @@ var ShellMagnifier = new Lang.Class({ } }); return objectPaths; - }, + } /** * clearAllZoomRegions: @@ -166,7 +163,7 @@ var ShellMagnifier = new Lang.Class({ delete this._zoomers[objectPath]; } this._zoomers = {}; - }, + } /** * fullScreenCapable: @@ -175,7 +172,7 @@ var ShellMagnifier = new Lang.Class({ */ fullScreenCapable() { return true; - }, + } /** * setCrosswireSize: @@ -184,7 +181,7 @@ var ShellMagnifier = new Lang.Class({ */ setCrosswireSize(size) { Main.magnifier.setCrosshairsThickness(size); - }, + } /** * getCrosswireSize: @@ -193,7 +190,7 @@ var ShellMagnifier = new Lang.Class({ */ getCrosswireSize() { return Main.magnifier.getCrosshairsThickness(); - }, + } /** * setCrosswireLength: @@ -202,7 +199,7 @@ var ShellMagnifier = new Lang.Class({ */ setCrosswireLength(length) { Main.magnifier.setCrosshairsLength(length); - }, + } /** * setCrosswireSize: @@ -211,7 +208,7 @@ var ShellMagnifier = new Lang.Class({ */ getCrosswireLength() { return Main.magnifier.getCrosshairsLength(); - }, + } /** * setCrosswireClip: @@ -220,7 +217,7 @@ var ShellMagnifier = new Lang.Class({ */ setCrosswireClip(clip) { Main.magnifier.setCrosshairsClip(clip); - }, + } /** * getCrosswireClip: @@ -229,7 +226,7 @@ var ShellMagnifier = new Lang.Class({ */ getCrosswireClip() { return Main.magnifier.getCrosshairsClip(); - }, + } /** * setCrosswireColor: @@ -238,7 +235,7 @@ var ShellMagnifier = new Lang.Class({ */ setCrosswireColor(color) { Main.magnifier.setCrosshairsColor('#%08x'.format(color)); - }, + } /** * getCrosswireClip: @@ -250,7 +247,7 @@ var ShellMagnifier = new Lang.Class({ // Drop the leading '#'. return parseInt(colorString.slice(1), 16); } -}); +}; /** * ShellMagnifierZoomRegion: @@ -258,15 +255,13 @@ 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({ - Name: 'ShellMagnifierZoomRegion', - - _init(zoomerObjectPath, zoomRegion) { +var ShellMagnifierZoomRegion = class ShellMagnifierZoomRegion { + constructor(zoomerObjectPath, zoomRegion) { this._zoomRegion = zoomRegion; this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ZoomRegionIface, this); this._dbusImpl.export(Gio.DBus.session, zoomerObjectPath); - }, + } /** * setMagFactor: @@ -278,7 +273,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({ */ setMagFactor(xMagFactor, yMagFactor) { this._zoomRegion.setMagFactor(xMagFactor, yMagFactor); - }, + } /** * getMagFactor: @@ -289,7 +284,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({ */ getMagFactor() { return this._zoomRegion.getMagFactor(); - }, + } /** * setRoi: @@ -301,7 +296,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({ setRoi(roi) { let roiObject = { x: roi[0], y: roi[1], width: roi[2] - roi[0], height: roi[3] - roi[1] }; this._zoomRegion.setROI(roiObject); - }, + } /** * getRoi: @@ -316,7 +311,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({ roi[2] += roi[0]; roi[3] += roi[1]; return roi; - }, + } /** * Set the "region of interest" by centering the given screen coordinate @@ -329,7 +324,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({ shiftContentsTo(x, y) { this._zoomRegion.scrollContentsTo(x, y); return true; - }, + } /** * moveResize @@ -340,9 +335,9 @@ var ShellMagnifierZoomRegion = new Lang.Class({ moveResize(viewPort) { let viewRect = { x: viewPort[0], y: viewPort[1], width: viewPort[2] - viewPort[0], height: viewPort[3] - viewPort[1] }; this._zoomRegion.setViewPort(viewRect); - }, + } destroy() { this._dbusImpl.unexport(); } -}); +}; diff --git a/js/ui/main.js b/js/ui/main.js index f87b1ad02..fccfcb9ef 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -5,7 +5,6 @@ const Gdk = imports.gi.Gdk; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; @@ -700,15 +699,12 @@ function queueDeferredWork(workId) { } } -var RestartMessage = new Lang.Class({ - Name: 'RestartMessage', - Extends: ModalDialog.ModalDialog, - - _init(message) { - this.parent({ shellReactive: true, - styleClass: 'restart-message headline', - shouldFadeIn: false, - destroyOnClose: true }); +var RestartMessage = class extends ModalDialog.ModalDialog { + constructor(message) { + super({ shellReactive: true, + styleClass: 'restart-message headline', + shouldFadeIn: false, + destroyOnClose: true }); let label = new St.Label({ text: message }); @@ -718,7 +714,7 @@ var RestartMessage = new Lang.Class({ y_align: St.Align.MIDDLE }); this.buttonLayout.hide(); } -}); +}; function showRestartMessage(message) { let restartMessage = new RestartMessage(message); diff --git a/js/ui/messageList.js b/js/ui/messageList.js index 32b8e18b8..f8ef745d4 100644 --- a/js/ui/messageList.js +++ b/js/ui/messageList.js @@ -40,10 +40,8 @@ function _fixMarkup(text, allowMarkup) { return GLib.markup_escape_text(text, -1); } -var URLHighlighter = new Lang.Class({ - Name: 'URLHighlighter', - - _init(text, lineWrap, allowMarkup) { +var URLHighlighter = class URLHighlighter { + constructor(text, lineWrap, allowMarkup) { if (!text) text = ''; this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter', @@ -114,7 +112,7 @@ var URLHighlighter = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; }); - }, + } setMarkup(text, allowMarkup) { text = text ? _fixMarkup(text, allowMarkup) : ''; @@ -124,7 +122,7 @@ var URLHighlighter = new Lang.Class({ /* clutter_text.text contain text without markup */ this._urls = Util.findUrls(this.actor.clutter_text.text); this._highlightUrls(); - }, + } _highlightUrls() { // text here contain markup @@ -139,7 +137,7 @@ var URLHighlighter = new Lang.Class({ } markup += this._text.substr(pos); this.actor.clutter_text.set_markup(markup); - }, + } _findUrlAtPos(event) { let success; @@ -160,7 +158,7 @@ var URLHighlighter = new Lang.Class({ } return -1; } -}); +}; var ScaleLayout = new Lang.Class({ Name: 'ScaleLayout', @@ -298,10 +296,8 @@ var LabelExpanderLayout = new Lang.Class({ } }); -var Message = new Lang.Class({ - Name: 'Message', - - _init(title, body) { +var Message = class Message { + constructor(title, body) { this.expanded = false; this._useBodyMarkup = false; @@ -368,25 +364,25 @@ var Message = new Lang.Class({ this.actor.connect('clicked', this._onClicked.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this)); this._sync(); - }, + } close() { this.emit('close'); - }, + } setIcon(actor) { this._iconBin.child = actor; this._iconBin.visible = (actor != null); - }, + } setSecondaryActor(actor) { this._secondaryBin.child = actor; - }, + } setTitle(text) { let title = text ? _fixMarkup(text.replace(/\n/g, ' '), false) : ''; this.titleLabel.clutter_text.set_markup(title); - }, + } setBody(text) { this._bodyText = text; @@ -394,7 +390,7 @@ var Message = new Lang.Class({ this._useBodyMarkup); if (this._expandedLabel) this._expandedLabel.setMarkup(text, this._useBodyMarkup); - }, + } setUseBodyMarkup(enable) { if (this._useBodyMarkup === enable) @@ -402,7 +398,7 @@ var Message = new Lang.Class({ this._useBodyMarkup = enable; if (this.bodyLabel) this.setBody(this._bodyText); - }, + } setActionArea(actor) { if (actor == null) { @@ -416,7 +412,7 @@ var Message = new Lang.Class({ this._actionBin.add_actor(actor); this._actionBin.visible = this.expanded; - }, + } addMediaControl(iconName, callback) { let icon = new St.Icon({ icon_name: iconName, icon_size: 16 }); @@ -425,7 +421,7 @@ var Message = new Lang.Class({ button.connect('clicked', callback); this._mediaControls.add_actor(button); return button; - }, + } setExpandedBody(actor) { if (actor == null) { @@ -438,11 +434,11 @@ var Message = new Lang.Class({ throw new Error('Message already has an expanded body actor'); this._bodyStack.insert_child_at_index(actor, 1); - }, + } setExpandedLines(nLines) { this._bodyStack.layout_manager.expandLines = nLines; - }, + } expand(animate) { this.expanded = true; @@ -471,7 +467,7 @@ var Message = new Lang.Class({ } this.emit('expanded'); - }, + } unexpand(animate) { if (animate) { @@ -495,23 +491,23 @@ var Message = new Lang.Class({ } this.emit('unexpanded'); - }, + } canClose() { return false; - }, + } _sync() { let visible = this.actor.hover && this.canClose(); this._closeButton.opacity = visible ? 255 : 0; this._closeButton.reactive = visible; - }, + } _onClicked() { - }, + } _onDestroy() { - }, + } _onKeyPressed(a, event) { let keysym = event.get_key_symbol(); @@ -523,13 +519,11 @@ var Message = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; } -}); +}; Signals.addSignalMethods(Message.prototype); -var MessageListSection = new Lang.Class({ - Name: 'MessageListSection', - - _init() { +var MessageListSection = class MessageListSection { + constructor() { this.actor = new St.BoxLayout({ style_class: 'message-list-section', clip_to_allocation: true, x_expand: true, vertical: true }); @@ -552,26 +546,26 @@ var MessageListSection = new Lang.Class({ this.empty = true; this.canClear = false; this._sync(); - }, + } _onKeyFocusIn(actor) { this.emit('key-focus-in', actor); - }, + } get allowed() { return true; - }, + } setDate(date) { if (Calendar.sameDay(date, this._date)) return; this._date = date; this._sync(); - }, + } addMessage(message, animate) { this.addMessageAtIndex(message, -1, animate); - }, + } addMessageAtIndex(message, index, animate) { let obj = { @@ -604,7 +598,7 @@ var MessageListSection = new Lang.Class({ scale_y: 1, time: MESSAGE_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } moveMessage(message, index, animate) { let obj = this._messages.get(message); @@ -626,7 +620,7 @@ var MessageListSection = new Lang.Class({ time: MESSAGE_ANIMATION_TIME, transition: 'easeOutQuad', onComplete: onComplete }); - }, + } removeMessage(message, animate) { let obj = this._messages.get(message); @@ -649,7 +643,7 @@ var MessageListSection = new Lang.Class({ obj.container.destroy(); global.sync_pointer(); } - }, + } clear() { let messages = [...this._messages.keys()].filter(msg => msg.canClose()); @@ -677,18 +671,18 @@ var MessageListSection = new Lang.Class({ }}); } } - }, + } _canClear() { for (let message of this._messages.keys()) if (message.canClose()) return true; return false; - }, + } _shouldShow() { return !this.empty; - }, + } _sync() { let empty = this._list.get_n_children() == 0; @@ -707,5 +701,5 @@ var MessageListSection = new Lang.Class({ this.actor.visible = this.allowed && this._shouldShow(); } -}); +}; Signals.addSignalMethods(MessageListSection.prototype); diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 3c98b4f95..ebc7ae2fc 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -72,15 +72,13 @@ var Urgency = { CRITICAL: 3 }; -var FocusGrabber = new Lang.Class({ - Name: 'FocusGrabber', - - _init(actor) { +var FocusGrabber = class FocusGrabber { + constructor(actor) { this._actor = actor; this._prevKeyFocusActor = null; this._focusActorChangedId = 0; this._focused = false; - }, + } grabFocus() { if (this._focused) @@ -94,7 +92,7 @@ var FocusGrabber = new Lang.Class({ this._actor.grab_key_focus(); this._focused = true; - }, + } _focusUngrabbed() { if (!this._focused) @@ -107,13 +105,13 @@ var FocusGrabber = new Lang.Class({ this._focused = false; return true; - }, + } _focusActorChanged() { let focusedActor = global.stage.get_key_focus(); if (!focusedActor || !this._actor.contains(focusedActor)) this._focusUngrabbed(); - }, + } ungrabFocus() { if (!this._focusUngrabbed()) @@ -128,17 +126,15 @@ var FocusGrabber = new Lang.Class({ global.stage.set_key_focus(null); } } -}); +}; // NotificationPolicy: // An object that holds all bits of configurable policy related to a notification // 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({ - Name: 'NotificationPolicy', - - _init(params) { +var NotificationPolicy = class NotificationPolicy { + constructor(params) { params = Params.parse(params, { enable: true, enableSound: true, showBanners: true, @@ -150,77 +146,72 @@ var NotificationPolicy = new Lang.Class({ let desc = Object.getOwnPropertyDescriptor(params, key); Object.defineProperty(this, `_${key}`, desc); }); - }, + } // Do nothing for the default policy. These methods are only useful for the // GSettings policy. - store() { }, - destroy() { }, + store() { } + destroy() { } get enable() { return this._enable; - }, + } get enableSound() { return this._enableSound; - }, + } get showBanners() { return this._showBanners; - }, + } get forceExpanded() { return this._forceExpanded; - }, + } get showInLockScreen() { return this._showInLockScreen; - }, + } get detailsInLockScreen() { return this._detailsInLockScreen; } -}); +}; Signals.addSignalMethods(NotificationPolicy.prototype); -var NotificationGenericPolicy = new Lang.Class({ - Name: 'NotificationGenericPolicy', - Extends: NotificationPolicy, - - _init() { - this.parent(); - +var NotificationGenericPolicy = +class NotificationGenericPolicy extends NotificationPolicy { + constructor() { + super(); this.id = 'generic'; this._masterSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.notifications' }); this._masterSettings.connect('changed', this._changed.bind(this)); - }, + } - store() { }, + store() { } destroy() { this._masterSettings.run_dispose(); - }, + } _changed(settings, key) { this.emit('policy-changed', key); - }, + } get showBanners() { return this._masterSettings.get_boolean('show-banners'); - }, + } get showInLockScreen() { return this._masterSettings.get_boolean('show-in-lock-screen'); } -}); +}; -var NotificationApplicationPolicy = new Lang.Class({ - Name: 'NotificationApplicationPolicy', - Extends: NotificationPolicy, - - _init(id) { - this.parent(); +var NotificationApplicationPolicy = +class NotificationApplicationPolicy extends NotificationPolicy { + constructor(id) { + super(); this.id = id; this._canonicalId = this._canonicalizeId(id); @@ -231,7 +222,7 @@ var NotificationApplicationPolicy = new Lang.Class({ this._masterSettings.connect('changed', this._changed.bind(this)); this._settings.connect('changed', this._changed.bind(this)); - }, + } store() { this._settings.set_string('application-id', this.id + '.desktop'); @@ -241,51 +232,51 @@ var NotificationApplicationPolicy = new Lang.Class({ apps.push(this._canonicalId); this._masterSettings.set_strv('application-children', apps); } - }, + } destroy() { this._masterSettings.run_dispose(); this._settings.run_dispose(); - }, + } _changed(settings, key) { this.emit('policy-changed', key); if (key == 'enable') this.emit('enable-changed'); - }, + } _canonicalizeId(id) { // Keys are restricted to lowercase alphanumeric characters and dash, // and two dashes cannot be in succession return id.toLowerCase().replace(/[^a-z0-9\-]/g, '-').replace(/--+/g, '-'); - }, + } get enable() { return this._settings.get_boolean('enable'); - }, + } get enableSound() { return this._settings.get_boolean('enable-sound-alerts'); - }, + } get showBanners() { return this._masterSettings.get_boolean('show-banners') && this._settings.get_boolean('show-banners'); - }, + } get forceExpanded() { return this._settings.get_boolean('force-expanded'); - }, + } get showInLockScreen() { return this._masterSettings.get_boolean('show-in-lock-screen') && this._settings.get_boolean('show-in-lock-screen'); - }, + } get detailsInLockScreen() { return this._settings.get_boolean('details-in-lock-screen'); } -}); +}; // Notification: // @source: the notification's Source @@ -342,10 +333,8 @@ var NotificationApplicationPolicy = new Lang.Class({ // @source allows playing sounds). // // [1] https://developer.gnome.org/notification-spec/#markup -var Notification = new Lang.Class({ - Name: 'Notification', - - _init(source, title, banner, params) { +var Notification = class Notification { + constructor(source, title, banner, params) { this.source = source; this.title = title; this.urgency = Urgency.NORMAL; @@ -367,7 +356,7 @@ var Notification = new Lang.Class({ // for new and updated notifications if (arguments.length != 1) this.update(title, banner, params); - }, + } // update: // @title: the new title @@ -412,41 +401,41 @@ var Notification = new Lang.Class({ } this.emit('updated', params.clear); - }, + } // addAction: // @label: the label for the action's button // @callback: the callback for the action addAction(label, callback) { this.actions.push({ label: label, callback: callback }); - }, + } get acknowledged() { return this._acknowledged; - }, + } set acknowledged(v) { if (this._acknowledged == v) return; this._acknowledged = v; this.emit('acknowledged-changed'); - }, + } setUrgency(urgency) { this.urgency = urgency; - }, + } setResident(resident) { this.resident = resident; - }, + } setTransient(isTransient) { this.isTransient = isTransient; - }, + } setForFeedback(forFeedback) { this.forFeedback = forFeedback; - }, + } playSound() { if (this._soundPlayed) @@ -462,7 +451,7 @@ var Notification = new Lang.Class({ player.play_from_theme(this._soundName, this.title, null); else if (this._soundFile) player.play_from_file(this._soundFile, this.title, null); - }, + } // Allow customizing the banner UI: // the default implementation defers the creation to @@ -471,28 +460,26 @@ var Notification = new Lang.Class({ // Notification or Source createBanner() { return this.source.createBanner(this); - }, + } activate() { this.emit('activated'); if (!this.resident) this.destroy(); - }, + } destroy(reason) { if (!reason) reason = NotificationDestroyedReason.DISMISSED; this.emit('destroy', reason); } -}); +}; Signals.addSignalMethods(Notification.prototype); -var NotificationBanner = new Lang.Class({ - Name: 'NotificationBanner', - Extends: Calendar.NotificationMessage, - - _init(notification) { - this.parent(notification); +var NotificationBanner = +class NotificationBanner extends Calendar.NotificationMessage { + constructor(notification) { + super(notification); this.actor.can_focus = false; this.actor.add_style_class_name('notification-banner'); @@ -509,15 +496,15 @@ var NotificationBanner = new Lang.Class({ // attention switching to the window. this.emit('done-displaying'); }); - }, + } _onDestroy() { - this.parent(); + super._onDestroy(); this.notification.disconnect(this._activatedId); - }, + } _onUpdated(n, clear) { - this.parent(n, clear); + super._onUpdated(n, clear); if (clear) { this.setSecondaryActor(null); @@ -527,13 +514,13 @@ var NotificationBanner = new Lang.Class({ this._addActions(); this._addSecondaryIcon(); - }, + } _addActions() { this.notification.actions.forEach(action => { this.addAction(action.label, action.callback); }); - }, + } _addSecondaryIcon() { if (this.notification.secondaryGIcon) { @@ -541,7 +528,7 @@ var NotificationBanner = new Lang.Class({ x_align: Clutter.ActorAlign.END }); this.setSecondaryActor(icon); } - }, + } addButton(button, callback) { if (!this._buttonBox) { @@ -569,7 +556,7 @@ var NotificationBanner = new Lang.Class({ }); return button; - }, + } addAction(label, callback) { let button = new St.Button({ style_class: 'notification-button', @@ -579,7 +566,7 @@ var NotificationBanner = new Lang.Class({ return this.addButton(button, callback); } -}); +}; var SourceActor = new Lang.Class({ Name: 'SourceActor', @@ -697,12 +684,10 @@ var SourceActorWithLabel = new Lang.Class({ } }); -var Source = new Lang.Class({ - Name: 'MessageTraySource', +var Source = class Source { + constructor(title, iconName) { + this.SOURCE_ICON_SIZE = 48; - SOURCE_ICON_SIZE: 48, - - _init(title, iconName) { this.title = title; this.iconName = iconName; @@ -711,42 +696,42 @@ var Source = new Lang.Class({ this.notifications = []; this._policy = null; - }, + } get policy() { if (!this._policy) this._policy = this._createPolicy(); return this._policy; - }, + } get count() { return this.notifications.length; - }, + } get unseenCount() { return this.notifications.filter(n => !n.acknowledged).length; - }, + } get countVisible() { return this.count > 1; - }, + } countUpdated() { this.emit('count-updated'); - }, + } _createPolicy() { return new NotificationPolicy(); - }, + } setTitle(newTitle) { this.title = newTitle; this.emit('title-changed'); - }, + } createBanner(notification) { return new NotificationBanner(notification); - }, + } // Called to create a new icon actor. // Provides a sane default implementation, override if you need @@ -754,11 +739,11 @@ var Source = new Lang.Class({ createIcon(size) { return new St.Icon({ gicon: this.getIcon(), icon_size: size }); - }, + } getIcon() { return new Gio.ThemedIcon({ name: this.iconName }); - }, + } _onNotificationDestroy(notification) { let index = this.notifications.indexOf(notification); @@ -770,7 +755,7 @@ var Source = new Lang.Class({ this.destroy(); this.countUpdated(); - }, + } pushNotification(notification) { if (this.notifications.indexOf(notification) >= 0) @@ -785,7 +770,7 @@ var Source = new Lang.Class({ this.emit('notification-added', notification); this.countUpdated(); - }, + } notify(notification) { notification.acknowledged = false; @@ -796,7 +781,7 @@ var Source = new Lang.Class({ } else { notification.playSound(); } - }, + } destroy(reason) { this.policy.destroy(); @@ -808,15 +793,15 @@ var Source = new Lang.Class({ notifications[i].destroy(reason); this.emit('destroy', reason); - }, + } iconUpdated() { this.emit('icon-updated'); - }, + } // To be overridden by subclasses open() { - }, + } destroyNonResidentNotifications() { for (let i = this.notifications.length - 1; i >= 0; i--) @@ -825,13 +810,11 @@ var Source = new Lang.Class({ this.countUpdated(); } -}); +}; Signals.addSignalMethods(Source.prototype); -var MessageTray = new Lang.Class({ - Name: 'MessageTray', - - _init() { +var MessageTray = class MessageTray { + constructor() { this._presence = new GnomeSession.Presence((proxy, error) => { this._onStatusChanged(proxy.status); }); @@ -938,27 +921,27 @@ var MessageTray = new Lang.Class({ this._sources = new Map(); this._sessionUpdated(); - }, + } _sessionUpdated() { this._updateState(); - }, + } _onDragBegin() { Shell.util_set_hidden_from_pick(this.actor, true); - }, + } _onDragEnd() { Shell.util_set_hidden_from_pick(this.actor, false); - }, + } get bannerAlignment() { return this._bannerBin.get_x_align(); - }, + } set bannerAlignment(align) { this._bannerBin.set_x_align(align); - }, + } _onNotificationKeyRelease(actor, event) { if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) { @@ -967,27 +950,27 @@ var MessageTray = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } _expireNotification() { this._notificationExpired = true; this._updateState(); - }, + } get queueCount() { return this._notificationQueue.length; - }, + } set bannerBlocked(v) { if (this._bannerBlocked == v) return; this._bannerBlocked = v; this._updateState(); - }, + } contains(source) { return this._sources.has(source); - }, + } add(source) { if (this.contains(source)) { @@ -1003,7 +986,7 @@ var MessageTray = new Lang.Class({ }); source.policy.connect('policy-changed', this._updateState.bind(this)); this._onSourceEnableChanged(source.policy, source); - }, + } _addSource(source) { let obj = { @@ -1018,7 +1001,7 @@ var MessageTray = new Lang.Class({ obj.destroyId = source.connect('destroy', this._onSourceDestroy.bind(this)); this.emit('source-added', source); - }, + } _removeSource(source) { let obj = this._sources.get(source); @@ -1028,11 +1011,11 @@ var MessageTray = new Lang.Class({ source.disconnect(obj.destroyId); this.emit('source-removed', source); - }, + } getSources() { return [...this._sources.keys()]; - }, + } _onSourceEnableChanged(policy, source) { let wasEnabled = this.contains(source); @@ -1044,11 +1027,11 @@ var MessageTray = new Lang.Class({ else this._removeSource(source); } - }, + } _onSourceDestroy(source) { this._removeSource(source); - }, + } _onNotificationDestroy(notification) { if (this._notification == notification && (this._notificationState == State.SHOWN || this._notificationState == State.SHOWING)) { @@ -1063,7 +1046,7 @@ var MessageTray = new Lang.Class({ this._notificationQueue.splice(index, 1); this.emit('queue-changed'); } - }, + } _onNotify(source, notification) { if (this._notification == notification) { @@ -1089,7 +1072,7 @@ var MessageTray = new Lang.Class({ } } this._updateState(); - }, + } _resetNotificationLeftTimeout() { this._useLongerNotificationLeftTimeout = false; @@ -1099,7 +1082,7 @@ var MessageTray = new Lang.Class({ this._notificationLeftMouseX = -1; this._notificationLeftMouseY = -1; } - }, + } _onNotificationHoverChanged() { if (this._bannerBin.hover == this._notificationHovered) @@ -1143,7 +1126,7 @@ var MessageTray = new Lang.Class({ this._notificationLeftTimeoutId = Mainloop.timeout_add(timeout, this._onNotificationLeftTimeout.bind(this)); GLib.Source.set_name_by_id(this._notificationLeftTimeoutId, '[gnome-shell] this._onNotificationLeftTimeout'); } - }, + } _onStatusChanged(status) { if (status == GnomeSession.PresenceStatus.BUSY) { @@ -1158,7 +1141,7 @@ var MessageTray = new Lang.Class({ } this._updateState(); - }, + } _onNotificationLeftTimeout() { let [x, y, mods] = global.get_pointer(); @@ -1180,13 +1163,13 @@ var MessageTray = new Lang.Class({ this._updateState(); } return GLib.SOURCE_REMOVE; - }, + } _escapeTray() { this._pointerInNotification = false; this._updateNotificationTimeout(0); this._updateState(); - }, + } // All of the logic for what happens when occurs here; the various // event handlers merely update variables such as @@ -1249,7 +1232,7 @@ var MessageTray = new Lang.Class({ // Clean transient variables that are used to communicate actions // to updateState() this._notificationExpired = false; - }, + } _tween(actor, statevar, value, params) { let onComplete = params.onComplete; @@ -1266,24 +1249,24 @@ var MessageTray = new Lang.Class({ let valuing = (value == State.SHOWN) ? State.SHOWING : State.HIDING; this[statevar] = valuing; - }, + } _tweenComplete(statevar, value, onComplete, onCompleteScope, onCompleteParams) { this[statevar] = value; if (onComplete) onComplete.apply(onCompleteScope, onCompleteParams); this._updateState(); - }, + } _clampOpacity() { this._bannerBin.opacity = Math.max(0, Math.min(this._bannerBin._opacity, 255)); - }, + } _onIdleMonitorBecameActive() { this._userActiveWhileNotificationShown = true; this._updateNotificationTimeout(2000); this._updateState(); - }, + } _showNotification() { this._notification = this._notificationQueue.shift(); @@ -1328,7 +1311,7 @@ var MessageTray = new Lang.Class({ this._lastSeenMouseY = y; this._resetNotificationLeftTimeout(); - }, + } _updateShowingNotification() { this._notification.acknowledged = true; @@ -1362,12 +1345,12 @@ var MessageTray = new Lang.Class({ }; this._tween(this._bannerBin, '_notificationState', State.SHOWN, tweenParams); - }, + } _showNotificationCompleted() { if (this._notification.urgency != Urgency.CRITICAL) this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000); - }, + } _updateNotificationTimeout(timeout) { if (this._notificationTimeoutId) { @@ -1380,7 +1363,7 @@ var MessageTray = new Lang.Class({ this._notificationTimeout.bind(this)); GLib.Source.set_name_by_id(this._notificationTimeoutId, '[gnome-shell] this._notificationTimeout'); } - }, + } _notificationTimeout() { let [x, y, mods] = global.get_pointer(); @@ -1404,7 +1387,7 @@ var MessageTray = new Lang.Class({ this._lastSeenMouseX = x; this._lastSeenMouseY = y; return GLib.SOURCE_REMOVE; - }, + } _hideNotification(animate) { this._notificationFocusGrabber.ungrabFocus(); @@ -1438,7 +1421,7 @@ var MessageTray = new Lang.Class({ this._notificationState = State.HIDDEN; this._hideNotificationCompleted(); } - }, + } _hideNotificationCompleted() { let notification = this._notification; @@ -1453,14 +1436,14 @@ var MessageTray = new Lang.Class({ this._banner.actor.destroy(); this._banner = null; this.actor.hide(); - }, + } _expandActiveNotification() { if (!this._banner) return; this._expandBanner(false); - }, + } _expandBanner(autoExpanding) { // Don't animate changes in notifications that are auto-expanding. @@ -1469,23 +1452,20 @@ var MessageTray = new Lang.Class({ // Don't focus notifications that are auto-expanding. if (!autoExpanding) this._ensureBannerFocused(); - }, + } _ensureBannerFocused() { this._notificationFocusGrabber.grabFocus(); } -}); +}; Signals.addSignalMethods(MessageTray.prototype); -var SystemNotificationSource = new Lang.Class({ - Name: 'SystemNotificationSource', - Extends: Source, - - _init() { - this.parent(_("System Information"), 'dialog-information-symbolic'); - }, +var SystemNotificationSource = class SystemNotificationSource extends Source { + constructor() { + super(_("System Information"), 'dialog-information-symbolic'); + } open() { this.destroy(); } -}); +}; diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index aff894fd5..d6ebcb5f3 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter; const Gdk = imports.gi.Gdk; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Pango = imports.gi.Pango; const St = imports.gi.St; @@ -31,10 +30,8 @@ var State = { FADED_OUT: 4 }; -var ModalDialog = new Lang.Class({ - Name: 'ModalDialog', - - _init(params) { +var ModalDialog = class { + constructor(params) { params = Params.parse(params, { shellReactive: false, styleClass: null, actionMode: Shell.ActionMode.SYSTEM_MODAL, @@ -87,30 +84,30 @@ var ModalDialog = new Lang.Class({ this._initialKeyFocus = null; this._initialKeyFocusDestroyId = 0; this._savedKeyFocus = null; - }, + } destroy() { this._group.destroy(); - }, + } clearButtons() { this.dialogLayout.clearButtons(); - }, + } setButtons(buttons) { this.clearButtons(); for (let buttonInfo of buttons) this.addButton(buttonInfo); - }, + } addButton(buttonInfo) { return this.dialogLayout.addButton(buttonInfo); - }, + } _onGroupDestroy() { this.emit('destroy'); - }, + } _fadeOpen(onPrimary) { if (onPrimary) @@ -134,7 +131,7 @@ var ModalDialog = new Lang.Class({ this.emit('opened'); } }); - }, + } setInitialKeyFocus(actor) { if (this._initialKeyFocusDestroyId) @@ -146,7 +143,7 @@ var ModalDialog = new Lang.Class({ this._initialKeyFocus = null; this._initialKeyFocusDestroyId = 0; }); - }, + } open(timestamp, onPrimary) { if (this.state == State.OPENED || this.state == State.OPENING) @@ -157,7 +154,7 @@ var ModalDialog = new Lang.Class({ this._fadeOpen(onPrimary); return true; - }, + } _closeComplete() { this.state = State.CLOSED; @@ -166,7 +163,7 @@ var ModalDialog = new Lang.Class({ if (this._destroyOnClose) this.destroy(); - }, + } close(timestamp) { if (this.state == State.CLOSED || this.state == State.CLOSING) @@ -185,7 +182,7 @@ var ModalDialog = new Lang.Class({ }) else this._closeComplete(); - }, + } // Drop modal status without closing the dialog; this makes the // dialog insensitive as well, so it needs to be followed shortly @@ -205,7 +202,7 @@ var ModalDialog = new Lang.Class({ if (!this._shellReactive) this._eventBlocker.raise_top(); - }, + } pushModal(timestamp) { if (this._hasModal) @@ -229,7 +226,7 @@ var ModalDialog = new Lang.Class({ if (!this._shellReactive) this._eventBlocker.lower_bottom(); return true; - }, + } // This method is like close, but fades the dialog out much slower, // and leaves the lightbox in place. Once in the faded out state, @@ -259,5 +256,5 @@ var ModalDialog = new Lang.Class({ } }); } -}); +}; Signals.addSignalMethods(ModalDialog.prototype); diff --git a/js/ui/mpris.js b/js/ui/mpris.js index 3b5521265..4968b4e7a 100644 --- a/js/ui/mpris.js +++ b/js/ui/mpris.js @@ -1,5 +1,4 @@ const Gio = imports.gi.Gio; -const Lang = imports.lang; const Signals = imports.signals; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -21,15 +20,12 @@ const MprisPlayerProxy = Gio.DBusProxy.makeProxyWrapper(MprisPlayerIface); const MPRIS_PLAYER_PREFIX = 'org.mpris.MediaPlayer2.'; -var MediaMessage = new Lang.Class({ - Name: 'MediaMessage', - Extends: MessageList.Message, +var MediaMessage = class MediaMessage extends MessageList.Message { + constructor(player) { + super('', ''); - _init(player) { this._player = player; - this.parent('', ''); - this._icon = new St.Icon({ style_class: 'media-message-cover-icon' }); this.setIcon(this._icon); @@ -51,16 +47,16 @@ var MediaMessage = new Lang.Class({ this._player.connect('changed', this._update.bind(this)); this._player.connect('closed', this.close.bind(this)); this._update(); - }, + } _onClicked() { this._player.raise(); Main.panel.closeCalendar(); - }, + } _updateNavButton(button, sensitive) { button.reactive = sensitive; - }, + } _update() { this.setTitle(this._player.trackArtists.join(', ')); @@ -83,12 +79,10 @@ var MediaMessage = new Lang.Class({ this._updateNavButton(this._prevButton, this._player.canGoPrevious); this._updateNavButton(this._nextButton, this._player.canGoNext); } -}); +}; -var MprisPlayer = new Lang.Class({ - Name: 'MprisPlayer', - - _init(busName) { +var MprisPlayer = class MprisPlayer { + constructor(busName) { this._mprisProxy = new MprisProxy(Gio.DBus.session, busName, '/org/mpris/MediaPlayer2', this._onMprisProxyReady.bind(this)); @@ -100,43 +94,43 @@ var MprisPlayer = new Lang.Class({ this._trackArtists = []; this._trackTitle = ''; this._trackCoverUrl = ''; - }, + } get status() { return this._playerProxy.PlaybackStatus; - }, + } get trackArtists() { return this._trackArtists; - }, + } get trackTitle() { return this._trackTitle; - }, + } get trackCoverUrl() { return this._trackCoverUrl; - }, + } playPause() { this._playerProxy.PlayPauseRemote(); - }, + } get canGoNext() { return this._playerProxy.CanGoNext; - }, + } next() { this._playerProxy.NextRemote(); - }, + } get canGoPrevious() { return this._playerProxy.CanGoPrevious; - }, + } previous() { this._playerProxy.PreviousRemote(); - }, + } raise() { // The remote Raise() method may run into focus stealing prevention, @@ -151,7 +145,7 @@ var MprisPlayer = new Lang.Class({ app.activate(); else if (this._mprisProxy.CanRaise) this._mprisProxy.RaiseRemote(); - }, + } _close() { this._mprisProxy.disconnect(this._ownerNotifyId); @@ -161,7 +155,7 @@ var MprisPlayer = new Lang.Class({ this._playerProxy = null; this.emit('closed'); - }, + } _onMprisProxyReady() { this._ownerNotifyId = this._mprisProxy.connect('notify::g-name-owner', @@ -169,13 +163,13 @@ var MprisPlayer = new Lang.Class({ if (!this._mprisProxy.g_name_owner) this._close(); }); - }, + } _onPlayerProxyReady() { this._propsChangedId = this._playerProxy.connect('g-properties-changed', this._updateState.bind(this)); this._updateState(); - }, + } _updateState() { let metadata = {}; @@ -197,15 +191,12 @@ var MprisPlayer = new Lang.Class({ this._close(); } } -}); +}; Signals.addSignalMethods(MprisPlayer.prototype); -var MediaSection = new Lang.Class({ - Name: 'MediaSection', - Extends: MessageList.MessageListSection, - - _init() { - this.parent(); +var MediaSection = class MediaSection extends MessageList.MessageListSection { + constructor() { + super(); this._players = new Map(); @@ -213,11 +204,11 @@ var MediaSection = new Lang.Class({ 'org.freedesktop.DBus', '/org/freedesktop/DBus', this._onProxyReady.bind(this)); - }, + } _shouldShow() { return !this.empty && Calendar.isToday(this._date); - }, + } _addPlayer(busName) { if (this._players.get(busName)) @@ -234,7 +225,7 @@ var MediaSection = new Lang.Class({ this.addMessage(message, true); }); this._players.set(busName, player); - }, + } _onProxyReady() { this._proxy.ListNamesRemote(([names]) => { @@ -247,7 +238,7 @@ var MediaSection = new Lang.Class({ }); this._proxy.connectSignal('NameOwnerChanged', this._onNameOwnerChanged.bind(this)); - }, + } _onNameOwnerChanged(proxy, sender, [name, oldOwner, newOwner]) { if (!name.startsWith(MPRIS_PLAYER_PREFIX)) @@ -256,4 +247,4 @@ var MediaSection = new Lang.Class({ if (newOwner && !oldOwner) this._addPlayer(name); } -}); +}; diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js index bb8185c03..0a456f039 100644 --- a/js/ui/notificationDaemon.js +++ b/js/ui/notificationDaemon.js @@ -5,7 +5,6 @@ const GdkPixbuf = imports.gi.GdkPixbuf; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Shell = imports.gi.Shell; const Mainloop = imports.mainloop; const St = imports.gi.St; @@ -51,10 +50,8 @@ const rewriteRules = { ] }; -var FdoNotificationDaemon = new Lang.Class({ - Name: 'FdoNotificationDaemon', - - _init() { +var FdoNotificationDaemon = class FdoNotificationDaemon { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(FdoNotificationsIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/freedesktop/Notifications'); @@ -69,7 +66,7 @@ var FdoNotificationDaemon = new Lang.Class({ this._onFocusAppChanged.bind(this)); Main.overview.connect('hidden', this._onFocusAppChanged.bind(this)); - }, + } _imageForNotificationData(hints) { if (hints['image-data']) { @@ -81,7 +78,7 @@ var FdoNotificationDaemon = new Lang.Class({ return this._iconForNotificationData(hints['image-path']); } return null; - }, + } _fallbackIconForNotificationData(hints) { let stockIcon; @@ -95,7 +92,7 @@ var FdoNotificationDaemon = new Lang.Class({ break; } return new Gio.ThemedIcon({ name: stockIcon }); - }, + } _iconForNotificationData(icon) { if (icon) { @@ -107,7 +104,7 @@ var FdoNotificationDaemon = new Lang.Class({ return new Gio.ThemedIcon({ name: icon }); } return null; - }, + } _lookupSource(title, pid) { for (let i = 0; i < this._sources.length; i++) { @@ -116,7 +113,7 @@ var FdoNotificationDaemon = new Lang.Class({ return source; } return null; - }, + } // Returns the source associated with ndata.notification if it is set. // If the existing or requested source is associated with a tray icon @@ -158,7 +155,7 @@ var FdoNotificationDaemon = new Lang.Class({ Main.messageTray.add(source); return source; - }, + } NotifyAsync(params, invocation) { let [appName, replacesId, icon, summary, body, actions, hints, timeout] = params; @@ -266,7 +263,7 @@ var FdoNotificationDaemon = new Lang.Class({ }); return invocation.return_value(GLib.Variant.new('(u)', [id])); - }, + } _notifyForSource(source, ndata) { let [id, icon, summary, body, actions, hints, notification] = @@ -357,7 +354,7 @@ var FdoNotificationDaemon = new Lang.Class({ let sourceGIcon = source.useNotificationIcon ? gicon : null; source.processNotification(notification, sourceGIcon); - }, + } CloseNotification(id) { let ndata = this._notifications[id]; @@ -366,7 +363,7 @@ var FdoNotificationDaemon = new Lang.Class({ ndata.notification.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); delete this._notifications[id]; } - }, + } GetCapabilities() { return [ @@ -381,7 +378,7 @@ var FdoNotificationDaemon = new Lang.Class({ 'persistence', 'sound', ]; - }, + } GetServerInformation() { return [ @@ -390,7 +387,7 @@ var FdoNotificationDaemon = new Lang.Class({ Config.PACKAGE_VERSION, '1.2' ]; - }, + } _onFocusAppChanged() { let tracker = Shell.WindowTracker.get_default(); @@ -404,31 +401,27 @@ var FdoNotificationDaemon = new Lang.Class({ return; } } - }, + } _emitNotificationClosed(id, reason) { this._dbusImpl.emit_signal('NotificationClosed', GLib.Variant.new('(uu)', [id, reason])); - }, + } _emitActionInvoked(id, action) { this._dbusImpl.emit_signal('ActionInvoked', GLib.Variant.new('(us)', [id, action])); } -}); +}; -var FdoNotificationDaemonSource = new Lang.Class({ - Name: 'FdoNotificationDaemonSource', - Extends: MessageTray.Source, +var FdoNotificationDaemonSource = +class FdoNotificationDaemonSource extends MessageTray.Source { + constructor(title, pid, sender, appId) { + super(title); - _init(title, pid, sender, appId) { - // Need to set the app before chaining up, so - // methods called from the parent constructor can find it this.pid = pid; this.app = this._getApp(appId); - this.parent(title); - this.initialTitle = title; if (this.app) @@ -443,7 +436,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ this._onNameVanished.bind(this)); else this._nameWatcherId = 0; - }, + } _createPolicy() { if (this.app && this.app.get_app_info()) { @@ -452,7 +445,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ } else { return new MessageTray.NotificationGenericPolicy(); } - }, + } _onNameVanished() { // Destroy the notification source when its sender is removed from DBus. @@ -462,7 +455,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ // so allow the code path that handles the tray icon being removed to handle that case. if (this.app) this.destroy(); - }, + } processNotification(notification, gicon) { if (gicon) @@ -474,7 +467,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ this.pushNotification(notification); else this.notify(notification); - }, + } _getApp(appId) { let app; @@ -490,7 +483,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ } return null; - }, + } setTitle(title) { // Do nothing if .app is set, we don't want to override the @@ -499,13 +492,13 @@ var FdoNotificationDaemonSource = new Lang.Class({ if (this.app) return; - this.parent(title); - }, + super.setTitle(title); + } open() { this.openApp(); this.destroyNonResidentNotifications(); - }, + } openApp() { if (this.app == null) @@ -514,7 +507,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ this.app.activate(); Main.overview.hide(); Main.panel.closeCalendar(); - }, + } destroy() { if (this._nameWatcherId) { @@ -522,8 +515,8 @@ var FdoNotificationDaemonSource = new Lang.Class({ this._nameWatcherId = 0; } - this.parent(); - }, + super.destroy(); + } createIcon(size) { if (this.app) { @@ -535,7 +528,7 @@ var FdoNotificationDaemonSource = new Lang.Class({ return null; } } -}); +}; const PRIORITY_URGENCY_MAP = { low: MessageTray.Urgency.LOW, @@ -544,12 +537,10 @@ const PRIORITY_URGENCY_MAP = { urgent: MessageTray.Urgency.CRITICAL }; -var GtkNotificationDaemonNotification = new Lang.Class({ - Name: 'GtkNotificationDaemonNotification', - Extends: MessageTray.Notification, - - _init(source, notification) { - this.parent(source); +var GtkNotificationDaemonNotification = +class GtkNotificationDaemonNotification extends MessageTray.Notification { + constructor(source, notification) { + super(source); this._serialized = GLib.Variant.new('a{sv}', notification); let { "title": title, @@ -586,7 +577,7 @@ var GtkNotificationDaemonNotification = new Lang.Class({ this.update(title.unpack(), body ? body.unpack() : null, { gicon: gicon ? Gio.icon_deserialize(gicon) : null, datetime : time ? GLib.DateTime.new_from_unix_local(time.unpack()) : null }); - }, + } _activateAction(namespacedActionId, target) { if (namespacedActionId) { @@ -597,22 +588,22 @@ var GtkNotificationDaemonNotification = new Lang.Class({ } else { this.source.open(); } - }, + } _onButtonClicked(button) { let { 'action': action, 'target': actionTarget } = button; this._activateAction(action.unpack(), actionTarget); - }, + } activate() { this._activateAction(this._defaultAction, this._defaultActionTarget); - this.parent(); - }, + super.activate(); + } serialize() { return this._serialized; - }, -}); + } +}; const FdoApplicationIface = loadInterfaceXML('org.freedesktop.Application'); const FdoApplicationProxy = Gio.DBusProxy.makeProxyWrapper(FdoApplicationIface); @@ -628,41 +619,42 @@ function getPlatformData() { function InvalidAppError() {} -var GtkNotificationDaemonAppSource = new Lang.Class({ - Name: 'GtkNotificationDaemonAppSource', - Extends: MessageTray.Source, +var GtkNotificationDaemonAppSource = +class GtkNotificationDaemonAppSource extends MessageTray.Source { + constructor(appId) { + let objectPath = objectPathFromAppId(appId); + if (!GLib.Variant.is_object_path(objectPath)) + throw new InvalidAppError(); + + let app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop'); + if (!app) + throw new InvalidAppError(); + + super(app.get_name()); - _init(appId) { this._appId = appId; - this._objectPath = objectPathFromAppId(appId); - if (!GLib.Variant.is_object_path(this._objectPath)) - throw new InvalidAppError(); - - this._app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop'); - if (!this._app) - throw new InvalidAppError(); + this._app = app; + this._objectPath = objectPath; this._notifications = {}; this._notificationPending = false; - - this.parent(this._app.get_name()); - }, + } createIcon(size) { return this._app.create_icon_texture(size); - }, + } _createPolicy() { return new MessageTray.NotificationApplicationPolicy(this._appId); - }, + } _createApp(callback) { return new FdoApplicationProxy(Gio.DBus.session, this._appId, this._objectPath, callback); - }, + } _createNotification(params) { return new GtkNotificationDaemonNotification(this, params); - }, + } activateAction(actionId, target) { this._createApp((app, error) => { @@ -673,7 +665,7 @@ var GtkNotificationDaemonAppSource = new Lang.Class({ }); Main.overview.hide(); Main.panel.closeCalendar(); - }, + } open() { this._createApp((app, error) => { @@ -684,7 +676,7 @@ var GtkNotificationDaemonAppSource = new Lang.Class({ }); Main.overview.hide(); Main.panel.closeCalendar(); - }, + } addNotification(notificationId, notificationParams, showBanner) { this._notificationPending = true; @@ -704,18 +696,18 @@ var GtkNotificationDaemonAppSource = new Lang.Class({ this.pushNotification(notification); this._notificationPending = false; - }, + } destroy(reason) { if (this._notificationPending) return; - this.parent(reason); - }, + super.destroy(reason); + } removeNotification(notificationId) { if (this._notifications[notificationId]) this._notifications[notificationId].destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); - }, + } serialize() { let notifications = []; @@ -724,15 +716,13 @@ var GtkNotificationDaemonAppSource = new Lang.Class({ notifications.push([notificationId, notification.serialize()]); } return [this._appId, notifications]; - }, -}); + } +}; const GtkNotificationsIface = loadInterfaceXML('org.gtk.Notifications'); -var GtkNotificationDaemon = new Lang.Class({ - Name: 'GtkNotificationDaemon', - - _init() { +var GtkNotificationDaemon = class GtkNotificationDaemon { + constructor() { this._sources = {}; this._loadNotifications(); @@ -741,7 +731,7 @@ var GtkNotificationDaemon = new Lang.Class({ this._dbusImpl.export(Gio.DBus.session, '/org/gtk/Notifications'); Gio.DBus.session.own_name('org.gtk.Notifications', Gio.BusNameOwnerFlags.REPLACE, null, null); - }, + } _ensureAppSource(appId) { if (this._sources[appId]) @@ -757,7 +747,7 @@ var GtkNotificationDaemon = new Lang.Class({ Main.messageTray.add(source); this._sources[appId] = source; return source; - }, + } _loadNotifications() { this._isLoading = true; @@ -785,7 +775,7 @@ var GtkNotificationDaemon = new Lang.Class({ } this._isLoading = false; - }, + } _saveNotifications() { if (this._isLoading) @@ -798,7 +788,7 @@ var GtkNotificationDaemon = new Lang.Class({ } global.set_persistent_state('notifications', new GLib.Variant('a(sa(sv))', sources)); - }, + } AddNotificationAsync(params, invocation) { let [appId, notificationId, notification] = params; @@ -820,7 +810,7 @@ var GtkNotificationDaemon = new Lang.Class({ source.addNotification(notificationId, notification, true); invocation.return_value(null); - }, + } RemoveNotificationAsync(params, invocation) { let [appId, notificationId] = params; @@ -829,14 +819,12 @@ var GtkNotificationDaemon = new Lang.Class({ source.removeNotification(notificationId); invocation.return_value(null); - }, -}); + } +}; -var NotificationDaemon = new Lang.Class({ - Name: 'NotificationDaemon', - - _init() { +var NotificationDaemon = class NotificationDaemon { + constructor() { this._fdoNotificationDaemon = new FdoNotificationDaemon(); this._gtkNotificationDaemon = new GtkNotificationDaemon(); - }, -}); + } +}; diff --git a/js/ui/osdMonitorLabeler.js b/js/ui/osdMonitorLabeler.js index 9abd6ec83..cdb6e7627 100644 --- a/js/ui/osdMonitorLabeler.js +++ b/js/ui/osdMonitorLabeler.js @@ -4,17 +4,14 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const St = imports.gi.St; -const Lang = imports.lang; const Main = imports.ui.main; const Tweener = imports.ui.tweener; const Meta = imports.gi.Meta; var FADE_TIME = 0.1; -var OsdMonitorLabel = new Lang.Class({ - Name: 'OsdMonitorLabel', - - _init(monitor, label) { +var OsdMonitorLabel = class { + constructor(monitor, label) { this._actor = new St.Widget({ x_expand: true, y_expand: true }); @@ -33,7 +30,7 @@ var OsdMonitorLabel = new Lang.Class({ this._position(); Meta.disable_unredirect_for_display(global.display); - }, + } _position() { let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor); @@ -44,18 +41,16 @@ var OsdMonitorLabel = new Lang.Class({ this._box.x = workArea.x; this._box.y = workArea.y; - }, + } destroy() { this._actor.destroy(); Meta.enable_unredirect_for_display(global.display); } -}); +}; -var OsdMonitorLabeler = new Lang.Class({ - Name: 'OsdMonitorLabeler', - - _init() { +var OsdMonitorLabeler = class { + constructor() { this._monitorManager = Meta.MonitorManager.get(); this._client = null; this._clientWatchId = 0; @@ -64,7 +59,7 @@ var OsdMonitorLabeler = new Lang.Class({ Main.layoutManager.connect('monitors-changed', this._reset.bind(this)); this._reset(); - }, + } _reset() { for (let i in this._osdLabels) @@ -74,7 +69,7 @@ var OsdMonitorLabeler = new Lang.Class({ let monitors = Main.layoutManager.monitors; for (let i in monitors) this._monitorLabels.set(monitors[i].index, []); - }, + } _trackClient(client) { if (this._client) @@ -86,7 +81,7 @@ var OsdMonitorLabeler = new Lang.Class({ this.hide(name); }); return true; - }, + } _untrackClient(client) { if (!this._client || this._client != client) @@ -96,7 +91,7 @@ var OsdMonitorLabeler = new Lang.Class({ this._clientWatchId = 0; this._client = null; return true; - }, + } show(client, params) { if (!this._trackClient(client)) @@ -118,7 +113,7 @@ var OsdMonitorLabeler = new Lang.Class({ labels.sort(); this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' '))); } - }, + } show2(client, params) { if (!this._trackClient(client)) @@ -137,7 +132,7 @@ var OsdMonitorLabeler = new Lang.Class({ labels.sort(); this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' '))); } - }, + } hide(client) { if (!this._untrackClient(client)) @@ -145,4 +140,4 @@ var OsdMonitorLabeler = new Lang.Class({ this._reset(); } -}); +}; diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js index d7077a063..557fe1d4b 100644 --- a/js/ui/osdWindow.js +++ b/js/ui/osdWindow.js @@ -16,44 +16,38 @@ var HIDE_TIMEOUT = 1500; var FADE_TIME = 0.1; var LEVEL_ANIMATION_TIME = 0.1; -var LevelBar = new Lang.Class({ - Name: 'LevelBar', - Extends: BarLevel.BarLevel, +var LevelBar = class extends BarLevel.BarLevel { + constructor() { + super(0, { styleClass: 'level' }); - _init() { this._level = 0; this._maxLevel = 100; - let params = { - styleClass: 'level', - } - this.parent(this._level, params); - this.actor.accessible_name = _("Volume"); this.actor.connect('notify::width', () => { this.level = this.level; }); - }, + } get level() { return this._level; - }, + } set level(value) { this._level = Math.max(0, Math.min(value, this._maxLevel)); this.setValue(this._level / 100); - }, + } get maxLevel() { return this._maxLevel; - }, + } set maxLevel(value) { this._maxLevel = Math.max(100, value); this.setMaximumValue(this._maxLevel / 100); } -}); +}; var OsdWindowConstraint = new Lang.Class({ Name: 'OsdWindowConstraint', @@ -87,10 +81,8 @@ var OsdWindowConstraint = new Lang.Class({ } }); -var OsdWindow = new Lang.Class({ - Name: 'OsdWindow', - - _init(monitorIndex) { +var OsdWindow = class { + constructor(monitorIndex) { this.actor = new St.Widget({ x_expand: true, y_expand: true, x_align: Clutter.ActorAlign.CENTER, @@ -129,7 +121,7 @@ var OsdWindow = new Lang.Class({ this._relayout.bind(this)); this._relayout(); Main.uiGroup.add_child(this.actor); - }, + } _onDestroy() { if (this._monitorsChangedId) @@ -140,17 +132,17 @@ var OsdWindow = new Lang.Class({ if (this._scaleChangedId) themeContext.disconnect(this._scaleChangedId); this._scaleChangedId = 0; - }, + } setIcon(icon) { this._icon.gicon = icon; - }, + } setLabel(label) { this._label.visible = (label != undefined); if (label) this._label.text = label; - }, + } setLevel(level) { this._level.actor.visible = (level != undefined); @@ -163,13 +155,13 @@ var OsdWindow = new Lang.Class({ else this._level.level = level; } - }, + } setMaxLevel(maxLevel) { if (maxLevel === undefined) maxLevel = 100; this._level.maxLevel = maxLevel; - }, + } show() { if (!this._icon.gicon) @@ -192,7 +184,7 @@ var OsdWindow = new Lang.Class({ this._hideTimeoutId = Mainloop.timeout_add(HIDE_TIMEOUT, this._hide.bind(this)); GLib.Source.set_name_by_id(this._hideTimeoutId, '[gnome-shell] this._hide'); - }, + } cancel() { if (!this._hideTimeoutId) @@ -200,7 +192,7 @@ var OsdWindow = new Lang.Class({ Mainloop.source_remove(this._hideTimeoutId); this._hide(); - }, + } _hide() { this._hideTimeoutId = 0; @@ -214,14 +206,14 @@ var OsdWindow = new Lang.Class({ } }); return GLib.SOURCE_REMOVE; - }, + } _reset() { this.actor.hide(); this.setLabel(null); this.setMaxLevel(null); this.setLevel(null); - }, + } _relayout() { /* assume 110x110 on a 640x480 display and scale from there */ @@ -239,17 +231,15 @@ var OsdWindow = new Lang.Class({ this._box.translation_y = Math.round(monitor.height / 4); this._boxConstraint.minSize = popupSize; } -}); +}; -var OsdWindowManager = new Lang.Class({ - Name: 'OsdWindowManager', - - _init() { +var OsdWindowManager = class { + constructor() { this._osdWindows = []; Main.layoutManager.connect('monitors-changed', this._monitorsChanged.bind(this)); this._monitorsChanged(); - }, + } _monitorsChanged() { for (let i = 0; i < Main.layoutManager.monitors.length; i++) { @@ -263,7 +253,7 @@ var OsdWindowManager = new Lang.Class({ } this._osdWindows.length = Main.layoutManager.monitors.length; - }, + } _showOsdWindow(monitorIndex, icon, label, level, maxLevel) { this._osdWindows[monitorIndex].setIcon(icon); @@ -271,7 +261,7 @@ var OsdWindowManager = new Lang.Class({ this._osdWindows[monitorIndex].setMaxLevel(maxLevel); this._osdWindows[monitorIndex].setLevel(level); this._osdWindows[monitorIndex].show(); - }, + } show(monitorIndex, icon, label, level, maxLevel) { if (monitorIndex != -1) { @@ -285,10 +275,10 @@ var OsdWindowManager = new Lang.Class({ for (let i = 0; i < this._osdWindows.length; i++) this._showOsdWindow(i, icon, label, level, maxLevel); } - }, + } hideAll() { for (let i = 0; i < this._osdWindows.length; i++) this._osdWindows[i].cancel(); } -}); +}; diff --git a/js/ui/overview.js b/js/ui/overview.js index 35f5927a0..602e190a7 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -6,7 +6,6 @@ const Gtk = imports.gi.Gtk; const Meta = imports.gi.Meta; const Mainloop = imports.mainloop; const Signals = imports.signals; -const Lang = imports.lang; const St = imports.gi.St; const Shell = imports.gi.Shell; const Gdk = imports.gi.Gdk; @@ -35,13 +34,11 @@ var DND_WINDOW_SWITCH_TIMEOUT = 750; var OVERVIEW_ACTIVATION_TIMEOUT = 0.5; -var ShellInfo = new Lang.Class({ - Name: 'ShellInfo', - - _init() { +var ShellInfo = class { + constructor() { this._source = null; this._undoCallback = null; - }, + } _onUndoClicked() { if (this._undoCallback) @@ -50,7 +47,7 @@ var ShellInfo = new Lang.Class({ if (this._source) this._source.destroy(); - }, + } setMessage(text, options) { options = Params.parse(options, { undoCallback: null, @@ -84,18 +81,16 @@ var ShellInfo = new Lang.Class({ this._source.notify(notification); } -}); +}; -var Overview = new Lang.Class({ - Name: 'Overview', - - _init() { +var Overview = class { + constructor() { this._overviewCreated = false; this._initCalled = false; Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); - }, + } _createOverview() { if (this._overviewCreated) @@ -167,7 +162,7 @@ var Overview = new Lang.Class({ if (this._initCalled) this.init(); - }, + } _updateBackgrounds() { for (let i = 0; i < this._bgManagers.length; i++) @@ -181,7 +176,7 @@ var Overview = new Lang.Class({ vignette: true }); this._bgManagers.push(bgManager); } - }, + } _unshadeBackgrounds() { let backgrounds = this._backgroundGroup.get_children(); @@ -193,7 +188,7 @@ var Overview = new Lang.Class({ transition: 'easeOutQuad' }); } - }, + } _shadeBackgrounds() { let backgrounds = this._backgroundGroup.get_children(); @@ -205,12 +200,12 @@ var Overview = new Lang.Class({ transition: 'easeOutQuad' }); } - }, + } _sessionUpdated() { this.isDummy = !Main.sessionMode.hasOverview; this._createOverview(); - }, + } // The members we construct that are implemented in JS might // want to access the overview as Main.overview to connect @@ -259,15 +254,15 @@ var Overview = new Lang.Class({ Main.layoutManager.connect('monitors-changed', this._relayout.bind(this)); this._relayout(); - }, + } addSearchProvider(provider) { this.viewSelector.addSearchProvider(provider); - }, + } removeSearchProvider(provider) { this.viewSelector.removeSearchProvider(provider); - }, + } // // options: @@ -279,7 +274,7 @@ var Overview = new Lang.Class({ return; this._shellInfo.setMessage(text, options); - }, + } _onDragBegin() { this._inXdndDrag = true; @@ -288,7 +283,7 @@ var Overview = new Lang.Class({ // Remember the workspace we started from let workspaceManager = global.workspace_manager; this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_index(); - }, + } _onDragEnd(time) { this._inXdndDrag = false; @@ -305,7 +300,7 @@ var Overview = new Lang.Class({ this._lastHoveredWindow = null; DND.removeDragMonitor(this._dragMonitor); this.endItemDrag(); - }, + } _resetWindowSwitchTimeout() { if (this._windowSwitchTimeoutId != 0) { @@ -313,7 +308,7 @@ var Overview = new Lang.Class({ this._windowSwitchTimeoutId = 0; this._needsFakePointerEvent = false; } - }, + } _fakePointerEvent() { let display = Gdk.Display.get_default(); @@ -322,7 +317,7 @@ var Overview = new Lang.Class({ let [gdkScreen, pointerX, pointerY] = pointer.get_position(); pointer.warp(gdkScreen, pointerX, pointerY); - }, + } _onDragMotion(dragEvent) { let targetIsWindow = dragEvent.targetActor && @@ -356,19 +351,19 @@ var Overview = new Lang.Class({ } return DND.DragMotionResult.CONTINUE; - }, + } _onScrollEvent(actor, event) { this.emit('scroll-event', event); return Clutter.EVENT_PROPAGATE; - }, + } addAction(action) { if (this.isDummy) return; this._backgroundGroup.add_action(action); - }, + } _getDesktopClone() { let windows = global.get_window_actors().filter( @@ -384,7 +379,7 @@ var Overview = new Lang.Class({ clone.destroy(); }); return clone; - }, + } _relayout() { // To avoid updating the position and size of the workspaces @@ -399,7 +394,7 @@ var Overview = new Lang.Class({ this._coverPane.set_size(global.screen_width, global.screen_height); this._updateBackgrounds(); - }, + } _onRestacked() { let stack = global.get_window_actors(); @@ -411,44 +406,44 @@ var Overview = new Lang.Class({ } this.emit('windows-restacked', stackIndices); - }, + } beginItemDrag(source) { this.emit('item-drag-begin'); this._inItemDrag = true; - }, + } cancelledItemDrag(source) { this.emit('item-drag-cancelled'); - }, + } endItemDrag(source) { if (!this._inItemDrag) return; this.emit('item-drag-end'); this._inItemDrag = false; - }, + } beginWindowDrag(window) { this.emit('window-drag-begin', window); this._inWindowDrag = true; - }, + } cancelledWindowDrag(window) { this.emit('window-drag-cancelled', window); - }, + } endWindowDrag(window) { if (!this._inWindowDrag) return; this.emit('window-drag-end', window); this._inWindowDrag = false; - }, + } focusSearch() { this.show(); this._searchEntry.grab_key_focus(); - }, + } fadeInDesktop() { this._desktopFade.opacity = 0; @@ -457,7 +452,7 @@ var Overview = new Lang.Class({ { opacity: 255, time: ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } fadeOutDesktop() { if (!this._desktopFade.get_n_children()) { @@ -475,7 +470,7 @@ var Overview = new Lang.Class({ time: ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } // Checks if the Activities button is currently sensitive to // clicks. The first call to this function within the @@ -492,7 +487,7 @@ var Overview = new Lang.Class({ GLib.get_monotonic_time() / GLib.USEC_PER_SEC - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT) return true; return false; - }, + } _syncGrab() { // We delay grab changes during animation so that when removing the @@ -521,7 +516,7 @@ var Overview = new Lang.Class({ } } return true; - }, + } // show: // @@ -538,7 +533,7 @@ var Overview = new Lang.Class({ Main.layoutManager.showOverview(); this._animateVisible(); - }, + } _animateVisible() { @@ -566,7 +561,7 @@ var Overview = new Lang.Class({ this._coverPane.raise_top(); this._coverPane.show(); this.emit('showing'); - }, + } _showDone() { this.animationInProgress = false; @@ -580,7 +575,7 @@ var Overview = new Lang.Class({ this._syncGrab(); global.sync_pointer(); - }, + } // hide: // @@ -606,8 +601,7 @@ var Overview = new Lang.Class({ this._animateNotVisible(); this._syncGrab(); - }, - + } _animateNotVisible() { if (!this.visible || this.animationInProgress) @@ -631,7 +625,7 @@ var Overview = new Lang.Class({ this._coverPane.raise_top(); this._coverPane.show(); this.emit('hiding'); - }, + } _hideDone() { // Re-enable unredirection @@ -658,7 +652,7 @@ var Overview = new Lang.Class({ this._fakePointerEvent(); this._needsFakePointerEvent = false; } - }, + } toggle() { if (this.isDummy) @@ -668,10 +662,10 @@ var Overview = new Lang.Class({ this.hide(); else this.show(); - }, + } getShowAppsButton() { return this._dash.showAppsButton; } -}); +}; Signals.addSignalMethods(Overview.prototype); diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js index 6dd4ae032..d57c27ac2 100644 --- a/js/ui/overviewControls.js +++ b/js/ui/overviewControls.js @@ -104,10 +104,8 @@ var SlideLayout = new Lang.Class({ }, }); -var SlidingControl = new Lang.Class({ - Name: 'SlidingControl', - - _init(params) { +var SlidingControl = class { + constructor(params) { params = Params.parse(params, { slideDirection: SlideDirection.LEFT }); this._visible = true; @@ -128,23 +126,23 @@ var SlidingControl = new Lang.Class({ Main.overview.connect('window-drag-begin', this._onWindowDragBegin.bind(this)); Main.overview.connect('window-drag-cancelled', this._onWindowDragEnd.bind(this)); Main.overview.connect('window-drag-end', this._onWindowDragEnd.bind(this)); - }, + } _getSlide() { throw new Error('getSlide() must be overridden'); - }, + } _updateSlide() { Tweener.addTween(this.layout, { slideX: this._getSlide(), time: SIDE_CONTROLS_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } getVisibleWidth() { let child = this.actor.get_first_child(); let [, , natWidth, ] = child.get_preferred_size(); return natWidth; - }, + } _getTranslation() { let child = this.actor.get_first_child(); @@ -155,7 +153,7 @@ var SlidingControl = new Lang.Class({ return - visibleWidth; else return visibleWidth; - }, + } _updateTranslation() { let translationStart = 0; @@ -176,57 +174,57 @@ var SlidingControl = new Lang.Class({ Tweener.addTween(this.layout, { translationX: translationEnd, time: SIDE_CONTROLS_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } _onOverviewHiding() { // We need to explicitly slideOut since showing pages // doesn't imply sliding out, instead, hiding the overview does. this.slideOut(); - }, + } _onWindowDragBegin() { this._onDragBegin(); - }, + } _onWindowDragEnd() { this._onDragEnd(); - }, + } _onDragBegin() { this._inDrag = true; this._updateTranslation(); this._updateSlide(); - }, + } _onDragEnd() { this._inDrag = false; this._updateSlide(); - }, + } fadeIn() { Tweener.addTween(this.actor, { opacity: 255, time: SIDE_CONTROLS_ANIMATION_TIME / 2, transition: 'easeInQuad' }); - }, + } fadeHalf() { Tweener.addTween(this.actor, { opacity: 128, time: SIDE_CONTROLS_ANIMATION_TIME / 2, transition: 'easeOutQuad' }); - }, + } slideIn() { this._visible = true; // we will update slideX and the translation from pageEmpty - }, + } slideOut() { this._visible = false; this._updateTranslation(); // we will update slideX from pageEmpty - }, + } pageEmpty() { // When pageEmpty is received, there's no visible view in the @@ -236,14 +234,11 @@ var SlidingControl = new Lang.Class({ this.layout.slideX = this._getSlide(); this._updateTranslation(); } -}); +}; -var ThumbnailsSlider = new Lang.Class({ - Name: 'ThumbnailsSlider', - Extends: SlidingControl, - - _init(thumbnailsBox) { - this.parent({ slideDirection: SlideDirection.RIGHT }); +var ThumbnailsSlider = class extends SlidingControl { + constructor(thumbnailsBox) { + super({ slideDirection: SlideDirection.RIGHT }); this._thumbnailsBox = thumbnailsBox; @@ -259,7 +254,7 @@ var ThumbnailsSlider = new Lang.Class({ this._updateSlide.bind(this)); this.actor.connect('notify::hover', this._updateSlide.bind(this)); this._thumbnailsBox.bind_property('visible', this.actor, 'visible', GObject.BindingFlags.SYNC_CREATE); - }, + } _getAlwaysZoomOut() { // Always show the pager on hover, during a drag, or if workspaces are @@ -287,17 +282,17 @@ var ThumbnailsSlider = new Lang.Class({ } return alwaysZoomOut; - }, + } getNonExpandedWidth() { let child = this.actor.get_first_child(); return child.get_theme_node().get_length('visible-width'); - }, + } _onDragEnd() { this.actor.sync_hover(); - this.parent(); - }, + super._onDragEnd(); + } _getSlide() { if (!this._visible) @@ -312,23 +307,20 @@ var ThumbnailsSlider = new Lang.Class({ let expandedWidth = child.get_preferred_width(preferredHeight)[1]; return this.getNonExpandedWidth() / expandedWidth; - }, + } getVisibleWidth() { let alwaysZoomOut = this._getAlwaysZoomOut(); if (alwaysZoomOut) - return this.parent(); + return super.getVisibleWidth(); else return this.getNonExpandedWidth(); } -}); +}; -var DashSlider = new Lang.Class({ - Name: 'DashSlider', - Extends: SlidingControl, - - _init(dash) { - this.parent({ slideDirection: SlideDirection.LEFT }); +var DashSlider = class extends SlidingControl { + constructor(dash) { + super({ slideDirection: SlideDirection.LEFT }); this._dash = dash; @@ -344,23 +336,23 @@ var DashSlider = new Lang.Class({ this.actor.add_actor(this._dash.actor); this._dash.connect('icon-size-changed', this._updateSlide.bind(this)); - }, + } _getSlide() { if (this._visible || this._inDrag) return 1; else return 0; - }, + } _onWindowDragBegin() { this.fadeHalf(); - }, + } _onWindowDragEnd() { this.fadeIn(); } -}); +}; var DashSpacer = new Lang.Class({ Name: 'DashSpacer', @@ -411,10 +403,8 @@ var ControlsLayout = new Lang.Class({ } }); -var ControlsManager = new Lang.Class({ - Name: 'ControlsManager', - - _init(searchEntry) { +var ControlsManager = class { + constructor(searchEntry) { this.dash = new Dash.Dash(); this._dashSlider = new DashSlider(this.dash); this._dashSpacer = new DashSpacer(); @@ -457,7 +447,7 @@ var ControlsManager = new Lang.Class({ Main.overview.connect('item-drag-cancelled', () => { this.viewSelector.fadeIn(); }); - }, + } _updateWorkspacesGeometry() { let [x, y] = this.actor.get_transformed_position(); @@ -477,7 +467,7 @@ var ControlsManager = new Lang.Class({ geometry.x += thumbnailsWidth; this.viewSelector.setWorkspacesFullGeometry(geometry); - }, + } _setVisibility() { // Ignore the case when we're leaving the overview, since @@ -502,7 +492,7 @@ var ControlsManager = new Lang.Class({ this._thumbnailsSlider.slideIn(); else this._thumbnailsSlider.slideOut(); - }, + } _updateSpacerVisibility() { if (Main.overview.animationInProgress && !Main.overview.visibleTarget) @@ -510,7 +500,7 @@ var ControlsManager = new Lang.Class({ let activePage = this.viewSelector.getActivePage(); this._dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS); - }, + } _onPageEmpty() { this._dashSlider.pageEmpty(); @@ -518,4 +508,4 @@ var ControlsManager = new Lang.Class({ this._updateSpacerVisibility(); } -}); +}; diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js index 48219026c..79b3eeb79 100644 --- a/js/ui/padOsd.js +++ b/js/ui/padOsd.js @@ -32,10 +32,8 @@ const CCW = 1; const UP = 0; const DOWN = 1; -var PadChooser = new Lang.Class({ - Name: 'PadChooser', - - _init(device, groupDevices) { +var PadChooser = class { + constructor(device, groupDevices) { this.actor = new St.Button({ style_class: 'pad-chooser-button', toggle_mode: true, x_fill: false, @@ -62,7 +60,7 @@ var PadChooser = new Lang.Class({ this._padChooserMenu.close(true); } }); - }, + } _ensureMenu(devices) { this._padChooserMenu = new PopupMenu.PopupMenu(this.actor, 0.5, St.Side.TOP); @@ -81,33 +79,31 @@ var PadChooser = new Lang.Class({ this.emit('pad-selected', device); }); } - }, + } _onDestroy() { this._padChooserMenu.destroy(); - }, + } update(devices) { if (this._padChooserMenu) this._padChooserMenu.actor.destroy(); this.actor.set_checked(false); this._ensureMenu(devices); - }, + } destroy() { this.actor.destroy(); - }, -}); + } +}; Signals.addSignalMethods(PadChooser.prototype); -var KeybindingEntry = new Lang.Class({ - Name: 'KeybindingEntry', - - _init() { +var KeybindingEntry = class { + constructor() { this.actor = new St.Entry({ hint_text: _("New shortcut…"), style: 'width: 10em' }); this.actor.connect('captured-event', this._onCapturedEvent.bind(this)); - }, + } _onCapturedEvent(actor, event) { if (event.type() != Clutter.EventType.KEY_PRESS) @@ -121,13 +117,11 @@ var KeybindingEntry = new Lang.Class({ this.emit('keybinding-edited', str); return Clutter.EVENT_STOP; } -}); +}; Signals.addSignalMethods(KeybindingEntry.prototype); -var ActionComboBox = new Lang.Class({ - Name: 'ActionComboBox', - - _init() { +var ActionComboBox = class { + constructor() { this.actor = new St.Button({ style_class: 'button' }); this.actor.connect('clicked', this._onButtonClicked.bind(this)); this.actor.set_toggle_mode(true); @@ -175,43 +169,41 @@ var ActionComboBox = new Lang.Class({ } this.setAction(GDesktopEnums.PadButtonAction.NONE); - }, + } _onActionSelected(action) { this.setAction(action); this.popdown(); this.emit('action-selected', action); - }, + } setAction(action) { this._label.set_text(this._actionLabels.get(action)); - }, + } popup() { this._editMenu.open(true); - }, + } popdown() { this._editMenu.close(true); - }, + } _onButtonClicked() { if (this.actor.get_checked()) this.popup(); else this.popdown(); - }, + } setButtonActionsActive(active) { this._buttonItems.forEach(item => { item.setSensitive(active); }); } -}); +}; Signals.addSignalMethods(ActionComboBox.prototype); -var ActionEditor = new Lang.Class({ - Name: 'ActionEditor', - - _init() { +var ActionEditor = class { + constructor() { let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL, spacing: 12 }); @@ -230,7 +222,7 @@ var ActionEditor = new Lang.Class({ x_expand: false}); this._doneButton.connect('clicked', this._onEditingDone.bind(this)); this.actor.add_actor(this._doneButton); - }, + } _updateKeybindingEntryState() { if (this._currentAction == GDesktopEnums.PadButtonAction.KEYBINDING) { @@ -240,7 +232,7 @@ var ActionEditor = new Lang.Class({ } else { this._keybindingEdit.actor.hide(); } - }, + } setSettings(settings, action) { this._buttonSettings = settings; @@ -252,21 +244,21 @@ var ActionEditor = new Lang.Class({ let isButton = (action == Meta.PadActionType.BUTTON); this._actionComboBox.setButtonActionsActive(isButton); - }, + } close() { this._actionComboBox.popdown(); this.actor.hide(); - }, + } _onKeybindingEdited(entry, keybinding) { this._currentKeybinding = keybinding; - }, + } _onActionSelected(menu, action) { this._currentAction = action; this._updateKeybindingEntryState(); - }, + } _storeSettings() { if (!this._buttonSettings) @@ -283,14 +275,14 @@ var ActionEditor = new Lang.Class({ this._buttonSettings.set_string('keybinding', keybinding); else this._buttonSettings.reset('keybinding'); - }, + } _onEditingDone() { this._storeSettings(); this.close(); this.emit('done'); } -}); +}; Signals.addSignalMethods(ActionEditor.prototype); var PadDiagram = new Lang.Class({ @@ -629,10 +621,8 @@ var PadDiagram = new Lang.Class({ } }); -var PadOsd = new Lang.Class({ - Name: 'PadOsd', - - _init(padDevice, settings, imagePath, editionMode, monitorIndex) { +var PadOsd = class { + constructor(padDevice, settings, imagePath, editionMode, monitorIndex) { this.padDevice = padDevice; this._groupPads = [ padDevice ]; this._settings = settings; @@ -752,7 +742,7 @@ var PadOsd = new Lang.Class({ this._syncEditionMode(); Main.pushModal(this.actor); - }, + } _updatePadChooser() { if (this._groupPads.length > 1) { @@ -769,7 +759,7 @@ var PadOsd = new Lang.Class({ this._padChooser.destroy(); this._padChooser = null; } - }, + } _requestForOtherPad(pad) { if (pad == this.padDevice || @@ -779,13 +769,13 @@ var PadOsd = new Lang.Class({ let editionMode = this._editionMode; this.destroy(); global.display.request_pad_osd(pad, editionMode); - }, + } _createLabel(type, number, dir) { let str = global.display.get_pad_action_label(this.padDevice, type, number); let label = new St.Label({ text: str ? str : _("None") }); this._padDiagram.addLabel(label, type, number, dir); - }, + } _onCapturedEvent(actor, event) { if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS && @@ -830,7 +820,7 @@ var PadOsd = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } _syncEditionMode() { this._editButton.set_reactive(!this._editionMode); @@ -850,7 +840,7 @@ var PadOsd = new Lang.Class({ } this._titleLabel.clutter_text.set_markup('' + title + ''); - }, + } _isEditedAction(type, number, dir) { if (!this._editedAction) @@ -859,7 +849,7 @@ var PadOsd = new Lang.Class({ return (this._editedAction.type == type && this._editedAction.number == number && this._editedAction.dir == dir); - }, + } _followUpActionEdition(str) { let { type, dir, number, mode } = this._editedAction; @@ -876,7 +866,7 @@ var PadOsd = new Lang.Class({ this._startStripActionEdition(number, DOWN, mode); return true; - }, + } _endActionEdition() { this._actionEditor.close(); @@ -893,7 +883,7 @@ var PadOsd = new Lang.Class({ } this._editedActionSettings = null; - }, + } _startActionEdition(key, type, number, dir, mode) { if (this._isEditedAction(type, number, dir)) @@ -907,25 +897,25 @@ var PadOsd = new Lang.Class({ settingsPath); this._actionEditor.setSettings(this._editedActionSettings, type); this._padDiagram.startEdition(type, number, dir); - }, + } _startButtonActionEdition(button) { let ch = String.fromCharCode('A'.charCodeAt() + button); let key = 'button' + ch; this._startActionEdition(key, Meta.PadActionType.BUTTON, button); - }, + } _startRingActionEdition(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(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); - }, + } setEditionMode(editionMode) { if (this._editionMode == editionMode) @@ -933,11 +923,11 @@ var PadOsd = new Lang.Class({ this._editionMode = editionMode; this._syncEditionMode(); - }, + } destroy() { this.actor.destroy(); - }, + } _onDestroy() { Main.popModal(this.actor); @@ -961,19 +951,17 @@ var PadOsd = new Lang.Class({ this.actor = null; this.emit('closed'); } -}); +}; Signals.addSignalMethods(PadOsd.prototype); const PadOsdIface = loadInterfaceXML('org.gnome.Shell.Wacom.PadOsd'); -var PadOsdService = new Lang.Class({ - Name: 'PadOsdService', - - _init() { +var PadOsdService = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(PadOsdIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Wacom'); Gio.DBus.session.own_name('org.gnome.Shell.Wacom.PadOsd', Gio.BusNameOwnerFlags.REPLACE, null, null); - }, + } ShowAsync(params, invocation) { let [deviceNode, editionMode] = params; @@ -997,5 +985,5 @@ var PadOsdService = new Lang.Class({ global.display.request_pad_osd(padDevice, editionMode); invocation.return_value(null); } -}); +}; Signals.addSignalMethods(PadOsdService.prototype); diff --git a/js/ui/panel.js b/js/ui/panel.js index 1c6445a35..13eab5bed 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -488,16 +488,14 @@ var ActivitiesButton = new Lang.Class({ } }); -var PanelCorner = new Lang.Class({ - Name: 'PanelCorner', - - _init(side) { +var PanelCorner = class { + constructor(side) { this._side = side; this.actor = new St.DrawingArea({ style_class: 'panel-corner' }); this.actor.connect('style-changed', this._styleChanged.bind(this)); this.actor.connect('repaint', this._repaint.bind(this)); - }, + } _findRightmostButton(container) { if (!container.get_children) @@ -522,7 +520,7 @@ var PanelCorner = new Lang.Class({ return this._findRightmostButton(children[index]); return children[index]; - }, + } _findLeftmostButton(container) { if (!container.get_children) @@ -547,7 +545,7 @@ var PanelCorner = new Lang.Class({ return this._findLeftmostButton(children[index]); return children[index]; - }, + } setStyleParent(box) { let side = this._side; @@ -593,7 +591,7 @@ var PanelCorner = new Lang.Class({ // the .panel-button default button.style = 'transition-duration: 0ms'; } - }, + } _repaint() { let node = this.actor.get_theme_node(); @@ -641,7 +639,7 @@ var PanelCorner = new Lang.Class({ } cr.$dispose(); - }, + } _styleChanged() { let node = this.actor.get_theme_node(); @@ -652,7 +650,7 @@ var PanelCorner = new Lang.Class({ this.actor.set_size(cornerRadius, borderWidth + cornerRadius); this.actor.set_anchor_point(0, borderWidth); } -}); +}; var AggregateLayout = new Lang.Class({ Name: 'AggregateLayout', diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js index 401419dec..d6c7b10b7 100644 --- a/js/ui/panelMenu.js +++ b/js/ui/panelMenu.js @@ -210,19 +210,17 @@ var Button = new Lang.Class({ * of an icon and a menu section, which will be composed into the * aggregate menu. */ -var SystemIndicator = new Lang.Class({ - Name: 'SystemIndicator', - - _init() { +var SystemIndicator = class { + constructor() { this.indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box', reactive: true }); this.indicators.hide(); this.menu = new PopupMenu.PopupMenuSection(); - }, + } _syncIndicatorsVisible() { this.indicators.visible = this.indicators.get_children().some(a => a.visible); - }, + } _addIndicator() { let icon = new St.Icon({ style_class: 'system-status-icon' }); @@ -231,5 +229,5 @@ var SystemIndicator = new Lang.Class({ this._syncIndicatorsVisible(); return icon; } -}); +}; Signals.addSignalMethods(SystemIndicator.prototype); diff --git a/js/ui/pointerWatcher.js b/js/ui/pointerWatcher.js index 3b1fbdb8f..26bb28527 100644 --- a/js/ui/pointerWatcher.js +++ b/js/ui/pointerWatcher.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const GLib = imports.gi.GLib; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Meta = imports.gi.Meta; const GnomeDesktop = imports.gi.GnomeDesktop; @@ -22,14 +21,12 @@ function getPointerWatcher() { return _pointerWatcher; } -var PointerWatch = new Lang.Class({ - Name: 'PointerWatch', - - _init(watcher, interval, callback) { +var PointerWatch = class { + constructor(watcher, interval, callback) { this.watcher = watcher; this.interval = interval; this.callback = callback; - }, + } // remove: // remove this watch. This function may safely be called @@ -37,19 +34,17 @@ var PointerWatch = new Lang.Class({ remove() { this.watcher._removeWatch(this); } -}); +}; -var PointerWatcher = new Lang.Class({ - Name: 'PointerWatcher', - - _init() { +var PointerWatcher = class { + constructor() { this._idleMonitor = Meta.IdleMonitor.get_core(); this._idleMonitor.add_idle_watch(IDLE_TIME, this._onIdleMonitorBecameIdle.bind(this)); this._idle = this._idleMonitor.get_idletime() > IDLE_TIME; this._watches = []; this.pointerX = null; this.pointerY = null; - }, + } // addWatch: // @interval: hint as to the time resolution needed. When the user is @@ -68,7 +63,7 @@ var PointerWatcher = new Lang.Class({ this._watches.push(watch); this._updateTimeout(); return watch; - }, + } _removeWatch(watch) { for (let i = 0; i < this._watches.length; i++) { @@ -78,19 +73,19 @@ var PointerWatcher = new Lang.Class({ return; } } - }, + } _onIdleMonitorBecameActive(monitor) { this._idle = false; this._updatePointer(); this._updateTimeout(); - }, + } _onIdleMonitorBecameIdle(monitor) { this._idle = true; this._idleMonitor.add_user_active_watch(this._onIdleMonitorBecameActive.bind(this)); this._updateTimeout(); - }, + } _updateTimeout() { if (this._timeoutId) { @@ -108,12 +103,12 @@ var PointerWatcher = new Lang.Class({ this._timeoutId = Mainloop.timeout_add(minInterval, this._onTimeout.bind(this)); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._onTimeout'); - }, + } _onTimeout() { this._updatePointer(); return GLib.SOURCE_CONTINUE; - }, + } _updatePointer() { let [x, y, mods] = global.get_pointer(); @@ -130,4 +125,4 @@ var PointerWatcher = new Lang.Class({ i++; } } -}); +}; diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index b0a919d1b..02ab885d4 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter; const Gtk = imports.gi.Gtk; const Gio = imports.gi.Gio; const GObject = imports.gi.GObject; -const Lang = imports.lang; const Shell = imports.gi.Shell; const Signals = imports.signals; const St = imports.gi.St; @@ -58,10 +57,8 @@ function arrowIcon(side) { return arrow; } -var PopupBaseMenuItem = new Lang.Class({ - Name: 'PopupBaseMenuItem', - - _init(params) { +var PopupBaseMenuItem = class { + constructor(params) { params = Params.parse (params, { reactive: true, activate: true, hover: true, @@ -103,30 +100,30 @@ var PopupBaseMenuItem = new Lang.Class({ this.actor.connect('key-focus-in', this._onKeyFocusIn.bind(this)); this.actor.connect('key-focus-out', this._onKeyFocusOut.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this)); - }, + } _getTopMenu() { if (this._parent) return this._parent._getTopMenu(); else return this; - }, + } _setParent(parent) { this._parent = parent; - }, + } _onButtonPressEvent(actor, event) { // This is the CSS active state this.actor.add_style_pseudo_class ('active'); return Clutter.EVENT_PROPAGATE; - }, + } _onButtonReleaseEvent(actor, event) { this.actor.remove_style_pseudo_class ('active'); this.activate(event); return Clutter.EVENT_STOP; - }, + } _onTouchEvent(actor, event) { if (event.type() == Clutter.EventType.TOUCH_END) { @@ -138,7 +135,7 @@ var PopupBaseMenuItem = new Lang.Class({ this.actor.add_style_pseudo_class ('active'); } return Clutter.EVENT_PROPAGATE; - }, + } _onKeyPressEvent(actor, event) { let state = event.get_state(); @@ -158,23 +155,23 @@ var PopupBaseMenuItem = new Lang.Class({ return Clutter.EVENT_STOP; } return Clutter.EVENT_PROPAGATE; - }, + } _onKeyFocusIn(actor) { this.setActive(true); - }, + } _onKeyFocusOut(actor) { this.setActive(false); - }, + } _onHoverChanged(actor) { this.setActive(actor.hover); - }, + } activate(event) { this.emit('activate', event); - }, + } setActive(active) { let activeChanged = active != this.active; @@ -195,7 +192,7 @@ var PopupBaseMenuItem = new Lang.Class({ } this.emit('active-changed', active); } - }, + } syncSensitive() { let sensitive = this.getSensitive(); @@ -203,12 +200,12 @@ var PopupBaseMenuItem = new Lang.Class({ this.actor.can_focus = sensitive; this.emit('sensitive-changed'); return sensitive; - }, + } getSensitive() { let parentSensitive = this._parent ? this._parent.getSensitive() : true; return this._activatable && this._sensitive && parentSensitive; - }, + } setSensitive(sensitive) { if (this._sensitive == sensitive) @@ -216,15 +213,15 @@ var PopupBaseMenuItem = new Lang.Class({ this._sensitive = sensitive; this.syncSensitive(); - }, + } destroy() { this.actor.destroy(); - }, + } _onDestroy() { this.emit('destroy'); - }, + } setOrnament(ornament) { if (ornament == this._ornament) @@ -243,29 +240,23 @@ var PopupBaseMenuItem = new Lang.Class({ this.actor.remove_accessible_state(Atk.StateType.CHECKED); } } -}); +}; Signals.addSignalMethods(PopupBaseMenuItem.prototype); -var PopupMenuItem = new Lang.Class({ - Name: 'PopupMenuItem', - Extends: PopupBaseMenuItem, - - _init(text, params) { - this.parent(params); +var PopupMenuItem = class extends PopupBaseMenuItem { + constructor(text, params) { + super(params); this.label = new St.Label({ text: text }); this.actor.add_child(this.label); this.actor.label_actor = this.label } -}); +}; -var PopupSeparatorMenuItem = new Lang.Class({ - Name: 'PopupSeparatorMenuItem', - Extends: PopupBaseMenuItem, - - _init(text) { - this.parent({ reactive: false, - can_focus: false}); +var PopupSeparatorMenuItem = class extends PopupBaseMenuItem { + constructor(text) { + super({ reactive: false, + can_focus: false}); this.label = new St.Label({ text: text || '' }); this.actor.add(this.label); @@ -279,17 +270,15 @@ var PopupSeparatorMenuItem = new Lang.Class({ y_expand: true, y_align: Clutter.ActorAlign.CENTER }); this.actor.add(this._separator, { expand: true }); - }, + } _syncVisibility() { this.label.visible = this.label.text != ''; } -}); +}; -var Switch = new Lang.Class({ - Name: 'Switch', - - _init(state) { +var Switch = class { + constructor(state) { this.actor = new St.Bin({ style_class: 'toggle-switch', accessible_role: Atk.Role.CHECK_BOX, can_focus: true }); @@ -300,7 +289,7 @@ var Switch = new Lang.Class({ // simply result in invisible toggle switches. this.actor.add_style_class_name(_("toggle-switch-us")); this.setToggleState(state); - }, + } setToggleState(state) { if (state) @@ -308,19 +297,16 @@ var Switch = new Lang.Class({ else this.actor.remove_style_pseudo_class('checked'); this.state = state; - }, + } toggle() { this.setToggleState(!this.state); } -}); +}; -var PopupSwitchMenuItem = new Lang.Class({ - Name: 'PopupSwitchMenuItem', - Extends: PopupBaseMenuItem, - - _init(text, active, params) { - this.parent(params); +var PopupSwitchMenuItem = class extends PopupBaseMenuItem { + constructor(text, active, params) { + super(params); this.label = new St.Label({ text: text }); this._switch = new Switch(active); @@ -338,7 +324,7 @@ var PopupSwitchMenuItem = new Lang.Class({ style_class: 'popup-status-menu-item' }); this._statusBin.child = this._switch.actor; - }, + } setStatus(text) { if (text != null) { @@ -352,7 +338,7 @@ var PopupSwitchMenuItem = new Lang.Class({ this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM; } this.checkAccessibleState(); - }, + } activate(event) { if (this._switch.actor.mapped) { @@ -365,23 +351,23 @@ var PopupSwitchMenuItem = new Lang.Class({ event.get_key_symbol() == Clutter.KEY_space) return; - this.parent(event); - }, + super.activate(event); + } toggle() { this._switch.toggle(); this.emit('toggled', this._switch.state); this.checkAccessibleState(); - }, + } get state() { return this._switch.state; - }, + } setToggleState(state) { this._switch.setToggleState(state); this.checkAccessibleState(); - }, + } checkAccessibleState() { switch (this.actor.accessible_role) { @@ -395,14 +381,11 @@ var PopupSwitchMenuItem = new Lang.Class({ this.actor.remove_accessible_state (Atk.StateType.CHECKED); } } -}); +}; -var PopupImageMenuItem = new Lang.Class({ - Name: 'PopupImageMenuItem', - Extends: PopupBaseMenuItem, - - _init(text, icon, params) { - this.parent(params); +var PopupImageMenuItem = class extends PopupBaseMenuItem { + constructor(text, icon, params) { + super(params); this._icon = new St.Icon({ style_class: 'popup-menu-icon', x_align: Clutter.ActorAlign.END }); @@ -412,7 +395,7 @@ var PopupImageMenuItem = new Lang.Class({ this.actor.label_actor = this.label; this.setIcon(icon); - }, + } setIcon(icon) { // The 'icon' parameter can be either a Gio.Icon or a string. @@ -421,13 +404,13 @@ var PopupImageMenuItem = new Lang.Class({ else this._icon.icon_name = icon; } -}); +}; -var PopupMenuBase = new Lang.Class({ - Name: 'PopupMenuBase', - Abstract: true, +var PopupMenuBase = class { + constructor(sourceActor, styleClass) { + if (new.target === PopupMenuBase) + throw new TypeError('Cannot instantiate abstract class ' + new.target.name); - _init(sourceActor, styleClass) { this.sourceActor = sourceActor; this._parent = null; @@ -451,33 +434,33 @@ var PopupMenuBase = new Lang.Class({ this._sensitive = true; this._sessionUpdatedId = Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); - }, + } _getTopMenu() { if (this._parent) return this._parent._getTopMenu(); else return this; - }, + } _setParent(parent) { this._parent = parent; - }, + } getSensitive() { let parentSensitive = this._parent ? this._parent.getSensitive() : true; return this._sensitive && parentSensitive; - }, + } setSensitive(sensitive) { this._sensitive = sensitive; this.emit('sensitive-changed'); - }, + } _sessionUpdated() { this._setSettingsVisibility(Main.sessionMode.allowSettings); this.close(); - }, + } addAction(title, callback, icon) { let menuItem; @@ -492,7 +475,7 @@ var PopupMenuBase = new Lang.Class({ }); return menuItem; - }, + } addSettingsAction(title, desktopFile) { let menuItem = this.addAction(title, () => { @@ -511,14 +494,14 @@ var PopupMenuBase = new Lang.Class({ this._settingsActions[desktopFile] = menuItem; return menuItem; - }, + } _setSettingsVisibility(visible) { for (let id in this._settingsActions) { let item = this._settingsActions[id]; item.actor.visible = visible; } - }, + } isEmpty() { let hasVisibleChildren = this.box.get_children().some(child => { @@ -528,21 +511,21 @@ var PopupMenuBase = new Lang.Class({ }); return !hasVisibleChildren; - }, + } itemActivated(animate) { if (animate == undefined) animate = BoxPointer.PopupAnimation.FULL; this._getTopMenu().close(animate); - }, + } _subMenuActiveChanged(submenu, submenuItem) { if (this._activeMenuItem && this._activeMenuItem != submenuItem) this._activeMenuItem.setActive(false); this._activeMenuItem = submenuItem; this.emit('active-changed', submenuItem); - }, + } _connectItemSignals(menuItem) { menuItem._activeChangeId = menuItem.connect('active-changed', (menuItem, active) => { @@ -590,7 +573,7 @@ var PopupMenuBase = new Lang.Class({ if (menuItem == this._activeMenuItem) this._activeMenuItem = null; }); - }, + } _updateSeparatorVisibility(menuItem) { if (menuItem.label.text) @@ -626,7 +609,7 @@ var PopupMenuBase = new Lang.Class({ } menuItem.actor.show(); - }, + } moveMenuItem(menuItem, position) { let items = this._getMenuItems(); @@ -644,7 +627,7 @@ var PopupMenuBase = new Lang.Class({ } else { this.box.set_child_above_sibling(menuItem.actor, null); } - }, + } addMenuItem(menuItem, position) { let before_item = null; @@ -721,13 +704,13 @@ var PopupMenuBase = new Lang.Class({ menuItem._setParent(this); this.length++; - }, + } _getMenuItems() { return this.box.get_children().map(a => a._delegate).filter(item => { return item instanceof PopupBaseMenuItem || item instanceof PopupMenuSection; }); - }, + } get firstMenuItem() { let items = this._getMenuItems(); @@ -735,11 +718,11 @@ var PopupMenuBase = new Lang.Class({ return items[0]; else return null; - }, + } get numMenuItems() { return this._getMenuItems().length; - }, + } removeAll() { let children = this._getMenuItems(); @@ -747,14 +730,14 @@ var PopupMenuBase = new Lang.Class({ let item = children[i]; item.destroy(); } - }, + } toggle() { if (this.isOpen) this.close(BoxPointer.PopupAnimation.FULL); else this.open(BoxPointer.PopupAnimation.FULL); - }, + } destroy() { this.close(); @@ -766,15 +749,12 @@ var PopupMenuBase = new Lang.Class({ Main.sessionMode.disconnect(this._sessionUpdatedId); this._sessionUpdatedId = 0; } -}); +}; Signals.addSignalMethods(PopupMenuBase.prototype); -var PopupMenu = new Lang.Class({ - Name: 'PopupMenu', - Extends: PopupMenuBase, - - _init(sourceActor, arrowAlignment, arrowSide) { - this.parent(sourceActor, 'popup-menu-content'); +var PopupMenu = class extends PopupMenuBase { + constructor(sourceActor, arrowAlignment, arrowSide) { + super(sourceActor, 'popup-menu-content'); this._arrowAlignment = arrowAlignment; this._arrowSide = arrowSide; @@ -798,14 +778,14 @@ var PopupMenu = new Lang.Class({ this._onKeyPress.bind(this)); this._openedSubMenu = null; - }, + } _setOpenedSubMenu(submenu) { if (this._openedSubMenu) this._openedSubMenu.close(true); this._openedSubMenu = submenu; - }, + } _onKeyPress(actor, event) { // Disable toggling the menu by keyboard @@ -853,16 +833,15 @@ var PopupMenu = new Lang.Class({ return Clutter.EVENT_STOP; } else return Clutter.EVENT_PROPAGATE; - }, - + } setArrowOrigin(origin) { this._boxPointer.setArrowOrigin(origin); - }, + } setSourceAlignment(alignment) { this._boxPointer.setSourceAlignment(alignment); - }, + } open(animate) { if (this.isOpen) @@ -879,7 +858,7 @@ var PopupMenu = new Lang.Class({ this.actor.raise_top(); this.emit('open-state-changed', true); - }, + } close(animate) { if (this._activeMenuItem) @@ -896,43 +875,38 @@ var PopupMenu = new Lang.Class({ this.isOpen = false; this.emit('open-state-changed', false); - }, + } destroy() { if (this._keyPressId) this.sourceActor.disconnect(this._keyPressId); - this.parent(); + super.destroy(); } -}); +}; -var PopupDummyMenu = new Lang.Class({ - Name: 'PopupDummyMenu', - - _init(sourceActor) { +var PopupDummyMenu = class { + constructor(sourceActor) { this.sourceActor = sourceActor; this.actor = sourceActor; this.actor._delegate = this; - }, + } getSensitive() { return true; - }, + } - open() { this.emit('open-state-changed', true); }, - close() { this.emit('open-state-changed', false); }, - toggle() {}, + open() { this.emit('open-state-changed', true); } + close() { this.emit('open-state-changed', false); } + toggle() {} destroy() { this.emit('destroy'); - }, -}); + } +}; Signals.addSignalMethods(PopupDummyMenu.prototype); -var PopupSubMenu = new Lang.Class({ - Name: 'PopupSubMenu', - Extends: PopupMenuBase, - - _init(sourceActor, sourceArrow) { - this.parent(sourceActor); +var PopupSubMenu = class extends PopupMenuBase { + constructor(sourceActor, sourceArrow) { + super(sourceActor); this._arrow = sourceArrow; @@ -948,7 +922,7 @@ var PopupSubMenu = new Lang.Class({ this.actor.clip_to_allocation = true; this.actor.connect('key-press-event', this._onKeyPressEvent.bind(this)); this.actor.hide(); - }, + } _needsScrollbar() { let topMenu = this._getTopMenu(); @@ -957,11 +931,11 @@ var PopupSubMenu = new Lang.Class({ let topMaxHeight = topThemeNode.get_max_height(); return topMaxHeight >= 0 && topNaturalHeight >= topMaxHeight; - }, + } getSensitive() { return this._sensitive && this.sourceActor._delegate.getSensitive(); - }, + } open(animate) { if (this.isOpen) @@ -1017,7 +991,7 @@ var PopupSubMenu = new Lang.Class({ } else { this._arrow.rotation_angle_z = targetAngle; } - }, + } close(animate) { if (!this.isOpen) @@ -1052,7 +1026,7 @@ var PopupSubMenu = new Lang.Class({ this._arrow.rotation_angle_z = 0; this.actor.hide(); } - }, + } _onKeyPressEvent(actor, event) { // Move focus back to parent menu if the user types Left. @@ -1065,7 +1039,7 @@ var PopupSubMenu = new Lang.Class({ return Clutter.EVENT_PROPAGATE; } -}); +}; /** * PopupMenuSection: @@ -1075,30 +1049,24 @@ var PopupSubMenu = new Lang.Class({ * can add it to another menu), but is completely transparent * to the user */ -var PopupMenuSection = new Lang.Class({ - Name: 'PopupMenuSection', - Extends: PopupMenuBase, - - _init() { - this.parent(); +var PopupMenuSection = class extends PopupMenuBase { + constructor() { + super(); this.actor = this.box; this.actor._delegate = this; this.isOpen = true; - }, + } // deliberately ignore any attempt to open() or close(), but emit the // corresponding signal so children can still pick it up - open() { this.emit('open-state-changed', true); }, - close() { this.emit('open-state-changed', false); }, -}); + open() { this.emit('open-state-changed', true); } + close() { this.emit('open-state-changed', false); } +}; -var PopupSubMenuMenuItem = new Lang.Class({ - Name: 'PopupSubMenuMenuItem', - Extends: PopupBaseMenuItem, - - _init(text, wantIcon) { - this.parent(); +var PopupSubMenuMenuItem = class extends PopupBaseMenuItem { + constructor(text, wantIcon) { + super(); this.actor.add_style_class_name('popup-submenu-menu-item'); @@ -1128,19 +1096,19 @@ var PopupSubMenuMenuItem = new Lang.Class({ this.menu = new PopupSubMenu(this.actor, this._triangle); this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this)); - }, + } _setParent(parent) { - this.parent(parent); + super._setParent(parent); this.menu._setParent(parent); - }, + } syncSensitive() { - let sensitive = this.parent(); + let sensitive = super.syncSensitive(); this._triangle.visible = sensitive; if (!sensitive) this.menu.close(false); - }, + } _subMenuOpenStateChanged(menu, open) { if (open) { @@ -1154,28 +1122,28 @@ var PopupSubMenuMenuItem = new Lang.Class({ this.actor.remove_accessible_state (Atk.StateType.EXPANDED); this.actor.remove_style_pseudo_class('checked'); } - }, + } destroy() { this.menu.destroy(); - this.parent(); - }, + super.destroy(); + } setSubmenuShown(open) { if (open) this.menu.open(BoxPointer.PopupAnimation.FULL); else this.menu.close(BoxPointer.PopupAnimation.FULL); - }, + } _setOpenState(open) { this.setSubmenuShown(open); - }, + } _getOpenState() { return this.menu.isOpen; - }, + } _onKeyPressEvent(actor, event) { let symbol = event.get_key_symbol(); @@ -1189,12 +1157,12 @@ var PopupSubMenuMenuItem = new Lang.Class({ return Clutter.EVENT_STOP; } - return this.parent(actor, event); - }, + return super._onKeyPressEvent(actor, event); + } activate(event) { this._setOpenState(true); - }, + } _onButtonReleaseEvent(actor) { // Since we override the parent, we need to manage what the parent does @@ -1202,7 +1170,7 @@ var PopupSubMenuMenuItem = new Lang.Class({ this.actor.remove_style_pseudo_class ('active'); this._setOpenState(!this._getOpenState()); return Clutter.EVENT_PROPAGATE; - }, + } _onTouchEvent(actor, event) { if (event.type() == Clutter.EventType.TOUCH_END) { @@ -1213,21 +1181,19 @@ var PopupSubMenuMenuItem = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; } -}); +}; /* Basic implementation of a menu manager. * Call addMenu to add menus */ -var PopupMenuManager = new Lang.Class({ - Name: 'PopupMenuManager', - - _init(owner, grabParams) { +var PopupMenuManager = class { + constructor(owner, grabParams) { grabParams = Params.parse(grabParams, { actionMode: Shell.ActionMode.POPUP }); this._owner = owner; this._grabHelper = new GrabHelper.GrabHelper(owner.actor, grabParams); this._menus = []; - }, + } addMenu(menu, position) { if (this._findMenu(menu) > -1) @@ -1256,7 +1222,7 @@ var PopupMenuManager = new Lang.Class({ this._menus.push(menudata); else this._menus.splice(position, 0, menudata); - }, + } removeMenu(menu) { if (menu == this.activeMenu) @@ -1278,7 +1244,7 @@ var PopupMenuManager = new Lang.Class({ if (menu.sourceActor) this._grabHelper.removeActor(menu.sourceActor); this._menus.splice(position, 1); - }, + } get activeMenu() { let firstGrab = this._grabHelper.grabStack[0]; @@ -1286,11 +1252,11 @@ var PopupMenuManager = new Lang.Class({ return firstGrab.actor._delegate; else return null; - }, + } ignoreRelease() { return this._grabHelper.ignoreRelease(); - }, + } _onMenuOpenState(menu, open) { if (open) { @@ -1303,12 +1269,12 @@ var PopupMenuManager = new Lang.Class({ } else { this._grabHelper.ungrab({ actor: menu.actor }); } - }, + } _changeMenu(newMenu) { newMenu.open(this.activeMenu ? BoxPointer.PopupAnimation.FADE : BoxPointer.PopupAnimation.FULL); - }, + } _onMenuSourceEnter(menu) { if (!this._grabHelper.grabbed) @@ -1319,11 +1285,11 @@ var PopupMenuManager = new Lang.Class({ this._changeMenu(menu); return Clutter.EVENT_PROPAGATE; - }, + } _onMenuDestroy(menu) { this.removeMenu(menu); - }, + } _findMenu(item) { for (let i = 0; i < this._menus.length; i++) { @@ -1332,7 +1298,7 @@ var PopupMenuManager = new Lang.Class({ return i; } return -1; - }, + } _closeMenu(isUser, menu) { // If this isn't a user action, we called close() @@ -1341,4 +1307,4 @@ var PopupMenuManager = new Lang.Class({ if (isUser) menu.close(BoxPointer.PopupAnimation.FULL); } -}); +}; diff --git a/js/ui/remoteMenu.js b/js/ui/remoteMenu.js index 78a2e2934..0cdcac8c1 100644 --- a/js/ui/remoteMenu.js +++ b/js/ui/remoteMenu.js @@ -4,7 +4,6 @@ const Atk = imports.gi.Atk; const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; const Gio = imports.gi.Gio; -const Lang = imports.lang; const Shell = imports.gi.Shell; const ShellMenu = imports.gi.ShellMenu; const St = imports.gi.St; @@ -38,10 +37,8 @@ function _removeItem(menu, position) { items[position].destroy(); } -var RemoteMenuSeparatorItemMapper = new Lang.Class({ - Name: 'RemoteMenuSeparatorItemMapper', - - _init(trackerItem) { +var RemoteMenuSeparatorItemMapper = class { + constructor(trackerItem) { this._trackerItem = trackerItem; this.menuItem = new PopupMenu.PopupSeparatorMenuItem(); this._trackerItem.connect('notify::label', this._updateLabel.bind(this)); @@ -50,36 +47,31 @@ var RemoteMenuSeparatorItemMapper = new Lang.Class({ this.menuItem.connect('destroy', () => { trackerItem.run_dispose(); }); - }, + } _updateLabel() { this.menuItem.label.text = stripMnemonics(this._trackerItem.label); - }, -}); + } +}; -var RequestSubMenu = new Lang.Class({ - Name: 'RequestSubMenu', - Extends: PopupMenu.PopupSubMenuMenuItem, - - _init() { - this.parent(''); +var RequestSubMenu = class extends PopupMenu.PopupSubMenuMenuItem { + constructor() { + super(''); this._requestOpen = false; - }, + } _setOpenState(open) { this.emit('request-open', open); this._requestOpen = open; - }, + } _getOpenState() { return this._requestOpen; - }, -}); + } +}; -var RemoteMenuSubmenuItemMapper = new Lang.Class({ - Name: 'RemoteMenuSubmenuItemMapper', - - _init(trackerItem) { +var RemoteMenuSubmenuItemMapper = class { + constructor(trackerItem) { this._trackerItem = trackerItem; this.menuItem = new RequestSubMenu(); this._trackerItem.connect('notify::label', this._updateLabel.bind(this)); @@ -100,22 +92,19 @@ var RemoteMenuSubmenuItemMapper = new Lang.Class({ this.menuItem.connect('destroy', () => { trackerItem.run_dispose(); }); - }, + } destroy() { this._tracker.destroy(); - this.parent(); - }, + } _updateLabel() { this.menuItem.label.text = stripMnemonics(this._trackerItem.label); - }, -}); + } +}; -var RemoteMenuItemMapper = new Lang.Class({ - Name: 'RemoteMenuItemMapper', - - _init(trackerItem) { +var RemoteMenuItemMapper = class { + constructor(trackerItem) { this._trackerItem = trackerItem; this.menuItem = new PopupMenu.PopupBaseMenuItem(); @@ -146,20 +135,20 @@ var RemoteMenuItemMapper = new Lang.Class({ this.menuItem.connect('destroy', () => { trackerItem.run_dispose(); }); - }, + } _updateIcon() { this._icon.gicon = this._trackerItem.icon; this._icon.visible = (this._icon.gicon != null); - }, + } _updateLabel() { this._label.text = stripMnemonics(this._trackerItem.label); - }, + } _updateSensitivity() { this.menuItem.setSensitive(this._trackerItem.sensitive); - }, + } _updateDecoration() { let ornamentForRole = {}; @@ -171,7 +160,7 @@ var RemoteMenuItemMapper = new Lang.Class({ ornament = ornamentForRole[this._trackerItem.role]; this.menuItem.setOrnament(ornament); - }, + } _updateRole() { let a11yRoles = {}; @@ -183,15 +172,12 @@ var RemoteMenuItemMapper = new Lang.Class({ this.menuItem.actor.accessible_role = a11yRole; this._updateDecoration(); - }, -}); + } +}; -var RemoteMenu = new Lang.Class({ - Name: 'RemoteMenu', - Extends: PopupMenu.PopupMenu, - - _init(sourceActor, model, actionGroup) { - this.parent(sourceActor, 0.0, St.Side.TOP); +var RemoteMenu = class extends PopupMenu.PopupMenu { + constructor(sourceActor, model, actionGroup) { + super(sourceActor, 0.0, St.Side.TOP); this._model = model; this._actionGroup = actionGroup; @@ -200,14 +186,14 @@ var RemoteMenu = new Lang.Class({ null, /* action namespace */ _insertItem.bind(null, this), _removeItem.bind(null, this)); - }, + } get actionGroup() { return this._actionGroup; - }, + } destroy() { this._tracker.destroy(); - this.parent(); - }, -}); + super.destroy(); + } +}; diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js index 3b847af5b..b4e9202df 100644 --- a/js/ui/remoteSearch.js +++ b/js/ui/remoteSearch.js @@ -3,7 +3,6 @@ const GdkPixbuf = imports.gi.GdkPixbuf; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const St = imports.gi.St; const Shell = imports.gi.Shell; @@ -190,10 +189,8 @@ function loadRemoteSearchProviders(searchSettings, callback) { callback(loadedProviders); } -var RemoteSearchProvider = new Lang.Class({ - Name: 'RemoteSearchProvider', - - _init(appInfo, dbusName, dbusPath, autoStart, proxyInfo) { +var RemoteSearchProvider = class { + constructor(appInfo, dbusName, dbusPath, autoStart, proxyInfo) { if (!proxyInfo) proxyInfo = SearchProviderProxyInfo; @@ -215,7 +212,7 @@ var RemoteSearchProvider = new Lang.Class({ this.id = appInfo.get_id(); this.isRemoteProvider = true; this.canLaunchSearch = false; - }, + } createIcon(size, meta) { let gicon = null; @@ -236,7 +233,7 @@ var RemoteSearchProvider = new Lang.Class({ icon = new St.Icon({ gicon: gicon, icon_size: size }); return icon; - }, + } filterResults(results, maxNumber) { if (results.length <= maxNumber) @@ -246,7 +243,7 @@ var RemoteSearchProvider = new Lang.Class({ let specialResults = results.filter(r => r.startsWith('special:')); return regularResults.slice(0, maxNumber).concat(specialResults.slice(0, maxNumber)); - }, + } _getResultsFinished(results, error, callback) { if (error) { @@ -259,7 +256,7 @@ var RemoteSearchProvider = new Lang.Class({ } callback(results[0]); - }, + } getInitialResultSet(terms, callback, cancellable) { this.proxy.GetInitialResultSetRemote(terms, @@ -267,7 +264,7 @@ var RemoteSearchProvider = new Lang.Class({ this._getResultsFinished(results, error, callback); }, cancellable); - }, + } getSubsearchResultSet(previousResults, newTerms, callback, cancellable) { this.proxy.GetSubsearchResultSetRemote(previousResults, newTerms, @@ -275,7 +272,7 @@ var RemoteSearchProvider = new Lang.Class({ this._getResultsFinished(results, error, callback); }, cancellable); - }, + } _getResultMetasFinished(results, error, callback) { if (error) { @@ -302,7 +299,7 @@ var RemoteSearchProvider = new Lang.Class({ clipboardText: metas[i]['clipboardText'] }); } callback(resultMetas); - }, + } getResultMetas(ids, callback, cancellable) { this.proxy.GetResultMetasRemote(ids, @@ -310,11 +307,11 @@ var RemoteSearchProvider = new Lang.Class({ this._getResultMetasFinished(results, error, callback); }, cancellable); - }, + } activateResult(id) { this.proxy.ActivateResultRemote(id); - }, + } launchSearch(terms) { // the provider is not compatible with the new version of the interface, launch @@ -322,23 +319,20 @@ var RemoteSearchProvider = new Lang.Class({ log('Search provider ' + this.appInfo.get_id() + ' does not implement LaunchSearch'); this.appInfo.launch([], global.create_app_launch_context(0, -1)); } -}); +}; -var RemoteSearchProvider2 = new Lang.Class({ - Name: 'RemoteSearchProvider2', - Extends: RemoteSearchProvider, - - _init(appInfo, dbusName, dbusPath, autoStart) { - this.parent(appInfo, dbusName, dbusPath, autoStart, SearchProvider2ProxyInfo); +var RemoteSearchProvider2 = class extends RemoteSearchProvider { + constructor(appInfo, dbusName, dbusPath, autoStart) { + super(appInfo, dbusName, dbusPath, autoStart, SearchProvider2ProxyInfo); this.canLaunchSearch = true; - }, + } activateResult(id, terms) { this.proxy.ActivateResultRemote(id, terms, global.get_current_time()); - }, + } launchSearch(terms) { this.proxy.LaunchSearchRemote(terms, global.get_current_time()); } -}); +}; diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js index 6e8c8a905..4df315d17 100644 --- a/js/ui/runDialog.js +++ b/js/ui/runDialog.js @@ -3,7 +3,6 @@ const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Meta = imports.gi.Meta; const St = imports.gi.St; const Shell = imports.gi.Shell; @@ -30,13 +29,10 @@ const EXEC_ARG_KEY = 'exec-arg'; var DIALOG_GROW_TIME = 0.1; -var RunDialog = new Lang.Class({ - Name: 'RunDialog', - Extends: ModalDialog.ModalDialog, - - _init() { - this.parent({ styleClass: 'run-dialog', - destroyOnClose: false }); +var RunDialog = class extends ModalDialog.ModalDialog { + constructor() { + super({ styleClass: 'run-dialog', + destroyOnClose: false }); this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA }); @@ -144,7 +140,7 @@ var RunDialog = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; }); - }, + } _getCommandCompletion(text) { function _getCommon(s1, s2) { @@ -189,7 +185,7 @@ var RunDialog = new Lang.Class({ let common = results.reduce(_getCommon, null); return common.substr(text.length); - }, + } _getCompletion(text) { if (text.indexOf('/') != -1) { @@ -197,7 +193,7 @@ var RunDialog = new Lang.Class({ } else { return this._getCommandCompletion(text); } - }, + } _run(input, inTerminal) { let command = input; @@ -248,7 +244,7 @@ var RunDialog = new Lang.Class({ } } } - }, + } _showError(message) { this._commandError = true; @@ -269,7 +265,7 @@ var RunDialog = new Lang.Class({ } }); } - }, + } _restart() { if (Meta.is_wayland_compositor()) { @@ -279,7 +275,7 @@ var RunDialog = new Lang.Class({ this._shouldFadeOut = false; this.close(); Meta.restart(_("Restarting…")); - }, + } open() { this._history.lastItem(); @@ -290,7 +286,7 @@ var RunDialog = new Lang.Class({ if (this._lockdownSettings.get_boolean(DISABLE_COMMAND_LINE_KEY)) return; - this.parent(); - }, -}); + super.open(); + } +}; Signals.addSignalMethods(RunDialog.prototype); diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js index 7004c93dd..b0119455a 100644 --- a/js/ui/screenShield.js +++ b/js/ui/screenShield.js @@ -60,10 +60,8 @@ var MANUAL_FADE_TIME = 0.3; var BACKGROUND_FADE_TIME = 1.0; var CURTAIN_SLIDE_TIME = 0.3; -var Clock = new Lang.Class({ - Name: 'ScreenShieldClock', - - _init() { +var Clock = class { + constructor() { this.actor = new St.BoxLayout({ style_class: 'screen-shield-clock', vertical: true }); @@ -77,7 +75,7 @@ var Clock = new Lang.Class({ this._wallClock.connect('notify::clock', this._updateClock.bind(this)); this._updateClock(); - }, + } _updateClock() { this._time.text = this._wallClock.clock; @@ -87,18 +85,16 @@ var Clock = new Lang.Class({ long format */ let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d")); this._date.text = date.toLocaleFormat(dateFormat); - }, + } destroy() { this.actor.destroy(); this._wallClock.run_dispose(); } -}); +}; -var NotificationsBox = new Lang.Class({ - Name: 'NotificationsBox', - - _init() { +var NotificationsBox = class { + constructor() { this.actor = new St.BoxLayout({ vertical: true, name: 'screenShieldNotifications', style_class: 'screen-shield-notifications-container' }); @@ -118,7 +114,7 @@ var NotificationsBox = new Lang.Class({ this._updateVisibility(); this._sourceAddedId = Main.messageTray.connect('source-added', this._sourceAdded.bind(this)); - }, + } destroy() { if (this._sourceAddedId) { @@ -132,21 +128,21 @@ var NotificationsBox = new Lang.Class({ } this.actor.destroy(); - }, + } _updateVisibility() { this._notificationBox.visible = this._notificationBox.get_children().some(a => a.visible); this.actor.visible = this._notificationBox.visible; - }, + } _makeNotificationCountText(count, isChat) { if (isChat) return ngettext("%d new message", "%d new messages", count).format(count); else return ngettext("%d new notification", "%d new notifications", count).format(count); - }, + } _makeNotificationSource(source, box) { let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE); @@ -166,7 +162,7 @@ var NotificationsBox = new Lang.Class({ box.visible = count != 0; return [title, countLabel]; - }, + } _makeNotificationDetailedSource(source, box) { let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE); @@ -204,7 +200,7 @@ var NotificationsBox = new Lang.Class({ box.visible = visible; return [title, null]; - }, + } _showSource(source, obj, box) { if (obj.detailed) { @@ -214,7 +210,7 @@ var NotificationsBox = new Lang.Class({ } box.visible = obj.visible && (source.unseenCount > 0); - }, + } _sourceAdded(tray, source, initial) { let obj = { @@ -276,11 +272,11 @@ var NotificationsBox = new Lang.Class({ if (obj.sourceBox.visible) this.emit('wake-up-screen'); } - }, + } _titleChanged(source, obj) { obj.titleLabel.text = source.title; - }, + } _countChanged(source, obj) { if (obj.detailed) { @@ -300,7 +296,7 @@ var NotificationsBox = new Lang.Class({ this._updateVisibility(); if (obj.sourceBox.visible) this.emit('wake-up-screen'); - }, + } _visibleChanged(source, obj) { if (obj.visible == source.policy.showInLockScreen) @@ -312,7 +308,7 @@ var NotificationsBox = new Lang.Class({ this._updateVisibility(); if (obj.sourceBox.visible) this.emit('wake-up-screen'); - }, + } _detailedChanged(source, obj) { if (obj.detailed == source.policy.detailsInLockScreen) @@ -323,12 +319,12 @@ var NotificationsBox = new Lang.Class({ obj.sourceBox.destroy_all_children(); obj.titleLabel = obj.countLabel = null; this._showSource(source, obj, obj.sourceBox); - }, + } _onSourceDestroy(source, obj) { this._removeSource(source, obj); this._updateVisibility(); - }, + } _removeSource(source, obj) { obj.sourceBox.destroy(); @@ -340,8 +336,8 @@ var NotificationsBox = new Lang.Class({ source.policy.disconnect(obj.policyChangedId); this._sources.delete(source); - }, -}); + } +}; Signals.addSignalMethods(NotificationsBox.prototype); var Arrow = new Lang.Class({ @@ -430,10 +426,8 @@ function clamp(value, min, max) { * This will ensure that the screen blanks at the right time when it fades out. * https://bugzilla.gnome.org/show_bug.cgi?id=668703 explains the dependency. */ -var ScreenShield = new Lang.Class({ - Name: 'ScreenShield', - - _init() { +var ScreenShield = class { + constructor() { this.actor = Main.layoutManager.screenShieldGroup; this._lockScreenState = MessageTray.State.HIDDEN; @@ -573,7 +567,7 @@ var ScreenShield = new Lang.Class({ this._cursorTracker = Meta.CursorTracker.get_for_display(global.display); this._syncInhibitor(); - }, + } _setActive(active) { let prevIsActive = this._isActive; @@ -586,7 +580,7 @@ var ScreenShield = new Lang.Class({ this._loginSession.SetLockedHintRemote(active); this._syncInhibitor(); - }, + } _createBackground(monitorIndex) { let monitor = Main.layoutManager.monitors[monitorIndex]; @@ -604,7 +598,7 @@ var ScreenShield = new Lang.Class({ this._bgManagers.push(bgManager); this._backgroundGroup.add_child(widget); - }, + } _updateBackgrounds() { for (let i = 0; i < this._bgManagers.length; i++) @@ -615,7 +609,7 @@ var ScreenShield = new Lang.Class({ for (let i = 0; i < Main.layoutManager.monitors.length; i++) this._createBackground(i); - }, + } _liftShield(onPrimary, velocity) { if (this._isLocked) { @@ -624,7 +618,7 @@ var ScreenShield = new Lang.Class({ } else { this.deactivate(true /* animate */); } - }, + } _maybeCancelDialog() { if (!this._dialog) @@ -639,7 +633,7 @@ var ScreenShield = new Lang.Class({ } else { this._dialog = null; } - }, + } _becomeModal() { if (this._isModal) @@ -654,7 +648,7 @@ var ScreenShield = new Lang.Class({ this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED, actionMode: Shell.ActionMode.LOCK_SCREEN }); return this._isModal; - }, + } _onLockScreenKeyPress(actor, event) { let symbol = event.get_key_symbol(); @@ -684,7 +678,7 @@ var ScreenShield = new Lang.Class({ this._liftShield(true, 0); return Clutter.EVENT_STOP; - }, + } _onLockScreenScroll(actor, event) { if (this._lockScreenState != MessageTray.State.SHOWN) @@ -704,7 +698,7 @@ var ScreenShield = new Lang.Class({ } return Clutter.EVENT_STOP; - }, + } _syncInhibitor() { let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY); @@ -723,7 +717,7 @@ var ScreenShield = new Lang.Class({ this._inhibitor.close(null); this._inhibitor = null; } - }, + } _prepareForSleep(loginManager, aboutToSuspend) { if (aboutToSuspend) { @@ -732,7 +726,7 @@ var ScreenShield = new Lang.Class({ } else { this._wakeUpScreen(); } - }, + } _animateArrows() { let arrows = this._arrowContainer.get_children(); @@ -754,7 +748,7 @@ var ScreenShield = new Lang.Class({ } return GLib.SOURCE_CONTINUE; - }, + } _onDragBegin() { Tweener.removeTweens(this._lockScreenGroup); @@ -764,7 +758,7 @@ var ScreenShield = new Lang.Class({ this._ensureUnlockDialog(false, false); return true; - }, + } _onDragMotion() { let [origX, origY] = this._dragAction.get_press_coords(0); @@ -776,7 +770,7 @@ var ScreenShield = new Lang.Class({ this._lockScreenGroup.y = newY; return true; - }, + } _onDragEnd(action, actor, eventX, eventY, modifiers) { if (this._lockScreenState != MessageTray.State.HIDING) @@ -804,7 +798,7 @@ var ScreenShield = new Lang.Class({ this._maybeCancelDialog(); } - }, + } _onStatusChanged(status) { if (status != GnomeSession.PresenceStatus.IDLE) @@ -855,7 +849,7 @@ var ScreenShield = new Lang.Class({ } this._activateFade(this._longLightbox, STANDARD_FADE_TIME); - }, + } _activateFade(lightbox, time) { Main.uiGroup.set_child_above_sibling(lightbox.actor, null); @@ -863,7 +857,7 @@ var ScreenShield = new Lang.Class({ if (this._becameActiveId == 0) this._becameActiveId = this.idleMonitor.add_user_active_watch(this._onUserBecameActive.bind(this)); - }, + } _onUserBecameActive() { // This function gets called here when the user becomes active @@ -893,15 +887,15 @@ var ScreenShield = new Lang.Class({ } else { this.deactivate(false); } - }, + } _onLongLightboxShown() { this.activate(false); - }, + } _onShortLightboxShown() { this._completeLockScreenShown(); - }, + } showDialog() { if (!this._becomeModal()) { @@ -915,7 +909,7 @@ var ScreenShield = new Lang.Class({ this._isLocked = true; if (this._ensureUnlockDialog(true, true)) this._hideLockScreen(false, 0); - }, + } _hideLockScreenComplete() { if (Main.sessionMode.currentMode == 'lock-screen') @@ -928,7 +922,7 @@ var ScreenShield = new Lang.Class({ this._dialog.actor.grab_key_focus(); this._dialog.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); } - }, + } _hideLockScreen(animate, velocity) { if (this._lockScreenState == MessageTray.State.HIDDEN) @@ -961,7 +955,7 @@ var ScreenShield = new Lang.Class({ } this._cursorTracker.set_pointer_visible(true); - }, + } _ensureUnlockDialog(onPrimary, allowCancel) { if (!this._dialog) { @@ -989,12 +983,12 @@ var ScreenShield = new Lang.Class({ this._dialog.allowCancel = allowCancel; return true; - }, + } _onUnlockFailed() { this._resetLockScreen({ animateLockScreen: true, fadeToBlack: false }); - }, + } _resetLockScreen(params) { // Don't reset the lock screen unless it is completely hidden @@ -1036,7 +1030,7 @@ var ScreenShield = new Lang.Class({ if (Main.sessionMode.currentMode != 'lock-screen') Main.sessionMode.pushMode('lock-screen'); - }, + } _startArrowAnimation() { this._arrowActiveWatchId = 0; @@ -1050,7 +1044,7 @@ var ScreenShield = new Lang.Class({ if (!this._arrowWatchId) this._arrowWatchId = this.idleMonitor.add_idle_watch(ARROW_IDLE_TIME, this._pauseArrowAnimation.bind(this)); - }, + } _pauseArrowAnimation() { if (this._arrowAnimationId) { @@ -1060,7 +1054,7 @@ var ScreenShield = new Lang.Class({ if (!this._arrowActiveWatchId) this._arrowActiveWatchId = this.idleMonitor.add_user_active_watch(this._startArrowAnimation.bind(this)); - }, + } _stopArrowAnimation() { if (this._arrowAnimationId) { @@ -1075,7 +1069,7 @@ var ScreenShield = new Lang.Class({ this.idleMonitor.remove_watch(this._arrowWatchId); this._arrowWatchId = 0; } - }, + } _checkArrowAnimation() { let idleTime = this.idleMonitor.get_idletime(); @@ -1084,7 +1078,7 @@ var ScreenShield = new Lang.Class({ this._startArrowAnimation(); else this._pauseArrowAnimation(); - }, + } _lockScreenShown(params) { if (this._dialog && !this._isGreeter) { @@ -1122,12 +1116,12 @@ var ScreenShield = new Lang.Class({ this._completeLockScreenShown(); } - }, + } _completeLockScreenShown() { this._setActive(true); this.emit('lock-screen-shown'); - }, + } // Some of the actors in the lock screen are heavy in // resources, so we only create them when needed @@ -1154,12 +1148,12 @@ var ScreenShield = new Lang.Class({ expand: true }); this._hasLockScreen = true; - }, + } _wakeUpScreen() { this._onUserBecameActive(); this.emit('wake-up-screen'); - }, + } _clearLockScreen() { this._clock.destroy(); @@ -1176,26 +1170,26 @@ var ScreenShield = new Lang.Class({ this._lockScreenContentsBox.destroy(); this._hasLockScreen = false; - }, + } get locked() { return this._isLocked; - }, + } get active() { return this._isActive; - }, + } get activationTime() { return this._activationTime; - }, + } deactivate(animate) { if (this._dialog) this._dialog.finish(() => { this._continueDeactivate(animate); }); else this._continueDeactivate(animate); - }, + } _continueDeactivate(animate) { this._hideLockScreen(animate, 0); @@ -1237,7 +1231,7 @@ var ScreenShield = new Lang.Class({ onComplete: this._completeDeactivate.bind(this), onCompleteScope: this }); - }, + } _completeDeactivate() { if (this._dialog) { @@ -1264,7 +1258,7 @@ var ScreenShield = new Lang.Class({ this._isLocked = false; this.emit('locked-changed'); global.set_runtime_state(LOCKED_STATE_STR, null); - }, + } activate(animate) { if (this._activationTime == 0) @@ -1296,7 +1290,7 @@ var ScreenShield = new Lang.Class({ // blank during the animation. // This is not a problem for the idle fade case, because we // activate without animation in that case. - }, + } lock(animate) { if (this._lockSettings.get_boolean(DISABLE_LOCK_KEY)) { @@ -1328,7 +1322,7 @@ var ScreenShield = new Lang.Class({ this.activate(animate); this.emit('locked-changed'); - }, + } // If the previous shell crashed, and gnome-session restarted us, then re-lock lockIfWasLocked() { @@ -1341,5 +1335,5 @@ var ScreenShield = new Lang.Class({ this.lock(false); }); } -}); +}; Signals.addSignalMethods(ScreenShield.prototype); diff --git a/js/ui/screencast.js b/js/ui/screencast.js index e57b0ef7d..2d99c711a 100644 --- a/js/ui/screencast.js +++ b/js/ui/screencast.js @@ -2,7 +2,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -12,10 +11,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils; const ScreencastIface = loadInterfaceXML('org.gnome.Shell.Screencast'); -var ScreencastService = new Lang.Class({ - Name: 'ScreencastService', - - _init() { +var ScreencastService = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreencastIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screencast'); @@ -26,11 +23,11 @@ var ScreencastService = new Lang.Class({ this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' }); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); - }, + } get isRecording() { return this._recorders.size > 0; - }, + } _ensureRecorderForSender(sender) { let recorder = this._recorders.get(sender); @@ -44,7 +41,7 @@ var ScreencastService = new Lang.Class({ this.emit('updated'); } return recorder; - }, + } _sessionUpdated() { if (Main.sessionMode.allowScreencast) @@ -52,11 +49,11 @@ var ScreencastService = new Lang.Class({ for (let sender of this._recorders.keys()) this._stopRecordingForSender(sender); - }, + } _onNameVanished(connection, name) { this._stopRecordingForSender(name); - }, + } _stopRecordingForSender(sender) { let recorder = this._recorders.get(sender); @@ -69,7 +66,7 @@ var ScreencastService = new Lang.Class({ this.emit('updated'); return true; - }, + } _applyOptionalParameters(recorder, options) { for (let option in options) @@ -81,7 +78,7 @@ var ScreencastService = new Lang.Class({ recorder.set_framerate(options['framerate']); if ('draw-cursor' in options) recorder.set_draw_cursor(options['draw-cursor']); - }, + } ScreencastAsync(params, invocation) { let returnValue = [false, '']; @@ -105,7 +102,7 @@ var ScreencastService = new Lang.Class({ } invocation.return_value(GLib.Variant.new('(bs)', returnValue)); - }, + } ScreencastAreaAsync(params, invocation) { let returnValue = [false, '']; @@ -141,11 +138,11 @@ var ScreencastService = new Lang.Class({ } invocation.return_value(GLib.Variant.new('(bs)', returnValue)); - }, + } StopScreencastAsync(params, invocation) { let success = this._stopRecordingForSender(invocation.get_sender()); invocation.return_value(GLib.Variant.new('(b)', [success])); } -}); +}; Signals.addSignalMethods(ScreencastService.prototype); diff --git a/js/ui/screenshot.js b/js/ui/screenshot.js index edfac1dd9..81534acae 100644 --- a/js/ui/screenshot.js +++ b/js/ui/screenshot.js @@ -5,7 +5,6 @@ const Gdk = imports.gi.Gdk; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -20,10 +19,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils; const ScreenshotIface = loadInterfaceXML('org.gnome.Shell.Screenshot'); -var ScreenshotService = new Lang.Class({ - Name: 'ScreenshotService', - - _init() { +var ScreenshotService = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenshotIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screenshot'); @@ -32,7 +29,7 @@ var ScreenshotService = new Lang.Class({ this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' }); Gio.DBus.session.own_name('org.gnome.Shell.Screenshot', Gio.BusNameOwnerFlags.REPLACE, null, null); - }, + } _createScreenshot(invocation, needsDisk=true) { let lockedDown = false; @@ -53,11 +50,11 @@ var ScreenshotService = new Lang.Class({ this._screenShooter.set(sender, shooter); return shooter; - }, + } _onNameVanished(connection, name) { this._removeShooterForSender(name); - }, + } _removeShooterForSender(sender) { let shooter = this._screenShooter.get(sender); @@ -66,14 +63,14 @@ var ScreenshotService = new Lang.Class({ Gio.bus_unwatch_name(shooter._watchNameId); this._screenShooter.delete(sender); - }, + } _checkArea(x, y, width, height) { return x >= 0 && y >= 0 && width > 0 && height > 0 && x + width <= global.screen_width && y + height <= global.screen_height; - }, + } _onScreenshotComplete(result, area, filenameUsed, flash, invocation) { if (result) { @@ -89,7 +86,7 @@ var ScreenshotService = new Lang.Class({ let retval = GLib.Variant.new('(bs)', [result, filenameUsed]); invocation.return_value(retval); - }, + } _scaleArea(x, y, width, height) { let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; @@ -98,7 +95,7 @@ var ScreenshotService = new Lang.Class({ width *= scaleFactor; height *= scaleFactor; return [x, y, width, height]; - }, + } _unscaleArea(x, y, width, height) { let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; @@ -107,7 +104,7 @@ var ScreenshotService = new Lang.Class({ width /= scaleFactor; height /= scaleFactor; return [x, y, width, height]; - }, + } ScreenshotAreaAsync(params, invocation) { let [x, y, width, height, flash, filename, callback] = params; @@ -132,7 +129,7 @@ var ScreenshotService = new Lang.Class({ invocation.return_gerror (e); } }); - }, + } ScreenshotWindowAsync(params, invocation) { let [include_frame, include_cursor, flash, filename] = params; @@ -150,7 +147,7 @@ var ScreenshotService = new Lang.Class({ invocation.return_gerror (e); } }); - }, + } ScreenshotAsync(params, invocation) { let [include_cursor, flash, filename] = params; @@ -168,7 +165,7 @@ var ScreenshotService = new Lang.Class({ invocation.return_gerror (e); } }); - }, + } SelectAreaAsync(params, invocation) { let selectArea = new SelectArea(); @@ -184,7 +181,7 @@ var ScreenshotService = new Lang.Class({ "Operation was cancelled"); } }); - }, + } FlashAreaAsync(params, invocation) { let [x, y, width, height] = params; @@ -198,7 +195,7 @@ var ScreenshotService = new Lang.Class({ let flashspot = new Flashspot({ x : x, y : y, width: width, height: height}); flashspot.fire(); invocation.return_value(null); - }, + } PickColorAsync(params, invocation) { let pickPixel = new PickPixel(); @@ -227,12 +224,10 @@ var ScreenshotService = new Lang.Class({ } }); } -}); +}; -var SelectArea = new Lang.Class({ - Name: 'SelectArea', - - _init() { +var SelectArea = class { + constructor() { this._startX = -1; this._startY = -1; this._lastX = 0; @@ -265,7 +260,7 @@ var SelectArea = new Lang.Class({ border_width: 1, border_color: this._border }); this._group.add_actor(this._rubberband); - }, + } show() { if (!this._grabHelper.grab({ actor: this._group, @@ -275,7 +270,7 @@ var SelectArea = new Lang.Class({ global.display.set_cursor(Meta.Cursor.CROSSHAIR); Main.uiGroup.set_child_above_sibling(this._group, null); this._group.visible = true; - }, + } _initRubberbandColors() { function colorFromRGBA(rgba) { @@ -294,14 +289,14 @@ var SelectArea = new Lang.Class({ this._background = colorFromRGBA(context.get_background_color(Gtk.StateFlags.NORMAL)); this._border = colorFromRGBA(context.get_border_color(Gtk.StateFlags.NORMAL)); - }, + } _getGeometry() { return { x: Math.min(this._startX, this._lastX), y: Math.min(this._startY, this._lastY), width: Math.abs(this._startX - this._lastX) + 1, height: Math.abs(this._startY - this._lastY) + 1 }; - }, + } _onMotionEvent(actor, event) { if (this._startX == -1 || this._startY == -1) @@ -316,7 +311,7 @@ var SelectArea = new Lang.Class({ this._rubberband.set_size(geometry.width, geometry.height); return Clutter.EVENT_PROPAGATE; - }, + } _onButtonPress(actor, event) { [this._startX, this._startY] = event.get_coords(); @@ -325,7 +320,7 @@ var SelectArea = new Lang.Class({ this._rubberband.set_position(this._startX, this._startY); return Clutter.EVENT_PROPAGATE; - }, + } _onButtonRelease(actor, event) { this._result = this._getGeometry(); @@ -338,7 +333,7 @@ var SelectArea = new Lang.Class({ } }); return Clutter.EVENT_PROPAGATE; - }, + } _onUngrab() { global.display.set_cursor(Meta.Cursor.DEFAULT); @@ -349,13 +344,11 @@ var SelectArea = new Lang.Class({ return GLib.SOURCE_REMOVE; }); } -}); +}; Signals.addSignalMethods(SelectArea.prototype); -var PickPixel = new Lang.Class({ - Name: 'PickPixel', - - _init() { +var PickPixel = class { + constructor() { this._result = null; this._group = new St.Widget({ visible: false, @@ -370,7 +363,7 @@ var PickPixel = new Lang.Class({ let constraint = new Clutter.BindConstraint({ source: global.stage, coordinate: Clutter.BindCoordinate.ALL }); this._group.add_constraint(constraint); - }, + } show() { if (!this._grabHelper.grab({ actor: this._group, @@ -380,13 +373,13 @@ var PickPixel = new Lang.Class({ global.display.set_cursor(Meta.Cursor.CROSSHAIR); Main.uiGroup.set_child_above_sibling(this._group, null); this._group.visible = true; - }, + } _onButtonRelease(actor, event) { this._result = event.get_coords(); this._grabHelper.ungrab(); return Clutter.EVENT_PROPAGATE; - }, + } _onUngrab() { global.display.set_cursor(Meta.Cursor.DEFAULT); @@ -397,23 +390,20 @@ var PickPixel = new Lang.Class({ return GLib.SOURCE_REMOVE; }); } -}); +}; Signals.addSignalMethods(PickPixel.prototype); var FLASHSPOT_ANIMATION_OUT_TIME = 0.5; // seconds -var Flashspot = new Lang.Class({ - Name: 'Flashspot', - Extends: Lightbox.Lightbox, - - _init(area) { - this.parent(Main.uiGroup, { inhibitEvents: true, - width: area.width, - height: area.height }); +var Flashspot = class extends Lightbox.Lightbox { + constructor(area) { + super(Main.uiGroup, { inhibitEvents: true, + width: area.width, + height: area.height }); this.actor.style_class = 'flashspot'; this.actor.set_position(area.x, area.y); - }, + } fire(doneCallback) { this.actor.show(); @@ -429,4 +419,4 @@ var Flashspot = new Lang.Class({ } }); } -}); +}; diff --git a/js/ui/search.js b/js/ui/search.js index 16bd8cf20..a3ddf537a 100644 --- a/js/ui/search.js +++ b/js/ui/search.js @@ -44,10 +44,8 @@ var MaxWidthBin = new Lang.Class({ } }); -var SearchResult = new Lang.Class({ - Name: 'SearchResult', - - _init(provider, metaInfo, resultsView) { +var SearchResult = class { + constructor(provider, metaInfo, resultsView) { this.provider = provider; this.metaInfo = metaInfo; this._resultsView = resultsView; @@ -60,22 +58,18 @@ var SearchResult = new Lang.Class({ this.actor._delegate = this; this.actor.connect('clicked', this.activate.bind(this)); - }, + } activate() { this.emit('activate', this.metaInfo.id); } -}); +}; Signals.addSignalMethods(SearchResult.prototype); -var ListSearchResult = new Lang.Class({ - Name: 'ListSearchResult', - Extends: SearchResult, +var ListSearchResult = class extends SearchResult { - ICON_SIZE: 24, - - _init(provider, metaInfo, resultsView) { - this.parent(provider, metaInfo, resultsView); + constructor(provider, metaInfo, resultsView) { + super(provider, metaInfo, resultsView); this.actor.style_class = 'list-search-result'; this.actor.x_fill = true; @@ -122,26 +116,27 @@ var ListSearchResult = new Lang.Class({ } this.actor.connect('destroy', this._onDestroy.bind(this)); - }, + } + + get ICON_SIZE() { + return 24; + } _highlightTerms() { let markup = this._resultsView.highlightTerms(this.metaInfo['description'].split('\n')[0]); this._descriptionLabel.clutter_text.set_markup(markup); - }, + } _onDestroy() { if (this._termsChangedId) this._resultsView.disconnect(this._termsChangedId); this._termsChangedId = 0; } -}); +}; -var GridSearchResult = new Lang.Class({ - Name: 'GridSearchResult', - Extends: SearchResult, - - _init(provider, metaInfo, resultsView) { - this.parent(provider, metaInfo, resultsView); +var GridSearchResult = class extends SearchResult { + constructor(provider, metaInfo, resultsView) { + super(provider, metaInfo, resultsView); this.actor.style_class = 'grid-search-result'; @@ -151,12 +146,10 @@ var GridSearchResult = new Lang.Class({ this.actor.set_child(content); this.actor.label_actor = this.icon.label; } -}); +}; -var SearchResultsBase = new Lang.Class({ - Name: 'SearchResultsBase', - - _init(provider, resultsView) { +var SearchResultsBase = class { + constructor(provider, resultsView) { this.provider = provider; this._resultsView = resultsView; @@ -177,19 +170,19 @@ var SearchResultsBase = new Lang.Class({ this._clipboard = St.Clipboard.get_default(); this._cancellable = new Gio.Cancellable(); - }, + } destroy() { this.actor.destroy(); this._terms = []; - }, + } _createResultDisplay(meta) { if (this.provider.createResultObject) return this.provider.createResultObject(meta, this._resultsView); return null; - }, + } clear() { this._cancellable.cancel(); @@ -198,21 +191,21 @@ var SearchResultsBase = new Lang.Class({ this._resultDisplays = {}; this._clearResultDisplay(); this.actor.hide(); - }, + } _keyFocusIn(actor) { this.emit('key-focus-in', actor); - }, + } _activateResult(result, id) { this.provider.activateResult(id, this._terms); if (result.metaInfo.clipboardText) this._clipboard.set_text(St.ClipboardType.CLIPBOARD, result.metaInfo.clipboardText); Main.overview.toggle(); - }, + } _setMoreCount(count) { - }, + } _ensureResultActors(results, callback) { let metasNeeded = results.filter( @@ -254,7 +247,7 @@ var SearchResultsBase = new Lang.Class({ callback(true); }, this._cancellable); } - }, + } updateSearch(providerResults, terms, callback) { this._terms = terms; @@ -288,14 +281,11 @@ var SearchResultsBase = new Lang.Class({ }); } } -}); +}; -var ListSearchResults = new Lang.Class({ - Name: 'ListSearchResults', - Extends: SearchResultsBase, - - _init(provider, resultsView) { - this.parent(provider, resultsView); +var ListSearchResults = class extends SearchResultsBase { + constructor(provider, resultsView) { + super(provider, resultsView); this._container = new St.BoxLayout({ style_class: 'search-section-content' }); this.providerInfo = new ProviderInfo(provider); @@ -316,28 +306,28 @@ var ListSearchResults = new Lang.Class({ this._container.add(this._content, { expand: true }); this._resultDisplayBin.set_child(this._container); - }, + } _setMoreCount(count) { this.providerInfo.setMoreCount(count); - }, + } _getMaxDisplayedResults() { return MAX_LIST_SEARCH_RESULTS_ROWS; - }, + } _clearResultDisplay() { this._content.remove_all_children(); - }, + } _createResultDisplay(meta) { - return this.parent(meta, this._resultsView) || + return super._createResultDisplay(meta, this._resultsView) || new ListSearchResult(this.provider, meta, this._resultsView); - }, + } _addItem(display) { this._content.add_actor(display.actor); - }, + } getFirstResult() { if (this._content.get_n_children() > 0) @@ -345,15 +335,12 @@ var ListSearchResults = new Lang.Class({ else return null; } -}); +}; Signals.addSignalMethods(ListSearchResults.prototype); -var GridSearchResults = new Lang.Class({ - Name: 'GridSearchResults', - Extends: SearchResultsBase, - - _init(provider, resultsView) { - this.parent(provider, resultsView); +var GridSearchResults = class extends SearchResultsBase { + constructor(provider, resultsView) { + super(provider, resultsView); // We need to use the parent container to know how much results we can show. // None of the actors in this class can be used for that, since the main actor // goes hidden when no results are displayed, and then it lost its allocation. @@ -368,26 +355,26 @@ var GridSearchResults = new Lang.Class({ this._bin.set_child(this._grid); this._resultDisplayBin.set_child(this._bin); - }, + } _getMaxDisplayedResults() { let parentThemeNode = this._parentContainer.get_theme_node(); let availableWidth = parentThemeNode.adjust_for_width(this._parentContainer.width); return this._grid.columnsForWidth(availableWidth) * this._grid.getRowLimit(); - }, + } _clearResultDisplay() { this._grid.removeAll(); - }, + } _createResultDisplay(meta) { - return this.parent(meta, this._resultsView) || + return super._createResultDisplay(meta, this._resultsView) || new GridSearchResult(this.provider, meta, this._resultsView); - }, + } _addItem(display) { this._grid.addItem(display); - }, + } getFirstResult() { if (this._grid.visibleItemsCount() > 0) @@ -395,13 +382,11 @@ var GridSearchResults = new Lang.Class({ else return null; } -}); +}; Signals.addSignalMethods(GridSearchResults.prototype); -var SearchResults = new Lang.Class({ - Name: 'SearchResults', - - _init() { +var SearchResults = class { + constructor() { this.actor = new St.BoxLayout({ name: 'searchResults', vertical: true }); @@ -459,7 +444,7 @@ var SearchResults = new Lang.Class({ this._registerProvider(new AppDisplay.AppSearchProvider()); this._reloadRemoteProviders(); - }, + } _reloadRemoteProviders() { let remoteProviders = this._providers.filter(p => p.isRemoteProvider); @@ -470,13 +455,13 @@ var SearchResults = new Lang.Class({ RemoteSearch.loadRemoteSearchProviders(this._searchSettings, providers => { providers.forEach(this._registerProvider.bind(this)); }); - }, + } _registerProvider(provider) { provider.searchInProgress = false; this._providers.push(provider); this._ensureProviderDisplay(provider); - }, + } _unregisterProvider(provider) { let index = this._providers.indexOf(provider); @@ -484,19 +469,19 @@ var SearchResults = new Lang.Class({ if (provider.display) provider.display.destroy(); - }, + } _gotResults(results, provider) { this._results[provider.id] = results; this._updateResults(provider, results); - }, + } _clearSearchTimeout() { if (this._searchTimeoutId > 0) { GLib.source_remove(this._searchTimeoutId); this._searchTimeoutId = 0; } - }, + } _reset() { this._terms = []; @@ -507,7 +492,7 @@ var SearchResults = new Lang.Class({ this._startingSearch = false; this._updateSearchProgress(); - }, + } _doSearch() { this._startingSearch = false; @@ -537,13 +522,13 @@ var SearchResults = new Lang.Class({ this._updateSearchProgress(); this._clearSearchTimeout(); - }, + } _onSearchTimeout() { this._searchTimeoutId = 0; this._doSearch(); return GLib.SOURCE_REMOVE; - }, + } setTerms(terms) { // Check for the case of making a duplicate previous search before @@ -580,18 +565,18 @@ var SearchResults = new Lang.Class({ this._highlightRegex = new RegExp(`(${escapedTerms.join('|')})`, 'gi'); this.emit('terms-changed'); - }, + } _onPan(action) { let [dist, dx, dy] = action.get_motion_delta(0); let adjustment = this._scrollView.vscroll.adjustment; adjustment.value -= (dy / this.actor.height) * adjustment.page_size; return false; - }, + } _keyFocusIn(provider, actor) { Util.ensureActorVisibleInScrollView(this._scrollView, actor); - }, + } _ensureProviderDisplay(provider) { if (provider.display) @@ -607,13 +592,13 @@ var SearchResults = new Lang.Class({ providerDisplay.actor.hide(); this._content.add(providerDisplay.actor); provider.display = providerDisplay; - }, + } _clearDisplay() { this._providers.forEach(provider => { provider.display.clear(); }); - }, + } _maybeSetInitialSelection() { let newDefaultResult = null; @@ -639,14 +624,14 @@ var SearchResults = new Lang.Class({ this._defaultResult = newDefaultResult; } - }, + } get searchInProgress() { if (this._startingSearch) return true; return this._providers.some(p => p.searchInProgress); - }, + } _updateSearchProgress() { let haveResults = this._providers.some(provider => { @@ -664,7 +649,7 @@ var SearchResults = new Lang.Class({ this._statusText.set_text(_("No results.")); } } - }, + } _updateResults(provider, results) { let terms = this._terms; @@ -676,7 +661,7 @@ var SearchResults = new Lang.Class({ this._maybeSetInitialSelection(); this._updateSearchProgress(); }); - }, + } activateDefault() { // If we have a search queued up, force the search now. @@ -685,12 +670,12 @@ var SearchResults = new Lang.Class({ if (this._defaultResult) this._defaultResult.activate(); - }, + } highlightDefault(highlight) { this._highlightDefault = highlight; this._setSelected(this._defaultResult, highlight); - }, + } popupMenuDefault() { // If we have a search queued up, force the search now. @@ -699,7 +684,7 @@ var SearchResults = new Lang.Class({ if (this._defaultResult) this._defaultResult.actor.popup_menu(); - }, + } navigateFocus(direction) { let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL; @@ -713,7 +698,7 @@ var SearchResults = new Lang.Class({ let from = this._defaultResult ? this._defaultResult.actor : null; this.actor.navigate_focus(from, direction, false); - }, + } _setSelected(result, selected) { if (!result) @@ -725,7 +710,7 @@ var SearchResults = new Lang.Class({ } else { result.actor.remove_style_pseudo_class('selected'); } - }, + } highlightTerms(description) { if (!description) @@ -736,7 +721,7 @@ var SearchResults = new Lang.Class({ return description.replace(this._highlightRegex, '$1'); } -}); +}; Signals.addSignalMethods(SearchResults.prototype); var ProviderInfo = new Lang.Class({ diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js index e22176415..5a4e20418 100644 --- a/js/ui/sessionMode.js +++ b/js/ui/sessionMode.js @@ -2,7 +2,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Signals = imports.signals; @@ -151,40 +150,38 @@ function listModes() { Mainloop.run('listModes'); } -var SessionMode = new Lang.Class({ - Name: 'SessionMode', - - _init() { +var SessionMode = class { + constructor() { _loadModes(); let isPrimary = (_modes[global.session_mode] && _modes[global.session_mode].isPrimary); let mode = isPrimary ? global.session_mode : 'user'; this._modeStack = [mode]; this._sync(); - }, + } pushMode(mode) { this._modeStack.push(mode); this._sync(); - }, + } popMode(mode) { if (this.currentMode != mode || this._modeStack.length === 1) throw new Error("Invalid SessionMode.popMode"); this._modeStack.pop(); this._sync(); - }, + } switchMode(to) { if (this.currentMode == to) return; this._modeStack[this._modeStack.length - 1] = to; this._sync(); - }, + } get currentMode() { return this._modeStack[this._modeStack.length - 1]; - }, + } _sync() { let params = _modes[this.currentMode]; @@ -205,5 +202,5 @@ var SessionMode = new Lang.Class({ this.emit('updated'); } -}); +}; Signals.addSignalMethods(SessionMode.prototype); diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js index a200a1bdd..5d1b04698 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js @@ -19,10 +19,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils; const GnomeShellIface = loadInterfaceXML('org.gnome.Shell'); const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver'); -var GnomeShell = new Lang.Class({ - Name: 'GnomeShellDBus', - - _init() { +var GnomeShell = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell'); @@ -42,7 +40,7 @@ var GnomeShell = new Lang.Class({ this._checkOverviewVisibleChanged.bind(this)); Main.overview.connect('hidden', this._checkOverviewVisibleChanged.bind(this)); - }, + } /** * Eval: @@ -75,11 +73,11 @@ var GnomeShell = new Lang.Class({ success = false; } return [success, returnValue]; - }, + } FocusSearch() { Main.overview.focusSearch(); - }, + } ShowOSD(params) { for (let param in params) @@ -99,23 +97,23 @@ var GnomeShell = new Lang.Class({ icon = Gio.Icon.new_for_string(serializedIcon); Main.osdWindowManager.show(monitorIndex, icon, label, level, maxLevel); - }, + } FocusApp(id) { this.ShowApplications(); Main.overview.viewSelector.appDisplay.selectApp(id); - }, + } ShowApplications() { Main.overview.viewSelector.showApps(); - }, + } GrabAcceleratorAsync(params, invocation) { let [accel, flags] = params; let sender = invocation.get_sender(); let bindingAction = this._grabAcceleratorForSender(accel, flags, sender); return invocation.return_value(GLib.Variant.new('(u)', [bindingAction])); - }, + } GrabAcceleratorsAsync(params, invocation) { let [accels] = params; @@ -126,7 +124,7 @@ var GnomeShell = new Lang.Class({ bindingActions.push(this._grabAcceleratorForSender(accel, flags, sender)); } return invocation.return_value(GLib.Variant.new('(au)', [bindingActions])); - }, + } UngrabAcceleratorAsync(params, invocation) { let [action] = params; @@ -138,7 +136,7 @@ var GnomeShell = new Lang.Class({ if (ungrabSucceeded) this._grabbedAccelerators.delete(action); return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded])); - }, + } _emitAcceleratorActivated(action, deviceid, timestamp) { let destination = this._grabbedAccelerators.get(action); @@ -155,7 +153,7 @@ var GnomeShell = new Lang.Class({ info ? info.name : null, 'AcceleratorActivated', GLib.Variant.new('(ua{sv})', [action, params])); - }, + } _grabAcceleratorForSender(accelerator, flags, sender) { let bindingAction = global.display.grab_accelerator(accelerator); @@ -174,13 +172,13 @@ var GnomeShell = new Lang.Class({ } return bindingAction; - }, + } _ungrabAccelerator(action) { let ungrabSucceeded = global.display.ungrab_accelerator(action); if (ungrabSucceeded) this._grabbedAccelerators.delete(action); - }, + } _onGrabberBusNameVanished(connection, name) { let grabs = this._grabbedAccelerators.entries(); @@ -190,61 +188,61 @@ var GnomeShell = new Lang.Class({ } Gio.bus_unwatch_name(this._grabbers.get(name)); this._grabbers.delete(name); - }, + } ShowMonitorLabelsAsync(params, invocation) { let sender = invocation.get_sender(); let [dict] = params; Main.osdMonitorLabeler.show(sender, dict); - }, + } ShowMonitorLabels2Async(params, invocation) { let sender = invocation.get_sender(); let [dict] = params; Main.osdMonitorLabeler.show2(sender, dict); - }, + } HideMonitorLabelsAsync(params, invocation) { let sender = invocation.get_sender(); Main.osdMonitorLabeler.hide(sender); - }, - - - Mode: global.session_mode, + } _checkOverviewVisibleChanged() { if (Main.overview.visible !== this._cachedOverviewVisible) { this._cachedOverviewVisible = Main.overview.visible; this._dbusImpl.emit_property_changed('OverviewActive', new GLib.Variant('b', this._cachedOverviewVisible)); } - }, + } + + get Mode() { + return global.session_mode; + } get OverviewActive() { return this._cachedOverviewVisible; - }, + } set OverviewActive(visible) { if (visible) Main.overview.show(); else Main.overview.hide(); - }, + } - ShellVersion: Config.PACKAGE_VERSION -}); + get ShellVersion() { + return Config.PACKAGE_VERSION; + } +}; const GnomeShellExtensionsIface = loadInterfaceXML('org.gnome.Shell.Extensions'); -var GnomeShellExtensions = new Lang.Class({ - Name: 'GnomeShellExtensionsDBus', - - _init() { +var GnomeShellExtensions = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellExtensionsIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell'); ExtensionSystem.connect('extension-state-changed', this._extensionStateChanged.bind(this)); - }, - + } ListExtensions() { let out = {}; @@ -253,7 +251,7 @@ var GnomeShellExtensions = new Lang.Class({ out[uuid] = dbusObj; } return out; - }, + } GetExtensionInfo(uuid) { let extension = ExtensionUtils.extensions[uuid]; @@ -291,7 +289,7 @@ var GnomeShellExtensions = new Lang.Class({ } return out; - }, + } GetExtensionErrors(uuid) { let extension = ExtensionUtils.extensions[uuid]; @@ -302,15 +300,15 @@ var GnomeShellExtensions = new Lang.Class({ return []; return extension.errors; - }, + } InstallRemoteExtensionAsync([uuid], invocation) { return ExtensionDownloader.installExtension(uuid, invocation); - }, + } UninstallExtension(uuid) { return ExtensionDownloader.uninstallExtension(uuid); - }, + } LaunchExtensionPrefs(uuid) { let appSys = Shell.AppSystem.get_default(); @@ -319,7 +317,7 @@ var GnomeShellExtensions = new Lang.Class({ let timestamp = global.display.get_current_time_roundtrip(); info.launch_uris(['extension:///' + uuid], global.create_app_launch_context(timestamp, -1)); - }, + } ReloadExtension(uuid) { let extension = ExtensionUtils.extensions[uuid]; @@ -327,26 +325,24 @@ var GnomeShellExtensions = new Lang.Class({ return; ExtensionSystem.reloadExtension(extension); - }, + } CheckForUpdates() { ExtensionDownloader.checkForUpdates(); - }, + } - ShellVersion: Config.PACKAGE_VERSION, + get ShellVersion() { + return Config.PACKAGE_VERSION; + } _extensionStateChanged(_, newState) { this._dbusImpl.emit_signal('ExtensionStatusChanged', GLib.Variant.new('(sis)', [newState.uuid, newState.state, newState.error])); } -}); - -var ScreenSaverDBus = new Lang.Class({ - Name: 'ScreenSaverDBus', - - _init(screenShield) { - this.parent(); +}; +var ScreenSaverDBus = class { + constructor(screenShield) { this._screenShield = screenShield; screenShield.connect('active-changed', shield => { this._dbusImpl.emit_signal('ActiveChanged', GLib.Variant.new('(b)', [shield.active])); @@ -359,7 +355,7 @@ var ScreenSaverDBus = new Lang.Class({ this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver'); Gio.DBus.session.own_name('org.gnome.ScreenSaver', Gio.BusNameOwnerFlags.REPLACE, null, null); - }, + } LockAsync(parameters, invocation) { let tmpId = this._screenShield.connect('lock-screen-shown', () => { @@ -369,18 +365,18 @@ var ScreenSaverDBus = new Lang.Class({ }); this._screenShield.lock(true); - }, + } SetActive(active) { if (active) this._screenShield.activate(true); else this._screenShield.deactivate(false); - }, + } GetActive() { return this._screenShield.active; - }, + } GetActiveTime() { let started = this._screenShield.activationTime; @@ -388,5 +384,5 @@ var ScreenSaverDBus = new Lang.Class({ return Math.floor((GLib.get_monotonic_time() - started) / 1000000); else return 0; - }, -}); + } +}; diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js index 9db5136e6..642762fe2 100644 --- a/js/ui/shellEntry.js +++ b/js/ui/shellEntry.js @@ -2,7 +2,6 @@ const Clutter = imports.gi.Clutter; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const St = imports.gi.St; const BoxPointer = imports.ui.boxpointer; @@ -10,12 +9,9 @@ const Main = imports.ui.main; const Params = imports.misc.params; const PopupMenu = imports.ui.popupMenu; -var EntryMenu = new Lang.Class({ - Name: 'ShellEntryMenu', - Extends: PopupMenu.PopupMenu, - - _init(entry) { - this.parent(entry, 0, St.Side.TOP); +var EntryMenu = class extends PopupMenu.PopupMenu { + constructor(entry) { + super(entry, 0, St.Side.TOP); this._entry = entry; this._clipboard = St.Clipboard.get_default(); @@ -36,18 +32,18 @@ var EntryMenu = new Lang.Class({ Main.uiGroup.add_actor(this.actor); this.actor.hide(); - }, + } _makePasswordItem() { let item = new PopupMenu.PopupMenuItem(''); item.connect('activate', this._onPasswordActivated.bind(this)); this.addMenuItem(item); this._passwordItem = item; - }, + } get isPassword() { return this._passwordItem != null; - }, + } set isPassword(v) { if (v == this.isPassword) @@ -61,7 +57,7 @@ var EntryMenu = new Lang.Class({ this._passwordItem = null; this._entry.input_purpose = Clutter.InputContentPurpose.NORMAL; } - }, + } open(animate) { this._updatePasteItem(); @@ -69,26 +65,26 @@ var EntryMenu = new Lang.Class({ if (this._passwordItem) this._updatePasswordItem(); - this.parent(animate); + super.open(animate); this._entry.add_style_pseudo_class('focus'); let direction = Gtk.DirectionType.TAB_FORWARD; if (!this.actor.navigate_focus(null, direction, false)) this.actor.grab_key_focus(); - }, + } _updateCopyItem() { let selection = this._entry.clutter_text.get_selection(); this._copyItem.setSensitive(!this._entry.clutter_text.password_char && selection && selection != ''); - }, + } _updatePasteItem() { this._clipboard.get_text(St.ClipboardType.CLIPBOARD, (clipboard, text) => { this._pasteItem.setSensitive(text && text != ''); }); - }, + } _updatePasswordItem() { let textHidden = (this._entry.clutter_text.password_char); @@ -96,12 +92,12 @@ var EntryMenu = new Lang.Class({ this._passwordItem.label.set_text(_("Show Text")); else this._passwordItem.label.set_text(_("Hide Text")); - }, + } _onCopyActivated() { let selection = this._entry.clutter_text.get_selection(); this._clipboard.set_text(St.ClipboardType.CLIPBOARD, selection); - }, + } _onPasteActivated() { this._clipboard.get_text(St.ClipboardType.CLIPBOARD, @@ -112,13 +108,13 @@ var EntryMenu = new Lang.Class({ let pos = this._entry.clutter_text.get_cursor_position(); this._entry.clutter_text.insert_text(text, pos); }); - }, + } _onPasswordActivated() { let visible = !!(this._entry.clutter_text.password_char); this._entry.clutter_text.set_password_char(visible ? '' : '\u25cf'); } -}); +}; function _setMenuAlignment(entry, stageX) { let [success, entryX, entryY] = entry.transform_stage_point(stageX, 0); diff --git a/js/ui/shellMountOperation.js b/js/ui/shellMountOperation.js index 4b03490d5..a49e75a8d 100644 --- a/js/ui/shellMountOperation.js +++ b/js/ui/shellMountOperation.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; -const Lang = imports.lang; const Signals = imports.signals; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; @@ -62,10 +61,8 @@ function _createIcon(gicon) { /* -------------------------------------------------------- */ -var ListItem = new Lang.Class({ - Name: 'ListItem', - - _init(app) { +var ListItem = class { + constructor(app) { this._app = app; let layout = new St.BoxLayout({ vertical: false}); @@ -90,19 +87,17 @@ var ListItem = new Lang.Class({ layout.add(labelBin); this.actor.connect('clicked', this._onClicked.bind(this)); - }, + } _onClicked() { this.emit('activate'); this._app.activate(); } -}); +}; Signals.addSignalMethods(ListItem.prototype); -var ShellMountOperation = new Lang.Class({ - Name: 'ShellMountOperation', - - _init(source, params) { +var ShellMountOperation = class { + constructor(source, params) { params = Params.parse(params, { existingDialog: null }); this._dialog = null; @@ -124,7 +119,7 @@ var ShellMountOperation = new Lang.Class({ this._onShowUnmountProgress.bind(this)); this._gicon = source.get_icon(); - }, + } _closeExistingDialog() { if (!this._existingDialog) @@ -132,7 +127,7 @@ var ShellMountOperation = new Lang.Class({ this._existingDialog.close(); this._existingDialog = null; - }, + } _onAskQuestion(op, message, choices) { this._closeExistingDialog(); @@ -148,7 +143,7 @@ var ShellMountOperation = new Lang.Class({ this._dialog.update(message, choices); this._dialog.open(); - }, + } _onAskPassword(op, message, defaultUser, defaultDomain, flags) { if (this._existingDialog) { @@ -173,7 +168,7 @@ var ShellMountOperation = new Lang.Class({ } }); this._dialog.open(); - }, + } close(op) { this._closeExistingDialog(); @@ -188,7 +183,7 @@ var ShellMountOperation = new Lang.Class({ this._notifier.done(); this._notifier = null; } - }, + } _onShowProcesses2(op) { this._closeExistingDialog(); @@ -216,7 +211,7 @@ var ShellMountOperation = new Lang.Class({ } this._processesDialog.update(message, processes, choices); - }, + } _onShowUnmountProgress(op, message, timeLeft, bytesLeft) { if (!this._notifier) @@ -226,7 +221,7 @@ var ShellMountOperation = new Lang.Class({ this._notifier.done(message); else this._notifier.show(message); - }, + } borrowDialog() { if (this._dialogId != 0) { @@ -236,18 +231,15 @@ var ShellMountOperation = new Lang.Class({ return this._dialog; } -}); +}; -var ShellUnmountNotifier = new Lang.Class({ - Name: 'ShellUnmountNotifier', - Extends: MessageTray.Source, - - _init() { - this.parent('', 'media-removable'); +var ShellUnmountNotifier = class extends MessageTray.Source { + constructor() { + super('', 'media-removable'); this._notification = null; Main.messageTray.add(this); - }, + } show(message) { let [header, text] = message.split('\n', 2); @@ -261,7 +253,7 @@ var ShellUnmountNotifier = new Lang.Class({ } this.notify(this._notification); - }, + } done(message) { if (this._notification) { @@ -276,35 +268,29 @@ var ShellUnmountNotifier = new Lang.Class({ this.notify(notification); } } -}); +}; -var ShellMountQuestionDialog = new Lang.Class({ - Name: 'ShellMountQuestionDialog', - Extends: ModalDialog.ModalDialog, - - _init(icon) { - this.parent({ styleClass: 'mount-dialog' }); +var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog { + constructor(icon) { + super({ styleClass: 'mount-dialog' }); this._content = new Dialog.MessageDialogContent({ icon }); this.contentLayout.add(this._content, { x_fill: true, y_fill: false }); - }, + } update(message, choices) { _setLabelsForMessage(this._content, message); _setButtonsForChoices(this, choices); } -}); +}; Signals.addSignalMethods(ShellMountQuestionDialog.prototype); -var ShellMountPasswordDialog = new Lang.Class({ - Name: 'ShellMountPasswordDialog', - Extends: ModalDialog.ModalDialog, - - _init(message, icon, flags) { +var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog { + constructor(message, icon, flags) { let strings = message.split('\n'); let title = strings.shift() || null; let body = strings.shift() || null; - this.parent({ styleClass: 'prompt-dialog' }); + super({ styleClass: 'prompt-dialog' }); let content = new Dialog.MessageDialogContent({ icon, title, body }); this.contentLayout.add_actor(content); @@ -352,20 +338,20 @@ var ShellMountPasswordDialog = new Lang.Class({ }]; this.setButtons(buttons); - }, + } reaskPassword() { this._passwordEntry.set_text(''); this._errorMessageLabel.show(); - }, + } _onCancelButton() { this.emit('response', -1, '', false); - }, + } _onUnlockButton() { this._onEntryActivate(); - }, + } _onEntryActivate() { global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY, @@ -375,14 +361,11 @@ var ShellMountPasswordDialog = new Lang.Class({ this._rememberChoice && this._rememberChoice.actor.checked); } -}); +}; -var ShellProcessesDialog = new Lang.Class({ - Name: 'ShellProcessesDialog', - Extends: ModalDialog.ModalDialog, - - _init(icon) { - this.parent({ styleClass: 'mount-dialog' }); +var ShellProcessesDialog = class extends ModalDialog.ModalDialog { + constructor(icon) { + super({ styleClass: 'mount-dialog' }); this._content = new Dialog.MessageDialogContent({ icon }); this.contentLayout.add(this._content, { x_fill: true, y_fill: false }); @@ -407,7 +390,7 @@ var ShellProcessesDialog = new Lang.Class({ if (this._applicationList.get_n_children() == 0) scrollView.hide(); }); - }, + } _setAppsForPids(pids) { // remove all the items @@ -428,14 +411,14 @@ var ShellProcessesDialog = new Lang.Class({ this.emit('response', -1); }); }); - }, + } update(message, processes, choices) { this._setAppsForPids(processes); _setLabelsForMessage(this._content, message); _setButtonsForChoices(this, choices); } -}); +}; Signals.addSignalMethods(ShellProcessesDialog.prototype); const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler'); @@ -447,10 +430,8 @@ var ShellMountOperationType = { SHOW_PROCESSES: 3 }; -var GnomeShellMountOpHandler = new Lang.Class({ - Name: 'GnomeShellMountOpHandler', - - _init() { +var GnomeShellMountOpHandler = class { + constructor() { this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellMountOpIface, this); this._dbusImpl.export(Gio.DBus.session, '/org/gtk/MountOperationHandler'); Gio.bus_own_name_on_connection(Gio.DBus.session, 'org.gtk.MountOperationHandler', @@ -460,13 +441,13 @@ var GnomeShellMountOpHandler = new Lang.Class({ this._volumeMonitor = Gio.VolumeMonitor.get(); this._ensureEmptyRequest(); - }, + } _ensureEmptyRequest() { this._currentId = null; this._currentInvocation = null; this._currentType = ShellMountOperationType.NONE; - }, + } _clearCurrentRequest(response, details) { if (this._currentInvocation) { @@ -475,7 +456,7 @@ var GnomeShellMountOpHandler = new Lang.Class({ } this._ensureEmptyRequest(); - }, + } _setCurrentRequest(invocation, id, type) { let oldId = this._currentId; @@ -492,20 +473,20 @@ var GnomeShellMountOpHandler = new Lang.Class({ return true; return false; - }, + } _closeDialog() { if (this._dialog) { this._dialog.close(); this._dialog = null; } - }, + } _createGIcon(iconName) { let realIconName = iconName ? iconName : 'drive-harddisk'; return new Gio.ThemedIcon({ name: realIconName, use_default_fallbacks: true }); - }, + } /** * AskPassword: @@ -557,7 +538,7 @@ var GnomeShellMountOpHandler = new Lang.Class({ this._clearCurrentRequest(response, details); }); this._dialog.open(); - }, + } /** * AskQuestion: @@ -595,7 +576,7 @@ var GnomeShellMountOpHandler = new Lang.Class({ this._dialog.update(message, choices); this._dialog.open(); - }, + } /** * ShowProcesses: @@ -643,7 +624,7 @@ var GnomeShellMountOpHandler = new Lang.Class({ this._dialog.update(message, applicationPids, choices); this._dialog.open(); - }, + } /** * Close: @@ -655,4 +636,4 @@ var GnomeShellMountOpHandler = new Lang.Class({ this._clearCurrentRequest(Gio.MountOperationResult.UNHANDLED, {}); this._closeDialog(); } -}); +}; diff --git a/js/ui/slider.js b/js/ui/slider.js index 65ff8ca8a..bef95e16f 100644 --- a/js/ui/slider.js +++ b/js/ui/slider.js @@ -3,7 +3,6 @@ const Atk = imports.gi.Atk; const Cairo = imports.cairo; const Clutter = imports.gi.Clutter; -const Lang = imports.lang; const St = imports.gi.St; const Signals = imports.signals; @@ -11,18 +10,15 @@ const BarLevel = imports.ui.barLevel; var SLIDER_SCROLL_STEP = 0.02; /* Slider scrolling step in % */ -var Slider = new Lang.Class({ - Name: "Slider", - Extends: BarLevel.BarLevel, - - _init(value) { +var Slider = class extends BarLevel.BarLevel { + constructor(value) { let params = { styleClass: 'slider', canFocus: true, reactive: true, accessibleRole: Atk.Role.SLIDER, } - this.parent(value, params) + super(value, params) this.actor.connect('button-press-event', this._startDragging.bind(this)); this.actor.connect('touch-event', this._touchDragging.bind(this)); @@ -33,10 +29,10 @@ var Slider = new Lang.Class({ this._dragging = false; this._customAccessible.connect('get-minimum-increment', this._getMinimumIncrement.bind(this)); - }, + } _barLevelRepaint(area) { - this.parent(area); + super._barLevelRepaint(area); // Add handle let cr = area.get_context(); @@ -64,11 +60,11 @@ var Slider = new Lang.Class({ cr.stroke(); } cr.$dispose(); - }, + } _startDragging(actor, event) { return this.startDragging(event); - }, + } startDragging(event) { if (this._dragging) @@ -100,7 +96,7 @@ var Slider = new Lang.Class({ [absX, absY] = event.get_coords(); this._moveHandle(absX, absY); return Clutter.EVENT_STOP; - }, + } _endDragging() { if (this._dragging) { @@ -121,7 +117,7 @@ var Slider = new Lang.Class({ this.emit('drag-end'); } return Clutter.EVENT_STOP; - }, + } _touchDragging(actor, event) { let device = event.get_device(); @@ -139,7 +135,7 @@ var Slider = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } scroll(event) { let direction = event.get_scroll_direction(); @@ -164,18 +160,18 @@ var Slider = new Lang.Class({ this.actor.queue_repaint(); this.emit('value-changed', this._value); return Clutter.EVENT_STOP; - }, + } _onScrollEvent(actor, event) { return this.scroll(event); - }, + } _motionEvent(actor, event) { let absX, absY; [absX, absY] = event.get_coords(); this._moveHandle(absX, absY); return Clutter.EVENT_STOP; - }, + } onKeyPressEvent(actor, event) { let key = event.get_key_symbol(); @@ -189,7 +185,7 @@ var Slider = new Lang.Class({ return Clutter.EVENT_STOP; } return Clutter.EVENT_PROPAGATE; - }, + } _moveHandle(absX, absY) { let relX, relY, sliderX, sliderY; @@ -210,11 +206,10 @@ var Slider = new Lang.Class({ this._value = newvalue * this._maxValue; this.actor.queue_repaint(); this.emit('value-changed', this._value); - }, + } _getMinimumIncrement(actor) { return 0.1; - }, -}); - + } +}; Signals.addSignalMethods(Slider.prototype); diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js index 69347ba38..f41be7250 100644 --- a/js/ui/status/bluetooth.js +++ b/js/ui/status/bluetooth.js @@ -2,7 +2,6 @@ const Gio = imports.gi.Gio; const GnomeBluetooth = imports.gi.GnomeBluetooth; -const Lang = imports.lang; const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; @@ -18,12 +17,9 @@ const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup'; -var Indicator = new Lang.Class({ - Name: 'BTIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._indicator = this._addIndicator(); this._indicator.icon_name = 'bluetooth-active-symbolic'; @@ -59,7 +55,7 @@ var Indicator = new Lang.Class({ this._model.connect('row-inserted', this._sync.bind(this)); Main.sessionMode.connect('updated', this._sync.bind(this)); this._sync(); - }, + } _getDefaultAdapter() { let [ret, iter] = this._model.get_iter_first(); @@ -73,7 +69,7 @@ var Indicator = new Lang.Class({ ret = this._model.iter_next(iter); } return null; - }, + } // nDevices is the number of devices setup for the current default // adapter if one exists and is powered. If unpowered or unavailable, @@ -111,7 +107,7 @@ var Indicator = new Lang.Class({ } return [ nDevices, nConnectedDevices]; - }, + } _sync() { let [ nDevices, nConnectedDevices ] = this._getNDevices(); @@ -136,5 +132,5 @@ var Indicator = new Lang.Class({ this._item.label.text = _("On"); this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off"); - }, -}); + } +}; diff --git a/js/ui/status/brightness.js b/js/ui/status/brightness.js index a1fb976d8..e45cf67c5 100644 --- a/js/ui/status/brightness.js +++ b/js/ui/status/brightness.js @@ -1,6 +1,5 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Gio = imports.gi.Gio; const St = imports.gi.St; @@ -16,12 +15,9 @@ const OBJECT_PATH = '/org/gnome/SettingsDaemon/Power'; const BrightnessInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Power.Screen'); const BrightnessProxy = Gio.DBusProxy.makeProxyWrapper(BrightnessInterface); -var Indicator = new Lang.Class({ - Name: 'BrightnessIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent('display-brightness-symbolic'); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super('display-brightness-symbolic'); this._proxy = new BrightnessProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, (proxy, error) => { if (error) { @@ -51,17 +47,17 @@ var Indicator = new Lang.Class({ return this._slider.onKeyPressEvent(actor, event); }); - }, + } _sliderChanged(slider, value) { let percent = value * 100; this._proxy.Brightness = percent; - }, + } _sync() { let visible = this._proxy.Brightness >= 0; this._item.actor.visible = visible; if (visible) this._slider.setValue(this._proxy.Brightness / 100.0); - }, -}); + } +}; diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index ef2a6049b..81646a481 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -22,12 +22,9 @@ const Util = imports.misc.util; const INPUT_SOURCE_TYPE_XKB = 'xkb'; const INPUT_SOURCE_TYPE_IBUS = 'ibus'; -var LayoutMenuItem = new Lang.Class({ - Name: 'LayoutMenuItem', - Extends: PopupMenu.PopupBaseMenuItem, - - _init(displayName, shortName) { - this.parent(); +var LayoutMenuItem = class extends PopupMenu.PopupBaseMenuItem { + constructor(displayName, shortName) { + super(); this.label = new St.Label({ text: displayName }); this.indicator = new St.Label({ text: shortName }); @@ -35,12 +32,10 @@ var LayoutMenuItem = new Lang.Class({ this.actor.add(this.indicator); this.actor.label_actor = this.label; } -}); +}; -var InputSource = new Lang.Class({ - Name: 'InputSource', - - _init(type, id, displayName, shortName, index) { +var InputSource = class { + constructor(type, id, displayName, shortName, index) { this.type = type; this.id = id; this.displayName = displayName; @@ -50,20 +45,20 @@ var InputSource = new Lang.Class({ this.properties = null; this.xkbId = this._getXkbId(); - }, + } get shortName() { return this._shortName; - }, + } set shortName(v) { this._shortName = v; this.emit('changed'); - }, + } activate(interactive) { this.emit('activate', !!interactive); - }, + } _getXkbId() { let engineDesc = IBusManager.getIBusManager().getEngineDesc(this.id); @@ -75,7 +70,7 @@ var InputSource = new Lang.Class({ else return engineDesc.layout; } -}); +}; Signals.addSignalMethods(InputSource.prototype); var InputSourcePopup = new Lang.Class({ @@ -139,54 +134,55 @@ var InputSourceSwitcher = new Lang.Class({ } }); -var InputSourceSettings = new Lang.Class({ - Name: 'InputSourceSettings', - Abstract: true, +var InputSourceSettings = class { + constructor() { + if (new.target === InputSourceSettings) + throw new TypeError('Cannot instantiate abstract class ' + new.target.name); + } _emitInputSourcesChanged() { this.emit('input-sources-changed'); - }, + } _emitKeyboardOptionsChanged() { this.emit('keyboard-options-changed'); - }, + } _emitPerWindowChanged() { this.emit('per-window-changed'); - }, + } get inputSources() { return []; - }, + } get mruSources() { return []; - }, + } set mruSources(sourcesList) { // do nothing - }, + } get keyboardOptions() { return []; - }, + } get perWindow() { return false; } -}); +}; Signals.addSignalMethods(InputSourceSettings.prototype); -var InputSourceSystemSettings = new Lang.Class({ - Name: 'InputSourceSystemSettings', - Extends: InputSourceSettings, +var InputSourceSystemSettings = class extends InputSourceSettings { + constructor() { + super(); - _BUS_NAME: 'org.freedesktop.locale1', - _BUS_PATH: '/org/freedesktop/locale1', - _BUS_IFACE: 'org.freedesktop.locale1', - _BUS_PROPS_IFACE: 'org.freedesktop.DBus.Properties', + this._BUS_NAME = 'org.freedesktop.locale1'; + this._BUS_PATH = '/org/freedesktop/locale1'; + this._BUS_IFACE = 'org.freedesktop.locale1'; + this._BUS_PROPS_IFACE = 'org.freedesktop.DBus.Properties'; - _init() { this._layouts = ''; this._variants = ''; this._options = ''; @@ -200,7 +196,7 @@ var InputSourceSystemSettings = new Lang.Class({ null, Gio.DBusSignalFlags.NONE, this._reload.bind(this)); - }, + } _reload() { Gio.DBus.system.call(this._BUS_NAME, @@ -232,7 +228,7 @@ var InputSourceSystemSettings = new Lang.Class({ this._emitKeyboardOptionsChanged(); } }); - }, + } get inputSources() { let sourcesList = []; @@ -246,29 +242,28 @@ var InputSourceSystemSettings = new Lang.Class({ sourcesList.push({ type: INPUT_SOURCE_TYPE_XKB, id: id }); } return sourcesList; - }, + } get keyboardOptions() { return this._options.split(','); } -}); +}; -var InputSourceSessionSettings = new Lang.Class({ - Name: 'InputSourceSessionSettings', - Extends: InputSourceSettings, +var InputSourceSessionSettings = class extends InputSourceSettings { + constructor() { + super(); - _DESKTOP_INPUT_SOURCES_SCHEMA: 'org.gnome.desktop.input-sources', - _KEY_INPUT_SOURCES: 'sources', - _KEY_MRU_SOURCES: 'mru-sources', - _KEY_KEYBOARD_OPTIONS: 'xkb-options', - _KEY_PER_WINDOW: 'per-window', + this._DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources'; + this._KEY_INPUT_SOURCES = 'sources'; + this._KEY_MRU_SOURCES = 'mru-sources'; + this._KEY_KEYBOARD_OPTIONS = 'xkb-options'; + this._KEY_PER_WINDOW = 'per-window'; - _init() { this._settings = new Gio.Settings({ schema_id: this._DESKTOP_INPUT_SOURCES_SCHEMA }); this._settings.connect('changed::' + this._KEY_INPUT_SOURCES, this._emitInputSourcesChanged.bind(this)); this._settings.connect('changed::' + this._KEY_KEYBOARD_OPTIONS, this._emitKeyboardOptionsChanged.bind(this)); this._settings.connect('changed::' + this._KEY_PER_WINDOW, this._emitPerWindowChanged.bind(this)); - }, + } _getSourcesList(key) { let sourcesList = []; @@ -280,34 +275,32 @@ var InputSourceSessionSettings = new Lang.Class({ sourcesList.push({ type: type, id: id }); } return sourcesList; - }, + } get inputSources() { return this._getSourcesList(this._KEY_INPUT_SOURCES); - }, + } get mruSources() { return this._getSourcesList(this._KEY_MRU_SOURCES); - }, + } set mruSources(sourcesList) { let sources = GLib.Variant.new('a(ss)', sourcesList); this._settings.set_value(this._KEY_MRU_SOURCES, sources); - }, + } get keyboardOptions() { return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS); - }, + } get perWindow() { return this._settings.get_boolean(this._KEY_PER_WINDOW); } -}); +}; -var InputSourceManager = new Lang.Class({ - Name: 'InputSourceManager', - - _init() { +var InputSourceManager = class { + constructor() { // All valid input sources currently in the gsettings // KEY_INPUT_SOURCES list indexed by their index there this._inputSources = {}; @@ -361,14 +354,14 @@ var InputSourceManager = new Lang.Class({ this._sourcesPerWindowChanged(); this._disableIBus = false; this._reloading = false; - }, + } reload() { this._reloading = true; this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions); this._inputSourcesChanged(); this._reloading = false; - }, + } _ibusReadyCallback(im, ready) { if (this._ibusReady == ready) @@ -377,7 +370,7 @@ var InputSourceManager = new Lang.Class({ this._ibusReady = ready; this._mruSources = []; this._inputSourcesChanged(); - }, + } _modifiersSwitcher() { let sourceIndexes = Object.keys(this._inputSources); @@ -399,7 +392,7 @@ var InputSourceManager = new Lang.Class({ is.activate(true); return true; - }, + } _switchInputSource(display, window, binding) { if (this._mruSources.length < 2) @@ -418,12 +411,12 @@ var InputSourceManager = new Lang.Class({ let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward); if (!popup.show(binding.is_reversed(), binding.get_name(), binding.get_mask())) popup.fadeAndDestroy(); - }, + } _keyboardOptionsChanged() { this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions); this._keyboardManager.reapply(); - }, + } _updateMruSettings() { // If IBus is not ready we don't have a full picture of all @@ -442,7 +435,7 @@ var InputSourceManager = new Lang.Class({ } this._settings.mruSources = sourcesList; - }, + } _currentInputSourceChanged(newSource) { let oldSource; @@ -458,7 +451,7 @@ var InputSourceManager = new Lang.Class({ } this._changePerWindowSource(); - }, + } activateInputSource(is, interactive) { // The focus changes during holdKeyboard/releaseKeyboard may trick @@ -492,7 +485,7 @@ var InputSourceManager = new Lang.Class({ if (interactive) this._updateMruSettings(); - }, + } _updateMruSources() { let sourcesList = []; @@ -537,7 +530,7 @@ var InputSourceManager = new Lang.Class({ } } this._mruSources = mruSources.concat(sourcesList); - }, + } _inputSourcesChanged() { let sources = this._settings.inputSources; @@ -622,7 +615,7 @@ var InputSourceManager = new Lang.Class({ // All ibus engines are preloaded here to reduce the launching time // when users switch the input sources. this._ibusManager.preloadEngines(Object.keys(this._ibusSources)); - }, + } _makeEngineShortName(engineDesc) { let symbol = engineDesc.get_symbol(); @@ -634,7 +627,7 @@ var InputSourceManager = new Lang.Class({ return langCode.toLowerCase(); return String.fromCharCode(0x2328); // keyboard glyph - }, + } _ibusPropertiesRegistered(im, engineName, props) { let source = this._ibusSources[engineName]; @@ -645,7 +638,7 @@ var InputSourceManager = new Lang.Class({ if (source == this._currentSource) this.emit('current-source-changed', null); - }, + } _ibusPropertyUpdated(im, engineName, prop) { let source = this._ibusSources[engineName]; @@ -655,7 +648,7 @@ var InputSourceManager = new Lang.Class({ if (this._updateSubProperty(source.properties, prop) && source == this._currentSource) this.emit('current-source-changed', null); - }, + } _updateSubProperty(props, prop) { if (!props) @@ -672,7 +665,7 @@ var InputSourceManager = new Lang.Class({ } } return false; - }, + } _ibusSetContentType(im, purpose, hints) { if (purpose == IBus.InputPurpose.PASSWORD) { @@ -689,7 +682,7 @@ var InputSourceManager = new Lang.Class({ this._disableIBus = false; } this.reload(); - }, + } _getNewInputSource(current) { let sourceIndexes = Object.keys(this._inputSources); @@ -706,14 +699,14 @@ var InputSourceManager = new Lang.Class({ } return this._inputSources[sourceIndexes[0]]; - }, + } _getCurrentWindow() { if (Main.overview.visible) return Main.overview; else return global.display.focus_window; - }, + } _setPerWindowInputSource() { let window = this._getCurrentWindow(); @@ -727,7 +720,7 @@ var InputSourceManager = new Lang.Class({ if (window._currentSource) window._currentSource.activate(false); - }, + } _sourcesPerWindowChanged() { this._sourcesPerWindow = this._settings.perWindow; @@ -755,7 +748,7 @@ var InputSourceManager = new Lang.Class({ delete Main.overview._inputSources; delete Main.overview._currentSource; } - }, + } _changePerWindowSource() { if (!this._sourcesPerWindow) @@ -767,16 +760,16 @@ var InputSourceManager = new Lang.Class({ window._inputSources = this._inputSources; window._currentSource = this._currentSource; - }, + } get currentSource() { return this._currentSource; - }, + } get inputSources() { return this._inputSources; - }, -}); + } +}; Signals.addSignalMethods(InputSourceManager.prototype); let _inputSourceManager = null; diff --git a/js/ui/status/location.js b/js/ui/status/location.js index ed4863eca..9b623f072 100644 --- a/js/ui/status/location.js +++ b/js/ui/status/location.js @@ -3,7 +3,6 @@ const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; const Gio = imports.gi.Gio; -const Lang = imports.lang; const Dialog = imports.ui.dialog; const Main = imports.ui.main; @@ -47,12 +46,9 @@ const GeoclueManager = Gio.DBusProxy.makeProxyWrapper(GeoclueIface); var AgentIface = loadInterfaceXML('org.freedesktop.GeoClue2.Agent'); -var Indicator = new Lang.Class({ - Name: 'LocationIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._settings = new Gio.Settings({ schema_id: LOCATION_SCHEMA }); this._settings.connect('changed::' + ENABLED, @@ -85,11 +81,11 @@ var Indicator = new Lang.Class({ this._onMaxAccuracyLevelChanged(); this._connectToGeoclue(); this._connectToPermissionStore(); - }, + } get MaxAccuracyLevel() { return this._getMaxAccuracyLevel(); - }, + } AuthorizeAppAsync(params, invocation) { let [desktopId, reqAccuracyLevel] = params; @@ -104,7 +100,7 @@ var Indicator = new Lang.Class({ invocation.return_value(GLib.Variant.new('(bu)', [ret, accuracyLevel])); }); - }, + } _syncIndicator() { if (this._managerProxy == null) { @@ -116,7 +112,7 @@ var Indicator = new Lang.Class({ this._indicator.visible = this._managerProxy.InUse; this._item.actor.visible = this._indicator.visible; this._updateMenuLabels(); - }, + } _connectToGeoclue() { if (this._managerProxy != null || this._connecting) @@ -128,7 +124,7 @@ var Indicator = new Lang.Class({ '/org/freedesktop/GeoClue2/Manager', this._onManagerProxyReady.bind(this)); return true; - }, + } _onManagerProxyReady(proxy, error) { if (error != null) { @@ -144,7 +140,7 @@ var Indicator = new Lang.Class({ this._syncIndicator(); this._managerProxy.AddAgentRemote('gnome-shell', this._onAgentRegistered.bind(this)); - }, + } _onAgentRegistered(result, error) { this._connecting = false; @@ -152,7 +148,7 @@ var Indicator = new Lang.Class({ if (error != null) log(error.message); - }, + } _onGeoclueVanished() { if (this._propertiesChangedId) { @@ -162,17 +158,17 @@ var Indicator = new Lang.Class({ this._managerProxy = null; this._syncIndicator(); - }, + } _onOnOffAction() { let enabled = this._settings.get_boolean(ENABLED); this._settings.set_boolean(ENABLED, !enabled); - }, + } _onSessionUpdated() { let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; this.menu.setSensitive(sensitive); - }, + } _updateMenuLabels() { if (this._settings.get_boolean(ENABLED)) { @@ -183,7 +179,7 @@ var Indicator = new Lang.Class({ this._item.label.text = _("Location Disabled"); this._onOffAction.label.text = _("Enable"); } - }, + } _onMaxAccuracyLevelChanged() { this._updateMenuLabels(); @@ -192,7 +188,7 @@ var Indicator = new Lang.Class({ // before we emit the notify for this property change. if (!this._connectToGeoclue()) this._notifyMaxAccuracyLevel(); - }, + } _getMaxAccuracyLevel() { if (this._settings.get_boolean(ENABLED)) { @@ -203,23 +199,23 @@ var Indicator = new Lang.Class({ } else { return GeoclueAccuracyLevel.NONE; } - }, + } _notifyMaxAccuracyLevel() { let variant = new GLib.Variant('u', this._getMaxAccuracyLevel()); this._agent.emit_property_changed('MaxAccuracyLevel', variant); - }, + } _onGeocluePropsChanged(proxy, properties) { let unpacked = properties.deep_unpack(); if ("InUse" in unpacked) this._syncIndicator(); - }, + } _connectToPermissionStore() { this._permStoreProxy = null; new PermissionStore.PermissionStore(this._onPermStoreProxyReady.bind(this)); - }, + } _onPermStoreProxyReady(proxy, error) { if (error != null) { @@ -228,20 +224,15 @@ var Indicator = new Lang.Class({ } this._permStoreProxy = proxy; - }, -}); + } +}; function clamp(value, min, max) { return Math.max(min, Math.min(max, value)); } -var AppAuthorizer = new Lang.Class({ - Name: 'LocationAppAuthorizer', - - _init(desktopId, - reqAccuracyLevel, - permStoreProxy, - maxAccuracyLevel) { +var AppAuthorizer = class { + constructor(desktopId, reqAccuracyLevel, permStoreProxy, maxAccuracyLevel) { this.desktopId = desktopId; this.reqAccuracyLevel = reqAccuracyLevel; this._permStoreProxy = permStoreProxy; @@ -249,7 +240,7 @@ var AppAuthorizer = new Lang.Class({ this._permissions = {}; this._accuracyLevel = GeoclueAccuracyLevel.NONE; - }, + } authorize(onAuthDone) { this._onAuthDone = onAuthDone; @@ -265,7 +256,7 @@ var AppAuthorizer = new Lang.Class({ this._permStoreProxy.LookupRemote(APP_PERMISSIONS_TABLE, APP_PERMISSIONS_ID, this._onPermLookupDone.bind(this)); - }, + } _onPermLookupDone(result, error) { if (error != null) { @@ -298,7 +289,7 @@ var AppAuthorizer = new Lang.Class({ GeoclueAccuracyLevel.NONE; this._completeAuth(); } - }, + } _userAuthorizeApp() { let name = this._app.get_name(); @@ -306,7 +297,7 @@ var AppAuthorizer = new Lang.Class({ let reason = appInfo.get_locale_string("X-Geoclue-Reason"); this._showAppAuthDialog(name, reason); - }, + } _showAppAuthDialog(name, reason) { this._dialog = new GeolocationDialog(name, @@ -320,7 +311,7 @@ var AppAuthorizer = new Lang.Class({ }); this._dialog.open(); - }, + } _completeAuth() { if (this._accuracyLevel != GeoclueAccuracyLevel.NONE) { @@ -331,7 +322,7 @@ var AppAuthorizer = new Lang.Class({ this._saveToPermissionStore(); this._onAuthDone(this._accuracyLevel); - }, + } _saveToPermissionStore() { if (this._permStoreProxy == null) @@ -352,15 +343,12 @@ var AppAuthorizer = new Lang.Class({ if (error != null) log(error.message); }); - }, -}); + } +}; -var GeolocationDialog = new Lang.Class({ - Name: 'GeolocationDialog', - Extends: ModalDialog.ModalDialog, - - _init(name, subtitle, reqAccuracyLevel) { - this.parent({ styleClass: 'geolocation-dialog' }); +var GeolocationDialog = class extends ModalDialog.ModalDialog { + constructor(name, subtitle, reqAccuracyLevel) { + super({ styleClass: 'geolocation-dialog' }); this.reqAccuracyLevel = reqAccuracyLevel; let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' }); @@ -380,16 +368,16 @@ var GeolocationDialog = new Lang.Class({ action: this._onGrantClicked.bind(this) }); this.setInitialKeyFocus(button); - }, + } _onGrantClicked() { this.emit('response', this.reqAccuracyLevel); this.close(); - }, + } _onDenyClicked() { this.emit('response', GeoclueAccuracyLevel.NONE); this.close(); } -}); +}; Signals.addSignalMethods(GeolocationDialog.prototype); diff --git a/js/ui/status/network.js b/js/ui/status/network.js index 92a00301b..a2388bd8b 100644 --- a/js/ui/status/network.js +++ b/js/ui/status/network.js @@ -4,7 +4,6 @@ const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; const Gio = imports.gi.Gio; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Mainloop = imports.mainloop; const NM = imports.gi.NM; const Signals = imports.signals; @@ -83,10 +82,8 @@ function ensureActiveConnectionProps(active, client) { } } -var NMConnectionItem = new Lang.Class({ - Name: 'NMConnectionItem', - - _init(section, connection) { +var NMConnectionItem = class { + constructor(section, connection) { this._section = section; this._connection = connection; this._activeConnection = null; @@ -94,7 +91,7 @@ var NMConnectionItem = new Lang.Class({ this._buildUI(); this._sync(); - }, + } _buildUI() { this.labelItem = new PopupMenu.PopupMenuItem(''); @@ -102,12 +99,12 @@ var NMConnectionItem = new Lang.Class({ this.radioItem = new PopupMenu.PopupMenuItem(this._connection.get_id(), false); this.radioItem.connect('activate', this._activate.bind(this)); - }, + } destroy() { this.labelItem.destroy(); this.radioItem.destroy(); - }, + } updateForConnection(connection) { // connection should always be the same object @@ -120,25 +117,25 @@ var NMConnectionItem = new Lang.Class({ this.radioItem.label.text = connection.get_id(); this._sync(); this.emit('name-changed'); - }, + } getName() { return this._connection.get_id(); - }, + } isActive() { if (this._activeConnection == null) return false; return this._activeConnection.state <= NM.ActiveConnectionState.ACTIVATED; - }, + } _sync() { let isActive = this.isActive(); this.labelItem.label.text = isActive ? _("Turn Off") : this._section.getConnectLabel(); this.radioItem.setOrnament(isActive ? PopupMenu.Ornament.DOT : PopupMenu.Ornament.NONE); this.emit('icon-changed'); - }, + } _toggle() { if (this._activeConnection == null) @@ -147,18 +144,18 @@ var NMConnectionItem = new Lang.Class({ this._section.deactivateConnection(this._activeConnection); this._sync(); - }, + } _activate() { if (this._activeConnection == null) this._section.activateConnection(this._connection); this._sync(); - }, + } _connectionStateChanged(ac, newstate, reason) { this._sync(); - }, + } setActiveConnection(activeConnection) { if (this._activeConnectionChangedId > 0) { @@ -173,15 +170,15 @@ var NMConnectionItem = new Lang.Class({ this._connectionStateChanged.bind(this)); this._sync(); - }, -}); + } +}; Signals.addSignalMethods(NMConnectionItem.prototype); -var NMConnectionSection = new Lang.Class({ - Name: 'NMConnectionSection', - Abstract: true, +var NMConnectionSection = class { + constructor(client) { + if (new.target === NMConnectionSection) + throw new TypeError('Cannot instantiate abstract type ' + new.target.name); - _init(client) { this._client = client; this._connectionItems = new Map(); @@ -195,7 +192,7 @@ var NMConnectionSection = new Lang.Class({ this.item.menu.addMenuItem(this._radioSection); this._notifyConnectivityId = this._client.connect('notify::connectivity', this._iconChanged.bind(this)); - }, + } destroy() { if (this._notifyConnectivityId != 0) { @@ -204,12 +201,12 @@ var NMConnectionSection = new Lang.Class({ } this.item.destroy(); - }, + } _iconChanged() { this._sync(); this.emit('icon-changed'); - }, + } _sync() { let nItems = this._connectionItems.size; @@ -219,27 +216,27 @@ var NMConnectionSection = new Lang.Class({ this.item.label.text = this._getStatus(); this.item.icon.icon_name = this._getMenuIcon(); - }, + } _getMenuIcon() { return this.getIndicatorIcon(); - }, + } getConnectLabel() { return _("Connect"); - }, + } _connectionValid(connection) { return true; - }, + } _connectionSortFunction(one, two) { return GLib.utf8_collate(one.get_id(), two.get_id()); - }, + } _makeConnectionItem(connection) { return new NMConnectionItem(this, connection); - }, + } checkConnection(connection) { if (!this._connectionValid(connection)) @@ -259,7 +256,7 @@ var NMConnectionSection = new Lang.Class({ this._updateForConnection(item, connection); else this._addConnection(connection); - }, + } _updateForConnection(item, connection) { let pos = this._connections.indexOf(connection); @@ -270,7 +267,7 @@ var NMConnectionSection = new Lang.Class({ this._radioSection.moveMenuItem(item.radioItem, pos); item.updateForConnection(connection); - }, + } _addConnection(connection) { let item = this._makeConnectionItem(connection); @@ -288,7 +285,7 @@ var NMConnectionSection = new Lang.Class({ this._radioSection.addMenuItem(item.radioItem, pos); this._connectionItems.set(connection.get_uuid(), item); this._sync(); - }, + } removeConnection(connection) { let uuid = connection.get_uuid(); @@ -303,17 +300,16 @@ var NMConnectionSection = new Lang.Class({ this._connections.splice(pos, 1); this._sync(); - }, -}); + } +}; Signals.addSignalMethods(NMConnectionSection.prototype); -var NMConnectionDevice = new Lang.Class({ - Name: 'NMConnectionDevice', - Extends: NMConnectionSection, - Abstract: true, +var NMConnectionDevice = class extends NMConnectionSection { + constructor(client, device) { + if (new.target === NMConnectionDevice) + throw new TypeError('Cannot instantiate abstract type ' + new.target.name); - _init(client, device) { - this.parent(client); + super(client); this._device = device; this._description = ''; @@ -322,19 +318,19 @@ var NMConnectionDevice = new Lang.Class({ this._stateChangedId = this._device.connect('state-changed', this._deviceStateChanged.bind(this)); this._activeConnectionChangedId = this._device.connect('notify::active-connection', this._activeConnectionChanged.bind(this)); - }, + } _canReachInternet() { if (this._client.primary_connection != this._device.active_connection) return true; return this._client.connectivity == NM.ConnectivityState.FULL; - }, + } _autoConnect() { let connection = new NM.SimpleConnection(); this._client.add_and_activate_connection_async(connection, this._device, null, null, null); - }, + } destroy() { if (this._stateChangedId) { @@ -346,8 +342,8 @@ var NMConnectionDevice = new Lang.Class({ this._activeConnectionChangedId = 0; } - this.parent(); - }, + super.destroy(); + } _activeConnectionChanged() { if (this._activeConnection) { @@ -357,7 +353,7 @@ var NMConnectionDevice = new Lang.Class({ } this._sync(); - }, + } _deviceStateChanged(device, newstate, oldstate, reason) { if (newstate == oldstate) { @@ -374,28 +370,28 @@ var NMConnectionDevice = new Lang.Class({ } this._sync(); - }, + } _connectionValid(connection) { return this._device.connection_valid(connection); - }, + } activateConnection(connection) { this._client.activate_connection_async(connection, this._device, null, null, null); - }, + } deactivateConnection(activeConnection) { this._device.disconnect(null); - }, + } setDeviceDescription(desc) { this._description = desc; this._sync(); - }, + } _getDescription() { return this._description; - }, + } _sync() { let nItems = this._connectionItems.size; @@ -414,8 +410,8 @@ var NMConnectionDevice = new Lang.Class({ } } - this.parent(); - }, + super._sync(); + } _getStatus() { if (!this._device) @@ -465,31 +461,31 @@ var NMConnectionDevice = new Lang.Class({ log('Device state invalid, is %d'.format(this._device.state)); return 'invalid'; } - }, -}); + } +}; -var NMDeviceWired = new Lang.Class({ - Name: 'NMDeviceWired', - Extends: NMConnectionDevice, - category: NMConnectionCategory.WIRED, - - _init(client, device) { - this.parent(client, device); +var NMDeviceWired = class extends NMConnectionDevice { + constructor(client, device) { + super(client, device); this.item.menu.addSettingsAction(_("Wired Settings"), 'gnome-network-panel.desktop'); - }, + } + + get category() { + return NMConnectionCategory.WIRED; + } _hasCarrier() { if (this._device instanceof NM.DeviceEthernet) return this._device.carrier; else return true; - }, + } _sync() { this.item.actor.visible = this._hasCarrier(); - this.parent(); - }, + super._sync(); + } getIndicatorIcon() { if (this._device.active_connection) { @@ -508,15 +504,11 @@ var NMDeviceWired = new Lang.Class({ } else return 'network-wired-disconnected-symbolic'; } -}); +}; -var NMDeviceModem = new Lang.Class({ - Name: 'NMDeviceModem', - Extends: NMConnectionDevice, - category: NMConnectionCategory.WWAN, - - _init(client, device) { - this.parent(client, device); +var NMDeviceModem = class extends NMConnectionDevice { + constructor(client, device) { + super(client, device); this.item.menu.addSettingsAction(_("Mobile Broadband Settings"), 'gnome-network-panel.desktop'); @@ -538,12 +530,16 @@ var NMDeviceModem = new Lang.Class({ this._iconChanged(); }); } - }, + } + + get category() { + return NMConnectionCategory.WWAN; + } _autoConnect() { Util.spawn(['gnome-control-center', 'network', 'connect-3g', this._device.get_path()]); - }, + } destroy() { if (this._operatorNameId) { @@ -555,8 +551,8 @@ var NMDeviceModem = new Lang.Class({ this._signalQualityId = 0; } - this.parent(); - }, + super.destroy(); + } _getStatus() { if (!this._client.wwan_hardware_enabled) @@ -570,8 +566,8 @@ var NMDeviceModem = new Lang.Class({ this._mobileDevice && this._mobileDevice.operator_name) return this._mobileDevice.operator_name; else - return this.parent(); - }, + return super._getStatus(); + } getIndicatorIcon() { if (this._device.active_connection) { @@ -582,31 +578,31 @@ var NMDeviceModem = new Lang.Class({ } else { return 'network-cellular-signal-none-symbolic'; } - }, + } _getSignalIcon() { return 'network-cellular-signal-' + signalToIcon(this._mobileDevice.signal_quality) + '-symbolic'; - }, -}); + } +}; -var NMDeviceBluetooth = new Lang.Class({ - Name: 'NMDeviceBluetooth', - Extends: NMConnectionDevice, - category: NMConnectionCategory.WWAN, - - _init(client, device) { - this.parent(client, device); +var NMDeviceBluetooth = class extends NMConnectionDevice { + constructor(client, device) { + super(client, device); this.item.menu.addSettingsAction(_("Bluetooth Settings"), 'gnome-network-panel.desktop'); - }, + } + + get category() { + return NMConnectionCategory.WWAN; + } _getDescription() { return this._device.name; - }, + } getConnectLabel() { return _("Connect to Internet"); - }, + } getIndicatorIcon() { if (this._device.active_connection) { @@ -621,12 +617,10 @@ var NMDeviceBluetooth = new Lang.Class({ return 'network-cellular-signal-none-symbolic'; } } -}); +}; -var NMWirelessDialogItem = new Lang.Class({ - Name: 'NMWirelessDialogItem', - - _init(network) { +var NMWirelessDialogItem = class { + constructor(network) { this._network = network; this._ap = network.accessPoints[0]; @@ -660,20 +654,20 @@ var NMWirelessDialogItem = new Lang.Class({ this._icons.add_actor(this._signalIcon); this._sync(); - }, + } _sync() { this._signalIcon.icon_name = this._getSignalIcon(); - }, + } updateBestAP(ap) { this._ap = ap; this._sync(); - }, + } setActive(isActive) { this._selectedIcon.opacity = isActive ? 255 : 0; - }, + } _getSignalIcon() { if (this._ap.mode == NM80211Mode.ADHOC) @@ -681,15 +675,12 @@ var NMWirelessDialogItem = new Lang.Class({ else return 'network-wireless-signal-' + signalToIcon(this._ap.strength) + '-symbolic'; } -}); +}; Signals.addSignalMethods(NMWirelessDialogItem.prototype); -var NMWirelessDialog = new Lang.Class({ - Name: 'NMWirelessDialog', - Extends: ModalDialog.ModalDialog, - - _init(client, device) { - this.parent({ styleClass: 'nm-dialog' }); +var NMWirelessDialog = class extends ModalDialog.ModalDialog { + constructor(client, device) { + super({ styleClass: 'nm-dialog' }); this._client = client; this._device = device; @@ -735,7 +726,7 @@ var NMWirelessDialog = new Lang.Class({ Main.sessionMode.disconnect(id); this.close(); }); - }, + } destroy() { if (this._apAddedId) { @@ -764,13 +755,13 @@ var NMWirelessDialog = new Lang.Class({ this._scanTimeoutId = 0; } - this.parent(); - }, + super.destroy(); + } _onScanTimeout() { this._device.request_scan_async(null, null); return GLib.SOURCE_CONTINUE; - }, + } _activeApChanged() { if (this._activeNetwork) @@ -786,13 +777,13 @@ var NMWirelessDialog = new Lang.Class({ if (this._activeNetwork) this._activeNetwork.item.setActive(true); this._updateSensitivity(); - }, + } _updateSensitivity() { let connectSensitive = this._client.wireless_enabled && this._selectedNetwork && (this._selectedNetwork != this._activeNetwork); this._connectButton.reactive = connectSensitive; this._connectButton.can_focus = connectSensitive; - }, + } _syncView() { if (this._rfkill.airplaneMode) { @@ -827,7 +818,7 @@ var NMWirelessDialog = new Lang.Class({ this._noNetworksSpinner.play(); else this._noNetworksSpinner.stop(); - }, + } _buildLayout() { let headline = new St.BoxLayout({ style_class: 'nm-dialog-header-hbox' }); @@ -906,7 +897,7 @@ var NMWirelessDialog = new Lang.Class({ this._connectButton = this.addButton({ action: this._connect.bind(this), label: _("Connect"), key: Clutter.Return }); - }, + } _connect() { let network = this._selectedNetwork; @@ -928,7 +919,7 @@ var NMWirelessDialog = new Lang.Class({ } this.close(); - }, + } _notifySsidCb(accessPoint) { if (accessPoint.get_ssid() != null) { @@ -936,7 +927,7 @@ var NMWirelessDialog = new Lang.Class({ accessPoint._notifySsidId = 0; this._accessPointAdded(this._device, accessPoint); } - }, + } _getApSecurityType(accessPoint) { if (accessPoint._secType) @@ -967,7 +958,7 @@ var NMWirelessDialog = new Lang.Class({ // cache the found value to avoid checking flags all the time accessPoint._secType = type; return type; - }, + } _networkSortFunction(one, two) { let oneHasConnection = one.connections.length != 0; @@ -1008,7 +999,7 @@ var NMWirelessDialog = new Lang.Class({ // sort alphabetically return GLib.utf8_collate(one.ssidText, two.ssidText); - }, + } _networkCompare(network, accessPoint) { if (!network.ssid.equal (accessPoint.get_ssid())) @@ -1019,7 +1010,7 @@ var NMWirelessDialog = new Lang.Class({ return false; return true; - }, + } _findExistingNetwork(accessPoint) { for (let i = 0; i < this._networks.length; i++) { @@ -1031,7 +1022,7 @@ var NMWirelessDialog = new Lang.Class({ } return null; - }, + } _findNetwork(accessPoint) { if (accessPoint.get_ssid() == null) @@ -1042,7 +1033,7 @@ var NMWirelessDialog = new Lang.Class({ return i; } return -1; - }, + } _checkConnections(network, accessPoint) { this._connections.forEach(connection => { @@ -1051,7 +1042,7 @@ var NMWirelessDialog = new Lang.Class({ network.connections.push(connection); } }); - }, + } _accessPointAdded(device, accessPoint) { if (accessPoint.get_ssid() == null) { @@ -1095,7 +1086,7 @@ var NMWirelessDialog = new Lang.Class({ } this._syncView(); - }, + } _accessPointRemoved(device, accessPoint) { let res = this._findExistingNetwork(accessPoint); @@ -1117,7 +1108,7 @@ var NMWirelessDialog = new Lang.Class({ } this._syncView(); - }, + } _resortItems() { let adjustment = this._scrollView.vscroll.adjustment; @@ -1129,7 +1120,7 @@ var NMWirelessDialog = new Lang.Class({ }); adjustment.value = scrollValue; - }, + } _selectNetwork(network) { if (this._selectedNetwork) @@ -1140,7 +1131,7 @@ var NMWirelessDialog = new Lang.Class({ if (this._selectedNetwork) this._selectedNetwork.item.actor.add_style_pseudo_class('selected'); - }, + } _createNetworkItem(network) { network.item = new NMWirelessDialogItem(network); @@ -1154,14 +1145,11 @@ var NMWirelessDialog = new Lang.Class({ if (keyFocus && keyFocus.contains(network.item.actor)) this._itemBox.grab_key_focus(); }); - }, -}); + } +}; -var NMDeviceWireless = new Lang.Class({ - Name: 'NMDeviceWireless', - category: NMConnectionCategory.WIRELESS, - - _init(client, device) { +var NMDeviceWireless = class { + constructor(client, device) { this._client = client; this._device = device; @@ -1183,12 +1171,16 @@ var NMDeviceWireless = new Lang.Class({ this._notifyConnectivityId = this._client.connect('notify::connectivity', this._iconChanged.bind(this)); this._sync(); - }, + } + + get category() { + return NMConnectionCategory.WIRELESS; + } _iconChanged() { this._sync(); this.emit('icon-changed'); - }, + } destroy() { if (this._activeApChangedId) { @@ -1221,7 +1213,7 @@ var NMDeviceWireless = new Lang.Class({ } this.item.destroy(); - }, + } _deviceStateChanged(device, newstate, oldstate, reason) { if (newstate == oldstate) { @@ -1238,26 +1230,26 @@ var NMDeviceWireless = new Lang.Class({ } this._sync(); - }, + } _toggleWifi() { this._client.wireless_enabled = !this._client.wireless_enabled; - }, + } _showDialog() { this._dialog = new NMWirelessDialog(this._client, this._device); this._dialog.connect('closed', this._dialogClosed.bind(this)); this._dialog.open(); - }, + } _dialogClosed() { this._dialog.destroy(); this._dialog = null; - }, + } _strengthChanged() { this._iconChanged(); - }, + } _activeApChanged() { if (this._activeAccessPoint) { @@ -1273,7 +1265,7 @@ var NMDeviceWireless = new Lang.Class({ } this._sync(); - }, + } _sync() { this._toggleItem.label.text = this._client.wireless_enabled ? _("Turn Off") : _("Turn On"); @@ -1281,12 +1273,12 @@ var NMDeviceWireless = new Lang.Class({ this.item.icon.icon_name = this._getMenuIcon(); this.item.label.text = this._getStatus(); - }, + } setDeviceDescription(desc) { this._description = desc; this._sync(); - }, + } _getStatus() { let ap = this._device.active_access_point; @@ -1311,21 +1303,21 @@ var NMDeviceWireless = new Lang.Class({ return _("%s Not Connected").format(this._description); else return ''; - }, + } _getMenuIcon() { if (this._device.active_connection) return this.getIndicatorIcon(); else return 'network-wireless-signal-none-symbolic'; - }, + } _canReachInternet() { if (this._client.primary_connection != this._device.active_connection) return true; return this._client.connectivity == NM.ConnectivityState.FULL; - }, + } _isHotSpotMaster() { if (!this._device.active_connection) @@ -1340,7 +1332,7 @@ var NMDeviceWireless = new Lang.Class({ return false; return ip4config.get_method() == NM.SETTING_IP4_CONFIG_METHOD_SHARED; - }, + } getIndicatorIcon() { if (this._device.state < NM.DeviceState.PREPARE) @@ -1366,20 +1358,17 @@ var NMDeviceWireless = new Lang.Class({ return 'network-wireless-signal-' + signalToIcon(ap.strength) + '-symbolic'; else return 'network-wireless-no-route-symbolic'; - }, -}); + } +}; Signals.addSignalMethods(NMDeviceWireless.prototype); -var NMVpnConnectionItem = new Lang.Class({ - Name: 'NMVpnConnectionItem', - Extends: NMConnectionItem, - +var NMVpnConnectionItem = class extends NMConnectionItem { isActive() { if (this._activeConnection == null) return false; return this._activeConnection.vpn_state != NM.VpnConnectionState.DISCONNECTED; - }, + } _buildUI() { this.labelItem = new PopupMenu.PopupMenuItem(''); @@ -1387,7 +1376,7 @@ var NMVpnConnectionItem = new Lang.Class({ this.radioItem = new PopupMenu.PopupSwitchMenuItem(this._connection.get_id(), false); this.radioItem.connect('toggled', this._toggle.bind(this)); - }, + } _sync() { let isActive = this.isActive(); @@ -1395,7 +1384,7 @@ var NMVpnConnectionItem = new Lang.Class({ this.radioItem.setToggleState(isActive); this.radioItem.setStatus(this._getStatus()); this.emit('icon-changed'); - }, + } _getStatus() { if (this._activeConnection == null) @@ -1417,7 +1406,7 @@ var NMVpnConnectionItem = new Lang.Class({ default: return 'invalid'; } - }, + } _connectionStateChanged(ac, newstate, reason) { if (newstate == NM.VpnConnectionState.FAILED && @@ -1429,8 +1418,8 @@ var NMVpnConnectionItem = new Lang.Class({ } this.emit('icon-changed'); - this.parent(); - }, + super._connectionStateChanged(); + } setActiveConnection(activeConnection) { if (this._activeConnectionChangedId > 0) { @@ -1445,7 +1434,7 @@ var NMVpnConnectionItem = new Lang.Class({ this._connectionStateChanged.bind(this)); this._sync(); - }, + } getIndicatorIcon() { if (this._activeConnection) { @@ -1456,32 +1445,32 @@ var NMVpnConnectionItem = new Lang.Class({ } else { return ''; } - }, -}); + } +}; -var NMVpnSection = new Lang.Class({ - Name: 'NMVpnSection', - Extends: NMConnectionSection, - category: NMConnectionCategory.VPN, - - _init(client) { - this.parent(client); +var NMVpnSection = class extends NMConnectionSection { + constructor(client) { + super(client); this.item.menu.addSettingsAction(_("VPN Settings"), 'gnome-network-panel.desktop'); this._sync(); - }, + } _sync() { let nItems = this._connectionItems.size; this.item.actor.visible = (nItems > 0); - this.parent(); - }, + super._sync(); + } + + get category() { + return NMConnectionCategory.VPN; + } _getDescription() { return _("VPN"); - }, + } _getStatus() { let values = this._connectionItems.values(); @@ -1491,19 +1480,19 @@ var NMVpnSection = new Lang.Class({ } return _("VPN Off"); - }, + } _getMenuIcon() { return this.getIndicatorIcon() || 'network-vpn-symbolic'; - }, + } activateConnection(connection) { this._client.activate_connection_async(connection, null, null, null, null); - }, + } deactivateConnection(activeConnection) { this._client.deactivate_connection(activeConnection, null); - }, + } setActiveConnections(vpnConnections) { let connections = this._connectionItems.values(); @@ -1516,11 +1505,11 @@ var NMVpnSection = new Lang.Class({ item.setActiveConnection(a); } }); - }, + } _makeConnectionItem(connection) { return new NMVpnConnectionItem(this, connection); - }, + } getIndicatorIcon() { let items = this._connectionItems.values(); @@ -1530,16 +1519,13 @@ var NMVpnSection = new Lang.Class({ return icon; } return ''; - }, -}); + } +}; Signals.addSignalMethods(NMVpnSection.prototype); -var DeviceCategory = new Lang.Class({ - Name: 'DeviceCategory', - Extends: PopupMenu.PopupMenuSection, - - _init(category) { - this.parent(); +var DeviceCategory = class extends PopupMenu.PopupMenuSection { + constructor(category) { + super(); this._category = category; @@ -1558,7 +1544,7 @@ var DeviceCategory = new Lang.Class({ 'gnome-network-panel.desktop'); this._summaryItem.actor.hide(); - }, + } _sync() { let nDevices = this.section.box.get_children().reduce( @@ -1567,7 +1553,7 @@ var DeviceCategory = new Lang.Class({ let shouldSummarize = nDevices > MAX_DEVICE_ITEMS; this._summaryItem.actor.visible = shouldSummarize; this.section.actor.visible = !shouldSummarize; - }, + } _getSummaryIcon() { switch(this._category) { @@ -1578,7 +1564,7 @@ var DeviceCategory = new Lang.Class({ return 'network-wireless-symbolic'; } return ''; - }, + } _getSummaryLabel(nDevices) { switch(this._category) { @@ -1597,14 +1583,11 @@ var DeviceCategory = new Lang.Class({ } return ''; } -}); +}; -var NMApplet = new Lang.Class({ - Name: 'NMApplet', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var NMApplet = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._primaryIndicator = this._addIndicator(); this._vpnIndicator = this._addIndicator(); @@ -1626,7 +1609,7 @@ var NMApplet = new Lang.Class({ this._ctypes[NM.SETTING_VPN_SETTING_NAME] = NMConnectionCategory.VPN; NM.Client.new_async(null, this._clientGot.bind(this)); - }, + } _clientGot(obj, result) { this._client = NM.Client.new_finish(result); @@ -1677,12 +1660,12 @@ var NMApplet = new Lang.Class({ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); - }, + } _sessionUpdated() { let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; this.menu.setSensitive(sensitive); - }, + } _ensureSource() { if (!this._source) { @@ -1693,7 +1676,7 @@ var NMApplet = new Lang.Class({ this._source.connect('destroy', () => { this._source = null; }); Main.messageTray.add(this._source); } - }, + } _readDevices() { let devices = this._client.get_devices() || [ ]; @@ -1701,7 +1684,7 @@ var NMApplet = new Lang.Class({ this._deviceAdded(this._client, devices[i], true); } this._syncDeviceNames(); - }, + } _notify(iconName, title, text, urgency) { if (this._notification) @@ -1717,7 +1700,7 @@ var NMApplet = new Lang.Class({ this._notification = null; }); this._source.notify(this._notification); - }, + } _onActivationFailed(device, reason) { // XXX: nm-applet has no special text depending on reason @@ -1726,7 +1709,7 @@ var NMApplet = new Lang.Class({ _("Connection failed"), _("Activation of network connection failed"), MessageTray.Urgency.HIGH); - }, + } _syncDeviceNames() { let names = NM.Device.disambiguate_names(this._nmDevices); @@ -1736,7 +1719,7 @@ var NMApplet = new Lang.Class({ if (device._delegate) device._delegate.setDeviceDescription(description); } - }, + } _deviceAdded(client, device, skipSyncDeviceNames) { if (device._delegate) { @@ -1760,7 +1743,7 @@ var NMApplet = new Lang.Class({ }); } } - }, + } _addDeviceWrapper(wrapper) { wrapper._activationFailedId = wrapper.connect('activation-failed', @@ -1771,7 +1754,7 @@ var NMApplet = new Lang.Class({ let devices = this._devices[wrapper.category].devices; devices.push(wrapper); - }, + } _deviceRemoved(client, device) { let pos = this._nmDevices.indexOf(device); @@ -1787,7 +1770,7 @@ var NMApplet = new Lang.Class({ } this._removeDeviceWrapper(wrapper); - }, + } _removeDeviceWrapper(wrapper) { wrapper.disconnect(wrapper._activationFailedId); @@ -1796,7 +1779,7 @@ var NMApplet = new Lang.Class({ let devices = this._devices[wrapper.category].devices; let pos = devices.indexOf(wrapper); devices.splice(pos, 1); - }, + } _getMainConnection() { let connection; @@ -1814,7 +1797,7 @@ var NMApplet = new Lang.Class({ } return null; - }, + } _syncMainConnection() { if (this._mainConnectionIconChangedId > 0) { @@ -1838,7 +1821,7 @@ var NMApplet = new Lang.Class({ this._updateIcon(); this._syncConnectivity(); - }, + } _syncVpnConnections() { let activeConnections = this._client.get_active_connections() || []; @@ -1851,12 +1834,12 @@ var NMApplet = new Lang.Class({ this._vpnSection.setActiveConnections(vpnConnections); this._updateIcon(); - }, + } _mainConnectionStateChanged() { if (this._mainConnection.state == NM.ActiveConnectionState.ACTIVATED && this._notification) this._notification.destroy(); - }, + } _ignoreConnection(connection) { let setting = connection.get_setting_connection(); @@ -1868,7 +1851,7 @@ var NMApplet = new Lang.Class({ return true; return false; - }, + } _addConnection(connection) { if (this._ignoreConnection(connection)) @@ -1882,16 +1865,16 @@ var NMApplet = new Lang.Class({ this._updateConnection(connection); this._connections.push(connection); - }, + } _readConnections() { let connections = this._client.get_connections(); connections.forEach(this._addConnection.bind(this)); - }, + } _connectionAdded(client, connection) { this._addConnection(connection); - }, + } _connectionRemoved(client, connection) { let pos = this._connections.indexOf(connection); @@ -1915,7 +1898,7 @@ var NMApplet = new Lang.Class({ connection.disconnect(connection._updatedId); connection._updatedId = 0; - }, + } _updateConnection(connection) { let connectionSettings = connection.get_setting_by_name(NM.SETTING_CONNECTION_SETTING_NAME); @@ -1936,7 +1919,7 @@ var NMApplet = new Lang.Class({ wrapper.checkConnection(connection); }); } - }, + } _syncNMState() { this.indicators.visible = this._client.nm_running; @@ -1944,7 +1927,7 @@ var NMApplet = new Lang.Class({ this._updateIcon(); this._syncConnectivity(); - }, + } _flushConnectivityQueue() { if (this._portalHelperProxy) { @@ -1953,7 +1936,7 @@ var NMApplet = new Lang.Class({ } this._connectivityQueue = []; - }, + } _closeConnectivityCheck(path) { let index = this._connectivityQueue.indexOf(path); @@ -1964,7 +1947,7 @@ var NMApplet = new Lang.Class({ this._connectivityQueue.splice(index, 1); } - }, + } _portalHelperDone(proxy, emitter, parameters) { let [path, result] = parameters; @@ -1988,7 +1971,7 @@ var NMApplet = new Lang.Class({ } else { log('Invalid result from portal helper: ' + result); } - }, + } _syncConnectivity() { if (this._mainConnection == null || @@ -2033,7 +2016,7 @@ var NMApplet = new Lang.Class({ } this._connectivityQueue.push(path); - }, + } _updateIcon() { if (!this._client.networking_enabled) { @@ -2059,4 +2042,4 @@ var NMApplet = new Lang.Class({ this._vpnIndicator.icon_name = this._vpnSection.getIndicatorIcon(); this._vpnIndicator.visible = (this._vpnIndicator.icon_name != ''); } -}); +}; diff --git a/js/ui/status/nightLight.js b/js/ui/status/nightLight.js index d4a2fef93..353db92c3 100644 --- a/js/ui/status/nightLight.js +++ b/js/ui/status/nightLight.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; @@ -15,12 +14,9 @@ const OBJECT_PATH = '/org/gnome/SettingsDaemon/Color'; const ColorInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Color'); const ColorProxy = Gio.DBusProxy.makeProxyWrapper(ColorInterface); -var Indicator = new Lang.Class({ - Name: 'NightLightIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._indicator = this._addIndicator(); this._indicator.icon_name = 'night-light-symbolic'; @@ -50,12 +46,12 @@ var Indicator = new Lang.Class({ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); this._sync(); - }, + } _sessionUpdated() { let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; this.menu.setSensitive(sensitive); - }, + } _sync() { let visible = this._proxy.NightLightActive; @@ -67,4 +63,4 @@ var Indicator = new Lang.Class({ : _("Disable Until Tomorrow"); this._item.actor.visible = this._indicator.visible = visible; } -}); +}; diff --git a/js/ui/status/power.js b/js/ui/status/power.js index 4a6ce2c24..6ffd24e04 100644 --- a/js/ui/status/power.js +++ b/js/ui/status/power.js @@ -3,7 +3,6 @@ const Gio = imports.gi.Gio; const Clutter = imports.gi.Clutter; const St = imports.gi.St; -const Lang = imports.lang; const UPower = imports.gi.UPowerGlib; const Main = imports.ui.main; @@ -20,12 +19,9 @@ const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface) const SHOW_BATTERY_PERCENTAGE = 'show-battery-percentage'; -var Indicator = new Lang.Class({ - Name: 'PowerIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' }); this._desktopSettings.connect('changed::' + SHOW_BATTERY_PERCENTAGE, @@ -54,12 +50,12 @@ var Indicator = new Lang.Class({ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); - }, + } _sessionUpdated() { let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; this.menu.setSensitive(sensitive); - }, + } _getStatus() { let seconds = 0; @@ -97,7 +93,7 @@ var Indicator = new Lang.Class({ } return null; - }, + } _sync() { // Do we have batteries or a UPS? @@ -128,5 +124,5 @@ var Indicator = new Lang.Class({ // The status label this._item.label.text = this._getStatus(); - }, -}); + } +}; diff --git a/js/ui/status/remoteAccess.js b/js/ui/status/remoteAccess.js index db94d130d..ab0b55f28 100644 --- a/js/ui/status/remoteAccess.js +++ b/js/ui/status/remoteAccess.js @@ -1,17 +1,13 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Meta = imports.gi.Meta; const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; -var RemoteAccessApplet = new Lang.Class({ - Name: 'RemoteAccessApplet', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var RemoteAccessApplet = class extends PanelMenu.SystemIndicator { + constructor() { + super(); let backend = Meta.get_backend(); let controller = backend.get_remote_access_controller(); @@ -33,7 +29,7 @@ var RemoteAccessApplet = new Lang.Class({ controller.connect('new-handle', (controller, handle) => { this._onNewHandle(handle); }); - }, + } _ensureControls() { if (this._indicator) @@ -52,7 +48,7 @@ var RemoteAccessApplet = new Lang.Class({ }); this._item.icon.icon_name = 'screen-shared-symbolic'; this.menu.addMenuItem(this._item); - }, + } _sync() { if (this._handles.size == 0) { @@ -62,12 +58,12 @@ var RemoteAccessApplet = new Lang.Class({ this._indicator.visible = true; this._item.actor.visible = true; } - }, + } _onStopped(handle) { this._handles.delete(handle); this._sync(); - }, + } _onNewHandle(handle) { this._handles.add(handle); @@ -77,5 +73,5 @@ var RemoteAccessApplet = new Lang.Class({ this._ensureControls(); this._sync(); } - }, -}); + } +}; diff --git a/js/ui/status/rfkill.js b/js/ui/status/rfkill.js index 8022fb94b..e818e8788 100644 --- a/js/ui/status/rfkill.js +++ b/js/ui/status/rfkill.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Gio = imports.gi.Gio; -const Lang = imports.lang; const Signals = imports.signals; const Main = imports.ui.main; @@ -16,10 +15,8 @@ const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill'; const RfkillManagerInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Rfkill'); const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface); -var RfkillManager = new Lang.Class({ - Name: 'RfkillManager', - - _init() { +var RfkillManager = class { + constructor() { this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, (proxy, error) => { if (error) { @@ -30,28 +27,28 @@ var RfkillManager = new Lang.Class({ this._changed.bind(this)); this._changed(); }); - }, + } get airplaneMode() { return this._proxy.AirplaneMode; - }, + } set airplaneMode(v) { this._proxy.AirplaneMode = v; - }, + } get hwAirplaneMode() { return this._proxy.HardwareAirplaneMode; - }, + } get shouldShowAirplaneMode() { return this._proxy.ShouldShowAirplaneMode; - }, + } _changed() { this.emit('airplane-mode-changed'); } -}); +}; Signals.addSignalMethods(RfkillManager.prototype); var _manager; @@ -63,12 +60,9 @@ function getRfkillManager() { return _manager; } -var Indicator = new Lang.Class({ - Name: 'RfkillIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._manager = getRfkillManager(); this._manager.connect('airplane-mode-changed', this._sync.bind(this)); @@ -90,12 +84,12 @@ var Indicator = new Lang.Class({ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); - }, + } _sessionUpdated() { let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; this.menu.setSensitive(sensitive); - }, + } _sync() { let airplaneMode = this._manager.airplaneMode; @@ -110,5 +104,5 @@ var Indicator = new Lang.Class({ this._offItem.label.text = _("Use hardware switch to turn off"); else this._offItem.label.text = _("Turn Off"); - }, -}); + } +}; diff --git a/js/ui/status/screencast.js b/js/ui/status/screencast.js index a084f1a96..4f147e0ea 100644 --- a/js/ui/status/screencast.js +++ b/js/ui/status/screencast.js @@ -1,16 +1,11 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; - const Main = imports.ui.main; const PanelMenu = imports.ui.panelMenu; -var Indicator = new Lang.Class({ - Name: 'ScreencastIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._indicator = this._addIndicator(); this._indicator.icon_name = 'media-record-symbolic'; @@ -18,9 +13,9 @@ var Indicator = new Lang.Class({ this._sync(); Main.screencastService.connect('updated', this._sync.bind(this)); - }, + } _sync() { this._indicator.visible = Main.screencastService.isRecording; - }, -}); + } +}; diff --git a/js/ui/status/system.js b/js/ui/status/system.js index 41bcacd94..bbbc44ea1 100644 --- a/js/ui/status/system.js +++ b/js/ui/status/system.js @@ -4,7 +4,6 @@ const AccountsService = imports.gi.AccountsService; const Clutter = imports.gi.Clutter; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Shell = imports.gi.Shell; const St = imports.gi.St; const GObject = imports.gi.GObject; @@ -16,10 +15,8 @@ const PanelMenu = imports.ui.panelMenu; const PopupMenu = imports.ui.popupMenu; -var AltSwitcher = new Lang.Class({ - Name: 'AltSwitcher', - - _init(standard, alternate) { +var AltSwitcher = class { + constructor(standard, alternate) { this._standard = standard; this._standard.connect('notify::visible', this._sync.bind(this)); if (this._standard instanceof St.Button) @@ -42,7 +39,7 @@ var AltSwitcher = new Lang.Class({ this.actor = new St.Bin(); this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('notify::mapped', () => { this._flipped = false; }); - }, + } _sync() { let childToShow = null; @@ -83,14 +80,14 @@ var AltSwitcher = new Lang.Class({ } this.actor.show(); - }, + } _onDestroy() { if (this._capturedEventId > 0) { global.stage.disconnect(this._capturedEventId); this._capturedEventId = 0; } - }, + } _onCapturedEvent(actor, event) { let type = event.type(); @@ -101,7 +98,7 @@ var AltSwitcher = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } _onLongPress(action, actor, state) { if (state == Clutter.LongPressState.QUERY || @@ -112,14 +109,11 @@ var AltSwitcher = new Lang.Class({ this._sync(); return true; } -}); +}; -var Indicator = new Lang.Class({ - Name: 'SystemIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); let userManager = AccountsService.UserManager.get_default(); this._user = userManager.get_user(GLib.get_user_name()); @@ -146,7 +140,7 @@ var Indicator = new Lang.Class({ Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdated(); - }, + } _updateActionsVisibility() { let visible = (this._settingsAction.visible || @@ -155,18 +149,18 @@ var Indicator = new Lang.Class({ this._altSwitcher.actor.visible); this._actionsItem.actor.visible = visible; - }, + } _sessionUpdated() { this._settingsAction.visible = Main.sessionMode.allowSettings; - }, + } _updateMultiUser() { let hasSwitchUser = this._loginScreenItem.actor.visible; let hasLogout = this._logoutItem.actor.visible; this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout; - }, + } _updateSwitchUserSubMenu() { this._switchUserSubMenu.label.text = this._user.get_real_name(); @@ -199,7 +193,7 @@ var Indicator = new Lang.Class({ this._switchUserSubMenu.icon.add_style_class_name('default-icon'); this._switchUserSubMenu.icon.remove_style_class_name('user-icon'); } - }, + } _createActionButton(iconName, accessibleName) { let icon = new St.Button({ reactive: true, @@ -209,7 +203,7 @@ var Indicator = new Lang.Class({ style_class: 'system-menu-action' }); icon.child = new St.Icon({ icon_name: iconName }); return icon; - }, + } _createSubMenu() { let bindFlags = GObject.BindingFlags.DEFAULT | GObject.BindingFlags.SYNC_CREATE; @@ -340,11 +334,11 @@ var Indicator = new Lang.Class({ () => { this._updateActionsVisibility(); }); this._altSwitcher.actor.connect('notify::visible', () => { this._updateActionsVisibility(); }); - }, + } _onSettingsClicked() { this.menu.itemActivated(); Main.overview.hide(); this._settingsApp.activate(); } -}); +}; diff --git a/js/ui/status/thunderbolt.js b/js/ui/status/thunderbolt.js index 1f873c166..8362b5d73 100644 --- a/js/ui/status/thunderbolt.js +++ b/js/ui/status/thunderbolt.js @@ -4,7 +4,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; -const Lang = imports.lang; const Polkit = imports.gi.Polkit; const Shell = imports.gi.Shell; const Signals = imports.signals; @@ -52,11 +51,8 @@ const BOLT_DBUS_CLIENT_IFACE = 'org.freedesktop.bolt1.Manager'; const BOLT_DBUS_NAME = 'org.freedesktop.bolt'; const BOLT_DBUS_PATH = '/org/freedesktop/bolt'; -var Client = new Lang.Class({ - Name: 'BoltClient', - - _init() { - +var Client = class { + constructor() { this._proxy = null; let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface); Gio.DBusProxy.new(Gio.DBus.system, @@ -69,7 +65,7 @@ var Client = new Lang.Class({ this._onProxyReady.bind(this)); this.probing = false; - }, + } _onProxyReady(o, res) { try { @@ -85,7 +81,7 @@ var Client = new Lang.Class({ if (this.probing) this.emit('probing-changed', this.probing); - }, + } _onPropertiesChanged(proxy, properties) { let unpacked = properties.deep_unpack(); @@ -94,7 +90,7 @@ var Client = new Lang.Class({ this.probing = this._proxy.Probing; this.emit('probing-changed', this.probing); - }, + } _onDeviceAdded(proxy, emitter, params) { let [path] = params; @@ -102,7 +98,7 @@ var Client = new Lang.Class({ BOLT_DBUS_NAME, path); this.emit('device-added', device); - }, + } /* public methods */ close() { @@ -112,7 +108,7 @@ var Client = new Lang.Class({ this._proxy.disconnectSignal(this._deviceAddedId); this._proxy.disconnect(this._propsChangedId); this._proxy = null; - }, + } enrollDevice(id, policy, callback) { this._proxy.EnrollDeviceRemote(id, policy, AuthCtrl.NONE, @@ -129,34 +125,29 @@ var Client = new Lang.Class({ path); callback(device, null); }); - }, + } get authMode () { return this._proxy.AuthMode; } - -}); - +}; Signals.addSignalMethods(Client.prototype); /* helper class to automatically authorize new devices */ -var AuthRobot = new Lang.Class({ - Name: 'BoltAuthRobot', - - _init(client) { - +var AuthRobot = class { + constructor(client) { this._client = client; this._devicesToEnroll = []; this._enrolling = false; this._client.connect('device-added', this._onDeviceAdded.bind(this)); - }, + } close() { this.disconnectAll(); this._client = null; - }, + } /* the "device-added" signal will be emitted by boltd for every * device that is not currently stored in the database. We are @@ -184,7 +175,7 @@ var AuthRobot = new Lang.Class({ * of the list */ this._devicesToEnroll.push(dev); this._enrollDevices(); - }, + } /* The enrollment queue: * - new devices will be added to the end of the array. @@ -199,7 +190,7 @@ var AuthRobot = new Lang.Class({ this._enrolling = true; GLib.idle_add(GLib.PRIORITY_DEFAULT, this._enrollDevicesIdle.bind(this)); - }, + } _onEnrollDone(device, error) { if (error) @@ -214,7 +205,7 @@ var AuthRobot = new Lang.Class({ if (this._enrolling) GLib.idle_add(GLib.PRIORITY_DEFAULT, this._enrollDevicesIdle.bind(this)); - }, + } _enrollDevicesIdle() { let devices = this._devicesToEnroll; @@ -228,19 +219,14 @@ var AuthRobot = new Lang.Class({ this._onEnrollDone.bind(this)); return GLib.SOURCE_REMOVE; } - -}); - +}; Signals.addSignalMethods(AuthRobot.prototype); /* eof client.js */ -var Indicator = new Lang.Class({ - Name: 'ThunderboltIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._indicator = this._addIndicator(); this._indicator.icon_name = 'thunderbolt-symbolic'; @@ -266,12 +252,12 @@ var Indicator = new Lang.Class({ log('Failed to get PolKit permission: %s'.format(e.toString())); } }); - }, + } _onDestroy() { this._robot.close(); this._client.close(); - }, + } _ensureSource() { if (!this._source) { @@ -283,7 +269,7 @@ var Indicator = new Lang.Class({ } return this._source; - }, + } _notify(title, body) { if (this._notification) @@ -302,14 +288,13 @@ var Indicator = new Lang.Class({ app.activate(); }); this._source.notify(this._notification); - }, + } /* Session callbacks */ _sync() { let active = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; this._indicator.visible = active && this._client.probing; - }, - + } /* Bolt.Client callbacks */ _onProbing(cli, probing) { @@ -319,8 +304,7 @@ var Indicator = new Lang.Class({ this._indicator.icon_name = 'thunderbolt-symbolic'; this._sync(); - }, - + } /* AuthRobot callbacks */ _onEnrollDevice(obj, device, policy) { @@ -346,12 +330,11 @@ var Indicator = new Lang.Class({ const body = _("New device has been detected and needs to be authorized by an administrator."); this._notify(title, body); } - }, + } _onEnrollFailed(obj, device, error) { const title = _("Thunderbolt authorization error"); const body = _("Could not authorize the Thunderbolt device: %s".format(error.message)); this._notify(title, body); } - -}); +}; diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js index 019030570..365ec4123 100644 --- a/js/ui/status/volume.js +++ b/js/ui/status/volume.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; -const Lang = imports.lang; const Gio = imports.gi.Gio; const Gvc = imports.gi.Gvc; const St = imports.gi.St; @@ -29,10 +28,8 @@ function getMixerControl() { return _mixerControl; } -var StreamSlider = new Lang.Class({ - Name: 'StreamSlider', - - _init(control) { +var StreamSlider = class { + constructor(control) { this._control = control; this.item = new PopupMenu.PopupBaseMenuItem({ activate: false }); @@ -58,11 +55,11 @@ var StreamSlider = new Lang.Class({ this._stream = null; this._volumeCancellable = null; - }, + } get stream() { return this._stream; - }, + } set stream(stream) { if (this._stream) { @@ -79,37 +76,37 @@ var StreamSlider = new Lang.Class({ } this._updateVisibility(); - }, + } _disconnectStream(stream) { stream.disconnect(this._mutedChangedId); this._mutedChangedId = 0; stream.disconnect(this._volumeChangedId); this._volumeChangedId = 0; - }, + } _connectStream(stream) { this._mutedChangedId = stream.connect('notify::is-muted', this._updateVolume.bind(this)); this._volumeChangedId = stream.connect('notify::volume', this._updateVolume.bind(this)); - }, + } _shouldBeVisible() { return this._stream != null; - }, + } _updateVisibility() { let visible = this._shouldBeVisible(); this.item.actor.visible = visible; - }, + } scroll(event) { return this._slider.scroll(event); - }, + } setValue(value) { // piggy-back off of sliderChanged this._slider.setValue(value); - }, + } _sliderChanged(slider, value, property) { if (!this._stream) @@ -127,7 +124,7 @@ var StreamSlider = new Lang.Class({ this._stream.change_is_muted(false); } this._stream.push_volume(); - }, + } _notifyVolumeChange() { if (this._volumeCancellable) @@ -138,13 +135,13 @@ var StreamSlider = new Lang.Class({ player.play_from_theme('audio-volume-change', _("Volume changed"), this._volumeCancellable); - }, + } _updateVolume() { let muted = this._stream.is_muted; this._slider.setValue(muted ? 0 : (this._stream.volume / this._control.get_vol_max_norm())); this.emit('stream-updated'); - }, + } _amplifySettingsChanged() { this._allowAmplified = this._soundSettings.get_boolean(ALLOW_AMPLIFIED_VOLUME_KEY); @@ -156,7 +153,7 @@ var StreamSlider = new Lang.Class({ if (this._stream) this._updateVolume(); - }, + } getIcon() { if (!this._stream) @@ -180,14 +177,14 @@ var StreamSlider = new Lang.Class({ n = 4; } return icons[n]; - }, + } getLevel() { if (!this._stream) return null; return 100 * this._stream.volume / this._control.get_vol_max_norm(); - }, + } getMaxLevel() { let maxVolume = this._control.get_vol_max_norm(); @@ -196,23 +193,20 @@ var StreamSlider = new Lang.Class({ return 100 * maxVolume / this._control.get_vol_max_norm(); } -}); +}; Signals.addSignalMethods(StreamSlider.prototype); -var OutputStreamSlider = new Lang.Class({ - Name: 'OutputStreamSlider', - Extends: StreamSlider, - - _init(control) { - this.parent(control); +var OutputStreamSlider = class extends StreamSlider { + constructor(control) { + super(control); this._slider.actor.accessible_name = _("Volume"); - }, + } _connectStream(stream) { - this.parent(stream); + super._connectStream(stream); this._portChangedId = stream.connect('notify::port', this._portChanged.bind(this)); this._portChanged(); - }, + } _findHeadphones(sink) { // This only works for external headphones (e.g. bluetooth) @@ -227,19 +221,19 @@ var OutputStreamSlider = new Lang.Class({ return sink.get_port().port.indexOf('headphone') >= 0; return false; - }, + } _disconnectStream(stream) { - this.parent(stream); + super._disconnectStream(stream); stream.disconnect(this._portChangedId); this._portChangedId = 0; - }, + } _updateSliderIcon() { this._icon.icon_name = (this._hasHeadphones ? 'audio-headphones-symbolic' : 'audio-speakers-symbolic'); - }, + } _portChanged() { let hasHeadphones = this._findHeadphones(this._stream); @@ -248,24 +242,21 @@ var OutputStreamSlider = new Lang.Class({ this._updateSliderIcon(); } } -}); +}; -var InputStreamSlider = new Lang.Class({ - Name: 'InputStreamSlider', - Extends: StreamSlider, - - _init(control) { - this.parent(control); +var InputStreamSlider = class extends StreamSlider { + constructor(control) { + super(control); this._slider.actor.accessible_name = _("Microphone"); this._control.connect('stream-added', this._maybeShowInput.bind(this)); this._control.connect('stream-removed', this._maybeShowInput.bind(this)); this._icon.icon_name = 'audio-input-microphone-symbolic'; - }, + } _connectStream(stream) { - this.parent(stream); + super._connectStream(stream); this._maybeShowInput(); - }, + } _maybeShowInput() { // only show input widgets if any application is recording audio @@ -286,19 +277,16 @@ var InputStreamSlider = new Lang.Class({ this._showInput = showInput; this._updateVisibility(); - }, + } _shouldBeVisible() { - return this.parent() && this._showInput; + return super._shouldBeVisible() && this._showInput; } -}); +}; -var VolumeMenu = new Lang.Class({ - Name: 'VolumeMenu', - Extends: PopupMenu.PopupMenuSection, - - _init(control) { - this.parent(); +var VolumeMenu = class extends PopupMenu.PopupMenuSection { + constructor(control) { + super(); this.hasHeadphones = false; @@ -319,11 +307,11 @@ var VolumeMenu = new Lang.Class({ this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._onControlStateChanged(); - }, + } scroll(event) { return this._output.scroll(event); - }, + } _onControlStateChanged() { if (this._control.get_state() == Gvc.MixerControlState.READY) { @@ -332,35 +320,32 @@ var VolumeMenu = new Lang.Class({ } else { this.emit('icon-changed'); } - }, + } _readOutput() { this._output.stream = this._control.get_default_sink(); - }, + } _readInput() { this._input.stream = this._control.get_default_source(); - }, + } getIcon() { return this._output.getIcon(); - }, + } getLevel() { return this._output.getLevel(); - }, + } getMaxLevel() { return this._output.getMaxLevel(); } -}); +}; -var Indicator = new Lang.Class({ - Name: 'VolumeIndicator', - Extends: PanelMenu.SystemIndicator, - - _init() { - this.parent(); +var Indicator = class extends PanelMenu.SystemIndicator { + constructor() { + super(); this._primaryIndicator = this._addIndicator(); @@ -380,7 +365,7 @@ var Indicator = new Lang.Class({ this.menu.addMenuItem(this._volumeMenu); this.indicators.connect('scroll-event', this._onScrollEvent.bind(this)); - }, + } _onScrollEvent(actor, event) { let result = this._volumeMenu.scroll(event); @@ -393,4 +378,4 @@ var Indicator = new Lang.Class({ Main.osdWindowManager.show(-1, gicon, null, level, maxLevel); return result; } -}); +}; diff --git a/js/ui/tweener.js b/js/ui/tweener.js index 1a85e2fb1..6c9869c47 100644 --- a/js/ui/tweener.js +++ b/js/ui/tweener.js @@ -3,7 +3,6 @@ const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Mainloop = imports.mainloop; const Shell = imports.gi.Shell; const St = imports.gi.St; @@ -162,12 +161,8 @@ function registerSpecialPropertySplitter(name, splitFunction, parameters) { // time updates; even better is to pay attention to the vertical // vblank and sync to that when possible.) // -var ClutterFrameTicker = new Lang.Class({ - Name: 'ClutterFrameTicker', - - FRAME_RATE : 60, - - _init() { +var ClutterFrameTicker = class { + constructor() { // We don't have a finite duration; tweener will tell us to stop // when we need to stop, so use 1000 seconds as "infinity", and // set the timeline to loop. Doing this means we have to track @@ -189,7 +184,11 @@ var ClutterFrameTicker = new Lang.Class({ perf_log.define_event("tweener.framePrepareDone", "Finished preparing frame", ""); - }, + } + + get FRAME_RATE() { + return 60; + } _onNewFrame(frame) { // If there is a lot of setup to start the animation, then @@ -206,18 +205,18 @@ var ClutterFrameTicker = new Lang.Class({ perf_log.event("tweener.framePrepareStart"); this.emit('prepare-frame'); perf_log.event("tweener.framePrepareDone"); - }, + } getTime() { return this._currentTime; - }, + } start() { if (St.get_slow_down_factor() > 0) Tweener.setTimeScale(1 / St.get_slow_down_factor()); this._timeline.start(); global.begin_work(); - }, + } stop() { this._timeline.stop(); @@ -225,6 +224,5 @@ var ClutterFrameTicker = new Lang.Class({ this._currentTime = -1; global.end_work(); } -}); - +}; Signals.addSignalMethods(ClutterFrameTicker.prototype); diff --git a/js/ui/unlockDialog.js b/js/ui/unlockDialog.js index 1adaf417e..cf48cd1f1 100644 --- a/js/ui/unlockDialog.js +++ b/js/ui/unlockDialog.js @@ -8,7 +8,6 @@ const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const GnomeDesktop = imports.gi.GnomeDesktop; const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Meta = imports.gi.Meta; const Signals = imports.signals; const Shell = imports.gi.Shell; @@ -28,10 +27,8 @@ const LoginDialog = imports.gdm.loginDialog; // The timeout before going back automatically to the lock screen (in seconds) const IDLE_TIMEOUT = 2 * 60; -var UnlockDialog = new Lang.Class({ - Name: 'UnlockDialog', - - _init(parentActor) { +var UnlockDialog = class { + constructor(parentActor) { this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW, style_class: 'login-dialog', layout_manager: new Clutter.BoxLayout(), @@ -85,7 +82,7 @@ var UnlockDialog = new Lang.Class({ this._idleMonitor = Meta.IdleMonitor.get_core(); this._idleWatchId = this._idleMonitor.add_idle_watch(IDLE_TIMEOUT * 1000, this._escape.bind(this)); - }, + } _updateSensitivity(sensitive) { this._authPrompt.updateSensitivity(sensitive); @@ -94,11 +91,11 @@ var UnlockDialog = new Lang.Class({ this._otherUserButton.reactive = sensitive; this._otherUserButton.can_focus = sensitive; } - }, + } _fail() { this.emit('failed'); - }, + } _onReset(authPrompt, beginRequest) { let userName; @@ -110,18 +107,18 @@ var UnlockDialog = new Lang.Class({ } this._authPrompt.begin({ userName: userName }); - }, + } _escape() { if (this.allowCancel) this._authPrompt.cancel(); - }, + } _otherUserClicked(button, event) { Gdm.goto_login_session_sync(null); this._authPrompt.cancel(); - }, + } destroy() { this.popModal(); @@ -131,21 +128,21 @@ var UnlockDialog = new Lang.Class({ this._idleMonitor.remove_watch(this._idleWatchId); this._idleWatchId = 0; } - }, + } cancel() { this._authPrompt.cancel(); this.destroy(); - }, + } addCharacter(unichar) { this._authPrompt.addCharacter(unichar); - }, + } finish(onComplete) { this._authPrompt.finish(onComplete); - }, + } open(timestamp) { this.actor.show(); @@ -160,7 +157,7 @@ var UnlockDialog = new Lang.Class({ this._isModal = true; return true; - }, + } popModal(timestamp) { if (this._isModal) { @@ -168,5 +165,5 @@ var UnlockDialog = new Lang.Class({ this._isModal = false; } } -}); +}; Signals.addSignalMethods(UnlockDialog.prototype); diff --git a/js/ui/userWidget.js b/js/ui/userWidget.js index 4e1ce25e9..9730b73af 100644 --- a/js/ui/userWidget.js +++ b/js/ui/userWidget.js @@ -19,10 +19,8 @@ var AVATAR_ICON_SIZE = 64; // Copyright (C) 2004-2005 James M. Cape . // Copyright (C) 2008,2009 Red Hat, Inc. -var Avatar = new Lang.Class({ - Name: 'Avatar', - - _init(user, params) { +var Avatar = class { + constructor(user, params) { this._user = user; params = Params.parse(params, { reactive: false, iconSize: AVATAR_ICON_SIZE, @@ -39,12 +37,12 @@ var Avatar = new Lang.Class({ // Monitor the scaling factor to make sure we recreate the avatar when needed. let themeContext = St.ThemeContext.get_for_stage(global.stage); themeContext.connect('notify::scale-factor', this.update.bind(this)); - }, + } setSensitive(sensitive) { this.actor.can_focus = sensitive; this.actor.reactive = sensitive; - }, + } update() { let iconFile = this._user.get_icon_file(); @@ -64,7 +62,7 @@ var Avatar = new Lang.Class({ let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; this.actor.set_size(this._iconSize * scaleFactor, this._iconSize * scaleFactor); } -}); +}; var UserWidgetLabel = new Lang.Class({ Name: 'UserWidgetLabel', @@ -151,10 +149,8 @@ var UserWidgetLabel = new Lang.Class({ }, }); -var UserWidget = new Lang.Class({ - Name: 'UserWidget', - - _init(user) { +var UserWidget = class { + constructor(user) { this._user = user; this.actor = new St.BoxLayout({ style_class: 'user-widget', @@ -173,7 +169,7 @@ var UserWidget = new Lang.Class({ this._userLoadedId = this._user.connect('notify::is-loaded', this._updateUser.bind(this)); this._userChangedId = this._user.connect('changed', this._updateUser.bind(this)); this._updateUser(); - }, + } _onDestroy() { if (this._userLoadedId != 0) { @@ -185,9 +181,9 @@ var UserWidget = new Lang.Class({ this._user.disconnect(this._userChangedId); this._userChangedId = 0; } - }, + } _updateUser() { this._avatar.update(); } -}); +}; diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js index 6a235eccd..8cd5454b3 100644 --- a/js/ui/viewSelector.js +++ b/js/ui/viewSelector.js @@ -53,12 +53,10 @@ function getTermsForSearchString(searchString) { return terms; } -var TouchpadShowOverviewAction = new Lang.Class({ - Name: 'TouchpadShowOverviewAction', - - _init(actor) { +var TouchpadShowOverviewAction = class { + constructor(actor) { actor.connect('captured-event', this._handleEvent.bind(this)); - }, + } _handleEvent(actor, event) { if (event.type() != Clutter.EventType.TOUCHPAD_PINCH) @@ -72,7 +70,7 @@ var TouchpadShowOverviewAction = new Lang.Class({ return Clutter.EVENT_STOP; } -}); +}; Signals.addSignalMethods(TouchpadShowOverviewAction.prototype); var ShowOverviewAction = new Lang.Class({ @@ -138,10 +136,8 @@ var ShowOverviewAction = new Lang.Class({ } }); -var ViewSelector = new Lang.Class({ - Name: 'ViewSelector', - - _init(searchEntry, showAppsButton) { +var ViewSelector = class { + constructor(searchEntry, showAppsButton) { this.actor = new Shell.Stack({ name: 'viewSelector' }); this._showAppsButton = showAppsButton; @@ -263,22 +259,22 @@ var ViewSelector = new Lang.Class({ gesture = new TouchpadShowOverviewAction(global.stage); gesture.connect('activated', this._pinchGestureActivated.bind(this)); - }, + } _pinchGestureActivated(action, scale) { if (scale < PINCH_GESTURE_THRESHOLD) Main.overview.show(); - }, + } _toggleAppsPage() { this._showAppsButton.checked = !this._showAppsButton.checked; Main.overview.show(); - }, + } showApps() { this._showAppsButton.checked = true; Main.overview.show(); - }, + } show() { this.reset(); @@ -291,7 +287,7 @@ var ViewSelector = new Lang.Class({ if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows()) Main.overview.fadeOutDesktop(); - }, + } animateFromOverview() { // Make sure workspace page is fully visible to allow @@ -304,16 +300,16 @@ var ViewSelector = new Lang.Class({ if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows()) Main.overview.fadeInDesktop(); - }, + } setWorkspacesFullGeometry(geom) { this._workspacesDisplay.setWorkspacesFullGeometry(geom); - }, + } hide() { this.reset(); this._workspacesDisplay.hide(); - }, + } _addPage(actor, name, a11yIcon, params) { params = Params.parse(params, { a11yFocus: null }); @@ -335,7 +331,7 @@ var ViewSelector = new Lang.Class({ page.hide(); this.actor.add_actor(page); return page; - }, + } _fadePageIn() { Tweener.addTween(this._activePage, @@ -343,7 +339,7 @@ var ViewSelector = new Lang.Class({ time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } _fadePageOut(page) { let oldPage = page; @@ -355,7 +351,7 @@ var ViewSelector = new Lang.Class({ this._animateIn(oldPage); } }); - }, + } _animateIn(oldPage) { if (oldPage) @@ -372,7 +368,7 @@ var ViewSelector = new Lang.Class({ } else { this._fadePageIn(); } - }, + } _animateOut(page) { let oldPage = page; @@ -385,7 +381,7 @@ var ViewSelector = new Lang.Class({ } else { this._fadePageOut(page); } - }, + } _showPage(page) { if (!Main.overview.visible) @@ -402,17 +398,17 @@ var ViewSelector = new Lang.Class({ this._animateOut(oldPage) else this._animateIn(); - }, + } _a11yFocusPage(page) { this._showAppsButton.checked = page == this._appsPage; page.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); - }, + } _onShowAppsButtonToggled() { this._showPage(this._showAppsButton.checked ? this._appsPage : this._workspacesPage); - }, + } _onStageKeyPress(actor, event) { // Ignore events while anything but the overview has @@ -443,7 +439,7 @@ var ViewSelector = new Lang.Class({ } } return Clutter.EVENT_PROPAGATE; - }, + } _searchCancelled() { this._showPage(this._showAppsButton.checked ? this._appsPage @@ -457,7 +453,7 @@ var ViewSelector = new Lang.Class({ // (https://bugzilla.gnome.org/show_bug.cgi?id=636341) */ if (this._text.text != '') this.reset(); - }, + } reset() { // Don't drop the key focus on Clutter's side if anything but the @@ -470,7 +466,7 @@ var ViewSelector = new Lang.Class({ this._text.set_cursor_visible(true); this._text.set_selection(0, 0); - }, + } _onStageKeyFocusChanged() { let focus = global.stage.get_key_focus(); @@ -483,7 +479,7 @@ var ViewSelector = new Lang.Class({ this._entry.add_style_pseudo_class('focus'); else this._entry.remove_style_pseudo_class('focus'); - }, + } _onMapped() { if (this._entry.mapped) { @@ -498,7 +494,7 @@ var ViewSelector = new Lang.Class({ global.stage.disconnect(this._capturedEventId); this._capturedEventId = 0; } - }, + } _shouldTriggerSearch(symbol) { if (symbol == Clutter.Multi_key) @@ -515,7 +511,7 @@ var ViewSelector = new Lang.Class({ return true; return false; - }, + } startSearch(event) { global.stage.set_key_focus(this._text); @@ -523,12 +519,12 @@ var ViewSelector = new Lang.Class({ let synthEvent = event.copy(); synthEvent.set_source(this._text); this._text.event(synthEvent, false); - }, + } // the entry does not show the hint _isActivated() { return this._text.text == this._entry.get_text(); - }, + } _onTextChanged(se, prop) { let terms = getTermsForSearchString(this._entry.get_text()); @@ -553,7 +549,7 @@ var ViewSelector = new Lang.Class({ this._entry.set_secondary_icon(null); this._searchCancelled(); } - }, + } _onKeyPress(entry, event) { let symbol = event.get_key_symbol(); @@ -592,7 +588,7 @@ var ViewSelector = new Lang.Class({ } } return Clutter.EVENT_PROPAGATE; - }, + } _onCapturedEvent(actor, event) { if (event.type() == Clutter.EventType.BUTTON_PRESS) { @@ -609,7 +605,7 @@ var ViewSelector = new Lang.Class({ } return Clutter.EVENT_PROPAGATE; - }, + } getActivePage() { if (this._activePage == this._workspacesPage) @@ -618,7 +614,7 @@ var ViewSelector = new Lang.Class({ return ViewPage.APPS; else return ViewPage.SEARCH; - }, + } fadeIn() { let actor = this._activePage; @@ -626,7 +622,7 @@ var ViewSelector = new Lang.Class({ time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / 2, transition: 'easeInQuad' }); - }, + } fadeHalf() { let actor = this._activePage; @@ -635,5 +631,5 @@ var ViewSelector = new Lang.Class({ transition: 'easeOutQuad' }); } -}); +}; Signals.addSignalMethods(ViewSelector.prototype); diff --git a/js/ui/windowAttentionHandler.js b/js/ui/windowAttentionHandler.js index 3e53f60b5..27b342b00 100644 --- a/js/ui/windowAttentionHandler.js +++ b/js/ui/windowAttentionHandler.js @@ -1,27 +1,24 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- -const Lang = imports.lang; const Shell = imports.gi.Shell; const Main = imports.ui.main; const MessageTray = imports.ui.messageTray; -var WindowAttentionHandler = new Lang.Class({ - Name: 'WindowAttentionHandler', - - _init() { +var WindowAttentionHandler = class { + constructor() { this._tracker = Shell.WindowTracker.get_default(); this._windowDemandsAttentionId = global.display.connect('window-demands-attention', this._onWindowDemandsAttention.bind(this)); this._windowMarkedUrgentId = global.display.connect('window-marked-urgent', this._onWindowDemandsAttention.bind(this)); - }, + } _getTitleAndBanner(app, window) { let title = app.get_name(); let banner = _("“%s” is ready").format(window.get_title()); return [title, banner] - }, + } _onWindowDemandsAttention(display, window) { // We don't want to show the notification when the window is already focused, @@ -54,18 +51,15 @@ var WindowAttentionHandler = new Lang.Class({ notification.update(title, banner); })); } -}); +}; -var Source = new Lang.Class({ - Name: 'WindowAttentionSource', - Extends: MessageTray.Source, +var Source = class WindowAttentionSource extends MessageTray.Source { + constructor(app, window) { + super(app.get_name()); - _init(app, window) { this._window = window; this._app = app; - this.parent(app.get_name()); - this.signalIDs = []; this.signalIDs.push(this._window.connect('notify::demands-attention', this._sync.bind(this))); @@ -77,20 +71,20 @@ var Source = new Lang.Class({ () => { this.destroy(); })); this.connect('destroy', this._onDestroy.bind(this)); - }, + } _sync() { if (this._window.demands_attention || this._window.urgent) return; this.destroy(); - }, + } _onDestroy() { for(let i = 0; i < this.signalIDs.length; i++) { this._window.disconnect(this.signalIDs[i]); } this.signalIDs = []; - }, + } _createPolicy() { if (this._app && this._app.get_app_info()) { @@ -99,14 +93,14 @@ var Source = new Lang.Class({ } else { return new MessageTray.NotificationGenericPolicy(); } - }, + } createIcon(size) { return this._app.create_icon_texture(size); - }, + } open() { Main.activateWindow(this._window); this.destroy(); } -}); +}; diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index a8b4f8e69..8527e08e4 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -47,12 +47,9 @@ const GSD_WACOM_OBJECT_PATH = '/org/gnome/SettingsDaemon/Wacom'; const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom'); const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface); -var DisplayChangeDialog = new Lang.Class({ - Name: 'DisplayChangeDialog', - Extends: ModalDialog.ModalDialog, - - _init(wm) { - this.parent({ styleClass: 'prompt-dialog' }); +var DisplayChangeDialog = class extends ModalDialog.ModalDialog { + constructor(wm) { + super({ styleClass: 'prompt-dialog' }); this._wm = wm; @@ -81,7 +78,7 @@ var DisplayChangeDialog = new Lang.Class({ this._timeoutId = Mainloop.timeout_add(ONE_SECOND, this._tick.bind(this)); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick'); - }, + } close(timestamp) { if (this._timeoutId > 0) { @@ -89,14 +86,14 @@ var DisplayChangeDialog = new Lang.Class({ this._timeoutId = 0; } - this.parent(timestamp); - }, + super.close(timestamp); + } _formatCountDown() { let fmt = ngettext("Settings changes will revert in %d second", "Settings changes will revert in %d seconds"); return fmt.format(this._countDown); - }, + } _tick() { this._countDown--; @@ -110,50 +107,48 @@ var DisplayChangeDialog = new Lang.Class({ this._content.body = this._formatCountDown(); return GLib.SOURCE_CONTINUE; - }, + } _onFailure() { this._wm.complete_display_change(false); this.close(); - }, + } _onSuccess() { this._wm.complete_display_change(true); this.close(); - }, -}); + } +}; -var WindowDimmer = new Lang.Class({ - Name: 'WindowDimmer', - - _init(actor) { +var WindowDimmer = class { + constructor(actor) { this._brightnessEffect = new Clutter.BrightnessContrastEffect(); actor.add_effect(this._brightnessEffect); this.actor = actor; this._enabled = true; this._dimFactor = 0.0; this._syncEnabled(); - }, + } _syncEnabled() { this._brightnessEffect.enabled = (this._enabled && this._dimFactor > 0); - }, + } setEnabled(enabled) { this._enabled = enabled; this._syncEnabled(); - }, + } set dimFactor(factor) { this._dimFactor = factor; this._brightnessEffect.set_brightness(factor * DIM_BRIGHTNESS); this._syncEnabled(); - }, + } get dimFactor() { return this._dimFactor; } -}); +}; function getWindowDimmer(actor) { let enabled = Meta.prefs_get_attach_modal_dialogs(); @@ -177,10 +172,8 @@ function getWindowDimmer(actor) { */ var LAST_WINDOW_GRACE_TIME = 1000; -var WorkspaceTracker = new Lang.Class({ - Name: 'WorkspaceTracker', - - _init(wm) { +var WorkspaceTracker = class { + constructor(wm) { this._wm = wm; this._workspaces = []; @@ -208,15 +201,15 @@ var WorkspaceTracker = new Lang.Class({ this._workspaceSettings.connect('changed::dynamic-workspaces', this._queueCheckWorkspaces.bind(this)); this._nWorkspacesChanged(); - }, + } blockUpdates() { this._pauseWorkspaceCheck = true; - }, + } unblockUpdates() { this._pauseWorkspaceCheck = false; - }, + } _checkWorkspaces() { let workspaceManager = global.workspace_manager; @@ -283,7 +276,7 @@ var WorkspaceTracker = new Lang.Class({ this._checkWorkspacesId = 0; return false; - }, + } keepWorkspaceAlive(workspace, duration) { if (workspace._keepAliveId) @@ -295,7 +288,7 @@ var WorkspaceTracker = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(workspace._keepAliveId, '[gnome-shell] this._queueCheckWorkspaces'); - }, + } _windowRemoved(workspace, window) { workspace._lastRemovedWindow = window; @@ -308,33 +301,33 @@ var WorkspaceTracker = new Lang.Class({ return GLib.SOURCE_REMOVE; }); GLib.Source.set_name_by_id(id, '[gnome-shell] this._queueCheckWorkspaces'); - }, + } _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { // If the window left the primary monitor, that // might make that workspace empty if (monitorIndex == Main.layoutManager.primaryIndex) this._queueCheckWorkspaces(); - }, + } _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { // If the window entered the primary monitor, that // might make that workspace non-empty if (monitorIndex == Main.layoutManager.primaryIndex) this._queueCheckWorkspaces(); - }, + } _windowsRestacked() { // Figure out where the pointer is in case we lost track of // it during a grab. (In particular, if a trayicon popup menu // is dismissed, see if we need to close the message tray.) global.sync_pointer(); - }, + } _queueCheckWorkspaces() { if (this._checkWorkspacesId == 0) this._checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, this._checkWorkspaces.bind(this)); - }, + } _nWorkspacesChanged() { let workspaceManager = global.workspace_manager; @@ -382,18 +375,16 @@ var WorkspaceTracker = new Lang.Class({ return false; } -}); +}; -var TilePreview = new Lang.Class({ - Name: 'TilePreview', - - _init() { +var TilePreview = class { + constructor() { this.actor = new St.Widget(); global.window_group.add_actor(this.actor); this._reset(); this._showing = false; - }, + } show(window, tileRect, monitorIndex) { let windowActor = window.get_compositor_private(); @@ -437,7 +428,7 @@ var TilePreview = new Lang.Class({ time: WINDOW_ANIMATION_TIME, transition: 'easeOutQuad' }); - }, + } hide() { if (!this._showing) @@ -450,13 +441,13 @@ var TilePreview = new Lang.Class({ transition: 'easeOutQuad', onComplete: this._reset.bind(this) }); - }, + } _reset() { this.actor.hide(); this._rect = null; this._monitorIndex = -1; - }, + } _updateStyle(monitor) { let styles = ['tile-preview']; @@ -469,17 +460,15 @@ var TilePreview = new Lang.Class({ this.actor.style_class = styles.join(' '); } -}); +}; -var TouchpadWorkspaceSwitchAction = new Lang.Class({ - Name: 'TouchpadWorkspaceSwitchAction', - - _init(actor) { +var TouchpadWorkspaceSwitchAction = class { + constructor(actor) { this._dx = 0; this._dy = 0; actor.connect('captured-event', this._handleEvent.bind(this)); this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'}); - }, + } _checkActivated() { let dir; @@ -497,7 +486,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({ this.emit('activated', dir); return true; - }, + } _handleEvent(actor, event) { let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW; @@ -533,7 +522,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({ return Clutter.EVENT_STOP; } -}); +}; Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype); var WorkspaceSwitchAction = new Lang.Class({ @@ -667,10 +656,8 @@ var AppSwitchAction = new Lang.Class({ } }); -var ResizePopup = new Lang.Class({ - Name: 'ResizePopup', - - _init() { +var ResizePopup = class { + constructor() { this._widget = new St.Widget({ layout_manager: new Clutter.BinLayout() }); this._label = new St.Label({ style_class: 'resize-popup', x_align: Clutter.ActorAlign.CENTER, @@ -678,7 +665,7 @@ var ResizePopup = new Lang.Class({ x_expand: true, y_expand: true }); this._widget.add_child(this._label); Main.uiGroup.add_actor(this._widget); - }, + } set(rect, displayW, displayH) { /* Translators: This represents the size of a window. The first number is @@ -688,18 +675,16 @@ var ResizePopup = new Lang.Class({ this._widget.set_position(rect.x, rect.y); this._widget.set_size(rect.width, rect.height); - }, + } destroy() { this._widget.destroy(); this._widget = null; - }, -}); + } +}; -var WindowManager = new Lang.Class({ - Name: 'WindowManager', - - _init() { +var WindowManager = class { + constructor() { this._shellwm = global.window_manager; this._minimizing = []; @@ -1036,14 +1021,14 @@ var WindowManager = new Lang.Class({ currentWindow.unmake_fullscreen(); }); global.stage.add_action(gesture); - }, + } _showPadOsd(display, device, settings, imagePath, editionMode, monitorIndex) { this._currentPadOsd = new PadOsd.PadOsd(device, settings, imagePath, editionMode, monitorIndex); this._currentPadOsd.connect('closed', () => { this._currentPadOsd = null }); return this._currentPadOsd.actor; - }, + } _switchWorkspaceMotion(action, xRel, yRel) { let workspaceManager = global.workspace_manager; @@ -1062,7 +1047,7 @@ var WindowManager = new Lang.Class({ xRel = 0; this._switchData.container.set_position(xRel, yRel); - }, + } _switchWorkspaceCancel() { if (!this._switchData || this._switchData.inProgress) @@ -1078,7 +1063,7 @@ var WindowManager = new Lang.Class({ onCompleteScope: this, onCompleteParams: [switchData], }); - }, + } _actionSwitchWorkspace(action, direction) { let workspaceManager = global.workspace_manager; @@ -1091,7 +1076,7 @@ var WindowManager = new Lang.Class({ this._switchData.gestureActivated = true; this.actionMoveWorkspace(newWs); } - }, + } _lookupIndex(windows, metaWindow) { for (let i = 0; i < windows.length; i++) { @@ -1100,7 +1085,7 @@ var WindowManager = new Lang.Class({ } } return -1; - }, + } _switchApp() { let windows = global.get_window_actors().filter(actor => { @@ -1129,7 +1114,7 @@ var WindowManager = new Lang.Class({ } Main.activateWindow(nextWindow); - }, + } insertWorkspace(pos) { let workspaceManager = global.workspace_manager; @@ -1168,44 +1153,43 @@ var WindowManager = new Lang.Class({ newWs.activate(global.get_current_time()); this._blockAnimations = false; } - }, - + } keepWorkspaceAlive(workspace, duration) { if (!this._workspaceTracker) return; this._workspaceTracker.keepWorkspaceAlive(workspace, duration); - }, + } skipNextEffect(actor) { this._skippedActors.push(actor); - }, + } setCustomKeybindingHandler(name, modes, handler) { if (Meta.keybindings_set_custom_handler(name, handler)) this.allowKeybinding(name, modes); - }, + } addKeybinding(name, settings, flags, modes, handler) { let action = global.display.add_keybinding(name, settings, flags, handler); if (action != Meta.KeyBindingAction.NONE) this.allowKeybinding(name, modes); return action; - }, + } removeKeybinding(name) { if (global.display.remove_keybinding(name)) this.allowKeybinding(name, Shell.ActionMode.NONE); - }, + } allowKeybinding(name, modes) { this._allowedKeybindings[name] = modes; - }, + } _shouldAnimate() { return !(Main.overview.visible || this._blockAnimations); - }, + } _shouldAnimateActor(actor, types) { if (this._removeEffect(this._skippedActors, actor)) @@ -1219,7 +1203,7 @@ var WindowManager = new Lang.Class({ let type = actor.meta_window.get_window_type(); return types.indexOf(type) >= 0; - }, + } _removeEffect(list, actor) { let idx = list.indexOf(actor); @@ -1228,7 +1212,7 @@ var WindowManager = new Lang.Class({ return true; } return false; - }, + } _minimizeWindow(shellwm, actor) { let types = [Meta.WindowType.NORMAL, @@ -1292,7 +1276,7 @@ var WindowManager = new Lang.Class({ onOverwriteParams: [shellwm, actor] }); } - }, + } _minimizeWindowDone(shellwm, actor) { if (this._removeEffect(this._minimizing, actor)) { @@ -1303,13 +1287,13 @@ var WindowManager = new Lang.Class({ shellwm.completed_minimize(actor); } - }, + } _minimizeWindowOverwritten(shellwm, actor) { if (this._removeEffect(this._minimizing, actor)) { shellwm.completed_minimize(actor); } - }, + } _unminimizeWindow(shellwm, actor) { let types = [Meta.WindowType.NORMAL, @@ -1374,7 +1358,7 @@ var WindowManager = new Lang.Class({ onOverwriteParams: [shellwm, actor] }); } - }, + } _unminimizeWindowDone(shellwm, actor) { if (this._removeEffect(this._unminimizing, actor)) { @@ -1385,13 +1369,13 @@ var WindowManager = new Lang.Class({ shellwm.completed_unminimize(actor); } - }, + } _unminimizeWindowOverwritten(shellwm, actor) { if (this._removeEffect(this._unminimizing, actor)) { shellwm.completed_unminimize(actor); } - }, + } _sizeChangeWindow(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) { let types = [Meta.WindowType.NORMAL]; @@ -1404,7 +1388,7 @@ var WindowManager = new Lang.Class({ this._prepareAnimationInfo(shellwm, actor, oldFrameRect, whichChange); else shellwm.completed_size_change(actor); - }, + } _prepareAnimationInfo(shellwm, actor, oldFrameRect, change) { // Position a clone of the window on top of the old position, @@ -1421,7 +1405,7 @@ var WindowManager = new Lang.Class({ actor.__animationInfo = { clone: actorClone, oldRect: oldFrameRect }; - }, + } _sizeChangedWindow(shellwm, actor) { if (!actor.__animationInfo) @@ -1476,7 +1460,7 @@ var WindowManager = new Lang.Class({ // It's important that we don't wait until the animation is completed to // do this, otherwise our scale will be applied to the old texture size. shellwm.completed_size_change(actor); - }, + } _clearAnimationInfo(actor) { if (actor.__animationInfo) { @@ -1485,7 +1469,7 @@ var WindowManager = new Lang.Class({ return true; } return false; - }, + } _sizeChangeWindowDone(shellwm, actor) { if (this._removeEffect(this._resizing, actor)) { @@ -1496,12 +1480,12 @@ var WindowManager = new Lang.Class({ actor.translation_y = 0; this._clearAnimationInfo(actor); } - }, + } _sizeChangeWindowOverwritten(shellwm, actor) { if (this._removeEffect(this._resizing, actor)) this._clearAnimationInfo(actor); - }, + } _hasAttachedDialogs(window, ignoreWindow) { var count = 0; @@ -1515,7 +1499,7 @@ var WindowManager = new Lang.Class({ return true; }); return count != 0; - }, + } _checkDimming(window, ignoreWindow) { let shouldDim = this._hasAttachedDialogs(window, ignoreWindow); @@ -1530,7 +1514,7 @@ var WindowManager = new Lang.Class({ this._dimmedWindows.filter(win => win != window); this._undimWindow(window); } - }, + } _dimWindow(window) { let actor = window.get_compositor_private(); @@ -1547,7 +1531,7 @@ var WindowManager = new Lang.Class({ }); else dimmer.dimFactor = 1.0; - }, + } _undimWindow(window) { let actor = window.get_compositor_private(); @@ -1563,7 +1547,7 @@ var WindowManager = new Lang.Class({ transition: 'linear' }); else dimmer.dimFactor = 0.0; - }, + } _mapWindow(shellwm, actor) { actor._windowType = actor.meta_window.get_window_type(); @@ -1647,7 +1631,7 @@ var WindowManager = new Lang.Class({ shellwm.completed_map(actor); return; } - }, + } _mapWindowDone(shellwm, actor) { if (this._removeEffect(this._mapping, actor)) { @@ -1660,13 +1644,13 @@ var WindowManager = new Lang.Class({ actor.translation_x = 0; shellwm.completed_map(actor); } - }, + } _mapWindowOverwrite(shellwm, actor) { if (this._removeEffect(this._mapping, actor)) { shellwm.completed_map(actor); } - }, + } _destroyWindow(shellwm, actor) { let window = actor.meta_window; @@ -1738,7 +1722,7 @@ var WindowManager = new Lang.Class({ shellwm.completed_destroy(actor); return; } - }, + } _destroyWindowDone(shellwm, actor) { if (this._removeEffect(this._destroying, actor)) { @@ -1749,7 +1733,7 @@ var WindowManager = new Lang.Class({ } shellwm.completed_destroy(actor); } - }, + } _filterKeybinding(shellwm, binding) { if (Main.actionMode == Shell.ActionMode.NONE) @@ -1764,7 +1748,7 @@ var WindowManager = new Lang.Class({ return false; return !(this._allowedKeybindings[binding.get_name()] & Main.actionMode); - }, + } _syncStacking() { if (this._switchData == null) @@ -1793,7 +1777,7 @@ var WindowManager = new Lang.Class({ } } } - }, + } _getPositionForDirection(direction) { let xDest = 0, yDest = 0; @@ -1817,7 +1801,7 @@ var WindowManager = new Lang.Class({ xDest = global.screen_width; return [xDest, yDest]; - }, + } _prepareWorkspaceSwitch(from, to, direction) { if (this._switchData) @@ -1914,7 +1898,7 @@ var WindowManager = new Lang.Class({ switchData.windows.splice(switchData.windows.indexOf(w), 1); }); } - }, + } _finishWorkspaceSwitch(switchData) { this._switchData = null; @@ -1934,7 +1918,7 @@ var WindowManager = new Lang.Class({ switchData.movingWindowBin.destroy(); this._movingWindow = null; - }, + } _switchWorkspace(shellwm, from, to, direction) { if (!Main.sessionMode.hasWorkspaces || !this._shouldAnimate()) { @@ -1967,28 +1951,28 @@ var WindowManager = new Lang.Class({ onCompleteScope: this, onCompleteParams: [shellwm] }); - }, + } _switchWorkspaceDone(shellwm) { this._finishWorkspaceSwitch(this._switchData); shellwm.completed_switch_workspace(); - }, + } _showTilePreview(shellwm, window, tileRect, monitorIndex) { if (!this._tilePreview) this._tilePreview = new TilePreview(); this._tilePreview.show(window, tileRect, monitorIndex); - }, + } _hideTilePreview(shellwm) { if (!this._tilePreview) return; this._tilePreview.hide(); - }, + } _showWindowMenu(shellwm, window, menu, rect) { this._windowMenuManager.showWindowMenuForWindow(window, menu, rect); - }, + } _startSwitcher(display, window, binding) { let constructor = null; @@ -2027,19 +2011,19 @@ var WindowManager = new Lang.Class({ if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask())) tabPopup.destroy(); - }, + } _startA11ySwitcher(display, window, binding) { Main.ctrlAltTabManager.popup(binding.is_reversed(), binding.get_name(), binding.get_mask()); - }, + } _toggleAppMenu(display, window, event, binding) { Main.panel.toggleAppMenu(); - }, + } _toggleCalendar(display, window, event, binding) { Main.panel.toggleCalendar(); - }, + } _toggleTweens() { this._tweensPaused = !this._tweensPaused; @@ -2048,7 +2032,7 @@ var WindowManager = new Lang.Class({ OrigTweener.pauseAllTweens(); else OrigTweener.resumeAllTweens(); - }, + } _showWorkspaceSwitcher(display, window, binding) { let workspaceManager = display.get_workspace_manager(); @@ -2117,7 +2101,7 @@ var WindowManager = new Lang.Class({ } this._workspaceSwitcherPopup.display(direction, newWs.index()); } - }, + } actionMoveWorkspace(workspace) { if (!Main.sessionMode.hasWorkspaces) @@ -2128,7 +2112,7 @@ var WindowManager = new Lang.Class({ if (activeWorkspace != workspace) workspace.activate(global.get_current_time()); - }, + } actionMoveWindow(window, workspace) { if (!Main.sessionMode.hasWorkspaces) @@ -2147,20 +2131,20 @@ var WindowManager = new Lang.Class({ global.display.clear_mouse_mode(); workspace.activate_with_focus (window, global.get_current_time()); } - }, + } _confirmDisplayChange() { let dialog = new DisplayChangeDialog(this._shellwm); dialog.open(); - }, + } _createCloseDialog(shellwm, window) { return new CloseDialog.CloseDialog(window); - }, + } _createInhibitShortcutsDialog(shellwm, window) { return new InhibitShortcutsDialog.InhibitShortcutsDialog(window); - }, + } _showResizePopup(display, show, rect, displayW, displayH) { if (show) { @@ -2174,5 +2158,5 @@ var WindowManager = new Lang.Class({ this._resizePopup = null; } } - }, -}); + } +}; diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js index 11d4f17b6..939ba15d2 100644 --- a/js/ui/windowMenu.js +++ b/js/ui/windowMenu.js @@ -1,7 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -* const Gtk = imports.gi.Gtk; -const Lang = imports.lang; const Meta = imports.gi.Meta; const St = imports.gi.St; const Shell = imports.gi.Shell; @@ -11,12 +10,9 @@ const Main = imports.ui.main; const PopupMenu = imports.ui.popupMenu; const RemoteMenu = imports.ui.remoteMenu; -var WindowMenu = new Lang.Class({ - Name: 'WindowMenu', - Extends: PopupMenu.PopupMenu, - - _init(window, sourceActor) { - this.parent(sourceActor, 0, St.Side.TOP); +var WindowMenu = class extends PopupMenu.PopupMenu { + constructor(window, sourceActor) { + super(sourceActor, 0, St.Side.TOP); this.actor.add_style_class_name('window-menu'); @@ -24,7 +20,7 @@ var WindowMenu = new Lang.Class({ this.actor.hide(); this._buildMenu(window); - }, + } _buildMenu(window) { let type = window.get_window_type(); @@ -177,16 +173,13 @@ var WindowMenu = new Lang.Class({ if (!window.can_close()) item.setSensitive(false); } -}); +}; -var AppMenu = new Lang.Class({ - Name: 'AppMenu', - Extends: RemoteMenu.RemoteMenu, - - _init(window, sourceActor) { +var AppMenu = class extends RemoteMenu.RemoteMenu { + constructor(window, sourceActor) { let app = Shell.WindowTracker.get_default().get_window_app(window); - this.parent(sourceActor, app.menu, app.action_group); + super(sourceActor, app.menu, app.action_group); this.actor.add_style_class_name('fallback-app-menu'); let variant = window.get_gtk_theme_variant(); @@ -196,12 +189,10 @@ var AppMenu = new Lang.Class({ Main.layoutManager.uiGroup.add_actor(this.actor); this.actor.hide(); } -}); +}; -var WindowMenuManager = new Lang.Class({ - Name: 'WindowMenuManager', - - _init() { +var WindowMenuManager = class { + constructor() { this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor }); this._sourceActor = new St.Widget({ reactive: true, visible: false }); @@ -209,7 +200,7 @@ var WindowMenuManager = new Lang.Class({ this._manager.activeMenu.toggle(); }); Main.uiGroup.add_actor(this._sourceActor); - }, + } showWindowMenuForWindow(window, type, rect) { let menuType = (type == Meta.WindowMenuType.WM) ? WindowMenu : AppMenu; @@ -239,4 +230,4 @@ var WindowMenuManager = new Lang.Class({ window.disconnect(destroyId); }); } -}); +}; diff --git a/js/ui/workspace.js b/js/ui/workspace.js index baa8a4380..d002cd008 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -102,10 +102,8 @@ var WindowCloneLayout = new Lang.Class({ } }); -var WindowClone = new Lang.Class({ - Name: 'WindowClone', - - _init(realWindow, workspace) { +var WindowClone = class { + constructor(realWindow, workspace) { this.realWindow = realWindow; this.metaWindow = realWindow.meta_window; this.metaWindow._delegate = this; @@ -180,18 +178,18 @@ var WindowClone = new Lang.Class({ this._selected = false; this._closeRequested = false; - }, + } set slot(slot) { this._slot = slot; - }, + } get slot() { if (this.inDrag) return this._dragSlot; else return this._slot; - }, + } deleteAll() { // Delete all windows, starting from the bottom-most (most-modal) one @@ -205,7 +203,7 @@ var WindowClone = new Lang.Class({ this.metaWindow.delete(global.get_current_time()); this._closeRequested = true; - }, + } addDialog(win) { let parent = win.get_transient_for(); @@ -222,11 +220,11 @@ var WindowClone = new Lang.Class({ // assume it's a close confirmation and leave the overview if (this._closeRequested) this._activate(); - }, + } hasAttachedDialogs() { return this.actor.get_n_children() > 1; - }, + } _doAddAttachedDialog(metaWin, realWin) { let clone = new Clutter.Clone({ source: realWin }); @@ -240,7 +238,7 @@ var WindowClone = new Lang.Class({ this._onMetaWindowSizeChanged(); }); this.actor.add_child(clone); - }, + } _updateAttachedDialogs() { let iter = win => { @@ -256,23 +254,23 @@ var WindowClone = new Lang.Class({ return true; }; this.metaWindow.foreach_transient(iter); - }, + } get boundingBox() { return this._boundingBox; - }, + } get width() { return this._boundingBox.width; - }, + } get height() { return this._boundingBox.height; - }, + } getOriginalPosition() { return [this._boundingBox.x, this._boundingBox.y]; - }, + } _computeBoundingBox() { let rect = this.metaWindow.get_frame_rect(); @@ -291,7 +289,7 @@ var WindowClone = new Lang.Class({ // Convert from a MetaRectangle to a native JS object this._boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height }; this.actor.layout_manager.boundingBox = rect; - }, + } // Find the actor just below us, respecting reparenting done // by DND code @@ -307,7 +305,7 @@ var WindowClone = new Lang.Class({ } else { return this._stackAbove; } - }, + } setStackAbove(actor) { this._stackAbove = actor; @@ -320,11 +318,11 @@ var WindowClone = new Lang.Class({ this.actor.lower_bottom(); else this.actor.raise(actualAbove); - }, + } destroy() { this.actor.destroy(); - }, + } _disconnectSignals() { this.actor.get_children().forEach(child => { @@ -338,12 +336,12 @@ var WindowClone = new Lang.Class({ realWindow.meta_window.disconnect(child._posChangedId); realWindow.disconnect(child._destroyId); }); - }, + } _onMetaWindowSizeChanged() { this._computeBoundingBox(); this.emit('size-changed'); - }, + } _onDestroy() { this._disconnectSignals(); @@ -357,12 +355,12 @@ var WindowClone = new Lang.Class({ } this.disconnectAll(); - }, + } _activate() { this._selected = true; this.emit('selected', global.get_current_time()); - }, + } _onKeyPress(actor, event) { let symbol = event.get_key_symbol(); @@ -373,11 +371,11 @@ var WindowClone = new Lang.Class({ } return false; - }, + } _onClicked(action, actor) { this._activate(); - }, + } _onLongPress(action, actor, state) { // Take advantage of the Clutter policy to consider @@ -400,7 +398,7 @@ var WindowClone = new Lang.Class({ this.emit('show-chrome'); } return true; - }, + } _onDragBegin(draggable, time) { this._dragSlot = this._slot; @@ -408,19 +406,19 @@ var WindowClone = new Lang.Class({ this.dragOrigScale = this.actor.scale_x; this.inDrag = true; this.emit('drag-begin'); - }, + } handleDragOver(source, actor, x, y, time) { return this._workspace.handleDragOver(source, actor, x, y, time); - }, + } acceptDrop(source, actor, x, y, time) { this._workspace.acceptDrop(source, actor, x, y, time); - }, + } _onDragCancelled(draggable, time) { this.emit('drag-cancelled'); - }, + } _onDragEnd(draggable, time, snapback) { this.inDrag = false; @@ -438,7 +436,7 @@ var WindowClone = new Lang.Class({ this.emit('drag-end'); } -}); +}; Signals.addSignalMethods(WindowClone.prototype); @@ -447,10 +445,8 @@ Signals.addSignalMethods(WindowClone.prototype); * @parentActor: The actor which will be the parent of all overlay items * such as app icon and window caption */ -var WindowOverlay = new Lang.Class({ - Name: 'WindowOverlay', - - _init(windowClone, parentActor) { +var WindowOverlay = class { + constructor(windowClone, parentActor) { let metaWindow = windowClone.metaWindow; this._windowClone = windowClone; @@ -505,37 +501,37 @@ var WindowOverlay = new Lang.Class({ // the signal will be emitted normally when we are added if (parentActor.get_stage()) this._onStyleChanged(); - }, + } hide() { this._hidden = true; this.hideCloseButton(); - }, + } show() { this._hidden = false; if (this._windowClone.actor['has-pointer']) this._animateVisible(); - }, + } chromeHeights() { return [Math.max(this.borderSize, this.closeButton.height - this.closeButton._overlap), (this.title.height - this.borderSize) / 2]; - }, + } chromeWidths() { return [this.borderSize, Math.max(this.borderSize, this.closeButton.width - this.closeButton._overlap)]; - }, + } setMaxChromeWidth(max) { if (this._maxTitleWidth == max) return; this._maxTitleWidth = max; - }, + } relayout(animate) { let button = this.closeButton; @@ -598,7 +594,7 @@ var WindowOverlay = new Lang.Class({ this.border.set_position(borderX, borderY); this.border.set_size(borderWidth, borderHeight); } - }, + } _getCaption() { let metaWindow = this._windowClone.metaWindow; @@ -608,7 +604,7 @@ var WindowOverlay = new Lang.Class({ let tracker = Shell.WindowTracker.get_default(); let app = tracker.get_window_app(metaWindow); return app.get_name(); - }, + } _animateOverlayActor(actor, x, y, width, height) { let params = { x: x, @@ -621,12 +617,12 @@ var WindowOverlay = new Lang.Class({ params.height = height; Tweener.addTween(actor, params); - }, + } _windowCanClose() { return this._windowClone.metaWindow.can_close() && !this._windowClone.hasAttachedDialogs(); - }, + } _onDestroy() { if (this._idleToggleCloseId > 0) { @@ -637,7 +633,7 @@ var WindowOverlay = new Lang.Class({ this.title.destroy(); this.closeButton.destroy(); this.border.destroy(); - }, + } _animateVisible() { this._parentActor.raise_top(); @@ -654,7 +650,7 @@ var WindowOverlay = new Lang.Class({ time: CLOSE_BUTTON_FADE_TIME, transition: 'easeOutQuad' }); }); - }, + } _animateInvisible() { [this.closeButton, this.border, this.title].forEach(a => { @@ -664,7 +660,7 @@ var WindowOverlay = new Lang.Class({ time: CLOSE_BUTTON_FADE_TIME, transition: 'easeInQuad' }); }); - }, + } _onShowChrome() { // We might get enter events on the clone while the overlay is @@ -676,14 +672,14 @@ var WindowOverlay = new Lang.Class({ this._animateVisible(); this.emit('show-close-button'); - }, + } _onHideChrome() { if (this._idleToggleCloseId == 0) { this._idleToggleCloseId = Mainloop.timeout_add(750, this._idleToggleCloseButton.bind(this)); GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton'); } - }, + } _idleToggleCloseButton() { this._idleToggleCloseId = 0; @@ -693,7 +689,7 @@ var WindowOverlay = new Lang.Class({ this._animateInvisible(); return GLib.SOURCE_REMOVE; - }, + } hideCloseButton() { if (this._idleToggleCloseId > 0) { @@ -703,7 +699,7 @@ var WindowOverlay = new Lang.Class({ this.closeButton.hide(); this.border.hide(); this.title.hide(); - }, + } _onStyleChanged() { let closeNode = this.closeButton.get_theme_node(); @@ -714,7 +710,7 @@ var WindowOverlay = new Lang.Class({ this._parentActor.queue_relayout(); } -}); +}; Signals.addSignalMethods(WindowOverlay.prototype); var WindowPositionFlags = { @@ -797,15 +793,15 @@ var WindowPositionFlags = { // each window's "cell" area to be the same, but we shrink the thumbnail // and center it horizontally, and align it to the bottom vertically. -var LayoutStrategy = new Lang.Class({ - Name: 'LayoutStrategy', - Abstract: true, +var LayoutStrategy = class { + constructor(monitor, rowSpacing, columnSpacing) { + if (new.target === LayoutStrategy) + throw new TypeError('Cannot instantiate abstract type ' + new.target.name); - _init(monitor, rowSpacing, columnSpacing) { this._monitor = monitor; this._rowSpacing = rowSpacing; this._columnSpacing = columnSpacing; - }, + } _newRow() { // Row properties: @@ -823,7 +819,7 @@ var LayoutStrategy = new Lang.Class({ width: 0, height: 0, fullWidth: 0, fullHeight: 0, windows: [] }; - }, + } // Computes and returns an individual scaling factor for @window, // to be applied in addition to the overal layout scale. @@ -841,7 +837,7 @@ var LayoutStrategy = new Lang.Class({ // Map from [0, 1] to [1.5, 1] return _interpolate(1.5, 1, ratio); - }, + } // Compute the size of each row, by assigning to the properties // row.width, row.height, row.fullWidth, row.fullHeight, and @@ -849,7 +845,7 @@ var LayoutStrategy = new Lang.Class({ // intended to be called by subclasses. _computeRowSizes(layout) { throw new Error('_computeRowSizes not implemented'); - }, + } // Compute strategy-specific window slots for each window in // @windows, given the @layout. The strategy may also use @layout @@ -862,7 +858,7 @@ var LayoutStrategy = new Lang.Class({ // * rows - A list of rows, which should be instantiated by _newRow. computeLayout(windows, layout) { throw new Error('computeLayout not implemented'); - }, + } // Given @layout, compute the overall scale and space of the layout. // The scale is the individual, non-fancy scale of each window, and @@ -895,7 +891,7 @@ var LayoutStrategy = new Lang.Class({ layout.scale = scale; layout.space = space; - }, + } computeWindowSlots(layout, area) { this._computeRowSizes(layout); @@ -971,12 +967,9 @@ var LayoutStrategy = new Lang.Class({ } return slots; } -}); - -var UnalignedLayoutStrategy = new Lang.Class({ - Name: 'UnalignedLayoutStrategy', - Extends: LayoutStrategy, +}; +var UnalignedLayoutStrategy = class extends LayoutStrategy { _computeRowSizes(layout) { let { rows: rows, scale: scale } = layout; for (let i = 0; i < rows.length; i++) { @@ -984,7 +977,7 @@ var UnalignedLayoutStrategy = new Lang.Class({ row.width = row.fullWidth * scale + (row.windows.length - 1) * this._columnSpacing; row.height = row.fullHeight * scale; } - }, + } _keepSameRow(row, window, width, idealRowWidth) { if (row.fullWidth + width <= idealRowWidth) @@ -997,12 +990,12 @@ var UnalignedLayoutStrategy = new Lang.Class({ return true; return false; - }, + } _sortRow(row) { // Sort windows horizontally to minimize travel distance row.windows.sort((a, b) => a.realWindow.x - b.realWindow.x); - }, + } computeLayout(windows, layout) { let numRows = layout.numRows; @@ -1055,7 +1048,7 @@ var UnalignedLayoutStrategy = new Lang.Class({ layout.gridWidth = maxRow.fullWidth; layout.gridHeight = gridHeight; } -}); +}; function padArea(area, padding) { return { @@ -1098,10 +1091,8 @@ const WorkspaceActor = new Lang.Class({ /** * @metaWorkspace: a #Meta.Workspace, or null */ -var Workspace = new Lang.Class({ - Name: 'Workspace', - - _init(metaWorkspace, monitorIndex) { +var Workspace = class { + constructor(metaWorkspace, monitorIndex) { // When dragging a window, we use this slot for reserve space. this._reservedSlot = null; this._reservedSlotWindow = null; @@ -1174,7 +1165,7 @@ var Workspace = new Lang.Class({ if (this.actor.mapped) this._syncActualGeometry(); }); - }, + } setFullGeometry(geom) { if (rectEqual(this._fullGeometry, geom)) @@ -1184,7 +1175,7 @@ var Workspace = new Lang.Class({ if (this.actor.mapped) this._recalculateWindowPositions(WindowPositionFlags.NONE); - }, + } setActualGeometry(geom) { if (rectEqual(this._actualGeometry, geom)) @@ -1195,7 +1186,7 @@ var Workspace = new Lang.Class({ if (this.actor.mapped) this._syncActualGeometry(); - }, + } _syncActualGeometry() { if (this._actualGeometryLater || !this._actualGeometryDirty) @@ -1216,7 +1207,7 @@ var Workspace = new Lang.Class({ return false; }); - }, + } _lookupIndex(metaWindow) { for (let i = 0; i < this._windows.length; i++) { @@ -1225,15 +1216,15 @@ var Workspace = new Lang.Class({ } } return -1; - }, + } containsMetaWindow(metaWindow) { return this._lookupIndex(metaWindow) >= 0; - }, + } isEmpty() { return this._windows.length == 0; - }, + } setReservedSlot(metaWindow) { if (this._reservedSlotWindow == metaWindow) @@ -1248,7 +1239,7 @@ var Workspace = new Lang.Class({ } this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); - }, + } _recalculateWindowPositions(flags) { this._positionWindowsFlags |= flags; @@ -1262,7 +1253,7 @@ var Workspace = new Lang.Class({ this._positionWindowsId = 0; return false; }); - }, + } _realRecalculateWindowPositions(flags) { if (this._repositionWindowsId > 0) { @@ -1283,7 +1274,7 @@ var Workspace = new Lang.Class({ this._currentLayout = this._computeLayout(clones); this._updateWindowPositions(flags); - }, + } _updateWindowPositions(flags) { if (this._currentLayout == null) { @@ -1378,7 +1369,7 @@ var Workspace = new Lang.Class({ this._showWindowOverlay(clone, overlay); } } - }, + } syncStacking(stackIndices) { let clones = this._windows.slice(); @@ -1398,7 +1389,7 @@ var Workspace = new Lang.Class({ clone.setStackAbove(previousClone.actor); } } - }, + } _animateClone(clone, overlay, x, y, scale) { Tweener.addTween(clone.actor, @@ -1414,7 +1405,7 @@ var Workspace = new Lang.Class({ }); clone.overlay.relayout(true); - }, + } _showWindowOverlay(clone, overlay) { if (clone.inDrag) @@ -1422,7 +1413,7 @@ var Workspace = new Lang.Class({ if (overlay && overlay._hidden) overlay.show(); - }, + } _delayedWindowRepositioning() { let [x, y, mask] = global.get_pointer(); @@ -1447,7 +1438,7 @@ var Workspace = new Lang.Class({ this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); this._repositionWindowsId = 0; return GLib.SOURCE_REMOVE; - }, + } _doRemoveWindow(metaWin) { let win = metaWin.get_compositor_private(); @@ -1493,7 +1484,7 @@ var Workspace = new Lang.Class({ this._repositionWindowsId = Mainloop.timeout_add(750, this._delayedWindowRepositioning.bind(this)); GLib.Source.set_name_by_id(this._repositionWindowsId, '[gnome-shell] this._delayedWindowRepositioning'); - }, + } _doAddWindow(metaWin) { if (this.leavingOverview) @@ -1556,27 +1547,27 @@ var Workspace = new Lang.Class({ this._currentLayout = null; this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); - }, + } _windowAdded(metaWorkspace, metaWin) { this._doAddWindow(metaWin); - }, + } _windowRemoved(metaWorkspace, metaWin) { this._doRemoveWindow(metaWin); - }, + } _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doAddWindow(metaWin); } - }, + } _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doRemoveWindow(metaWin); } - }, + } // check for maximized windows on the workspace hasMaximizedWindows() { @@ -1588,7 +1579,7 @@ var Workspace = new Lang.Class({ return true; } return false; - }, + } fadeToOverview() { // We don't want to reposition windows while animating in this way. @@ -1637,7 +1628,7 @@ var Workspace = new Lang.Class({ this._fadeWindow(i, time, 0); } } - }, + } fadeFromOverview() { this.leavingOverview = true; @@ -1695,7 +1686,7 @@ var Workspace = new Lang.Class({ this._fadeWindow(i, time, 255); } } - }, + } _fadeWindow(index, time, opacity) { let clone = this._windows[index]; @@ -1719,12 +1710,12 @@ var Workspace = new Lang.Class({ // The window is hidden clone.actor.opacity = 0; } - }, + } zoomToOverview() { // Position and scale the windows. this._recalculateWindowPositions(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL); - }, + } zoomFromOverview() { let workspaceManager = global.workspace_manager; @@ -1749,7 +1740,7 @@ var Workspace = new Lang.Class({ // Position and scale the windows. for (let i = 0; i < this._windows.length; i++) this._zoomWindowFromOverview(i); - }, + } _zoomWindowFromOverview(index) { let clone = this._windows[index]; @@ -1779,11 +1770,11 @@ var Workspace = new Lang.Class({ transition: 'easeOutQuad' }); } - }, + } destroy() { this.actor.destroy(); - }, + } _onDestroy(actor) { if (this._overviewHiddenId) { @@ -1815,29 +1806,29 @@ var Workspace = new Lang.Class({ } this._windows = []; - }, + } // Sets this.leavingOverview flag to false. _doneLeavingOverview() { this.leavingOverview = false; - }, + } _doneShowingOverview() { this._animatingWindowsFade = false; this._recalculateWindowPositions(WindowPositionFlags.INITIAL); - }, + } // Tests if @actor belongs to this workspaces and monitor _isMyWindow(actor) { let win = actor.meta_window; return (this.metaWorkspace == null || win.located_on_workspace(this.metaWorkspace)) && (win.get_monitor() == this.monitorIndex); - }, + } // Tests if @win should be shown in the Overview _isOverviewWindow(win) { return !win.get_meta_window().skip_taskbar; - }, + } // Create a clone of a (non-desktop) window and add it to the window list _addWindowClone(win, positioned) { @@ -1884,7 +1875,7 @@ var Workspace = new Lang.Class({ this._windowOverlays.push(overlay); return [clone, overlay]; - }, + } _removeWindowClone(metaWin) { // find the position of the window in our list @@ -1895,7 +1886,7 @@ var Workspace = new Lang.Class({ this._windowOverlays.splice(index, 1); return this._windows.splice(index, 1).pop(); - }, + } _onShowOverlayClose(windowOverlay) { for (let i = 0; i < this._windowOverlays.length; i++) { @@ -1904,7 +1895,7 @@ var Workspace = new Lang.Class({ continue; overlay.hideCloseButton(); } - }, + } _isBetterLayout(oldLayout, newLayout) { if (oldLayout.scale === undefined) @@ -1926,7 +1917,7 @@ var Workspace = new Lang.Class({ // Lose -- worse scale and space return false; } - }, + } _getBestLayout(windows, area, rowSpacing, columnSpacing) { // We look for the largest scale that allows us to fit the @@ -1956,7 +1947,7 @@ var Workspace = new Lang.Class({ } return lastLayout; - }, + } _getSpacingAndPadding() { let node = this.actor.get_theme_node(); @@ -1985,20 +1976,20 @@ var Workspace = new Lang.Class({ padding.right += rightBorder; return [rowSpacing, columnSpacing, padding]; - }, + } _computeLayout(windows) { let [rowSpacing, columnSpacing, padding] = this._getSpacingAndPadding(); let area = padArea(this._fullGeometry, padding); return this._getBestLayout(windows, area, rowSpacing, columnSpacing); - }, + } _onCloneSelected(clone, time) { let wsIndex = undefined; if (this.metaWorkspace) wsIndex = this.metaWorkspace.index(); Main.activateWindow(clone.metaWindow, time, wsIndex); - }, + } // Draggable target interface handleDragOver(source, actor, x, y, time) { @@ -2008,7 +1999,7 @@ var Workspace = new Lang.Class({ return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.CONTINUE; - }, + } acceptDrop(source, actor, x, y, time) { if (source.realWindow) { @@ -2044,6 +2035,5 @@ var Workspace = new Lang.Class({ return false; } -}); - +}; Signals.addSignalMethods(Workspace.prototype); diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index ac187bbe3..386a29fe0 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -54,10 +54,8 @@ var PrimaryActorLayout = new Lang.Class({ }, }); -var WindowClone = new Lang.Class({ - Name: 'WindowClone', - - _init(realWindow) { +var WindowClone = class { + constructor(realWindow) { this.clone = new Clutter.Clone({ source: realWindow }); /* Can't use a Shell.GenericContainer because of DND and reparenting... */ @@ -108,7 +106,7 @@ var WindowClone = new Lang.Class({ return true; }; this.metaWindow.foreach_transient(iter); - }, + } // Find the actor just below us, respecting reparenting done // by DND code @@ -124,7 +122,7 @@ var WindowClone = new Lang.Class({ } else { return this._stackAbove; } - }, + } setStackAbove(actor) { this._stackAbove = actor; @@ -139,15 +137,15 @@ var WindowClone = new Lang.Class({ this.actor.lower_bottom(); else this.actor.raise(actualAbove); - }, + } destroy() { this.actor.destroy(); - }, + } addAttachedDialog(win) { this._doAddAttachedDialog(win, win.get_compositor_private()); - }, + } _doAddAttachedDialog(metaDialog, realDialog) { let clone = new Clutter.Clone({ source: realDialog }); @@ -160,7 +158,7 @@ var WindowClone = new Lang.Class({ clone.destroy(); }); this.actor.add_child(clone); - }, + } _updateDialogPosition(realDialog, cloneDialog) { let metaDialog = realDialog.meta_window; @@ -168,11 +166,11 @@ var WindowClone = new Lang.Class({ let rect = this.metaWindow.get_frame_rect(); cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y); - }, + } _onPositionChanged() { this.actor.set_position(this.realWindow.x, this.realWindow.y); - }, + } _disconnectSignals() { this.actor.get_children().forEach(child => { @@ -181,7 +179,7 @@ var WindowClone = new Lang.Class({ realWindow.disconnect(child._updateId); realWindow.disconnect(child._destroyId); }); - }, + } _onDestroy() { this._disconnectSignals(); @@ -194,13 +192,13 @@ var WindowClone = new Lang.Class({ } this.disconnectAll(); - }, + } _onButtonRelease(actor, event) { this.emit('selected', event.get_time()); return Clutter.EVENT_STOP; - }, + } _onTouchEvent(actor, event) { if (event.type() != Clutter.EventType.TOUCH_END || @@ -209,16 +207,16 @@ var WindowClone = new Lang.Class({ this.emit('selected', event.get_time()); return Clutter.EVENT_STOP; - }, + } _onDragBegin(draggable, time) { this.inDrag = true; this.emit('drag-begin'); - }, + } _onDragCancelled(draggable, time) { this.emit('drag-cancelled'); - }, + } _onDragEnd(draggable, time, snapback) { this.inDrag = false; @@ -236,7 +234,7 @@ var WindowClone = new Lang.Class({ this.emit('drag-end'); } -}); +}; Signals.addSignalMethods(WindowClone.prototype); @@ -254,10 +252,8 @@ var ThumbnailState = { /** * @metaWorkspace: a #Meta.Workspace */ -var WorkspaceThumbnail = new Lang.Class({ - Name: 'WorkspaceThumbnail', - - _init(metaWorkspace) { +var WorkspaceThumbnail = class { + constructor(metaWorkspace) { this.metaWorkspace = metaWorkspace; this.monitorIndex = Main.layoutManager.primaryIndex; @@ -311,18 +307,18 @@ var WorkspaceThumbnail = new Lang.Class({ this.state = ThumbnailState.NORMAL; this._slidePosition = 0; // Fully slid in this._collapseFraction = 0; // Not collapsed - }, + } _createBackground() { this._bgManager = new Background.BackgroundManager({ monitorIndex: Main.layoutManager.primaryIndex, container: this._contents, vignette: false }); - }, + } setPorthole(x, y, width, height) { this.actor.set_size(width, height); this._contents.set_position(-x, -y); - }, + } _lookupIndex(metaWindow) { for (let i = 0; i < this._windows.length; i++) { @@ -331,7 +327,7 @@ var WorkspaceThumbnail = new Lang.Class({ } } return -1; - }, + } syncStacking(stackIndices) { this._windows.sort((a, b) => { @@ -350,31 +346,31 @@ var WorkspaceThumbnail = new Lang.Class({ clone.setStackAbove(previousClone.actor); } } - }, + } set slidePosition(slidePosition) { this._slidePosition = slidePosition; this.actor.queue_relayout(); - }, + } get slidePosition() { return this._slidePosition; - }, + } set collapseFraction(collapseFraction) { this._collapseFraction = collapseFraction; this.actor.queue_relayout(); - }, + } get collapseFraction() { return this._collapseFraction; - }, + } _doRemoveWindow(metaWin) { let clone = this._removeWindowClone(metaWin); if (clone) clone.destroy(); - }, + } _doAddWindow(metaWin) { if (this._removed) @@ -428,11 +424,11 @@ var WorkspaceThumbnail = new Lang.Class({ let clone = this._windows[idx]; clone.addAttachedDialog(metaWin); } - }, + } _windowAdded(metaWorkspace, metaWin) { this._doAddWindow(metaWin); - }, + } _windowRemoved(metaWorkspace, metaWin) { let index = this._allWindows.indexOf(metaWin); @@ -443,31 +439,31 @@ var WorkspaceThumbnail = new Lang.Class({ } this._doRemoveWindow(metaWin); - }, + } _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doAddWindow(metaWin); } - }, + } _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { if (monitorIndex == this.monitorIndex) { this._doRemoveWindow(metaWin); } - }, + } _updateMinimized(metaWin) { if (metaWin.minimized) this._doRemoveWindow(metaWin); else this._doAddWindow(metaWin); - }, + } destroy() { if (this.actor) this.actor.destroy(); - }, + } workspaceRemoved() { if (this._removed) @@ -482,7 +478,7 @@ var WorkspaceThumbnail = new Lang.Class({ for (let i = 0; i < this._allWindows.length; i++) this._allWindows[i].disconnect(this._minimizedChangedIds[i]); - }, + } _onDestroy(actor) { this.workspaceRemoved(); @@ -494,20 +490,20 @@ var WorkspaceThumbnail = new Lang.Class({ this._windows = []; this.actor = null; - }, + } // Tests if @actor belongs to this workspace and monitor _isMyWindow(actor) { let win = actor.meta_window; return win.located_on_workspace(this.metaWorkspace) && (win.get_monitor() == this.monitorIndex); - }, + } // Tests if @win should be shown in the Overview _isOverviewWindow(win) { return !win.get_meta_window().skip_taskbar && win.get_meta_window().showing_on_its_workspace(); - }, + } // Create a clone of a (non-desktop) window and add it to the window list _addWindowClone(win) { @@ -538,7 +534,7 @@ var WorkspaceThumbnail = new Lang.Class({ this._windows.push(clone); return clone; - }, + } _removeWindowClone(metaWin) { // find the position of the window in our list @@ -548,7 +544,7 @@ var WorkspaceThumbnail = new Lang.Class({ return null; return this._windows.splice(index, 1).pop(); - }, + } activate(time) { if (this.state > ThumbnailState.NORMAL) @@ -561,7 +557,7 @@ var WorkspaceThumbnail = new Lang.Class({ Main.overview.hide(); else this.metaWorkspace.activate(time); - }, + } // Draggable target interface used only by ThumbnailsBox handleDragOverInternal(source, time) { @@ -579,7 +575,7 @@ var WorkspaceThumbnail = new Lang.Class({ return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.CONTINUE; - }, + } acceptDropInternal(source, time) { if (this.state > ThumbnailState.NORMAL) @@ -608,8 +604,7 @@ var WorkspaceThumbnail = new Lang.Class({ return false; } -}); - +}; Signals.addSignalMethods(WorkspaceThumbnail.prototype); diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 47993e393..228c3f81b 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -26,10 +26,8 @@ var AnimationType = { const MUTTER_SCHEMA = 'org.gnome.mutter'; -var WorkspacesViewBase = new Lang.Class({ - Name: 'WorkspacesViewBase', - - _init(monitorIndex) { +var WorkspacesViewBase = class { + constructor(monitorIndex) { this.actor = new St.Widget({ style_class: 'workspaces-view', reactive: true }); this.actor.connect('destroy', this._onDestroy.bind(this)); @@ -46,7 +44,7 @@ var WorkspacesViewBase = new Lang.Class({ this._inDrag = false; this._windowDragBeginId = Main.overview.connect('window-drag-begin', this._dragBegin.bind(this)); this._windowDragEndId = Main.overview.connect('window-drag-end', this._dragEnd.bind(this)); - }, + } _onDestroy() { this._dragEnd(); @@ -59,41 +57,38 @@ var WorkspacesViewBase = new Lang.Class({ Main.overview.disconnect(this._windowDragEndId); this._windowDragEndId = 0; } - }, + } _dragBegin(overview, window) { this._inDrag = true; this._setReservedSlot(window); - }, + } _dragEnd() { this._inDrag = false; this._setReservedSlot(null); - }, + } destroy() { this.actor.destroy(); - }, + } setFullGeometry(geom) { this._fullGeometry = geom; this._syncFullGeometry(); - }, + } setActualGeometry(geom) { this._actualGeometry = geom; this._syncActualGeometry(); - }, -}); + } +}; -var WorkspacesView = new Lang.Class({ - Name: 'WorkspacesView', - Extends: WorkspacesViewBase, - - _init(monitorIndex) { +var WorkspacesView = class extends WorkspacesViewBase { + constructor(monitorIndex) { let workspaceManager = global.workspace_manager; - this.parent(monitorIndex); + super(monitorIndex); this._animating = false; // tweening this._scrolling = false; // swipe-scrolling @@ -124,28 +119,28 @@ var WorkspacesView = new Lang.Class({ this._switchWorkspaceNotifyId = global.window_manager.connect('switch-workspace', this._activeWorkspaceChanged.bind(this)); - }, + } _setReservedSlot(window) { for (let i = 0; i < this._workspaces.length; i++) this._workspaces[i].setReservedSlot(window); - }, + } _syncFullGeometry() { for (let i = 0; i < this._workspaces.length; i++) this._workspaces[i].setFullGeometry(this._fullGeometry); - }, + } _syncActualGeometry() { for (let i = 0; i < this._workspaces.length; i++) this._workspaces[i].setActualGeometry(this._actualGeometry); - }, + } getActiveWorkspace() { let workspaceManager = global.workspace_manager; let active = workspaceManager.get_active_workspace_index(); return this._workspaces[active]; - }, + } animateToOverview(animationType) { for (let w = 0; w < this._workspaces.length; w++) { @@ -155,7 +150,7 @@ var WorkspacesView = new Lang.Class({ this._workspaces[w].fadeToOverview(); } this._updateWorkspaceActors(false); - }, + } animateFromOverview(animationType) { this.actor.remove_clip(); @@ -166,12 +161,12 @@ var WorkspacesView = new Lang.Class({ else this._workspaces[w].fadeFromOverview(); } - }, + } syncStacking(stackIndices) { for (let i = 0; i < this._workspaces.length; i++) this._workspaces[i].syncStacking(stackIndices); - }, + } _scrollToActive() { let workspaceManager = global.workspace_manager; @@ -179,7 +174,7 @@ var WorkspacesView = new Lang.Class({ this._updateWorkspaceActors(true); this._updateScrollAdjustment(active); - }, + } // Update workspace actors parameters // @showAnimation: iff %true, transition between states @@ -218,7 +213,7 @@ var WorkspacesView = new Lang.Class({ this._updateVisibility(); } } - }, + } _updateVisibility() { let workspaceManager = global.workspace_manager; @@ -235,7 +230,7 @@ var WorkspacesView = new Lang.Class({ workspace.actor.visible = (w == active); } } - }, + } _updateScrollAdjustment(index) { if (this._scrolling) @@ -251,7 +246,7 @@ var WorkspacesView = new Lang.Class({ this._animatingScroll = false; } }); - }, + } _updateWorkspaces() { let workspaceManager = global.workspace_manager; @@ -284,28 +279,28 @@ var WorkspacesView = new Lang.Class({ } if (this._actualGeometry) this._syncActualGeometry(); - }, + } _activeWorkspaceChanged(wm, from, to, direction) { if (this._scrolling) return; this._scrollToActive(); - }, + } _onDestroy() { - this.parent(); + super._onDestroy(); this.scrollAdjustment.run_dispose(); Main.overview.disconnect(this._overviewShownId); global.window_manager.disconnect(this._switchWorkspaceNotifyId); let workspaceManager = global.workspace_manager; workspaceManager.disconnect(this._updateWorkspacesId); - }, + } startSwipeScroll() { this._scrolling = true; - }, + } endSwipeScroll() { this._scrolling = false; @@ -313,7 +308,7 @@ var WorkspacesView = new Lang.Class({ // Make sure title captions etc are shown as necessary this._scrollToActive(); this._updateVisibility(); - }, + } // sync the workspaces' positions to the value of the scroll adjustment // and change the active workspace if appropriate @@ -356,59 +351,57 @@ var WorkspacesView = new Lang.Class({ this._workspaces[i].actor.visible = Math.abs(i - adj.value) <= 1; this._workspaces[i].actor.y += dy; } - }, -}); + } +}; Signals.addSignalMethods(WorkspacesView.prototype); -var ExtraWorkspaceView = new Lang.Class({ - Name: 'ExtraWorkspaceView', - Extends: WorkspacesViewBase, - - _init(monitorIndex) { - this.parent(monitorIndex); +var ExtraWorkspaceView = class extends WorkspacesViewBase { + constructor(monitorIndex) { + super(monitorIndex); this._workspace = new Workspace.Workspace(null, monitorIndex); this.actor.add_actor(this._workspace.actor); - }, + } _setReservedSlot(window) { this._workspace.setReservedSlot(window); - }, + } _syncFullGeometry() { this._workspace.setFullGeometry(this._fullGeometry); - }, + } _syncActualGeometry() { this._workspace.setActualGeometry(this._actualGeometry); - }, + } getActiveWorkspace() { return this._workspace; - }, + } animateToOverview(animationType) { if (animationType == AnimationType.ZOOM) this._workspace.zoomToOverview(); else this._workspace.fadeToOverview(); - }, + } animateFromOverview(animationType) { if (animationType == AnimationType.ZOOM) this._workspace.zoomFromOverview(); else this._workspace.fadeFromOverview(); - }, + } syncStacking(stackIndices) { this._workspace.syncStacking(stackIndices); - }, + } startSwipeScroll() { - }, + } + endSwipeScroll() { - }, -}); + } +}; var DelegateFocusNavigator = new Lang.Class({ Name: 'DelegateFocusNavigator', @@ -419,10 +412,8 @@ var DelegateFocusNavigator = new Lang.Class({ }, }); -var WorkspacesDisplay = new Lang.Class({ - Name: 'WorkspacesDisplay', - - _init() { +var WorkspacesDisplay = class { + constructor() { this.actor = new DelegateFocusNavigator({ clip_to_allocation: true }); this.actor._delegate = this; this.actor.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this)); @@ -486,18 +477,18 @@ var WorkspacesDisplay = new Lang.Class({ this._keyPressEventId = 0; this._fullGeometry = null; - }, + } _onPan(action) { let [dist, dx, dy] = action.get_motion_delta(0); let adjustment = this._scrollAdjustment; adjustment.value -= (dy / this.actor.height) * adjustment.page_size; return false; - }, + } navigateFocus(from, direction) { return this._getPrimaryView().actor.navigate_focus(from, direction, false); - }, + } show(fadeOnPrimary) { this._updateWorkspacesViews(); @@ -518,7 +509,7 @@ var WorkspacesDisplay = new Lang.Class({ if (this._keyPressEventId == 0) this._keyPressEventId = global.stage.connect('key-press-event', this._onKeyPressEvent.bind(this)); - }, + } animateFromOverview(fadeOnPrimary) { for (let i = 0; i < this._workspacesViews.length; i++) { @@ -529,7 +520,7 @@ var WorkspacesDisplay = new Lang.Class({ animationType = AnimationType.ZOOM; this._workspacesViews[i].animateFromOverview(animationType); } - }, + } hide() { if (this._restackedNotifyId > 0){ @@ -547,7 +538,7 @@ var WorkspacesDisplay = new Lang.Class({ for (let i = 0; i < this._workspacesViews.length; i++) this._workspacesViews[i].destroy(); this._workspacesViews = []; - }, + } _workspacesOnlyOnPrimaryChanged() { this._workspacesOnlyOnPrimary = this._settings.get_boolean('workspaces-only-on-primary'); @@ -556,7 +547,7 @@ var WorkspacesDisplay = new Lang.Class({ return; this._updateWorkspacesViews(); - }, + } _updateWorkspacesViews() { for (let i = 0; i < this._workspacesViews.length; i++) @@ -585,7 +576,7 @@ var WorkspacesDisplay = new Lang.Class({ this._updateWorkspacesFullGeometry(); this._updateWorkspacesActualGeometry(); - }, + } _scrollValueChanged() { for (let i = 0; i < this._workspacesViews.length; i++) { @@ -600,23 +591,23 @@ var WorkspacesDisplay = new Lang.Class({ // values map directly adjustment.value = this._scrollAdjustment.value; } - }, + } _getMonitorIndexForEvent(event) { let [x, y] = event.get_coords(); let rect = new Meta.Rectangle({ x: x, y: y, width: 1, height: 1 }); return global.display.get_monitor_index_for_rect(rect); - }, + } _getPrimaryView() { if (!this._workspacesViews.length) return null; return this._workspacesViews[this._primaryIndex]; - }, + } activeWorkspaceHasMaximizedWindows() { return this._getPrimaryView().getActiveWorkspace().hasMaximizedWindows(); - }, + } _parentSet(actor, oldParent) { if (oldParent && this._notifyOpacityId) @@ -640,7 +631,7 @@ var WorkspacesDisplay = new Lang.Class({ primaryView.actor.visible = opacity != 0; }); }); - }, + } // This geometry should always be the fullest geometry // the workspaces switcher can ever be allocated, as if @@ -648,7 +639,7 @@ var WorkspacesDisplay = new Lang.Class({ setWorkspacesFullGeometry(geom) { this._fullGeometry = geom; this._updateWorkspacesFullGeometry(); - }, + } _updateWorkspacesFullGeometry() { if (!this._workspacesViews.length) @@ -659,7 +650,7 @@ var WorkspacesDisplay = new Lang.Class({ let geometry = (i == this._primaryIndex) ? this._fullGeometry : monitors[i]; this._workspacesViews[i].setFullGeometry(geometry); } - }, + } _updateWorkspacesActualGeometry() { if (!this._workspacesViews.length) @@ -676,12 +667,12 @@ var WorkspacesDisplay = new Lang.Class({ let geometry = (i == this._primaryIndex) ? primaryGeometry : monitors[i]; this._workspacesViews[i].setActualGeometry(geometry); } - }, + } _onRestacked(overview, stackIndices) { for (let i = 0; i < this._workspacesViews.length; i++) this._workspacesViews[i].syncStacking(stackIndices); - }, + } _onScrollEvent(actor, event) { if (!this.actor.mapped) @@ -706,7 +697,7 @@ var WorkspacesDisplay = new Lang.Class({ } Main.wm.actionMoveWorkspace(ws); return Clutter.EVENT_STOP; - }, + } _onKeyPressEvent(actor, event) { if (!this.actor.mapped) @@ -727,5 +718,5 @@ var WorkspacesDisplay = new Lang.Class({ Main.wm.actionMoveWorkspace(ws); return Clutter.EVENT_STOP; } -}); +}; Signals.addSignalMethods(WorkspacesDisplay.prototype); diff --git a/js/ui/xdndHandler.js b/js/ui/xdndHandler.js index 9fc284c33..af968f42b 100644 --- a/js/ui/xdndHandler.js +++ b/js/ui/xdndHandler.js @@ -1,17 +1,14 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- const Clutter = imports.gi.Clutter; -const Lang = imports.lang; const Main = imports.ui.main; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const Signals = imports.signals; const DND = imports.ui.dnd; -var XdndHandler = new Lang.Class({ - Name: 'XdndHandler', - - _init() { +var XdndHandler = class { + constructor() { // Used to display a clone of the cursor window when the // window group is hidden (like it happens in the overview) this._cursorWindowClone = null; @@ -30,7 +27,7 @@ var XdndHandler = new Lang.Class({ dnd.connect('dnd-leave', this._onLeave.bind(this)); this._windowGroupVisibilityHandlerId = 0; - }, + } // Called when the user cancels the drag (i.e release the button) _onLeave() { @@ -44,7 +41,7 @@ var XdndHandler = new Lang.Class({ } this.emit('drag-end'); - }, + } _onEnter() { this._windowGroupVisibilityHandlerId = @@ -52,7 +49,7 @@ var XdndHandler = new Lang.Class({ this._onWindowGroupVisibilityChanged.bind(this)); this.emit('drag-begin', global.get_current_time()); - }, + } _onWindowGroupVisibilityChanged() { if (!global.window_group.visible) { @@ -80,7 +77,7 @@ var XdndHandler = new Lang.Class({ this._cursorWindowClone = null; } } - }, + } _onPositionChanged(obj, x, y) { let pickedActor = global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); @@ -120,6 +117,5 @@ var XdndHandler = new Lang.Class({ pickedActor = pickedActor.get_parent(); } } -}); - +}; Signals.addSignalMethods(XdndHandler.prototype);