cleanup: Port non-GObject classes to JS6 classes

ES6 finally adds standard class syntax to the language, so we can
replace our custom Lang.Class framework with the new syntax. Any
classes that inherit from GObject will need special treatment,
so limit the port to regular javascript classes for now.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/361
This commit is contained in:
Florian Müllner 2017-10-31 02:19:44 +01:00 committed by Georges Basile Stavracas Neto
parent 99ce3deeb0
commit bacfdbbb03
102 changed files with 3454 additions and 4183 deletions

View File

@ -1,4 +1,3 @@
const Lang = imports.lang; const Lang = imports.lang;
const Gettext = imports.gettext; const Gettext = imports.gettext;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
@ -24,9 +23,8 @@ function stripPrefix(string, prefix) {
return string; return string;
} }
var Application = new Lang.Class({ var Application = class {
Name: 'Application', constructor() {
_init() {
GLib.set_prgname('gnome-shell-extension-prefs'); GLib.set_prgname('gnome-shell-extension-prefs');
this.application = new Gtk.Application({ this.application = new Gtk.Application({
application_id: 'org.gnome.shell.ExtensionPrefs', application_id: 'org.gnome.shell.ExtensionPrefs',
@ -42,7 +40,7 @@ var Application = new Lang.Class({
this._startupUuid = null; this._startupUuid = null;
this._loaded = false; this._loaded = false;
this._skipMainWindow = false; this._skipMainWindow = false;
}, }
_extensionAvailable(uuid) { _extensionAvailable(uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
@ -54,7 +52,7 @@ var Application = new Lang.Class({
return false; return false;
return true; return true;
}, }
_getExtensionPrefsModule(extension) { _getExtensionPrefsModule(extension) {
let uuid = extension.metadata.uuid; let uuid = extension.metadata.uuid;
@ -69,7 +67,7 @@ var Application = new Lang.Class({
this._extensionPrefsModules[uuid] = prefsModule; this._extensionPrefsModules[uuid] = prefsModule;
return prefsModule; return prefsModule;
}, }
_selectExtension(uuid) { _selectExtension(uuid) {
if (!this._extensionAvailable(uuid)) if (!this._extensionAvailable(uuid))
@ -104,7 +102,7 @@ var Application = new Lang.Class({
dialog.set_default_size(600, 400); dialog.set_default_size(600, 400);
dialog.add(widget); dialog.add(widget);
dialog.show(); dialog.show();
}, }
_buildErrorUI(extension, exc) { _buildErrorUI(extension, exc) {
let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); let box = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL });
@ -130,7 +128,7 @@ var Application = new Lang.Class({
box.show_all(); box.show_all();
return box; return box;
}, }
_buildUI(app) { _buildUI(app) {
this._window = new Gtk.ApplicationWindow({ application: app, this._window = new Gtk.ApplicationWindow({ application: app,
@ -167,13 +165,13 @@ var Application = new Lang.Class({
}); });
this._window.show_all(); this._window.show_all();
}, }
_sortList(row1, row2) { _sortList(row1, row2) {
let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name; let name1 = ExtensionUtils.extensions[row1.uuid].metadata.name;
let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name; let name2 = ExtensionUtils.extensions[row2.uuid].metadata.name;
return name1.localeCompare(name2); return name1.localeCompare(name2);
}, }
_updateHeader(row, before) { _updateHeader(row, before) {
if (!before || row.get_header()) if (!before || row.get_header())
@ -181,14 +179,14 @@ var Application = new Lang.Class({
let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL }); let sep = new Gtk.Separator({ orientation: Gtk.Orientation.HORIZONTAL });
row.set_header(sep); row.set_header(sep);
}, }
_scanExtensions() { _scanExtensions() {
let finder = new ExtensionUtils.ExtensionFinder(); let finder = new ExtensionUtils.ExtensionFinder();
finder.connect('extension-found', this._extensionFound.bind(this)); finder.connect('extension-found', this._extensionFound.bind(this));
finder.scanExtensions(); finder.scanExtensions();
this._extensionsLoaded(); this._extensionsLoaded();
}, }
_extensionFound(finder, extension) { _extensionFound(finder, extension) {
let row = new ExtensionRow(extension.uuid); let row = new ExtensionRow(extension.uuid);
@ -200,7 +198,7 @@ var Application = new Lang.Class({
row.show_all(); row.show_all();
this._extensionSelector.add(row); this._extensionSelector.add(row);
}, }
_extensionsLoaded() { _extensionsLoaded() {
if (this._startupUuid && this._extensionAvailable(this._startupUuid)) if (this._startupUuid && this._extensionAvailable(this._startupUuid))
@ -208,16 +206,16 @@ var Application = new Lang.Class({
this._startupUuid = null; this._startupUuid = null;
this._skipMainWindow = false; this._skipMainWindow = false;
this._loaded = true; this._loaded = true;
}, }
_onActivate() { _onActivate() {
this._window.present(); this._window.present();
}, }
_onStartup(app) { _onStartup(app) {
this._buildUI(app); this._buildUI(app);
this._scanExtensions(); this._scanExtensions();
}, }
_onCommandLine(app, commandLine) { _onCommandLine(app, commandLine) {
app.activate(); app.activate();
@ -240,7 +238,7 @@ var Application = new Lang.Class({
} }
return 0; return 0;
} }
}); };
var DescriptionLabel = new Lang.Class({ var DescriptionLabel = new Lang.Class({
Name: 'DescriptionLabel', Name: 'DescriptionLabel',

View File

@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@ -38,10 +37,8 @@ var BeginRequestType = {
DONT_PROVIDE_USERNAME: 1 DONT_PROVIDE_USERNAME: 1
}; };
var AuthPrompt = new Lang.Class({ var AuthPrompt = class {
Name: 'AuthPrompt', constructor(gdmClient, mode) {
_init(gdmClient, mode) {
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this._gdmClient = gdmClient; this._gdmClient = gdmClient;
@ -131,12 +128,12 @@ var AuthPrompt = new Lang.Class({
this._spinner.actor.opacity = 0; this._spinner.actor.opacity = 0;
this._spinner.actor.show(); this._spinner.actor.show();
this._defaultButtonWell.add_child(this._spinner.actor); this._defaultButtonWell.add_child(this._spinner.actor);
}, }
_onDestroy() { _onDestroy() {
this._userVerifier.destroy(); this._userVerifier.destroy();
this._userVerifier = null; this._userVerifier = null;
}, }
_initButtons() { _initButtons() {
this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button', this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button',
@ -184,7 +181,7 @@ var AuthPrompt = new Lang.Class({
if (this.nextButton.reactive) if (this.nextButton.reactive)
this.emit('next'); this.emit('next');
}); });
}, }
_onAskQuestion(verifier, serviceName, question, passwordChar) { _onAskQuestion(verifier, serviceName, question, passwordChar) {
if (this._queryingService) if (this._queryingService)
@ -210,12 +207,12 @@ var AuthPrompt = new Lang.Class({
this.updateSensitivity(true); this.updateSensitivity(true);
this.emit('prompted'); this.emit('prompted');
}, }
_onOVirtUserAuthenticated() { _onOVirtUserAuthenticated() {
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset(); this.reset();
}, }
_onSmartcardStatusChanged() { _onSmartcardStatusChanged() {
this.smartcardDetected = this._userVerifier.smartcardDetected; this.smartcardDetected = this._userVerifier.smartcardDetected;
@ -234,12 +231,12 @@ var AuthPrompt = new Lang.Class({
if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED) if (this.verificationStatus != AuthPromptStatus.VERIFICATION_SUCCEEDED)
this.reset(); this.reset();
}, }
_onShowMessage(userVerifier, message, type) { _onShowMessage(userVerifier, message, type) {
this.setMessage(message, type); this.setMessage(message, type);
this.emit('prompted'); this.emit('prompted');
}, }
_onVerificationFailed(userVerifier, canRetry) { _onVerificationFailed(userVerifier, canRetry) {
this._queryingService = null; this._queryingService = null;
@ -248,22 +245,22 @@ var AuthPrompt = new Lang.Class({
this.updateSensitivity(canRetry); this.updateSensitivity(canRetry);
this.setActorInDefaultButtonWell(null); this.setActorInDefaultButtonWell(null);
this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED; this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
}, }
_onVerificationComplete() { _onVerificationComplete() {
this.setActorInDefaultButtonWell(null); this.setActorInDefaultButtonWell(null);
this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED; this.verificationStatus = AuthPromptStatus.VERIFICATION_SUCCEEDED;
this.cancelButton.reactive = false; this.cancelButton.reactive = false;
}, }
_onReset() { _onReset() {
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING; this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
this.reset(); this.reset();
}, }
addActorToDefaultButtonWell(actor) { addActorToDefaultButtonWell(actor) {
this._defaultButtonWell.add_child(actor); this._defaultButtonWell.add_child(actor);
}, }
setActorInDefaultButtonWell(actor, animate) { setActorInDefaultButtonWell(actor, animate) {
if (!this._defaultButtonWellActor && if (!this._defaultButtonWellActor &&
@ -327,25 +324,25 @@ var AuthPrompt = new Lang.Class({
} }
this._defaultButtonWellActor = actor; this._defaultButtonWellActor = actor;
}, }
startSpinning() { startSpinning() {
this.setActorInDefaultButtonWell(this._spinner.actor, true); this.setActorInDefaultButtonWell(this._spinner.actor, true);
}, }
stopSpinning() { stopSpinning() {
this.setActorInDefaultButtonWell(null, false); this.setActorInDefaultButtonWell(null, false);
}, }
clear() { clear() {
this._entry.text = ''; this._entry.text = '';
this.stopSpinning(); this.stopSpinning();
}, }
setPasswordChar(passwordChar) { setPasswordChar(passwordChar) {
this._entry.clutter_text.set_password_char(passwordChar); this._entry.clutter_text.set_password_char(passwordChar);
this._entry.menu.isPassword = passwordChar != ''; this._entry.menu.isPassword = passwordChar != '';
}, }
setQuestion(question) { setQuestion(question) {
this._label.set_text(question); this._label.set_text(question);
@ -354,7 +351,7 @@ var AuthPrompt = new Lang.Class({
this._entry.show(); this._entry.show();
this._entry.grab_key_focus(); this._entry.grab_key_focus();
}, }
getAnswer() { getAnswer() {
let text; let text;
@ -367,7 +364,7 @@ var AuthPrompt = new Lang.Class({
} }
return text; return text;
}, }
_fadeOutMessage() { _fadeOutMessage() {
if (this._message.opacity == 0) if (this._message.opacity == 0)
@ -378,7 +375,7 @@ var AuthPrompt = new Lang.Class({
time: MESSAGE_FADE_OUT_ANIMATION_TIME, time: MESSAGE_FADE_OUT_ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
}, }
setMessage(message, type) { setMessage(message, type) {
if (type == GdmUtil.MessageType.ERROR) if (type == GdmUtil.MessageType.ERROR)
@ -398,18 +395,18 @@ var AuthPrompt = new Lang.Class({
} else { } else {
this._message.opacity = 0; this._message.opacity = 0;
} }
}, }
_updateNextButtonSensitivity(sensitive) { _updateNextButtonSensitivity(sensitive) {
this.nextButton.reactive = sensitive; this.nextButton.reactive = sensitive;
this.nextButton.can_focus = sensitive; this.nextButton.can_focus = sensitive;
}, }
updateSensitivity(sensitive) { updateSensitivity(sensitive) {
this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING)); this._updateNextButtonSensitivity(sensitive && (this._entry.text.length > 0 || this.verificationStatus == AuthPromptStatus.VERIFYING));
this._entry.reactive = sensitive; this._entry.reactive = sensitive;
this._entry.clutter_text.editable = sensitive; this._entry.clutter_text.editable = sensitive;
}, }
hide() { hide() {
this.setActorInDefaultButtonWell(null, true); this.setActorInDefaultButtonWell(null, true);
@ -420,7 +417,7 @@ var AuthPrompt = new Lang.Class({
this.updateSensitivity(true); this.updateSensitivity(true);
this._entry.set_text(''); this._entry.set_text('');
}, }
setUser(user) { setUser(user) {
let oldChild = this._userWell.get_child(); let oldChild = this._userWell.get_child();
@ -431,7 +428,7 @@ var AuthPrompt = new Lang.Class({
let userWidget = new UserWidget.UserWidget(user); let userWidget = new UserWidget.UserWidget(user);
this._userWell.set_child(userWidget.actor); this._userWell.set_child(userWidget.actor);
} }
}, }
reset() { reset() {
let oldStatus = this.verificationStatus; let oldStatus = this.verificationStatus;
@ -469,7 +466,7 @@ var AuthPrompt = new Lang.Class({
} }
this.emit('reset', beginRequestType); this.emit('reset', beginRequestType);
}, }
addCharacter(unichar) { addCharacter(unichar) {
if (!this._entry.visible) if (!this._entry.visible)
@ -477,7 +474,7 @@ var AuthPrompt = new Lang.Class({
this._entry.grab_key_focus(); this._entry.grab_key_focus();
this._entry.clutter_text.insert_unichar(unichar); this._entry.clutter_text.insert_unichar(unichar);
}, }
begin(params) { begin(params) {
params = Params.parse(params, { userName: null, params = Params.parse(params, { userName: null,
@ -491,7 +488,7 @@ var AuthPrompt = new Lang.Class({
this._userVerifier.begin(params.userName, hold); this._userVerifier.begin(params.userName, hold);
this.verificationStatus = AuthPromptStatus.VERIFYING; this.verificationStatus = AuthPromptStatus.VERIFYING;
}, }
finish(onComplete) { finish(onComplete) {
if (!this._userVerifier.hasPendingMessages) { if (!this._userVerifier.hasPendingMessages) {
@ -505,7 +502,7 @@ var AuthPrompt = new Lang.Class({
this._userVerifier.clear(); this._userVerifier.clear();
onComplete(); onComplete();
}); });
}, }
cancel() { cancel() {
if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) { if (this.verificationStatus == AuthPromptStatus.VERIFICATION_SUCCEEDED) {
@ -514,5 +511,5 @@ var AuthPrompt = new Lang.Class({
this.reset(); this.reset();
this.emit('cancelled'); this.emit('cancelled');
} }
}); };
Signals.addSignalMethods(AuthPrompt.prototype); Signals.addSignalMethods(AuthPrompt.prototype);

View File

@ -44,45 +44,39 @@
* replaced by something else. * replaced by something else.
*/ */
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
var Task = new Lang.Class({ var Task = class {
Name: 'Task', constructor(scope, handler) {
_init(scope, handler) {
if (scope) if (scope)
this.scope = scope; this.scope = scope;
else else
this.scope = this; this.scope = this;
this.handler = handler; this.handler = handler;
}, }
run() { run() {
if (this.handler) if (this.handler)
return this.handler.call(this.scope); return this.handler.call(this.scope);
return null; return null;
}, }
}); };
Signals.addSignalMethods(Task.prototype); Signals.addSignalMethods(Task.prototype);
var Hold = new Lang.Class({ var Hold = class extends Task {
Name: 'Hold', constructor() {
Extends: Task, super(null, () => this);
_init() {
this.parent(this, () => this);
this._acquisitions = 1; this._acquisitions = 1;
}, }
acquire() { acquire() {
if (this._acquisitions <= 0) if (this._acquisitions <= 0)
throw new Error("Cannot acquire hold after it's been released"); throw new Error("Cannot acquire hold after it's been released");
this._acquisitions++; this._acquisitions++;
}, }
acquireUntilAfter(hold) { acquireUntilAfter(hold) {
if (!hold.isAcquired()) if (!hold.isAcquired())
@ -93,27 +87,24 @@ var Hold = new Lang.Class({
hold.disconnect(signalId); hold.disconnect(signalId);
this.release(); this.release();
}); });
}, }
release() { release() {
this._acquisitions--; this._acquisitions--;
if (this._acquisitions == 0) if (this._acquisitions == 0)
this.emit('release'); this.emit('release');
}, }
isAcquired() { isAcquired() {
return this._acquisitions > 0; return this._acquisitions > 0;
} }
}); };
Signals.addSignalMethods(Hold.prototype); Signals.addSignalMethods(Hold.prototype);
var Batch = new Lang.Class({ var Batch = class extends Task {
Name: 'Batch', constructor(scope, tasks) {
Extends: Task, super();
_init(scope, tasks) {
this.parent();
this.tasks = []; this.tasks = [];
@ -130,11 +121,11 @@ var Batch = new Lang.Class({
this.tasks.push(task); this.tasks.push(task);
} }
}, }
process() { process() {
throw new Error('Not implemented'); throw new Error('Not implemented');
}, }
runTask() { runTask() {
if (!(this._currentTaskIndex in this.tasks)) { if (!(this._currentTaskIndex in this.tasks)) {
@ -142,11 +133,11 @@ var Batch = new Lang.Class({
} }
return this.tasks[this._currentTaskIndex].run(); return this.tasks[this._currentTaskIndex].run();
}, }
_finish() { _finish() {
this.hold.release(); this.hold.release();
}, }
nextTask() { nextTask() {
this._currentTaskIndex++; this._currentTaskIndex++;
@ -159,7 +150,7 @@ var Batch = new Lang.Class({
} }
this.process(); this.process();
}, }
_start() { _start() {
// acquire a hold to get released when the entire // acquire a hold to get released when the entire
@ -167,7 +158,7 @@ var Batch = new Lang.Class({
this.hold = new Hold(); this.hold = new Hold();
this._currentTaskIndex = 0; this._currentTaskIndex = 0;
this.process(); this.process();
}, }
run() { run() {
this._start(); this._start();
@ -175,18 +166,15 @@ var Batch = new Lang.Class({
// hold may be destroyed at this point // hold may be destroyed at this point
// if we're already done running // if we're already done running
return this.hold; return this.hold;
}, }
cancel() { cancel() {
this.tasks = this.tasks.splice(0, this._currentTaskIndex + 1); this.tasks = this.tasks.splice(0, this._currentTaskIndex + 1);
} }
}); };
Signals.addSignalMethods(Batch.prototype); Signals.addSignalMethods(Batch.prototype);
var ConcurrentBatch = new Lang.Class({ var ConcurrentBatch = class extends Batch {
Name: 'ConcurrentBatch',
Extends: Batch,
process() { process() {
let hold = this.runTask(); let hold = this.runTask();
@ -199,13 +187,10 @@ var ConcurrentBatch = new Lang.Class({
// concurrently. // concurrently.
this.nextTask(); this.nextTask();
} }
}); };
Signals.addSignalMethods(ConcurrentBatch.prototype); Signals.addSignalMethods(ConcurrentBatch.prototype);
var ConsecutiveBatch = new Lang.Class({ var ConsecutiveBatch = class extends Batch {
Name: 'ConsecutiveBatch',
Extends: Batch,
process() { process() {
let hold = this.runTask(); let hold = this.runTask();
@ -222,5 +207,5 @@ var ConsecutiveBatch = new Lang.Class({
this.nextTask(); this.nextTask();
} }
} }
}); };
Signals.addSignalMethods(ConsecutiveBatch.prototype); Signals.addSignalMethods(ConsecutiveBatch.prototype);

View File

@ -50,10 +50,8 @@ const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _LOGO_ICON_HEIGHT = 48; const _LOGO_ICON_HEIGHT = 48;
const _MAX_BOTTOM_MENU_ITEMS = 5; const _MAX_BOTTOM_MENU_ITEMS = 5;
var UserListItem = new Lang.Class({ var UserListItem = class {
Name: 'UserListItem', constructor(user) {
_init(user) {
this.user = user; this.user = user;
this._userChangedId = this.user.connect('changed', this._userChangedId = this.user.connect('changed',
this._onUserChanged.bind(this)); this._onUserChanged.bind(this));
@ -91,26 +89,26 @@ var UserListItem = new Lang.Class({
this.actor.connect('clicked', this._onClicked.bind(this)); this.actor.connect('clicked', this._onClicked.bind(this));
this._onUserChanged(); this._onUserChanged();
}, }
_onUserChanged() { _onUserChanged() {
this._updateLoggedIn(); this._updateLoggedIn();
}, }
_updateLoggedIn() { _updateLoggedIn() {
if (this.user.is_logged_in()) if (this.user.is_logged_in())
this.actor.add_style_pseudo_class('logged-in'); this.actor.add_style_pseudo_class('logged-in');
else else
this.actor.remove_style_pseudo_class('logged-in'); this.actor.remove_style_pseudo_class('logged-in');
}, }
_onDestroy() { _onDestroy() {
this.user.disconnect(this._userChangedId); this.user.disconnect(this._userChangedId);
}, }
_onClicked() { _onClicked() {
this.emit('activate'); this.emit('activate');
}, }
_setSelected(selected) { _setSelected(selected) {
if (selected) { if (selected) {
@ -119,7 +117,7 @@ var UserListItem = new Lang.Class({
} else { } else {
this.actor.remove_style_pseudo_class('selected'); this.actor.remove_style_pseudo_class('selected');
} }
}, }
showTimedLoginIndicator(time) { showTimedLoginIndicator(time) {
let hold = new Batch.Hold(); 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'); GLib.Source.set_name_by_id(this._timedLoginTimeoutId, '[gnome-shell] this._timedLoginTimeoutId');
return hold; return hold;
}, }
hideTimedLoginIndicator() { hideTimedLoginIndicator() {
if (this._timedLoginTimeoutId) { if (this._timedLoginTimeoutId) {
@ -158,13 +156,11 @@ var UserListItem = new Lang.Class({
this._timedLoginIndicator.visible = false; this._timedLoginIndicator.visible = false;
this._timedLoginIndicator.scale_x = 0.; this._timedLoginIndicator.scale_x = 0.;
} }
}); };
Signals.addSignalMethods(UserListItem.prototype); Signals.addSignalMethods(UserListItem.prototype);
var UserList = new Lang.Class({ var UserList = class {
Name: 'UserList', constructor() {
_init() {
this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'}); this.actor = new St.ScrollView({ style_class: 'login-dialog-user-list-view'});
this.actor.set_policy(Gtk.PolicyType.NEVER, this.actor.set_policy(Gtk.PolicyType.NEVER,
Gtk.PolicyType.AUTOMATIC); Gtk.PolicyType.AUTOMATIC);
@ -177,7 +173,7 @@ var UserList = new Lang.Class({
this._items = {}; this._items = {};
this.actor.connect('key-focus-in', this._moveFocusToItems.bind(this)); this.actor.connect('key-focus-in', this._moveFocusToItems.bind(this));
}, }
_moveFocusToItems() { _moveFocusToItems() {
let hasItems = Object.keys(this._items).length > 0; let hasItems = Object.keys(this._items).length > 0;
@ -195,11 +191,11 @@ var UserList = new Lang.Class({
return false; return false;
}); });
} }
}, }
_onItemActivated(activatedItem) { _onItemActivated(activatedItem) {
this.emit('activate', activatedItem); this.emit('activate', activatedItem);
}, }
updateStyle(isExpanded) { updateStyle(isExpanded) {
let tasks = []; let tasks = [];
@ -213,7 +209,7 @@ var UserList = new Lang.Class({
let item = this._items[userName]; let item = this._items[userName];
item.actor.sync_hover(); item.actor.sync_hover();
} }
}, }
scrollToItem(item) { scrollToItem(item) {
let box = item.actor.get_allocation_box(); let box = item.actor.get_allocation_box();
@ -226,7 +222,7 @@ var UserList = new Lang.Class({
{ value: value, { value: value,
time: _SCROLL_ANIMATION_TIME, time: _SCROLL_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
}, }
jumpToItem(item) { jumpToItem(item) {
let box = item.actor.get_allocation_box(); 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); let value = (box.y1 + adjustment.step_increment / 2.0) - (adjustment.page_size / 2.0);
adjustment.set_value(value); adjustment.set_value(value);
}, }
getItemFromUserName(userName) { getItemFromUserName(userName) {
let item = this._items[userName]; let item = this._items[userName];
@ -245,11 +241,11 @@ var UserList = new Lang.Class({
return null; return null;
return item; return item;
}, }
containsUser(user) { containsUser(user) {
return this._items[user.get_user_name()] != null; return this._items[user.get_user_name()] != null;
}, }
addUser(user) { addUser(user) {
if (!user.is_loaded) if (!user.is_loaded)
@ -281,7 +277,7 @@ var UserList = new Lang.Class({
this._moveFocusToItems(); this._moveFocusToItems();
this.emit('item-added', item); this.emit('item-added', item);
}, }
removeUser(user) { removeUser(user) {
if (!user.is_loaded) if (!user.is_loaded)
@ -299,18 +295,16 @@ var UserList = new Lang.Class({
item.actor.destroy(); item.actor.destroy();
delete this._items[userName]; delete this._items[userName];
}, }
numItems() { numItems() {
return Object.keys(this._items).length; return Object.keys(this._items).length;
} }
}); };
Signals.addSignalMethods(UserList.prototype); Signals.addSignalMethods(UserList.prototype);
var SessionMenuButton = new Lang.Class({ var SessionMenuButton = class {
Name: 'SessionMenuButton', constructor() {
_init() {
let gearIcon = new St.Icon({ icon_name: 'emblem-system-symbolic' }); let gearIcon = new St.Icon({ icon_name: 'emblem-system-symbolic' });
this._button = new St.Button({ style_class: 'login-dialog-session-list-button', this._button = new St.Button({ style_class: 'login-dialog-session-list-button',
reactive: true, reactive: true,
@ -350,13 +344,13 @@ var SessionMenuButton = new Lang.Class({
this._items = {}; this._items = {};
this._activeSessionId = null; this._activeSessionId = null;
this._populate(); this._populate();
}, }
updateSensitivity(sensitive) { updateSensitivity(sensitive) {
this._button.reactive = sensitive; this._button.reactive = sensitive;
this._button.can_focus = sensitive; this._button.can_focus = sensitive;
this._menu.close(BoxPointer.PopupAnimation.NONE); this._menu.close(BoxPointer.PopupAnimation.NONE);
}, }
_updateOrnament() { _updateOrnament() {
let itemIds = Object.keys(this._items); let itemIds = Object.keys(this._items);
@ -366,7 +360,7 @@ var SessionMenuButton = new Lang.Class({
else else
this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE); this._items[itemIds[i]].setOrnament(PopupMenu.Ornament.NONE);
} }
}, }
setActiveSession(sessionId) { setActiveSession(sessionId) {
if (sessionId == this._activeSessionId) if (sessionId == this._activeSessionId)
@ -374,11 +368,11 @@ var SessionMenuButton = new Lang.Class({
this._activeSessionId = sessionId; this._activeSessionId = sessionId;
this._updateOrnament(); this._updateOrnament();
}, }
close() { close() {
this._menu.close(); this._menu.close();
}, }
_populate() { _populate() {
let ids = Gdm.get_session_ids(); let ids = Gdm.get_session_ids();
@ -403,7 +397,7 @@ var SessionMenuButton = new Lang.Class({
}); });
} }
} }
}); };
Signals.addSignalMethods(SessionMenuButton.prototype); Signals.addSignalMethods(SessionMenuButton.prototype);
var LoginDialog = new Lang.Class({ var LoginDialog = new Lang.Class({

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const OVirtCredentialsIface = ` const OVirtCredentialsIface = `
@ -28,33 +27,32 @@ function OVirtCredentials() {
return self; return self;
} }
var OVirtCredentialsManager = new Lang.Class({ var OVirtCredentialsManager = class {
Name: 'OVirtCredentialsManager', constructor() {
_init() {
this._token = null; this._token = null;
this._credentials = new OVirtCredentials(); this._credentials = new OVirtCredentials();
this._credentials.connectSignal('UserAuthenticated', this._credentials.connectSignal('UserAuthenticated',
this._onUserAuthenticated.bind(this)); this._onUserAuthenticated.bind(this));
}, }
_onUserAuthenticated(proxy, sender, [token]) { _onUserAuthenticated(proxy, sender, [token]) {
this._token = token; this._token = token;
this.emit('user-authenticated', token); this.emit('user-authenticated', token);
}, }
hasToken() { hasToken() {
return this._token != null; return this._token != null;
}, }
getToken() { getToken() {
return this._token; return this._token;
}, }
resetToken() { resetToken() {
this._token = null; this._token = null;
} }
}); };
Signals.addSignalMethods(OVirtCredentialsManager.prototype); Signals.addSignalMethods(OVirtCredentialsManager.prototype);
function getOVirtCredentialsManager() { function getOVirtCredentialsManager() {

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -16,10 +15,8 @@ const Service = Gio.DBusProxy.makeProxyWrapper(ServiceIface);
const RealmIface = loadInterfaceXML("org.freedesktop.realmd.Realm"); const RealmIface = loadInterfaceXML("org.freedesktop.realmd.Realm");
const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface); const Realm = Gio.DBusProxy.makeProxyWrapper(RealmIface);
var Manager = new Lang.Class({ var Manager = class {
Name: 'Manager', constructor(parentActor) {
_init(parentActor) {
this._aggregateProvider = Provider(Gio.DBus.system, this._aggregateProvider = Provider(Gio.DBus.system,
'org.freedesktop.realmd', 'org.freedesktop.realmd',
'/org/freedesktop/realmd', '/org/freedesktop/realmd',
@ -31,7 +28,7 @@ var Manager = new Lang.Class({
if ('Realms' in properties.deep_unpack()) if ('Realms' in properties.deep_unpack())
this._reloadRealms(); this._reloadRealms();
}); });
}, }
_reloadRealms() { _reloadRealms() {
let realmPaths = this._aggregateProvider.Realms; let realmPaths = this._aggregateProvider.Realms;
@ -45,7 +42,7 @@ var Manager = new Lang.Class({
realmPaths[i], realmPaths[i],
this._onRealmLoaded.bind(this)); this._onRealmLoaded.bind(this));
} }
}, }
_reloadRealm(realm) { _reloadRealm(realm) {
if (!realm.Configured) { if (!realm.Configured) {
@ -58,7 +55,7 @@ var Manager = new Lang.Class({
this._realms[realm.get_object_path()] = realm; this._realms[realm.get_object_path()] = realm;
this._updateLoginFormat(); this._updateLoginFormat();
}, }
_onRealmLoaded(realm, error) { _onRealmLoaded(realm, error) {
if (error) if (error)
@ -70,7 +67,7 @@ var Manager = new Lang.Class({
if ('Configured' in properties.deep_unpack()) if ('Configured' in properties.deep_unpack())
this._reloadRealm(realm); this._reloadRealm(realm);
}); });
}, }
_updateLoginFormat() { _updateLoginFormat() {
let newLoginFormat; let newLoginFormat;
@ -87,7 +84,7 @@ var Manager = new Lang.Class({
this._loginFormat = newLoginFormat; this._loginFormat = newLoginFormat;
this.emit('login-format-changed', newLoginFormat); this.emit('login-format-changed', newLoginFormat);
} }
}, }
get loginFormat() { get loginFormat() {
if (this._loginFormat !== undefined) if (this._loginFormat !== undefined)
@ -96,7 +93,7 @@ var Manager = new Lang.Class({
this._updateLoginFormat(); this._updateLoginFormat();
return this._loginFormat; return this._loginFormat;
}, }
release() { release() {
Service(Gio.DBus.system, Service(Gio.DBus.system,
@ -107,5 +104,5 @@ var Manager = new Lang.Class({
this._realms = { }; this._realms = { };
this._updateLoginFormat(); this._updateLoginFormat();
} }
}); };
Signals.addSignalMethods(Manager.prototype) Signals.addSignalMethods(Manager.prototype)

View File

@ -3,7 +3,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@ -119,10 +118,8 @@ function cloneAndFadeOutActor(actor) {
return hold; return hold;
} }
var ShellUserVerifier = new Lang.Class({ var ShellUserVerifier = class {
Name: 'ShellUserVerifier', constructor(client, params) {
_init(client, params) {
params = Params.parse(params, { reauthenticationOnly: false }); params = Params.parse(params, { reauthenticationOnly: false });
this._reauthOnly = params.reauthenticationOnly; this._reauthOnly = params.reauthenticationOnly;
@ -165,7 +162,7 @@ var ShellUserVerifier = new Lang.Class({
this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated', this._oVirtUserAuthenticatedId = this._oVirtCredentialsManager.connect('user-authenticated',
this._oVirtUserAuthenticated.bind(this)); this._oVirtUserAuthenticated.bind(this));
}, }
begin(userName, hold) { begin(userName, hold) {
this._cancellable = new Gio.Cancellable(); this._cancellable = new Gio.Cancellable();
@ -183,7 +180,7 @@ var ShellUserVerifier = new Lang.Class({
} else { } else {
this._client.get_user_verifier(this._cancellable, this._userVerifierGot.bind(this)); this._client.get_user_verifier(this._cancellable, this._userVerifierGot.bind(this));
} }
}, }
cancel() { cancel() {
if (this._cancellable) if (this._cancellable)
@ -193,14 +190,14 @@ var ShellUserVerifier = new Lang.Class({
this._userVerifier.call_cancel_sync(null); this._userVerifier.call_cancel_sync(null);
this.clear(); this.clear();
} }
}, }
_clearUserVerifier() { _clearUserVerifier() {
if (this._userVerifier) { if (this._userVerifier) {
this._userVerifier.run_dispose(); this._userVerifier.run_dispose();
this._userVerifier = null; this._userVerifier = null;
} }
}, }
clear() { clear() {
if (this._cancellable) { if (this._cancellable) {
@ -210,7 +207,7 @@ var ShellUserVerifier = new Lang.Class({
this._clearUserVerifier(); this._clearUserVerifier();
this._clearMessageQueue(); this._clearMessageQueue();
}, }
destroy() { destroy() {
this.clear(); this.clear();
@ -224,7 +221,7 @@ var ShellUserVerifier = new Lang.Class({
this._oVirtCredentialsManager.disconnect(this._oVirtUserAuthenticatedId); this._oVirtCredentialsManager.disconnect(this._oVirtUserAuthenticatedId);
this._oVirtCredentialsManager = null; this._oVirtCredentialsManager = null;
}, }
answerQuery(serviceName, answer) { answerQuery(serviceName, answer) {
if (!this.hasPendingMessages) { if (!this.hasPendingMessages) {
@ -235,12 +232,12 @@ var ShellUserVerifier = new Lang.Class({
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
}); });
} }
}, }
_getIntervalForMessage(message) { _getIntervalForMessage(message) {
// We probably could be smarter here // We probably could be smarter here
return message.length * USER_READ_TIME; return message.length * USER_READ_TIME;
}, }
finishMessageQueue() { finishMessageQueue() {
if (!this.hasPendingMessages) if (!this.hasPendingMessages)
@ -250,7 +247,7 @@ var ShellUserVerifier = new Lang.Class({
this.hasPendingMessages = false; this.hasPendingMessages = false;
this.emit('no-more-messages'); this.emit('no-more-messages');
}, }
_queueMessageTimeout() { _queueMessageTimeout() {
if (this._messageQueue.length == 0) { if (this._messageQueue.length == 0) {
@ -273,7 +270,7 @@ var ShellUserVerifier = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._messageQueueTimeoutId, '[gnome-shell] this._queueMessageTimeout'); GLib.Source.set_name_by_id(this._messageQueueTimeoutId, '[gnome-shell] this._queueMessageTimeout');
}, }
_queueMessage(message, messageType) { _queueMessage(message, messageType) {
let interval = this._getIntervalForMessage(message); let interval = this._getIntervalForMessage(message);
@ -281,7 +278,7 @@ var ShellUserVerifier = new Lang.Class({
this.hasPendingMessages = true; this.hasPendingMessages = true;
this._messageQueue.push({ text: message, type: messageType, interval: interval }); this._messageQueue.push({ text: message, type: messageType, interval: interval });
this._queueMessageTimeout(); this._queueMessageTimeout();
}, }
_clearMessageQueue() { _clearMessageQueue() {
this.finishMessageQueue(); this.finishMessageQueue();
@ -291,7 +288,7 @@ var ShellUserVerifier = new Lang.Class({
this._messageQueueTimeoutId = 0; this._messageQueueTimeoutId = 0;
} }
this.emit('show-message', null, MessageType.NONE); this.emit('show-message', null, MessageType.NONE);
}, }
_checkForFingerprintReader() { _checkForFingerprintReader() {
this._haveFingerprintReader = false; this._haveFingerprintReader = false;
@ -309,12 +306,12 @@ var ShellUserVerifier = new Lang.Class({
this._updateDefaultService(); this._updateDefaultService();
} }
}); });
}, }
_oVirtUserAuthenticated(token) { _oVirtUserAuthenticated(token) {
this._preemptingService = OVIRT_SERVICE_NAME; this._preemptingService = OVIRT_SERVICE_NAME;
this.emit('ovirt-user-authenticated'); this.emit('ovirt-user-authenticated');
}, }
_checkForSmartcard() { _checkForSmartcard() {
let smartcardDetected; let smartcardDetected;
@ -336,7 +333,7 @@ var ShellUserVerifier = new Lang.Class({
this.emit('smartcard-status-changed'); this.emit('smartcard-status-changed');
} }
}, }
_reportInitError(where, error) { _reportInitError(where, error) {
logError(error, where); logError(error, where);
@ -344,7 +341,7 @@ var ShellUserVerifier = new Lang.Class({
this._queueMessage(_("Authentication error"), MessageType.ERROR); this._queueMessage(_("Authentication error"), MessageType.ERROR);
this._verificationFailed(false); this._verificationFailed(false);
}, }
_reauthenticationChannelOpened(client, result) { _reauthenticationChannelOpened(client, result) {
try { try {
@ -371,7 +368,7 @@ var ShellUserVerifier = new Lang.Class({
this._connectSignals(); this._connectSignals();
this._beginVerification(); this._beginVerification();
this._hold.release(); this._hold.release();
}, }
_userVerifierGot(client, result) { _userVerifierGot(client, result) {
try { try {
@ -387,7 +384,7 @@ var ShellUserVerifier = new Lang.Class({
this._connectSignals(); this._connectSignals();
this._beginVerification(); this._beginVerification();
this._hold.release(); this._hold.release();
}, }
_connectSignals() { _connectSignals() {
this._userVerifier.connect('info', this._onInfo.bind(this)); 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('conversation-stopped', this._onConversationStopped.bind(this));
this._userVerifier.connect('reset', this._onReset.bind(this)); this._userVerifier.connect('reset', this._onReset.bind(this));
this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this)); this._userVerifier.connect('verification-complete', this._onVerificationComplete.bind(this));
}, }
_getForegroundService() { _getForegroundService() {
if (this._preemptingService) if (this._preemptingService)
return this._preemptingService; return this._preemptingService;
return this._defaultService; return this._defaultService;
}, }
serviceIsForeground(serviceName) { serviceIsForeground(serviceName) {
return serviceName == this._getForegroundService(); return serviceName == this._getForegroundService();
}, }
serviceIsDefault(serviceName) { serviceIsDefault(serviceName) {
return serviceName == this._defaultService; return serviceName == this._defaultService;
}, }
_updateDefaultService() { _updateDefaultService() {
if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY)) 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"); log("no authentication service is enabled, using password authentication");
this._defaultService = PASSWORD_SERVICE_NAME; this._defaultService = PASSWORD_SERVICE_NAME;
} }
}, }
_startService(serviceName) { _startService(serviceName) {
this._hold.acquire(); this._hold.acquire();
@ -462,14 +459,14 @@ var ShellUserVerifier = new Lang.Class({
this._hold.release(); this._hold.release();
}); });
} }
}, }
_beginVerification() { _beginVerification() {
this._startService(this._getForegroundService()); this._startService(this._getForegroundService());
if (this._userName && this._haveFingerprintReader && !this.serviceIsForeground(FINGERPRINT_SERVICE_NAME)) if (this._userName && this._haveFingerprintReader && !this.serviceIsForeground(FINGERPRINT_SERVICE_NAME))
this._startService(FINGERPRINT_SERVICE_NAME); this._startService(FINGERPRINT_SERVICE_NAME);
}, }
_onInfo(client, serviceName, info) { _onInfo(client, serviceName, info) {
if (this.serviceIsForeground(serviceName)) { if (this.serviceIsForeground(serviceName)) {
@ -484,21 +481,21 @@ var ShellUserVerifier = new Lang.Class({
// to indicate the user can swipe their finger instead // to indicate the user can swipe their finger instead
this._queueMessage(_("(or swipe finger)"), MessageType.HINT); this._queueMessage(_("(or swipe finger)"), MessageType.HINT);
} }
}, }
_onProblem(client, serviceName, problem) { _onProblem(client, serviceName, problem) {
if (!this.serviceIsForeground(serviceName)) if (!this.serviceIsForeground(serviceName))
return; return;
this._queueMessage(problem, MessageType.ERROR); this._queueMessage(problem, MessageType.ERROR);
}, }
_onInfoQuery(client, serviceName, question) { _onInfoQuery(client, serviceName, question) {
if (!this.serviceIsForeground(serviceName)) if (!this.serviceIsForeground(serviceName))
return; return;
this.emit('ask-question', serviceName, question, ''); this.emit('ask-question', serviceName, question, '');
}, }
_onSecretInfoQuery(client, serviceName, secretQuestion) { _onSecretInfoQuery(client, serviceName, secretQuestion) {
if (!this.serviceIsForeground(serviceName)) if (!this.serviceIsForeground(serviceName))
@ -511,7 +508,7 @@ var ShellUserVerifier = new Lang.Class({
} }
this.emit('ask-question', serviceName, secretQuestion, '\u25cf'); this.emit('ask-question', serviceName, secretQuestion, '\u25cf');
}, }
_onReset() { _onReset() {
// Clear previous attempts to authenticate // Clear previous attempts to authenticate
@ -519,20 +516,20 @@ var ShellUserVerifier = new Lang.Class({
this._updateDefaultService(); this._updateDefaultService();
this.emit('reset'); this.emit('reset');
}, }
_onVerificationComplete() { _onVerificationComplete() {
this.emit('verification-complete'); this.emit('verification-complete');
}, }
_cancelAndReset() { _cancelAndReset() {
this.cancel(); this.cancel();
this._onReset(); this._onReset();
}, }
_retry() { _retry() {
this.begin(this._userName, new Batch.Hold()); this.begin(this._userName, new Batch.Hold());
}, }
_verificationFailed(retry) { _verificationFailed(retry) {
// For Not Listed / enterprise logins, immediately reset // For Not Listed / enterprise logins, immediately reset
@ -567,7 +564,7 @@ var ShellUserVerifier = new Lang.Class({
} }
this.emit('verification-failed', canRetry); this.emit('verification-failed', canRetry);
}, }
_onConversationStopped(client, serviceName) { _onConversationStopped(client, serviceName) {
// If the login failed with the preauthenticated oVirt credentials // If the login failed with the preauthenticated oVirt credentials
@ -586,6 +583,6 @@ var ShellUserVerifier = new Lang.Class({
if (this.serviceIsForeground(serviceName)) { if (this.serviceIsForeground(serviceName)) {
this._verificationFailed(true); this._verificationFailed(true);
} }
}, }
}); };
Signals.addSignalMethods(ShellUserVerifier.prototype); Signals.addSignalMethods(ShellUserVerifier.prototype);

View File

@ -3,7 +3,6 @@
// Common utils for the extension system and the extension // Common utils for the extension system and the extension
// preferences tool // preferences tool
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
@ -160,9 +159,7 @@ function installImporter(extension) {
imports.searchPath = oldSearchPath; imports.searchPath = oldSearchPath;
} }
var ExtensionFinder = new Lang.Class({ var ExtensionFinder = class {
Name: 'ExtensionFinder',
_loadExtension(extensionDir, info, perUserDir) { _loadExtension(extensionDir, info, perUserDir) {
let fileType = info.get_file_type(); let fileType = info.get_file_type();
if (fileType != Gio.FileType.DIRECTORY) if (fileType != Gio.FileType.DIRECTORY)
@ -184,7 +181,7 @@ var ExtensionFinder = new Lang.Class({
return; return;
} }
this.emit('extension-found', extension); this.emit('extension-found', extension);
}, }
scanExtensions() { scanExtensions() {
let perUserDir = Gio.File.new_for_path(global.userdatadir); let perUserDir = Gio.File.new_for_path(global.userdatadir);
@ -192,5 +189,5 @@ var ExtensionFinder = new Lang.Class({
this._loadExtension(dir, info, perUserDir); this._loadExtension(dir, info, perUserDir);
}); });
} }
}); };
Signals.addSignalMethods(ExtensionFinder.prototype); Signals.addSignalMethods(ExtensionFinder.prototype);

View File

@ -1,16 +1,13 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Params = imports.misc.params; const Params = imports.misc.params;
var DEFAULT_LIMIT = 512; var DEFAULT_LIMIT = 512;
var HistoryManager = new Lang.Class({ var HistoryManager = class {
Name: 'HistoryManager', constructor(params) {
_init(params) {
params = Params.parse(params, { gsettingsKey: null, params = Params.parse(params, { gsettingsKey: null,
limit: DEFAULT_LIMIT, limit: DEFAULT_LIMIT,
entry: null }); entry: null });
@ -34,12 +31,12 @@ var HistoryManager = new Lang.Class({
this._entry.connect('key-press-event', this._entry.connect('key-press-event',
this._onEntryKeyPress.bind(this)); this._onEntryKeyPress.bind(this));
} }
}, }
_historyChanged() { _historyChanged() {
this._history = global.settings.get_strv(this._key); this._history = global.settings.get_strv(this._key);
this._historyIndex = this._history.length; this._historyIndex = this._history.length;
}, }
_setPrevItem(text) { _setPrevItem(text) {
if (this._historyIndex <= 0) if (this._historyIndex <= 0)
@ -50,7 +47,7 @@ var HistoryManager = new Lang.Class({
this._historyIndex--; this._historyIndex--;
this._indexChanged(); this._indexChanged();
return true; return true;
}, }
_setNextItem(text) { _setNextItem(text) {
if (this._historyIndex >= this._history.length) if (this._historyIndex >= this._history.length)
@ -61,7 +58,7 @@ var HistoryManager = new Lang.Class({
this._historyIndex++; this._historyIndex++;
this._indexChanged(); this._indexChanged();
return true; return true;
}, }
lastItem() { lastItem() {
if (this._historyIndex != this._history.length) { if (this._historyIndex != this._history.length) {
@ -70,7 +67,7 @@ var HistoryManager = new Lang.Class({
} }
return this._historyIndex ? this._history[this._historyIndex -1] : null; return this._historyIndex ? this._history[this._historyIndex -1] : null;
}, }
addItem(input) { addItem(input) {
if (this._history.length == 0 || if (this._history.length == 0 ||
@ -81,7 +78,7 @@ var HistoryManager = new Lang.Class({
this._save(); this._save();
} }
this._historyIndex = this._history.length; this._historyIndex = this._history.length;
}, }
_onEntryKeyPress(entry, event) { _onEntryKeyPress(entry, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
@ -91,7 +88,7 @@ var HistoryManager = new Lang.Class({
return this._setNextItem(entry.get_text()); return this._setNextItem(entry.get_text());
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_indexChanged() { _indexChanged() {
let current = this._history[this._historyIndex] || ''; let current = this._history[this._historyIndex] || '';
@ -99,7 +96,7 @@ var HistoryManager = new Lang.Class({
if (this._entry) if (this._entry)
this._entry.set_text(current); this._entry.set_text(current);
}, }
_save() { _save() {
if (this._history.length > this._limit) if (this._history.length > this._limit)
@ -108,5 +105,5 @@ var HistoryManager = new Lang.Class({
if (this._key) if (this._key)
global.settings.set_strv(this._key, this._history); global.settings.set_strv(this._key, this._history);
} }
}); };
Signals.addSignalMethods(HistoryManager.prototype); Signals.addSignalMethods(HistoryManager.prototype);

View File

@ -2,7 +2,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
@ -32,17 +31,16 @@ function getIBusManager() {
return _ibusManager; return _ibusManager;
} }
var IBusManager = new Lang.Class({ var IBusManager = class {
Name: 'IBusManager', constructor() {
// 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() {
IBus.init(); 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._candidatePopup = new IBusCandidatePopup.CandidatePopup();
this._panelService = null; this._panelService = null;
@ -60,7 +58,7 @@ var IBusManager = new Lang.Class({
this._ibus.connect('global-engine-changed', this._engineChanged.bind(this)); this._ibus.connect('global-engine-changed', this._engineChanged.bind(this));
this._spawn(); this._spawn();
}, }
_spawn() { _spawn() {
try { try {
@ -69,7 +67,7 @@ var IBusManager = new Lang.Class({
} catch(e) { } catch(e) {
log('Failed to launch ibus-daemon: ' + e.message); log('Failed to launch ibus-daemon: ' + e.message);
} }
}, }
_clear() { _clear() {
if (this._panelService) if (this._panelService)
@ -85,7 +83,7 @@ var IBusManager = new Lang.Class({
this.emit('ready', false); this.emit('ready', false);
this._spawn(); this._spawn();
}, }
_onConnected() { _onConnected() {
this._ibus.list_engines_async(-1, null, this._initEngines.bind(this)); this._ibus.list_engines_async(-1, null, this._initEngines.bind(this));
@ -93,7 +91,7 @@ var IBusManager = new Lang.Class({
IBus.BusNameFlag.REPLACE_EXISTING, IBus.BusNameFlag.REPLACE_EXISTING,
-1, null, -1, null,
this._initPanelService.bind(this)); this._initPanelService.bind(this));
}, }
_initEngines(ibus, result) { _initEngines(ibus, result) {
let enginesList = this._ibus.list_engines_async_finish(result); let enginesList = this._ibus.list_engines_async_finish(result);
@ -106,7 +104,7 @@ var IBusManager = new Lang.Class({
} else { } else {
this._clear(); this._clear();
} }
}, }
_initPanelService(ibus, result) { _initPanelService(ibus, result) {
let success = this._ibus.request_name_async_finish(result); let success = this._ibus.request_name_async_finish(result);
@ -151,13 +149,13 @@ var IBusManager = new Lang.Class({
} else { } else {
this._clear(); this._clear();
} }
}, }
_updateReadiness() { _updateReadiness() {
this._ready = (Object.keys(this._engines).length > 0 && this._ready = (Object.keys(this._engines).length > 0 &&
this._panelService != null); this._panelService != null);
this.emit('ready', this._ready); this.emit('ready', this._ready);
}, }
_engineChanged(bus, engineName) { _engineChanged(bus, engineName) {
if (!this._ready) if (!this._ready)
@ -178,26 +176,26 @@ var IBusManager = new Lang.Class({
this.emit('properties-registered', this._currentEngineName, props); this.emit('properties-registered', this._currentEngineName, props);
}); });
}, }
_updateProperty(panel, prop) { _updateProperty(panel, prop) {
this.emit('property-updated', this._currentEngineName, prop); this.emit('property-updated', this._currentEngineName, prop);
}, }
_setContentType(panel, purpose, hints) { _setContentType(panel, purpose, hints) {
this.emit('set-content-type', purpose, hints); this.emit('set-content-type', purpose, hints);
}, }
activateProperty(key, state) { activateProperty(key, state) {
this._panelService.property_activate(key, state); this._panelService.property_activate(key, state);
}, }
getEngineDesc(id) { getEngineDesc(id) {
if (!this._ready || !this._engines.hasOwnProperty(id)) if (!this._ready || !this._engines.hasOwnProperty(id))
return null; return null;
return this._engines[id]; return this._engines[id];
}, }
setEngine(id, callback) { setEngine(id, callback) {
// Send id even if id == this._currentEngineName // 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, this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
null, callback || null); null, callback || null);
}, }
preloadEngines(ids) { preloadEngines(ids) {
if (!this._ibus || ids.length == 0) if (!this._ibus || ids.length == 0)
@ -233,6 +231,6 @@ var IBusManager = new Lang.Class({
this._preloadEnginesId = 0; this._preloadEnginesId = 0;
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
}, }
}); };
Signals.addSignalMethods(IBusManager.prototype); Signals.addSignalMethods(IBusManager.prototype);

View File

@ -1,6 +1,5 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -12,10 +11,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
const IntrospectDBusIface = loadInterfaceXML('org.gnome.Shell.Introspect'); const IntrospectDBusIface = loadInterfaceXML('org.gnome.Shell.Introspect');
var IntrospectService = new Lang.Class({ var IntrospectService = class {
Name: 'IntrospectService', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(IntrospectDBusIface, this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(IntrospectDBusIface,
this); this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Introspect'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Introspect');
@ -45,21 +42,21 @@ var IntrospectService = new Lang.Class({
}); });
this._syncRunningApplications(); this._syncRunningApplications();
}, }
_isStandaloneApp(app) { _isStandaloneApp(app) {
let windows = app.get_windows(); let windows = app.get_windows();
return app.get_windows().some(w => w.transient_for == null); return app.get_windows().some(w => w.transient_for == null);
}, }
_isIntrospectEnabled() { _isIntrospectEnabled() {
return this._settings.get_boolean(INTROSPECT_KEY); return this._settings.get_boolean(INTROSPECT_KEY);
}, }
_isSenderWhitelisted(sender) { _isSenderWhitelisted(sender) {
return APP_WHITELIST.includes(sender); return APP_WHITELIST.includes(sender);
}, }
_syncRunningApplications() { _syncRunningApplications() {
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
@ -95,7 +92,7 @@ var IntrospectService = new Lang.Class({
} }
this._runningApplicationsDirty = false; this._runningApplicationsDirty = false;
this._activeApplicationDirty = false; this._activeApplicationDirty = false;
}, }
_isEligibleWindow(window) { _isEligibleWindow(window) {
if (window.is_override_redirect()) if (window.is_override_redirect())
@ -106,7 +103,7 @@ var IntrospectService = new Lang.Class({
type == Meta.WindowType.DIALOG || type == Meta.WindowType.DIALOG ||
type == Meta.WindowType.MODAL_DIALOG || type == Meta.WindowType.MODAL_DIALOG ||
type == Meta.WindowType.UTILITY); type == Meta.WindowType.UTILITY);
}, }
GetRunningApplicationsAsync(params, invocation) { GetRunningApplicationsAsync(params, invocation) {
if (!this._isIntrospectEnabled() && if (!this._isIntrospectEnabled() &&
@ -118,7 +115,7 @@ var IntrospectService = new Lang.Class({
} }
invocation.return_value(new GLib.Variant('(a{sa{sv}})', [this._runningApplications])); invocation.return_value(new GLib.Variant('(a{sa{sv}})', [this._runningApplications]));
}, }
GetWindowsAsync(params, invocation) { GetWindowsAsync(params, invocation) {
let focusWindow = global.display.get_focus_window(); 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])); invocation.return_value(new GLib.Variant('(a{ta{sv}})', [windowsList]));
} }
}); };

View File

@ -2,7 +2,6 @@
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop; const GnomeDesktop = imports.gi.GnomeDesktop;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -38,22 +37,20 @@ function holdKeyboard() {
global.display.freeze_keyboard(global.get_current_time()); global.display.freeze_keyboard(global.get_current_time());
} }
var KeyboardManager = new Lang.Class({ var KeyboardManager = class {
Name: 'KeyboardManager', 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._xkbInfo = getXkbInfo();
this._current = null; this._current = null;
this._localeLayoutInfo = this._getLocaleLayout(); this._localeLayoutInfo = this._getLocaleLayout();
this._layoutInfos = {}; this._layoutInfos = {};
this._currentKeymap = null; this._currentKeymap = null;
}, }
_applyLayoutGroup(group) { _applyLayoutGroup(group) {
let options = this._buildOptionsString(); let options = this._buildOptionsString();
@ -67,11 +64,11 @@ var KeyboardManager = new Lang.Class({
this._currentKeymap = {layouts, variants, options}; this._currentKeymap = {layouts, variants, options};
Meta.get_backend().set_keymap(layouts, variants, options); Meta.get_backend().set_keymap(layouts, variants, options);
}, }
_applyLayoutGroupIndex(idx) { _applyLayoutGroupIndex(idx) {
Meta.get_backend().lock_layout_group(idx); Meta.get_backend().lock_layout_group(idx);
}, }
apply(id) { apply(id) {
let info = this._layoutInfos[id]; let info = this._layoutInfos[id];
@ -87,7 +84,7 @@ var KeyboardManager = new Lang.Class({
} }
this._current = info; this._current = info;
}, }
reapply() { reapply() {
if (!this._current) if (!this._current)
@ -95,7 +92,7 @@ var KeyboardManager = new Lang.Class({
this._applyLayoutGroup(this._current.group); this._applyLayoutGroup(this._current.group);
this._applyLayoutGroupIndex(this._current.groupIndex); this._applyLayoutGroupIndex(this._current.groupIndex);
}, }
setUserLayouts(ids) { setUserLayouts(ids) {
this._current = null; this._current = null;
@ -126,7 +123,7 @@ var KeyboardManager = new Lang.Class({
i += 1; i += 1;
} }
}, }
_getLocaleLayout() { _getLocaleLayout() {
let locale = GLib.get_language_names()[0]; let locale = GLib.get_language_names()[0];
@ -143,21 +140,21 @@ var KeyboardManager = new Lang.Class({
return { layout: _layout, variant: _variant }; return { layout: _layout, variant: _variant };
else else
return { layout: DEFAULT_LAYOUT, variant: DEFAULT_VARIANT }; return { layout: DEFAULT_LAYOUT, variant: DEFAULT_VARIANT };
}, }
_buildGroupStrings(_group) { _buildGroupStrings(_group) {
let group = _group.concat(this._localeLayoutInfo); let group = _group.concat(this._localeLayoutInfo);
let layouts = group.map(g => g.layout).join(','); let layouts = group.map(g => g.layout).join(',');
let variants = group.map(g => g.variant).join(','); let variants = group.map(g => g.variant).join(',');
return [layouts, variants]; return [layouts, variants];
}, }
setKeyboardOptions(options) { setKeyboardOptions(options) {
this._xkbOptions = options; this._xkbOptions = options;
}, }
_buildOptionsString() { _buildOptionsString() {
let options = this._xkbOptions.join(','); let options = this._xkbOptions.join(',');
return options; return options;
} }
}); };

View File

@ -2,7 +2,6 @@
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -70,10 +69,8 @@ function getLoginManager() {
return _loginManager; return _loginManager;
} }
var LoginManagerSystemd = new Lang.Class({ var LoginManagerSystemd = class {
Name: 'LoginManagerSystemd', constructor() {
_init() {
this._proxy = new SystemdLoginManager(Gio.DBus.system, this._proxy = new SystemdLoginManager(Gio.DBus.system,
'org.freedesktop.login1', 'org.freedesktop.login1',
'/org/freedesktop/login1'); '/org/freedesktop/login1');
@ -82,7 +79,7 @@ var LoginManagerSystemd = new Lang.Class({
'/org/freedesktop/login1/user/self'); '/org/freedesktop/login1/user/self');
this._proxy.connectSignal('PrepareForSleep', this._proxy.connectSignal('PrepareForSleep',
this._prepareForSleep.bind(this)); this._prepareForSleep.bind(this));
}, }
getCurrentSessionProxy(callback) { getCurrentSessionProxy(callback) {
if (this._currentSession) { if (this._currentSession) {
@ -129,7 +126,7 @@ var LoginManagerSystemd = new Lang.Class({
callback(this._currentSession); callback(this._currentSession);
} }
}); });
}, }
canSuspend(asyncCallback) { canSuspend(asyncCallback) {
this._proxy.CanSuspendRemote((result, error) => { this._proxy.CanSuspendRemote((result, error) => {
@ -141,7 +138,7 @@ var LoginManagerSystemd = new Lang.Class({
asyncCallback(canSuspend, needsAuth); asyncCallback(canSuspend, needsAuth);
} }
}); });
}, }
listSessions(asyncCallback) { listSessions(asyncCallback) {
this._proxy.ListSessionsRemote((result, error) => { this._proxy.ListSessionsRemote((result, error) => {
@ -150,11 +147,11 @@ var LoginManagerSystemd = new Lang.Class({
else else
asyncCallback(result[0]); asyncCallback(result[0]);
}); });
}, }
suspend() { suspend() {
this._proxy.SuspendRemote(true); this._proxy.SuspendRemote(true);
}, }
inhibit(reason, callback) { inhibit(reason, callback) {
let inVariant = GLib.Variant.new('(ssss)', let inVariant = GLib.Variant.new('(ssss)',
@ -174,38 +171,36 @@ var LoginManagerSystemd = new Lang.Class({
callback(null); callback(null);
} }
}); });
}, }
_prepareForSleep(proxy, sender, [aboutToSuspend]) { _prepareForSleep(proxy, sender, [aboutToSuspend]) {
this.emit('prepare-for-sleep', aboutToSuspend); this.emit('prepare-for-sleep', aboutToSuspend);
} }
}); };
Signals.addSignalMethods(LoginManagerSystemd.prototype); Signals.addSignalMethods(LoginManagerSystemd.prototype);
var LoginManagerDummy = new Lang.Class({ var LoginManagerDummy = class {
Name: 'LoginManagerDummy',
getCurrentSessionProxy(callback) { getCurrentSessionProxy(callback) {
// we could return a DummySession object that fakes whatever callers // we could return a DummySession object that fakes whatever callers
// expect (at the time of writing: connect() and connectSignal() // expect (at the time of writing: connect() and connectSignal()
// methods), but just never calling the callback should be safer // methods), but just never calling the callback should be safer
}, }
canSuspend(asyncCallback) { canSuspend(asyncCallback) {
asyncCallback(false, false); asyncCallback(false, false);
}, }
listSessions(asyncCallback) { listSessions(asyncCallback) {
asyncCallback([]); asyncCallback([]);
}, }
suspend() { suspend() {
this.emit('prepare-for-sleep', true); this.emit('prepare-for-sleep', true);
this.emit('prepare-for-sleep', false); this.emit('prepare-for-sleep', false);
}, }
inhibit(reason, callback) { inhibit(reason, callback) {
callback(null); callback(null);
} }
}); };
Signals.addSignalMethods(LoginManagerDummy.prototype); Signals.addSignalMethods(LoginManagerDummy.prototype);

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const NMA = imports.gi.NMA; const NMA = imports.gi.NMA;
const Signals = imports.signals; const Signals = imports.signals;
@ -100,10 +99,8 @@ const ModemGsmNetworkProxy = Gio.DBusProxy.makeProxyWrapper(ModemGsmNetworkInter
const ModemCdmaInterface = loadInterfaceXML('org.freedesktop.ModemManager.Modem.Cdma'); const ModemCdmaInterface = loadInterfaceXML('org.freedesktop.ModemManager.Modem.Cdma');
const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface); const ModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(ModemCdmaInterface);
var ModemGsm = new Lang.Class({ var ModemGsm = class {
Name: 'ModemGsm', constructor(path) {
_init(path) {
this._proxy = new ModemGsmNetworkProxy(Gio.DBus.system, 'org.freedesktop.ModemManager', path); this._proxy = new ModemGsmNetworkProxy(Gio.DBus.system, 'org.freedesktop.ModemManager', path);
this.signal_quality = 0; this.signal_quality = 0;
@ -139,13 +136,11 @@ var ModemGsm = new Lang.Class({
this.emit('notify::signal-quality'); this.emit('notify::signal-quality');
}); });
} }
}); };
Signals.addSignalMethods(ModemGsm.prototype); Signals.addSignalMethods(ModemGsm.prototype);
var ModemCdma = new Lang.Class({ var ModemCdma = class {
Name: 'ModemCdma', constructor(path) {
_init(path) {
this._proxy = new ModemCdmaProxy(Gio.DBus.system, 'org.freedesktop.ModemManager', path); this._proxy = new ModemCdmaProxy(Gio.DBus.system, 'org.freedesktop.ModemManager', path);
this.signal_quality = 0; this.signal_quality = 0;
@ -169,7 +164,7 @@ var ModemCdma = new Lang.Class({
} }
this.emit('notify::signal-quality'); this.emit('notify::signal-quality');
}); });
}, }
_refreshServingSystem() { _refreshServingSystem() {
this._proxy.GetServingSystemRemote(([result], err) => { this._proxy.GetServingSystemRemote(([result], err) => {
@ -184,7 +179,7 @@ var ModemCdma = new Lang.Class({
this.emit('notify::operator-name'); this.emit('notify::operator-name');
}); });
} }
}); };
Signals.addSignalMethods(ModemCdma.prototype); Signals.addSignalMethods(ModemCdma.prototype);
@ -201,10 +196,8 @@ const BroadbandModem3gppProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModem3gp
const BroadbandModemCdmaInterface = loadInterfaceXML('org.freedesktop.ModemManager1.Modem.ModemCdma'); const BroadbandModemCdmaInterface = loadInterfaceXML('org.freedesktop.ModemManager1.Modem.ModemCdma');
const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface); const BroadbandModemCdmaProxy = Gio.DBusProxy.makeProxyWrapper(BroadbandModemCdmaInterface);
var BroadbandModem = new Lang.Class({ var BroadbandModem = class {
Name: 'BroadbandModem', constructor(path, capabilities) {
_init(path, capabilities) {
this._proxy = new BroadbandModemProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path); 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_3gpp = new BroadbandModem3gppProxy(Gio.DBus.system, 'org.freedesktop.ModemManager1', path);
this._proxy_cdma = new BroadbandModemCdmaProxy(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();
}); });
this._reloadCdmaOperatorName(); this._reloadCdmaOperatorName();
}, }
_reloadSignalQuality() { _reloadSignalQuality() {
let [quality, recent] = this._proxy.SignalQuality; let [quality, recent] = this._proxy.SignalQuality;
this.signal_quality = quality; this.signal_quality = quality;
this.emit('notify::signal-quality'); this.emit('notify::signal-quality');
}, }
_reloadOperatorName() { _reloadOperatorName() {
let new_name = ""; let new_name = "";
@ -250,19 +243,19 @@ var BroadbandModem = new Lang.Class({
this.operator_name = new_name; this.operator_name = new_name;
this.emit('notify::operator-name'); this.emit('notify::operator-name');
}, }
_reload3gppOperatorName() { _reload3gppOperatorName() {
let name = this._proxy_3gpp.OperatorName; let name = this._proxy_3gpp.OperatorName;
let code = this._proxy_3gpp.OperatorCode; let code = this._proxy_3gpp.OperatorCode;
this.operator_name_3gpp = _findProviderForMccMnc(name, code); this.operator_name_3gpp = _findProviderForMccMnc(name, code);
this._reloadOperatorName(); this._reloadOperatorName();
}, }
_reloadCdmaOperatorName() { _reloadCdmaOperatorName() {
let sid = this._proxy_cdma.Sid; let sid = this._proxy_cdma.Sid;
this.operator_name_cdma = _findProviderForSid(sid); this.operator_name_cdma = _findProviderForSid(sid);
this._reloadOperatorName(); this._reloadOperatorName();
} }
}); };
Signals.addSignalMethods(BroadbandModem.prototype); Signals.addSignalMethods(BroadbandModem.prototype);

View File

@ -2,7 +2,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Params = imports.misc.params; const Params = imports.misc.params;
const Signals = imports.signals; const Signals = imports.signals;
@ -27,9 +26,8 @@ const ObjectManagerIface = `
const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface); const ObjectManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(ObjectManagerIface);
var ObjectManager = new Lang.Class({ var ObjectManager = class {
Name: 'ObjectManager', constructor(params) {
_init(params) {
params = Params.parse(params, { connection: null, params = Params.parse(params, { connection: null,
name: null, name: null,
objectPath: null, objectPath: null,
@ -63,7 +61,7 @@ var ObjectManager = new Lang.Class({
this._managerProxy.init_async(GLib.PRIORITY_DEFAULT, this._managerProxy.init_async(GLib.PRIORITY_DEFAULT,
this._cancellable, this._cancellable,
this._onManagerProxyLoaded.bind(this)); this._onManagerProxyLoaded.bind(this));
}, }
_tryToCompleteLoad() { _tryToCompleteLoad() {
if (this._numLoadInhibitors == 0) if (this._numLoadInhibitors == 0)
@ -74,7 +72,7 @@ var ObjectManager = new Lang.Class({
if (this._onLoaded) if (this._onLoaded)
this._onLoaded(); this._onLoaded();
} }
}, }
_addInterface(objectPath, interfaceName, onFinished) { _addInterface(objectPath, interfaceName, onFinished) {
let info = this._interfaceInfos[interfaceName]; let info = this._interfaceInfos[interfaceName];
@ -129,7 +127,7 @@ var ObjectManager = new Lang.Class({
if (onFinished) if (onFinished)
onFinished(); onFinished();
}); });
}, }
_removeInterface(objectPath, interfaceName) { _removeInterface(objectPath, interfaceName) {
if (!this._objects[objectPath]) if (!this._objects[objectPath])
@ -155,7 +153,7 @@ var ObjectManager = new Lang.Class({
delete this._objects[objectPath]; delete this._objects[objectPath];
this.emit('object-removed', objectPath); this.emit('object-removed', objectPath);
} }
}, }
_onManagerProxyLoaded(initable, result) { _onManagerProxyLoaded(initable, result) {
let error = null; let error = null;
@ -194,7 +192,7 @@ var ObjectManager = new Lang.Class({
if (this._managerProxy.g_name_owner) if (this._managerProxy.g_name_owner)
this._onNameAppeared(); this._onNameAppeared();
}, }
_onNameAppeared() { _onNameAppeared() {
this._managerProxy.GetManagedObjectsRemote((result, error) => { this._managerProxy.GetManagedObjectsRemote((result, error) => {
@ -232,7 +230,7 @@ var ObjectManager = new Lang.Class({
} }
this._tryToCompleteLoad(); this._tryToCompleteLoad();
}); });
}, }
_onNameVanished() { _onNameVanished() {
let objectPaths = Object.keys(this._objects); let objectPaths = Object.keys(this._objects);
@ -248,14 +246,14 @@ var ObjectManager = new Lang.Class({
this._removeInterface(objectPath, interfaceName); this._removeInterface(objectPath, interfaceName);
} }
} }
}, }
_registerInterfaces(interfaces) { _registerInterfaces(interfaces) {
for (let i = 0; i < interfaces.length; i++) { for (let i = 0; i < interfaces.length; i++) {
let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]); let info = Gio.DBusInterfaceInfo.new_for_xml(interfaces[i]);
this._interfaceInfos[info.name] = info; this._interfaceInfos[info.name] = info;
} }
}, }
getProxy(objectPath, interfaceName) { getProxy(objectPath, interfaceName) {
let object = this._objects[objectPath]; let object = this._objects[objectPath];
@ -264,7 +262,7 @@ var ObjectManager = new Lang.Class({
return null; return null;
return object[interfaceName]; return object[interfaceName];
}, }
getProxiesForInterface(interfaceName) { getProxiesForInterface(interfaceName) {
let proxyList = this._interfaces[interfaceName]; let proxyList = this._interfaces[interfaceName];
@ -273,7 +271,7 @@ var ObjectManager = new Lang.Class({
return []; return [];
return proxyList; return proxyList;
}, }
getAllProxies() { getAllProxies() {
let proxies = []; let proxies = [];
@ -292,5 +290,5 @@ var ObjectManager = new Lang.Class({
return proxies; return proxies;
} }
}); };
Signals.addSignalMethods(ObjectManager.prototype); Signals.addSignalMethods(ObjectManager.prototype);

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -26,9 +25,8 @@ function getSmartcardManager() {
return _smartcardManager; return _smartcardManager;
} }
var SmartcardManager = new Lang.Class({ var SmartcardManager = class {
Name: 'SmartcardManager', constructor() {
_init() {
this._objectManager = new ObjectManager.ObjectManager({ connection: Gio.DBus.session, this._objectManager = new ObjectManager.ObjectManager({ connection: Gio.DBus.session,
name: "org.gnome.SettingsDaemon.Smartcard", name: "org.gnome.SettingsDaemon.Smartcard",
objectPath: '/org/gnome/SettingsDaemon/Smartcard', objectPath: '/org/gnome/SettingsDaemon/Smartcard',
@ -36,7 +34,7 @@ var SmartcardManager = new Lang.Class({
onLoaded: this._onLoaded.bind(this) }); onLoaded: this._onLoaded.bind(this) });
this._insertedTokens = {}; this._insertedTokens = {};
this._loginToken = null; this._loginToken = null;
}, }
_onLoaded() { _onLoaded() {
let tokens = this._objectManager.getProxiesForInterface('org.gnome.SettingsDaemon.Smartcard.Token'); 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') if (interfaceName == 'org.gnome.SettingsDaemon.Smartcard.Token')
this._removeToken(proxy); this._removeToken(proxy);
}); });
}, }
_updateToken(token) { _updateToken(token) {
let objectPath = token.get_object_path(); let objectPath = token.get_object_path();
@ -65,7 +63,7 @@ var SmartcardManager = new Lang.Class({
if (token.UsedToLogin) if (token.UsedToLogin)
this._loginToken = token; this._loginToken = token;
}, }
_addToken(token) { _addToken(token) {
this._updateToken(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 // Emit a smartcard-inserted at startup if it's already plugged in
if (token.IsInserted) if (token.IsInserted)
this.emit('smartcard-inserted', token); this.emit('smartcard-inserted', token);
}, }
_removeToken(token) { _removeToken(token) {
let objectPath = token.get_object_path(); let objectPath = token.get_object_path();
@ -99,11 +97,11 @@ var SmartcardManager = new Lang.Class({
this._loginToken = null; this._loginToken = null;
token.disconnectAll(); token.disconnectAll();
}, }
hasInsertedTokens() { hasInsertedTokens() {
return Object.keys(this._insertedTokens).length > 0; return Object.keys(this._insertedTokens).length > 0;
}, }
hasInsertedLoginToken() { hasInsertedLoginToken() {
if (!this._loginToken) if (!this._loginToken)
@ -115,5 +113,5 @@ var SmartcardManager = new Lang.Class({
return true; return true;
} }
}); };
Signals.addSignalMethods(SmartcardManager.prototype); Signals.addSignalMethods(SmartcardManager.prototype);

View File

@ -437,10 +437,8 @@ function ensureActorVisibleInScrollView(scrollView, actor) {
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
} }
var AppSettingsMonitor = new Lang.Class({ var AppSettingsMonitor = class {
Name: 'AppSettingsMonitor', constructor(appId, schemaId) {
_init(appId, schemaId) {
this._appId = appId; this._appId = appId;
this._schemaId = schemaId; this._schemaId = schemaId;
@ -454,23 +452,23 @@ var AppSettingsMonitor = new Lang.Class({
this._appSystem.connect('installed-changed', this._appSystem.connect('installed-changed',
this._onInstalledChanged.bind(this)); this._onInstalledChanged.bind(this));
this._onInstalledChanged(); this._onInstalledChanged();
}, }
get available() { get available() {
return this._app != null && this._settings != null; return this._app != null && this._settings != null;
}, }
activateApp() { activateApp() {
if (this._app) if (this._app)
this._app.activate(); this._app.activate();
}, }
watchSetting(key, callback) { watchSetting(key, callback) {
let handler = { id: 0, key: key, callback: callback }; let handler = { id: 0, key: key, callback: callback };
this._handlers.push(handler); this._handlers.push(handler);
this._connectHandler(handler); this._connectHandler(handler);
}, }
_connectHandler(handler) { _connectHandler(handler) {
if (!this._settings || handler.id > 0) if (!this._settings || handler.id > 0)
@ -479,13 +477,13 @@ var AppSettingsMonitor = new Lang.Class({
handler.id = this._settings.connect('changed::' + handler.key, handler.id = this._settings.connect('changed::' + handler.key,
handler.callback); handler.callback);
handler.callback(this._settings, handler.key); handler.callback(this._settings, handler.key);
}, }
_disconnectHandler(handler) { _disconnectHandler(handler) {
if (this._settings && handler.id > 0) if (this._settings && handler.id > 0)
this._settings.disconnect(handler.id); this._settings.disconnect(handler.id);
handler.id = 0; handler.id = 0;
}, }
_onInstalledChanged() { _onInstalledChanged() {
let hadApp = (this._app != null); let hadApp = (this._app != null);
@ -499,7 +497,7 @@ var AppSettingsMonitor = new Lang.Class({
this._checkSettings(); this._checkSettings();
else else
this._setSettings(null); this._setSettings(null);
}, }
_setSettings(settings) { _setSettings(settings) {
this._handlers.forEach((handler) => { this._disconnectHandler(handler); }); this._handlers.forEach((handler) => { this._disconnectHandler(handler); });
@ -512,7 +510,7 @@ var AppSettingsMonitor = new Lang.Class({
if (hadSettings != haveSettings) if (hadSettings != haveSettings)
this.emit('available-changed'); this.emit('available-changed');
}, }
_checkSettings() { _checkSettings() {
let schema = this._schemaSource.lookup(this._schemaId, true); let schema = this._schemaSource.lookup(this._schemaId, true);
@ -525,5 +523,5 @@ var AppSettingsMonitor = new Lang.Class({
}); });
} }
} }
}); };
Signals.addSignalMethods(AppSettingsMonitor.prototype); Signals.addSignalMethods(AppSettingsMonitor.prototype);

View File

@ -4,7 +4,6 @@ const Geoclue = imports.gi.Geoclue;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const GWeather = imports.gi.GWeather; const GWeather = imports.gi.GWeather;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const PermissionStore = imports.misc.permissionStore; const PermissionStore = imports.misc.permissionStore;
@ -13,10 +12,8 @@ const Util = imports.misc.util;
// Minimum time between updates to show loading indication // Minimum time between updates to show loading indication
var UPDATE_THRESHOLD = 10 * GLib.TIME_SPAN_MINUTE; var UPDATE_THRESHOLD = 10 * GLib.TIME_SPAN_MINUTE;
var WeatherClient = new Lang.Class({ var WeatherClient = class {
Name: 'WeatherClient', constructor() {
_init() {
this._loading = false; this._loading = false;
this._locationValid = false; this._locationValid = false;
this._lastUpdate = GLib.DateTime.new_from_unix_local(0); this._lastUpdate = GLib.DateTime.new_from_unix_local(0);
@ -71,27 +68,27 @@ var WeatherClient = new Lang.Class({
this._onAutomaticLocationChanged.bind(this)); this._onAutomaticLocationChanged.bind(this));
this._weatherAppMon.watchSetting('locations', this._weatherAppMon.watchSetting('locations',
this._onLocationsChanged.bind(this)); this._onLocationsChanged.bind(this));
}, }
get available() { get available() {
return this._weatherAppMon.available; return this._weatherAppMon.available;
}, }
get loading() { get loading() {
return this._loading; return this._loading;
}, }
get hasLocation() { get hasLocation() {
return this._locationValid; return this._locationValid;
}, }
get info() { get info() {
return this._weatherInfo; return this._weatherInfo;
}, }
activateApp() { activateApp() {
this._weatherAppMon.activateApp(); this._weatherAppMon.activateApp();
}, }
update() { update() {
if (!this._locationValid) if (!this._locationValid)
@ -104,13 +101,13 @@ var WeatherClient = new Lang.Class({
this._weatherInfo.update(); this._weatherInfo.update();
else else
this._loadInfo(); this._loadInfo();
}, }
get _useAutoLocation() { get _useAutoLocation() {
return this._autoLocationRequested && return this._autoLocationRequested &&
this._locationSettings.get_boolean('enabled') && this._locationSettings.get_boolean('enabled') &&
this._weatherAuthorized; this._weatherAuthorized;
}, }
_loadInfo() { _loadInfo() {
let id = this._weatherInfo.connect('updated', () => { let id = this._weatherInfo.connect('updated', () => {
@ -122,7 +119,7 @@ var WeatherClient = new Lang.Class({
this.emit('changed'); this.emit('changed');
this._weatherInfo.update(); this._weatherInfo.update();
}, }
_locationsEqual(loc1, loc2) { _locationsEqual(loc1, loc2) {
if (loc1 == loc2) if (loc1 == loc2)
@ -132,7 +129,7 @@ var WeatherClient = new Lang.Class({
return false; return false;
return loc1.equal(loc2); return loc1.equal(loc2);
}, }
_setLocation(location) { _setLocation(location) {
if (this._locationsEqual(this._weatherInfo.location, location)) if (this._locationsEqual(this._weatherInfo.location, location))
@ -148,7 +145,7 @@ var WeatherClient = new Lang.Class({
this._loadInfo(); this._loadInfo();
else else
this.emit('changed'); this.emit('changed');
}, }
_updateLocationMonitoring() { _updateLocationMonitoring() {
if (this._useAutoLocation) { if (this._useAutoLocation) {
@ -164,7 +161,7 @@ var WeatherClient = new Lang.Class({
this._gclueService.disconnect(this._gclueLocationChangedId); this._gclueService.disconnect(this._gclueLocationChangedId);
this._gclueLocationChangedId = 0; this._gclueLocationChangedId = 0;
} }
}, }
_startGClueService() { _startGClueService() {
if (this._gclueStarting) if (this._gclueStarting)
@ -185,7 +182,7 @@ var WeatherClient = new Lang.Class({
this._gclueService.get_client().distance_threshold = 100; this._gclueService.get_client().distance_threshold = 100;
this._updateLocationMonitoring(); this._updateLocationMonitoring();
}); });
}, }
_onGClueLocationChanged() { _onGClueLocationChanged() {
let geoLocation = this._gclueService.location; let geoLocation = this._gclueService.location;
@ -194,7 +191,7 @@ var WeatherClient = new Lang.Class({
geoLocation.latitude, geoLocation.latitude,
geoLocation.longitude); geoLocation.longitude);
this._setLocation(location); this._setLocation(location);
}, }
_onAutomaticLocationChanged(settings, key) { _onAutomaticLocationChanged(settings, key) {
let useAutoLocation = settings.get_boolean(key); let useAutoLocation = settings.get_boolean(key);
@ -204,7 +201,7 @@ var WeatherClient = new Lang.Class({
this._autoLocationRequested = useAutoLocation; this._autoLocationRequested = useAutoLocation;
this._updateAutoLocation(); this._updateAutoLocation();
}, }
_updateAutoLocation() { _updateAutoLocation() {
this._updateLocationMonitoring(); this._updateLocationMonitoring();
@ -213,7 +210,7 @@ var WeatherClient = new Lang.Class({
this._startGClueService(); this._startGClueService();
else else
this._setLocation(this._mostRecentLocation); this._setLocation(this._mostRecentLocation);
}, }
_onLocationsChanged(settings, key) { _onLocationsChanged(settings, key) {
let serialized = settings.get_value(key).deep_unpack().shift(); let serialized = settings.get_value(key).deep_unpack().shift();
@ -229,7 +226,7 @@ var WeatherClient = new Lang.Class({
if (!this._useAutoLocation || !this._gclueStarted) if (!this._useAutoLocation || !this._gclueStarted)
this._setLocation(this._mostRecentLocation); this._setLocation(this._mostRecentLocation);
}, }
_onPermStoreChanged(proxy, sender, params) { _onPermStoreChanged(proxy, sender, params) {
let [table, id, deleted, data, perms] = params; let [table, id, deleted, data, perms] = params;
@ -243,5 +240,5 @@ var WeatherClient = new Lang.Class({
this._updateAutoLocation(); this._updateAutoLocation();
} }
}); };
Signals.addSignalMethods(WeatherClient.prototype); Signals.addSignalMethods(WeatherClient.prototype);

View File

@ -1,7 +1,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
@ -21,12 +20,9 @@ var DialogResponse = {
CLOSED: 2 CLOSED: 2
}; };
var AccessDialog = new Lang.Class({ var AccessDialog = class extends ModalDialog.ModalDialog {
Name: 'AccessDialog', constructor(invocation, handle, title, subtitle, body, options) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'access-dialog' });
_init(invocation, handle, title, subtitle, body, options) {
this.parent({ styleClass: 'access-dialog' });
this._invocation = invocation; this._invocation = invocation;
this._handle = handle; this._handle = handle;
@ -38,7 +34,7 @@ var AccessDialog = new Lang.Class({
options[option] = options[option].deep_unpack(); options[option] = options[option].deep_unpack();
this._buildLayout(title, subtitle, body, options); this._buildLayout(title, subtitle, body, options);
}, }
_buildLayout(title, subtitle, body, options) { _buildLayout(title, subtitle, body, options) {
// No support for non-modal system dialogs, so ignore the option // No support for non-modal system dialogs, so ignore the option
@ -78,14 +74,14 @@ var AccessDialog = new Lang.Class({
action: () => { action: () => {
this._sendResponse(DialogResponse.OK); this._sendResponse(DialogResponse.OK);
}}); }});
}, }
open() { open() {
this.parent(); super.open();
let connection = this._invocation.get_connection(); let connection = this._invocation.get_connection();
this._requestExported = this._request.export(connection, this._handle); this._requestExported = this._request.export(connection, this._handle);
}, }
CloseAsync(invocation, params) { CloseAsync(invocation, params) {
if (this._invocation.get_sender() != invocation.get_sender()) { if (this._invocation.get_sender() != invocation.get_sender()) {
@ -96,7 +92,7 @@ var AccessDialog = new Lang.Class({
} }
this._sendResponse(DialogResponse.CLOSED); this._sendResponse(DialogResponse.CLOSED);
}, }
_sendResponse(response) { _sendResponse(response) {
if (this._requestExported) if (this._requestExported)
@ -118,12 +114,10 @@ var AccessDialog = new Lang.Class({
}); });
this.close(); this.close();
} }
}); };
var AccessDialogDBus = new Lang.Class({ var AccessDialogDBus = class {
Name: 'AccessDialogDBus', constructor() {
_init() {
this._accessDialog = null; this._accessDialog = null;
this._windowTracker = Shell.WindowTracker.get_default(); 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'); 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); Gio.DBus.session.own_name('org.freedesktop.impl.portal.desktop.gnome', Gio.BusNameOwnerFlags.REPLACE, null, null);
}, }
AccessDialogAsync(params, invocation) { AccessDialogAsync(params, invocation) {
if (this._accessDialog) { if (this._accessDialog) {
@ -160,4 +154,4 @@ var AccessDialogDBus = new Lang.Class({
this._accessDialog = dialog; this._accessDialog = dialog;
} }
}); };

View File

@ -411,10 +411,8 @@ var AppSwitcherPopup = new Lang.Class({
} }
}); });
var CyclerHighlight = new Lang.Class({ class CyclerHighlight {
Name: 'CyclerHighlight', constructor() {
_init() {
this._window = null; this._window = null;
this.actor = new St.Widget({ layout_manager: new Clutter.BinLayout() }); 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.actor.connect('notify::allocation',
this._onAllocationChanged.bind(this)); this._onAllocationChanged.bind(this));
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
}, }
set window(w) { set window(w) {
if (this._window == w) if (this._window == w)
@ -452,7 +450,7 @@ var CyclerHighlight = new Lang.Class({
windowActor.hide(); windowActor.hide();
this._clone.source = windowActor; this._clone.source = windowActor;
}, }
_onAllocationChanged() { _onAllocationChanged() {
if (!this._window) { if (!this._window) {
@ -465,12 +463,12 @@ var CyclerHighlight = new Lang.Class({
this._highlight.set_position(rect.x - x, rect.y - y); this._highlight.set_position(rect.x - x, rect.y - y);
this._highlight.show(); this._highlight.show();
} }
}, }
_onDestroy() { _onDestroy() {
this.window = null; this.window = null;
} }
}); };
// We don't show an actual popup, so just provide what SwitcherPopup // We don't show an actual popup, so just provide what SwitcherPopup
// expects instead of inheriting from SwitcherList // expects instead of inheriting from SwitcherList

View File

@ -2,7 +2,6 @@
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const St = imports.gi.St; const St = imports.gi.St;
const Signals = imports.signals; const Signals = imports.signals;
@ -14,10 +13,8 @@ var ANIMATED_ICON_UPDATE_TIMEOUT = 16;
var SPINNER_ANIMATION_TIME = 0.3; var SPINNER_ANIMATION_TIME = 0.3;
var SPINNER_ANIMATION_DELAY = 1.0; var SPINNER_ANIMATION_DELAY = 1.0;
var Animation = new Lang.Class({ var Animation = class {
Name: 'Animation', constructor(file, width, height, speed) {
_init(file, width, height, speed) {
this.actor = new St.Bin(); this.actor = new St.Bin();
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
this._speed = speed; 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._animations = St.TextureCache.get_default().load_sliced_image (file, width, height, scaleFactor,
this._animationsLoaded.bind(this)); this._animationsLoaded.bind(this));
this.actor.set_child(this._animations); this.actor.set_child(this._animations);
}, }
play() { play() {
if (this._isLoaded && this._timeoutId == 0) { if (this._isLoaded && this._timeoutId == 0) {
@ -43,7 +40,7 @@ var Animation = new Lang.Class({
} }
this._isPlaying = true; this._isPlaying = true;
}, }
stop() { stop() {
if (this._timeoutId > 0) { if (this._timeoutId > 0) {
@ -52,7 +49,7 @@ var Animation = new Lang.Class({
} }
this._isPlaying = false; this._isPlaying = false;
}, }
_showFrame(frame) { _showFrame(frame) {
let oldFrameActor = this._animations.get_child_at_index(this._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); let newFrameActor = this._animations.get_child_at_index(this._frame);
if (newFrameActor) if (newFrameActor)
newFrameActor.show(); newFrameActor.show();
}, }
_update() { _update() {
this._showFrame(this._frame + 1); this._showFrame(this._frame + 1);
return GLib.SOURCE_CONTINUE; return GLib.SOURCE_CONTINUE;
}, }
_animationsLoaded() { _animationsLoaded() {
this._isLoaded = this._animations.get_n_children() > 0; this._isLoaded = this._animations.get_n_children() > 0;
if (this._isPlaying) if (this._isPlaying)
this.play(); this.play();
}, }
_onDestroy() { _onDestroy() {
this.stop(); this.stop();
} }
}); };
var AnimatedIcon = new Lang.Class({ var AnimatedIcon = class extends Animation {
Name: 'AnimatedIcon', constructor(file, size) {
Extends: Animation, super(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
_init(file, size) {
this.parent(file, size, size, ANIMATED_ICON_UPDATE_TIMEOUT);
} }
}); };
var Spinner = new Lang.Class({ var Spinner = class extends AnimatedIcon {
Name: 'Spinner', constructor(size, animate=false) {
Extends: AnimatedIcon,
_init(size, animate=false) {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg'); 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.actor.opacity = 0;
this._animate = animate; this._animate = animate;
}, }
_onDestroy() { _onDestroy() {
this._animate = false; this._animate = false;
this.parent(); super._onDestroy();
}, }
play() { play() {
Tweener.removeTweens(this.actor); Tweener.removeTweens(this.actor);
if (this._animate) { if (this._animate) {
this.parent(); super.play();
Tweener.addTween(this.actor, { Tweener.addTween(this.actor, {
opacity: 255, opacity: 255,
delay: SPINNER_ANIMATION_DELAY, delay: SPINNER_ANIMATION_DELAY,
@ -122,9 +113,9 @@ var Spinner = new Lang.Class({
}); });
} else { } else {
this.actor.opacity = 255; this.actor.opacity = 255;
this.parent(); super.play();
} }
}, }
stop() { stop() {
Tweener.removeTweens(this.actor); Tweener.removeTweens(this.actor);
@ -140,7 +131,7 @@ var Spinner = new Lang.Class({
}); });
} else { } else {
this.actor.opacity = 0; this.actor.opacity = 0;
this.parent(); super.stop();
} }
} }
}); };

View File

@ -108,11 +108,11 @@ function clamp(value, min, max) {
return Math.max(min, Math.min(max, value)); return Math.max(min, Math.min(max, value));
} }
var BaseAppView = new Lang.Class({ class BaseAppView {
Name: 'BaseAppView', constructor(params, gridParams) {
Abstract: true, 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, gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE,
columnLimit: MAX_COLUMNS, columnLimit: MAX_COLUMNS,
minRows: MIN_ROWS, minRows: MIN_ROWS,
@ -134,26 +134,26 @@ var BaseAppView = new Lang.Class({
this._items = {}; this._items = {};
this._allItems = []; this._allItems = [];
}, }
_childFocused(actor) { _childFocused(actor) {
// Nothing by default // Nothing by default
}, }
removeAll() { removeAll() {
this._grid.destroyAll(); this._grid.destroyAll();
this._items = {}; this._items = {};
this._allItems = []; this._allItems = [];
}, }
_redisplay() { _redisplay() {
this.removeAll(); this.removeAll();
this._loadApps(); this._loadApps();
}, }
getAllItems() { getAllItems() {
return this._allItems; return this._allItems;
}, }
addItem(icon) { addItem(icon) {
let id = icon.id; let id = icon.id;
@ -162,24 +162,24 @@ var BaseAppView = new Lang.Class({
this._allItems.push(icon); this._allItems.push(icon);
this._items[id] = icon; this._items[id] = icon;
}, }
_compareItems(a, b) { _compareItems(a, b) {
return a.name.localeCompare(b.name); return a.name.localeCompare(b.name);
}, }
loadGrid() { loadGrid() {
this._allItems.sort(this._compareItems); this._allItems.sort(this._compareItems);
this._allItems.forEach(item => { this._grid.addItem(item); }); this._allItems.forEach(item => { this._grid.addItem(item); });
this.emit('view-loaded'); this.emit('view-loaded');
}, }
_selectAppInternal(id) { _selectAppInternal(id) {
if (this._items[id]) if (this._items[id])
this._items[id].actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); this._items[id].actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
else else
log('No such application ' + id); log('No such application ' + id);
}, }
selectApp(id) { selectApp(id) {
if (this._items[id] && this._items[id].actor.mapped) { if (this._items[id] && this._items[id].actor.mapped) {
@ -200,13 +200,13 @@ var BaseAppView = new Lang.Class({
this.selectApp(id); this.selectApp(id);
}); });
} }
}, }
_doSpringAnimation(animationDirection) { _doSpringAnimation(animationDirection) {
this._grid.opacity = 255; this._grid.opacity = 255;
this._grid.animateSpring(animationDirection, this._grid.animateSpring(animationDirection,
Main.overview.getShowAppsButton()); Main.overview.getShowAppsButton());
}, }
animate(animationDirection, onComplete) { animate(animationDirection, onComplete) {
if (onComplete) { if (onComplete) {
@ -224,7 +224,7 @@ var BaseAppView = new Lang.Class({
} else { } else {
this._doSpringAnimation(animationDirection); this._doSpringAnimation(animationDirection);
} }
}, }
animateSwitch(animationDirection) { animateSwitch(animationDirection) {
Tweener.removeTweens(this.actor); Tweener.removeTweens(this.actor);
@ -244,7 +244,7 @@ var BaseAppView = new Lang.Class({
Tweener.addTween(this._grid, params); Tweener.addTween(this._grid, params);
} }
}); };
Signals.addSignalMethods(BaseAppView.prototype); Signals.addSignalMethods(BaseAppView.prototype);
var PageIndicatorsActor = new Lang.Class({ var PageIndicatorsActor = new Lang.Class({
@ -271,10 +271,8 @@ var PageIndicatorsActor = new Lang.Class({
} }
}); });
var PageIndicators = new Lang.Class({ class PageIndicators {
Name:'PageIndicators', constructor() {
_init() {
this.actor = new PageIndicatorsActor(); this.actor = new PageIndicatorsActor();
this._nPages = 0; this._nPages = 0;
this._currentPage = undefined; this._currentPage = undefined;
@ -282,7 +280,7 @@ var PageIndicators = new Lang.Class({
this.actor.connect('notify::mapped', () => { this.actor.connect('notify::mapped', () => {
this.animateIndicators(IconGrid.AnimationDirection.IN); this.animateIndicators(IconGrid.AnimationDirection.IN);
}); });
}, }
setNPages(nPages) { setNPages(nPages) {
if (this._nPages == nPages) if (this._nPages == nPages)
@ -311,7 +309,7 @@ var PageIndicators = new Lang.Class({
} }
this._nPages = nPages; this._nPages = nPages;
this.actor.visible = (this._nPages > 1); this.actor.visible = (this._nPages > 1);
}, }
setCurrentPage(currentPage) { setCurrentPage(currentPage) {
this._currentPage = currentPage; this._currentPage = currentPage;
@ -319,7 +317,7 @@ var PageIndicators = new Lang.Class({
let children = this.actor.get_children(); let children = this.actor.get_children();
for (let i = 0; i < children.length; i++) for (let i = 0; i < children.length; i++)
children[i].set_checked(i == this._currentPage); children[i].set_checked(i == this._currentPage);
}, }
animateIndicators(animationDirection) { animateIndicators(animationDirection) {
if (!this.actor.mapped) if (!this.actor.mapped)
@ -358,15 +356,12 @@ var PageIndicators = new Lang.Class({
}); });
} }
} }
}); };
Signals.addSignalMethods(PageIndicators.prototype); Signals.addSignalMethods(PageIndicators.prototype);
var AllView = new Lang.Class({ var AllView = class AllView extends BaseAppView {
Name: 'AllView', constructor() {
Extends: BaseAppView, super({ usePagination: true }, null);
_init() {
this.parent({ usePagination: true }, null);
this._scrollView = new St.ScrollView({ style_class: 'all-apps', this._scrollView = new St.ScrollView({ style_class: 'all-apps',
x_expand: true, x_expand: true,
y_expand: true, y_expand: true,
@ -462,12 +457,12 @@ var AllView = new Lang.Class({
this._folderSettings.connect('changed::folder-children', () => { this._folderSettings.connect('changed::folder-children', () => {
Main.queueDeferredWork(this._redisplayWorkId); Main.queueDeferredWork(this._redisplayWorkId);
}); });
}, }
removeAll() { removeAll() {
this.folderIcons = []; this.folderIcons = [];
this.parent(); super.removeAll();
}, }
_itemNameChanged(item) { _itemNameChanged(item) {
// If an item's name changed, we can pluck it out of where it's // 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.removeItem(item);
this._grid.addItem(item, newIdx); this._grid.addItem(item, newIdx);
}, }
_refilterApps() { _refilterApps() {
this._allItems.forEach(icon => { this._allItems.forEach(icon => {
@ -493,7 +488,7 @@ var AllView = new Lang.Class({
appIcon.actor.visible = false; appIcon.actor.visible = false;
}); });
}); });
}, }
_loadApps() { _loadApps() {
let apps = Gio.AppInfo.get_all().filter(appInfo => { let apps = Gio.AppInfo.get_all().filter(appInfo => {
@ -535,7 +530,7 @@ var AllView = new Lang.Class({
this.loadGrid(); this.loadGrid();
this._refilterApps(); this._refilterApps();
}, }
// Overriden from BaseAppView // Overriden from BaseAppView
animate(animationDirection, onComplete) { animate(animationDirection, onComplete) {
@ -551,21 +546,17 @@ var AllView = new Lang.Class({
this._currentPopup.popdown(); this._currentPopup.popdown();
let spaceClosedId = this._grid.connect('space-closed', () => { let spaceClosedId = this._grid.connect('space-closed', () => {
this._grid.disconnect(spaceClosedId); this._grid.disconnect(spaceClosedId);
// Given that we can't call this.parent() inside the super.animate(animationDirection, completionFunc);
// signal handler, call again animate which will
// call the parent given that popup is already
// closed.
this.animate(animationDirection, completionFunc);
}); });
} else { } else {
this.parent(animationDirection, completionFunc); super.animate(animationDirection, completionFunc);
if (animationDirection == IconGrid.AnimationDirection.OUT) if (animationDirection == IconGrid.AnimationDirection.OUT)
this._pageIndicators.animateIndicators(animationDirection); this._pageIndicators.animateIndicators(animationDirection);
} }
}, }
animateSwitch(animationDirection) { animateSwitch(animationDirection) {
this.parent(animationDirection); super.animateSwitch(animationDirection);
if (this._currentPopup && this._displayingPopup && if (this._currentPopup && this._displayingPopup &&
animationDirection == IconGrid.AnimationDirection.OUT) animationDirection == IconGrid.AnimationDirection.OUT)
@ -579,11 +570,11 @@ var AllView = new Lang.Class({
if (animationDirection == IconGrid.AnimationDirection.OUT) if (animationDirection == IconGrid.AnimationDirection.OUT)
this._pageIndicators.animateIndicators(animationDirection); this._pageIndicators.animateIndicators(animationDirection);
}, }
getCurrentPageY() { getCurrentPageY() {
return this._grid.getPageY(this._grid.currentPage); return this._grid.getPageY(this._grid.currentPage);
}, }
goToPage(pageNumber) { goToPage(pageNumber) {
pageNumber = clamp(pageNumber, 0, this._grid.nPages() - 1); pageNumber = clamp(pageNumber, 0, this._grid.nPages() - 1);
@ -625,18 +616,18 @@ var AllView = new Lang.Class({
time: time, time: time,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
this._pageIndicators.setCurrentPage(pageNumber); this._pageIndicators.setCurrentPage(pageNumber);
}, }
_diffToPage(pageNumber) { _diffToPage(pageNumber) {
let currentScrollPosition = this._adjustment.value; let currentScrollPosition = this._adjustment.value;
return Math.abs(currentScrollPosition - this._grid.getPageY(pageNumber)); return Math.abs(currentScrollPosition - this._grid.getPageY(pageNumber));
}, }
openSpaceForPopup(item, side, nRows) { openSpaceForPopup(item, side, nRows) {
this._updateIconOpacities(true); this._updateIconOpacities(true);
this._displayingPopup = true; this._displayingPopup = true;
this._grid.openExtraSpace(item, side, nRows); this._grid.openExtraSpace(item, side, nRows);
}, }
_closeSpaceForPopup() { _closeSpaceForPopup() {
this._updateIconOpacities(false); this._updateIconOpacities(false);
@ -646,7 +637,7 @@ var AllView = new Lang.Class({
fadeEffect.enabled = true; fadeEffect.enabled = true;
this._grid.closeExtraSpace(); this._grid.closeExtraSpace();
}, }
_onScroll(actor, event) { _onScroll(actor, event) {
if (this._displayingPopup || !this._scrollView.reactive) if (this._displayingPopup || !this._scrollView.reactive)
@ -659,7 +650,7 @@ var AllView = new Lang.Class({
this.goToPage(this._grid.currentPage + 1); this.goToPage(this._grid.currentPage + 1);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onPan(action) { _onPan(action) {
if (this._displayingPopup) if (this._displayingPopup)
@ -670,7 +661,7 @@ var AllView = new Lang.Class({
let adjustment = this._adjustment; let adjustment = this._adjustment;
adjustment.value -= (dy / this._scrollView.height) * adjustment.page_size; adjustment.value -= (dy / this._scrollView.height) * adjustment.page_size;
return false; return false;
}, }
_onPanEnd(action) { _onPanEnd(action) {
if (this._displayingPopup) if (this._displayingPopup)
@ -689,7 +680,7 @@ var AllView = new Lang.Class({
this.goToPage(closestPage); this.goToPage(closestPage);
this._panning = false; this._panning = false;
}, }
_onKeyPressEvent(actor, event) { _onKeyPressEvent(actor, event) {
if (this._displayingPopup) if (this._displayingPopup)
@ -704,7 +695,7 @@ var AllView = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
addFolderPopup(popup) { addFolderPopup(popup) {
this._stack.add_actor(popup.actor); this._stack.add_actor(popup.actor);
@ -715,12 +706,12 @@ var AllView = new Lang.Class({
if(!isOpen) if(!isOpen)
this._closeSpaceForPopup(); this._closeSpaceForPopup();
}); });
}, }
_childFocused(icon) { _childFocused(icon) {
let itemPage = this._grid.getItemPage(icon); let itemPage = this._grid.getItemPage(icon);
this.goToPage(itemPage); this.goToPage(itemPage);
}, }
_updateIconOpacities(folderOpen) { _updateIconOpacities(folderOpen) {
for (let id in this._items) { for (let id in this._items) {
@ -734,7 +725,7 @@ var AllView = new Lang.Class({
transition: 'easeOutQuad' }; transition: 'easeOutQuad' };
Tweener.addTween(this._items[id].actor, params); Tweener.addTween(this._items[id].actor, params);
} }
}, }
// Called before allocation to calculate dynamic spacing // Called before allocation to calculate dynamic spacing
adaptToSize(width, height) { adaptToSize(width, height) {
@ -773,15 +764,12 @@ var AllView = new Lang.Class({
for (let i = 0; i < this.folderIcons.length; i++) for (let i = 0; i < this.folderIcons.length; i++)
this.folderIcons[i].adaptToSize(availWidth, availHeight); this.folderIcons[i].adaptToSize(availWidth, availHeight);
} }
}); };
Signals.addSignalMethods(AllView.prototype); Signals.addSignalMethods(AllView.prototype);
var FrequentView = new Lang.Class({ var FrequentView = class FrequentView extends BaseAppView {
Name: 'FrequentView', constructor() {
Extends: BaseAppView, super(null, { fillParent: true });
_init() {
this.parent(null, { fillParent: true });
this.actor = new St.Widget({ style_class: 'frequent-apps', this.actor = new St.Widget({ style_class: 'frequent-apps',
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
@ -806,11 +794,11 @@ var FrequentView = new Lang.Class({
if (this.actor.mapped) if (this.actor.mapped)
this._redisplay(); this._redisplay();
}); });
}, }
hasUsefulData() { hasUsefulData() {
return this._usage.get_most_used().length >= MIN_FREQUENT_APPS_COUNT; return this._usage.get_most_used().length >= MIN_FREQUENT_APPS_COUNT;
}, }
_loadApps() { _loadApps() {
let mostUsed = this._usage.get_most_used(); let mostUsed = this._usage.get_most_used();
@ -834,7 +822,7 @@ var FrequentView = new Lang.Class({
{ isDraggable: favoritesWritable }); { isDraggable: favoritesWritable });
this._grid.addItem(appIcon, -1); this._grid.addItem(appIcon, -1);
} }
}, }
// Called before allocation to calculate dynamic spacing // Called before allocation to calculate dynamic spacing
adaptToSize(width, height) { adaptToSize(width, height) {
@ -848,7 +836,7 @@ var FrequentView = new Lang.Class({
let availHeight = box.y2 - box.y1; let availHeight = box.y2 - box.y1;
this._grid.adaptToSize(availWidth, availHeight); this._grid.adaptToSize(availWidth, availHeight);
} }
}); };
var Views = { var Views = {
FREQUENT: 0, FREQUENT: 0,
@ -896,10 +884,8 @@ var ViewStackLayout = new Lang.Class({
} }
}); });
var AppDisplay = new Lang.Class({ var AppDisplay = class AppDisplay {
Name: 'AppDisplay', constructor() {
_init() {
this._privacySettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.privacy' }); this._privacySettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.privacy' });
this._privacySettings.connect('changed::remember-app-usage', this._privacySettings.connect('changed::remember-app-usage',
this._updateFrequentVisibility.bind(this)); this._updateFrequentVisibility.bind(this));
@ -972,14 +958,14 @@ var AppDisplay = new Lang.Class({
this._switcherooProxy = null; this._switcherooProxy = null;
this._updateDiscreteGpuAvailable(); this._updateDiscreteGpuAvailable();
}); });
}, }
_updateDiscreteGpuAvailable() { _updateDiscreteGpuAvailable() {
if (!this._switcherooProxy) if (!this._switcherooProxy)
discreteGpuAvailable = false; discreteGpuAvailable = false;
else else
discreteGpuAvailable = this._switcherooProxy.HasDualGpu; discreteGpuAvailable = this._switcherooProxy.HasDualGpu;
}, }
_switcherooProxyAppeared() { _switcherooProxyAppeared() {
this._switcherooProxy = new SwitcherooProxy(Gio.DBus.system, SWITCHEROO_BUS_NAME, SWITCHEROO_OBJECT_PATH, this._switcherooProxy = new SwitcherooProxy(Gio.DBus.system, SWITCHEROO_BUS_NAME, SWITCHEROO_OBJECT_PATH,
@ -990,7 +976,7 @@ var AppDisplay = new Lang.Class({
} }
this._updateDiscreteGpuAvailable(); this._updateDiscreteGpuAvailable();
}); });
}, }
animate(animationDirection, onComplete) { animate(animationDirection, onComplete) {
let currentView = this._views.filter(v => v.control.has_style_pseudo_class('checked')).pop().view; 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); currentView.animate(animationDirection, onComplete);
}, }
_showView(activeIndex) { _showView(activeIndex) {
for (let i = 0; i < this._views.length; i++) { for (let i = 0; i < this._views.length; i++) {
@ -1026,7 +1012,7 @@ var AppDisplay = new Lang.Class({
IconGrid.AnimationDirection.OUT; IconGrid.AnimationDirection.OUT;
this._views[i].view.animateSwitch(animationDirection); this._views[i].view.animateSwitch(animationDirection);
} }
}, }
_updateFrequentVisibility() { _updateFrequentVisibility() {
let enabled = this._privacySettings.get_boolean('remember-app-usage'); 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) if (!enabled && this._views[Views.FREQUENT].view.actor.visible)
this._showView(Views.ALL); this._showView(Views.ALL);
}, }
selectApp(id) { selectApp(id) {
this._showView(Views.ALL); this._showView(Views.ALL);
this._views[Views.ALL].view.selectApp(id); this._views[Views.ALL].view.selectApp(id);
}, }
_onAllocatedSizeChanged(actor, width, height) { _onAllocatedSizeChanged(actor, width, height) {
let box = new Clutter.ActorBox(); let box = new Clutter.ActorBox();
@ -1055,19 +1041,17 @@ var AppDisplay = new Lang.Class({
for (let i = 0; i < this._views.length; i++) for (let i = 0; i < this._views.length; i++)
this._views[i].view.adaptToSize(availWidth, availHeight); this._views[i].view.adaptToSize(availWidth, availHeight);
} }
}) };
var AppSearchProvider = new Lang.Class({ var AppSearchProvider = class AppSearchProvider {
Name: 'AppSearchProvider', constructor() {
_init() {
this._appSys = Shell.AppSystem.get_default(); this._appSys = Shell.AppSystem.get_default();
this.id = 'applications'; this.id = 'applications';
this.isRemoteProvider = false; this.isRemoteProvider = false;
this.canLaunchSearch = false; this.canLaunchSearch = false;
this._systemActions = new SystemActions.getDefault(); this._systemActions = new SystemActions.getDefault();
}, }
getResultMetas(apps, callback) { getResultMetas(apps, callback) {
let metas = []; let metas = [];
@ -1095,11 +1079,11 @@ var AppSearchProvider = new Lang.Class({
} }
callback(metas); callback(metas);
}, }
filterResults(results, maxNumber) { filterResults(results, maxNumber) {
return results.slice(0, maxNumber); return results.slice(0, maxNumber);
}, }
getInitialResultSet(terms, callback, cancellable) { getInitialResultSet(terms, callback, cancellable) {
let query = terms.join(' '); let query = terms.join(' ');
@ -1119,11 +1103,11 @@ var AppSearchProvider = new Lang.Class({
results = results.concat(this._systemActions.getMatchingActions(terms)); results = results.concat(this._systemActions.getMatchingActions(terms));
callback(results); callback(results);
}, }
getSubsearchResultSet(previousResults, terms, callback, cancellable) { getSubsearchResultSet(previousResults, terms, callback, cancellable) {
this.getInitialResultSet(terms, callback, cancellable); this.getInitialResultSet(terms, callback, cancellable);
}, }
createResultObject(resultMeta) { createResultObject(resultMeta) {
if (resultMeta.id.endsWith('.desktop')) if (resultMeta.id.endsWith('.desktop'))
@ -1131,14 +1115,11 @@ var AppSearchProvider = new Lang.Class({
else else
return new SystemActionIcon(this, resultMeta); return new SystemActionIcon(this, resultMeta);
} }
}); };
var FolderView = new Lang.Class({ var FolderView = class FolderView extends BaseAppView {
Name: 'FolderView', constructor() {
Extends: BaseAppView, super(null, null);
_init() {
this.parent(null, null);
// If it not expand, the parent doesn't take into account its preferred_width when allocating // 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" // the second time it allocates, so we apply the "Standard hack for ClutterBinLayout"
this._grid.x_expand = true; this._grid.x_expand = true;
@ -1152,16 +1133,16 @@ var FolderView = new Lang.Class({
let action = new Clutter.PanAction({ interpolate: true }); let action = new Clutter.PanAction({ interpolate: true });
action.connect('pan', this._onPan.bind(this)); action.connect('pan', this._onPan.bind(this));
this.actor.add_action(action); this.actor.add_action(action);
}, }
_childFocused(actor) { _childFocused(actor) {
Util.ensureActorVisibleInScrollView(this.actor, actor); Util.ensureActorVisibleInScrollView(this.actor, actor);
}, }
// Overriden from BaseAppView // Overriden from BaseAppView
animate(animationDirection) { animate(animationDirection) {
this._grid.animatePulse(animationDirection); this._grid.animatePulse(animationDirection);
}, }
createFolderIcon(size) { createFolderIcon(size) {
let layout = new Clutter.GridLayout(); let layout = new Clutter.GridLayout();
@ -1181,14 +1162,14 @@ var FolderView = new Lang.Class({
} }
return icon; return icon;
}, }
_onPan(action) { _onPan(action) {
let [dist, dx, dy] = action.get_motion_delta(0); let [dist, dx, dy] = action.get_motion_delta(0);
let adjustment = this.actor.vscroll.adjustment; let adjustment = this.actor.vscroll.adjustment;
adjustment.value -= (dy / this.actor.height) * adjustment.page_size; adjustment.value -= (dy / this.actor.height) * adjustment.page_size;
return false; return false;
}, }
adaptToSize(width, height) { adaptToSize(width, height) {
this._parentAvailableWidth = width; this._parentAvailableWidth = width;
@ -1212,7 +1193,7 @@ var FolderView = new Lang.Class({
this.actor.set_width(this.usedWidth()); this.actor.set_width(this.usedWidth());
this.actor.set_height(this.usedHeight()); this.actor.set_height(this.usedHeight());
}, }
_getPageAvailableSize() { _getPageAvailableSize() {
let pageBox = new Clutter.ActorBox(); let pageBox = new Clutter.ActorBox();
@ -1224,32 +1205,30 @@ var FolderView = new Lang.Class({
// We only can show icons inside the collection view boxPointer // We only can show icons inside the collection view boxPointer
// so we have to substract the required padding etc of the 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]; return [(contentBox.x2 - contentBox.x1) - 2 * this._offsetForEachSide, (contentBox.y2 - contentBox.y1) - 2 * this._offsetForEachSide];
}, }
usedWidth() { usedWidth() {
let [availWidthPerPage, availHeightPerPage] = this._getPageAvailableSize(); let [availWidthPerPage, availHeightPerPage] = this._getPageAvailableSize();
return this._grid.usedWidth(availWidthPerPage); return this._grid.usedWidth(availWidthPerPage);
}, }
usedHeight() { usedHeight() {
return this._grid.usedHeightForNRows(this.nRowsDisplayedAtOnce()); return this._grid.usedHeightForNRows(this.nRowsDisplayedAtOnce());
}, }
nRowsDisplayedAtOnce() { nRowsDisplayedAtOnce() {
let [availWidthPerPage, availHeightPerPage] = this._getPageAvailableSize(); let [availWidthPerPage, availHeightPerPage] = this._getPageAvailableSize();
let maxRows = this._grid.rowsForHeight(availHeightPerPage) - 1; let maxRows = this._grid.rowsForHeight(availHeightPerPage) - 1;
return Math.min(this._grid.nRows(availWidthPerPage), maxRows); return Math.min(this._grid.nRows(availWidthPerPage), maxRows);
}, }
setPaddingOffsets(offset) { setPaddingOffsets(offset) {
this._offsetForEachSide = offset; this._offsetForEachSide = offset;
} }
}); };
var FolderIcon = new Lang.Class({ var FolderIcon = class FolderIcon {
Name: 'FolderIcon', constructor(id, path, parentView) {
_init(id, path, parentView) {
this.id = id; this.id = id;
this.name = ''; this.name = '';
this._parentView = parentView; this._parentView = parentView;
@ -1284,11 +1263,11 @@ var FolderIcon = new Lang.Class({
this._folder.connect('changed', this._redisplay.bind(this)); this._folder.connect('changed', this._redisplay.bind(this));
this._redisplay(); this._redisplay();
}, }
getAppIds() { getAppIds() {
return this.view.getAllItems().map(item => item.id); return this.view.getAllItems().map(item => item.id);
}, }
_updateName() { _updateName() {
let name = _getFolderName(this._folder); let name = _getFolderName(this._folder);
@ -1298,7 +1277,7 @@ var FolderIcon = new Lang.Class({
this.name = name; this.name = name;
this.icon.label.text = this.name; this.icon.label.text = this.name;
this.emit('name-changed'); this.emit('name-changed');
}, }
_redisplay() { _redisplay() {
this._updateName(); this._updateName();
@ -1340,16 +1319,16 @@ var FolderIcon = new Lang.Class({
this.actor.visible = this.view.getAllItems().length > 0; this.actor.visible = this.view.getAllItems().length > 0;
this.view.loadGrid(); this.view.loadGrid();
this.emit('apps-changed'); this.emit('apps-changed');
}, }
_createIcon(iconSize) { _createIcon(iconSize) {
return this.view.createFolderIcon(iconSize, this); return this.view.createFolderIcon(iconSize, this);
}, }
_popupHeight() { _popupHeight() {
let usedHeight = this.view.usedHeight() + this._popup.getOffset(St.Side.TOP) + this._popup.getOffset(St.Side.BOTTOM); let usedHeight = this.view.usedHeight() + this._popup.getOffset(St.Side.TOP) + this._popup.getOffset(St.Side.BOTTOM);
return usedHeight; return usedHeight;
}, }
_openSpaceForPopup() { _openSpaceForPopup() {
let id = this._parentView.connect('space-ready', () => { let id = this._parentView.connect('space-ready', () => {
@ -1358,14 +1337,14 @@ var FolderIcon = new Lang.Class({
this._updatePopupPosition(); this._updatePopupPosition();
}); });
this._parentView.openSpaceForPopup(this, this._boxPointerArrowside, this.view.nRowsDisplayedAtOnce()); this._parentView.openSpaceForPopup(this, this._boxPointerArrowside, this.view.nRowsDisplayedAtOnce());
}, }
_calculateBoxPointerArrowSide() { _calculateBoxPointerArrowSide() {
let spaceTop = this.actor.y - this._parentView.getCurrentPageY(); let spaceTop = this.actor.y - this._parentView.getCurrentPageY();
let spaceBottom = this._parentView.actor.height - (spaceTop + this.actor.height); let spaceBottom = this._parentView.actor.height - (spaceTop + this.actor.height);
return spaceTop > spaceBottom ? St.Side.BOTTOM : St.Side.TOP; return spaceTop > spaceBottom ? St.Side.BOTTOM : St.Side.TOP;
}, }
_updatePopupSize() { _updatePopupSize() {
// StWidget delays style calculation until needed, make sure we use the correct values // 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 // Add extra padding to prevent boxpointer decorations and close button being cut off
this.view.setPaddingOffsets(offsetForEachSide); this.view.setPaddingOffsets(offsetForEachSide);
this.view.adaptToSize(this._parentAvailableWidth, this._parentAvailableHeight); this.view.adaptToSize(this._parentAvailableWidth, this._parentAvailableHeight);
}, }
_updatePopupPosition() { _updatePopupPosition() {
if (!this._popup) 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(); this._popup.actor.y = this.actor.allocation.y1 + this.actor.translation_y - this._popupHeight();
else else
this._popup.actor.y = this.actor.allocation.y1 + this.actor.translation_y + this.actor.height; this._popup.actor.y = this.actor.allocation.y1 + this.actor.translation_y + this.actor.height;
}, }
_ensurePopup() { _ensurePopup() {
if (this._popup && !this._popupInvalidated) if (this._popup && !this._popupInvalidated)
@ -1406,7 +1385,7 @@ var FolderIcon = new Lang.Class({
this._updatePopupSize(); this._updatePopupSize();
this._updatePopupPosition(); this._updatePopupPosition();
this._popupInvalidated = false; this._popupInvalidated = false;
}, }
adaptToSize(width, height) { adaptToSize(width, height) {
this._parentAvailableWidth = width; this._parentAvailableWidth = width;
@ -1414,14 +1393,12 @@ var FolderIcon = new Lang.Class({
if(this._popup) if(this._popup)
this.view.adaptToSize(width, height); this.view.adaptToSize(width, height);
this._popupInvalidated = true; this._popupInvalidated = true;
}, }
}); };
Signals.addSignalMethods(FolderIcon.prototype); Signals.addSignalMethods(FolderIcon.prototype);
var AppFolderPopup = new Lang.Class({ var AppFolderPopup = class AppFolderPopup {
Name: 'AppFolderPopup', constructor(source, side) {
_init(source, side) {
this._source = source; this._source = source;
this._view = source.view; this._view = source.view;
this._arrowSide = side; this._arrowSide = side;
@ -1467,7 +1444,7 @@ var AppFolderPopup = new Lang.Class({
}); });
this._grabHelper.addActor(Main.layoutManager.overviewGroup); this._grabHelper.addActor(Main.layoutManager.overviewGroup);
this.actor.connect('key-press-event', this._onKeyPress.bind(this)); this.actor.connect('key-press-event', this._onKeyPress.bind(this));
}, }
_onKeyPress(actor, event) { _onKeyPress(actor, event) {
if (global.stage.get_key_focus() != actor) if (global.stage.get_key_focus() != actor)
@ -1511,14 +1488,14 @@ var AppFolderPopup = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
return actor.navigate_focus(null, direction, false); return actor.navigate_focus(null, direction, false);
}, }
toggle() { toggle() {
if (this._isOpen) if (this._isOpen)
this.popdown(); this.popdown();
else else
this.popup(); this.popup();
}, }
popup() { popup() {
if (this._isOpen) if (this._isOpen)
@ -1545,7 +1522,7 @@ var AppFolderPopup = new Lang.Class({
}); });
this.emit('open-state-changed', true); this.emit('open-state-changed', true);
}, }
popdown() { popdown() {
if (!this._isOpen) if (!this._isOpen)
@ -1557,30 +1534,28 @@ var AppFolderPopup = new Lang.Class({
BoxPointer.PopupAnimation.SLIDE); BoxPointer.PopupAnimation.SLIDE);
this._isOpen = false; this._isOpen = false;
this.emit('open-state-changed', false); this.emit('open-state-changed', false);
}, }
getCloseButtonOverlap() { getCloseButtonOverlap() {
return this.closeButton.get_theme_node().get_length('-shell-close-overlap-y'); return this.closeButton.get_theme_node().get_length('-shell-close-overlap-y');
}, }
getOffset(side) { getOffset(side) {
let offset = this._boxPointer.getPadding(side); let offset = this._boxPointer.getPadding(side);
if (this._arrowSide == side) if (this._arrowSide == side)
offset += this._boxPointer.getArrowHeight(); offset += this._boxPointer.getArrowHeight();
return offset; return offset;
}, }
updateArrowSide(side) { updateArrowSide(side) {
this._arrowSide = side; this._arrowSide = side;
this._boxPointer.updateArrowSide(side); this._boxPointer.updateArrowSide(side);
} }
}); };
Signals.addSignalMethods(AppFolderPopup.prototype); Signals.addSignalMethods(AppFolderPopup.prototype);
var AppIcon = new Lang.Class({ var AppIcon = class AppIcon {
Name: 'AppIcon', constructor(app, iconParams) {
_init(app, iconParams) {
this.app = app; this.app = app;
this.id = app.get_id(); this.id = app.get_id();
this.name = app.get_name(); this.name = app.get_name();
@ -1651,32 +1626,32 @@ var AppIcon = new Lang.Class({
this._updateRunningStyle(); this._updateRunningStyle();
}); });
this._updateRunningStyle(); this._updateRunningStyle();
}, }
_onDestroy() { _onDestroy() {
if (this._stateChangedId > 0) if (this._stateChangedId > 0)
this.app.disconnect(this._stateChangedId); this.app.disconnect(this._stateChangedId);
this._stateChangedId = 0; this._stateChangedId = 0;
this._removeMenuTimeout(); this._removeMenuTimeout();
}, }
_createIcon(iconSize) { _createIcon(iconSize) {
return this.app.create_icon_texture(iconSize); return this.app.create_icon_texture(iconSize);
}, }
_removeMenuTimeout() { _removeMenuTimeout() {
if (this._menuTimeoutId > 0) { if (this._menuTimeoutId > 0) {
Mainloop.source_remove(this._menuTimeoutId); Mainloop.source_remove(this._menuTimeoutId);
this._menuTimeoutId = 0; this._menuTimeoutId = 0;
} }
}, }
_updateRunningStyle() { _updateRunningStyle() {
if (this.app.state != Shell.AppState.STOPPED) if (this.app.state != Shell.AppState.STOPPED)
this._dot.show(); this._dot.show();
else else
this._dot.hide(); this._dot.hide();
}, }
_setPopupTimeout() { _setPopupTimeout() {
this._removeMenuTimeout(); this._removeMenuTimeout();
@ -1686,12 +1661,12 @@ var AppIcon = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu'); GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu');
}, }
_onLeaveEvent(actor, event) { _onLeaveEvent(actor, event) {
this.actor.fake_release(); this.actor.fake_release();
this._removeMenuTimeout(); this._removeMenuTimeout();
}, }
_onButtonPress(actor, event) { _onButtonPress(actor, event) {
let button = event.get_button(); let button = event.get_button();
@ -1702,28 +1677,28 @@ var AppIcon = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onTouchEvent(actor, event) { _onTouchEvent(actor, event) {
if (event.type() == Clutter.EventType.TOUCH_BEGIN) if (event.type() == Clutter.EventType.TOUCH_BEGIN)
this._setPopupTimeout(); this._setPopupTimeout();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onClicked(actor, button) { _onClicked(actor, button) {
this._removeMenuTimeout(); this._removeMenuTimeout();
this.activate(button); this.activate(button);
}, }
_onKeyboardPopupMenu() { _onKeyboardPopupMenu() {
this.popupMenu(); this.popupMenu();
this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); this._menu.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}, }
getId() { getId() {
return this.app.get_id(); return this.app.get_id();
}, }
popupMenu() { popupMenu() {
this._removeMenuTimeout(); this._removeMenuTimeout();
@ -1759,7 +1734,7 @@ var AppIcon = new Lang.Class({
this.emit('sync-tooltip'); this.emit('sync-tooltip');
return false; return false;
}, }
activateWindow(metaWindow) { activateWindow(metaWindow) {
if (metaWindow) { if (metaWindow) {
@ -1767,12 +1742,12 @@ var AppIcon = new Lang.Class({
} else { } else {
Main.overview.hide(); Main.overview.hide();
} }
}, }
_onMenuPoppedDown() { _onMenuPoppedDown() {
this.actor.sync_hover(); this.actor.sync_hover();
this.emit('menu-state-changed', false); this.emit('menu-state-changed', false);
}, }
activate(button) { activate(button) {
let event = Clutter.get_current_event(); let event = Clutter.get_current_event();
@ -1792,45 +1767,42 @@ var AppIcon = new Lang.Class({
this.app.activate(); this.app.activate();
Main.overview.hide(); Main.overview.hide();
}, }
animateLaunch() { animateLaunch() {
this.icon.animateZoomOut(); this.icon.animateZoomOut();
}, }
shellWorkspaceLaunch(params) { shellWorkspaceLaunch(params) {
params = Params.parse(params, { workspace: -1, params = Params.parse(params, { workspace: -1,
timestamp: 0 }); timestamp: 0 });
this.app.open_new_window(params.workspace); this.app.open_new_window(params.workspace);
}, }
getDragActor() { getDragActor() {
return this.app.create_icon_texture(Main.overview.dashIconSize); return this.app.create_icon_texture(Main.overview.dashIconSize);
}, }
// Returns the original actor that should align with the actor // Returns the original actor that should align with the actor
// we show as the item is being dragged. // we show as the item is being dragged.
getDragActorSource() { getDragActorSource() {
return this.icon.icon; return this.icon.icon;
}, }
shouldShowTooltip() { shouldShowTooltip() {
return this.actor.hover && (!this._menu || !this._menu.isOpen); return this.actor.hover && (!this._menu || !this._menu.isOpen);
}, }
}); };
Signals.addSignalMethods(AppIcon.prototype); Signals.addSignalMethods(AppIcon.prototype);
var AppIconMenu = new Lang.Class({ var AppIconMenu = class AppIconMenu extends PopupMenu.PopupMenu {
Name: 'AppIconMenu', constructor(source) {
Extends: PopupMenu.PopupMenu,
_init(source) {
let side = St.Side.LEFT; let side = St.Side.LEFT;
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
side = St.Side.RIGHT; 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 // We want to keep the item hovered while the menu is up
this.blockSourceEvents = true; this.blockSourceEvents = true;
@ -1850,7 +1822,7 @@ var AppIconMenu = new Lang.Class({
}); });
Main.uiGroup.add_actor(this.actor); Main.uiGroup.add_actor(this.actor);
}, }
_redisplay() { _redisplay() {
this.removeAll(); this.removeAll();
@ -1960,33 +1932,30 @@ var AppIconMenu = new Lang.Class({
}); });
} }
} }
}, }
_appendSeparator() { _appendSeparator() {
let separator = new PopupMenu.PopupSeparatorMenuItem(); let separator = new PopupMenu.PopupSeparatorMenuItem();
this.addMenuItem(separator); this.addMenuItem(separator);
}, }
_appendMenuItem(labelText) { _appendMenuItem(labelText) {
// FIXME: app-well-menu-item style // FIXME: app-well-menu-item style
let item = new PopupMenu.PopupMenuItem(labelText); let item = new PopupMenu.PopupMenuItem(labelText);
this.addMenuItem(item); this.addMenuItem(item);
return item; return item;
}, }
popup(activatingButton) { popup(activatingButton) {
this._redisplay(); this._redisplay();
this.open(); this.open();
} }
}); };
Signals.addSignalMethods(AppIconMenu.prototype); Signals.addSignalMethods(AppIconMenu.prototype);
var SystemActionIcon = new Lang.Class({ var SystemActionIcon = class SystemActionIcon extends Search.GridSearchResult {
Name: 'SystemActionIcon',
Extends: Search.GridSearchResult,
activate() { activate() {
SystemActions.getDefault().activateAction(this.metaInfo['id']); SystemActions.getDefault().activateAction(this.metaInfo['id']);
Main.overview.hide(); Main.overview.hide();
} }
}); };

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -49,21 +48,18 @@ const RENAMED_DESKTOP_IDS = {
'evince.desktop': 'org.gnome.Evince.desktop', 'evince.desktop': 'org.gnome.Evince.desktop',
}; };
var AppFavorites = new Lang.Class({ class AppFavorites {
Name: 'AppFavorites', constructor() {
this.FAVORITE_APPS_KEY = 'favorite-apps';
FAVORITE_APPS_KEY: 'favorite-apps',
_init() {
this._favorites = {}; this._favorites = {};
global.settings.connect('changed::' + this.FAVORITE_APPS_KEY, this._onFavsChanged.bind(this)); global.settings.connect('changed::' + this.FAVORITE_APPS_KEY, this._onFavsChanged.bind(this));
this.reload(); this.reload();
}, }
_onFavsChanged() { _onFavsChanged() {
this.reload(); this.reload();
this.emit('changed'); this.emit('changed');
}, }
reload() { reload() {
let ids = global.settings.get_strv(this.FAVORITE_APPS_KEY); let ids = global.settings.get_strv(this.FAVORITE_APPS_KEY);
@ -91,29 +87,29 @@ var AppFavorites = new Lang.Class({
let app = apps[i]; let app = apps[i];
this._favorites[app.get_id()] = app; this._favorites[app.get_id()] = app;
} }
}, }
_getIds() { _getIds() {
let ret = []; let ret = [];
for (let id in this._favorites) for (let id in this._favorites)
ret.push(id); ret.push(id);
return ret; return ret;
}, }
getFavoriteMap() { getFavoriteMap() {
return this._favorites; return this._favorites;
}, }
getFavorites() { getFavorites() {
let ret = []; let ret = [];
for (let id in this._favorites) for (let id in this._favorites)
ret.push(this._favorites[id]); ret.push(this._favorites[id]);
return ret; return ret;
}, }
isFavorite(appId) { isFavorite(appId) {
return appId in this._favorites; return appId in this._favorites;
}, }
_addFavorite(appId, pos) { _addFavorite(appId, pos) {
if (appId in this._favorites) if (appId in this._favorites)
@ -131,7 +127,7 @@ var AppFavorites = new Lang.Class({
ids.splice(pos, 0, appId); ids.splice(pos, 0, appId);
global.settings.set_strv(this.FAVORITE_APPS_KEY, ids); global.settings.set_strv(this.FAVORITE_APPS_KEY, ids);
return true; return true;
}, }
addFavoriteAtPos(appId, pos) { addFavoriteAtPos(appId, pos) {
if (!this._addFavorite(appId, pos)) if (!this._addFavorite(appId, pos))
@ -145,16 +141,16 @@ var AppFavorites = new Lang.Class({
this._removeFavorite(appId); this._removeFavorite(appId);
} }
}); });
}, }
addFavorite(appId) { addFavorite(appId) {
this.addFavoriteAtPos(appId, -1); this.addFavoriteAtPos(appId, -1);
}, }
moveFavoriteToPos(appId, pos) { moveFavoriteToPos(appId, pos) {
this._removeFavorite(appId); this._removeFavorite(appId);
this._addFavorite(appId, pos); this._addFavorite(appId, pos);
}, }
_removeFavorite(appId) { _removeFavorite(appId) {
if (!appId in this._favorites) if (!appId in this._favorites)
@ -163,7 +159,7 @@ var AppFavorites = new Lang.Class({
let ids = this._getIds().filter(id => id != appId); let ids = this._getIds().filter(id => id != appId);
global.settings.set_strv(this.FAVORITE_APPS_KEY, ids); global.settings.set_strv(this.FAVORITE_APPS_KEY, ids);
return true; return true;
}, }
removeFavorite(appId) { removeFavorite(appId) {
let ids = this._getIds(); let ids = this._getIds();
@ -180,7 +176,7 @@ var AppFavorites = new Lang.Class({
} }
}); });
} }
}); };
Signals.addSignalMethods(AppFavorites.prototype); Signals.addSignalMethods(AppFavorites.prototype);
var appFavoritesInstance = null; var appFavoritesInstance = null;

View File

@ -1,7 +1,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
@ -19,12 +18,10 @@ var AudioDevice = {
const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection'); const AudioDeviceSelectionIface = loadInterfaceXML('org.gnome.Shell.AudioDeviceSelection');
var AudioDeviceSelectionDialog = new Lang.Class({ var AudioDeviceSelectionDialog =
Name: 'AudioDeviceSelectionDialog', class AudioDeviceSelectionDialog extends ModalDialog.ModalDialog {
Extends: ModalDialog.ModalDialog, constructor(devices) {
super({ styleClass: 'audio-device-selection-dialog' });
_init(devices) {
this.parent({ styleClass: 'audio-device-selection-dialog' });
this._deviceItems = {}; this._deviceItems = {};
@ -39,11 +36,11 @@ var AudioDeviceSelectionDialog = new Lang.Class({
if (this._selectionBox.get_n_children() < 2) if (this._selectionBox.get_n_children() < 2)
throw new Error('Too few devices for a selection'); throw new Error('Too few devices for a selection');
}, }
destroy() { destroy() {
this.parent(); super.destroy();
}, }
_buildLayout(devices) { _buildLayout(devices) {
let title = new St.Label({ style_class: 'audio-selection-title', 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), this.addButton({ action: this.close.bind(this),
label: _("Cancel"), label: _("Cancel"),
key: Clutter.Escape }); key: Clutter.Escape });
}, }
_getDeviceLabel(device) { _getDeviceLabel(device) {
switch(device) { switch(device) {
@ -75,7 +72,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({
default: default:
return null; return null;
} }
}, }
_getDeviceIcon(device) { _getDeviceIcon(device) {
switch(device) { switch(device) {
@ -88,7 +85,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({
default: default:
return null; return null;
} }
}, }
_addDevice(device) { _addDevice(device) {
let box = new St.BoxLayout({ style_class: 'audio-selection-device-box', let box = new St.BoxLayout({ style_class: 'audio-selection-device-box',
@ -118,7 +115,7 @@ var AudioDeviceSelectionDialog = new Lang.Class({
this.close(); this.close();
Main.overview.hide(); Main.overview.hide();
}); });
}, }
_openSettings() { _openSettings() {
let desktopFile = 'gnome-sound-panel.desktop' let desktopFile = 'gnome-sound-panel.desktop'
@ -133,23 +130,21 @@ var AudioDeviceSelectionDialog = new Lang.Class({
Main.overview.hide(); Main.overview.hide();
app.activate(); app.activate();
} }
}); };
var AudioDeviceSelectionDBus = new Lang.Class({ var AudioDeviceSelectionDBus = class AudioDeviceSelectionDBus {
Name: 'AudioDeviceSelectionDBus', constructor() {
_init() {
this._audioSelectionDialog = null; this._audioSelectionDialog = null;
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(AudioDeviceSelectionIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(AudioDeviceSelectionIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/AudioDeviceSelection'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/AudioDeviceSelection');
Gio.DBus.session.own_name('org.gnome.Shell.AudioDeviceSelection', Gio.BusNameOwnerFlags.REPLACE, null, null); Gio.DBus.session.own_name('org.gnome.Shell.AudioDeviceSelection', Gio.BusNameOwnerFlags.REPLACE, null, null);
}, }
_onDialogClosed() { _onDialogClosed() {
this._audioSelectionDialog = null; this._audioSelectionDialog = null;
}, }
_onDeviceSelected(dialog, device) { _onDeviceSelected(dialog, device) {
let connection = this._dbusImpl.get_connection(); let connection = this._dbusImpl.get_connection();
@ -162,7 +157,7 @@ var AudioDeviceSelectionDBus = new Lang.Class({
info ? info.name : null, info ? info.name : null,
'DeviceSelected', 'DeviceSelected',
GLib.Variant.new('(s)', [deviceName])); GLib.Variant.new('(s)', [deviceName]));
}, }
OpenAsync(params, invocation) { OpenAsync(params, invocation) {
if (this._audioSelectionDialog) { if (this._audioSelectionDialog) {
@ -190,7 +185,7 @@ var AudioDeviceSelectionDBus = new Lang.Class({
this._audioSelectionDialog = dialog; this._audioSelectionDialog = dialog;
invocation.return_value(null); invocation.return_value(null);
}, }
CloseAsync(params, invocation) { CloseAsync(params, invocation) {
if (this._audioSelectionDialog && if (this._audioSelectionDialog &&
@ -199,4 +194,4 @@ var AudioDeviceSelectionDBus = new Lang.Class({
invocation.return_value(null); invocation.return_value(null);
} }
}); };

View File

@ -98,7 +98,6 @@ const GDesktopEnums = imports.gi.GDesktopEnums;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop; const GnomeDesktop = imports.gi.GnomeDesktop;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Signals = imports.signals; const Signals = imports.signals;
@ -138,14 +137,12 @@ function _fileEqual0(file1, file2) {
return file1.equal(file2); return file1.equal(file2);
} }
var BackgroundCache = new Lang.Class({ var BackgroundCache = class BackgroundCache {
Name: 'BackgroundCache', constructor() {
_init() {
this._fileMonitors = {}; this._fileMonitors = {};
this._backgroundSources = {}; this._backgroundSources = {};
this._animations = {}; this._animations = {};
}, }
monitorFile(file) { monitorFile(file) {
let key = file.hash(); let key = file.hash();
@ -163,7 +160,7 @@ var BackgroundCache = new Lang.Class({
}); });
this._fileMonitors[key] = monitor; this._fileMonitors[key] = monitor;
}, }
getAnimation(params) { getAnimation(params) {
params = Params.parse(params, { file: null, 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'); GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
} }
}); });
}, }
getBackgroundSource(layoutManager, settingsSchema) { getBackgroundSource(layoutManager, settingsSchema) {
// The layoutManager is always the same one; we pass in it since // 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]; return this._backgroundSources[settingsSchema];
}, }
releaseBackgroundSource(settingsSchema) { releaseBackgroundSource(settingsSchema) {
if (settingsSchema in this._backgroundSources) { if (settingsSchema in this._backgroundSources) {
@ -221,7 +218,7 @@ var BackgroundCache = new Lang.Class({
} }
} }
} }
}); };
Signals.addSignalMethods(BackgroundCache.prototype); Signals.addSignalMethods(BackgroundCache.prototype);
function getBackgroundCache() { function getBackgroundCache() {
@ -230,10 +227,8 @@ function getBackgroundCache() {
return _backgroundCache; return _backgroundCache;
} }
var Background = new Lang.Class({ var Background = class Background {
Name: 'Background', constructor(params) {
_init(params) {
params = Params.parse(params, { monitorIndex: 0, params = Params.parse(params, { monitorIndex: 0,
layoutManager: Main.layoutManager, layoutManager: Main.layoutManager,
settings: null, settings: null,
@ -272,7 +267,7 @@ var Background = new Lang.Class({
}); });
this._load(); this._load();
}, }
destroy() { destroy() {
this._cancellable.cancel(); this._cancellable.cancel();
@ -298,12 +293,12 @@ var Background = new Lang.Class({
if (this._settingsChangedSignalId != 0) if (this._settingsChangedSignalId != 0)
this._settings.disconnect(this._settingsChangedSignalId); this._settings.disconnect(this._settingsChangedSignalId);
this._settingsChangedSignalId = 0; this._settingsChangedSignalId = 0;
}, }
updateResolution() { updateResolution() {
if (this._animation) if (this._animation)
this._refreshAnimation(); this._refreshAnimation();
}, }
_refreshAnimation() { _refreshAnimation() {
if (!this._animation) if (!this._animation)
@ -311,7 +306,7 @@ var Background = new Lang.Class({
this._removeAnimationTimeout(); this._removeAnimationTimeout();
this._updateAnimation(); this._updateAnimation();
}, }
_setLoaded() { _setLoaded() {
if (this.isLoaded) if (this.isLoaded)
@ -324,7 +319,7 @@ var Background = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(id, '[gnome-shell] this.emit'); GLib.Source.set_name_by_id(id, '[gnome-shell] this.emit');
}, }
_loadPattern() { _loadPattern() {
let colorString, res, color, secondColor; let colorString, res, color, secondColor;
@ -340,7 +335,7 @@ var Background = new Lang.Class({
this.background.set_color(color); this.background.set_color(color);
else else
this.background.set_gradient(shadingType, color, secondColor); this.background.set_gradient(shadingType, color, secondColor);
}, }
_watchFile(file) { _watchFile(file) {
let key = file.hash(); let key = file.hash();
@ -357,14 +352,14 @@ var Background = new Lang.Class({
} }
}); });
this._fileWatches[key] = signalId; this._fileWatches[key] = signalId;
}, }
_removeAnimationTimeout() { _removeAnimationTimeout() {
if (this._updateAnimationTimeoutId) { if (this._updateAnimationTimeoutId) {
GLib.source_remove(this._updateAnimationTimeoutId); GLib.source_remove(this._updateAnimationTimeoutId);
this._updateAnimationTimeoutId = 0; this._updateAnimationTimeoutId = 0;
} }
}, }
_updateAnimation() { _updateAnimation() {
this._updateAnimationTimeoutId = 0; this._updateAnimationTimeoutId = 0;
@ -404,7 +399,7 @@ var Background = new Lang.Class({
}); });
} }
} }
}, }
_queueUpdateAnimation() { _queueUpdateAnimation() {
if (this._updateAnimationTimeoutId != 0) if (this._updateAnimationTimeoutId != 0)
@ -433,7 +428,7 @@ var Background = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation'); GLib.Source.set_name_by_id(this._updateAnimationTimeoutId, '[gnome-shell] this._updateAnimation');
}, }
_loadAnimation(file) { _loadAnimation(file) {
this._cache.getAnimation({ file: file, this._cache.getAnimation({ file: file,
@ -450,7 +445,7 @@ var Background = new Lang.Class({
this._watchFile(file); this._watchFile(file);
} }
}); });
}, }
_loadImage(file) { _loadImage(file) {
this.background.set_file(file, this._style); this.background.set_file(file, this._style);
@ -466,14 +461,14 @@ var Background = new Lang.Class({
image.disconnect(id); image.disconnect(id);
}); });
} }
}, }
_loadFile(file) { _loadFile(file) {
if (file.get_basename().endsWith('.xml')) if (file.get_basename().endsWith('.xml'))
this._loadAnimation(file); this._loadAnimation(file);
else else
this._loadImage(file); this._loadImage(file);
}, }
_load() { _load() {
this._cache = getBackgroundCache(); this._cache = getBackgroundCache();
@ -486,16 +481,14 @@ var Background = new Lang.Class({
} }
this._loadFile(this._file); this._loadFile(this._file);
}, }
}); };
Signals.addSignalMethods(Background.prototype); Signals.addSignalMethods(Background.prototype);
let _systemBackground; let _systemBackground;
var SystemBackground = new Lang.Class({ var SystemBackground = class SystemBackground {
Name: 'SystemBackground', constructor() {
_init() {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png'); let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/noise-texture.png');
if (_systemBackground == null) { if (_systemBackground == null) {
@ -524,14 +517,12 @@ var SystemBackground = new Lang.Class({
image = null; image = null;
}); });
} }
}, }
}); };
Signals.addSignalMethods(SystemBackground.prototype); Signals.addSignalMethods(SystemBackground.prototype);
var BackgroundSource = new Lang.Class({ var BackgroundSource = class BackgroundSource {
Name: 'BackgroundSource', constructor(layoutManager, settingsSchema) {
_init(layoutManager, settingsSchema) {
// Allow override the background image setting for performance testing // Allow override the background image setting for performance testing
this._layoutManager = layoutManager; this._layoutManager = layoutManager;
this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE'); this._overrideImage = GLib.getenv('SHELL_BACKGROUND_IMAGE');
@ -542,7 +533,7 @@ var BackgroundSource = new Lang.Class({
this._monitorsChangedId = this._monitorsChangedId =
monitorManager.connect('monitors-changed', monitorManager.connect('monitors-changed',
this._onMonitorsChanged.bind(this)); this._onMonitorsChanged.bind(this));
}, }
_onMonitorsChanged() { _onMonitorsChanged() {
for (let monitorIndex in this._backgrounds) { for (let monitorIndex in this._backgrounds) {
@ -556,7 +547,7 @@ var BackgroundSource = new Lang.Class({
delete this._backgrounds[monitorIndex]; delete this._backgrounds[monitorIndex];
} }
} }
}, }
getBackground(monitorIndex) { getBackground(monitorIndex) {
let file = null; let file = null;
@ -603,7 +594,7 @@ var BackgroundSource = new Lang.Class({
} }
return this._backgrounds[monitorIndex]; return this._backgrounds[monitorIndex];
}, }
destroy() { destroy() {
let monitorManager = Meta.MonitorManager.get(); let monitorManager = Meta.MonitorManager.get();
@ -617,12 +608,10 @@ var BackgroundSource = new Lang.Class({
this._backgrounds = null; this._backgrounds = null;
} }
}); };
var Animation = new Lang.Class({ var Animation = class Animation {
Name: 'Animation', constructor(params) {
_init(params) {
params = Params.parse(params, { file: null }); params = Params.parse(params, { file: null });
this.file = params.file; this.file = params.file;
@ -630,7 +619,7 @@ var Animation = new Lang.Class({
this.transitionProgress = 0.0; this.transitionProgress = 0.0;
this.transitionDuration = 0.0; this.transitionDuration = 0.0;
this.loaded = false; this.loaded = false;
}, }
load(callback) { load(callback) {
this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() }); this._show = new GnomeDesktop.BGSlideShow({ filename: this.file.get_path() });
@ -640,7 +629,7 @@ var Animation = new Lang.Class({
if (callback) if (callback)
callback(); callback();
}); });
}, }
update(monitor) { update(monitor) {
this.keyFrameFiles = []; this.keyFrameFiles = [];
@ -661,14 +650,12 @@ var Animation = new Lang.Class({
if (filename2) if (filename2)
this.keyFrameFiles.push(Gio.File.new_for_path(filename2)); this.keyFrameFiles.push(Gio.File.new_for_path(filename2));
}, }
}); };
Signals.addSignalMethods(Animation.prototype); Signals.addSignalMethods(Animation.prototype);
var BackgroundManager = new Lang.Class({ var BackgroundManager = class BackgroundManager {
Name: 'BackgroundManager', constructor(params) {
_init(params) {
params = Params.parse(params, { container: null, params = Params.parse(params, { container: null,
layoutManager: Main.layoutManager, layoutManager: Main.layoutManager,
monitorIndex: null, monitorIndex: null,
@ -688,7 +675,7 @@ var BackgroundManager = new Lang.Class({
this.backgroundActor = this._createBackgroundActor(); this.backgroundActor = this._createBackgroundActor();
this._newBackgroundActor = null; this._newBackgroundActor = null;
}, }
destroy() { destroy() {
let cache = getBackgroundCache(); let cache = getBackgroundCache();
@ -704,7 +691,7 @@ var BackgroundManager = new Lang.Class({
this.backgroundActor.destroy(); this.backgroundActor.destroy();
this.backgroundActor = null; this.backgroundActor = null;
} }
}, }
_swapBackgroundActor() { _swapBackgroundActor() {
let oldBackgroundActor = this.backgroundActor; let oldBackgroundActor = this.backgroundActor;
@ -721,7 +708,7 @@ var BackgroundManager = new Lang.Class({
oldBackgroundActor.destroy(); oldBackgroundActor.destroy();
} }
}); });
}, }
_updateBackgroundActor() { _updateBackgroundActor() {
if (this._newBackgroundActor) { if (this._newBackgroundActor) {
@ -750,7 +737,7 @@ var BackgroundManager = new Lang.Class({
this._swapBackgroundActor(); this._swapBackgroundActor();
}); });
} }
}, }
_createBackgroundActor() { _createBackgroundActor() {
let background = this._backgroundSource.getBackground(this._monitorIndex); let background = this._backgroundSource.getBackground(this._monitorIndex);
@ -787,6 +774,6 @@ var BackgroundManager = new Lang.Class({
}); });
return backgroundActor; return backgroundActor;
}, }
}); };
Signals.addSignalMethods(BackgroundManager.prototype); Signals.addSignalMethods(BackgroundManager.prototype);

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -9,12 +8,9 @@ const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main; const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
var BackgroundMenu = new Lang.Class({ var BackgroundMenu = class BackgroundMenu extends PopupMenu.PopupMenu {
Name: 'BackgroundMenu', constructor(layoutManager) {
Extends: PopupMenu.PopupMenu, super(layoutManager.dummyCursor, 0, St.Side.TOP);
_init(layoutManager) {
this.parent(layoutManager.dummyCursor, 0, St.Side.TOP);
this.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop'); this.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop');
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
@ -26,7 +22,7 @@ var BackgroundMenu = new Lang.Class({
layoutManager.uiGroup.add_actor(this.actor); layoutManager.uiGroup.add_actor(this.actor);
this.actor.hide(); this.actor.hide();
} }
}); };
function addBackgroundMenu(actor, layoutManager) { function addBackgroundMenu(actor, layoutManager) {
actor.reactive = true; actor.reactive = true;

View File

@ -3,14 +3,11 @@
const Atk = imports.gi.Atk; const Atk = imports.gi.Atk;
const Cairo = imports.cairo; const Cairo = imports.cairo;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Signals = imports.signals; const Signals = imports.signals;
var BarLevel = new Lang.Class({ var BarLevel = class {
Name: "BarLevel", constructor(value, params) {
_init(value, params) {
if (isNaN(value)) if (isNaN(value))
// Avoid spreading NaNs around // Avoid spreading NaNs around
throw TypeError('The bar level value must be a number'); 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._customAccessible.connect('set-current-value', this._setCurrentValue.bind(this));
this.connect('value-changed', this._valueChanged.bind(this)); this.connect('value-changed', this._valueChanged.bind(this));
}, }
setValue(value) { setValue(value) {
if (isNaN(value)) if (isNaN(value))
@ -48,7 +45,7 @@ var BarLevel = new Lang.Class({
this._value = Math.max(Math.min(value, this._maxValue), 0); this._value = Math.max(Math.min(value, this._maxValue), 0);
this.actor.queue_repaint(); this.actor.queue_repaint();
}, }
setMaximumValue(value) { setMaximumValue(value) {
if (isNaN(value)) if (isNaN(value))
@ -57,7 +54,7 @@ var BarLevel = new Lang.Class({
this._maxValue = Math.max(value, 1); this._maxValue = Math.max(value, 1);
this._overdriveStart = Math.min(this._overdriveStart, this._maxValue); this._overdriveStart = Math.min(this._overdriveStart, this._maxValue);
this.actor.queue_repaint(); this.actor.queue_repaint();
}, }
setOverdriveStart(value) { setOverdriveStart(value) {
if (isNaN(value)) if (isNaN(value))
@ -69,7 +66,7 @@ var BarLevel = new Lang.Class({
this._overdriveStart = value; this._overdriveStart = value;
this._value = Math.max(Math.min(value, this._maxValue), 0); this._value = Math.max(Math.min(value, this._maxValue), 0);
this.actor.queue_repaint(); this.actor.queue_repaint();
}, }
_barLevelRepaint(area) { _barLevelRepaint(area) {
let cr = area.get_context(); let cr = area.get_context();
@ -176,35 +173,34 @@ var BarLevel = new Lang.Class({
} }
cr.$dispose(); cr.$dispose();
}, }
_getCurrentValue(actor) { _getCurrentValue(actor) {
return this._value; return this._value;
}, }
_getOverdriveStart(actor) { _getOverdriveStart(actor) {
return this._overdriveStart; return this._overdriveStart;
}, }
_getMinimumValue(actor) { _getMinimumValue(actor) {
return 0; return 0;
}, }
_getMaximumValue(actor) { _getMaximumValue(actor) {
return this._maxValue; return this._maxValue;
}, }
_setCurrentValue(actor, value) { _setCurrentValue(actor, value) {
this._value = value; this._value = value;
}, }
_valueChanged(barLevel, value, property) { _valueChanged(barLevel, value, property) {
this._customAccessible.notify("accessible-value"); this._customAccessible.notify("accessible-value");
}, }
get value() { get value() {
return this._value; return this._value;
} }
}); };
Signals.addSignalMethods(BarLevel.prototype); Signals.addSignalMethods(BarLevel.prototype);

View File

@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Signals = imports.signals; const Signals = imports.signals;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -89,46 +88,42 @@ function _getCalendarDayAbbreviation(dayNumber) {
// Abstraction for an appointment/event in a calendar // Abstraction for an appointment/event in a calendar
var CalendarEvent = new Lang.Class({ var CalendarEvent = class CalendarEvent {
Name: 'CalendarEvent', constructor(id, date, end, summary, allDay) {
_init(id, date, end, summary, allDay) {
this.id = id; this.id = id;
this.date = date; this.date = date;
this.end = end; this.end = end;
this.summary = summary; this.summary = summary;
this.allDay = allDay; this.allDay = allDay;
} }
}); };
// Interface for appointments/events - e.g. the contents of a calendar // Interface for appointments/events - e.g. the contents of a calendar
// //
// First, an implementation with no events // First, an implementation with no events
var EmptyEventSource = new Lang.Class({ var EmptyEventSource = class EmptyEventSource {
Name: 'EmptyEventSource', constructor() {
_init() {
this.isLoading = false; this.isLoading = false;
this.isDummy = true; this.isDummy = true;
this.hasCalendars = false; this.hasCalendars = false;
}, }
destroy() { destroy() {
}, }
requestRange(begin, end) { requestRange(begin, end) {
}, }
getEvents(begin, end) { getEvents(begin, end) {
let result = []; let result = [];
return result; return result;
}, }
hasEvents(day) { hasEvents(day) {
return false; return false;
} }
}); };
Signals.addSignalMethods(EmptyEventSource.prototype); Signals.addSignalMethods(EmptyEventSource.prototype);
const CalendarServerIface = ` const CalendarServerIface = `
@ -174,10 +169,8 @@ function _dateIntervalsOverlap(a0, a1, b0, b1)
} }
// an implementation that reads data from a session bus service // an implementation that reads data from a session bus service
var DBusEventSource = new Lang.Class({ var DBusEventSource = class DBusEventSource {
Name: 'DBusEventSource', constructor() {
_init() {
this._resetCache(); this._resetCache();
this.isLoading = false; this.isLoading = false;
this.isDummy = false; this.isDummy = false;
@ -224,39 +217,39 @@ var DBusEventSource = new Lang.Class({
this._onNameAppeared(); this._onNameAppeared();
} }
}); });
}, }
destroy() { destroy() {
this._dbusProxy.run_dispose(); this._dbusProxy.run_dispose();
}, }
get hasCalendars() { get hasCalendars() {
if (this._initialized) if (this._initialized)
return this._dbusProxy.HasCalendars; return this._dbusProxy.HasCalendars;
else else
return false; return false;
}, }
_resetCache() { _resetCache() {
this._events = []; this._events = [];
this._lastRequestBegin = null; this._lastRequestBegin = null;
this._lastRequestEnd = null; this._lastRequestEnd = null;
}, }
_onNameAppeared(owner) { _onNameAppeared(owner) {
this._initialized = true; this._initialized = true;
this._resetCache(); this._resetCache();
this._loadEvents(true); this._loadEvents(true);
}, }
_onNameVanished(oldOwner) { _onNameVanished(oldOwner) {
this._resetCache(); this._resetCache();
this.emit('changed'); this.emit('changed');
}, }
_onChanged() { _onChanged() {
this._loadEvents(false); this._loadEvents(false);
}, }
_onEventsReceived(results, error) { _onEventsReceived(results, error) {
let newEvents = []; let newEvents = [];
@ -278,7 +271,7 @@ var DBusEventSource = new Lang.Class({
this._events = newEvents; this._events = newEvents;
this.isLoading = false; this.isLoading = false;
this.emit('changed'); this.emit('changed');
}, }
_loadEvents(forceReload) { _loadEvents(forceReload) {
// Ignore while loading // Ignore while loading
@ -292,7 +285,7 @@ var DBusEventSource = new Lang.Class({
this._onEventsReceived.bind(this), this._onEventsReceived.bind(this),
Gio.DBusCallFlags.NONE); Gio.DBusCallFlags.NONE);
} }
}, }
requestRange(begin, end) { requestRange(begin, end) {
if (!(_datesEqual(begin, this._lastRequestBegin) && _datesEqual(end, this._lastRequestEnd))) { if (!(_datesEqual(begin, this._lastRequestBegin) && _datesEqual(end, this._lastRequestEnd))) {
@ -303,7 +296,7 @@ var DBusEventSource = new Lang.Class({
this._curRequestEnd = end; this._curRequestEnd = end;
this._loadEvents(false); this._loadEvents(false);
} }
}, }
getEvents(begin, end) { getEvents(begin, end) {
let result = []; let result = [];
@ -321,7 +314,7 @@ var DBusEventSource = new Lang.Class({
return d1.getTime() - d2.getTime(); return d1.getTime() - d2.getTime();
}); });
return result; return result;
}, }
hasEvents(day) { hasEvents(day) {
let dayBegin = _getBeginningOfDay(day); let dayBegin = _getBeginningOfDay(day);
@ -334,13 +327,11 @@ var DBusEventSource = new Lang.Class({
return true; return true;
} }
}); };
Signals.addSignalMethods(DBusEventSource.prototype); Signals.addSignalMethods(DBusEventSource.prototype);
var Calendar = new Lang.Class({ var Calendar = class Calendar {
Name: 'Calendar', constructor() {
_init() {
this._weekStart = Shell.util_get_week_start(); this._weekStart = Shell.util_get_week_start();
this._settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.calendar' }); 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._onScroll.bind(this));
this._buildHeader (); this._buildHeader ();
}, }
// @eventSource: is an object implementing the EventSource API, e.g. the // @eventSource: is an object implementing the EventSource API, e.g. the
// requestRange(), getEvents(), hasEvents() methods and the ::changed signal. // requestRange(), getEvents(), hasEvents() methods and the ::changed signal.
@ -390,7 +381,7 @@ var Calendar = new Lang.Class({
}); });
this._rebuildCalendar(); this._rebuildCalendar();
this._update(); this._update();
}, }
// Sets the calendar to show a specific date // Sets the calendar to show a specific date
setDate(date) { setDate(date) {
@ -400,14 +391,14 @@ var Calendar = new Lang.Class({
this._selectedDate = date; this._selectedDate = date;
this._update(); this._update();
this.emit('selected-date-changed', new Date(this._selectedDate)); this.emit('selected-date-changed', new Date(this._selectedDate));
}, }
updateTimeZone() { updateTimeZone() {
// The calendar need to be rebuilt after a time zone update because // The calendar need to be rebuilt after a time zone update because
// the date might have changed. // the date might have changed.
this._rebuildCalendar(); this._rebuildCalendar();
this._update(); this._update();
}, }
_buildHeader() { _buildHeader() {
let layout = this.actor.layout_manager; 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 // All the children after this are days, and get removed when we update the calendar
this._firstDayIndex = this.actor.get_n_children(); this._firstDayIndex = this.actor.get_n_children();
}, }
_onScroll(actor, event) { _onScroll(actor, event) {
switch (event.get_scroll_direction()) { switch (event.get_scroll_direction()) {
@ -478,7 +469,7 @@ var Calendar = new Lang.Class({
break; break;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onPrevMonthButtonClicked() { _onPrevMonthButtonClicked() {
let newDate = new Date(this._selectedDate); let newDate = new Date(this._selectedDate);
@ -502,7 +493,7 @@ var Calendar = new Lang.Class({
this._backButton.grab_key_focus(); this._backButton.grab_key_focus();
this.setDate(newDate); this.setDate(newDate);
}, }
_onNextMonthButtonClicked() { _onNextMonthButtonClicked() {
let newDate = new Date(this._selectedDate); let newDate = new Date(this._selectedDate);
@ -526,14 +517,14 @@ var Calendar = new Lang.Class({
this._forwardButton.grab_key_focus(); this._forwardButton.grab_key_focus();
this.setDate(newDate); this.setDate(newDate);
}, }
_onSettingsChange() { _onSettingsChange() {
this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY); this._useWeekdate = this._settings.get_boolean(SHOW_WEEKDATE_KEY);
this._buildHeader(); this._buildHeader();
this._rebuildCalendar(); this._rebuildCalendar();
this._update(); this._update();
}, }
_rebuildCalendar() { _rebuildCalendar() {
let now = new Date(); let now = new Date();
@ -654,7 +645,7 @@ var Calendar = new Lang.Class({
// Signal to the event source that we are interested in events // Signal to the event source that we are interested in events
// only from this date range // only from this date range
this._eventSource.requestRange(beginDate, iter); this._eventSource.requestRange(beginDate, iter);
}, }
_update() { _update() {
let now = new Date(); let now = new Date();
@ -677,18 +668,17 @@ var Calendar = new Lang.Class({
button.remove_style_pseudo_class('selected'); button.remove_style_pseudo_class('selected');
}); });
} }
}); };
Signals.addSignalMethods(Calendar.prototype); Signals.addSignalMethods(Calendar.prototype);
var EventMessage = new Lang.Class({ var EventMessage = class EventMessage extends MessageList.Message {
Name: 'EventMessage', constructor(event, date) {
Extends: MessageList.Message, super('', event.summary);
_init(event, date) {
this._event = event; this._event = event;
this._date = date; 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._icon = new St.Icon({ icon_name: 'x-office-calendar-symbolic' });
this.setIcon(this._icon); 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'); let iconVisible = this.actor.get_parent().has_style_pseudo_class('first-child');
this._icon.opacity = (iconVisible ? 255 : 0); this._icon.opacity = (iconVisible ? 255 : 0);
}); });
}, }
_formatEventTime() { _formatEventTime() {
let periodBegin = _getBeginningOfDay(this._date); let periodBegin = _getBeginningOfDay(this._date);
@ -731,18 +721,16 @@ var EventMessage = new Lang.Class({
} }
return title; return title;
} }
}); };
var NotificationMessage = new Lang.Class({ var NotificationMessage =
Name: 'NotificationMessage', class NotificationMessage extends MessageList.Message {
Extends: MessageList.Message, constructor(notification) {
super(notification.title, notification.bannerBodyText);
_init(notification) {
this.notification = notification;
this.parent(notification.title, notification.bannerBodyText);
this.setUseBodyMarkup(notification.bannerBodyMarkup); this.setUseBodyMarkup(notification.bannerBodyMarkup);
this.notification = notification;
this.setIcon(this._getIcon()); this.setIcon(this._getIcon());
this.connect('close', () => { this.connect('close', () => {
@ -758,7 +746,7 @@ var NotificationMessage = new Lang.Class({
}); });
this._updatedId = notification.connect('updated', this._updatedId = notification.connect('updated',
this._onUpdated.bind(this)); this._onUpdated.bind(this));
}, }
_getIcon() { _getIcon() {
if (this.notification.gicon) if (this.notification.gicon)
@ -766,23 +754,23 @@ var NotificationMessage = new Lang.Class({
icon_size: MESSAGE_ICON_SIZE }); icon_size: MESSAGE_ICON_SIZE });
else else
return this.notification.source.createIcon(MESSAGE_ICON_SIZE); return this.notification.source.createIcon(MESSAGE_ICON_SIZE);
}, }
_onUpdated(n, clear) { _onUpdated(n, clear) {
this.setIcon(this._getIcon()); this.setIcon(this._getIcon());
this.setTitle(n.title); this.setTitle(n.title);
this.setBody(n.bannerBodyText); this.setBody(n.bannerBodyText);
this.setUseBodyMarkup(n.bannerBodyMarkup); this.setUseBodyMarkup(n.bannerBodyMarkup);
}, }
_onClicked() { _onClicked() {
this.notification.activate(); this.notification.activate();
}, }
_onDestroy() { _onDestroy() {
this.parent(); super._onDestroy();
this._disconnectNotificationSignals(); this._disconnectNotificationSignals();
}, }
_disconnectNotificationSignals() { _disconnectNotificationSignals() {
if (this._updatedId) if (this._updatedId)
@ -792,26 +780,23 @@ var NotificationMessage = new Lang.Class({
if (this._destroyId) if (this._destroyId)
this.notification.disconnect(this._destroyId); this.notification.disconnect(this._destroyId);
this._destroyId = 0; this._destroyId = 0;
}, }
canClose() { canClose() {
return true; return true;
} }
}); };
var EventsSection = new Lang.Class({ var EventsSection = class EventsSection extends MessageList.MessageListSection {
Name: 'EventsSection', constructor() {
Extends: MessageList.MessageListSection, super();
_init() {
this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' }); this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
this._desktopSettings.connect('changed', this._reloadEvents.bind(this)); this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
this._eventSource = new EmptyEventSource(); this._eventSource = new EmptyEventSource();
this._messageById = new Map(); this._messageById = new Map();
this.parent();
this._title = new St.Button({ style_class: 'events-section-title', this._title = new St.Button({ style_class: 'events-section-title',
label: '', label: '',
x_align: St.Align.START, x_align: St.Align.START,
@ -824,16 +809,16 @@ var EventsSection = new Lang.Class({
Shell.AppSystem.get_default().connect('installed-changed', Shell.AppSystem.get_default().connect('installed-changed',
this._appInstalledChanged.bind(this)); this._appInstalledChanged.bind(this));
this._appInstalledChanged(); this._appInstalledChanged();
}, }
setEventSource(eventSource) { setEventSource(eventSource) {
this._eventSource = eventSource; this._eventSource = eventSource;
this._eventSource.connect('changed', this._reloadEvents.bind(this)); this._eventSource.connect('changed', this._reloadEvents.bind(this));
}, }
get allowed() { get allowed() {
return Main.sessionMode.showCalendarEvents; return Main.sessionMode.showCalendarEvents;
}, }
_updateTitle() { _updateTitle() {
this._title.visible = !isToday(this._date); this._title.visible = !isToday(this._date);
@ -852,7 +837,7 @@ var EventsSection = new Lang.Class({
dayFormat = Shell.util_translate_time_string(NC_("calendar heading", dayFormat = Shell.util_translate_time_string(NC_("calendar heading",
"%A, %B %-d, %Y")); "%A, %B %-d, %Y"));
this._title.label = this._date.toLocaleFormat(dayFormat); this._title.label = this._date.toLocaleFormat(dayFormat);
}, }
_reloadEvents() { _reloadEvents() {
if (this._eventSource.isLoading) if (this._eventSource.isLoading)
@ -887,12 +872,12 @@ var EventsSection = new Lang.Class({
this._reloading = false; this._reloading = false;
this._sync(); this._sync();
}, }
_appInstalledChanged() { _appInstalledChanged() {
this._calendarApp = undefined; this._calendarApp = undefined;
this._title.reactive = (this._getCalendarApp() != null); this._title.reactive = (this._getCalendarApp() != null);
}, }
_getCalendarApp() { _getCalendarApp() {
if (this._calendarApp !== undefined) if (this._calendarApp !== undefined)
@ -907,7 +892,7 @@ var EventsSection = new Lang.Class({
this._calendarApp = null; this._calendarApp = null;
} }
return this._calendarApp; return this._calendarApp;
}, }
_onTitleClicked() { _onTitleClicked() {
Main.overview.hide(); Main.overview.hide();
@ -917,32 +902,30 @@ var EventsSection = new Lang.Class({
if (app.get_id() == 'evolution.desktop') if (app.get_id() == 'evolution.desktop')
app = Gio.DesktopAppInfo.new('evolution-calendar.desktop'); app = Gio.DesktopAppInfo.new('evolution-calendar.desktop');
app.launch([], global.create_app_launch_context(0, -1)); app.launch([], global.create_app_launch_context(0, -1));
}, }
setDate(date) { setDate(date) {
this.parent(date); super.setDate(date);
this._updateTitle(); this._updateTitle();
this._reloadEvents(); this._reloadEvents();
}, }
_shouldShow() { _shouldShow() {
return !this.empty || !isToday(this._date); return !this.empty || !isToday(this._date);
}, }
_sync() { _sync() {
if (this._reloading) if (this._reloading)
return; return;
this.parent(); super._sync();
} }
}); };
var NotificationSection = new Lang.Class({ var NotificationSection =
Name: 'NotificationSection', class NotificationSection extends MessageList.MessageListSection {
Extends: MessageList.MessageListSection, constructor() {
super();
_init() {
this.parent();
this._sources = new Map(); this._sources = new Map();
this._nUrgent = 0; this._nUrgent = 0;
@ -953,12 +936,12 @@ var NotificationSection = new Lang.Class({
}); });
this.actor.connect('notify::mapped', this._onMapped.bind(this)); this.actor.connect('notify::mapped', this._onMapped.bind(this));
}, }
get allowed() { get allowed() {
return Main.sessionMode.hasNotifications && return Main.sessionMode.hasNotifications &&
!Main.sessionMode.isGreeter; !Main.sessionMode.isGreeter;
}, }
_createTimeLabel(datetime) { _createTimeLabel(datetime) {
let label = new St.Label({ style_class: 'event-time', let label = new St.Label({ style_class: 'event-time',
@ -969,7 +952,7 @@ var NotificationSection = new Lang.Class({
label.text = Util.formatTimeSpan(datetime); label.text = Util.formatTimeSpan(datetime);
}); });
return label; return label;
}, }
_sourceAdded(tray, source) { _sourceAdded(tray, source) {
let obj = { let obj = {
@ -984,7 +967,7 @@ var NotificationSection = new Lang.Class({
this._onNotificationAdded.bind(this)); this._onNotificationAdded.bind(this));
this._sources.set(source, obj); this._sources.set(source, obj);
}, }
_onNotificationAdded(source, notification) { _onNotificationAdded(source, notification) {
let message = new NotificationMessage(notification); let message = new NotificationMessage(notification);
@ -1015,14 +998,14 @@ var NotificationSection = new Lang.Class({
let index = isUrgent ? 0 : this._nUrgent; let index = isUrgent ? 0 : this._nUrgent;
this.addMessageAtIndex(message, index, this.actor.mapped); this.addMessageAtIndex(message, index, this.actor.mapped);
}, }
_onSourceDestroy(source, obj) { _onSourceDestroy(source, obj) {
source.disconnect(obj.destroyId); source.disconnect(obj.destroyId);
source.disconnect(obj.notificationAddedId); source.disconnect(obj.notificationAddedId);
this._sources.delete(source); this._sources.delete(source);
}, }
_onMapped() { _onMapped() {
if (!this.actor.mapped) if (!this.actor.mapped)
@ -1031,17 +1014,15 @@ var NotificationSection = new Lang.Class({
for (let message of this._messages.keys()) for (let message of this._messages.keys())
if (message.notification.urgency != MessageTray.Urgency.CRITICAL) if (message.notification.urgency != MessageTray.Urgency.CRITICAL)
message.notification.acknowledged = true; message.notification.acknowledged = true;
}, }
_shouldShow() { _shouldShow() {
return !this.empty && isToday(this._date); return !this.empty && isToday(this._date);
} }
}); };
var Placeholder = new Lang.Class({ var Placeholder = class Placeholder {
Name: 'Placeholder', constructor() {
_init() {
this.actor = new St.BoxLayout({ style_class: 'message-list-placeholder', this.actor = new St.BoxLayout({ style_class: 'message-list-placeholder',
vertical: true }); vertical: true });
@ -1059,14 +1040,14 @@ var Placeholder = new Lang.Class({
this.actor.add_actor(this._label); this.actor.add_actor(this._label);
this._sync(); this._sync();
}, }
setDate(date) { setDate(date) {
if (sameDay(this._date, date)) if (sameDay(this._date, date))
return; return;
this._date = date; this._date = date;
this._sync(); this._sync();
}, }
_sync() { _sync() {
let today = isToday(this._date); let today = isToday(this._date);
@ -1083,12 +1064,10 @@ var Placeholder = new Lang.Class({
this._label.text = _("No Events"); this._label.text = _("No Events");
} }
} }
}); };
var CalendarMessageList = new Lang.Class({ var CalendarMessageList = class CalendarMessageList {
Name: 'CalendarMessageList', constructor() {
_init() {
this.actor = new St.Widget({ style_class: 'message-list', this.actor = new St.Widget({ style_class: 'message-list',
layout_manager: new Clutter.BinLayout(), layout_manager: new Clutter.BinLayout(),
x_expand: true, y_expand: true }); x_expand: true, y_expand: true });
@ -1134,7 +1113,7 @@ var CalendarMessageList = new Lang.Class({
this._addSection(this._eventsSection); this._addSection(this._eventsSection);
Main.sessionMode.connect('updated', this._sync.bind(this)); Main.sessionMode.connect('updated', this._sync.bind(this));
}, }
_addSection(section) { _addSection(section) {
let obj = { let obj = {
@ -1159,7 +1138,7 @@ var CalendarMessageList = new Lang.Class({
this._sections.set(section, obj); this._sections.set(section, obj);
this._sectionList.add_actor(section.actor); this._sectionList.add_actor(section.actor);
this._sync(); this._sync();
}, }
_removeSection(section) { _removeSection(section) {
let obj = this._sections.get(section); let obj = this._sections.get(section);
@ -1172,11 +1151,11 @@ var CalendarMessageList = new Lang.Class({
this._sections.delete(section); this._sections.delete(section);
this._sectionList.remove_actor(section.actor); this._sectionList.remove_actor(section.actor);
this._sync(); this._sync();
}, }
_onKeyFocusIn(section, actor) { _onKeyFocusIn(section, actor) {
Util.ensureActorVisibleInScrollView(this._scrollView, actor); Util.ensureActorVisibleInScrollView(this._scrollView, actor);
}, }
_sync() { _sync() {
let sections = [...this._sections.keys()]; let sections = [...this._sections.keys()];
@ -1191,15 +1170,15 @@ var CalendarMessageList = new Lang.Class({
let canClear = sections.some(s => s.canClear && s.actor.visible); let canClear = sections.some(s => s.canClear && s.actor.visible);
this._clearButton.reactive = canClear; this._clearButton.reactive = canClear;
}, }
setEventSource(eventSource) { setEventSource(eventSource) {
this._eventsSection.setEventSource(eventSource); this._eventsSection.setEventSource(eventSource);
}, }
setDate(date) { setDate(date) {
for (let section of this._sections.keys()) for (let section of this._sections.keys())
section.setDate(date); section.setDate(date);
this._placeholder.setDate(date); this._placeholder.setDate(date);
} }
}); };

View File

@ -2,12 +2,8 @@ const Clutter = imports.gi.Clutter;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const St = imports.gi.St; const St = imports.gi.St;
const Lang = imports.lang; var CheckBox = class CheckBox {
constructor(label) {
var CheckBox = new Lang.Class({
Name: 'CheckBox',
_init(label) {
let container = new St.BoxLayout(); let container = new St.BoxLayout();
this.actor = new St.Button({ style_class: 'check-box', this.actor = new St.Button({ style_class: 'check-box',
child: container, child: container,
@ -28,13 +24,13 @@ var CheckBox = new Lang.Class({
if (label) if (label)
this.setLabel(label); this.setLabel(label);
}, }
setLabel(label) { setLabel(label) {
this._label.set_text(label); this._label.set_text(label);
}, }
getLabelActor() { getLabelActor() {
return this._label; return this._label;
} }
}); };

View File

@ -1,17 +1,13 @@
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
var ComponentManager = new Lang.Class({ var ComponentManager = class {
Name: 'ComponentManager', constructor() {
_init() {
this._allComponents = {}; this._allComponents = {};
this._enabledComponents = []; this._enabledComponents = [];
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
}, }
_sessionUpdated() { _sessionUpdated() {
let newEnabledComponents = Main.sessionMode.components; let newEnabledComponents = Main.sessionMode.components;
@ -29,12 +25,12 @@ var ComponentManager = new Lang.Class({
}); });
this._enabledComponents = newEnabledComponents; this._enabledComponents = newEnabledComponents;
}, }
_importComponent(name) { _importComponent(name) {
let module = imports.ui.components[name]; let module = imports.ui.components[name];
return module.Component; return module.Component;
}, }
_ensureComponent(name) { _ensureComponent(name) {
let component = this._allComponents[name]; let component = this._allComponents[name];
@ -48,13 +44,13 @@ var ComponentManager = new Lang.Class({
component = new constructor(); component = new constructor();
this._allComponents[name] = component; this._allComponents[name] = component;
return component; return component;
}, }
_enableComponent(name) { _enableComponent(name) {
let component = this._ensureComponent(name); let component = this._ensureComponent(name);
if (component) if (component)
component.enable(); component.enable();
}, }
_disableComponent(name) { _disableComponent(name) {
let component = this._allComponents[name]; let component = this._allComponents[name];
@ -62,4 +58,4 @@ var ComponentManager = new Lang.Class({
return; return;
component.disable(); component.disable();
} }
}); };

View File

@ -1,6 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
@ -19,10 +18,8 @@ const SETTING_ENABLE_AUTOMOUNT = 'automount';
var AUTORUN_EXPIRE_TIMEOUT_SECS = 10; var AUTORUN_EXPIRE_TIMEOUT_SECS = 10;
var AutomountManager = new Lang.Class({ var AutomountManager = class {
Name: 'AutomountManager', constructor() {
_init() {
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA }); this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
this._volumeQueue = []; this._volumeQueue = [];
this._activeOperations = new Map(); this._activeOperations = new Map();
@ -34,7 +31,7 @@ var AutomountManager = new Lang.Class({
this._inhibited = false; this._inhibited = false;
this._volumeMonitor = Gio.VolumeMonitor.get(); this._volumeMonitor = Gio.VolumeMonitor.get();
}, }
enable() { enable() {
this._volumeAddedId = this._volumeMonitor.connect('volume-added', this._onVolumeAdded.bind(this)); 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)); this._mountAllId = Mainloop.idle_add(this._startupMountAll.bind(this));
GLib.Source.set_name_by_id(this._mountAllId, '[gnome-shell] this._startupMountAll'); GLib.Source.set_name_by_id(this._mountAllId, '[gnome-shell] this._startupMountAll');
}, }
disable() { disable() {
this._volumeMonitor.disconnect(this._volumeAddedId); this._volumeMonitor.disconnect(this._volumeAddedId);
@ -58,7 +55,7 @@ var AutomountManager = new Lang.Class({
Mainloop.source_remove(this._mountAllId); Mainloop.source_remove(this._mountAllId);
this._mountAllId = 0; this._mountAllId = 0;
} }
}, }
_InhibitorsChanged(object, senderName, [inhibtor]) { _InhibitorsChanged(object, senderName, [inhibtor]) {
this._session.IsInhibitedRemote(GNOME_SESSION_AUTOMOUNT_INHIBIT, this._session.IsInhibitedRemote(GNOME_SESSION_AUTOMOUNT_INHIBIT,
@ -67,7 +64,7 @@ var AutomountManager = new Lang.Class({
this._inhibited = result[0]; this._inhibited = result[0];
} }
}); });
}, }
_startupMountAll() { _startupMountAll() {
let volumes = this._volumeMonitor.get_volumes(); let volumes = this._volumeMonitor.get_volumes();
@ -79,7 +76,7 @@ var AutomountManager = new Lang.Class({
this._mountAllId = 0; this._mountAllId = 0;
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_onDriveConnected() { _onDriveConnected() {
// if we're not in the current ConsoleKit session, // 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', player.play_from_theme('device-added-media',
_("External drive connected"), _("External drive connected"),
null); null);
}, }
_onDriveDisconnected() { _onDriveDisconnected() {
// if we're not in the current ConsoleKit session, // 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', sound.play_from_theme('device-removed-media',
_("External drive disconnected"), _("External drive disconnected"),
null); null);
}, }
_onDriveEjectButton(monitor, drive) { _onDriveEjectButton(monitor, drive) {
// TODO: this code path is not tested, as the GVfs volume monitor // TODO: this code path is not tested, as the GVfs volume monitor
@ -134,11 +131,11 @@ var AutomountManager = new Lang.Class({
} }
}); });
} }
}, }
_onVolumeAdded(monitor, volume) { _onVolumeAdded(monitor, volume) {
this._checkAndMountVolume(volume); this._checkAndMountVolume(volume);
}, }
_checkAndMountVolume(volume, params) { _checkAndMountVolume(volume, params) {
params = Params.parse(params, { checkSession: true, params = Params.parse(params, { checkSession: true,
@ -178,7 +175,7 @@ var AutomountManager = new Lang.Class({
} else { } else {
this._mountVolume(volume, null, params.allowAutorun); this._mountVolume(volume, null, params.allowAutorun);
} }
}, }
_mountVolume(volume, operation, allowAutorun) { _mountVolume(volume, operation, allowAutorun) {
if (allowAutorun) if (allowAutorun)
@ -189,7 +186,7 @@ var AutomountManager = new Lang.Class({
volume.mount(0, mountOp, null, volume.mount(0, mountOp, null,
this._onVolumeMounted.bind(this)); this._onVolumeMounted.bind(this));
}, }
_onVolumeMounted(volume, res) { _onVolumeMounted(volume, res) {
this._allowAutorunExpire(volume); this._allowAutorunExpire(volume);
@ -214,7 +211,7 @@ var AutomountManager = new Lang.Class({
this._closeOperation(volume); this._closeOperation(volume);
} }
} }
}, }
_onVolumeRemoved(monitor, volume) { _onVolumeRemoved(monitor, volume) {
if (volume._allowAutorunExpireId && volume._allowAutorunExpireId > 0) { if (volume._allowAutorunExpireId && volume._allowAutorunExpireId > 0) {
@ -223,7 +220,7 @@ var AutomountManager = new Lang.Class({
} }
this._volumeQueue = this._volumeQueue =
this._volumeQueue.filter(element => (element != volume)); this._volumeQueue.filter(element => (element != volume));
}, }
_reaskPassword(volume) { _reaskPassword(volume) {
let prevOperation = this._activeOperations.get(volume); let prevOperation = this._activeOperations.get(volume);
@ -232,7 +229,7 @@ var AutomountManager = new Lang.Class({
new ShellMountOperation.ShellMountOperation(volume, new ShellMountOperation.ShellMountOperation(volume,
{ existingDialog: existingDialog }); { existingDialog: existingDialog });
this._mountVolume(volume, operation); this._mountVolume(volume, operation);
}, }
_closeOperation(volume) { _closeOperation(volume) {
let operation = this._activeOperations.get(volume); let operation = this._activeOperations.get(volume);
@ -240,11 +237,11 @@ var AutomountManager = new Lang.Class({
return; return;
operation.close(); operation.close();
this._activeOperations.delete(volume); this._activeOperations.delete(volume);
}, }
_allowAutorun(volume) { _allowAutorun(volume) {
volume.allowAutorun = true; volume.allowAutorun = true;
}, }
_allowAutorunExpire(volume) { _allowAutorunExpire(volume) {
let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => { let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => {
@ -255,5 +252,5 @@ var AutomountManager = new Lang.Class({
volume._allowAutorunExpireId = id; volume._allowAutorunExpireId = id;
GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun'); GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
} }
}); };
var Component = AutomountManager; var Component = AutomountManager;

View File

@ -1,6 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const St = imports.gi.St; const St = imports.gi.St;
@ -84,13 +83,11 @@ function HotplugSniffer() {
'/org/gnome/Shell/HotplugSniffer'); '/org/gnome/Shell/HotplugSniffer');
} }
var ContentTypeDiscoverer = new Lang.Class({ var ContentTypeDiscoverer = class {
Name: 'ContentTypeDiscoverer', constructor(callback) {
_init(callback) {
this._callback = callback; this._callback = callback;
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA }); this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
}, }
guessContentTypes(mount) { guessContentTypes(mount) {
let autorunEnabled = !this._settings.get_boolean(SETTING_DISABLE_AUTORUN); let autorunEnabled = !this._settings.get_boolean(SETTING_DISABLE_AUTORUN);
@ -103,7 +100,7 @@ var ContentTypeDiscoverer = new Lang.Class({
} else { } else {
this._emitCallback(mount, []); this._emitCallback(mount, []);
} }
}, }
_onContentTypeGuessed(mount, res) { _onContentTypeGuessed(mount, res) {
let contentTypes = []; let contentTypes = [];
@ -126,7 +123,7 @@ var ContentTypeDiscoverer = new Lang.Class({
this._emitCallback(mount, contentTypes); this._emitCallback(mount, contentTypes);
}); });
} }
}, }
_emitCallback(mount, contentTypes) { _emitCallback(mount, contentTypes) {
if (!contentTypes) if (!contentTypes)
@ -150,27 +147,25 @@ var ContentTypeDiscoverer = new Lang.Class({
this._callback(mount, apps, contentTypes); this._callback(mount, apps, contentTypes);
} }
}); };
var AutorunManager = new Lang.Class({ var AutorunManager = class {
Name: 'AutorunManager', constructor() {
_init() {
this._session = new GnomeSession.SessionManager(); this._session = new GnomeSession.SessionManager();
this._volumeMonitor = Gio.VolumeMonitor.get(); this._volumeMonitor = Gio.VolumeMonitor.get();
this._dispatcher = new AutorunDispatcher(this); this._dispatcher = new AutorunDispatcher(this);
}, }
enable() { enable() {
this._mountAddedId = this._volumeMonitor.connect('mount-added', this._onMountAdded.bind(this)); this._mountAddedId = this._volumeMonitor.connect('mount-added', this._onMountAdded.bind(this));
this._mountRemovedId = this._volumeMonitor.connect('mount-removed', this._onMountRemoved.bind(this)); this._mountRemovedId = this._volumeMonitor.connect('mount-removed', this._onMountRemoved.bind(this));
}, }
disable() { disable() {
this._volumeMonitor.disconnect(this._mountAddedId); this._volumeMonitor.disconnect(this._mountAddedId);
this._volumeMonitor.disconnect(this._mountRemovedId); this._volumeMonitor.disconnect(this._mountRemovedId);
}, }
_onMountAdded(monitor, mount) { _onMountAdded(monitor, mount) {
// don't do anything if our session is not the currently // 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); this._dispatcher.addMount(mount, apps, contentTypes);
}); });
discoverer.guessContentTypes(mount); discoverer.guessContentTypes(mount);
}, }
_onMountRemoved(monitor, mount) { _onMountRemoved(monitor, mount) {
this._dispatcher.removeMount(mount); this._dispatcher.removeMount(mount);
} }
}); };
var AutorunDispatcher = new Lang.Class({ var AutorunDispatcher = class {
Name: 'AutorunDispatcher', constructor(manager) {
_init(manager) {
this._manager = manager; this._manager = manager;
this._sources = []; this._sources = [];
this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA }); this._settings = new Gio.Settings({ schema_id: SETTINGS_SCHEMA });
}, }
_getAutorunSettingForType(contentType) { _getAutorunSettingForType(contentType) {
let runApp = this._settings.get_strv(SETTING_START_APP); let runApp = this._settings.get_strv(SETTING_START_APP);
@ -212,7 +205,7 @@ var AutorunDispatcher = new Lang.Class({
return AutorunSetting.FILES; return AutorunSetting.FILES;
return AutorunSetting.ASK; return AutorunSetting.ASK;
}, }
_getSourceForMount(mount) { _getSourceForMount(mount) {
let filtered = this._sources.filter(source => (source.mount == mount)); let filtered = this._sources.filter(source => (source.mount == mount));
@ -224,7 +217,7 @@ var AutorunDispatcher = new Lang.Class({
return filtered[0]; return filtered[0];
return null; return null;
}, }
_addSource(mount, apps) { _addSource(mount, apps) {
// if we already have a source showing for this // if we already have a source showing for this
@ -234,7 +227,7 @@ var AutorunDispatcher = new Lang.Class({
// add a new source // add a new source
this._sources.push(new AutorunSource(this._manager, mount, apps)); this._sources.push(new AutorunSource(this._manager, mount, apps));
}, }
addMount(mount, apps, contentTypes) { addMount(mount, apps, contentTypes) {
// if autorun is disabled globally, return // 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 // but we failed launching the default app or the default file manager
if (!success) if (!success)
this._addSource(mount, apps); this._addSource(mount, apps);
}, }
removeMount(mount) { removeMount(mount) {
let source = this._getSourceForMount(mount); let source = this._getSourceForMount(mount);
@ -284,45 +277,39 @@ var AutorunDispatcher = new Lang.Class({
// destroy the notification source // destroy the notification source
source.destroy(); source.destroy();
} }
}); };
var AutorunSource = new Lang.Class({ var AutorunSource = class extends MessageTray.Source {
Name: 'AutorunSource', constructor(manager, mount, apps) {
Extends: MessageTray.Source, super(mount.get_name());
_init(manager, mount, apps) {
this._manager = manager; this._manager = manager;
this.mount = mount; this.mount = mount;
this.apps = apps; this.apps = apps;
this.parent(mount.get_name());
this._notification = new AutorunNotification(this._manager, this); this._notification = new AutorunNotification(this._manager, this);
// add ourselves as a source, and popup the notification // add ourselves as a source, and popup the notification
Main.messageTray.add(this); Main.messageTray.add(this);
this.notify(this._notification); this.notify(this._notification);
}, }
getIcon() { getIcon() {
return this.mount.get_icon(); return this.mount.get_icon();
}, }
_createPolicy() { _createPolicy() {
return new MessageTray.NotificationApplicationPolicy('org.gnome.Nautilus'); return new MessageTray.NotificationApplicationPolicy('org.gnome.Nautilus');
} }
}); };
var AutorunNotification = new Lang.Class({ var AutorunNotification = class extends MessageTray.Notification {
Name: 'AutorunNotification', constructor(manager, source) {
Extends: MessageTray.Notification, super(source, source.title);
_init(manager, source) {
this.parent(source, source.title);
this._manager = manager; this._manager = manager;
this._mount = source.mount; this._mount = source.mount;
}, }
createBanner() { createBanner() {
let banner = new MessageTray.NotificationBanner(this); let banner = new MessageTray.NotificationBanner(this);
@ -335,7 +322,7 @@ var AutorunNotification = new Lang.Class({
}); });
return banner; return banner;
}, }
_buttonForApp(app) { _buttonForApp(app) {
let box = new St.BoxLayout(); let box = new St.BoxLayout();
@ -362,14 +349,14 @@ var AutorunNotification = new Lang.Class({
}); });
return button; return button;
}, }
activate() { activate() {
this.parent(); super.activate();
let app = Gio.app_info_get_default_for_type('inode/directory', false); let app = Gio.app_info_get_default_for_type('inode/directory', false);
startAppForMount(app, this._mount); startAppForMount(app, this._mount);
} }
}); };
var Component = AutorunManager; var Component = AutorunManager;

View File

@ -1,6 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const St = imports.gi.St; const St = imports.gi.St;
@ -18,12 +17,9 @@ const Tweener = imports.ui.tweener;
var WORK_SPINNER_ICON_SIZE = 16; var WORK_SPINNER_ICON_SIZE = 16;
var KeyringDialog = new Lang.Class({ var KeyringDialog = class extends ModalDialog.ModalDialog {
Name: 'KeyringDialog', constructor() {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'prompt-dialog' });
_init() {
this.parent({ styleClass: 'prompt-dialog' });
this.prompt = new Shell.KeyringPrompt(); this.prompt = new Shell.KeyringPrompt();
this.prompt.connect('show-password', this._onShowPassword.bind(this)); 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('cancel-label', this._cancelButton, 'label', GObject.BindingFlags.SYNC_CREATE);
this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE); this.prompt.bind_property('continue-label', this._continueButton, 'label', GObject.BindingFlags.SYNC_CREATE);
}, }
_setWorking(working) { _setWorking(working) {
if (!this._workSpinner) if (!this._workSpinner)
@ -71,7 +67,7 @@ var KeyringDialog = new Lang.Class({
this._workSpinner.play(); this._workSpinner.play();
else else
this._workSpinner.stop(); this._workSpinner.stop();
}, }
_buildControlTable() { _buildControlTable() {
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL }); let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
@ -162,7 +158,7 @@ var KeyringDialog = new Lang.Class({
this._controlTable = table; this._controlTable = table;
this._content.messageBox.add(table, { x_fill: true, y_fill: true }); this._content.messageBox.add(table, { x_fill: true, y_fill: true });
}, }
_updateSensitivity(sensitive) { _updateSensitivity(sensitive) {
if (this._passwordEntry) { if (this._passwordEntry) {
@ -178,7 +174,7 @@ var KeyringDialog = new Lang.Class({
this._continueButton.can_focus = sensitive; this._continueButton.can_focus = sensitive;
this._continueButton.reactive = sensitive; this._continueButton.reactive = sensitive;
this._setWorking(!sensitive); this._setWorking(!sensitive);
}, }
_ensureOpen() { _ensureOpen() {
// NOTE: ModalDialog.open() is safe to call if the dialog is // NOTE: ModalDialog.open() is safe to call if the dialog is
@ -196,65 +192,61 @@ var KeyringDialog = new Lang.Class({
' Dismissing prompt request'); ' Dismissing prompt request');
this.prompt.cancel() this.prompt.cancel()
return false; return false;
}, }
_onShowPassword(prompt) { _onShowPassword(prompt) {
this._buildControlTable(); this._buildControlTable();
this._ensureOpen(); this._ensureOpen();
this._updateSensitivity(true); this._updateSensitivity(true);
this._passwordEntry.grab_key_focus(); this._passwordEntry.grab_key_focus();
}, }
_onShowConfirm(prompt) { _onShowConfirm(prompt) {
this._buildControlTable(); this._buildControlTable();
this._ensureOpen(); this._ensureOpen();
this._updateSensitivity(true); this._updateSensitivity(true);
this._continueButton.grab_key_focus(); this._continueButton.grab_key_focus();
}, }
_onHidePrompt(prompt) { _onHidePrompt(prompt) {
this.close(); this.close();
}, }
_onPasswordActivate() { _onPasswordActivate() {
if (this.prompt.confirm_visible) if (this.prompt.confirm_visible)
this._confirmEntry.grab_key_focus(); this._confirmEntry.grab_key_focus();
else else
this._onContinueButton(); this._onContinueButton();
}, }
_onConfirmActivate() { _onConfirmActivate() {
this._onContinueButton(); this._onContinueButton();
}, }
_onContinueButton() { _onContinueButton() {
this._updateSensitivity(false); this._updateSensitivity(false);
this.prompt.complete(); this.prompt.complete();
}, }
_onCancelButton() { _onCancelButton() {
this.prompt.cancel(); this.prompt.cancel();
}, }
}); };
var KeyringDummyDialog = new Lang.Class({ var KeyringDummyDialog = class {
Name: 'KeyringDummyDialog', constructor() {
_init() {
this.prompt = new Shell.KeyringPrompt(); this.prompt = new Shell.KeyringPrompt();
this.prompt.connect('show-password', this._cancelPrompt.bind(this)); this.prompt.connect('show-password', this._cancelPrompt.bind(this));
this.prompt.connect('show-confirm', this._cancelPrompt.bind(this)); this.prompt.connect('show-confirm', this._cancelPrompt.bind(this));
}, }
_cancelPrompt() { _cancelPrompt() {
this.prompt.cancel(); this.prompt.cancel();
} }
}); };
var KeyringPrompter = new Lang.Class({ var KeyringPrompter = class {
Name: 'KeyringPrompter', constructor() {
_init() {
this._prompter = new Gcr.SystemPrompter(); this._prompter = new Gcr.SystemPrompter();
this._prompter.connect('new-prompt', () => { this._prompter.connect('new-prompt', () => {
let dialog = this._enabled ? new KeyringDialog() let dialog = this._enabled ? new KeyringDialog()
@ -266,7 +258,7 @@ var KeyringPrompter = new Lang.Class({
this._registered = false; this._registered = false;
this._enabled = false; this._enabled = false;
this._currentPrompt = null; this._currentPrompt = null;
}, }
enable() { enable() {
if (!this._registered) { if (!this._registered) {
@ -276,7 +268,7 @@ var KeyringPrompter = new Lang.Class({
this._registered = true; this._registered = true;
} }
this._enabled = true; this._enabled = true;
}, }
disable() { disable() {
this._enabled = false; this._enabled = false;
@ -285,6 +277,6 @@ var KeyringPrompter = new Lang.Class({
this._currentPrompt.cancel(); this._currentPrompt.cancel();
this._currentPrompt = null; this._currentPrompt = null;
} }
}); };
var Component = KeyringPrompter; var Component = KeyringPrompter;

View File

@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Lang = imports.lang;
const NM = imports.gi.NM; const NM = imports.gi.NM;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -21,12 +20,9 @@ const ShellEntry = imports.ui.shellEntry;
const VPN_UI_GROUP = 'VPN Plugin UI'; const VPN_UI_GROUP = 'VPN Plugin UI';
var NetworkSecretDialog = new Lang.Class({ var NetworkSecretDialog = class extends ModalDialog.ModalDialog {
Name: 'NetworkSecretDialog', constructor(agent, requestId, connection, settingName, hints, contentOverride) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'prompt-dialog' });
_init(agent, requestId, connection, settingName, hints, contentOverride) {
this.parent({ styleClass: 'prompt-dialog' });
this._agent = agent; this._agent = agent;
this._requestId = requestId; this._requestId = requestId;
@ -121,7 +117,7 @@ var NetworkSecretDialog = new Lang.Class({
this._okButton]); this._okButton]);
this._updateOkButton(); this._updateOkButton();
}, }
_updateOkButton() { _updateOkButton() {
let valid = true; let valid = true;
@ -132,7 +128,7 @@ var NetworkSecretDialog = new Lang.Class({
this._okButton.button.reactive = valid; this._okButton.button.reactive = valid;
this._okButton.button.can_focus = valid; this._okButton.button.can_focus = valid;
}, }
_onOk() { _onOk() {
let valid = true; let valid = true;
@ -148,12 +144,12 @@ var NetworkSecretDialog = new Lang.Class({
this.close(global.get_current_time()); this.close(global.get_current_time());
} }
// do nothing if not valid // do nothing if not valid
}, }
cancel() { cancel() {
this._agent.respond(this._requestId, Shell.NetworkAgentResponse.USER_CANCELED); this._agent.respond(this._requestId, Shell.NetworkAgentResponse.USER_CANCELED);
this.close(global.get_current_time()); this.close(global.get_current_time());
}, }
_validateWpaPsk(secret) { _validateWpaPsk(secret) {
let value = secret.value; let value = secret.value;
@ -169,7 +165,7 @@ var NetworkSecretDialog = new Lang.Class({
} }
return (value.length >= 8 && value.length <= 63); return (value.length >= 8 && value.length <= 63);
}, }
_validateStaticWep(secret) { _validateStaticWep(secret) {
let value = secret.value; let value = secret.value;
@ -194,7 +190,7 @@ var NetworkSecretDialog = new Lang.Class({
return false; return false;
} }
return true; return true;
}, }
_getWirelessSecrets(secrets, wirelessSetting) { _getWirelessSecrets(secrets, wirelessSetting) {
let wirelessSecuritySetting = this._connection.get_setting_wireless_security(); let wirelessSecuritySetting = this._connection.get_setting_wireless_security();
@ -231,7 +227,7 @@ var NetworkSecretDialog = new Lang.Class({
default: default:
log('Invalid wireless key management: ' + wirelessSecuritySetting.key_mgmt); log('Invalid wireless key management: ' + wirelessSecuritySetting.key_mgmt);
} }
}, }
_get8021xSecrets(secrets) { _get8021xSecrets(secrets) {
let ieee8021xSetting = this._connection.get_setting_802_1x(); let ieee8021xSetting = this._connection.get_setting_802_1x();
@ -274,7 +270,7 @@ var NetworkSecretDialog = new Lang.Class({
default: default:
log('Invalid EAP/IEEE802.1x method: ' + ieee8021xSetting.get_eap_method(0)); log('Invalid EAP/IEEE802.1x method: ' + ieee8021xSetting.get_eap_method(0));
} }
}, }
_getPPPoESecrets(secrets) { _getPPPoESecrets(secrets) {
let pppoeSetting = this._connection.get_setting_pppoe(); let pppoeSetting = this._connection.get_setting_pppoe();
@ -284,7 +280,7 @@ var NetworkSecretDialog = new Lang.Class({
value: pppoeSetting.service || '', password: false }); value: pppoeSetting.service || '', password: false });
secrets.push({ label: _("Password: "), key: 'password', secrets.push({ label: _("Password: "), key: 'password',
value: pppoeSetting.password || '', password: true }); value: pppoeSetting.password || '', password: true });
}, }
_getMobileSecrets(secrets, connectionType) { _getMobileSecrets(secrets, connectionType) {
let setting; let setting;
@ -294,7 +290,7 @@ var NetworkSecretDialog = new Lang.Class({
setting = this._connection.get_setting_by_name(connectionType); setting = this._connection.get_setting_by_name(connectionType);
secrets.push({ label: _("Password: "), key: 'password', secrets.push({ label: _("Password: "), key: 'password',
value: setting.value || '', password: true }); value: setting.value || '', password: true });
}, }
_getContent() { _getContent() {
let connectionSetting = this._connection.get_setting_connection(); let connectionSetting = this._connection.get_setting_connection();
@ -347,12 +343,10 @@ var NetworkSecretDialog = new Lang.Class({
return content; return content;
} }
}); };
var VPNRequestHandler = new Lang.Class({ var VPNRequestHandler = class {
Name: 'VPNRequestHandler', constructor(agent, requestId, authHelper, serviceType, connection, hints, flags) {
_init(agent, requestId, authHelper, serviceType, connection, hints, flags) {
this._agent = agent; this._agent = agent;
this._requestId = requestId; this._requestId = requestId;
this._connection = connection; this._connection = connection;
@ -412,7 +406,7 @@ var VPNRequestHandler = new Lang.Class({
this._agent.respond(requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR); this._agent.respond(requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR);
} }
}, }
cancel(respond) { cancel(respond) {
if (respond) if (respond)
@ -428,7 +422,7 @@ var VPNRequestHandler = new Lang.Class({
} }
this.destroy(); this.destroy();
}, }
destroy() { destroy() {
if (this._destroyed) if (this._destroyed)
@ -442,7 +436,7 @@ var VPNRequestHandler = new Lang.Class({
// Stdout is closed when we finish reading from it // Stdout is closed when we finish reading from it
this._destroyed = true; this._destroyed = true;
}, }
_vpnChildFinished(pid, status, requestObj) { _vpnChildFinished(pid, status, requestObj) {
this._childWatch = 0; this._childWatch = 0;
@ -463,7 +457,7 @@ var VPNRequestHandler = new Lang.Class({
this._agent.respond(this._requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR); this._agent.respond(this._requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR);
this.destroy(); this.destroy();
}, }
_vpnChildProcessLineOldStyle(line) { _vpnChildProcessLineOldStyle(line) {
if (this._previousLine != undefined) { if (this._previousLine != undefined) {
@ -481,7 +475,7 @@ var VPNRequestHandler = new Lang.Class({
} else { } else {
this._previousLine = line; this._previousLine = line;
} }
}, }
_readStdoutOldStyle() { _readStdoutOldStyle() {
this._dataStdout.read_line_async(GLib.PRIORITY_DEFAULT, null, (stream, result) => { this._dataStdout.read_line_async(GLib.PRIORITY_DEFAULT, null, (stream, result) => {
@ -498,7 +492,7 @@ var VPNRequestHandler = new Lang.Class({
// try to read more! // try to read more!
this._readStdoutOldStyle(); this._readStdoutOldStyle();
}); });
}, }
_readStdoutNewStyle() { _readStdoutNewStyle() {
this._dataStdout.fill_async(-1, GLib.PRIORITY_DEFAULT, null, (stream, result) => { 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._dataStdout.set_buffer_size(2 * this._dataStdout.get_buffer_size());
this._readStdoutNewStyle(); this._readStdoutNewStyle();
}); });
}, }
_showNewStyleDialog() { _showNewStyleDialog() {
let keyfile = new GLib.KeyFile(); let keyfile = new GLib.KeyFile();
@ -580,7 +574,7 @@ var VPNRequestHandler = new Lang.Class({
this._agent.respond(this._requestId, Shell.NetworkAgentResponse.CONFIRMED); this._agent.respond(this._requestId, Shell.NetworkAgentResponse.CONFIRMED);
this.destroy(); this.destroy();
} }
}, }
_writeConnection() { _writeConnection() {
let vpnSetting = this._connection.get_setting_vpn(); 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._agent.respond(this._requestId, Shell.NetworkAgentResponse.INTERNAL_ERROR);
this.destroy(); this.destroy();
} }
}, }
}); };
Signals.addSignalMethods(VPNRequestHandler.prototype); Signals.addSignalMethods(VPNRequestHandler.prototype);
var NetworkAgent = new Lang.Class({ var NetworkAgent = class {
Name: 'NetworkAgent', constructor() {
_init() {
this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent', this._native = new Shell.NetworkAgent({ identifier: 'org.gnome.Shell.NetworkAgent',
capabilities: NM.SecretAgentCapabilities.VPN_HINTS, capabilities: NM.SecretAgentCapabilities.VPN_HINTS,
auto_register: false auto_register: false
@ -639,7 +631,7 @@ var NetworkAgent = new Lang.Class({
logError(e, 'error initializing the NetworkManager Agent'); logError(e, 'error initializing the NetworkManager Agent');
} }
}); });
}, }
enable() { enable() {
if (!this._native) if (!this._native)
@ -648,7 +640,7 @@ var NetworkAgent = new Lang.Class({
this._native.auto_register = true; this._native.auto_register = true;
if (this._initialized && !this._native.registered) if (this._initialized && !this._native.registered)
this._native.register_async(null, null); this._native.register_async(null, null);
}, }
disable() { disable() {
let requestId; let requestId;
@ -671,7 +663,7 @@ var NetworkAgent = new Lang.Class({
this._native.auto_register = false; this._native.auto_register = false;
if (this._initialized && this._native.registered) if (this._initialized && this._native.registered)
this._native.unregister_async(null, null); this._native.unregister_async(null, null);
}, }
_showNotification(requestId, connection, settingName, hints, flags) { _showNotification(requestId, connection, settingName, hints, flags) {
let source = new MessageTray.Source(_("Network Manager"), 'network-transmit-receive'); let source = new MessageTray.Source(_("Network Manager"), 'network-transmit-receive');
@ -731,14 +723,14 @@ var NetworkAgent = new Lang.Class({
Main.messageTray.add(source); Main.messageTray.add(source);
source.notify(notification); source.notify(notification);
}, }
_newRequest(agent, requestId, connection, settingName, hints, flags) { _newRequest(agent, requestId, connection, settingName, hints, flags) {
if (!(flags & NM.SecretAgentGetSecretsFlags.USER_REQUESTED)) if (!(flags & NM.SecretAgentGetSecretsFlags.USER_REQUESTED))
this._showNotification(requestId, connection, settingName, hints, flags); this._showNotification(requestId, connection, settingName, hints, flags);
else else
this._handleRequest(requestId, connection, settingName, hints, flags); this._handleRequest(requestId, connection, settingName, hints, flags);
}, }
_handleRequest(requestId, connection, settingName, hints, flags) { _handleRequest(requestId, connection, settingName, hints, flags) {
if (settingName == 'vpn') { if (settingName == 'vpn') {
@ -752,7 +744,7 @@ var NetworkAgent = new Lang.Class({
}); });
this._dialogs[requestId] = dialog; this._dialogs[requestId] = dialog;
dialog.open(global.get_current_time()); dialog.open(global.get_current_time());
}, }
_cancelRequest(agent, requestId) { _cancelRequest(agent, requestId) {
if (this._dialogs[requestId]) { if (this._dialogs[requestId]) {
@ -763,7 +755,7 @@ var NetworkAgent = new Lang.Class({
this._vpnRequests[requestId].cancel(false); this._vpnRequests[requestId].cancel(false);
delete this._vpnRequests[requestId]; delete this._vpnRequests[requestId];
} }
}, }
_vpnRequest(requestId, connection, hints, flags) { _vpnRequest(requestId, connection, hints, flags) {
let vpnSetting = connection.get_setting_vpn(); let vpnSetting = connection.get_setting_vpn();
@ -785,7 +777,7 @@ var NetworkAgent = new Lang.Class({
delete this._vpnRequests[requestId]; delete this._vpnRequests[requestId];
}); });
this._vpnRequests[requestId] = vpnRequest; this._vpnRequests[requestId] = vpnRequest;
}, }
_buildVPNServiceCache() { _buildVPNServiceCache() {
if (this._vpnCacheBuilt) if (this._vpnCacheBuilt)
@ -818,5 +810,5 @@ var NetworkAgent = new Lang.Class({
} }
}); });
} }
}); };
var Component = NetworkAgent; var Component = NetworkAgent;

View File

@ -1,6 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const AccountsService = imports.gi.AccountsService; const AccountsService = imports.gi.AccountsService;
@ -26,12 +25,9 @@ var DIALOG_ICON_SIZE = 48;
var WORK_SPINNER_ICON_SIZE = 16; var WORK_SPINNER_ICON_SIZE = 16;
var AuthenticationDialog = new Lang.Class({ var AuthenticationDialog = class extends ModalDialog.ModalDialog {
Name: 'AuthenticationDialog', constructor(actionId, body, cookie, userNames) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'prompt-dialog' });
_init(actionId, body, cookie, userNames) {
this.parent({ styleClass: 'prompt-dialog' });
this.actionId = actionId; this.actionId = actionId;
this.message = body; this.message = body;
@ -158,14 +154,14 @@ var AuthenticationDialog = new Lang.Class({
this._identityToAuth = Polkit.UnixUser.new_for_name(userName); this._identityToAuth = Polkit.UnixUser.new_for_name(userName);
this._cookie = cookie; this._cookie = cookie;
}, }
_setWorking(working) { _setWorking(working) {
if (working) if (working)
this._workSpinner.play(); this._workSpinner.play();
else else
this._workSpinner.stop(); this._workSpinner.stop();
}, }
performAuthentication() { performAuthentication() {
this._destroySession(); this._destroySession();
@ -176,7 +172,7 @@ var AuthenticationDialog = new Lang.Class({
this._sessionShowErrorId = this._session.connect('show-error', this._onSessionShowError.bind(this)); this._sessionShowErrorId = this._session.connect('show-error', this._onSessionShowError.bind(this));
this._sessionShowInfoId = this._session.connect('show-info', this._onSessionShowInfo.bind(this)); this._sessionShowInfoId = this._session.connect('show-info', this._onSessionShowInfo.bind(this));
this._session.initiate(); this._session.initiate();
}, }
_ensureOpen() { _ensureOpen() {
// NOTE: ModalDialog.open() is safe to call if the dialog is // NOTE: ModalDialog.open() is safe to call if the dialog is
@ -198,14 +194,14 @@ var AuthenticationDialog = new Lang.Class({
' cookie ' + this._cookie); ' cookie ' + this._cookie);
this._emitDone(true); this._emitDone(true);
} }
}, }
_emitDone(dismissed) { _emitDone(dismissed) {
if (!this._doneEmitted) { if (!this._doneEmitted) {
this._doneEmitted = true; this._doneEmitted = true;
this.emit('done', dismissed); this.emit('done', dismissed);
} }
}, }
_updateSensitivity(sensitive) { _updateSensitivity(sensitive) {
this._passwordEntry.reactive = sensitive; this._passwordEntry.reactive = sensitive;
@ -214,7 +210,7 @@ var AuthenticationDialog = new Lang.Class({
this._okButton.can_focus = sensitive; this._okButton.can_focus = sensitive;
this._okButton.reactive = sensitive; this._okButton.reactive = sensitive;
this._setWorking(!sensitive); this._setWorking(!sensitive);
}, }
_onEntryActivate() { _onEntryActivate() {
let response = this._passwordEntry.get_text(); let response = this._passwordEntry.get_text();
@ -225,11 +221,11 @@ var AuthenticationDialog = new Lang.Class({
this._errorMessageLabel.hide(); this._errorMessageLabel.hide();
this._infoMessageLabel.hide(); this._infoMessageLabel.hide();
this._nullMessageLabel.show(); this._nullMessageLabel.show();
}, }
_onAuthenticateButtonPressed() { _onAuthenticateButtonPressed() {
this._onEntryActivate(); this._onEntryActivate();
}, }
_onSessionCompleted(session, gainedAuthorization) { _onSessionCompleted(session, gainedAuthorization) {
if (this._completed || this._doneEmitted) if (this._completed || this._doneEmitted)
@ -261,7 +257,7 @@ var AuthenticationDialog = new Lang.Class({
/* Try and authenticate again */ /* Try and authenticate again */
this.performAuthentication(); this.performAuthentication();
} }
}, }
_onSessionRequest(session, request, echo_on) { _onSessionRequest(session, request, echo_on) {
// Cheap localization trick // Cheap localization trick
@ -280,7 +276,7 @@ var AuthenticationDialog = new Lang.Class({
this._passwordEntry.grab_key_focus(); this._passwordEntry.grab_key_focus();
this._updateSensitivity(true); this._updateSensitivity(true);
this._ensureOpen(); this._ensureOpen();
}, }
_onSessionShowError(session, text) { _onSessionShowError(session, text) {
this._passwordEntry.set_text(''); this._passwordEntry.set_text('');
@ -289,7 +285,7 @@ var AuthenticationDialog = new Lang.Class({
this._infoMessageLabel.hide(); this._infoMessageLabel.hide();
this._nullMessageLabel.hide(); this._nullMessageLabel.hide();
this._ensureOpen(); this._ensureOpen();
}, }
_onSessionShowInfo(session, text) { _onSessionShowInfo(session, text) {
this._passwordEntry.set_text(''); this._passwordEntry.set_text('');
@ -298,7 +294,7 @@ var AuthenticationDialog = new Lang.Class({
this._errorMessageLabel.hide(); this._errorMessageLabel.hide();
this._nullMessageLabel.hide(); this._nullMessageLabel.hide();
this._ensureOpen(); this._ensureOpen();
}, }
_destroySession() { _destroySession() {
if (this._session) { if (this._session) {
@ -312,20 +308,20 @@ var AuthenticationDialog = new Lang.Class({
this._session.disconnect(this._sessionShowInfoId); this._session.disconnect(this._sessionShowInfoId);
this._session = null; this._session = null;
} }
}, }
_onUserChanged() { _onUserChanged() {
if (this._user.is_loaded && this._userAvatar) { if (this._user.is_loaded && this._userAvatar) {
this._userAvatar.update(); this._userAvatar.update();
this._userAvatar.actor.show(); this._userAvatar.actor.show();
} }
}, }
cancel() { cancel() {
this._wasDismissed = true; this._wasDismissed = true;
this.close(global.get_current_time()); this.close(global.get_current_time());
this._emitDone(true); this._emitDone(true);
}, }
_onDialogClosed() { _onDialogClosed() {
if (this._sessionUpdatedId) if (this._sessionUpdatedId)
@ -339,21 +335,19 @@ var AuthenticationDialog = new Lang.Class({
} }
this._destroySession(); this._destroySession();
}, }
}); };
Signals.addSignalMethods(AuthenticationDialog.prototype); Signals.addSignalMethods(AuthenticationDialog.prototype);
var AuthenticationAgent = new Lang.Class({ var AuthenticationAgent = class {
Name: 'AuthenticationAgent', constructor() {
_init() {
this._currentDialog = null; this._currentDialog = null;
this._handle = null; this._handle = null;
this._native = new Shell.PolkitAuthenticationAgent(); this._native = new Shell.PolkitAuthenticationAgent();
this._native.connect('initiate', this._onInitiate.bind(this)); this._native.connect('initiate', this._onInitiate.bind(this));
this._native.connect('cancel', this._onCancel.bind(this)); this._native.connect('cancel', this._onCancel.bind(this));
this._sessionUpdatedId = 0; this._sessionUpdatedId = 0;
}, }
enable() { enable() {
try { try {
@ -361,7 +355,7 @@ var AuthenticationAgent = new Lang.Class({
} catch(e) { } catch(e) {
log('Failed to register AuthenticationAgent'); log('Failed to register AuthenticationAgent');
} }
}, }
disable() { disable() {
try { try {
@ -369,7 +363,7 @@ var AuthenticationAgent = new Lang.Class({
} catch(e) { } catch(e) {
log('Failed to unregister AuthenticationAgent'); log('Failed to unregister AuthenticationAgent');
} }
}, }
_onInitiate(nativeAgent, actionId, message, iconName, cookie, userNames) { _onInitiate(nativeAgent, actionId, message, iconName, cookie, userNames) {
// Don't pop up a dialog while locked // 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.connect('done', this._onDialogDone.bind(this));
this._currentDialog.performAuthentication(); this._currentDialog.performAuthentication();
}, }
_onCancel(nativeAgent) { _onCancel(nativeAgent) {
this._completeRequest(false); this._completeRequest(false);
}, }
_onDialogDone(dialog, dismissed) { _onDialogDone(dialog, dismissed) {
this._completeRequest(dismissed); this._completeRequest(dismissed);
}, }
_completeRequest(dismissed) { _completeRequest(dismissed) {
this._currentDialog.close(); this._currentDialog.close();
@ -416,7 +410,7 @@ var AuthenticationAgent = new Lang.Class({
this._sessionUpdatedId = 0; this._sessionUpdatedId = 0;
this._native.complete(dismissed); this._native.complete(dismissed);
}, }
}); };
var Component = AuthenticationAgent; var Component = AuthenticationAgent;

View File

@ -79,17 +79,15 @@ function makeMessageFromTplEvent(event) {
}; };
} }
var TelepathyComponent = new Lang.Class({ var TelepathyComponent = class {
Name: 'TelepathyComponent', constructor() {
_init() {
this._client = null; this._client = null;
if (!HAVE_TP) if (!HAVE_TP)
return; // Telepathy isn't available return; // Telepathy isn't available
this._client = new TelepathyClient(); this._client = new TelepathyClient();
}, }
enable() { enable() {
if (!this._client) 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())) if (!this._client.account_manager.is_prepared(Tp.AccountManager.get_feature_quark_core()))
this._client.account_manager.prepare_async(null, null); this._client.account_manager.prepare_async(null, null);
}, }
disable() { disable() {
if (!this._client) if (!this._client)
@ -111,7 +109,7 @@ var TelepathyComponent = new Lang.Class({
this._client.unregister(); this._client.unregister();
} }
}); };
var TelepathyClient = HAVE_TP ? new Lang.Class({ var TelepathyClient = HAVE_TP ? new Lang.Class({
Name: 'TelepathyClient', Name: 'TelepathyClient',
@ -279,17 +277,14 @@ var TelepathyClient = HAVE_TP ? new Lang.Class({
}, },
}) : null; }) : null;
var ChatSource = new Lang.Class({ var ChatSource = class extends MessageTray.Source {
Name: 'ChatSource', constructor(account, conn, channel, contact, client) {
Extends: MessageTray.Source, super(contact.get_alias());
_init(account, conn, channel, contact, client) {
this._account = account; this._account = account;
this._contact = contact; this._contact = contact;
this._client = client; this._client = client;
this.parent(contact.get_alias());
this.isChat = true; this.isChat = true;
this._pendingMessages = []; this._pendingMessages = [];
@ -313,7 +308,7 @@ var ChatSource = new Lang.Class({
Main.messageTray.add(this); Main.messageTray.add(this);
this._getLogMessages(); this._getLogMessages();
}, }
_ensureNotification() { _ensureNotification() {
if (this._notification) if (this._notification)
@ -329,13 +324,13 @@ var ChatSource = new Lang.Class({
this._notification = null; this._notification = null;
}); });
this.pushNotification(this._notification); this.pushNotification(this._notification);
}, }
_createPolicy() { _createPolicy() {
if (this._account.protocol_name == 'irc') if (this._account.protocol_name == 'irc')
return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari'); return new MessageTray.NotificationApplicationPolicy('org.gnome.Polari');
return new MessageTray.NotificationApplicationPolicy('empathy'); return new MessageTray.NotificationApplicationPolicy('empathy');
}, }
createBanner() { createBanner() {
this._banner = new ChatNotificationBanner(this._notification); this._banner = new ChatNotificationBanner(this._notification);
@ -348,7 +343,7 @@ var ChatSource = new Lang.Class({
}); });
return this._banner; return this._banner;
}, }
_updateAlias() { _updateAlias() {
let oldAlias = this.title; let oldAlias = this.title;
@ -360,7 +355,7 @@ var ChatSource = new Lang.Class({
this.setTitle(newAlias); this.setTitle(newAlias);
if (this._notification) if (this._notification)
this._notification.appendAliasChange(oldAlias, newAlias); this._notification.appendAliasChange(oldAlias, newAlias);
}, }
getIcon() { getIcon() {
let file = this._contact.get_avatar_file(); let file = this._contact.get_avatar_file();
@ -369,7 +364,7 @@ var ChatSource = new Lang.Class({
} else { } else {
return new Gio.ThemedIcon({ name: 'avatar-default' }); return new Gio.ThemedIcon({ name: 'avatar-default' });
} }
}, }
getSecondaryIcon() { getSecondaryIcon() {
let iconName; let iconName;
@ -398,7 +393,7 @@ var ChatSource = new Lang.Class({
iconName = 'user-offline'; iconName = 'user-offline';
} }
return new Gio.ThemedIcon({ name: iconName }); return new Gio.ThemedIcon({ name: iconName });
}, }
_updateAvatarIcon() { _updateAvatarIcon() {
this.iconUpdated(); this.iconUpdated();
@ -406,7 +401,7 @@ var ChatSource = new Lang.Class({
this._notification.update(this._notification.title, this._notification.update(this._notification.title,
this._notification.bannerBodyText, this._notification.bannerBodyText,
{ gicon: this.getIcon() }); { gicon: this.getIcon() });
}, }
open() { open() {
Main.overview.hide(); Main.overview.hide();
@ -431,7 +426,7 @@ var ChatSource = new Lang.Class({
cd.present_channel_async(this._channel, global.get_current_time(), null); cd.present_channel_async(this._channel, global.get_current_time(), null);
} }
}, }
_getLogMessages() { _getLogMessages() {
let logManager = Tpl.LogManager.dup_singleton(); let logManager = Tpl.LogManager.dup_singleton();
@ -440,7 +435,7 @@ var ChatSource = new Lang.Class({
logManager.get_filtered_events_async(this._account, entity, logManager.get_filtered_events_async(this._account, entity,
Tpl.EventTypeMask.TEXT, SCROLLBACK_HISTORY_LINES, Tpl.EventTypeMask.TEXT, SCROLLBACK_HISTORY_LINES,
null, this._displayPendingMessages.bind(this)); null, this._displayPendingMessages.bind(this));
}, }
_displayPendingMessages(logManager, result) { _displayPendingMessages(logManager, result) {
let [success, events] = logManager.get_filtered_events_finish(result); let [success, events] = logManager.get_filtered_events_finish(result);
@ -493,7 +488,7 @@ var ChatSource = new Lang.Class({
if (pendingMessages.length > 0) if (pendingMessages.length > 0)
this.notify(); this.notify();
}, }
destroy(reason) { destroy(reason) {
if (this._client.is_handling_channel(this._channel)) { 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._notifyAvatarId);
this._contact.disconnect(this._presenceChangedId); this._contact.disconnect(this._presenceChangedId);
this.parent(reason); super.destroy(reason);
}, }
_channelClosed() { _channelClosed() {
this.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); this.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
}, }
/* All messages are new messages for Telepathy sources */ /* All messages are new messages for Telepathy sources */
get count() { get count() {
return this._pendingMessages.length; return this._pendingMessages.length;
}, }
get unseenCount() { get unseenCount() {
return this.count; return this.count;
}, }
get countVisible() { get countVisible() {
return this.count > 0; return this.count > 0;
}, }
_messageReceived(channel, message) { _messageReceived(channel, message) {
if (message.get_message_type() == Tp.ChannelTextMessageType.DELIVERY_REPORT) 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._notifyTimeoutId = Mainloop.timeout_add(500,
this._notifyTimeout.bind(this)); this._notifyTimeout.bind(this));
GLib.Source.set_name_by_id(this._notifyTimeoutId, '[gnome-shell] this._notifyTimeout'); GLib.Source.set_name_by_id(this._notifyTimeoutId, '[gnome-shell] this._notifyTimeout');
}, }
_notifyTimeout() { _notifyTimeout() {
if (this._pendingMessages.length != 0) if (this._pendingMessages.length != 0)
@ -574,7 +569,7 @@ var ChatSource = new Lang.Class({
this._notifyTimeoutId = 0; this._notifyTimeoutId = 0;
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
// This is called for both messages we send from // This is called for both messages we send from
// our client and other clients as well. // our client and other clients as well.
@ -582,11 +577,11 @@ var ChatSource = new Lang.Class({
this._ensureNotification(); this._ensureNotification();
message = makeMessageFromTpMessage(message, NotificationDirection.SENT); message = makeMessageFromTpMessage(message, NotificationDirection.SENT);
this._notification.appendMessage(message); this._notification.appendMessage(message);
}, }
notify() { notify() {
this.parent(this._notification); super.notify(this._notification);
}, }
respond(text) { respond(text) {
let type; let type;
@ -601,7 +596,7 @@ var ChatSource = new Lang.Class({
this._channel.send_message_async(msg, 0, (src, result) => { this._channel.send_message_async(msg, 0, (src, result) => {
this._channel.send_message_finish(result); this._channel.send_message_finish(result);
}); });
}, }
setChatState(state) { setChatState(state) {
// We don't want to send COMPOSING every time a letter is typed into // 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._chatState = state;
this._channel.set_chat_state_async(state, null); this._channel.set_chat_state_async(state, null);
} }
}, }
_presenceChanged(contact, presence, status, message) { _presenceChanged(contact, presence, status, message) {
if (this._notification) if (this._notification)
this._notification.update(this._notification.title, this._notification.update(this._notification.title,
this._notification.bannerBodyText, this._notification.bannerBodyText,
{ secondaryGIcon: this.getSecondaryIcon() }); { secondaryGIcon: this.getSecondaryIcon() });
}, }
_pendingRemoved(channel, message) { _pendingRemoved(channel, message) {
let idx = this._pendingMessages.indexOf(message); let idx = this._pendingMessages.indexOf(message);
@ -634,35 +629,32 @@ var ChatSource = new Lang.Class({
if (this._pendingMessages.length == 0 && if (this._pendingMessages.length == 0 &&
this._banner && !this._banner.expanded) this._banner && !this._banner.expanded)
this._banner.hide(); this._banner.hide();
}, }
_ackMessages() { _ackMessages() {
// Don't clear our messages here, tp-glib will send a // Don't clear our messages here, tp-glib will send a
// 'pending-message-removed' for each one. // 'pending-message-removed' for each one.
this._channel.ack_all_pending_messages_async(null); this._channel.ack_all_pending_messages_async(null);
} }
}); };
var ChatNotification = new Lang.Class({ var ChatNotification = class extends MessageTray.Notification {
Name: 'ChatNotification', constructor(source) {
Extends: MessageTray.Notification, super(source, source.title, null,
{ secondaryGIcon: source.getSecondaryIcon() });
_init(source) {
this.parent(source, source.title, null,
{ secondaryGIcon: source.getSecondaryIcon() });
this.setUrgency(MessageTray.Urgency.HIGH); this.setUrgency(MessageTray.Urgency.HIGH);
this.setResident(true); this.setResident(true);
this.messages = []; this.messages = [];
this._timestampTimeoutId = 0; this._timestampTimeoutId = 0;
}, }
destroy(reason) { destroy(reason) {
if (this._timestampTimeoutId) if (this._timestampTimeoutId)
Mainloop.source_remove(this._timestampTimeoutId); Mainloop.source_remove(this._timestampTimeoutId);
this._timestampTimeoutId = 0; this._timestampTimeoutId = 0;
this.parent(reason); super.destroy(reason);
}, }
/** /**
* appendMessage: * appendMessage:
@ -700,7 +692,7 @@ var ChatNotification = new Lang.Class({
styles: styles, styles: styles,
timestamp: message.timestamp, timestamp: message.timestamp,
noTimestamp: noTimestamp }); noTimestamp: noTimestamp });
}, }
_filterMessages() { _filterMessages() {
if (this.messages.length < 1) if (this.messages.length < 1)
@ -725,7 +717,7 @@ var ChatNotification = new Lang.Class({
for (let i = 0; i < expired.length; i++) for (let i = 0; i < expired.length; i++)
this.emit('message-removed', expired[i]); this.emit('message-removed', expired[i]);
} }
}, }
/** /**
* _append: * _append:
@ -773,7 +765,7 @@ var ChatNotification = new Lang.Class({
} }
this._filterMessages(); this._filterMessages();
}, }
appendTimestamp() { appendTimestamp() {
this._timestampTimeoutId = 0; this._timestampTimeoutId = 0;
@ -784,7 +776,7 @@ var ChatNotification = new Lang.Class({
this._filterMessages(); this._filterMessages();
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
appendAliasChange(oldAlias, newAlias) { appendAliasChange(oldAlias, newAlias) {
oldAlias = GLib.markup_escape_text(oldAlias, -1); oldAlias = GLib.markup_escape_text(oldAlias, -1);
@ -800,7 +792,7 @@ var ChatNotification = new Lang.Class({
this._filterMessages(); this._filterMessages();
} }
}); };
var ChatLineBox = new Lang.Class({ var ChatLineBox = new Lang.Class({
Name: 'ChatLineBox', Name: 'ChatLineBox',
@ -812,12 +804,9 @@ var ChatLineBox = new Lang.Class({
} }
}); });
var ChatNotificationBanner = new Lang.Class({ var ChatNotificationBanner = class extends MessageTray.NotificationBanner {
Name: 'ChatNotificationBanner', constructor(notification) {
Extends: MessageTray.NotificationBanner, super(notification);
_init(notification) {
this.parent(notification);
this._responseEntry = new St.Entry({ style_class: 'chat-response', this._responseEntry = new St.Entry({ style_class: 'chat-response',
x_expand: true, x_expand: true,
@ -880,14 +869,14 @@ var ChatNotificationBanner = new Lang.Class({
for (let i = this.notification.messages.length - 1; i >= 0; i--) for (let i = this.notification.messages.length - 1; i >= 0; i--)
this._addMessage(this.notification.messages[i]); this._addMessage(this.notification.messages[i]);
}, }
_onDestroy() { _onDestroy() {
this.parent(); super._onDestroy();
this.notification.disconnect(this._messageAddedId); this.notification.disconnect(this._messageAddedId);
this.notification.disconnect(this._messageRemovedId); this.notification.disconnect(this._messageRemovedId);
this.notification.disconnect(this._timestampChangedId); this.notification.disconnect(this._timestampChangedId);
}, }
scrollTo(side) { scrollTo(side) {
let adjustment = this._scrollArea.vscroll.adjustment; let adjustment = this._scrollArea.vscroll.adjustment;
@ -895,11 +884,11 @@ var ChatNotificationBanner = new Lang.Class({
adjustment.value = adjustment.lower; adjustment.value = adjustment.lower;
else if (side == St.Side.BOTTOM) else if (side == St.Side.BOTTOM)
adjustment.value = adjustment.upper; adjustment.value = adjustment.upper;
}, }
hide() { hide() {
this.emit('done-displaying'); this.emit('done-displaying');
}, }
_addMessage(message) { _addMessage(message) {
let highlighter = new MessageList.URLHighlighter(message.body, true, true); let highlighter = new MessageList.URLHighlighter(message.body, true, true);
@ -921,7 +910,7 @@ var ChatNotificationBanner = new Lang.Class({
this._messageActors.set(message, lineBox); this._messageActors.set(message, lineBox);
this._updateTimestamp(message); this._updateTimestamp(message);
}, }
_updateTimestamp(message) { _updateTimestamp(message) {
let actor = this._messageActors.get(message); let actor = this._messageActors.get(message);
@ -942,7 +931,7 @@ var ChatNotificationBanner = new Lang.Class({
actor.add_actor(timeLabel); actor.add_actor(timeLabel);
} }
}, }
_onEntryActivated() { _onEntryActivated() {
let text = this._responseEntry.get_text(); let text = this._responseEntry.get_text();
@ -955,7 +944,7 @@ var ChatNotificationBanner = new Lang.Class({
// see Source._messageSent // see Source._messageSent
this._responseEntry.set_text(''); this._responseEntry.set_text('');
this.notification.source.respond(text); this.notification.source.respond(text);
}, }
_composingStopTimeout() { _composingStopTimeout() {
this._composingTimeoutId = 0; this._composingTimeoutId = 0;
@ -963,7 +952,7 @@ var ChatNotificationBanner = new Lang.Class({
this.notification.source.setChatState(Tp.ChannelChatState.PAUSED); this.notification.source.setChatState(Tp.ChannelChatState.PAUSED);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_onEntryChanged() { _onEntryChanged() {
let text = this._responseEntry.get_text(); let text = this._responseEntry.get_text();
@ -990,6 +979,6 @@ var ChatNotificationBanner = new Lang.Class({
this.notification.source.setChatState(Tp.ChannelChatState.ACTIVE); this.notification.source.setChatState(Tp.ChannelChatState.ACTIVE);
} }
} }
}); };
var Component = TelepathyComponent; var Component = TelepathyComponent;

View File

@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
@ -21,15 +20,13 @@ var SortGroup = {
BOTTOM: 2 BOTTOM: 2
}; };
var CtrlAltTabManager = new Lang.Class({ var CtrlAltTabManager = class CtrlAltTabManager {
Name: 'CtrlAltTabManager', constructor() {
_init() {
this._items = []; this._items = [];
this.addGroup(global.window_group, _("Windows"), this.addGroup(global.window_group, _("Windows"),
'focus-windows-symbolic', { sortGroup: SortGroup.TOP, 'focus-windows-symbolic', { sortGroup: SortGroup.TOP,
focusCallback: this._focusWindows.bind(this) }); focusCallback: this._focusWindows.bind(this) });
}, }
addGroup(root, name, icon, params) { addGroup(root, name, icon, params) {
let item = Params.parse(params, { sortGroup: SortGroup.MIDDLE, let item = Params.parse(params, { sortGroup: SortGroup.MIDDLE,
@ -44,7 +41,7 @@ var CtrlAltTabManager = new Lang.Class({
root.connect('destroy', () => { this.removeGroup(root); }); root.connect('destroy', () => { this.removeGroup(root); });
if (root instanceof St.Widget) if (root instanceof St.Widget)
global.focus_manager.add_group(root); global.focus_manager.add_group(root);
}, }
removeGroup(root) { removeGroup(root) {
if (root instanceof St.Widget) if (root instanceof St.Widget)
@ -55,14 +52,14 @@ var CtrlAltTabManager = new Lang.Class({
return; return;
} }
} }
}, }
focusGroup(item, timestamp) { focusGroup(item, timestamp) {
if (item.focusCallback) if (item.focusCallback)
item.focusCallback(timestamp); item.focusCallback(timestamp);
else else
item.root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); item.root.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}, }
// Sort the items into a consistent order; panel first, tray last, // Sort the items into a consistent order; panel first, tray last,
// and everything else in between, sorted by X coordinate, so that // 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(); [bx, y] = b.proxy.get_transformed_position();
return ax - bx; return ax - bx;
}, }
popup(backward, binding, mask) { popup(backward, binding, mask) {
// Start with the set of focus groups that are currently mapped // Start with the set of focus groups that are currently mapped
@ -130,22 +127,20 @@ var CtrlAltTabManager = new Lang.Class({
this._popup = null; this._popup = null;
}); });
} }
}, }
_focusWindows(timestamp) { _focusWindows(timestamp) {
global.display.focus_default_window(timestamp); global.display.focus_default_window(timestamp);
} }
}); };
var CtrlAltTabPopup = new Lang.Class({ var CtrlAltTabPopup =
Name: 'CtrlAltTabPopup', class CtrlAltTabPopup extends SwitcherPopup.SwitcherPopup {
Extends: SwitcherPopup.SwitcherPopup, constructor(items) {
super(items);
_init(items) {
this.parent(items);
this._switcherList = new CtrlAltTabSwitcher(this._items); this._switcherList = new CtrlAltTabSwitcher(this._items);
}, }
_keyPressHandler(keysym, action) { _keyPressHandler(keysym, action) {
if (action == Meta.KeyBindingAction.SWITCH_PANELS) if (action == Meta.KeyBindingAction.SWITCH_PANELS)
@ -160,24 +155,22 @@ var CtrlAltTabPopup = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_finish(time) { _finish(time) {
this.parent(time); super._finish(time);
Main.ctrlAltTabManager.focusGroup(this._items[this._selectedIndex], time); Main.ctrlAltTabManager.focusGroup(this._items[this._selectedIndex], time);
}, }
}); };
var CtrlAltTabSwitcher = new Lang.Class({ var CtrlAltTabSwitcher =
Name: 'CtrlAltTabSwitcher', class CtrlAltTabSwitcher extends SwitcherPopup.SwitcherList {
Extends: SwitcherPopup.SwitcherList, constructor(items) {
super(true);
_init(items) {
this.parent(true);
for (let i = 0; i < items.length; i++) for (let i = 0; i < items.length; i++)
this._addIcon(items[i]); this._addIcon(items[i]);
}, }
_addIcon(item) { _addIcon(item) {
let box = new St.BoxLayout({ style_class: 'alt-tab-app', let box = new St.BoxLayout({ style_class: 'alt-tab-app',
@ -195,4 +188,4 @@ var CtrlAltTabSwitcher = new Lang.Class({
this.addItem(box, text); this.addItem(box, text);
} }
}); };

View File

@ -347,10 +347,8 @@ var DashActor = new Lang.Class({
const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ]; const baseIconSizes = [ 16, 22, 24, 32, 48, 64 ];
var Dash = new Lang.Class({ var Dash = class Dash {
Name: 'Dash', constructor() {
_init() {
this._maxHeight = -1; this._maxHeight = -1;
this.iconSize = 64; this.iconSize = 64;
this._shownInitially = false; this._shownInitially = false;
@ -407,7 +405,7 @@ var Dash = new Lang.Class({
// Translators: this is the name of the dock/favorites area on // Translators: this is the name of the dock/favorites area on
// the left of the overview // the left of the overview
Main.ctrlAltTabManager.addGroup(this.actor, _("Dash"), 'user-bookmarks-symbolic'); Main.ctrlAltTabManager.addGroup(this.actor, _("Dash"), 'user-bookmarks-symbolic');
}, }
_onDragBegin() { _onDragBegin() {
this._dragCancelled = false; this._dragCancelled = false;
@ -421,26 +419,26 @@ var Dash = new Lang.Class({
this._box.insert_child_at_index(this._emptyDropTarget, 0); this._box.insert_child_at_index(this._emptyDropTarget, 0);
this._emptyDropTarget.show(true); this._emptyDropTarget.show(true);
} }
}, }
_onDragCancelled() { _onDragCancelled() {
this._dragCancelled = true; this._dragCancelled = true;
this._endDrag(); this._endDrag();
}, }
_onDragEnd() { _onDragEnd() {
if (this._dragCancelled) if (this._dragCancelled)
return; return;
this._endDrag(); this._endDrag();
}, }
_endDrag() { _endDrag() {
this._clearDragPlaceholder(); this._clearDragPlaceholder();
this._clearEmptyDropTarget(); this._clearEmptyDropTarget();
this._showAppsIcon.setDragApp(null); this._showAppsIcon.setDragApp(null);
DND.removeDragMonitor(this._dragMonitor); DND.removeDragMonitor(this._dragMonitor);
}, }
_onDragMotion(dragEvent) { _onDragMotion(dragEvent) {
let app = getAppFromSource(dragEvent.source); let app = getAppFromSource(dragEvent.source);
@ -459,18 +457,18 @@ var Dash = new Lang.Class({
this._showAppsIcon.setDragApp(null); this._showAppsIcon.setDragApp(null);
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
}, }
_appIdListToHash(apps) { _appIdListToHash(apps) {
let ids = {}; let ids = {};
for (let i = 0; i < apps.length; i++) for (let i = 0; i < apps.length; i++)
ids[apps[i].get_id()] = apps[i]; ids[apps[i].get_id()] = apps[i];
return ids; return ids;
}, }
_queueRedisplay() { _queueRedisplay() {
Main.queueDeferredWork(this._workId); Main.queueDeferredWork(this._workId);
}, }
_hookUpLabel(item, appIcon) { _hookUpLabel(item, appIcon) {
item.child.connect('notify::hover', () => { item.child.connect('notify::hover', () => {
@ -490,7 +488,7 @@ var Dash = new Lang.Class({
this._syncLabel(item, appIcon); this._syncLabel(item, appIcon);
}); });
} }
}, }
_createAppItem(app) { _createAppItem(app) {
let appIcon = new AppDisplay.AppIcon(app, let appIcon = new AppDisplay.AppIcon(app,
@ -524,7 +522,7 @@ var Dash = new Lang.Class({
this._hookUpLabel(item, appIcon); this._hookUpLabel(item, appIcon);
return item; return item;
}, }
_itemMenuStateChanged(item, opened) { _itemMenuStateChanged(item, opened) {
// When the menu closes, it calls sync_hover, which means // When the menu closes, it calls sync_hover, which means
@ -537,7 +535,7 @@ var Dash = new Lang.Class({
item.hideLabel(); item.hideLabel();
} }
}, }
_syncLabel(item, appIcon) { _syncLabel(item, appIcon) {
let shouldShow = appIcon ? appIcon.shouldShowTooltip() : item.child.get_hover(); 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'); GLib.Source.set_name_by_id(this._resetHoverTimeoutId, '[gnome-shell] this._labelShowing');
} }
} }
}, }
_adjustIconSize() { _adjustIconSize() {
// For the icon size, we only consider children which are "proper" // For the icon size, we only consider children which are "proper"
@ -663,7 +661,7 @@ var Dash = new Lang.Class({
transition: 'easeOutQuad', transition: 'easeOutQuad',
}); });
} }
}, }
_redisplay() { _redisplay() {
let favorites = AppFavorites.getAppFavorites().getFavoriteMap(); 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 // Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=692744
// Without it, StBoxLayout may use a stale size cache // Without it, StBoxLayout may use a stale size cache
this._box.queue_relayout(); this._box.queue_relayout();
}, }
_clearDragPlaceholder() { _clearDragPlaceholder() {
if (this._dragPlaceholder) { if (this._dragPlaceholder) {
@ -804,14 +802,14 @@ var Dash = new Lang.Class({
this._dragPlaceholder = null; this._dragPlaceholder = null;
} }
this._dragPlaceholderPos = -1; this._dragPlaceholderPos = -1;
}, }
_clearEmptyDropTarget() { _clearEmptyDropTarget() {
if (this._emptyDropTarget) { if (this._emptyDropTarget) {
this._emptyDropTarget.animateOutAndDestroy(); this._emptyDropTarget.animateOutAndDestroy();
this._emptyDropTarget = null; this._emptyDropTarget = null;
} }
}, }
handleDragOver(source, actor, x, y, time) { handleDragOver(source, actor, x, y, time) {
let app = getAppFromSource(source); let app = getAppFromSource(source);
@ -888,7 +886,7 @@ var Dash = new Lang.Class({
return DND.DragMotionResult.MOVE_DROP; return DND.DragMotionResult.MOVE_DROP;
return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.COPY_DROP;
}, }
// Draggable target interface // Draggable target interface
acceptDrop(source, actor, x, y, time) { acceptDrop(source, actor, x, y, time) {
@ -938,6 +936,5 @@ var Dash = new Lang.Class({
return true; return true;
} }
}); };
Signals.addSignalMethods(Dash.prototype); Signals.addSignalMethods(Dash.prototype);

View File

@ -31,10 +31,8 @@ function _isToday(date) {
now.getDate() == date.getDate(); now.getDate() == date.getDate();
} }
var TodayButton = new Lang.Class({ var TodayButton = class TodayButton {
Name: 'TodayButton', constructor(calendar) {
_init(calendar) {
// Having the ability to go to the current date if the user is already // 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 // on the current date can be confusing. So don't make the button reactive
// until the selected date changes. // until the selected date changes.
@ -63,7 +61,7 @@ var TodayButton = new Lang.Class({
// current date. // current date.
this.actor.reactive = !_isToday(date) this.actor.reactive = !_isToday(date)
}); });
}, }
setDate(date) { setDate(date) {
this._dayLabel.set_text(date.toLocaleFormat('%A')); 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")); dateFormat = Shell.util_translate_time_string (N_("%A %B %e %Y"));
this.actor.accessible_name = date.toLocaleFormat(dateFormat); this.actor.accessible_name = date.toLocaleFormat(dateFormat);
} }
}); };
var WorldClocksSection = new Lang.Class({ var WorldClocksSection = class WorldClocksSection {
Name: 'WorldClocksSection', constructor() {
_init() {
this._clock = new GnomeDesktop.WallClock(); this._clock = new GnomeDesktop.WallClock();
this._clockNotifyId = 0; this._clockNotifyId = 0;
@ -118,11 +114,11 @@ var WorldClocksSection = new Lang.Class({
this._clockAppMon.watchSetting('world-clocks', this._clockAppMon.watchSetting('world-clocks',
this._clocksChanged.bind(this)); this._clocksChanged.bind(this));
this._sync(); this._sync();
}, }
_sync() { _sync() {
this.actor.visible = this._clockAppMon.available; this.actor.visible = this._clockAppMon.available;
}, }
_clocksChanged(settings) { _clocksChanged(settings) {
this._grid.destroy_all_children(); this._grid.destroy_all_children();
@ -187,7 +183,7 @@ var WorldClocksSection = new Lang.Class({
this._clock.disconnect(this._clockNotifyId); this._clock.disconnect(this._clockNotifyId);
this._clockNotifyId = 0; this._clockNotifyId = 0;
} }
}, }
_updateLabels() { _updateLabels() {
for (let i = 0; i < this._locations.length; i++) { 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 }); l.actor.text = Util.formatTime(now, { timeOnly: true });
} }
} }
}); };
var WeatherSection = new Lang.Class({ var WeatherSection = class WeatherSection {
Name: 'WeatherSection', constructor() {
_init() {
this._weatherClient = new Weather.WeatherClient(); this._weatherClient = new Weather.WeatherClient();
this.actor = new St.Button({ style_class: 'weather-button', 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._weatherClient.connect('changed', this._sync.bind(this));
this._sync(); this._sync();
}, }
_getSummary(info, capitalize=false) { _getSummary(info, capitalize=false) {
let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION let options = capitalize ? GWeather.FormatOptions.SENTENCE_CAPITALIZATION
@ -250,7 +244,7 @@ var WeatherSection = new Lang.Class({
let [, sky] = info.get_value_sky(); let [, sky] = info.get_value_sky();
return GWeather.Sky.to_string_full(sky, options); return GWeather.Sky.to_string_full(sky, options);
}, }
_sameSummary(info1, info2) { _sameSummary(info1, info2) {
let [ok1, phenom1, qualifier1] = info1.get_value_conditions(); let [ok1, phenom1, qualifier1] = info1.get_value_conditions();
@ -261,7 +255,7 @@ var WeatherSection = new Lang.Class({
let [, sky1] = info1.get_value_sky(); let [, sky1] = info1.get_value_sky();
let [, sky2] = info2.get_value_sky(); let [, sky2] = info2.get_value_sky();
return sky1 == sky2; return sky1 == sky2;
}, }
_getSummaryText() { _getSummaryText() {
let info = this._weatherClient.info; let info = this._weatherClient.info;
@ -309,7 +303,7 @@ var WeatherSection = new Lang.Class({
return this._getSummary(info, capitalize); return this._getSummary(info, capitalize);
}); });
return String.prototype.format.apply(fmt, summaries); return String.prototype.format.apply(fmt, summaries);
}, }
_getLabelText() { _getLabelText() {
if (!this._weatherClient.hasLocation) if (!this._weatherClient.hasLocation)
@ -328,7 +322,7 @@ var WeatherSection = new Lang.Class({
return _("Go online for weather information"); return _("Go online for weather information");
return _("Weather information is currently unavailable"); return _("Weather information is currently unavailable");
}, }
_sync() { _sync() {
this.actor.visible = this._weatherClient.available; this.actor.visible = this._weatherClient.available;
@ -338,12 +332,10 @@ var WeatherSection = new Lang.Class({
this._conditionsLabel.text = this._getLabelText(); this._conditionsLabel.text = this._getLabelText();
} }
}); };
var MessagesIndicator = new Lang.Class({ var MessagesIndicator = class MessagesIndicator {
Name: 'MessagesIndicator', constructor() {
_init() {
this.actor = new St.Icon({ icon_name: 'message-indicator-symbolic', this.actor = new St.Icon({ icon_name: 'message-indicator-symbolic',
icon_size: 16, icon_size: 16,
visible: false, y_expand: true, visible: false, y_expand: true,
@ -357,18 +349,18 @@ var MessagesIndicator = new Lang.Class({
let sources = Main.messageTray.getSources(); let sources = Main.messageTray.getSources();
sources.forEach(source => { this._onSourceAdded(null, source); }); sources.forEach(source => { this._onSourceAdded(null, source); });
}, }
_onSourceAdded(tray, source) { _onSourceAdded(tray, source) {
source.connect('count-updated', this._updateCount.bind(this)); source.connect('count-updated', this._updateCount.bind(this));
this._sources.push(source); this._sources.push(source);
this._updateCount(); this._updateCount();
}, }
_onSourceRemoved(tray, source) { _onSourceRemoved(tray, source) {
this._sources.splice(this._sources.indexOf(source), 1); this._sources.splice(this._sources.indexOf(source), 1);
this._updateCount(); this._updateCount();
}, }
_updateCount() { _updateCount() {
let count = 0; let count = 0;
@ -377,7 +369,7 @@ var MessagesIndicator = new Lang.Class({
this.actor.visible = (count > 0); this.actor.visible = (count > 0);
} }
}); };
var IndicatorPad = new Lang.Class({ var IndicatorPad = new Lang.Class({
Name: 'IndicatorPad', Name: 'IndicatorPad',
@ -592,5 +584,5 @@ var DateMenuButton = new Lang.Class({
// but the corresponding app (clocks, weather); however we can consider // but the corresponding app (clocks, weather); however we can consider
// that display-specific settings, so re-use "allowSettings" here ... // that display-specific settings, so re-use "allowSettings" here ...
this._displaysSection.visible = Main.sessionMode.allowSettings; this._displaysSection.visible = Main.sessionMode.allowSettings;
} },
}); });

View File

@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const St = imports.gi.St; const St = imports.gi.St;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -74,10 +73,8 @@ function removeDragMonitor(monitor) {
} }
} }
var _Draggable = new Lang.Class({ var _Draggable = class _Draggable {
Name: 'Draggable', constructor(actor, params) {
_init(actor, params) {
params = Params.parse(params, { manualMode: false, params = Params.parse(params, { manualMode: false,
restoreOnSuccess: false, restoreOnSuccess: false,
dragActorMaxSize: undefined, dragActorMaxSize: undefined,
@ -112,7 +109,7 @@ var _Draggable = new Lang.Class({
this._dragCancellable = true; this._dragCancellable = true;
this._eventsGrabbed = false; this._eventsGrabbed = false;
}, }
_onButtonPress(actor, event) { _onButtonPress(actor, event) {
if (event.get_button() != 1) if (event.get_button() != 1)
@ -129,7 +126,7 @@ var _Draggable = new Lang.Class({
this._dragStartY = stageY; this._dragStartY = stageY;
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onTouchEvent(actor, event) { _onTouchEvent(actor, event) {
if (event.type() != Clutter.EventType.TOUCH_BEGIN || if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
@ -149,7 +146,7 @@ var _Draggable = new Lang.Class({
this._dragStartY = stageY; this._dragStartY = stageY;
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_grabDevice(actor) { _grabDevice(actor) {
let manager = Clutter.DeviceManager.get_default(); let manager = Clutter.DeviceManager.get_default();
@ -161,7 +158,7 @@ var _Draggable = new Lang.Class({
pointer.grab (actor); pointer.grab (actor);
this._grabbedDevice = pointer; this._grabbedDevice = pointer;
}, }
_ungrabDevice() { _ungrabDevice() {
if (this._touchSequence) if (this._touchSequence)
@ -171,13 +168,13 @@ var _Draggable = new Lang.Class({
this._touchSequence = null; this._touchSequence = null;
this._grabbedDevice = null; this._grabbedDevice = null;
}, }
_grabActor() { _grabActor() {
this._grabDevice(this.actor); this._grabDevice(this.actor);
this._onEventId = this.actor.connect('event', this._onEventId = this.actor.connect('event',
this._onEvent.bind(this)); this._onEvent.bind(this));
}, }
_ungrabActor() { _ungrabActor() {
if (!this._onEventId) if (!this._onEventId)
@ -186,7 +183,7 @@ var _Draggable = new Lang.Class({
this._ungrabDevice(); this._ungrabDevice();
this.actor.disconnect(this._onEventId); this.actor.disconnect(this._onEventId);
this._onEventId = null; this._onEventId = null;
}, }
_grabEvents() { _grabEvents() {
if (!this._eventsGrabbed) { if (!this._eventsGrabbed) {
@ -194,7 +191,7 @@ var _Draggable = new Lang.Class({
if (this._eventsGrabbed) if (this._eventsGrabbed)
this._grabDevice(_getEventHandlerActor()); this._grabDevice(_getEventHandlerActor());
} }
}, }
_ungrabEvents() { _ungrabEvents() {
if (this._eventsGrabbed) { if (this._eventsGrabbed) {
@ -202,7 +199,7 @@ var _Draggable = new Lang.Class({
Main.popModal(_getEventHandlerActor()); Main.popModal(_getEventHandlerActor());
this._eventsGrabbed = false; this._eventsGrabbed = false;
} }
}, }
_onEvent(actor, event) { _onEvent(actor, event) {
// We intercept BUTTON_RELEASE event to know that the button was released in case we // 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; return Clutter.EVENT_PROPAGATE;
}, }
/** /**
* fakeRelease: * fakeRelease:
@ -259,7 +256,7 @@ var _Draggable = new Lang.Class({
fakeRelease() { fakeRelease() {
this._buttonDown = false; this._buttonDown = false;
this._ungrabActor(); this._ungrabActor();
}, }
/** /**
* startDrag: * startDrag:
@ -395,7 +392,7 @@ var _Draggable = new Lang.Class({
onUpdateScope: this }); onUpdateScope: this });
} }
} }
}, }
_maybeStartDrag(event) { _maybeStartDrag(event) {
let [stageX, stageY] = event.get_coords(); let [stageX, stageY] = event.get_coords();
@ -409,12 +406,12 @@ var _Draggable = new Lang.Class({
} }
return true; return true;
}, }
_pickTargetActor() { _pickTargetActor() {
return this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL, return this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
this._dragX, this._dragY); this._dragX, this._dragY);
}, }
_updateDragHover() { _updateDragHover() {
this._updateHoverId = 0; this._updateHoverId = 0;
@ -471,7 +468,7 @@ var _Draggable = new Lang.Class({
} }
global.display.set_cursor(Meta.Cursor.DND_IN_DRAG); global.display.set_cursor(Meta.Cursor.DND_IN_DRAG);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_queueUpdateDragHover() { _queueUpdateDragHover() {
if (this._updateHoverId) if (this._updateHoverId)
@ -480,7 +477,7 @@ var _Draggable = new Lang.Class({
this._updateHoverId = GLib.idle_add(GLib.PRIORITY_DEFAULT, this._updateHoverId = GLib.idle_add(GLib.PRIORITY_DEFAULT,
this._updateDragHover.bind(this)); this._updateDragHover.bind(this));
GLib.Source.set_name_by_id(this._updateHoverId, '[gnome-shell] this._updateDragHover'); GLib.Source.set_name_by_id(this._updateHoverId, '[gnome-shell] this._updateDragHover');
}, }
_updateDragPosition(event) { _updateDragPosition(event) {
let [stageX, stageY] = event.get_coords(); let [stageX, stageY] = event.get_coords();
@ -491,7 +488,7 @@ var _Draggable = new Lang.Class({
this._queueUpdateDragHover(); this._queueUpdateDragHover();
return true; return true;
}, }
_dragActorDropped(event) { _dragActorDropped(event) {
let [dropX, dropY] = event.get_coords(); let [dropX, dropY] = event.get_coords();
@ -554,7 +551,7 @@ var _Draggable = new Lang.Class({
this._cancelDrag(event.get_time()); this._cancelDrag(event.get_time());
return true; return true;
}, }
_getRestoreLocation() { _getRestoreLocation() {
let x, y, scale; let x, y, scale;
@ -586,7 +583,7 @@ var _Draggable = new Lang.Class({
} }
return [x, y, scale]; return [x, y, scale];
}, }
_cancelDrag(eventTime) { _cancelDrag(eventTime) {
this.emit('drag-cancelled', eventTime); this.emit('drag-cancelled', eventTime);
@ -613,7 +610,7 @@ var _Draggable = new Lang.Class({
scale_y: snapBackScale, scale_y: snapBackScale,
time: SNAP_BACK_ANIMATION_TIME, time: SNAP_BACK_ANIMATION_TIME,
}); });
}, }
_restoreDragActor(eventTime) { _restoreDragActor(eventTime) {
this._dragState = DragState.INIT; this._dragState = DragState.INIT;
@ -626,7 +623,7 @@ var _Draggable = new Lang.Class({
this._animateDragEnd(eventTime, this._animateDragEnd(eventTime,
{ time: REVERT_ANIMATION_TIME }); { time: REVERT_ANIMATION_TIME });
}, }
_animateDragEnd(eventTime, params) { _animateDragEnd(eventTime, params) {
this._animationInProgress = true; this._animationInProgress = true;
@ -639,7 +636,7 @@ var _Draggable = new Lang.Class({
// start the animation // start the animation
Tweener.addTween(this._dragActor, params) Tweener.addTween(this._dragActor, params)
}, }
_finishAnimation() { _finishAnimation() {
if (!this._animationInProgress) if (!this._animationInProgress)
@ -650,7 +647,7 @@ var _Draggable = new Lang.Class({
this._dragComplete(); this._dragComplete();
global.display.set_cursor(Meta.Cursor.DEFAULT); global.display.set_cursor(Meta.Cursor.DEFAULT);
}, }
_onAnimationComplete(dragActor, eventTime) { _onAnimationComplete(dragActor, eventTime) {
if (this._dragOrigParent) { if (this._dragOrigParent) {
@ -664,7 +661,7 @@ var _Draggable = new Lang.Class({
this.emit('drag-end', eventTime, false); this.emit('drag-end', eventTime, false);
this._finishAnimation(); this._finishAnimation();
}, }
_dragComplete() { _dragComplete() {
if (!this._actorDestroyed && this._dragActor) if (!this._actorDestroyed && this._dragActor)
@ -686,8 +683,7 @@ var _Draggable = new Lang.Class({
this._dragState = DragState.INIT; this._dragState = DragState.INIT;
currentDraggable = null; currentDraggable = null;
} }
}); };
Signals.addSignalMethods(_Draggable.prototype); Signals.addSignalMethods(_Draggable.prototype);
/** /**

View File

@ -16,7 +16,6 @@
* along with this program; if not, see <http://www.gnu.org/licenses/>. * along with this program; if not, see <http://www.gnu.org/licenses/>.
*/ */
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const AccountsService = imports.gi.AccountsService; const AccountsService = imports.gi.AccountsService;
@ -235,13 +234,10 @@ function init() {
_endSessionDialog = new EndSessionDialog(); _endSessionDialog = new EndSessionDialog();
} }
var EndSessionDialog = new Lang.Class({ var EndSessionDialog = class EndSessionDialog extends ModalDialog.ModalDialog {
Name: 'EndSessionDialog', constructor() {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'end-session-dialog',
destroyOnClose: false });
_init() {
this.parent({ styleClass: 'end-session-dialog',
destroyOnClose: false });
this._loginManager = LoginManager.getLoginManager(); this._loginManager = LoginManager.getLoginManager();
this._userManager = AccountsService.UserManager.get_default(); this._userManager = AccountsService.UserManager.get_default();
@ -356,12 +352,12 @@ var EndSessionDialog = new Lang.Class({
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(EndSessionDialogIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/SessionManager/EndSessionDialog');
}, }
_onDestroy() { _onDestroy() {
this._user.disconnect(this._userLoadedId); this._user.disconnect(this._userLoadedId);
this._user.disconnect(this._userChangedId); this._user.disconnect(this._userChangedId);
}, }
_sync() { _sync() {
let open = (this.state == ModalDialog.State.OPENING || this.state == ModalDialog.State.OPENED); 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._scrollView.visible = hasApplications || hasSessions;
this._applicationHeader.visible = hasApplications; this._applicationHeader.visible = hasApplications;
this._sessionHeader.visible = hasSessions; this._sessionHeader.visible = hasSessions;
}, }
_updateButtons() { _updateButtons() {
let dialogContent = DialogContent[this._type]; let dialogContent = DialogContent[this._type];
@ -456,20 +452,20 @@ var EndSessionDialog = new Lang.Class({
} }
this.setButtons(buttons); this.setButtons(buttons);
}, }
close(skipSignal) { close(skipSignal) {
this.parent(); super.close();
if (!skipSignal) if (!skipSignal)
this._dbusImpl.emit_signal('Closed', null); this._dbusImpl.emit_signal('Closed', null);
}, }
cancel() { cancel() {
this._stopTimer(); this._stopTimer();
this._dbusImpl.emit_signal('Canceled', null); this._dbusImpl.emit_signal('Canceled', null);
this.close(); this.close();
}, }
_confirm(signal) { _confirm(signal) {
let callback = () => { let callback = () => {
@ -504,11 +500,11 @@ var EndSessionDialog = new Lang.Class({
} else { } else {
this._triggerOfflineUpdateCancel(callback); this._triggerOfflineUpdateCancel(callback);
} }
}, }
_onOpened() { _onOpened() {
this._sync(); this._sync();
}, }
_triggerOfflineUpdateReboot(callback) { _triggerOfflineUpdateReboot(callback) {
this._pkOfflineProxy.TriggerRemote('reboot', (result, error) => { this._pkOfflineProxy.TriggerRemote('reboot', (result, error) => {
@ -517,7 +513,7 @@ var EndSessionDialog = new Lang.Class({
callback(); callback();
}); });
}, }
_triggerOfflineUpdateShutdown(callback) { _triggerOfflineUpdateShutdown(callback) {
this._pkOfflineProxy.TriggerRemote('power-off', (result, error) => { this._pkOfflineProxy.TriggerRemote('power-off', (result, error) => {
@ -526,7 +522,7 @@ var EndSessionDialog = new Lang.Class({
callback(); callback();
}); });
}, }
_triggerOfflineUpdateCancel(callback) { _triggerOfflineUpdateCancel(callback) {
this._pkOfflineProxy.CancelRemote((result, error) => { this._pkOfflineProxy.CancelRemote((result, error) => {
@ -535,7 +531,7 @@ var EndSessionDialog = new Lang.Class({
callback(); callback();
}); });
}, }
_startTimer() { _startTimer() {
let startTime = GLib.get_monotonic_time(); let startTime = GLib.get_monotonic_time();
@ -559,7 +555,7 @@ var EndSessionDialog = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._timerId, '[gnome-shell] this._confirm'); GLib.Source.set_name_by_id(this._timerId, '[gnome-shell] this._confirm');
}, }
_stopTimer() { _stopTimer() {
if (this._timerId > 0) { if (this._timerId > 0) {
@ -568,7 +564,7 @@ var EndSessionDialog = new Lang.Class({
} }
this._secondsLeft = 0; this._secondsLeft = 0;
}, }
_constructListItemForApp(inhibitor, app) { _constructListItemForApp(inhibitor, app) {
let actor = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item', let actor = new St.BoxLayout({ style_class: 'end-session-dialog-app-list-item',
@ -593,7 +589,7 @@ var EndSessionDialog = new Lang.Class({
} }
return actor; return actor;
}, }
_onInhibitorLoaded(inhibitor) { _onInhibitorLoaded(inhibitor) {
if (this._applications.indexOf(inhibitor) < 0) { if (this._applications.indexOf(inhibitor) < 0) {
@ -612,7 +608,7 @@ var EndSessionDialog = new Lang.Class({
} }
this._sync(); this._sync();
}, }
_constructListItemForSession(session) { _constructListItemForSession(session) {
let avatar = new UserWidget.Avatar(session.user, { iconSize: _ITEM_ICON_SIZE }); let avatar = new UserWidget.Avatar(session.user, { iconSize: _ITEM_ICON_SIZE });
@ -642,7 +638,7 @@ var EndSessionDialog = new Lang.Class({
actor.label_actor = nameLabel; actor.label_actor = nameLabel;
return actor; return actor;
}, }
_loadSessions() { _loadSessions() {
this._loginManager.listSessions(result => { this._loginManager.listSessions(result => {
@ -684,7 +680,7 @@ var EndSessionDialog = new Lang.Class({
this._sync(); this._sync();
}); });
}, }
OpenAsync(parameters, invocation) { OpenAsync(parameters, invocation) {
let [type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths] = parameters; let [type, timestamp, totalSecondsToStayOpen, inhibitorObjectPaths] = parameters;
@ -754,9 +750,9 @@ var EndSessionDialog = new Lang.Class({
invocation.return_value(null); invocation.return_value(null);
this.disconnect(signalId); this.disconnect(signalId);
}); });
}, }
Close(parameters, invocation) { Close(parameters, invocation) {
this.close(); this.close();
} }
}); };

View File

@ -1,7 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
@ -183,12 +181,10 @@ function checkForUpdates() {
}); });
} }
var InstallExtensionDialog = new Lang.Class({ var InstallExtensionDialog =
Name: 'InstallExtensionDialog', class InstallExtensionDialog extends ModalDialog.ModalDialog {
Extends: ModalDialog.ModalDialog, constructor(uuid, info, invocation) {
super({ styleClass: 'extension-dialog' });
_init(uuid, info, invocation) {
this.parent({ styleClass: 'extension-dialog' });
this._uuid = uuid; this._uuid = uuid;
this._info = info; this._info = info;
@ -216,12 +212,12 @@ var InstallExtensionDialog = new Lang.Class({
let label = new St.Label({ style_class: 'message-dialog-title headline', let label = new St.Label({ style_class: 'message-dialog-title headline',
text: message }); text: message });
box.add(label); box.add(label);
}, }
_onCancelButtonPressed(button, event) { _onCancelButtonPressed(button, event) {
this.close(); this.close();
this._invocation.return_value(GLib.Variant.new('(s)', ['cancelled'])); this._invocation.return_value(GLib.Variant.new('(s)', ['cancelled']));
}, }
_onInstallButtonPressed(button, event) { _onInstallButtonPressed(button, event) {
let params = { shell_version: Config.PACKAGE_VERSION }; let params = { shell_version: Config.PACKAGE_VERSION };
@ -264,7 +260,7 @@ var InstallExtensionDialog = new Lang.Class({
this.close(); this.close();
} }
}); };
function init() { function init() {
_httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true }); _httpSession = new Soup.SessionAsync({ ssl_use_system_ca_file: true });

View File

@ -22,29 +22,26 @@
*/ */
const Atspi = imports.gi.Atspi; const Atspi = imports.gi.Atspi;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const CARETMOVED = 'object:text-caret-moved'; const CARETMOVED = 'object:text-caret-moved';
const STATECHANGED = 'object:state-changed'; const STATECHANGED = 'object:state-changed';
var FocusCaretTracker = new Lang.Class({ var FocusCaretTracker = class FocusCaretTracker {
Name: 'FocusCaretTracker', constructor() {
_init() {
this._atspiListener = Atspi.EventListener.new(this._onChanged.bind(this)); this._atspiListener = Atspi.EventListener.new(this._onChanged.bind(this));
this._atspiInited = false; this._atspiInited = false;
this._focusListenerRegistered = false; this._focusListenerRegistered = false;
this._caretListenerRegistered = false; this._caretListenerRegistered = false;
}, }
_onChanged(event) { _onChanged(event) {
if (event.type.indexOf(STATECHANGED) == 0) if (event.type.indexOf(STATECHANGED) == 0)
this.emit('focus-changed', event); this.emit('focus-changed', event);
else if (event.type == CARETMOVED) else if (event.type == CARETMOVED)
this.emit('caret-moved', event); this.emit('caret-moved', event);
}, }
_initAtspi() { _initAtspi() {
if (!this._atspiInited && Atspi.init() == 0) { if (!this._atspiInited && Atspi.init() == 0) {
@ -53,7 +50,7 @@ var FocusCaretTracker = new Lang.Class({
} }
return this._atspiInited; return this._atspiInited;
}, }
registerFocusListener() { registerFocusListener() {
if (!this._initAtspi() || this._focusListenerRegistered) if (!this._initAtspi() || this._focusListenerRegistered)
@ -62,7 +59,7 @@ var FocusCaretTracker = new Lang.Class({
this._atspiListener.register(STATECHANGED + ':focused'); this._atspiListener.register(STATECHANGED + ':focused');
this._atspiListener.register(STATECHANGED + ':selected'); this._atspiListener.register(STATECHANGED + ':selected');
this._focusListenerRegistered = true; this._focusListenerRegistered = true;
}, }
registerCaretListener() { registerCaretListener() {
if (!this._initAtspi() || this._caretListenerRegistered) if (!this._initAtspi() || this._caretListenerRegistered)
@ -70,7 +67,7 @@ var FocusCaretTracker = new Lang.Class({
this._atspiListener.register(CARETMOVED); this._atspiListener.register(CARETMOVED);
this._caretListenerRegistered = true; this._caretListenerRegistered = true;
}, }
deregisterFocusListener() { deregisterFocusListener() {
if (!this._focusListenerRegistered) if (!this._focusListenerRegistered)
@ -79,7 +76,7 @@ var FocusCaretTracker = new Lang.Class({
this._atspiListener.deregister(STATECHANGED + ':focused'); this._atspiListener.deregister(STATECHANGED + ':focused');
this._atspiListener.deregister(STATECHANGED + ':selected'); this._atspiListener.deregister(STATECHANGED + ':selected');
this._focusListenerRegistered = false; this._focusListenerRegistered = false;
}, }
deregisterCaretListener() { deregisterCaretListener() {
if (!this._caretListenerRegistered) if (!this._caretListenerRegistered)
@ -88,5 +85,5 @@ var FocusCaretTracker = new Lang.Class({
this._atspiListener.deregister(CARETMOVED); this._atspiListener.deregister(CARETMOVED);
this._caretListenerRegistered = false; this._caretListenerRegistered = false;
} }
}); };
Signals.addSignalMethods(FocusCaretTracker.prototype); Signals.addSignalMethods(FocusCaretTracker.prototype);

View File

@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; 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 // your code just needs to deal with it; you shouldn't adjust behavior directly
// after you call ungrab(), but instead pass an 'onUngrab' callback when you // after you call ungrab(), but instead pass an 'onUngrab' callback when you
// call grab(). // call grab().
var GrabHelper = new Lang.Class({ var GrabHelper = class GrabHelper {
Name: 'GrabHelper', constructor(owner, params) {
_init(owner, params) {
this._owner = owner; this._owner = owner;
this._modalParams = params; this._modalParams = params;
@ -59,7 +56,7 @@ var GrabHelper = new Lang.Class({
this._ignoreUntilRelease = false; this._ignoreUntilRelease = false;
this._modalCount = 0; this._modalCount = 0;
}, }
// addActor: // addActor:
// @actor: an actor // @actor: an actor
@ -71,7 +68,7 @@ var GrabHelper = new Lang.Class({
this.removeActor(actor); this.removeActor(actor);
}); });
this._actors.push(actor); this._actors.push(actor);
}, }
// removeActor: // removeActor:
// @actor: an actor // @actor: an actor
@ -86,7 +83,7 @@ var GrabHelper = new Lang.Class({
actor.disconnect(actor.__grabHelperDestroyId); actor.disconnect(actor.__grabHelperDestroyId);
delete actor.__grabHelperDestroyId; delete actor.__grabHelperDestroyId;
} }
}, }
_isWithinGrabbedActor(actor) { _isWithinGrabbedActor(actor) {
let currentActor = this.currentGrab.actor; let currentActor = this.currentGrab.actor;
@ -98,19 +95,19 @@ var GrabHelper = new Lang.Class({
actor = actor.get_parent(); actor = actor.get_parent();
} }
return false; return false;
}, }
get currentGrab() { get currentGrab() {
return this._grabStack[this._grabStack.length - 1] || {}; return this._grabStack[this._grabStack.length - 1] || {};
}, }
get grabbed() { get grabbed() {
return this._grabStack.length > 0; return this._grabStack.length > 0;
}, }
get grabStack() { get grabStack() {
return this._grabStack; return this._grabStack;
}, }
_findStackIndex(actor) { _findStackIndex(actor) {
if (!actor) if (!actor)
@ -121,7 +118,7 @@ var GrabHelper = new Lang.Class({
return i; return i;
} }
return -1; return -1;
}, }
_actorInGrabStack(actor) { _actorInGrabStack(actor) {
while (actor) { while (actor) {
@ -131,11 +128,11 @@ var GrabHelper = new Lang.Class({
actor = actor.get_parent(); actor = actor.get_parent();
} }
return -1; return -1;
}, }
isActorGrabbed(actor) { isActorGrabbed(actor) {
return this._findStackIndex(actor) >= 0; return this._findStackIndex(actor) >= 0;
}, }
// grab: // grab:
// @params: A bunch of parameters, see below // @params: A bunch of parameters, see below
@ -195,7 +192,7 @@ var GrabHelper = new Lang.Class({
} }
return true; return true;
}, }
_takeModalGrab() { _takeModalGrab() {
let firstGrab = (this._modalCount == 0); let firstGrab = (this._modalCount == 0);
@ -208,7 +205,7 @@ var GrabHelper = new Lang.Class({
this._modalCount++; this._modalCount++;
return true; return true;
}, }
_releaseModalGrab() { _releaseModalGrab() {
this._modalCount--; this._modalCount--;
@ -221,7 +218,7 @@ var GrabHelper = new Lang.Class({
Main.popModal(this._owner); Main.popModal(this._owner);
global.sync_pointer(); global.sync_pointer();
}, }
// ignoreRelease: // ignoreRelease:
// //
@ -231,7 +228,7 @@ var GrabHelper = new Lang.Class({
// the next release event. // the next release event.
ignoreRelease() { ignoreRelease() {
this._ignoreUntilRelease = true; this._ignoreUntilRelease = true;
}, }
// ungrab: // ungrab:
// @params: The parameters for the grab; see below. // @params: The parameters for the grab; see below.
@ -274,7 +271,7 @@ var GrabHelper = new Lang.Class({
if (poppedGrab.savedFocus) if (poppedGrab.savedFocus)
poppedGrab.savedFocus.grab_key_focus(); poppedGrab.savedFocus.grab_key_focus();
} }
}, }
onCapturedEvent(event) { onCapturedEvent(event) {
let type = event.type(); let type = event.type();
@ -322,5 +319,5 @@ var GrabHelper = new Lang.Class({
} }
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
}); };

View File

@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const IBus = imports.gi.IBus; const IBus = imports.gi.IBus;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; 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', var DEFAULT_INDEX_LABELS = [ '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0', 'a', 'b', 'c', 'd', 'e', 'f' ]; '9', '0', 'a', 'b', 'c', 'd', 'e', 'f' ];
var CandidateArea = new Lang.Class({ var CandidateArea = class CandidateArea {
Name: 'CandidateArea', constructor() {
_init() {
this.actor = new St.BoxLayout({ vertical: true, this.actor = new St.BoxLayout({ vertical: true,
reactive: true, reactive: true,
visible: false }); visible: false });
@ -74,7 +71,7 @@ var CandidateArea = new Lang.Class({
this._orientation = -1; this._orientation = -1;
this._cursorPosition = 0; this._cursorPosition = 0;
}, }
setOrientation(orientation) { setOrientation(orientation) {
if (this._orientation == orientation) if (this._orientation == orientation)
@ -95,7 +92,7 @@ var CandidateArea = new Lang.Class({
this._previousButton.child.icon_name = 'go-up-symbolic'; this._previousButton.child.icon_name = 'go-up-symbolic';
this._nextButton.child.icon_name = 'go-down-symbolic'; this._nextButton.child.icon_name = 'go-down-symbolic';
} }
}, }
setCandidates(indexes, candidates, cursorPosition, cursorVisible) { setCandidates(indexes, candidates, cursorPosition, cursorVisible) {
for (let i = 0; i < MAX_CANDIDATES_PER_PAGE; ++i) { for (let i = 0; i < MAX_CANDIDATES_PER_PAGE; ++i) {
@ -114,7 +111,7 @@ var CandidateArea = new Lang.Class({
this._cursorPosition = cursorPosition; this._cursorPosition = cursorPosition;
if (cursorVisible) if (cursorVisible)
this._candidateBoxes[cursorPosition].add_style_pseudo_class('selected'); this._candidateBoxes[cursorPosition].add_style_pseudo_class('selected');
}, }
updateButtons(wrapsAround, page, nPages) { updateButtons(wrapsAround, page, nPages) {
if (nPages < 2) { if (nPages < 2) {
@ -124,14 +121,12 @@ var CandidateArea = new Lang.Class({
this._buttonBox.show(); this._buttonBox.show();
this._previousButton.reactive = wrapsAround || page > 0; this._previousButton.reactive = wrapsAround || page > 0;
this._nextButton.reactive = wrapsAround || page < nPages - 1; this._nextButton.reactive = wrapsAround || page < nPages - 1;
}, }
}); };
Signals.addSignalMethods(CandidateArea.prototype); Signals.addSignalMethods(CandidateArea.prototype);
var CandidatePopup = new Lang.Class({ var CandidatePopup = class CandidatePopup {
Name: 'CandidatePopup', constructor() {
_init() {
this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP); this._boxPointer = new BoxPointer.BoxPointer(St.Side.TOP);
this._boxPointer.visible = false; this._boxPointer.visible = false;
this._boxPointer.style_class = 'candidate-popup-boxpointer'; this._boxPointer.style_class = 'candidate-popup-boxpointer';
@ -171,7 +166,7 @@ var CandidatePopup = new Lang.Class({
}); });
this._panelService = null; this._panelService = null;
}, }
setPanelService(panelService) { setPanelService(panelService) {
this._panelService = panelService; this._panelService = panelService;
@ -275,13 +270,13 @@ var CandidatePopup = new Lang.Class({
this._boxPointer.close(BoxPointer.PopupAnimation.NONE); this._boxPointer.close(BoxPointer.PopupAnimation.NONE);
Main.keyboard.resetSuggestions(); Main.keyboard.resetSuggestions();
}); });
}, }
_setDummyCursorGeometry(x, y, w, h) { _setDummyCursorGeometry(x, y, w, h) {
Main.layoutManager.setDummyCursorGeometry(x, y, w, h); Main.layoutManager.setDummyCursorGeometry(x, y, w, h);
if (this._boxPointer.actor.visible) if (this._boxPointer.actor.visible)
this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0); this._boxPointer.setPosition(Main.layoutManager.dummyCursor, 0);
}, }
_updateVisibility() { _updateVisibility() {
let isVisible = (!Main.keyboard.visible && let isVisible = (!Main.keyboard.visible &&
@ -296,7 +291,7 @@ var CandidatePopup = new Lang.Class({
} else { } else {
this._boxPointer.close(BoxPointer.PopupAnimation.NONE); this._boxPointer.close(BoxPointer.PopupAnimation.NONE);
} }
}, }
_setTextAttributes(clutterText, ibusAttrList) { _setTextAttributes(clutterText, ibusAttrList) {
let attr; let attr;
@ -304,4 +299,4 @@ var CandidatePopup = new Lang.Class({
if (attr.get_attr_type() == IBus.AttrType.BACKGROUND) if (attr.get_attr_type() == IBus.AttrType.BACKGROUND)
clutterText.set_selection(attr.get_start_index(), attr.get_end_index()); clutterText.set_selection(attr.get_start_index(), attr.get_end_index());
} }
}); };

View File

@ -6,6 +6,7 @@ const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang; const Lang = imports.lang;
const GObject = imports.gi.GObject;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -155,33 +156,28 @@ var KeyContainer = new Lang.Class({
} }
}); });
var Suggestions = new Lang.Class({ var Suggestions = class {
Name: 'Suggestions', constructor() {
_init() {
this.actor = new St.BoxLayout({ style_class: 'word-suggestions', this.actor = new St.BoxLayout({ style_class: 'word-suggestions',
vertical: false }); vertical: false });
this.actor.show(); this.actor.show();
}, }
add(word, callback) { add(word, callback) {
let button = new St.Button({ label: word }); let button = new St.Button({ label: word });
button.connect('clicked', callback); button.connect('clicked', callback);
this.actor.add(button); this.actor.add(button);
}, }
clear() { clear() {
this.actor.remove_all_children(); this.actor.remove_all_children();
}, }
}); };
Signals.addSignalMethods(Suggestions.prototype); Signals.addSignalMethods(Suggestions.prototype);
var LanguageSelectionPopup = new Lang.Class({ var LanguageSelectionPopup = class extends PopupMenu.PopupMenu {
Name: 'LanguageSelectionPopup', constructor(actor) {
Extends: PopupMenu.PopupMenu, super(actor, 0.5, St.Side.BOTTOM);
_init(actor) {
this.parent(actor, 0.5, St.Side.BOTTOM);
let inputSourceManager = InputSourceManager.getInputSourceManager(); let inputSourceManager = InputSourceManager.getInputSourceManager();
let inputSources = inputSourceManager.inputSources; let inputSources = inputSourceManager.inputSources;
@ -202,7 +198,7 @@ var LanguageSelectionPopup = new Lang.Class({
if (!actor.is_mapped()) if (!actor.is_mapped())
this.close(true); this.close(true);
}); });
}, }
_onCapturedEvent(actor, event) { _onCapturedEvent(actor, event) {
if (event.get_source() == this.actor || if (event.get_source() == this.actor ||
@ -213,35 +209,33 @@ var LanguageSelectionPopup = new Lang.Class({
this.close(true); this.close(true);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
open(animate) { open(animate) {
this.parent(animate); super.open(animate);
this._capturedEventId = global.stage.connect('captured-event', this._capturedEventId = global.stage.connect('captured-event',
this._onCapturedEvent.bind(this)); this._onCapturedEvent.bind(this));
}, }
close(animate) { close(animate) {
this.parent(animate); super.close(animate);
if (this._capturedEventId != 0) { if (this._capturedEventId != 0) {
global.stage.disconnect(this._capturedEventId); global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0; this._capturedEventId = 0;
} }
}, }
destroy() { destroy() {
if (this._capturedEventId != 0) if (this._capturedEventId != 0)
global.stage.disconnect(this._capturedEventId); global.stage.disconnect(this._capturedEventId);
if (this._unmapId != 0) if (this._unmapId != 0)
this.sourceActor.disconnect(this._unmapId); this.sourceActor.disconnect(this._unmapId);
this.parent(); super.destroy();
}, }
}); };
var Key = new Lang.Class({ var Key = class Key {
Name: 'Key', constructor(key) {
_init(key, extendedKeys) {
this.key = key || ""; this.key = key || "";
this.keyButton = this._makeKey(this.key); this.keyButton = this._makeKey(this.key);
@ -260,14 +254,14 @@ var Key = new Lang.Class({
this._capturedEventId = 0; this._capturedEventId = 0;
this._unmapId = 0; this._unmapId = 0;
this._longPress = false; this._longPress = false;
}, }
_onDestroy() { _onDestroy() {
if (this._boxPointer) { if (this._boxPointer) {
this._boxPointer.destroy(); this._boxPointer.destroy();
this._boxPointer = null; this._boxPointer = null;
} }
}, }
_ensureExtendedKeysPopup() { _ensureExtendedKeysPopup() {
if (this._extended_keys.length == 0) 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._boxPointer.actor.add_style_class_name('keyboard-subkeys');
this._getExtendedKeys(); this._getExtendedKeys();
this.keyButton._extended_keys = this._extended_keyboard; this.keyButton._extended_keys = this._extended_keyboard;
}, }
_getKeyval(key) { _getKeyval(key) {
let unicode = String.charCodeAt(key, 0); let unicode = String.charCodeAt(key, 0);
return Gdk.unicode_to_keyval(unicode); return Gdk.unicode_to_keyval(unicode);
}, }
_press(key) { _press(key) {
if (key != this.key || this._extended_keys.length == 0) { if (key != this.key || this._extended_keys.length == 0) {
@ -317,7 +311,7 @@ var Key = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
} }
}, }
_release(key) { _release(key) {
if (this._pressTimeoutId != 0) { if (this._pressTimeoutId != 0) {
@ -331,7 +325,7 @@ var Key = new Lang.Class({
this.emit('released', this._getKeyval(key), key); this.emit('released', this._getKeyval(key), key);
this._hideSubkeys(); this._hideSubkeys();
this._longPress = false; this._longPress = false;
}, }
_onCapturedEvent(actor, event) { _onCapturedEvent(actor, event) {
let type = event.type(); let type = event.type();
@ -348,7 +342,7 @@ var Key = new Lang.Class({
this._hideSubkeys(); this._hideSubkeys();
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_showSubkeys() { _showSubkeys() {
this._boxPointer.open(BoxPointer.PopupAnimation.FULL); this._boxPointer.open(BoxPointer.PopupAnimation.FULL);
@ -358,7 +352,7 @@ var Key = new Lang.Class({
if (!this.keyButton.is_mapped()) if (!this.keyButton.is_mapped())
this._hideSubkeys(); this._hideSubkeys();
}); });
}, }
_hideSubkeys() { _hideSubkeys() {
if (this._boxPointer) if (this._boxPointer)
@ -372,7 +366,7 @@ var Key = new Lang.Class({
this._unmapId = 0; this._unmapId = 0;
} }
this._capturedPress = false; this._capturedPress = false;
}, }
_makeKey(key) { _makeKey(key) {
let label = GLib.markup_escape_text(key, -1); let label = GLib.markup_escape_text(key, -1);
@ -418,7 +412,7 @@ var Key = new Lang.Class({
}); });
return button; return button;
}, }
_getExtendedKeys() { _getExtendedKeys() {
this._extended_keyboard = new St.BoxLayout({ style_class: 'key-container', this._extended_keyboard = new St.BoxLayout({ style_class: 'key-container',
@ -434,35 +428,33 @@ var Key = new Lang.Class({
key.height = this.keyButton.height; key.height = this.keyButton.height;
} }
this._boxPointer.bin.add_actor(this._extended_keyboard); this._boxPointer.bin.add_actor(this._extended_keyboard);
}, }
get subkeys() { get subkeys() {
return this._boxPointer; return this._boxPointer;
}, }
setWidth(width) { setWidth(width) {
this.keyButton.keyWidth = width; this.keyButton.keyWidth = width;
}, }
setLatched(latched) { setLatched(latched) {
if (latched) if (latched)
this.keyButton.add_style_pseudo_class('latched'); this.keyButton.add_style_pseudo_class('latched');
else else
this.keyButton.remove_style_pseudo_class('latched'); this.keyButton.remove_style_pseudo_class('latched');
}, }
}); };
Signals.addSignalMethods(Key.prototype); Signals.addSignalMethods(Key.prototype);
var KeyboardModel = new Lang.Class({ var KeyboardModel = class {
Name: 'KeyboardModel', constructor(groupName) {
_init(groupName) {
try { try {
this._model = this._loadModel(groupName); this._model = this._loadModel(groupName);
} catch (e) { } catch (e) {
this._model = this._loadModel('us'); this._model = this._loadModel('us');
} }
}, }
_loadModel(groupName) { _loadModel(groupName) {
let file = Gio.File.new_for_uri('resource:///org/gnome/shell/osk-layouts/%s.json'.format(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); contents = imports.byteArray.toString(contents);
return JSON.parse(contents); return JSON.parse(contents);
}, }
getLevels() { getLevels() {
return this._model.levels; return this._model.levels;
}, }
getKeysForLevel(levelName) { getKeysForLevel(levelName) {
return this._model.levels.find(level => level == levelName); return this._model.levels.find(level => level == levelName);
} }
}); };
var FocusTracker = new Lang.Class({ var FocusTracker = class {
Name: 'FocusTracker', constructor() {
_init() {
this._currentWindow = null; this._currentWindow = null;
this._rect = null; this._rect = null;
@ -520,15 +510,15 @@ var FocusTracker = new Lang.Class({
this._ibusManager.connect('focus-out', () => { this._ibusManager.connect('focus-out', () => {
this.emit('focus-changed', false); this.emit('focus-changed', false);
}); });
}, }
get currentWindow() { get currentWindow() {
return this._currentWindow; return this._currentWindow;
}, }
_setCurrentWindow(window) { _setCurrentWindow(window) {
this._currentWindow = window; this._currentWindow = window;
}, }
_setCurrentRect(rect) { _setCurrentRect(rect) {
if (this._currentWindow) { if (this._currentWindow) {
@ -546,7 +536,7 @@ var FocusTracker = new Lang.Class({
this._rect = rect; this._rect = rect;
this.emit('position-changed'); this.emit('position-changed');
}, }
getCurrentRect() { getCurrentRect() {
let rect = { x: this._rect.x, y: this._rect.y, let rect = { x: this._rect.x, y: this._rect.y,
@ -560,13 +550,11 @@ var FocusTracker = new Lang.Class({
return rect; return rect;
} }
}); };
Signals.addSignalMethods(FocusTracker.prototype); Signals.addSignalMethods(FocusTracker.prototype);
var Keyboard = new Lang.Class({ var Keyboard = class Keyboard {
Name: 'Keyboard', constructor() {
_init() {
this.actor = null; this.actor = null;
this._focusInExtendedKeys = false; this._focusInExtendedKeys = false;
@ -624,16 +612,16 @@ var Keyboard = new Lang.Class({
this._keyboardRestingId = 0; this._keyboardRestingId = 0;
Main.layoutManager.connect('monitors-changed', this._relayout.bind(this)); Main.layoutManager.connect('monitors-changed', this._relayout.bind(this));
}, }
get visible() { get visible() {
return this._keyboardVisible; return this._keyboardVisible;
}, }
_onFocusPositionChanged(focusTracker) { _onFocusPositionChanged(focusTracker) {
let rect = focusTracker.getCurrentRect(); let rect = focusTracker.getCurrentRect();
this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height); this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height);
}, }
_lastDeviceIsTouchscreen() { _lastDeviceIsTouchscreen() {
if (!this._lastDeviceId) if (!this._lastDeviceId)
@ -646,7 +634,7 @@ var Keyboard = new Lang.Class({
return false; return false;
return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE; return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE;
}, }
_syncEnabled() { _syncEnabled() {
let wasEnabled = this._enabled; let wasEnabled = this._enabled;
@ -662,7 +650,7 @@ var Keyboard = new Lang.Class({
if (!this._enabled && wasEnabled) if (!this._enabled && wasEnabled)
Main.layoutManager.hideKeyboard(true); Main.layoutManager.hideKeyboard(true);
}, }
_destroyKeyboard() { _destroyKeyboard() {
if (this._keyboardNotifyId) if (this._keyboardNotifyId)
@ -681,7 +669,7 @@ var Keyboard = new Lang.Class({
this._languagePopup.destroy(); this._languagePopup.destroy();
this._languagePopup = null; this._languagePopup = null;
} }
}, }
_setupKeyboard() { _setupKeyboard() {
this.actor = new St.BoxLayout({ name: 'keyboard', vertical: true, reactive: true }); 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._focusNotifyId = global.stage.connect('notify::key-focus', this._onKeyFocusChanged.bind(this));
this._relayout(); this._relayout();
}, }
_onKeyFocusChanged() { _onKeyFocusChanged() {
let focus = global.stage.key_focus; 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'); GLib.Source.set_name_by_id(this._showIdleId, '[gnome-shell] this.show');
} }
}, }
_createLayersForGroup(groupName) { _createLayersForGroup(groupName) {
let keyboardModel = new KeyboardModel(groupName); let keyboardModel = new KeyboardModel(groupName);
@ -764,12 +752,12 @@ var Keyboard = new Lang.Class({
layout.hide(); layout.hide();
} }
return layers; return layers;
}, }
_ensureKeysForGroup(group) { _ensureKeysForGroup(group) {
if (!this._groups[group]) if (!this._groups[group])
this._groups[group] = this._createLayersForGroup(group); this._groups[group] = this._createLayersForGroup(group);
}, }
_addRowKeys(keys, layout) { _addRowKeys(keys, layout) {
for (let i = 0; i < keys.length; ++i) { for (let i = 0; i < keys.length; ++i) {
@ -802,7 +790,7 @@ var Keyboard = new Lang.Class({
layout.appendKey(button.actor, button.keyButton.keyWidth); layout.appendKey(button.actor, button.keyButton.keyWidth);
} }
}, }
_popupLanguageMenu(keyActor) { _popupLanguageMenu(keyActor) {
if (this._languagePopup) if (this._languagePopup)
@ -811,7 +799,7 @@ var Keyboard = new Lang.Class({
this._languagePopup = new LanguageSelectionPopup(keyActor); this._languagePopup = new LanguageSelectionPopup(keyActor);
Main.layoutManager.addChrome(this._languagePopup.actor); Main.layoutManager.addChrome(this._languagePopup.actor);
this._languagePopup.open(true); this._languagePopup.open(true);
}, }
_loadDefaultKeys(keys, layout, numLevels, numKeys) { _loadDefaultKeys(keys, layout, numLevels, numKeys) {
let extraButton; let extraButton;
@ -876,14 +864,14 @@ var Keyboard = new Lang.Class({
layout.appendKey(extraButton.actor, extraButton.keyButton.keyWidth); layout.appendKey(extraButton.actor, extraButton.keyButton.keyWidth);
} }
}, }
_setCurrentLevelLatched(layout, latched) { _setCurrentLevelLatched(layout, latched) {
for (let i = 0; layout.shiftKeys[i]; i++) { for (let i = 0; layout.shiftKeys[i]; i++) {
let key = layout.shiftKeys[i]; let key = layout.shiftKeys[i];
key.setLatched(latched); key.setLatched(latched);
} }
}, }
_getDefaultKeysForRow(row, numRows, level) { _getDefaultKeysForRow(row, numRows, level) {
let pre, post; let pre, post;
@ -901,7 +889,7 @@ var Keyboard = new Lang.Class({
} else { } else {
return [null, null]; return [null, null];
} }
}, }
_mergeRowKeys(layout, pre, row, post, numLevels) { _mergeRowKeys(layout, pre, row, post, numLevels) {
if (pre != null) if (pre != null)
@ -911,7 +899,7 @@ var Keyboard = new Lang.Class({
if (post != null) if (post != null)
this._loadDefaultKeys(post, layout, numLevels, row.length); this._loadDefaultKeys(post, layout, numLevels, row.length);
}, }
_loadRows(model, level, numLevels, layout) { _loadRows(model, level, numLevels, layout) {
let rows = model.rows; let rows = model.rows;
@ -920,7 +908,7 @@ var Keyboard = new Lang.Class({
let [pre, post] = this._getDefaultKeysForRow(i, rows.length, level); let [pre, post] = this._getDefaultKeysForRow(i, rows.length, level);
this._mergeRowKeys (layout, pre, rows[i], post, numLevels); this._mergeRowKeys (layout, pre, rows[i], post, numLevels);
} }
}, }
_getGridSlots() { _getGridSlots() {
let numOfHorizSlots = 0, numOfVertSlots; let numOfHorizSlots = 0, numOfVertSlots;
@ -935,7 +923,7 @@ var Keyboard = new Lang.Class({
} }
return [numOfHorizSlots, numOfVertSlots]; return [numOfHorizSlots, numOfVertSlots];
}, }
_relayout() { _relayout() {
let monitor = Main.layoutManager.keyboardMonitor; let monitor = Main.layoutManager.keyboardMonitor;
@ -946,17 +934,17 @@ var Keyboard = new Lang.Class({
let maxHeight = monitor.height / 3; let maxHeight = monitor.height / 3;
this.actor.width = monitor.width; this.actor.width = monitor.width;
this.actor.height = maxHeight; this.actor.height = maxHeight;
}, }
_onGroupChanged() { _onGroupChanged() {
this._ensureKeysForGroup(this._keyboardController.getCurrentGroup()); this._ensureKeysForGroup(this._keyboardController.getCurrentGroup());
this._setActiveLayer(0); this._setActiveLayer(0);
}, }
_onKeyboardGroupsChanged(keyboard) { _onKeyboardGroupsChanged(keyboard) {
this._groups = []; this._groups = [];
this._onGroupChanged(); this._onGroupChanged();
}, }
_onKeyboardStateChanged(controller, state) { _onKeyboardStateChanged(controller, state) {
let enabled; let enabled;
@ -973,7 +961,7 @@ var Keyboard = new Lang.Class({
this.show(Main.layoutManager.focusIndex); this.show(Main.layoutManager.focusIndex);
else else
this.hide(); this.hide();
}, }
_setActiveLayer(activeLevel) { _setActiveLayer(activeLevel) {
let activeGroupName = this._keyboardController.getCurrentGroup(); let activeGroupName = this._keyboardController.getCurrentGroup();
@ -986,20 +974,20 @@ var Keyboard = new Lang.Class({
this._current_page = layers[activeLevel]; this._current_page = layers[activeLevel];
this._current_page.show(); this._current_page.show();
}, }
shouldTakeEvent(event) { shouldTakeEvent(event) {
let actor = event.get_source(); let actor = event.get_source();
return Main.layoutManager.keyboardBox.contains(actor) || return Main.layoutManager.keyboardBox.contains(actor) ||
!!actor._extended_keys || !!actor.extended_key; !!actor._extended_keys || !!actor.extended_key;
}, }
_clearKeyboardRestTimer() { _clearKeyboardRestTimer() {
if (!this._keyboardRestingId) if (!this._keyboardRestingId)
return; return;
GLib.source_remove(this._keyboardRestingId); GLib.source_remove(this._keyboardRestingId);
this._keyboardRestingId = 0; this._keyboardRestingId = 0;
}, }
show(monitor) { show(monitor) {
if (!this._enabled) if (!this._enabled)
@ -1025,7 +1013,7 @@ var Keyboard = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._keyboardRestingId, '[gnome-shell] this._clearKeyboardRestTimer'); GLib.Source.set_name_by_id(this._keyboardRestingId, '[gnome-shell] this._clearKeyboardRestTimer');
}, }
_show(monitor) { _show(monitor) {
if (!this._keyboardRequested) if (!this._keyboardRequested)
@ -1039,7 +1027,7 @@ var Keyboard = new Lang.Class({
this._setAnimationWindow(this._delayedAnimFocusWindow); this._setAnimationWindow(this._delayedAnimFocusWindow);
this._delayedAnimFocusWindow = null; this._delayedAnimFocusWindow = null;
} }
}, }
hide() { hide() {
if (!this._enabled) if (!this._enabled)
@ -1060,7 +1048,7 @@ var Keyboard = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(this._keyboardRestingId, '[gnome-shell] this._clearKeyboardRestTimer'); GLib.Source.set_name_by_id(this._keyboardRestingId, '[gnome-shell] this._clearKeyboardRestTimer');
}, }
_hide() { _hide() {
if (this._keyboardRequested) if (this._keyboardRequested)
@ -1068,7 +1056,7 @@ var Keyboard = new Lang.Class({
Main.layoutManager.hideKeyboard(); Main.layoutManager.hideKeyboard();
this.setCursorLocation(null); this.setCursorLocation(null);
}, }
_hideSubkeys() { _hideSubkeys() {
if (this._subkeysBoxPointer) { if (this._subkeysBoxPointer) {
@ -1080,26 +1068,26 @@ var Keyboard = new Lang.Class({
this._capturedEventId = 0; this._capturedEventId = 0;
} }
this._capturedPress = false; this._capturedPress = false;
}, }
resetSuggestions() { resetSuggestions() {
if (this._suggestions) if (this._suggestions)
this._suggestions.clear(); this._suggestions.clear();
}, }
addSuggestion(text, callback) { addSuggestion(text, callback) {
if (!this._suggestions) if (!this._suggestions)
return; return;
this._suggestions.add(text, callback); this._suggestions.add(text, callback);
this._suggestions.actor.show(); this._suggestions.actor.show();
}, }
_clearShowIdle() { _clearShowIdle() {
if (!this._showIdleId) if (!this._showIdleId)
return; return;
GLib.source_remove(this._showIdleId); GLib.source_remove(this._showIdleId);
this._showIdleId = 0; this._showIdleId = 0;
}, }
_windowSlideAnimationComplete(window, delta) { _windowSlideAnimationComplete(window, delta) {
// Synchronize window and actor positions again. // Synchronize window and actor positions again.
@ -1107,7 +1095,7 @@ var Keyboard = new Lang.Class({
let frameRect = window.get_frame_rect(); let frameRect = window.get_frame_rect();
frameRect.y += delta; frameRect.y += delta;
window.move_frame(true, frameRect.x, frameRect.y); window.move_frame(true, frameRect.x, frameRect.y);
}, }
_animateWindow(window, show) { _animateWindow(window, show) {
let windowActor = window.get_compositor_private(); let windowActor = window.get_compositor_private();
@ -1130,7 +1118,7 @@ var Keyboard = new Lang.Class({
onComplete: this._windowSlideAnimationComplete, onComplete: this._windowSlideAnimationComplete,
onCompleteParams: [window, deltaY] }); onCompleteParams: [window, deltaY] });
} }
}, }
_setAnimationWindow(window) { _setAnimationWindow(window) {
if (this._animFocusedWindow == window) if (this._animFocusedWindow == window)
@ -1142,7 +1130,7 @@ var Keyboard = new Lang.Class({
this._animateWindow(window, true); this._animateWindow(window, true);
this._animFocusedWindow = window; this._animFocusedWindow = window;
}, }
setCursorLocation(window, x, y , w, h) { setCursorLocation(window, x, y , w, h) {
let monitor = Main.layoutManager.keyboardMonitor; let monitor = Main.layoutManager.keyboardMonitor;
@ -1165,14 +1153,11 @@ var Keyboard = new Lang.Class({
} }
this._oskFocusWindow = window; this._oskFocusWindow = window;
}, }
}); };
var KeyboardController = new Lang.Class({ var KeyboardController = class {
Name: 'KeyboardController', constructor() {
_init() {
this.parent();
let deviceManager = Clutter.DeviceManager.get_default(); let deviceManager = Clutter.DeviceManager.get_default();
this._virtualDevice = deviceManager.create_virtual_device(Clutter.InputDeviceType.KEYBOARD_DEVICE); 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) => { Main.inputMethod.connect('input-panel-state', (o, state) => {
this.emit('panel-state', state); this.emit('panel-state', state);
}); });
}, }
_onSourcesModified() { _onSourcesModified() {
this.emit('groups-changed'); this.emit('groups-changed');
}, }
_onSourceChanged(inputSourceManager, oldSource) { _onSourceChanged(inputSourceManager, oldSource) {
let source = inputSourceManager.currentSource; let source = inputSourceManager.currentSource;
this._currentSource = source; this._currentSource = source;
this.emit('active-group', source.id); this.emit('active-group', source.id);
}, }
_onContentPurposeHintsChanged(method) { _onContentPurposeHintsChanged(method) {
let hints = method.content_hints; let hints = method.content_hints;
let purpose = method.content_purpose; let purpose = method.content_purpose;
// XXX: hook numeric/emoji/etc special keyboards // XXX: hook numeric/emoji/etc special keyboards
}, }
getGroups() { getGroups() {
let inputSources = this._inputSourceManager.inputSources; let inputSources = this._inputSourceManager.inputSources;
@ -1219,11 +1204,11 @@ var KeyboardController = new Lang.Class({
} }
return groups; return groups;
}, }
getCurrentGroup() { getCurrentGroup() {
return this._currentSource.xkbId; return this._currentSource.xkbId;
}, }
commitString(string, fromKey) { commitString(string, fromKey) {
if (string == null) if (string == null)
@ -1234,16 +1219,16 @@ var KeyboardController = new Lang.Class({
Main.inputMethod.commit(string); Main.inputMethod.commit(string);
return true; return true;
}, }
keyvalPress(keyval) { keyvalPress(keyval) {
this._virtualDevice.notify_keyval(Clutter.get_current_event_time(), this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
keyval, Clutter.KeyState.PRESSED); keyval, Clutter.KeyState.PRESSED);
}, }
keyvalRelease(keyval) { keyvalRelease(keyval) {
this._virtualDevice.notify_keyval(Clutter.get_current_event_time(), this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
keyval, Clutter.KeyState.RELEASED); keyval, Clutter.KeyState.RELEASED);
}, }
}); };
Signals.addSignalMethods(KeyboardController.prototype); Signals.addSignalMethods(KeyboardController.prototype);

View File

@ -153,21 +153,19 @@ var MonitorConstraint = new Lang.Class({
} }
}); });
var Monitor = new Lang.Class({ var Monitor = class Monitor {
Name: 'Monitor', constructor(index, geometry) {
_init(index, geometry) {
this.index = index; this.index = index;
this.x = geometry.x; this.x = geometry.x;
this.y = geometry.y; this.y = geometry.y;
this.width = geometry.width; this.width = geometry.width;
this.height = geometry.height; this.height = geometry.height;
}, }
get inFullscreen() { get inFullscreen() {
return global.display.get_monitor_in_fullscreen(this.index); return global.display.get_monitor_in_fullscreen(this.index);
} }
}) };
const defaultParams = { const defaultParams = {
trackFullscreen: false, trackFullscreen: false,
@ -1083,10 +1081,8 @@ var LayoutManager = new Lang.Class({
// //
// This class manages a "hot corner" that can toggle switching to // This class manages a "hot corner" that can toggle switching to
// overview. // overview.
var HotCorner = new Lang.Class({ var HotCorner = class HotCorner {
Name: 'HotCorner', constructor(layoutManager, monitor, x, y) {
_init(layoutManager, monitor, x, y) {
// We use this flag to mark the case where the user has entered the // 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 // hot corner and has not left both the hot corner and a surrounding
// guard area (the "environs"). This avoids triggering the hot corner // 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._ripple1);
layoutManager.uiGroup.add_actor(this._ripple2); layoutManager.uiGroup.add_actor(this._ripple2);
layoutManager.uiGroup.add_actor(this._ripple3); layoutManager.uiGroup.add_actor(this._ripple3);
}, }
setBarrierSize(size) { setBarrierSize(size) {
if (this._verticalBarrier) { if (this._verticalBarrier) {
@ -1149,7 +1145,7 @@ var HotCorner = new Lang.Class({
this._pressureBarrier.addBarrier(this._verticalBarrier); this._pressureBarrier.addBarrier(this._verticalBarrier);
this._pressureBarrier.addBarrier(this._horizontalBarrier); this._pressureBarrier.addBarrier(this._horizontalBarrier);
} }
}, }
_setupFallbackCornerIfNeeded(layoutManager) { _setupFallbackCornerIfNeeded(layoutManager) {
if (!global.display.supports_extended_barriers()) { if (!global.display.supports_extended_barriers()) {
@ -1184,7 +1180,7 @@ var HotCorner = new Lang.Class({
this._corner.connect('leave-event', this._corner.connect('leave-event',
this._onCornerLeft.bind(this)); this._onCornerLeft.bind(this));
} }
}, }
destroy() { destroy() {
this.setBarrierSize(0); this.setBarrierSize(0);
@ -1193,7 +1189,7 @@ var HotCorner = new Lang.Class({
if (this.actor) if (this.actor)
this.actor.destroy(); this.actor.destroy();
}, }
_animRipple(ripple, delay, time, startScale, startOpacity, finalScale) { _animRipple(ripple, delay, time, startScale, startOpacity, finalScale) {
// We draw a ripple by using a source image and animating it scaling // We draw a ripple by using a source image and animating it scaling
@ -1223,7 +1219,7 @@ var HotCorner = new Lang.Class({
transition: 'linear', transition: 'linear',
onUpdate() { ripple.opacity = 255 * Math.sqrt(ripple._opacity); }, onUpdate() { ripple.opacity = 255 * Math.sqrt(ripple._opacity); },
onComplete() { ripple.visible = false; } }); onComplete() { ripple.visible = false; } });
}, }
_rippleAnimation() { _rippleAnimation() {
// Show three concentric ripples expanding outwards; the exact // 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._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._ripple2, 0.05, 1.0, 0.0, 0.7, 1.25);
this._animRipple(this._ripple3, 0.35, 1.0, 0.0, 0.3, 1); this._animRipple(this._ripple3, 0.35, 1.0, 0.0, 0.3, 1);
}, }
_toggleOverview() { _toggleOverview() {
if (this._monitor.inFullscreen && !Main.overview.visible) if (this._monitor.inFullscreen && !Main.overview.visible)
@ -1244,7 +1240,7 @@ var HotCorner = new Lang.Class({
this._rippleAnimation(); this._rippleAnimation();
Main.overview.toggle(); Main.overview.toggle();
} }
}, }
handleDragOver(source, actor, x, y, time) { handleDragOver(source, actor, x, y, time) {
if (source != Main.xdndHandler) if (source != Main.xdndHandler)
@ -1253,7 +1249,7 @@ var HotCorner = new Lang.Class({
this._toggleOverview(); this._toggleOverview();
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
}, }
_onCornerEntered() { _onCornerEntered() {
if (!this._entered) { if (!this._entered) {
@ -1261,26 +1257,24 @@ var HotCorner = new Lang.Class({
this._toggleOverview(); this._toggleOverview();
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onCornerLeft(actor, event) { _onCornerLeft(actor, event) {
if (event.get_related() != this.actor) if (event.get_related() != this.actor)
this._entered = false; this._entered = false;
// Consume event, otherwise this will confuse onEnvironsLeft // Consume event, otherwise this will confuse onEnvironsLeft
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onEnvironsLeft(actor, event) { _onEnvironsLeft(actor, event) {
if (event.get_related() != this._corner) if (event.get_related() != this._corner)
this._entered = false; this._entered = false;
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
}); };
var PressureBarrier = new Lang.Class({ var PressureBarrier = class PressureBarrier {
Name: 'PressureBarrier', constructor(threshold, timeout, actionMode) {
_init(threshold, timeout, actionMode) {
this._threshold = threshold; this._threshold = threshold;
this._timeout = timeout; this._timeout = timeout;
this._actionMode = actionMode; this._actionMode = actionMode;
@ -1289,57 +1283,57 @@ var PressureBarrier = new Lang.Class({
this._isTriggered = false; this._isTriggered = false;
this._reset(); this._reset();
}, }
addBarrier(barrier) { addBarrier(barrier) {
barrier._pressureHitId = barrier.connect('hit', this._onBarrierHit.bind(this)); barrier._pressureHitId = barrier.connect('hit', this._onBarrierHit.bind(this));
barrier._pressureLeftId = barrier.connect('left', this._onBarrierLeft.bind(this)); barrier._pressureLeftId = barrier.connect('left', this._onBarrierLeft.bind(this));
this._barriers.push(barrier); this._barriers.push(barrier);
}, }
_disconnectBarrier(barrier) { _disconnectBarrier(barrier) {
barrier.disconnect(barrier._pressureHitId); barrier.disconnect(barrier._pressureHitId);
barrier.disconnect(barrier._pressureLeftId); barrier.disconnect(barrier._pressureLeftId);
}, }
removeBarrier(barrier) { removeBarrier(barrier) {
this._disconnectBarrier(barrier); this._disconnectBarrier(barrier);
this._barriers.splice(this._barriers.indexOf(barrier), 1); this._barriers.splice(this._barriers.indexOf(barrier), 1);
}, }
destroy() { destroy() {
this._barriers.forEach(this._disconnectBarrier.bind(this)); this._barriers.forEach(this._disconnectBarrier.bind(this));
this._barriers = []; this._barriers = [];
}, }
setEventFilter(filter) { setEventFilter(filter) {
this._eventFilter = filter; this._eventFilter = filter;
}, }
_reset() { _reset() {
this._barrierEvents = []; this._barrierEvents = [];
this._currentPressure = 0; this._currentPressure = 0;
this._lastTime = 0; this._lastTime = 0;
}, }
_isHorizontal(barrier) { _isHorizontal(barrier) {
return barrier.y1 == barrier.y2; return barrier.y1 == barrier.y2;
}, }
_getDistanceAcrossBarrier(barrier, event) { _getDistanceAcrossBarrier(barrier, event) {
if (this._isHorizontal(barrier)) if (this._isHorizontal(barrier))
return Math.abs(event.dy); return Math.abs(event.dy);
else else
return Math.abs(event.dx); return Math.abs(event.dx);
}, }
_getDistanceAlongBarrier(barrier, event) { _getDistanceAlongBarrier(barrier, event) {
if (this._isHorizontal(barrier)) if (this._isHorizontal(barrier))
return Math.abs(event.dx); return Math.abs(event.dx);
else else
return Math.abs(event.dy); return Math.abs(event.dy);
}, }
_trimBarrierEvents() { _trimBarrierEvents() {
// Events are guaranteed to be sorted in time order from // 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); this._barrierEvents = this._barrierEvents.slice(firstNewEvent);
}, }
_onBarrierLeft(barrier, event) { _onBarrierLeft(barrier, event) {
barrier._isHit = false; barrier._isHit = false;
@ -1371,13 +1365,13 @@ var PressureBarrier = new Lang.Class({
this._reset(); this._reset();
this._isTriggered = false; this._isTriggered = false;
} }
}, }
_trigger() { _trigger() {
this._isTriggered = true; this._isTriggered = true;
this.emit('trigger'); this.emit('trigger');
this._reset(); this._reset();
}, }
_onBarrierHit(barrier, event) { _onBarrierHit(barrier, event) {
barrier._isHit = true; barrier._isHit = true;
@ -1419,5 +1413,5 @@ var PressureBarrier = new Lang.Class({
if (this._currentPressure >= this._threshold) if (this._currentPressure >= this._threshold)
this._trigger(); this._trigger();
} }
}); };
Signals.addSignalMethods(PressureBarrier.prototype); Signals.addSignalMethods(PressureBarrier.prototype);

View File

@ -91,10 +91,8 @@ var RadialShaderQuad = new Lang.Class({
* @container and will track any changes in its size. You can override * @container and will track any changes in its size. You can override
* this by passing an explicit width and height in @params. * this by passing an explicit width and height in @params.
*/ */
var Lightbox = new Lang.Class({ var Lightbox = class Lightbox {
Name: 'Lightbox', constructor(container, params) {
_init(container, params) {
params = Params.parse(params, { inhibitEvents: false, params = Params.parse(params, { inhibitEvents: false,
width: null, width: null,
height: null, height: null,
@ -137,7 +135,7 @@ var Lightbox = new Lang.Class({
this._actorRemovedSignalId = container.connect('actor-removed', this._actorRemoved.bind(this)); this._actorRemovedSignalId = container.connect('actor-removed', this._actorRemoved.bind(this));
this._highlighted = null; this._highlighted = null;
}, }
_actorAdded(container, newChild) { _actorAdded(container, newChild) {
let children = this._container.get_children(); let children = this._container.get_children();
@ -159,7 +157,7 @@ var Lightbox = new Lang.Class({
if (prevChild != -1) // paranoia if (prevChild != -1) // paranoia
this._children.splice(prevChild + 1, 0, newChild); this._children.splice(prevChild + 1, 0, newChild);
} }
}, }
show(fadeInTime) { show(fadeInTime) {
fadeInTime = fadeInTime || 0; fadeInTime = fadeInTime || 0;
@ -189,7 +187,7 @@ var Lightbox = new Lang.Class({
} }
this.actor.show(); this.actor.show();
}, }
hide(fadeOutTime) { hide(fadeOutTime) {
fadeOutTime = fadeOutTime || 0; fadeOutTime = fadeOutTime || 0;
@ -217,7 +215,7 @@ var Lightbox = new Lang.Class({
} }
}); });
} }
}, }
_actorRemoved(container, child) { _actorRemoved(container, child) {
let index = this._children.indexOf(child); let index = this._children.indexOf(child);
@ -226,7 +224,7 @@ var Lightbox = new Lang.Class({
if (child == this._highlighted) if (child == this._highlighted)
this._highlighted = null; this._highlighted = null;
}, }
/** /**
* highlight: * highlight:
@ -257,7 +255,7 @@ var Lightbox = new Lang.Class({
} }
this._highlighted = window; this._highlighted = window;
}, }
/** /**
* destroy: * destroy:
@ -266,7 +264,7 @@ var Lightbox = new Lang.Class({
*/ */
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
/** /**
* _onDestroy: * _onDestroy:
@ -280,5 +278,5 @@ var Lightbox = new Lang.Class({
this.highlight(null); this.highlight(null);
} }
}); };
Signals.addSignalMethods(Lightbox.prototype); Signals.addSignalMethods(Lightbox.prototype);

View File

@ -62,14 +62,12 @@ function _getAutoCompleteGlobalKeywords() {
return keywords.concat(windowProperties).concat(headerProperties); return keywords.concat(windowProperties).concat(headerProperties);
} }
var AutoComplete = new Lang.Class({ var AutoComplete = class AutoComplete {
Name: 'AutoComplete', constructor(entry) {
_init(entry) {
this._entry = entry; this._entry = entry;
this._entry.connect('key-press-event', this._entryKeyPressEvent.bind(this)); this._entry.connect('key-press-event', this._entryKeyPressEvent.bind(this));
this._lastTabTime = global.get_current_time(); this._lastTabTime = global.get_current_time();
}, }
_processCompletionRequest(event) { _processCompletionRequest(event) {
if (event.completions.length == 0) { if (event.completions.length == 0) {
@ -91,7 +89,7 @@ var AutoComplete = new Lang.Class({
} else if (event.completions.length > 1 && event.tabType === 'double') { } else if (event.completions.length > 1 && event.tabType === 'double') {
this.emit('suggest', { completions: event.completions}); this.emit('suggest', { completions: event.completions});
} }
}, }
_entryKeyPressEvent(actor, event) { _entryKeyPressEvent(actor, event) {
let cursorPos = this._entry.clutter_text.get_cursor_position(); let cursorPos = this._entry.clutter_text.get_cursor_position();
@ -114,7 +112,7 @@ var AutoComplete = new Lang.Class({
this._lastTabTime = currTime; this._lastTabTime = currTime;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
// Insert characters of text not already included in head at cursor position. i.e., if text="abc" and head="a", // 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 // 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); this._entry.clutter_text.insert_text(additionalCompletionText, cursorPos);
} }
}); };
Signals.addSignalMethods(AutoComplete.prototype); Signals.addSignalMethods(AutoComplete.prototype);
var Notebook = new Lang.Class({ var Notebook = class Notebook {
Name: 'Notebook', constructor() {
_init() {
this.actor = new St.BoxLayout({ vertical: true }); this.actor = new St.BoxLayout({ vertical: true });
this.tabControls = new St.BoxLayout({ style_class: 'labels' }); this.tabControls = new St.BoxLayout({ style_class: 'labels' });
this._selectedIndex = -1; this._selectedIndex = -1;
this._tabs = []; this._tabs = [];
}, }
appendPage(name, child) { appendPage(name, child) {
let labelBox = new St.BoxLayout({ style_class: 'notebook-tab', let labelBox = new St.BoxLayout({ style_class: 'notebook-tab',
@ -171,7 +167,7 @@ var Notebook = new Lang.Class({
if (this._selectedIndex == -1) if (this._selectedIndex == -1)
this.selectIndex(0); this.selectIndex(0);
}, }
_unselect() { _unselect() {
if (this._selectedIndex < 0) if (this._selectedIndex < 0)
@ -180,7 +176,7 @@ var Notebook = new Lang.Class({
tabData.labelBox.remove_style_pseudo_class('selected'); tabData.labelBox.remove_style_pseudo_class('selected');
tabData.scrollView.hide(); tabData.scrollView.hide();
this._selectedIndex = -1; this._selectedIndex = -1;
}, }
selectIndex(index) { selectIndex(index) {
if (index == this._selectedIndex) if (index == this._selectedIndex)
@ -202,7 +198,7 @@ var Notebook = new Lang.Class({
tabData.scrollView.show(); tabData.scrollView.show();
this._selectedIndex = index; this._selectedIndex = index;
this.emit('selection', tabData.child); this.emit('selection', tabData.child);
}, }
selectChild(child) { selectChild(child) {
if (child == null) if (child == null)
@ -216,26 +212,26 @@ var Notebook = new Lang.Class({
} }
} }
} }
}, }
scrollToBottom(index) { scrollToBottom(index) {
let tabData = this._tabs[index]; let tabData = this._tabs[index];
tabData._scrollToBottom = true; tabData._scrollToBottom = true;
}, }
_onAdjustValueChanged(tabData) { _onAdjustValueChanged(tabData) {
let vAdjust = tabData.scrollView.vscroll.adjustment; let vAdjust = tabData.scrollView.vscroll.adjustment;
if (vAdjust.value < (vAdjust.upper - vAdjust.lower - 0.5)) if (vAdjust.value < (vAdjust.upper - vAdjust.lower - 0.5))
tabData._scrolltoBottom = false; tabData._scrolltoBottom = false;
}, }
_onAdjustScopeChanged(tabData) { _onAdjustScopeChanged(tabData) {
if (!tabData._scrollToBottom) if (!tabData._scrollToBottom)
return; return;
let vAdjust = tabData.scrollView.vscroll.adjustment; let vAdjust = tabData.scrollView.vscroll.adjustment;
vAdjust.value = vAdjust.upper - vAdjust.page_size; vAdjust.value = vAdjust.upper - vAdjust.page_size;
}, }
nextTab() { nextTab() {
let nextIndex = this._selectedIndex; let nextIndex = this._selectedIndex;
@ -244,7 +240,7 @@ var Notebook = new Lang.Class({
} }
this.selectIndex(nextIndex); this.selectIndex(nextIndex);
}, }
prevTab() { prevTab() {
let prevIndex = this._selectedIndex; let prevIndex = this._selectedIndex;
@ -254,7 +250,7 @@ var Notebook = new Lang.Class({
this.selectIndex(prevIndex); this.selectIndex(prevIndex);
} }
}); };
Signals.addSignalMethods(Notebook.prototype); Signals.addSignalMethods(Notebook.prototype);
function objectToString(o) { function objectToString(o) {
@ -266,10 +262,8 @@ function objectToString(o) {
} }
} }
var ObjLink = new Lang.Class({ var ObjLink = class ObjLink {
Name: 'ObjLink', constructor(lookingGlass, o, title) {
_init(lookingGlass, o, title) {
let text; let text;
if (title) if (title)
text = title; text = title;
@ -286,17 +280,15 @@ var ObjLink = new Lang.Class({
this.actor.connect('clicked', this._onClicked.bind(this)); this.actor.connect('clicked', this._onClicked.bind(this));
this._lookingGlass = lookingGlass; this._lookingGlass = lookingGlass;
}, }
_onClicked(link) { _onClicked(link) {
this._lookingGlass.inspectObject(this._obj, this.actor); this._lookingGlass.inspectObject(this._obj, this.actor);
} }
}); };
var Result = new Lang.Class({ var Result = class Result {
Name: 'Result', constructor(lookingGlass, command, o, index) {
_init(lookingGlass, command, o, index) {
this.index = index; this.index = index;
this.o = o; this.o = o;
@ -314,12 +306,10 @@ var Result = new Lang.Class({
let objLink = new ObjLink(this._lookingGlass, o); let objLink = new ObjLink(this._lookingGlass, o);
box.add(objLink.actor); box.add(objLink.actor);
} }
}); };
var WindowList = new Lang.Class({ var WindowList = class WindowList {
Name: 'WindowList', constructor(lookingGlass) {
_init(lookingGlass) {
this.actor = new St.BoxLayout({ name: 'Windows', vertical: true, style: 'spacing: 8px' }); this.actor = new St.BoxLayout({ name: 'Windows', vertical: true, style: 'spacing: 8px' });
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
this._updateId = Main.initializeDeferredWork(this.actor, this._updateWindowList.bind(this)); 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)); tracker.connect('tracked-windows-changed', this._updateWindowList.bind(this));
this._lookingGlass = lookingGlass; this._lookingGlass = lookingGlass;
}, }
_updateWindowList() { _updateWindowList() {
this.actor.destroy_all_children(); this.actor.destroy_all_children();
@ -361,13 +351,11 @@ var WindowList = new Lang.Class({
} }
} }
} }
}); };
Signals.addSignalMethods(WindowList.prototype); Signals.addSignalMethods(WindowList.prototype);
var ObjInspector = new Lang.Class({ var ObjInspector = class ObjInspector {
Name: 'ObjInspector', constructor(lookingGlass) {
_init(lookingGlass) {
this._obj = null; this._obj = null;
this._previousObj = null; this._previousObj = null;
@ -382,7 +370,7 @@ var ObjInspector = new Lang.Class({
this.actor.add_actor(this._container); this.actor.add_actor(this._container);
this._lookingGlass = lookingGlass; this._lookingGlass = lookingGlass;
}, }
selectObject(obj, skipPrevious) { selectObject(obj, skipPrevious) {
if (!skipPrevious) if (!skipPrevious)
@ -436,7 +424,7 @@ var ObjInspector = new Lang.Class({
this._container.add_actor(hbox); this._container.add_actor(hbox);
} }
} }
}, }
open(sourceActor) { open(sourceActor) {
if (this._open) if (this._open)
@ -452,7 +440,7 @@ var ObjInspector = new Lang.Class({
} else { } else {
this.actor.set_scale(1, 1); this.actor.set_scale(1, 1);
} }
}, }
close() { close() {
if (!this._open) if (!this._open)
@ -461,18 +449,18 @@ var ObjInspector = new Lang.Class({
this.actor.hide(); this.actor.hide();
this._previousObj = null; this._previousObj = null;
this._obj = null; this._obj = null;
}, }
_onInsert() { _onInsert() {
let obj = this._obj; let obj = this._obj;
this.close(); this.close();
this._lookingGlass.insertObject(obj); this._lookingGlass.insertObject(obj);
}, }
_onBack() { _onBack() {
this.selectObject(this._previousObj, true); this.selectObject(this._previousObj, true);
} }
}); };
var RedBorderEffect = new Lang.Class({ var RedBorderEffect = new Lang.Class({
Name: 'RedBorderEffect', Name: 'RedBorderEffect',
@ -637,10 +625,8 @@ var Inspector = new Lang.Class({
} }
}); });
var Extensions = new Lang.Class({ var Extensions = class Extensions {
Name: 'Extensions', constructor(lookingGlass) {
_init(lookingGlass) {
this._lookingGlass = lookingGlass; this._lookingGlass = lookingGlass;
this.actor = new St.BoxLayout({ vertical: true, this.actor = new St.BoxLayout({ vertical: true,
name: 'lookingGlassExtensions' }); name: 'lookingGlassExtensions' });
@ -657,7 +643,7 @@ var Extensions = new Lang.Class({
ExtensionSystem.connect('extension-loaded', ExtensionSystem.connect('extension-loaded',
this._loadExtension.bind(this)); this._loadExtension.bind(this));
}, }
_loadExtension(o, uuid) { _loadExtension(o, uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
@ -672,20 +658,20 @@ var Extensions = new Lang.Class({
this._numExtensions ++; this._numExtensions ++;
this._extensionsList.add(extensionDisplay); this._extensionsList.add(extensionDisplay);
}, }
_onViewSource(actor) { _onViewSource(actor) {
let extension = actor._extension; let extension = actor._extension;
let uri = extension.dir.get_uri(); let uri = extension.dir.get_uri();
Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context(0, -1)); Gio.app_info_launch_default_for_uri(uri, global.create_app_launch_context(0, -1));
this._lookingGlass.close(); this._lookingGlass.close();
}, }
_onWebPage(actor) { _onWebPage(actor) {
let extension = actor._extension; let extension = actor._extension;
Gio.app_info_launch_default_for_uri(extension.metadata.url, global.create_app_launch_context(0, -1)); Gio.app_info_launch_default_for_uri(extension.metadata.url, global.create_app_launch_context(0, -1));
this._lookingGlass.close(); this._lookingGlass.close();
}, }
_onViewErrors(actor) { _onViewErrors(actor) {
let extension = actor._extension; let extension = actor._extension;
@ -713,7 +699,7 @@ var Extensions = new Lang.Class({
} }
actor._isShowing = shouldShow; actor._isShowing = shouldShow;
}, }
_stateToString(extensionState) { _stateToString(extensionState) {
switch (extensionState) { switch (extensionState) {
@ -730,7 +716,7 @@ var Extensions = new Lang.Class({
return _("Downloading"); return _("Downloading");
} }
return 'Unknown'; // Not translated, shouldn't appear return 'Unknown'; // Not translated, shouldn't appear
}, }
_createExtensionDisplay(extension) { _createExtensionDisplay(extension) {
let box = new St.BoxLayout({ style_class: 'lg-extension', vertical: true }); let box = new St.BoxLayout({ style_class: 'lg-extension', vertical: true });
@ -778,12 +764,10 @@ var Extensions = new Lang.Class({
return box; return box;
} }
}); };
var LookingGlass = new Lang.Class({ var LookingGlass = class LookingGlass {
Name: 'LookingGlass', constructor() {
_init() {
this._borderPaintTarget = null; this._borderPaintTarget = null;
this._redBorderEffect = new RedBorderEffect(); this._redBorderEffect = new RedBorderEffect();
@ -917,7 +901,7 @@ var LookingGlass = new Lang.Class({
}); });
this._resize(); this._resize();
}, }
_updateFont() { _updateFont() {
let fontName = this._interfaceSettings.get_string('monospace-font-name'); let fontName = this._interfaceSettings.get_string('monospace-font-name');
@ -927,7 +911,7 @@ var LookingGlass = new Lang.Class({
this.actor.style = this.actor.style =
'font-size: ' + fontDesc.get_size() / 1024. + (fontDesc.get_size_is_absolute() ? 'px' : 'pt') + ';' 'font-size: ' + fontDesc.get_size() / 1024. + (fontDesc.get_size_is_absolute() ? 'px' : 'pt') + ';'
+ 'font-family: "' + fontDesc.get_family() + '";'; + 'font-family: "' + fontDesc.get_family() + '";';
}, }
setBorderPaintTarget(obj) { setBorderPaintTarget(obj) {
if (this._borderPaintTarget != null) if (this._borderPaintTarget != null)
@ -935,7 +919,7 @@ var LookingGlass = new Lang.Class({
this._borderPaintTarget = obj; this._borderPaintTarget = obj;
if (this._borderPaintTarget != null) if (this._borderPaintTarget != null)
this._borderPaintTarget.add_effect(this._redBorderEffect); this._borderPaintTarget.add_effect(this._redBorderEffect);
}, }
_pushResult(command, obj) { _pushResult(command, obj) {
let index = this._results.length + this._offset; let index = this._results.length + this._offset;
@ -955,7 +939,7 @@ var LookingGlass = new Lang.Class({
// Scroll to bottom // Scroll to bottom
this._notebook.scrollToBottom(0); this._notebook.scrollToBottom(0);
}, }
_showCompletions(completions) { _showCompletions(completions) {
if (!this._completionActor) { if (!this._completionActor) {
@ -984,7 +968,7 @@ var LookingGlass = new Lang.Class({
opacity: 255 opacity: 255
}); });
} }
}, }
_hideCompletions() { _hideCompletions() {
if (this._completionActor) { if (this._completionActor) {
@ -998,7 +982,7 @@ var LookingGlass = new Lang.Class({
} }
}); });
} }
}, }
_evaluate(command) { _evaluate(command) {
this._history.addItem(command); this._history.addItem(command);
@ -1017,30 +1001,30 @@ var LookingGlass = new Lang.Class({
this._pushResult(command, resultObj); this._pushResult(command, resultObj);
this._entry.text = ''; this._entry.text = '';
}, }
inspect(x, y) { inspect(x, y) {
return global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y); return global.stage.get_actor_at_pos(Clutter.PickMode.REACTIVE, x, y);
}, }
getIt() { getIt() {
return this._it; return this._it;
}, }
getResult(idx) { getResult(idx) {
return this._results[idx - this._offset].o; return this._results[idx - this._offset].o;
}, }
toggle() { toggle() {
if (this._open) if (this._open)
this.close(); this.close();
else else
this.open(); this.open();
}, }
_queueResize() { _queueResize() {
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { this._resize(); }); Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { this._resize(); });
}, }
_resize() { _resize() {
let primary = Main.layoutManager.primaryMonitor; 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_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._objInspector.actor.set_position(this.actor.x + Math.floor(myWidth * 0.1),
this._targetY + Math.floor(myHeight * 0.1)); this._targetY + Math.floor(myHeight * 0.1));
}, }
insertObject(obj) { insertObject(obj) {
this._pushResult('<insert>', obj); this._pushResult('<insert>', obj);
}, }
inspectObject(obj, sourceActor) { inspectObject(obj, sourceActor) {
this._objInspector.open(sourceActor); this._objInspector.open(sourceActor);
this._objInspector.selectObject(obj); this._objInspector.selectObject(obj);
}, }
// Handle key events which are relevant for all tabs of the LookingGlass // Handle key events which are relevant for all tabs of the LookingGlass
_globalKeyPressEvent(actor, event) { _globalKeyPressEvent(actor, event) {
@ -1088,7 +1072,7 @@ var LookingGlass = new Lang.Class({
} }
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
open() { open() {
if (this._open) if (this._open)
@ -1110,7 +1094,7 @@ var LookingGlass = new Lang.Class({
transition: 'easeOutQuad', transition: 'easeOutQuad',
y: this._targetY y: this._targetY
}); });
}, }
close() { close() {
if (!this._open) if (!this._open)
@ -1133,5 +1117,5 @@ var LookingGlass = new Lang.Class({
} }
}); });
} }
}); };
Signals.addSignalMethods(LookingGlass.prototype); Signals.addSignalMethods(LookingGlass.prototype);

View File

@ -7,7 +7,6 @@ const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Signals = imports.signals; const Signals = imports.signals;
@ -53,10 +52,8 @@ const CROSS_HAIRS_CLIP_KEY = 'cross-hairs-clip';
let magDBusService = null; let magDBusService = null;
var Magnifier = new Lang.Class({ var Magnifier = class Magnifier {
Name: 'Magnifier', constructor() {
_init() {
// Magnifier is a manager of ZoomRegions. // Magnifier is a manager of ZoomRegions.
this._zoomRegions = []; this._zoomRegions = [];
@ -84,7 +81,7 @@ var Magnifier = new Lang.Class({
// Export to dbus. // Export to dbus.
magDBusService = new MagnifierDBus.ShellMagnifier(); magDBusService = new MagnifierDBus.ShellMagnifier();
this.setActive(showAtLaunch); this.setActive(showAtLaunch);
}, }
/** /**
* showSystemCursor: * showSystemCursor:
@ -92,7 +89,7 @@ var Magnifier = new Lang.Class({
*/ */
showSystemCursor() { showSystemCursor() {
this._cursorTracker.set_pointer_visible(true); this._cursorTracker.set_pointer_visible(true);
}, }
/** /**
* hideSystemCursor: * hideSystemCursor:
@ -100,7 +97,7 @@ var Magnifier = new Lang.Class({
*/ */
hideSystemCursor() { hideSystemCursor() {
this._cursorTracker.set_pointer_visible(false); this._cursorTracker.set_pointer_visible(false);
}, }
/** /**
* setActive: * setActive:
@ -131,7 +128,7 @@ var Magnifier = new Lang.Class({
// Notify interested parties of this change // Notify interested parties of this change
this.emit('active-changed', activate); this.emit('active-changed', activate);
}, }
/** /**
* isActive: * isActive:
@ -144,7 +141,7 @@ var Magnifier = new Lang.Class({
return false; return false;
else else
return this._zoomRegions[0].isActive(); return this._zoomRegions[0].isActive();
}, }
/** /**
* startTrackingMouse: * startTrackingMouse:
@ -155,7 +152,7 @@ var Magnifier = new Lang.Class({
let interval = 1000 / Clutter.get_default_frame_rate(); let interval = 1000 / Clutter.get_default_frame_rate();
this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this)); this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this));
} }
}, }
/** /**
* stopTrackingMouse: * stopTrackingMouse:
@ -166,7 +163,7 @@ var Magnifier = new Lang.Class({
this._pointerWatch.remove(); this._pointerWatch.remove();
this._pointerWatch = null; this._pointerWatch = null;
}, }
/** /**
* isTrackingMouse: * isTrackingMouse:
@ -174,7 +171,7 @@ var Magnifier = new Lang.Class({
*/ */
isTrackingMouse() { isTrackingMouse() {
return !!this._mouseTrackingId; return !!this._mouseTrackingId;
}, }
/** /**
* scrollToMousePos: * scrollToMousePos:
@ -200,7 +197,7 @@ var Magnifier = new Lang.Class({
this.showSystemCursor(); this.showSystemCursor();
} }
return true; return true;
}, }
/** /**
* createZoomRegion: * createZoomRegion:
@ -229,7 +226,7 @@ var Magnifier = new Lang.Class({
zoomRegion.addCrosshairs(this._crossHairs); zoomRegion.addCrosshairs(this._crossHairs);
return zoomRegion; return zoomRegion;
}, }
/** /**
* addZoomRegion: * addZoomRegion:
@ -243,7 +240,7 @@ var Magnifier = new Lang.Class({
if (!this.isTrackingMouse()) if (!this.isTrackingMouse())
this.startTrackingMouse(); this.startTrackingMouse();
} }
}, }
/** /**
* getZoomRegions: * getZoomRegions:
@ -252,7 +249,7 @@ var Magnifier = new Lang.Class({
*/ */
getZoomRegions() { getZoomRegions() {
return this._zoomRegions; return this._zoomRegions;
}, }
/** /**
* clearAllZoomRegions: * clearAllZoomRegions:
@ -265,7 +262,7 @@ var Magnifier = new Lang.Class({
this._zoomRegions.length = 0; this._zoomRegions.length = 0;
this.stopTrackingMouse(); this.stopTrackingMouse();
this.showSystemCursor(); this.showSystemCursor();
}, }
/** /**
* addCrosshairs: * addCrosshairs:
@ -291,7 +288,7 @@ var Magnifier = new Lang.Class({
this._zoomRegions.forEach ((zoomRegion, index, array) => { this._zoomRegions.forEach ((zoomRegion, index, array) => {
zoomRegion.addCrosshairs(theCrossHairs); zoomRegion.addCrosshairs(theCrossHairs);
}); });
}, }
/** /**
* setCrosshairsVisible: * setCrosshairsVisible:
@ -308,7 +305,7 @@ var Magnifier = new Lang.Class({
if (this._crossHairs) if (this._crossHairs)
this._crossHairs.hide(); this._crossHairs.hide();
} }
}, }
/** /**
* setCrosshairsColor: * setCrosshairsColor:
@ -320,7 +317,7 @@ var Magnifier = new Lang.Class({
let [res, clutterColor] = Clutter.Color.from_string(color); let [res, clutterColor] = Clutter.Color.from_string(color);
this._crossHairs.setColor(clutterColor); this._crossHairs.setColor(clutterColor);
} }
}, }
/** /**
* getCrosshairsColor: * getCrosshairsColor:
@ -334,7 +331,7 @@ var Magnifier = new Lang.Class({
} }
else else
return '#00000000'; return '#00000000';
}, }
/** /**
* setCrosshairsThickness: * setCrosshairsThickness:
@ -345,7 +342,7 @@ var Magnifier = new Lang.Class({
setCrosshairsThickness(thickness) { setCrosshairsThickness(thickness) {
if (this._crossHairs) if (this._crossHairs)
this._crossHairs.setThickness(thickness); this._crossHairs.setThickness(thickness);
}, }
/** /**
* getCrosshairsThickness: * getCrosshairsThickness:
@ -358,7 +355,7 @@ var Magnifier = new Lang.Class({
return this._crossHairs.getThickness(); return this._crossHairs.getThickness();
else else
return 0; return 0;
}, }
/** /**
* setCrosshairsOpacity: * setCrosshairsOpacity:
@ -367,7 +364,7 @@ var Magnifier = new Lang.Class({
setCrosshairsOpacity(opacity) { setCrosshairsOpacity(opacity) {
if (this._crossHairs) if (this._crossHairs)
this._crossHairs.setOpacity(opacity * 255); this._crossHairs.setOpacity(opacity * 255);
}, }
/** /**
* getCrosshairsOpacity: * getCrosshairsOpacity:
@ -378,7 +375,7 @@ var Magnifier = new Lang.Class({
return this._crossHairs.getOpacity() / 255.0; return this._crossHairs.getOpacity() / 255.0;
else else
return 0.0; return 0.0;
}, }
/** /**
* setCrosshairsLength: * setCrosshairsLength:
@ -389,7 +386,7 @@ var Magnifier = new Lang.Class({
setCrosshairsLength(length) { setCrosshairsLength(length) {
if (this._crossHairs) if (this._crossHairs)
this._crossHairs.setLength(length); this._crossHairs.setLength(length);
}, }
/** /**
* getCrosshairsLength: * getCrosshairsLength:
@ -402,7 +399,7 @@ var Magnifier = new Lang.Class({
return this._crossHairs.getLength(); return this._crossHairs.getLength();
else else
return 0; return 0;
}, }
/** /**
* setCrosshairsClip: * setCrosshairsClip:
@ -420,7 +417,7 @@ var Magnifier = new Lang.Class({
if (this._crossHairs) if (this._crossHairs)
this._crossHairs.setClip([0, 0]); this._crossHairs.setClip([0, 0]);
} }
}, }
/** /**
* getCrosshairsClip: * getCrosshairsClip:
@ -434,7 +431,7 @@ var Magnifier = new Lang.Class({
} }
else else
return false; return false;
}, }
//// Private methods //// //// Private methods ////
@ -442,7 +439,7 @@ var Magnifier = new Lang.Class({
Shell.util_cursor_tracker_to_clutter(this._cursorTracker, this._mouseSprite); Shell.util_cursor_tracker_to_clutter(this._cursorTracker, this._mouseSprite);
let [xHot, yHot] = this._cursorTracker.get_hot(); let [xHot, yHot] = this._cursorTracker.get_hot();
this._mouseSprite.set_anchor_point(xHot, yHot); this._mouseSprite.set_anchor_point(xHot, yHot);
}, }
_settingsInit(zoomRegion) { _settingsInit(zoomRegion) {
this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA }); this._appSettings = new Gio.Settings({ schema_id: APPLICATIONS_SCHEMA });
@ -560,7 +557,7 @@ var Magnifier = new Lang.Class({
this.setCrosshairsVisible(showCrosshairs); this.setCrosshairsVisible(showCrosshairs);
return this._appSettings.get_boolean(SHOW_KEY); return this._appSettings.get_boolean(SHOW_KEY);
}, }
_updateScreenPosition() { _updateScreenPosition() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -570,7 +567,7 @@ var Magnifier = new Lang.Class({
if (position != GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN) if (position != GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN)
this._updateLensMode(); this._updateLensMode();
} }
}, }
_updateMagFactor() { _updateMagFactor() {
// Applies only to the first zoom region. // 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)); let magFactor = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
this._zoomRegions[0].setMagFactor(magFactor, magFactor); this._zoomRegions[0].setMagFactor(magFactor, magFactor);
} }
}, }
_updateLensMode() { _updateLensMode() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
if (this._zoomRegions.length) { if (this._zoomRegions.length) {
this._zoomRegions[0].setLensMode(this._settings.get_boolean(LENS_MODE_KEY)); this._zoomRegions[0].setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
} }
}, }
_updateClampMode() { _updateClampMode() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -595,7 +592,7 @@ var Magnifier = new Lang.Class({
!this._settings.get_boolean(CLAMP_MODE_KEY) !this._settings.get_boolean(CLAMP_MODE_KEY)
); );
} }
}, }
_updateMouseTrackingMode() { _updateMouseTrackingMode() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -604,7 +601,7 @@ var Magnifier = new Lang.Class({
this._settings.get_enum(MOUSE_TRACKING_KEY) this._settings.get_enum(MOUSE_TRACKING_KEY)
); );
} }
}, }
_updateFocusTrackingMode() { _updateFocusTrackingMode() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -613,7 +610,7 @@ var Magnifier = new Lang.Class({
this._settings.get_enum(FOCUS_TRACKING_KEY) this._settings.get_enum(FOCUS_TRACKING_KEY)
); );
} }
}, }
_updateCaretTrackingMode() { _updateCaretTrackingMode() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -622,7 +619,7 @@ var Magnifier = new Lang.Class({
this._settings.get_enum(CARET_TRACKING_KEY) this._settings.get_enum(CARET_TRACKING_KEY)
); );
} }
}, }
_updateInvertLightness() { _updateInvertLightness() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -631,7 +628,7 @@ var Magnifier = new Lang.Class({
this._settings.get_boolean(INVERT_LIGHTNESS_KEY) this._settings.get_boolean(INVERT_LIGHTNESS_KEY)
); );
} }
}, }
_updateColorSaturation() { _updateColorSaturation() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -640,7 +637,7 @@ var Magnifier = new Lang.Class({
this._settings.get_double(COLOR_SATURATION_KEY) this._settings.get_double(COLOR_SATURATION_KEY)
); );
} }
}, }
_updateBrightness() { _updateBrightness() {
// Applies only to the first zoom region. // 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); brightness.b = this._settings.get_double(BRIGHT_BLUE_KEY);
this._zoomRegions[0].setBrightness(brightness); this._zoomRegions[0].setBrightness(brightness);
} }
}, }
_updateContrast() { _updateContrast() {
// Applies only to the first zoom region. // Applies only to the first zoom region.
@ -663,13 +660,11 @@ var Magnifier = new Lang.Class({
this._zoomRegions[0].setContrast(contrast); this._zoomRegions[0].setContrast(contrast);
} }
} }
}); };
Signals.addSignalMethods(Magnifier.prototype); Signals.addSignalMethods(Magnifier.prototype);
var ZoomRegion = new Lang.Class({ var ZoomRegion = class ZoomRegion {
Name: 'ZoomRegion', constructor(magnifier, mouseSourceActor) {
_init(magnifier, mouseSourceActor) {
this._magnifier = magnifier; this._magnifier = magnifier;
this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker(); this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
@ -715,7 +710,7 @@ var ZoomRegion = new Lang.Class({
this._updateCaret.bind(this)); this._updateCaret.bind(this));
this._focusCaretTracker.connect('focus-changed', this._focusCaretTracker.connect('focus-changed',
this._updateFocus.bind(this)); this._updateFocus.bind(this));
}, }
_updateFocus(caller, event) { _updateFocus(caller, event) {
let component = event.source.get_component_iface(); 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), [this._xFocus, this._yFocus] = [extents.x + (extents.width / 2),
extents.y + (extents.height / 2)]; extents.y + (extents.height / 2)];
this._centerFromFocusPosition(); this._centerFromFocusPosition();
}, }
_updateCaret(caller, event) { _updateCaret(caller, event) {
let text = event.source.get_text_iface(); 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._xCaret, this._yCaret] = [extents.x, extents.y];
this._centerFromCaretPosition(); this._centerFromCaretPosition();
}, }
/** /**
* setActive: * setActive:
@ -771,7 +766,7 @@ var ZoomRegion = new Lang.Class({
this._syncCaretTracking(); this._syncCaretTracking();
this._syncFocusTracking(); this._syncFocusTracking();
}, }
/** /**
* isActive: * isActive:
@ -779,7 +774,7 @@ var ZoomRegion = new Lang.Class({
*/ */
isActive() { isActive() {
return this._magView != null; return this._magView != null;
}, }
/** /**
* setMagFactor: * setMagFactor:
@ -793,7 +788,7 @@ var ZoomRegion = new Lang.Class({
this._changeROI({ xMagFactor: xMagFactor, this._changeROI({ xMagFactor: xMagFactor,
yMagFactor: yMagFactor, yMagFactor: yMagFactor,
redoCursorTracking: this._followingCursor }); redoCursorTracking: this._followingCursor });
}, }
/** /**
* getMagFactor: * getMagFactor:
@ -804,7 +799,7 @@ var ZoomRegion = new Lang.Class({
*/ */
getMagFactor() { getMagFactor() {
return [this._xMagFactor, this._yMagFactor]; return [this._xMagFactor, this._yMagFactor];
}, }
/** /**
* setMouseTrackingMode * setMouseTrackingMode
@ -814,7 +809,7 @@ var ZoomRegion = new Lang.Class({
if (mode >= GDesktopEnums.MagnifierMouseTrackingMode.NONE && if (mode >= GDesktopEnums.MagnifierMouseTrackingMode.NONE &&
mode <= GDesktopEnums.MagnifierMouseTrackingMode.PUSH) mode <= GDesktopEnums.MagnifierMouseTrackingMode.PUSH)
this._mouseTrackingMode = mode; this._mouseTrackingMode = mode;
}, }
/** /**
* getMouseTrackingMode * getMouseTrackingMode
@ -822,7 +817,7 @@ var ZoomRegion = new Lang.Class({
*/ */
getMouseTrackingMode() { getMouseTrackingMode() {
return this._mouseTrackingMode; return this._mouseTrackingMode;
}, }
/** /**
* setFocusTrackingMode * setFocusTrackingMode
@ -831,7 +826,7 @@ var ZoomRegion = new Lang.Class({
setFocusTrackingMode(mode) { setFocusTrackingMode(mode) {
this._focusTrackingMode = mode; this._focusTrackingMode = mode;
this._syncFocusTracking(); this._syncFocusTracking();
}, }
/** /**
* setCaretTrackingMode * setCaretTrackingMode
@ -840,7 +835,7 @@ var ZoomRegion = new Lang.Class({
setCaretTrackingMode(mode) { setCaretTrackingMode(mode) {
this._caretTrackingMode = mode; this._caretTrackingMode = mode;
this._syncCaretTracking(); this._syncCaretTracking();
}, }
_syncFocusTracking() { _syncFocusTracking() {
let enabled = this._focusTrackingMode != GDesktopEnums.MagnifierFocusTrackingMode.NONE && let enabled = this._focusTrackingMode != GDesktopEnums.MagnifierFocusTrackingMode.NONE &&
@ -850,7 +845,7 @@ var ZoomRegion = new Lang.Class({
this._focusCaretTracker.registerFocusListener(); this._focusCaretTracker.registerFocusListener();
else else
this._focusCaretTracker.deregisterFocusListener(); this._focusCaretTracker.deregisterFocusListener();
}, }
_syncCaretTracking() { _syncCaretTracking() {
let enabled = this._caretTrackingMode != GDesktopEnums.MagnifierCaretTrackingMode.NONE && let enabled = this._caretTrackingMode != GDesktopEnums.MagnifierCaretTrackingMode.NONE &&
@ -860,7 +855,7 @@ var ZoomRegion = new Lang.Class({
this._focusCaretTracker.registerCaretListener(); this._focusCaretTracker.registerCaretListener();
else else
this._focusCaretTracker.deregisterCaretListener(); this._focusCaretTracker.deregisterCaretListener();
}, }
/** /**
* setViewPort * setViewPort
@ -872,7 +867,7 @@ var ZoomRegion = new Lang.Class({
setViewPort(viewPort) { setViewPort(viewPort) {
this._setViewPort(viewPort); this._setViewPort(viewPort);
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.NONE; this._screenPosition = GDesktopEnums.MagnifierScreenPosition.NONE;
}, }
/** /**
* setROI * setROI
@ -890,7 +885,7 @@ var ZoomRegion = new Lang.Class({
yMagFactor: this._viewPortHeight / roi.height, yMagFactor: this._viewPortHeight / roi.height,
xCenter: roi.x + roi.width / 2, xCenter: roi.x + roi.width / 2,
yCenter: roi.y + roi.height / 2 }); yCenter: roi.y + roi.height / 2 });
}, }
/** /**
* getROI: * getROI:
@ -907,7 +902,7 @@ var ZoomRegion = new Lang.Class({
return [this._xCenter - roiWidth / 2, return [this._xCenter - roiWidth / 2,
this._yCenter - roiHeight / 2, this._yCenter - roiHeight / 2,
roiWidth, roiHeight]; roiWidth, roiHeight];
}, }
/** /**
* setLensMode: * setLensMode:
@ -919,7 +914,7 @@ var ZoomRegion = new Lang.Class({
this._lensMode = lensMode; this._lensMode = lensMode;
if (!this._lensMode) if (!this._lensMode)
this.setScreenPosition (this._screenPosition); this.setScreenPosition (this._screenPosition);
}, }
/** /**
* isLensMode: * isLensMode:
@ -928,7 +923,7 @@ var ZoomRegion = new Lang.Class({
*/ */
isLensMode() { isLensMode() {
return this._lensMode; return this._lensMode;
}, }
/** /**
* setClampScrollingAtEdges: * setClampScrollingAtEdges:
@ -940,7 +935,7 @@ var ZoomRegion = new Lang.Class({
this._clampScrollingAtEdges = clamp; this._clampScrollingAtEdges = clamp;
if (clamp) if (clamp)
this._changeROI(); this._changeROI();
}, }
/** /**
* setTopHalf: * setTopHalf:
@ -954,7 +949,7 @@ var ZoomRegion = new Lang.Class({
viewPort.height = global.screen_height/2; viewPort.height = global.screen_height/2;
this._setViewPort(viewPort); this._setViewPort(viewPort);
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.TOP_HALF; this._screenPosition = GDesktopEnums.MagnifierScreenPosition.TOP_HALF;
}, }
/** /**
* setBottomHalf: * setBottomHalf:
@ -968,7 +963,7 @@ var ZoomRegion = new Lang.Class({
viewPort.height = global.screen_height/2; viewPort.height = global.screen_height/2;
this._setViewPort(viewPort); this._setViewPort(viewPort);
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.BOTTOM_HALF; this._screenPosition = GDesktopEnums.MagnifierScreenPosition.BOTTOM_HALF;
}, }
/** /**
* setLeftHalf: * setLeftHalf:
@ -982,7 +977,7 @@ var ZoomRegion = new Lang.Class({
viewPort.height = global.screen_height; viewPort.height = global.screen_height;
this._setViewPort(viewPort); this._setViewPort(viewPort);
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.LEFT_HALF; this._screenPosition = GDesktopEnums.MagnifierScreenPosition.LEFT_HALF;
}, }
/** /**
* setRightHalf: * setRightHalf:
@ -996,7 +991,7 @@ var ZoomRegion = new Lang.Class({
viewPort.height = global.screen_height; viewPort.height = global.screen_height;
this._setViewPort(viewPort); this._setViewPort(viewPort);
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.RIGHT_HALF; this._screenPosition = GDesktopEnums.MagnifierScreenPosition.RIGHT_HALF;
}, }
/** /**
* setFullScreenMode: * setFullScreenMode:
@ -1012,7 +1007,7 @@ var ZoomRegion = new Lang.Class({
this.setViewPort(viewPort); this.setViewPort(viewPort);
this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN; this._screenPosition = GDesktopEnums.MagnifierScreenPosition.FULL_SCREEN;
}, }
/** /**
* setScreenPosition: * setScreenPosition:
@ -1040,7 +1035,7 @@ var ZoomRegion = new Lang.Class({
this.setRightHalf(); this.setRightHalf();
break; break;
} }
}, }
/** /**
* getScreenPosition: * getScreenPosition:
@ -1050,7 +1045,7 @@ var ZoomRegion = new Lang.Class({
*/ */
getScreenPosition() { getScreenPosition() {
return this._screenPosition; return this._screenPosition;
}, }
/** /**
* scrollToMousePos: * scrollToMousePos:
@ -1066,14 +1061,14 @@ var ZoomRegion = new Lang.Class({
// Determine whether the system mouse pointer is over this zoom region. // Determine whether the system mouse pointer is over this zoom region.
return this._isMouseOverRegion(); return this._isMouseOverRegion();
}, }
_clearScrollContentsTimer() { _clearScrollContentsTimer() {
if (this._scrollContentsTimerId != 0) { if (this._scrollContentsTimerId != 0) {
Mainloop.source_remove(this._scrollContentsTimerId); Mainloop.source_remove(this._scrollContentsTimerId);
this._scrollContentsTimerId = 0; this._scrollContentsTimerId = 0;
} }
}, }
_scrollContentsToDelayed(x, y) { _scrollContentsToDelayed(x, y) {
if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) { if (this._pointerIdleMonitor.get_idletime() >= POINTER_REST_TIME) {
@ -1086,7 +1081,7 @@ var ZoomRegion = new Lang.Class({
this._scrollContentsToDelayed(x, y); this._scrollContentsToDelayed(x, y);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
}, }
/** /**
* scrollContentsTo: * scrollContentsTo:
@ -1101,7 +1096,7 @@ var ZoomRegion = new Lang.Class({
this._followingCursor = false; this._followingCursor = false;
this._changeROI({ xCenter: x, this._changeROI({ xCenter: x,
yCenter: y }); yCenter: y });
}, }
/** /**
* addCrosshairs: * addCrosshairs:
@ -1116,7 +1111,7 @@ var ZoomRegion = new Lang.Class({
if (crossHairs && this.isActive()) { if (crossHairs && this.isActive()) {
this._crossHairsActor = crossHairs.addToZoomRegion(this, this._mouseActor); this._crossHairsActor = crossHairs.addToZoomRegion(this, this._mouseActor);
} }
}, }
/** /**
* setInvertLightness: * setInvertLightness:
@ -1127,7 +1122,7 @@ var ZoomRegion = new Lang.Class({
this._invertLightness = flag; this._invertLightness = flag;
if (this._magShaderEffects) if (this._magShaderEffects)
this._magShaderEffects.setInvertLightness(this._invertLightness); this._magShaderEffects.setInvertLightness(this._invertLightness);
}, }
/** /**
* getInvertLightness: * getInvertLightness:
@ -1136,7 +1131,7 @@ var ZoomRegion = new Lang.Class({
*/ */
getInvertLightness() { getInvertLightness() {
return this._invertLightness; return this._invertLightness;
}, }
/** /**
* setColorSaturation: * setColorSaturation:
@ -1149,7 +1144,7 @@ var ZoomRegion = new Lang.Class({
this._colorSaturation = saturation; this._colorSaturation = saturation;
if (this._magShaderEffects) if (this._magShaderEffects)
this._magShaderEffects.setColorSaturation(this._colorSaturation); this._magShaderEffects.setColorSaturation(this._colorSaturation);
}, }
/** /**
* getColorSaturation: * getColorSaturation:
@ -1157,7 +1152,7 @@ var ZoomRegion = new Lang.Class({
*/ */
getColorSaturation() { getColorSaturation() {
return this._colorSaturation; return this._colorSaturation;
}, }
/** /**
* setBrightness: * setBrightness:
@ -1173,7 +1168,7 @@ var ZoomRegion = new Lang.Class({
this._brightness.b = brightness.b; this._brightness.b = brightness.b;
if (this._magShaderEffects) if (this._magShaderEffects)
this._magShaderEffects.setBrightness(this._brightness); this._magShaderEffects.setBrightness(this._brightness);
}, }
/** /**
* setContrast: * setContrast:
@ -1189,7 +1184,7 @@ var ZoomRegion = new Lang.Class({
this._contrast.b = contrast.b; this._contrast.b = contrast.b;
if (this._magShaderEffects) if (this._magShaderEffects)
this._magShaderEffects.setContrast(this._contrast); this._magShaderEffects.setContrast(this._contrast);
}, }
/** /**
* getContrast: * getContrast:
@ -1203,7 +1198,7 @@ var ZoomRegion = new Lang.Class({
contrast.g = this._contrast.g; contrast.g = this._contrast.g;
contrast.b = this._contrast.b; contrast.b = this._contrast.b;
return contrast; return contrast;
}, }
//// Private methods //// //// Private methods ////
@ -1249,7 +1244,7 @@ var ZoomRegion = new Lang.Class({
this._magShaderEffects.setInvertLightness(this._invertLightness); this._magShaderEffects.setInvertLightness(this._invertLightness);
this._magShaderEffects.setBrightness(this._brightness); this._magShaderEffects.setBrightness(this._brightness);
this._magShaderEffects.setContrast(this._contrast); this._magShaderEffects.setContrast(this._contrast);
}, }
_destroyActors() { _destroyActors() {
if (this._mouseActor == this._mouseSourceActor) if (this._mouseActor == this._mouseSourceActor)
@ -1265,7 +1260,7 @@ var ZoomRegion = new Lang.Class({
this._uiGroupClone = null; this._uiGroupClone = null;
this._mouseActor = null; this._mouseActor = null;
this._crossHairsActor = null; this._crossHairsActor = null;
}, }
_setViewPort(viewPort, fromROIUpdate) { _setViewPort(viewPort, fromROIUpdate) {
// Sets the position of the zoom region on the screen // Sets the position of the zoom region on the screen
@ -1290,7 +1285,7 @@ var ZoomRegion = new Lang.Class({
if (this.isActive() && this._isMouseOverRegion()) if (this.isActive() && this._isMouseOverRegion())
this._magnifier.hideSystemCursor(); this._magnifier.hideSystemCursor();
}, }
_changeROI(params) { _changeROI(params) {
// Updates the area we are viewing; the magnification factors // Updates the area we are viewing; the magnification factors
@ -1341,7 +1336,7 @@ var ZoomRegion = new Lang.Class({
this._updateCloneGeometry(); this._updateCloneGeometry();
this._updateMousePosition(); this._updateMousePosition();
}, }
_isMouseOverRegion() { _isMouseOverRegion() {
// Return whether the system mouse sprite is over this ZoomRegion. If the // Return whether the system mouse sprite is over this ZoomRegion. If the
@ -1357,7 +1352,7 @@ var ZoomRegion = new Lang.Class({
); );
} }
return mouseIsOver; return mouseIsOver;
}, }
_isFullScreen() { _isFullScreen() {
// Does the magnified view occupy the whole screen? Note that this // 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) this._viewPortHeight != global.screen_height)
return false; return false;
return true; return true;
}, }
_centerFromMousePosition() { _centerFromMousePosition() {
// Determines where the center should be given the current cursor // 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 return null; // Should never be hit
}, }
_centerFromCaretPosition() { _centerFromCaretPosition() {
let xCaret = this._xCaret; let xCaret = this._xCaret;
@ -1404,7 +1399,7 @@ var ZoomRegion = new Lang.Class({
[xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret); [xCaret, yCaret] = this._centerFromPointCentered(xCaret, yCaret);
this._scrollContentsToDelayed(xCaret, yCaret); this._scrollContentsToDelayed(xCaret, yCaret);
}, }
_centerFromFocusPosition() { _centerFromFocusPosition() {
let xFocus = this._xFocus; let xFocus = this._xFocus;
@ -1418,7 +1413,7 @@ var ZoomRegion = new Lang.Class({
[xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus); [xFocus, yFocus] = this._centerFromPointCentered(xFocus, yFocus);
this._scrollContentsToDelayed(xFocus, yFocus); this._scrollContentsToDelayed(xFocus, yFocus);
}, }
_centerFromPointPush(xPoint, yPoint) { _centerFromPointPush(xPoint, yPoint) {
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI(); let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
@ -1439,7 +1434,7 @@ var ZoomRegion = new Lang.Class({
yPos += (yPoint - yRoiBottom); yPos += (yPoint - yRoiBottom);
return [xPos, yPos]; return [xPos, yPos];
}, }
_centerFromPointProportional(xPoint, yPoint) { _centerFromPointProportional(xPoint, yPoint) {
let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI(); let [xRoi, yRoi, widthRoi, heightRoi] = this.getROI();
@ -1456,18 +1451,18 @@ var ZoomRegion = new Lang.Class({
let yPos = yPoint - yProportion * (heightRoi /2 - yPadding); let yPos = yPoint - yProportion * (heightRoi /2 - yPadding);
return [xPos, yPos]; return [xPos, yPos];
}, }
_centerFromPointCentered(xPoint, yPoint) { _centerFromPointCentered(xPoint, yPoint) {
return [xPoint, yPoint]; return [xPoint, yPoint];
}, }
_screenToViewPort(screenX, screenY) { _screenToViewPort(screenX, screenY) {
// Converts coordinates relative to the (unmagnified) screen to coordinates // Converts coordinates relative to the (unmagnified) screen to coordinates
// relative to the origin of this._magView // relative to the origin of this._magView
return [this._viewPortWidth / 2 + (screenX - this._xCenter) * this._xMagFactor, return [this._viewPortWidth / 2 + (screenX - this._xCenter) * this._xMagFactor,
this._viewPortHeight / 2 + (screenY - this._yCenter) * this._yMagFactor]; this._viewPortHeight / 2 + (screenY - this._yCenter) * this._yMagFactor];
}, }
_updateMagViewGeometry() { _updateMagViewGeometry() {
if (!this.isActive()) if (!this.isActive())
@ -1480,7 +1475,7 @@ var ZoomRegion = new Lang.Class({
this._magView.set_size(this._viewPortWidth, this._viewPortHeight); this._magView.set_size(this._viewPortWidth, this._viewPortHeight);
this._magView.set_position(this._viewPortX, this._viewPortY); this._magView.set_position(this._viewPortX, this._viewPortY);
}, }
_updateCloneGeometry() { _updateCloneGeometry() {
if (!this.isActive()) if (!this.isActive())
@ -1493,7 +1488,7 @@ var ZoomRegion = new Lang.Class({
this._uiGroupClone.set_position(Math.round(x), Math.round(y)); this._uiGroupClone.set_position(Math.round(x), Math.round(y));
this._updateMousePosition(); this._updateMousePosition();
}, }
_updateMousePosition() { _updateMousePosition() {
if (!this.isActive()) if (!this.isActive())
@ -1512,7 +1507,7 @@ var ZoomRegion = new Lang.Class({
this._crossHairsActor.set_position(xMagMouse - groupWidth / 2, this._crossHairsActor.set_position(xMagMouse - groupWidth / 2,
yMagMouse - groupHeight / 2); yMagMouse - groupHeight / 2);
} }
}, }
_monitorsChanged() { _monitorsChanged() {
if (!this.isActive()) if (!this.isActive())
@ -1528,12 +1523,10 @@ var ZoomRegion = new Lang.Class({
else else
this.setScreenPosition(this._screenPosition); this.setScreenPosition(this._screenPosition);
} }
}); };
var Crosshairs = new Lang.Class({ var Crosshairs = class Crosshairs {
Name: 'Crosshairs', constructor() {
_init() {
// Set the group containing the crosshairs to three times the desktop // Set the group containing the crosshairs to three times the desktop
// size in case the crosshairs need to appear to be infinite in // 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', Main.layoutManager.connect('monitors-changed',
this._monitorsChanged.bind(this)); this._monitorsChanged.bind(this));
}, }
_monitorsChanged() { _monitorsChanged() {
this._actor.set_size(global.screen_width * 3, global.screen_height * 3); this._actor.set_size(global.screen_width * 3, global.screen_height * 3);
this.reCenter(); this.reCenter();
}, }
/** /**
* addToZoomRegion * addToZoomRegion
@ -1599,7 +1592,7 @@ var Crosshairs = new Lang.Class({
} }
} }
return crosshairsActor; return crosshairsActor;
}, }
/** /**
* removeFromParent: * removeFromParent:
@ -1612,7 +1605,7 @@ var Crosshairs = new Lang.Class({
childActor.get_parent().remove_actor(childActor); childActor.get_parent().remove_actor(childActor);
else else
childActor.destroy(); childActor.destroy();
}, }
/** /**
* setColor: * setColor:
@ -1624,7 +1617,7 @@ var Crosshairs = new Lang.Class({
this._horizRightHair.background_color = clutterColor; this._horizRightHair.background_color = clutterColor;
this._vertTopHair.background_color = clutterColor; this._vertTopHair.background_color = clutterColor;
this._vertBottomHair.background_color = clutterColor; this._vertBottomHair.background_color = clutterColor;
}, }
/** /**
* getColor: * getColor:
@ -1633,7 +1626,7 @@ var Crosshairs = new Lang.Class({
*/ */
getColor() { getColor() {
return this._horizLeftHair.get_color(); return this._horizLeftHair.get_color();
}, }
/** /**
* setThickness: * setThickness:
@ -1646,7 +1639,7 @@ var Crosshairs = new Lang.Class({
this._vertTopHair.set_width(thickness); this._vertTopHair.set_width(thickness);
this._vertBottomHair.set_width(thickness); this._vertBottomHair.set_width(thickness);
this.reCenter(); this.reCenter();
}, }
/** /**
* getThickness: * getThickness:
@ -1655,7 +1648,7 @@ var Crosshairs = new Lang.Class({
*/ */
getThickness() { getThickness() {
return this._horizLeftHair.get_height(); return this._horizLeftHair.get_height();
}, }
/** /**
* setOpacity: * setOpacity:
@ -1674,7 +1667,7 @@ var Crosshairs = new Lang.Class({
this._horizRightHair.set_opacity(opacity); this._horizRightHair.set_opacity(opacity);
this._vertTopHair.set_opacity(opacity); this._vertTopHair.set_opacity(opacity);
this._vertBottomHair.set_opacity(opacity); this._vertBottomHair.set_opacity(opacity);
}, }
/** /**
* setLength: * setLength:
@ -1687,7 +1680,7 @@ var Crosshairs = new Lang.Class({
this._vertTopHair.set_height(length); this._vertTopHair.set_height(length);
this._vertBottomHair.set_height(length); this._vertBottomHair.set_height(length);
this.reCenter(); this.reCenter();
}, }
/** /**
* getLength: * getLength:
@ -1696,7 +1689,7 @@ var Crosshairs = new Lang.Class({
*/ */
getLength() { getLength() {
return this._horizLeftHair.get_width(); return this._horizLeftHair.get_width();
}, }
/** /**
* setClip: * setClip:
@ -1717,7 +1710,7 @@ var Crosshairs = new Lang.Class({
this._clipSize = [0, 0]; this._clipSize = [0, 0];
this.reCenter(); this.reCenter();
} }
}, }
/** /**
* show: * show:
@ -1728,7 +1721,7 @@ var Crosshairs = new Lang.Class({
// Clones don't share visibility. // Clones don't share visibility.
for (let i = 0; i < this._clones.length; i++) for (let i = 0; i < this._clones.length; i++)
this._clones[i].show(); this._clones[i].show();
}, }
/** /**
* hide: * hide:
@ -1739,7 +1732,7 @@ var Crosshairs = new Lang.Class({
// Clones don't share visibility. // Clones don't share visibility.
for (let i = 0; i < this._clones.length; i++) for (let i = 0; i < this._clones.length; i++)
this._clones[i].hide(); this._clones[i].hide();
}, }
/** /**
* reCenter: * reCenter:
@ -1773,12 +1766,10 @@ var Crosshairs = new Lang.Class({
this._vertTopHair.set_position((groupWidth - thickness) / 2, top); this._vertTopHair.set_position((groupWidth - thickness) / 2, top);
this._vertBottomHair.set_position((groupWidth - thickness) / 2, bottom); this._vertBottomHair.set_position((groupWidth - thickness) / 2, bottom);
} }
}); };
var MagShaderEffects = new Lang.Class({ var MagShaderEffects = class MagShaderEffects {
Name: 'MagShaderEffects', constructor(uiGroupClone) {
_init(uiGroupClone) {
this._inverse = new Shell.InvertLightnessEffect(); this._inverse = new Shell.InvertLightnessEffect();
this._brightnessContrast = new Clutter.BrightnessContrastEffect(); this._brightnessContrast = new Clutter.BrightnessContrastEffect();
this._colorDesaturation = new Clutter.DesaturateEffect(); 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._inverse);
this._magView.add_effect(this._brightnessContrast); this._magView.add_effect(this._brightnessContrast);
this._magView.add_effect(this._colorDesaturation); this._magView.add_effect(this._colorDesaturation);
}, }
/** /**
* destroyEffects: * destroyEffects:
@ -1803,7 +1794,7 @@ var MagShaderEffects = new Lang.Class({
this._brightnessContrast = null; this._brightnessContrast = null;
this._inverse = null; this._inverse = null;
this._magView = null; this._magView = null;
}, }
/** /**
* setInvertLightness: * setInvertLightness:
@ -1812,11 +1803,11 @@ var MagShaderEffects = new Lang.Class({
*/ */
setInvertLightness(invertFlag) { setInvertLightness(invertFlag) {
this._inverse.set_enabled(invertFlag); this._inverse.set_enabled(invertFlag);
}, }
setColorSaturation(factor) { setColorSaturation(factor) {
this._colorDesaturation.set_factor(1.0 - factor); this._colorDesaturation.set_factor(1.0 - factor);
}, }
/** /**
* setBrightness: * setBrightness:
@ -1840,7 +1831,7 @@ var MagShaderEffects = new Lang.Class({
(bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE || (bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE ||
cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE) cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE)
); );
}, }
/** /**
* Set the contrast of the magnified view. * 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 || cRed != NO_CHANGE || cGreen != NO_CHANGE || cBlue != NO_CHANGE ||
bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE bRed != NO_CHANGE || bGreen != NO_CHANGE || bBlue != NO_CHANGE
); );
}, }
}); };

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
const { loadInterfaceXML } = imports.misc.fileUtils; const { loadInterfaceXML } = imports.misc.fileUtils;
@ -22,15 +21,13 @@ const ZoomRegionIface = loadInterfaceXML('org.gnome.Magnifier.ZoomRegion');
// '/org/gnome/Magnifier/ZoomRegion/zoomer1', etc. // '/org/gnome/Magnifier/ZoomRegion/zoomer1', etc.
let _zoomRegionInstanceCount = 0; let _zoomRegionInstanceCount = 0;
var ShellMagnifier = new Lang.Class({ var ShellMagnifier = class ShellMagnifier {
Name: 'ShellMagnifier', constructor() {
_init() {
this._zoomers = {}; this._zoomers = {};
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(MagnifierIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(MagnifierIface, this);
this._dbusImpl.export(Gio.DBus.session, MAG_SERVICE_PATH); this._dbusImpl.export(Gio.DBus.session, MAG_SERVICE_PATH);
}, }
/** /**
* setActive: * setActive:
@ -38,7 +35,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
setActive(activate) { setActive(activate) {
Main.magnifier.setActive(activate); Main.magnifier.setActive(activate);
}, }
/** /**
* isActive: * isActive:
@ -46,7 +43,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
isActive() { isActive() {
return Main.magnifier.isActive(); return Main.magnifier.isActive();
}, }
/** /**
* showCursor: * showCursor:
@ -54,7 +51,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
showCursor() { showCursor() {
Main.magnifier.showSystemCursor(); Main.magnifier.showSystemCursor();
}, }
/** /**
* hideCursor: * hideCursor:
@ -62,7 +59,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
hideCursor() { hideCursor() {
Main.magnifier.hideSystemCursor(); Main.magnifier.hideSystemCursor();
}, }
/** /**
* createZoomRegion: * createZoomRegion:
@ -97,7 +94,7 @@ var ShellMagnifier = new Lang.Class({
proxyAndZoomRegion.zoomRegion = realZoomRegion; proxyAndZoomRegion.zoomRegion = realZoomRegion;
this._zoomers[objectPath] = proxyAndZoomRegion; this._zoomers[objectPath] = proxyAndZoomRegion;
return objectPath; return objectPath;
}, }
/** /**
* addZoomRegion: * addZoomRegion:
@ -112,7 +109,7 @@ var ShellMagnifier = new Lang.Class({
} }
else else
return false; return false;
}, }
/** /**
* getZoomRegions: * getZoomRegions:
@ -150,7 +147,7 @@ var ShellMagnifier = new Lang.Class({
} }
}); });
return objectPaths; return objectPaths;
}, }
/** /**
* clearAllZoomRegions: * clearAllZoomRegions:
@ -166,7 +163,7 @@ var ShellMagnifier = new Lang.Class({
delete this._zoomers[objectPath]; delete this._zoomers[objectPath];
} }
this._zoomers = {}; this._zoomers = {};
}, }
/** /**
* fullScreenCapable: * fullScreenCapable:
@ -175,7 +172,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
fullScreenCapable() { fullScreenCapable() {
return true; return true;
}, }
/** /**
* setCrosswireSize: * setCrosswireSize:
@ -184,7 +181,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
setCrosswireSize(size) { setCrosswireSize(size) {
Main.magnifier.setCrosshairsThickness(size); Main.magnifier.setCrosshairsThickness(size);
}, }
/** /**
* getCrosswireSize: * getCrosswireSize:
@ -193,7 +190,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
getCrosswireSize() { getCrosswireSize() {
return Main.magnifier.getCrosshairsThickness(); return Main.magnifier.getCrosshairsThickness();
}, }
/** /**
* setCrosswireLength: * setCrosswireLength:
@ -202,7 +199,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
setCrosswireLength(length) { setCrosswireLength(length) {
Main.magnifier.setCrosshairsLength(length); Main.magnifier.setCrosshairsLength(length);
}, }
/** /**
* setCrosswireSize: * setCrosswireSize:
@ -211,7 +208,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
getCrosswireLength() { getCrosswireLength() {
return Main.magnifier.getCrosshairsLength(); return Main.magnifier.getCrosshairsLength();
}, }
/** /**
* setCrosswireClip: * setCrosswireClip:
@ -220,7 +217,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
setCrosswireClip(clip) { setCrosswireClip(clip) {
Main.magnifier.setCrosshairsClip(clip); Main.magnifier.setCrosshairsClip(clip);
}, }
/** /**
* getCrosswireClip: * getCrosswireClip:
@ -229,7 +226,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
getCrosswireClip() { getCrosswireClip() {
return Main.magnifier.getCrosshairsClip(); return Main.magnifier.getCrosshairsClip();
}, }
/** /**
* setCrosswireColor: * setCrosswireColor:
@ -238,7 +235,7 @@ var ShellMagnifier = new Lang.Class({
*/ */
setCrosswireColor(color) { setCrosswireColor(color) {
Main.magnifier.setCrosshairsColor('#%08x'.format(color)); Main.magnifier.setCrosshairsColor('#%08x'.format(color));
}, }
/** /**
* getCrosswireClip: * getCrosswireClip:
@ -250,7 +247,7 @@ var ShellMagnifier = new Lang.Class({
// Drop the leading '#'. // Drop the leading '#'.
return parseInt(colorString.slice(1), 16); return parseInt(colorString.slice(1), 16);
} }
}); };
/** /**
* ShellMagnifierZoomRegion: * ShellMagnifierZoomRegion:
@ -258,15 +255,13 @@ var ShellMagnifier = new Lang.Class({
* @zoomerObjectPath: String that is the path to a DBus ZoomRegion. * @zoomerObjectPath: String that is the path to a DBus ZoomRegion.
* @zoomRegion: The actual zoom region associated with the object path. * @zoomRegion: The actual zoom region associated with the object path.
*/ */
var ShellMagnifierZoomRegion = new Lang.Class({ var ShellMagnifierZoomRegion = class ShellMagnifierZoomRegion {
Name: 'ShellMagnifierZoomRegion', constructor(zoomerObjectPath, zoomRegion) {
_init(zoomerObjectPath, zoomRegion) {
this._zoomRegion = zoomRegion; this._zoomRegion = zoomRegion;
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ZoomRegionIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ZoomRegionIface, this);
this._dbusImpl.export(Gio.DBus.session, zoomerObjectPath); this._dbusImpl.export(Gio.DBus.session, zoomerObjectPath);
}, }
/** /**
* setMagFactor: * setMagFactor:
@ -278,7 +273,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({
*/ */
setMagFactor(xMagFactor, yMagFactor) { setMagFactor(xMagFactor, yMagFactor) {
this._zoomRegion.setMagFactor(xMagFactor, yMagFactor); this._zoomRegion.setMagFactor(xMagFactor, yMagFactor);
}, }
/** /**
* getMagFactor: * getMagFactor:
@ -289,7 +284,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({
*/ */
getMagFactor() { getMagFactor() {
return this._zoomRegion.getMagFactor(); return this._zoomRegion.getMagFactor();
}, }
/** /**
* setRoi: * setRoi:
@ -301,7 +296,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({
setRoi(roi) { setRoi(roi) {
let roiObject = { x: roi[0], y: roi[1], width: roi[2] - roi[0], height: roi[3] - roi[1] }; let roiObject = { x: roi[0], y: roi[1], width: roi[2] - roi[0], height: roi[3] - roi[1] };
this._zoomRegion.setROI(roiObject); this._zoomRegion.setROI(roiObject);
}, }
/** /**
* getRoi: * getRoi:
@ -316,7 +311,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({
roi[2] += roi[0]; roi[2] += roi[0];
roi[3] += roi[1]; roi[3] += roi[1];
return roi; return roi;
}, }
/** /**
* Set the "region of interest" by centering the given screen coordinate * Set the "region of interest" by centering the given screen coordinate
@ -329,7 +324,7 @@ var ShellMagnifierZoomRegion = new Lang.Class({
shiftContentsTo(x, y) { shiftContentsTo(x, y) {
this._zoomRegion.scrollContentsTo(x, y); this._zoomRegion.scrollContentsTo(x, y);
return true; return true;
}, }
/** /**
* moveResize * moveResize
@ -340,9 +335,9 @@ var ShellMagnifierZoomRegion = new Lang.Class({
moveResize(viewPort) { moveResize(viewPort) {
let viewRect = { x: viewPort[0], y: viewPort[1], width: viewPort[2] - viewPort[0], height: viewPort[3] - viewPort[1] }; let viewRect = { x: viewPort[0], y: viewPort[1], width: viewPort[2] - viewPort[0], height: viewPort[3] - viewPort[1] };
this._zoomRegion.setViewPort(viewRect); this._zoomRegion.setViewPort(viewRect);
}, }
destroy() { destroy() {
this._dbusImpl.unexport(); this._dbusImpl.unexport();
} }
}); };

View File

@ -5,7 +5,6 @@ const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -700,15 +699,12 @@ function queueDeferredWork(workId) {
} }
} }
var RestartMessage = new Lang.Class({ var RestartMessage = class extends ModalDialog.ModalDialog {
Name: 'RestartMessage', constructor(message) {
Extends: ModalDialog.ModalDialog, super({ shellReactive: true,
styleClass: 'restart-message headline',
_init(message) { shouldFadeIn: false,
this.parent({ shellReactive: true, destroyOnClose: true });
styleClass: 'restart-message headline',
shouldFadeIn: false,
destroyOnClose: true });
let label = new St.Label({ text: message }); let label = new St.Label({ text: message });
@ -718,7 +714,7 @@ var RestartMessage = new Lang.Class({
y_align: St.Align.MIDDLE }); y_align: St.Align.MIDDLE });
this.buttonLayout.hide(); this.buttonLayout.hide();
} }
}); };
function showRestartMessage(message) { function showRestartMessage(message) {
let restartMessage = new RestartMessage(message); let restartMessage = new RestartMessage(message);

View File

@ -40,10 +40,8 @@ function _fixMarkup(text, allowMarkup) {
return GLib.markup_escape_text(text, -1); return GLib.markup_escape_text(text, -1);
} }
var URLHighlighter = new Lang.Class({ var URLHighlighter = class URLHighlighter {
Name: 'URLHighlighter', constructor(text, lineWrap, allowMarkup) {
_init(text, lineWrap, allowMarkup) {
if (!text) if (!text)
text = ''; text = '';
this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter', this.actor = new St.Label({ reactive: true, style_class: 'url-highlighter',
@ -114,7 +112,7 @@ var URLHighlighter = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}); });
}, }
setMarkup(text, allowMarkup) { setMarkup(text, allowMarkup) {
text = text ? _fixMarkup(text, allowMarkup) : ''; text = text ? _fixMarkup(text, allowMarkup) : '';
@ -124,7 +122,7 @@ var URLHighlighter = new Lang.Class({
/* clutter_text.text contain text without markup */ /* clutter_text.text contain text without markup */
this._urls = Util.findUrls(this.actor.clutter_text.text); this._urls = Util.findUrls(this.actor.clutter_text.text);
this._highlightUrls(); this._highlightUrls();
}, }
_highlightUrls() { _highlightUrls() {
// text here contain markup // text here contain markup
@ -139,7 +137,7 @@ var URLHighlighter = new Lang.Class({
} }
markup += this._text.substr(pos); markup += this._text.substr(pos);
this.actor.clutter_text.set_markup(markup); this.actor.clutter_text.set_markup(markup);
}, }
_findUrlAtPos(event) { _findUrlAtPos(event) {
let success; let success;
@ -160,7 +158,7 @@ var URLHighlighter = new Lang.Class({
} }
return -1; return -1;
} }
}); };
var ScaleLayout = new Lang.Class({ var ScaleLayout = new Lang.Class({
Name: 'ScaleLayout', Name: 'ScaleLayout',
@ -298,10 +296,8 @@ var LabelExpanderLayout = new Lang.Class({
} }
}); });
var Message = new Lang.Class({ var Message = class Message {
Name: 'Message', constructor(title, body) {
_init(title, body) {
this.expanded = false; this.expanded = false;
this._useBodyMarkup = false; this._useBodyMarkup = false;
@ -368,25 +364,25 @@ var Message = new Lang.Class({
this.actor.connect('clicked', this._onClicked.bind(this)); this.actor.connect('clicked', this._onClicked.bind(this));
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
this._sync(); this._sync();
}, }
close() { close() {
this.emit('close'); this.emit('close');
}, }
setIcon(actor) { setIcon(actor) {
this._iconBin.child = actor; this._iconBin.child = actor;
this._iconBin.visible = (actor != null); this._iconBin.visible = (actor != null);
}, }
setSecondaryActor(actor) { setSecondaryActor(actor) {
this._secondaryBin.child = actor; this._secondaryBin.child = actor;
}, }
setTitle(text) { setTitle(text) {
let title = text ? _fixMarkup(text.replace(/\n/g, ' '), false) : ''; let title = text ? _fixMarkup(text.replace(/\n/g, ' '), false) : '';
this.titleLabel.clutter_text.set_markup(title); this.titleLabel.clutter_text.set_markup(title);
}, }
setBody(text) { setBody(text) {
this._bodyText = text; this._bodyText = text;
@ -394,7 +390,7 @@ var Message = new Lang.Class({
this._useBodyMarkup); this._useBodyMarkup);
if (this._expandedLabel) if (this._expandedLabel)
this._expandedLabel.setMarkup(text, this._useBodyMarkup); this._expandedLabel.setMarkup(text, this._useBodyMarkup);
}, }
setUseBodyMarkup(enable) { setUseBodyMarkup(enable) {
if (this._useBodyMarkup === enable) if (this._useBodyMarkup === enable)
@ -402,7 +398,7 @@ var Message = new Lang.Class({
this._useBodyMarkup = enable; this._useBodyMarkup = enable;
if (this.bodyLabel) if (this.bodyLabel)
this.setBody(this._bodyText); this.setBody(this._bodyText);
}, }
setActionArea(actor) { setActionArea(actor) {
if (actor == null) { if (actor == null) {
@ -416,7 +412,7 @@ var Message = new Lang.Class({
this._actionBin.add_actor(actor); this._actionBin.add_actor(actor);
this._actionBin.visible = this.expanded; this._actionBin.visible = this.expanded;
}, }
addMediaControl(iconName, callback) { addMediaControl(iconName, callback) {
let icon = new St.Icon({ icon_name: iconName, icon_size: 16 }); let icon = new St.Icon({ icon_name: iconName, icon_size: 16 });
@ -425,7 +421,7 @@ var Message = new Lang.Class({
button.connect('clicked', callback); button.connect('clicked', callback);
this._mediaControls.add_actor(button); this._mediaControls.add_actor(button);
return button; return button;
}, }
setExpandedBody(actor) { setExpandedBody(actor) {
if (actor == null) { if (actor == null) {
@ -438,11 +434,11 @@ var Message = new Lang.Class({
throw new Error('Message already has an expanded body actor'); throw new Error('Message already has an expanded body actor');
this._bodyStack.insert_child_at_index(actor, 1); this._bodyStack.insert_child_at_index(actor, 1);
}, }
setExpandedLines(nLines) { setExpandedLines(nLines) {
this._bodyStack.layout_manager.expandLines = nLines; this._bodyStack.layout_manager.expandLines = nLines;
}, }
expand(animate) { expand(animate) {
this.expanded = true; this.expanded = true;
@ -471,7 +467,7 @@ var Message = new Lang.Class({
} }
this.emit('expanded'); this.emit('expanded');
}, }
unexpand(animate) { unexpand(animate) {
if (animate) { if (animate) {
@ -495,23 +491,23 @@ var Message = new Lang.Class({
} }
this.emit('unexpanded'); this.emit('unexpanded');
}, }
canClose() { canClose() {
return false; return false;
}, }
_sync() { _sync() {
let visible = this.actor.hover && this.canClose(); let visible = this.actor.hover && this.canClose();
this._closeButton.opacity = visible ? 255 : 0; this._closeButton.opacity = visible ? 255 : 0;
this._closeButton.reactive = visible; this._closeButton.reactive = visible;
}, }
_onClicked() { _onClicked() {
}, }
_onDestroy() { _onDestroy() {
}, }
_onKeyPressed(a, event) { _onKeyPressed(a, event) {
let keysym = event.get_key_symbol(); let keysym = event.get_key_symbol();
@ -523,13 +519,11 @@ var Message = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
}); };
Signals.addSignalMethods(Message.prototype); Signals.addSignalMethods(Message.prototype);
var MessageListSection = new Lang.Class({ var MessageListSection = class MessageListSection {
Name: 'MessageListSection', constructor() {
_init() {
this.actor = new St.BoxLayout({ style_class: 'message-list-section', this.actor = new St.BoxLayout({ style_class: 'message-list-section',
clip_to_allocation: true, clip_to_allocation: true,
x_expand: true, vertical: true }); x_expand: true, vertical: true });
@ -552,26 +546,26 @@ var MessageListSection = new Lang.Class({
this.empty = true; this.empty = true;
this.canClear = false; this.canClear = false;
this._sync(); this._sync();
}, }
_onKeyFocusIn(actor) { _onKeyFocusIn(actor) {
this.emit('key-focus-in', actor); this.emit('key-focus-in', actor);
}, }
get allowed() { get allowed() {
return true; return true;
}, }
setDate(date) { setDate(date) {
if (Calendar.sameDay(date, this._date)) if (Calendar.sameDay(date, this._date))
return; return;
this._date = date; this._date = date;
this._sync(); this._sync();
}, }
addMessage(message, animate) { addMessage(message, animate) {
this.addMessageAtIndex(message, -1, animate); this.addMessageAtIndex(message, -1, animate);
}, }
addMessageAtIndex(message, index, animate) { addMessageAtIndex(message, index, animate) {
let obj = { let obj = {
@ -604,7 +598,7 @@ var MessageListSection = new Lang.Class({
scale_y: 1, scale_y: 1,
time: MESSAGE_ANIMATION_TIME, time: MESSAGE_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
}, }
moveMessage(message, index, animate) { moveMessage(message, index, animate) {
let obj = this._messages.get(message); let obj = this._messages.get(message);
@ -626,7 +620,7 @@ var MessageListSection = new Lang.Class({
time: MESSAGE_ANIMATION_TIME, time: MESSAGE_ANIMATION_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
onComplete: onComplete }); onComplete: onComplete });
}, }
removeMessage(message, animate) { removeMessage(message, animate) {
let obj = this._messages.get(message); let obj = this._messages.get(message);
@ -649,7 +643,7 @@ var MessageListSection = new Lang.Class({
obj.container.destroy(); obj.container.destroy();
global.sync_pointer(); global.sync_pointer();
} }
}, }
clear() { clear() {
let messages = [...this._messages.keys()].filter(msg => msg.canClose()); let messages = [...this._messages.keys()].filter(msg => msg.canClose());
@ -677,18 +671,18 @@ var MessageListSection = new Lang.Class({
}}); }});
} }
} }
}, }
_canClear() { _canClear() {
for (let message of this._messages.keys()) for (let message of this._messages.keys())
if (message.canClose()) if (message.canClose())
return true; return true;
return false; return false;
}, }
_shouldShow() { _shouldShow() {
return !this.empty; return !this.empty;
}, }
_sync() { _sync() {
let empty = this._list.get_n_children() == 0; let empty = this._list.get_n_children() == 0;
@ -707,5 +701,5 @@ var MessageListSection = new Lang.Class({
this.actor.visible = this.allowed && this._shouldShow(); this.actor.visible = this.allowed && this._shouldShow();
} }
}); };
Signals.addSignalMethods(MessageListSection.prototype); Signals.addSignalMethods(MessageListSection.prototype);

View File

@ -72,15 +72,13 @@ var Urgency = {
CRITICAL: 3 CRITICAL: 3
}; };
var FocusGrabber = new Lang.Class({ var FocusGrabber = class FocusGrabber {
Name: 'FocusGrabber', constructor(actor) {
_init(actor) {
this._actor = actor; this._actor = actor;
this._prevKeyFocusActor = null; this._prevKeyFocusActor = null;
this._focusActorChangedId = 0; this._focusActorChangedId = 0;
this._focused = false; this._focused = false;
}, }
grabFocus() { grabFocus() {
if (this._focused) if (this._focused)
@ -94,7 +92,7 @@ var FocusGrabber = new Lang.Class({
this._actor.grab_key_focus(); this._actor.grab_key_focus();
this._focused = true; this._focused = true;
}, }
_focusUngrabbed() { _focusUngrabbed() {
if (!this._focused) if (!this._focused)
@ -107,13 +105,13 @@ var FocusGrabber = new Lang.Class({
this._focused = false; this._focused = false;
return true; return true;
}, }
_focusActorChanged() { _focusActorChanged() {
let focusedActor = global.stage.get_key_focus(); let focusedActor = global.stage.get_key_focus();
if (!focusedActor || !this._actor.contains(focusedActor)) if (!focusedActor || !this._actor.contains(focusedActor))
this._focusUngrabbed(); this._focusUngrabbed();
}, }
ungrabFocus() { ungrabFocus() {
if (!this._focusUngrabbed()) if (!this._focusUngrabbed())
@ -128,17 +126,15 @@ var FocusGrabber = new Lang.Class({
global.stage.set_key_focus(null); global.stage.set_key_focus(null);
} }
} }
}); };
// NotificationPolicy: // NotificationPolicy:
// An object that holds all bits of configurable policy related to a notification // 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. // source, such as whether to play sound or honour the critical bit.
// //
// A notification without a policy object will inherit the default one. // A notification without a policy object will inherit the default one.
var NotificationPolicy = new Lang.Class({ var NotificationPolicy = class NotificationPolicy {
Name: 'NotificationPolicy', constructor(params) {
_init(params) {
params = Params.parse(params, { enable: true, params = Params.parse(params, { enable: true,
enableSound: true, enableSound: true,
showBanners: true, showBanners: true,
@ -150,77 +146,72 @@ var NotificationPolicy = new Lang.Class({
let desc = Object.getOwnPropertyDescriptor(params, key); let desc = Object.getOwnPropertyDescriptor(params, key);
Object.defineProperty(this, `_${key}`, desc); Object.defineProperty(this, `_${key}`, desc);
}); });
}, }
// Do nothing for the default policy. These methods are only useful for the // Do nothing for the default policy. These methods are only useful for the
// GSettings policy. // GSettings policy.
store() { }, store() { }
destroy() { }, destroy() { }
get enable() { get enable() {
return this._enable; return this._enable;
}, }
get enableSound() { get enableSound() {
return this._enableSound; return this._enableSound;
}, }
get showBanners() { get showBanners() {
return this._showBanners; return this._showBanners;
}, }
get forceExpanded() { get forceExpanded() {
return this._forceExpanded; return this._forceExpanded;
}, }
get showInLockScreen() { get showInLockScreen() {
return this._showInLockScreen; return this._showInLockScreen;
}, }
get detailsInLockScreen() { get detailsInLockScreen() {
return this._detailsInLockScreen; return this._detailsInLockScreen;
} }
}); };
Signals.addSignalMethods(NotificationPolicy.prototype); Signals.addSignalMethods(NotificationPolicy.prototype);
var NotificationGenericPolicy = new Lang.Class({ var NotificationGenericPolicy =
Name: 'NotificationGenericPolicy', class NotificationGenericPolicy extends NotificationPolicy {
Extends: NotificationPolicy, constructor() {
super();
_init() {
this.parent();
this.id = 'generic'; this.id = 'generic';
this._masterSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.notifications' }); this._masterSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.notifications' });
this._masterSettings.connect('changed', this._changed.bind(this)); this._masterSettings.connect('changed', this._changed.bind(this));
}, }
store() { }, store() { }
destroy() { destroy() {
this._masterSettings.run_dispose(); this._masterSettings.run_dispose();
}, }
_changed(settings, key) { _changed(settings, key) {
this.emit('policy-changed', key); this.emit('policy-changed', key);
}, }
get showBanners() { get showBanners() {
return this._masterSettings.get_boolean('show-banners'); return this._masterSettings.get_boolean('show-banners');
}, }
get showInLockScreen() { get showInLockScreen() {
return this._masterSettings.get_boolean('show-in-lock-screen'); return this._masterSettings.get_boolean('show-in-lock-screen');
} }
}); };
var NotificationApplicationPolicy = new Lang.Class({ var NotificationApplicationPolicy =
Name: 'NotificationApplicationPolicy', class NotificationApplicationPolicy extends NotificationPolicy {
Extends: NotificationPolicy, constructor(id) {
super();
_init(id) {
this.parent();
this.id = id; this.id = id;
this._canonicalId = this._canonicalizeId(id); this._canonicalId = this._canonicalizeId(id);
@ -231,7 +222,7 @@ var NotificationApplicationPolicy = new Lang.Class({
this._masterSettings.connect('changed', this._changed.bind(this)); this._masterSettings.connect('changed', this._changed.bind(this));
this._settings.connect('changed', this._changed.bind(this)); this._settings.connect('changed', this._changed.bind(this));
}, }
store() { store() {
this._settings.set_string('application-id', this.id + '.desktop'); this._settings.set_string('application-id', this.id + '.desktop');
@ -241,51 +232,51 @@ var NotificationApplicationPolicy = new Lang.Class({
apps.push(this._canonicalId); apps.push(this._canonicalId);
this._masterSettings.set_strv('application-children', apps); this._masterSettings.set_strv('application-children', apps);
} }
}, }
destroy() { destroy() {
this._masterSettings.run_dispose(); this._masterSettings.run_dispose();
this._settings.run_dispose(); this._settings.run_dispose();
}, }
_changed(settings, key) { _changed(settings, key) {
this.emit('policy-changed', key); this.emit('policy-changed', key);
if (key == 'enable') if (key == 'enable')
this.emit('enable-changed'); this.emit('enable-changed');
}, }
_canonicalizeId(id) { _canonicalizeId(id) {
// Keys are restricted to lowercase alphanumeric characters and dash, // Keys are restricted to lowercase alphanumeric characters and dash,
// and two dashes cannot be in succession // and two dashes cannot be in succession
return id.toLowerCase().replace(/[^a-z0-9\-]/g, '-').replace(/--+/g, '-'); return id.toLowerCase().replace(/[^a-z0-9\-]/g, '-').replace(/--+/g, '-');
}, }
get enable() { get enable() {
return this._settings.get_boolean('enable'); return this._settings.get_boolean('enable');
}, }
get enableSound() { get enableSound() {
return this._settings.get_boolean('enable-sound-alerts'); return this._settings.get_boolean('enable-sound-alerts');
}, }
get showBanners() { get showBanners() {
return this._masterSettings.get_boolean('show-banners') && return this._masterSettings.get_boolean('show-banners') &&
this._settings.get_boolean('show-banners'); this._settings.get_boolean('show-banners');
}, }
get forceExpanded() { get forceExpanded() {
return this._settings.get_boolean('force-expanded'); return this._settings.get_boolean('force-expanded');
}, }
get showInLockScreen() { get showInLockScreen() {
return this._masterSettings.get_boolean('show-in-lock-screen') && return this._masterSettings.get_boolean('show-in-lock-screen') &&
this._settings.get_boolean('show-in-lock-screen'); this._settings.get_boolean('show-in-lock-screen');
}, }
get detailsInLockScreen() { get detailsInLockScreen() {
return this._settings.get_boolean('details-in-lock-screen'); return this._settings.get_boolean('details-in-lock-screen');
} }
}); };
// Notification: // Notification:
// @source: the notification's Source // @source: the notification's Source
@ -342,10 +333,8 @@ var NotificationApplicationPolicy = new Lang.Class({
// @source allows playing sounds). // @source allows playing sounds).
// //
// [1] https://developer.gnome.org/notification-spec/#markup // [1] https://developer.gnome.org/notification-spec/#markup
var Notification = new Lang.Class({ var Notification = class Notification {
Name: 'Notification', constructor(source, title, banner, params) {
_init(source, title, banner, params) {
this.source = source; this.source = source;
this.title = title; this.title = title;
this.urgency = Urgency.NORMAL; this.urgency = Urgency.NORMAL;
@ -367,7 +356,7 @@ var Notification = new Lang.Class({
// for new and updated notifications // for new and updated notifications
if (arguments.length != 1) if (arguments.length != 1)
this.update(title, banner, params); this.update(title, banner, params);
}, }
// update: // update:
// @title: the new title // @title: the new title
@ -412,41 +401,41 @@ var Notification = new Lang.Class({
} }
this.emit('updated', params.clear); this.emit('updated', params.clear);
}, }
// addAction: // addAction:
// @label: the label for the action's button // @label: the label for the action's button
// @callback: the callback for the action // @callback: the callback for the action
addAction(label, callback) { addAction(label, callback) {
this.actions.push({ label: label, callback: callback }); this.actions.push({ label: label, callback: callback });
}, }
get acknowledged() { get acknowledged() {
return this._acknowledged; return this._acknowledged;
}, }
set acknowledged(v) { set acknowledged(v) {
if (this._acknowledged == v) if (this._acknowledged == v)
return; return;
this._acknowledged = v; this._acknowledged = v;
this.emit('acknowledged-changed'); this.emit('acknowledged-changed');
}, }
setUrgency(urgency) { setUrgency(urgency) {
this.urgency = urgency; this.urgency = urgency;
}, }
setResident(resident) { setResident(resident) {
this.resident = resident; this.resident = resident;
}, }
setTransient(isTransient) { setTransient(isTransient) {
this.isTransient = isTransient; this.isTransient = isTransient;
}, }
setForFeedback(forFeedback) { setForFeedback(forFeedback) {
this.forFeedback = forFeedback; this.forFeedback = forFeedback;
}, }
playSound() { playSound() {
if (this._soundPlayed) if (this._soundPlayed)
@ -462,7 +451,7 @@ var Notification = new Lang.Class({
player.play_from_theme(this._soundName, this.title, null); player.play_from_theme(this._soundName, this.title, null);
else if (this._soundFile) else if (this._soundFile)
player.play_from_file(this._soundFile, this.title, null); player.play_from_file(this._soundFile, this.title, null);
}, }
// Allow customizing the banner UI: // Allow customizing the banner UI:
// the default implementation defers the creation to // the default implementation defers the creation to
@ -471,28 +460,26 @@ var Notification = new Lang.Class({
// Notification or Source // Notification or Source
createBanner() { createBanner() {
return this.source.createBanner(this); return this.source.createBanner(this);
}, }
activate() { activate() {
this.emit('activated'); this.emit('activated');
if (!this.resident) if (!this.resident)
this.destroy(); this.destroy();
}, }
destroy(reason) { destroy(reason) {
if (!reason) if (!reason)
reason = NotificationDestroyedReason.DISMISSED; reason = NotificationDestroyedReason.DISMISSED;
this.emit('destroy', reason); this.emit('destroy', reason);
} }
}); };
Signals.addSignalMethods(Notification.prototype); Signals.addSignalMethods(Notification.prototype);
var NotificationBanner = new Lang.Class({ var NotificationBanner =
Name: 'NotificationBanner', class NotificationBanner extends Calendar.NotificationMessage {
Extends: Calendar.NotificationMessage, constructor(notification) {
super(notification);
_init(notification) {
this.parent(notification);
this.actor.can_focus = false; this.actor.can_focus = false;
this.actor.add_style_class_name('notification-banner'); this.actor.add_style_class_name('notification-banner');
@ -509,15 +496,15 @@ var NotificationBanner = new Lang.Class({
// attention switching to the window. // attention switching to the window.
this.emit('done-displaying'); this.emit('done-displaying');
}); });
}, }
_onDestroy() { _onDestroy() {
this.parent(); super._onDestroy();
this.notification.disconnect(this._activatedId); this.notification.disconnect(this._activatedId);
}, }
_onUpdated(n, clear) { _onUpdated(n, clear) {
this.parent(n, clear); super._onUpdated(n, clear);
if (clear) { if (clear) {
this.setSecondaryActor(null); this.setSecondaryActor(null);
@ -527,13 +514,13 @@ var NotificationBanner = new Lang.Class({
this._addActions(); this._addActions();
this._addSecondaryIcon(); this._addSecondaryIcon();
}, }
_addActions() { _addActions() {
this.notification.actions.forEach(action => { this.notification.actions.forEach(action => {
this.addAction(action.label, action.callback); this.addAction(action.label, action.callback);
}); });
}, }
_addSecondaryIcon() { _addSecondaryIcon() {
if (this.notification.secondaryGIcon) { if (this.notification.secondaryGIcon) {
@ -541,7 +528,7 @@ var NotificationBanner = new Lang.Class({
x_align: Clutter.ActorAlign.END }); x_align: Clutter.ActorAlign.END });
this.setSecondaryActor(icon); this.setSecondaryActor(icon);
} }
}, }
addButton(button, callback) { addButton(button, callback) {
if (!this._buttonBox) { if (!this._buttonBox) {
@ -569,7 +556,7 @@ var NotificationBanner = new Lang.Class({
}); });
return button; return button;
}, }
addAction(label, callback) { addAction(label, callback) {
let button = new St.Button({ style_class: 'notification-button', let button = new St.Button({ style_class: 'notification-button',
@ -579,7 +566,7 @@ var NotificationBanner = new Lang.Class({
return this.addButton(button, callback); return this.addButton(button, callback);
} }
}); };
var SourceActor = new Lang.Class({ var SourceActor = new Lang.Class({
Name: 'SourceActor', Name: 'SourceActor',
@ -697,12 +684,10 @@ var SourceActorWithLabel = new Lang.Class({
} }
}); });
var Source = new Lang.Class({ var Source = class Source {
Name: 'MessageTraySource', constructor(title, iconName) {
this.SOURCE_ICON_SIZE = 48;
SOURCE_ICON_SIZE: 48,
_init(title, iconName) {
this.title = title; this.title = title;
this.iconName = iconName; this.iconName = iconName;
@ -711,42 +696,42 @@ var Source = new Lang.Class({
this.notifications = []; this.notifications = [];
this._policy = null; this._policy = null;
}, }
get policy() { get policy() {
if (!this._policy) if (!this._policy)
this._policy = this._createPolicy(); this._policy = this._createPolicy();
return this._policy; return this._policy;
}, }
get count() { get count() {
return this.notifications.length; return this.notifications.length;
}, }
get unseenCount() { get unseenCount() {
return this.notifications.filter(n => !n.acknowledged).length; return this.notifications.filter(n => !n.acknowledged).length;
}, }
get countVisible() { get countVisible() {
return this.count > 1; return this.count > 1;
}, }
countUpdated() { countUpdated() {
this.emit('count-updated'); this.emit('count-updated');
}, }
_createPolicy() { _createPolicy() {
return new NotificationPolicy(); return new NotificationPolicy();
}, }
setTitle(newTitle) { setTitle(newTitle) {
this.title = newTitle; this.title = newTitle;
this.emit('title-changed'); this.emit('title-changed');
}, }
createBanner(notification) { createBanner(notification) {
return new NotificationBanner(notification); return new NotificationBanner(notification);
}, }
// Called to create a new icon actor. // Called to create a new icon actor.
// Provides a sane default implementation, override if you need // Provides a sane default implementation, override if you need
@ -754,11 +739,11 @@ var Source = new Lang.Class({
createIcon(size) { createIcon(size) {
return new St.Icon({ gicon: this.getIcon(), return new St.Icon({ gicon: this.getIcon(),
icon_size: size }); icon_size: size });
}, }
getIcon() { getIcon() {
return new Gio.ThemedIcon({ name: this.iconName }); return new Gio.ThemedIcon({ name: this.iconName });
}, }
_onNotificationDestroy(notification) { _onNotificationDestroy(notification) {
let index = this.notifications.indexOf(notification); let index = this.notifications.indexOf(notification);
@ -770,7 +755,7 @@ var Source = new Lang.Class({
this.destroy(); this.destroy();
this.countUpdated(); this.countUpdated();
}, }
pushNotification(notification) { pushNotification(notification) {
if (this.notifications.indexOf(notification) >= 0) if (this.notifications.indexOf(notification) >= 0)
@ -785,7 +770,7 @@ var Source = new Lang.Class({
this.emit('notification-added', notification); this.emit('notification-added', notification);
this.countUpdated(); this.countUpdated();
}, }
notify(notification) { notify(notification) {
notification.acknowledged = false; notification.acknowledged = false;
@ -796,7 +781,7 @@ var Source = new Lang.Class({
} else { } else {
notification.playSound(); notification.playSound();
} }
}, }
destroy(reason) { destroy(reason) {
this.policy.destroy(); this.policy.destroy();
@ -808,15 +793,15 @@ var Source = new Lang.Class({
notifications[i].destroy(reason); notifications[i].destroy(reason);
this.emit('destroy', reason); this.emit('destroy', reason);
}, }
iconUpdated() { iconUpdated() {
this.emit('icon-updated'); this.emit('icon-updated');
}, }
// To be overridden by subclasses // To be overridden by subclasses
open() { open() {
}, }
destroyNonResidentNotifications() { destroyNonResidentNotifications() {
for (let i = this.notifications.length - 1; i >= 0; i--) for (let i = this.notifications.length - 1; i >= 0; i--)
@ -825,13 +810,11 @@ var Source = new Lang.Class({
this.countUpdated(); this.countUpdated();
} }
}); };
Signals.addSignalMethods(Source.prototype); Signals.addSignalMethods(Source.prototype);
var MessageTray = new Lang.Class({ var MessageTray = class MessageTray {
Name: 'MessageTray', constructor() {
_init() {
this._presence = new GnomeSession.Presence((proxy, error) => { this._presence = new GnomeSession.Presence((proxy, error) => {
this._onStatusChanged(proxy.status); this._onStatusChanged(proxy.status);
}); });
@ -938,27 +921,27 @@ var MessageTray = new Lang.Class({
this._sources = new Map(); this._sources = new Map();
this._sessionUpdated(); this._sessionUpdated();
}, }
_sessionUpdated() { _sessionUpdated() {
this._updateState(); this._updateState();
}, }
_onDragBegin() { _onDragBegin() {
Shell.util_set_hidden_from_pick(this.actor, true); Shell.util_set_hidden_from_pick(this.actor, true);
}, }
_onDragEnd() { _onDragEnd() {
Shell.util_set_hidden_from_pick(this.actor, false); Shell.util_set_hidden_from_pick(this.actor, false);
}, }
get bannerAlignment() { get bannerAlignment() {
return this._bannerBin.get_x_align(); return this._bannerBin.get_x_align();
}, }
set bannerAlignment(align) { set bannerAlignment(align) {
this._bannerBin.set_x_align(align); this._bannerBin.set_x_align(align);
}, }
_onNotificationKeyRelease(actor, event) { _onNotificationKeyRelease(actor, event) {
if (event.get_key_symbol() == Clutter.KEY_Escape && event.get_state() == 0) { 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; return Clutter.EVENT_PROPAGATE;
}, }
_expireNotification() { _expireNotification() {
this._notificationExpired = true; this._notificationExpired = true;
this._updateState(); this._updateState();
}, }
get queueCount() { get queueCount() {
return this._notificationQueue.length; return this._notificationQueue.length;
}, }
set bannerBlocked(v) { set bannerBlocked(v) {
if (this._bannerBlocked == v) if (this._bannerBlocked == v)
return; return;
this._bannerBlocked = v; this._bannerBlocked = v;
this._updateState(); this._updateState();
}, }
contains(source) { contains(source) {
return this._sources.has(source); return this._sources.has(source);
}, }
add(source) { add(source) {
if (this.contains(source)) { if (this.contains(source)) {
@ -1003,7 +986,7 @@ var MessageTray = new Lang.Class({
}); });
source.policy.connect('policy-changed', this._updateState.bind(this)); source.policy.connect('policy-changed', this._updateState.bind(this));
this._onSourceEnableChanged(source.policy, source); this._onSourceEnableChanged(source.policy, source);
}, }
_addSource(source) { _addSource(source) {
let obj = { let obj = {
@ -1018,7 +1001,7 @@ var MessageTray = new Lang.Class({
obj.destroyId = source.connect('destroy', this._onSourceDestroy.bind(this)); obj.destroyId = source.connect('destroy', this._onSourceDestroy.bind(this));
this.emit('source-added', source); this.emit('source-added', source);
}, }
_removeSource(source) { _removeSource(source) {
let obj = this._sources.get(source); let obj = this._sources.get(source);
@ -1028,11 +1011,11 @@ var MessageTray = new Lang.Class({
source.disconnect(obj.destroyId); source.disconnect(obj.destroyId);
this.emit('source-removed', source); this.emit('source-removed', source);
}, }
getSources() { getSources() {
return [...this._sources.keys()]; return [...this._sources.keys()];
}, }
_onSourceEnableChanged(policy, source) { _onSourceEnableChanged(policy, source) {
let wasEnabled = this.contains(source); let wasEnabled = this.contains(source);
@ -1044,11 +1027,11 @@ var MessageTray = new Lang.Class({
else else
this._removeSource(source); this._removeSource(source);
} }
}, }
_onSourceDestroy(source) { _onSourceDestroy(source) {
this._removeSource(source); this._removeSource(source);
}, }
_onNotificationDestroy(notification) { _onNotificationDestroy(notification) {
if (this._notification == notification && (this._notificationState == State.SHOWN || this._notificationState == State.SHOWING)) { 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._notificationQueue.splice(index, 1);
this.emit('queue-changed'); this.emit('queue-changed');
} }
}, }
_onNotify(source, notification) { _onNotify(source, notification) {
if (this._notification == notification) { if (this._notification == notification) {
@ -1089,7 +1072,7 @@ var MessageTray = new Lang.Class({
} }
} }
this._updateState(); this._updateState();
}, }
_resetNotificationLeftTimeout() { _resetNotificationLeftTimeout() {
this._useLongerNotificationLeftTimeout = false; this._useLongerNotificationLeftTimeout = false;
@ -1099,7 +1082,7 @@ var MessageTray = new Lang.Class({
this._notificationLeftMouseX = -1; this._notificationLeftMouseX = -1;
this._notificationLeftMouseY = -1; this._notificationLeftMouseY = -1;
} }
}, }
_onNotificationHoverChanged() { _onNotificationHoverChanged() {
if (this._bannerBin.hover == this._notificationHovered) 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)); this._notificationLeftTimeoutId = Mainloop.timeout_add(timeout, this._onNotificationLeftTimeout.bind(this));
GLib.Source.set_name_by_id(this._notificationLeftTimeoutId, '[gnome-shell] this._onNotificationLeftTimeout'); GLib.Source.set_name_by_id(this._notificationLeftTimeoutId, '[gnome-shell] this._onNotificationLeftTimeout');
} }
}, }
_onStatusChanged(status) { _onStatusChanged(status) {
if (status == GnomeSession.PresenceStatus.BUSY) { if (status == GnomeSession.PresenceStatus.BUSY) {
@ -1158,7 +1141,7 @@ var MessageTray = new Lang.Class({
} }
this._updateState(); this._updateState();
}, }
_onNotificationLeftTimeout() { _onNotificationLeftTimeout() {
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
@ -1180,13 +1163,13 @@ var MessageTray = new Lang.Class({
this._updateState(); this._updateState();
} }
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_escapeTray() { _escapeTray() {
this._pointerInNotification = false; this._pointerInNotification = false;
this._updateNotificationTimeout(0); this._updateNotificationTimeout(0);
this._updateState(); this._updateState();
}, }
// All of the logic for what happens when occurs here; the various // All of the logic for what happens when occurs here; the various
// event handlers merely update variables such as // 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 // Clean transient variables that are used to communicate actions
// to updateState() // to updateState()
this._notificationExpired = false; this._notificationExpired = false;
}, }
_tween(actor, statevar, value, params) { _tween(actor, statevar, value, params) {
let onComplete = params.onComplete; let onComplete = params.onComplete;
@ -1266,24 +1249,24 @@ var MessageTray = new Lang.Class({
let valuing = (value == State.SHOWN) ? State.SHOWING : State.HIDING; let valuing = (value == State.SHOWN) ? State.SHOWING : State.HIDING;
this[statevar] = valuing; this[statevar] = valuing;
}, }
_tweenComplete(statevar, value, onComplete, onCompleteScope, onCompleteParams) { _tweenComplete(statevar, value, onComplete, onCompleteScope, onCompleteParams) {
this[statevar] = value; this[statevar] = value;
if (onComplete) if (onComplete)
onComplete.apply(onCompleteScope, onCompleteParams); onComplete.apply(onCompleteScope, onCompleteParams);
this._updateState(); this._updateState();
}, }
_clampOpacity() { _clampOpacity() {
this._bannerBin.opacity = Math.max(0, Math.min(this._bannerBin._opacity, 255)); this._bannerBin.opacity = Math.max(0, Math.min(this._bannerBin._opacity, 255));
}, }
_onIdleMonitorBecameActive() { _onIdleMonitorBecameActive() {
this._userActiveWhileNotificationShown = true; this._userActiveWhileNotificationShown = true;
this._updateNotificationTimeout(2000); this._updateNotificationTimeout(2000);
this._updateState(); this._updateState();
}, }
_showNotification() { _showNotification() {
this._notification = this._notificationQueue.shift(); this._notification = this._notificationQueue.shift();
@ -1328,7 +1311,7 @@ var MessageTray = new Lang.Class({
this._lastSeenMouseY = y; this._lastSeenMouseY = y;
this._resetNotificationLeftTimeout(); this._resetNotificationLeftTimeout();
}, }
_updateShowingNotification() { _updateShowingNotification() {
this._notification.acknowledged = true; this._notification.acknowledged = true;
@ -1362,12 +1345,12 @@ var MessageTray = new Lang.Class({
}; };
this._tween(this._bannerBin, '_notificationState', State.SHOWN, tweenParams); this._tween(this._bannerBin, '_notificationState', State.SHOWN, tweenParams);
}, }
_showNotificationCompleted() { _showNotificationCompleted() {
if (this._notification.urgency != Urgency.CRITICAL) if (this._notification.urgency != Urgency.CRITICAL)
this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000); this._updateNotificationTimeout(NOTIFICATION_TIMEOUT * 1000);
}, }
_updateNotificationTimeout(timeout) { _updateNotificationTimeout(timeout) {
if (this._notificationTimeoutId) { if (this._notificationTimeoutId) {
@ -1380,7 +1363,7 @@ var MessageTray = new Lang.Class({
this._notificationTimeout.bind(this)); this._notificationTimeout.bind(this));
GLib.Source.set_name_by_id(this._notificationTimeoutId, '[gnome-shell] this._notificationTimeout'); GLib.Source.set_name_by_id(this._notificationTimeoutId, '[gnome-shell] this._notificationTimeout');
} }
}, }
_notificationTimeout() { _notificationTimeout() {
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
@ -1404,7 +1387,7 @@ var MessageTray = new Lang.Class({
this._lastSeenMouseX = x; this._lastSeenMouseX = x;
this._lastSeenMouseY = y; this._lastSeenMouseY = y;
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_hideNotification(animate) { _hideNotification(animate) {
this._notificationFocusGrabber.ungrabFocus(); this._notificationFocusGrabber.ungrabFocus();
@ -1438,7 +1421,7 @@ var MessageTray = new Lang.Class({
this._notificationState = State.HIDDEN; this._notificationState = State.HIDDEN;
this._hideNotificationCompleted(); this._hideNotificationCompleted();
} }
}, }
_hideNotificationCompleted() { _hideNotificationCompleted() {
let notification = this._notification; let notification = this._notification;
@ -1453,14 +1436,14 @@ var MessageTray = new Lang.Class({
this._banner.actor.destroy(); this._banner.actor.destroy();
this._banner = null; this._banner = null;
this.actor.hide(); this.actor.hide();
}, }
_expandActiveNotification() { _expandActiveNotification() {
if (!this._banner) if (!this._banner)
return; return;
this._expandBanner(false); this._expandBanner(false);
}, }
_expandBanner(autoExpanding) { _expandBanner(autoExpanding) {
// Don't animate changes in notifications that are auto-expanding. // 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. // Don't focus notifications that are auto-expanding.
if (!autoExpanding) if (!autoExpanding)
this._ensureBannerFocused(); this._ensureBannerFocused();
}, }
_ensureBannerFocused() { _ensureBannerFocused() {
this._notificationFocusGrabber.grabFocus(); this._notificationFocusGrabber.grabFocus();
} }
}); };
Signals.addSignalMethods(MessageTray.prototype); Signals.addSignalMethods(MessageTray.prototype);
var SystemNotificationSource = new Lang.Class({ var SystemNotificationSource = class SystemNotificationSource extends Source {
Name: 'SystemNotificationSource', constructor() {
Extends: Source, super(_("System Information"), 'dialog-information-symbolic');
}
_init() {
this.parent(_("System Information"), 'dialog-information-symbolic');
},
open() { open() {
this.destroy(); this.destroy();
} }
}); };

View File

@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
const Gdk = imports.gi.Gdk; const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Pango = imports.gi.Pango; const Pango = imports.gi.Pango;
const St = imports.gi.St; const St = imports.gi.St;
@ -31,10 +30,8 @@ var State = {
FADED_OUT: 4 FADED_OUT: 4
}; };
var ModalDialog = new Lang.Class({ var ModalDialog = class {
Name: 'ModalDialog', constructor(params) {
_init(params) {
params = Params.parse(params, { shellReactive: false, params = Params.parse(params, { shellReactive: false,
styleClass: null, styleClass: null,
actionMode: Shell.ActionMode.SYSTEM_MODAL, actionMode: Shell.ActionMode.SYSTEM_MODAL,
@ -87,30 +84,30 @@ var ModalDialog = new Lang.Class({
this._initialKeyFocus = null; this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
this._savedKeyFocus = null; this._savedKeyFocus = null;
}, }
destroy() { destroy() {
this._group.destroy(); this._group.destroy();
}, }
clearButtons() { clearButtons() {
this.dialogLayout.clearButtons(); this.dialogLayout.clearButtons();
}, }
setButtons(buttons) { setButtons(buttons) {
this.clearButtons(); this.clearButtons();
for (let buttonInfo of buttons) for (let buttonInfo of buttons)
this.addButton(buttonInfo); this.addButton(buttonInfo);
}, }
addButton(buttonInfo) { addButton(buttonInfo) {
return this.dialogLayout.addButton(buttonInfo); return this.dialogLayout.addButton(buttonInfo);
}, }
_onGroupDestroy() { _onGroupDestroy() {
this.emit('destroy'); this.emit('destroy');
}, }
_fadeOpen(onPrimary) { _fadeOpen(onPrimary) {
if (onPrimary) if (onPrimary)
@ -134,7 +131,7 @@ var ModalDialog = new Lang.Class({
this.emit('opened'); this.emit('opened');
} }
}); });
}, }
setInitialKeyFocus(actor) { setInitialKeyFocus(actor) {
if (this._initialKeyFocusDestroyId) if (this._initialKeyFocusDestroyId)
@ -146,7 +143,7 @@ var ModalDialog = new Lang.Class({
this._initialKeyFocus = null; this._initialKeyFocus = null;
this._initialKeyFocusDestroyId = 0; this._initialKeyFocusDestroyId = 0;
}); });
}, }
open(timestamp, onPrimary) { open(timestamp, onPrimary) {
if (this.state == State.OPENED || this.state == State.OPENING) if (this.state == State.OPENED || this.state == State.OPENING)
@ -157,7 +154,7 @@ var ModalDialog = new Lang.Class({
this._fadeOpen(onPrimary); this._fadeOpen(onPrimary);
return true; return true;
}, }
_closeComplete() { _closeComplete() {
this.state = State.CLOSED; this.state = State.CLOSED;
@ -166,7 +163,7 @@ var ModalDialog = new Lang.Class({
if (this._destroyOnClose) if (this._destroyOnClose)
this.destroy(); this.destroy();
}, }
close(timestamp) { close(timestamp) {
if (this.state == State.CLOSED || this.state == State.CLOSING) if (this.state == State.CLOSED || this.state == State.CLOSING)
@ -185,7 +182,7 @@ var ModalDialog = new Lang.Class({
}) })
else else
this._closeComplete(); this._closeComplete();
}, }
// Drop modal status without closing the dialog; this makes the // Drop modal status without closing the dialog; this makes the
// dialog insensitive as well, so it needs to be followed shortly // dialog insensitive as well, so it needs to be followed shortly
@ -205,7 +202,7 @@ var ModalDialog = new Lang.Class({
if (!this._shellReactive) if (!this._shellReactive)
this._eventBlocker.raise_top(); this._eventBlocker.raise_top();
}, }
pushModal(timestamp) { pushModal(timestamp) {
if (this._hasModal) if (this._hasModal)
@ -229,7 +226,7 @@ var ModalDialog = new Lang.Class({
if (!this._shellReactive) if (!this._shellReactive)
this._eventBlocker.lower_bottom(); this._eventBlocker.lower_bottom();
return true; return true;
}, }
// This method is like close, but fades the dialog out much slower, // This method is like close, but fades the dialog out much slower,
// and leaves the lightbox in place. Once in the faded out state, // 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); Signals.addSignalMethods(ModalDialog.prototype);

View File

@ -1,5 +1,4 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
@ -21,15 +20,12 @@ const MprisPlayerProxy = Gio.DBusProxy.makeProxyWrapper(MprisPlayerIface);
const MPRIS_PLAYER_PREFIX = 'org.mpris.MediaPlayer2.'; const MPRIS_PLAYER_PREFIX = 'org.mpris.MediaPlayer2.';
var MediaMessage = new Lang.Class({ var MediaMessage = class MediaMessage extends MessageList.Message {
Name: 'MediaMessage', constructor(player) {
Extends: MessageList.Message, super('', '');
_init(player) {
this._player = player; this._player = player;
this.parent('', '');
this._icon = new St.Icon({ style_class: 'media-message-cover-icon' }); this._icon = new St.Icon({ style_class: 'media-message-cover-icon' });
this.setIcon(this._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('changed', this._update.bind(this));
this._player.connect('closed', this.close.bind(this)); this._player.connect('closed', this.close.bind(this));
this._update(); this._update();
}, }
_onClicked() { _onClicked() {
this._player.raise(); this._player.raise();
Main.panel.closeCalendar(); Main.panel.closeCalendar();
}, }
_updateNavButton(button, sensitive) { _updateNavButton(button, sensitive) {
button.reactive = sensitive; button.reactive = sensitive;
}, }
_update() { _update() {
this.setTitle(this._player.trackArtists.join(', ')); 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._prevButton, this._player.canGoPrevious);
this._updateNavButton(this._nextButton, this._player.canGoNext); this._updateNavButton(this._nextButton, this._player.canGoNext);
} }
}); };
var MprisPlayer = new Lang.Class({ var MprisPlayer = class MprisPlayer {
Name: 'MprisPlayer', constructor(busName) {
_init(busName) {
this._mprisProxy = new MprisProxy(Gio.DBus.session, busName, this._mprisProxy = new MprisProxy(Gio.DBus.session, busName,
'/org/mpris/MediaPlayer2', '/org/mpris/MediaPlayer2',
this._onMprisProxyReady.bind(this)); this._onMprisProxyReady.bind(this));
@ -100,43 +94,43 @@ var MprisPlayer = new Lang.Class({
this._trackArtists = []; this._trackArtists = [];
this._trackTitle = ''; this._trackTitle = '';
this._trackCoverUrl = ''; this._trackCoverUrl = '';
}, }
get status() { get status() {
return this._playerProxy.PlaybackStatus; return this._playerProxy.PlaybackStatus;
}, }
get trackArtists() { get trackArtists() {
return this._trackArtists; return this._trackArtists;
}, }
get trackTitle() { get trackTitle() {
return this._trackTitle; return this._trackTitle;
}, }
get trackCoverUrl() { get trackCoverUrl() {
return this._trackCoverUrl; return this._trackCoverUrl;
}, }
playPause() { playPause() {
this._playerProxy.PlayPauseRemote(); this._playerProxy.PlayPauseRemote();
}, }
get canGoNext() { get canGoNext() {
return this._playerProxy.CanGoNext; return this._playerProxy.CanGoNext;
}, }
next() { next() {
this._playerProxy.NextRemote(); this._playerProxy.NextRemote();
}, }
get canGoPrevious() { get canGoPrevious() {
return this._playerProxy.CanGoPrevious; return this._playerProxy.CanGoPrevious;
}, }
previous() { previous() {
this._playerProxy.PreviousRemote(); this._playerProxy.PreviousRemote();
}, }
raise() { raise() {
// The remote Raise() method may run into focus stealing prevention, // The remote Raise() method may run into focus stealing prevention,
@ -151,7 +145,7 @@ var MprisPlayer = new Lang.Class({
app.activate(); app.activate();
else if (this._mprisProxy.CanRaise) else if (this._mprisProxy.CanRaise)
this._mprisProxy.RaiseRemote(); this._mprisProxy.RaiseRemote();
}, }
_close() { _close() {
this._mprisProxy.disconnect(this._ownerNotifyId); this._mprisProxy.disconnect(this._ownerNotifyId);
@ -161,7 +155,7 @@ var MprisPlayer = new Lang.Class({
this._playerProxy = null; this._playerProxy = null;
this.emit('closed'); this.emit('closed');
}, }
_onMprisProxyReady() { _onMprisProxyReady() {
this._ownerNotifyId = this._mprisProxy.connect('notify::g-name-owner', this._ownerNotifyId = this._mprisProxy.connect('notify::g-name-owner',
@ -169,13 +163,13 @@ var MprisPlayer = new Lang.Class({
if (!this._mprisProxy.g_name_owner) if (!this._mprisProxy.g_name_owner)
this._close(); this._close();
}); });
}, }
_onPlayerProxyReady() { _onPlayerProxyReady() {
this._propsChangedId = this._playerProxy.connect('g-properties-changed', this._propsChangedId = this._playerProxy.connect('g-properties-changed',
this._updateState.bind(this)); this._updateState.bind(this));
this._updateState(); this._updateState();
}, }
_updateState() { _updateState() {
let metadata = {}; let metadata = {};
@ -197,15 +191,12 @@ var MprisPlayer = new Lang.Class({
this._close(); this._close();
} }
} }
}); };
Signals.addSignalMethods(MprisPlayer.prototype); Signals.addSignalMethods(MprisPlayer.prototype);
var MediaSection = new Lang.Class({ var MediaSection = class MediaSection extends MessageList.MessageListSection {
Name: 'MediaSection', constructor() {
Extends: MessageList.MessageListSection, super();
_init() {
this.parent();
this._players = new Map(); this._players = new Map();
@ -213,11 +204,11 @@ var MediaSection = new Lang.Class({
'org.freedesktop.DBus', 'org.freedesktop.DBus',
'/org/freedesktop/DBus', '/org/freedesktop/DBus',
this._onProxyReady.bind(this)); this._onProxyReady.bind(this));
}, }
_shouldShow() { _shouldShow() {
return !this.empty && Calendar.isToday(this._date); return !this.empty && Calendar.isToday(this._date);
}, }
_addPlayer(busName) { _addPlayer(busName) {
if (this._players.get(busName)) if (this._players.get(busName))
@ -234,7 +225,7 @@ var MediaSection = new Lang.Class({
this.addMessage(message, true); this.addMessage(message, true);
}); });
this._players.set(busName, player); this._players.set(busName, player);
}, }
_onProxyReady() { _onProxyReady() {
this._proxy.ListNamesRemote(([names]) => { this._proxy.ListNamesRemote(([names]) => {
@ -247,7 +238,7 @@ var MediaSection = new Lang.Class({
}); });
this._proxy.connectSignal('NameOwnerChanged', this._proxy.connectSignal('NameOwnerChanged',
this._onNameOwnerChanged.bind(this)); this._onNameOwnerChanged.bind(this));
}, }
_onNameOwnerChanged(proxy, sender, [name, oldOwner, newOwner]) { _onNameOwnerChanged(proxy, sender, [name, oldOwner, newOwner]) {
if (!name.startsWith(MPRIS_PLAYER_PREFIX)) if (!name.startsWith(MPRIS_PLAYER_PREFIX))
@ -256,4 +247,4 @@ var MediaSection = new Lang.Class({
if (newOwner && !oldOwner) if (newOwner && !oldOwner)
this._addPlayer(name); this._addPlayer(name);
} }
}); };

View File

@ -5,7 +5,6 @@ const GdkPixbuf = imports.gi.GdkPixbuf;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const St = imports.gi.St; const St = imports.gi.St;
@ -51,10 +50,8 @@ const rewriteRules = {
] ]
}; };
var FdoNotificationDaemon = new Lang.Class({ var FdoNotificationDaemon = class FdoNotificationDaemon {
Name: 'FdoNotificationDaemon', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(FdoNotificationsIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(FdoNotificationsIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/freedesktop/Notifications'); this._dbusImpl.export(Gio.DBus.session, '/org/freedesktop/Notifications');
@ -69,7 +66,7 @@ var FdoNotificationDaemon = new Lang.Class({
this._onFocusAppChanged.bind(this)); this._onFocusAppChanged.bind(this));
Main.overview.connect('hidden', Main.overview.connect('hidden',
this._onFocusAppChanged.bind(this)); this._onFocusAppChanged.bind(this));
}, }
_imageForNotificationData(hints) { _imageForNotificationData(hints) {
if (hints['image-data']) { if (hints['image-data']) {
@ -81,7 +78,7 @@ var FdoNotificationDaemon = new Lang.Class({
return this._iconForNotificationData(hints['image-path']); return this._iconForNotificationData(hints['image-path']);
} }
return null; return null;
}, }
_fallbackIconForNotificationData(hints) { _fallbackIconForNotificationData(hints) {
let stockIcon; let stockIcon;
@ -95,7 +92,7 @@ var FdoNotificationDaemon = new Lang.Class({
break; break;
} }
return new Gio.ThemedIcon({ name: stockIcon }); return new Gio.ThemedIcon({ name: stockIcon });
}, }
_iconForNotificationData(icon) { _iconForNotificationData(icon) {
if (icon) { if (icon) {
@ -107,7 +104,7 @@ var FdoNotificationDaemon = new Lang.Class({
return new Gio.ThemedIcon({ name: icon }); return new Gio.ThemedIcon({ name: icon });
} }
return null; return null;
}, }
_lookupSource(title, pid) { _lookupSource(title, pid) {
for (let i = 0; i < this._sources.length; i++) { for (let i = 0; i < this._sources.length; i++) {
@ -116,7 +113,7 @@ var FdoNotificationDaemon = new Lang.Class({
return source; return source;
} }
return null; return null;
}, }
// Returns the source associated with ndata.notification if it is set. // Returns the source associated with ndata.notification if it is set.
// If the existing or requested source is associated with a tray icon // 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); Main.messageTray.add(source);
return source; return source;
}, }
NotifyAsync(params, invocation) { NotifyAsync(params, invocation) {
let [appName, replacesId, icon, summary, body, actions, hints, timeout] = params; 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])); return invocation.return_value(GLib.Variant.new('(u)', [id]));
}, }
_notifyForSource(source, ndata) { _notifyForSource(source, ndata) {
let [id, icon, summary, body, actions, hints, notification] = let [id, icon, summary, body, actions, hints, notification] =
@ -357,7 +354,7 @@ var FdoNotificationDaemon = new Lang.Class({
let sourceGIcon = source.useNotificationIcon ? gicon : null; let sourceGIcon = source.useNotificationIcon ? gicon : null;
source.processNotification(notification, sourceGIcon); source.processNotification(notification, sourceGIcon);
}, }
CloseNotification(id) { CloseNotification(id) {
let ndata = this._notifications[id]; let ndata = this._notifications[id];
@ -366,7 +363,7 @@ var FdoNotificationDaemon = new Lang.Class({
ndata.notification.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); ndata.notification.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
delete this._notifications[id]; delete this._notifications[id];
} }
}, }
GetCapabilities() { GetCapabilities() {
return [ return [
@ -381,7 +378,7 @@ var FdoNotificationDaemon = new Lang.Class({
'persistence', 'persistence',
'sound', 'sound',
]; ];
}, }
GetServerInformation() { GetServerInformation() {
return [ return [
@ -390,7 +387,7 @@ var FdoNotificationDaemon = new Lang.Class({
Config.PACKAGE_VERSION, Config.PACKAGE_VERSION,
'1.2' '1.2'
]; ];
}, }
_onFocusAppChanged() { _onFocusAppChanged() {
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
@ -404,31 +401,27 @@ var FdoNotificationDaemon = new Lang.Class({
return; return;
} }
} }
}, }
_emitNotificationClosed(id, reason) { _emitNotificationClosed(id, reason) {
this._dbusImpl.emit_signal('NotificationClosed', this._dbusImpl.emit_signal('NotificationClosed',
GLib.Variant.new('(uu)', [id, reason])); GLib.Variant.new('(uu)', [id, reason]));
}, }
_emitActionInvoked(id, action) { _emitActionInvoked(id, action) {
this._dbusImpl.emit_signal('ActionInvoked', this._dbusImpl.emit_signal('ActionInvoked',
GLib.Variant.new('(us)', [id, action])); GLib.Variant.new('(us)', [id, action]));
} }
}); };
var FdoNotificationDaemonSource = new Lang.Class({ var FdoNotificationDaemonSource =
Name: 'FdoNotificationDaemonSource', class FdoNotificationDaemonSource extends MessageTray.Source {
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.pid = pid;
this.app = this._getApp(appId); this.app = this._getApp(appId);
this.parent(title);
this.initialTitle = title; this.initialTitle = title;
if (this.app) if (this.app)
@ -443,7 +436,7 @@ var FdoNotificationDaemonSource = new Lang.Class({
this._onNameVanished.bind(this)); this._onNameVanished.bind(this));
else else
this._nameWatcherId = 0; this._nameWatcherId = 0;
}, }
_createPolicy() { _createPolicy() {
if (this.app && this.app.get_app_info()) { if (this.app && this.app.get_app_info()) {
@ -452,7 +445,7 @@ var FdoNotificationDaemonSource = new Lang.Class({
} else { } else {
return new MessageTray.NotificationGenericPolicy(); return new MessageTray.NotificationGenericPolicy();
} }
}, }
_onNameVanished() { _onNameVanished() {
// Destroy the notification source when its sender is removed from DBus. // 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. // so allow the code path that handles the tray icon being removed to handle that case.
if (this.app) if (this.app)
this.destroy(); this.destroy();
}, }
processNotification(notification, gicon) { processNotification(notification, gicon) {
if (gicon) if (gicon)
@ -474,7 +467,7 @@ var FdoNotificationDaemonSource = new Lang.Class({
this.pushNotification(notification); this.pushNotification(notification);
else else
this.notify(notification); this.notify(notification);
}, }
_getApp(appId) { _getApp(appId) {
let app; let app;
@ -490,7 +483,7 @@ var FdoNotificationDaemonSource = new Lang.Class({
} }
return null; return null;
}, }
setTitle(title) { setTitle(title) {
// Do nothing if .app is set, we don't want to override the // 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) if (this.app)
return; return;
this.parent(title); super.setTitle(title);
}, }
open() { open() {
this.openApp(); this.openApp();
this.destroyNonResidentNotifications(); this.destroyNonResidentNotifications();
}, }
openApp() { openApp() {
if (this.app == null) if (this.app == null)
@ -514,7 +507,7 @@ var FdoNotificationDaemonSource = new Lang.Class({
this.app.activate(); this.app.activate();
Main.overview.hide(); Main.overview.hide();
Main.panel.closeCalendar(); Main.panel.closeCalendar();
}, }
destroy() { destroy() {
if (this._nameWatcherId) { if (this._nameWatcherId) {
@ -522,8 +515,8 @@ var FdoNotificationDaemonSource = new Lang.Class({
this._nameWatcherId = 0; this._nameWatcherId = 0;
} }
this.parent(); super.destroy();
}, }
createIcon(size) { createIcon(size) {
if (this.app) { if (this.app) {
@ -535,7 +528,7 @@ var FdoNotificationDaemonSource = new Lang.Class({
return null; return null;
} }
} }
}); };
const PRIORITY_URGENCY_MAP = { const PRIORITY_URGENCY_MAP = {
low: MessageTray.Urgency.LOW, low: MessageTray.Urgency.LOW,
@ -544,12 +537,10 @@ const PRIORITY_URGENCY_MAP = {
urgent: MessageTray.Urgency.CRITICAL urgent: MessageTray.Urgency.CRITICAL
}; };
var GtkNotificationDaemonNotification = new Lang.Class({ var GtkNotificationDaemonNotification =
Name: 'GtkNotificationDaemonNotification', class GtkNotificationDaemonNotification extends MessageTray.Notification {
Extends: MessageTray.Notification, constructor(source, notification) {
super(source);
_init(source, notification) {
this.parent(source);
this._serialized = GLib.Variant.new('a{sv}', notification); this._serialized = GLib.Variant.new('a{sv}', notification);
let { "title": title, let { "title": title,
@ -586,7 +577,7 @@ var GtkNotificationDaemonNotification = new Lang.Class({
this.update(title.unpack(), body ? body.unpack() : null, this.update(title.unpack(), body ? body.unpack() : null,
{ gicon: gicon ? Gio.icon_deserialize(gicon) : null, { gicon: gicon ? Gio.icon_deserialize(gicon) : null,
datetime : time ? GLib.DateTime.new_from_unix_local(time.unpack()) : null }); datetime : time ? GLib.DateTime.new_from_unix_local(time.unpack()) : null });
}, }
_activateAction(namespacedActionId, target) { _activateAction(namespacedActionId, target) {
if (namespacedActionId) { if (namespacedActionId) {
@ -597,22 +588,22 @@ var GtkNotificationDaemonNotification = new Lang.Class({
} else { } else {
this.source.open(); this.source.open();
} }
}, }
_onButtonClicked(button) { _onButtonClicked(button) {
let { 'action': action, 'target': actionTarget } = button; let { 'action': action, 'target': actionTarget } = button;
this._activateAction(action.unpack(), actionTarget); this._activateAction(action.unpack(), actionTarget);
}, }
activate() { activate() {
this._activateAction(this._defaultAction, this._defaultActionTarget); this._activateAction(this._defaultAction, this._defaultActionTarget);
this.parent(); super.activate();
}, }
serialize() { serialize() {
return this._serialized; return this._serialized;
}, }
}); };
const FdoApplicationIface = loadInterfaceXML('org.freedesktop.Application'); const FdoApplicationIface = loadInterfaceXML('org.freedesktop.Application');
const FdoApplicationProxy = Gio.DBusProxy.makeProxyWrapper(FdoApplicationIface); const FdoApplicationProxy = Gio.DBusProxy.makeProxyWrapper(FdoApplicationIface);
@ -628,41 +619,42 @@ function getPlatformData() {
function InvalidAppError() {} function InvalidAppError() {}
var GtkNotificationDaemonAppSource = new Lang.Class({ var GtkNotificationDaemonAppSource =
Name: 'GtkNotificationDaemonAppSource', class GtkNotificationDaemonAppSource extends MessageTray.Source {
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._appId = appId;
this._objectPath = objectPathFromAppId(appId); this._app = app;
if (!GLib.Variant.is_object_path(this._objectPath)) this._objectPath = objectPath;
throw new InvalidAppError();
this._app = Shell.AppSystem.get_default().lookup_app(appId + '.desktop');
if (!this._app)
throw new InvalidAppError();
this._notifications = {}; this._notifications = {};
this._notificationPending = false; this._notificationPending = false;
}
this.parent(this._app.get_name());
},
createIcon(size) { createIcon(size) {
return this._app.create_icon_texture(size); return this._app.create_icon_texture(size);
}, }
_createPolicy() { _createPolicy() {
return new MessageTray.NotificationApplicationPolicy(this._appId); return new MessageTray.NotificationApplicationPolicy(this._appId);
}, }
_createApp(callback) { _createApp(callback) {
return new FdoApplicationProxy(Gio.DBus.session, this._appId, this._objectPath, callback); return new FdoApplicationProxy(Gio.DBus.session, this._appId, this._objectPath, callback);
}, }
_createNotification(params) { _createNotification(params) {
return new GtkNotificationDaemonNotification(this, params); return new GtkNotificationDaemonNotification(this, params);
}, }
activateAction(actionId, target) { activateAction(actionId, target) {
this._createApp((app, error) => { this._createApp((app, error) => {
@ -673,7 +665,7 @@ var GtkNotificationDaemonAppSource = new Lang.Class({
}); });
Main.overview.hide(); Main.overview.hide();
Main.panel.closeCalendar(); Main.panel.closeCalendar();
}, }
open() { open() {
this._createApp((app, error) => { this._createApp((app, error) => {
@ -684,7 +676,7 @@ var GtkNotificationDaemonAppSource = new Lang.Class({
}); });
Main.overview.hide(); Main.overview.hide();
Main.panel.closeCalendar(); Main.panel.closeCalendar();
}, }
addNotification(notificationId, notificationParams, showBanner) { addNotification(notificationId, notificationParams, showBanner) {
this._notificationPending = true; this._notificationPending = true;
@ -704,18 +696,18 @@ var GtkNotificationDaemonAppSource = new Lang.Class({
this.pushNotification(notification); this.pushNotification(notification);
this._notificationPending = false; this._notificationPending = false;
}, }
destroy(reason) { destroy(reason) {
if (this._notificationPending) if (this._notificationPending)
return; return;
this.parent(reason); super.destroy(reason);
}, }
removeNotification(notificationId) { removeNotification(notificationId) {
if (this._notifications[notificationId]) if (this._notifications[notificationId])
this._notifications[notificationId].destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED); this._notifications[notificationId].destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
}, }
serialize() { serialize() {
let notifications = []; let notifications = [];
@ -724,15 +716,13 @@ var GtkNotificationDaemonAppSource = new Lang.Class({
notifications.push([notificationId, notification.serialize()]); notifications.push([notificationId, notification.serialize()]);
} }
return [this._appId, notifications]; return [this._appId, notifications];
}, }
}); };
const GtkNotificationsIface = loadInterfaceXML('org.gtk.Notifications'); const GtkNotificationsIface = loadInterfaceXML('org.gtk.Notifications');
var GtkNotificationDaemon = new Lang.Class({ var GtkNotificationDaemon = class GtkNotificationDaemon {
Name: 'GtkNotificationDaemon', constructor() {
_init() {
this._sources = {}; this._sources = {};
this._loadNotifications(); this._loadNotifications();
@ -741,7 +731,7 @@ var GtkNotificationDaemon = new Lang.Class({
this._dbusImpl.export(Gio.DBus.session, '/org/gtk/Notifications'); this._dbusImpl.export(Gio.DBus.session, '/org/gtk/Notifications');
Gio.DBus.session.own_name('org.gtk.Notifications', Gio.BusNameOwnerFlags.REPLACE, null, null); Gio.DBus.session.own_name('org.gtk.Notifications', Gio.BusNameOwnerFlags.REPLACE, null, null);
}, }
_ensureAppSource(appId) { _ensureAppSource(appId) {
if (this._sources[appId]) if (this._sources[appId])
@ -757,7 +747,7 @@ var GtkNotificationDaemon = new Lang.Class({
Main.messageTray.add(source); Main.messageTray.add(source);
this._sources[appId] = source; this._sources[appId] = source;
return source; return source;
}, }
_loadNotifications() { _loadNotifications() {
this._isLoading = true; this._isLoading = true;
@ -785,7 +775,7 @@ var GtkNotificationDaemon = new Lang.Class({
} }
this._isLoading = false; this._isLoading = false;
}, }
_saveNotifications() { _saveNotifications() {
if (this._isLoading) if (this._isLoading)
@ -798,7 +788,7 @@ var GtkNotificationDaemon = new Lang.Class({
} }
global.set_persistent_state('notifications', new GLib.Variant('a(sa(sv))', sources)); global.set_persistent_state('notifications', new GLib.Variant('a(sa(sv))', sources));
}, }
AddNotificationAsync(params, invocation) { AddNotificationAsync(params, invocation) {
let [appId, notificationId, notification] = params; let [appId, notificationId, notification] = params;
@ -820,7 +810,7 @@ var GtkNotificationDaemon = new Lang.Class({
source.addNotification(notificationId, notification, true); source.addNotification(notificationId, notification, true);
invocation.return_value(null); invocation.return_value(null);
}, }
RemoveNotificationAsync(params, invocation) { RemoveNotificationAsync(params, invocation) {
let [appId, notificationId] = params; let [appId, notificationId] = params;
@ -829,14 +819,12 @@ var GtkNotificationDaemon = new Lang.Class({
source.removeNotification(notificationId); source.removeNotification(notificationId);
invocation.return_value(null); invocation.return_value(null);
}, }
}); };
var NotificationDaemon = new Lang.Class({ var NotificationDaemon = class NotificationDaemon {
Name: 'NotificationDaemon', constructor() {
_init() {
this._fdoNotificationDaemon = new FdoNotificationDaemon(); this._fdoNotificationDaemon = new FdoNotificationDaemon();
this._gtkNotificationDaemon = new GtkNotificationDaemon(); this._gtkNotificationDaemon = new GtkNotificationDaemon();
}, }
}); };

View File

@ -4,17 +4,14 @@ const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const St = imports.gi.St; const St = imports.gi.St;
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
var FADE_TIME = 0.1; var FADE_TIME = 0.1;
var OsdMonitorLabel = new Lang.Class({ var OsdMonitorLabel = class {
Name: 'OsdMonitorLabel', constructor(monitor, label) {
_init(monitor, label) {
this._actor = new St.Widget({ x_expand: true, this._actor = new St.Widget({ x_expand: true,
y_expand: true }); y_expand: true });
@ -33,7 +30,7 @@ var OsdMonitorLabel = new Lang.Class({
this._position(); this._position();
Meta.disable_unredirect_for_display(global.display); Meta.disable_unredirect_for_display(global.display);
}, }
_position() { _position() {
let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor); let workArea = Main.layoutManager.getWorkAreaForMonitor(this._monitor);
@ -44,18 +41,16 @@ var OsdMonitorLabel = new Lang.Class({
this._box.x = workArea.x; this._box.x = workArea.x;
this._box.y = workArea.y; this._box.y = workArea.y;
}, }
destroy() { destroy() {
this._actor.destroy(); this._actor.destroy();
Meta.enable_unredirect_for_display(global.display); Meta.enable_unredirect_for_display(global.display);
} }
}); };
var OsdMonitorLabeler = new Lang.Class({ var OsdMonitorLabeler = class {
Name: 'OsdMonitorLabeler', constructor() {
_init() {
this._monitorManager = Meta.MonitorManager.get(); this._monitorManager = Meta.MonitorManager.get();
this._client = null; this._client = null;
this._clientWatchId = 0; this._clientWatchId = 0;
@ -64,7 +59,7 @@ var OsdMonitorLabeler = new Lang.Class({
Main.layoutManager.connect('monitors-changed', Main.layoutManager.connect('monitors-changed',
this._reset.bind(this)); this._reset.bind(this));
this._reset(); this._reset();
}, }
_reset() { _reset() {
for (let i in this._osdLabels) for (let i in this._osdLabels)
@ -74,7 +69,7 @@ var OsdMonitorLabeler = new Lang.Class({
let monitors = Main.layoutManager.monitors; let monitors = Main.layoutManager.monitors;
for (let i in monitors) for (let i in monitors)
this._monitorLabels.set(monitors[i].index, []); this._monitorLabels.set(monitors[i].index, []);
}, }
_trackClient(client) { _trackClient(client) {
if (this._client) if (this._client)
@ -86,7 +81,7 @@ var OsdMonitorLabeler = new Lang.Class({
this.hide(name); this.hide(name);
}); });
return true; return true;
}, }
_untrackClient(client) { _untrackClient(client) {
if (!this._client || this._client != client) if (!this._client || this._client != client)
@ -96,7 +91,7 @@ var OsdMonitorLabeler = new Lang.Class({
this._clientWatchId = 0; this._clientWatchId = 0;
this._client = null; this._client = null;
return true; return true;
}, }
show(client, params) { show(client, params) {
if (!this._trackClient(client)) if (!this._trackClient(client))
@ -118,7 +113,7 @@ var OsdMonitorLabeler = new Lang.Class({
labels.sort(); labels.sort();
this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' '))); this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' ')));
} }
}, }
show2(client, params) { show2(client, params) {
if (!this._trackClient(client)) if (!this._trackClient(client))
@ -137,7 +132,7 @@ var OsdMonitorLabeler = new Lang.Class({
labels.sort(); labels.sort();
this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' '))); this._osdLabels.push(new OsdMonitorLabel(monitor, labels.join(' ')));
} }
}, }
hide(client) { hide(client) {
if (!this._untrackClient(client)) if (!this._untrackClient(client))
@ -145,4 +140,4 @@ var OsdMonitorLabeler = new Lang.Class({
this._reset(); this._reset();
} }
}); };

View File

@ -16,44 +16,38 @@ var HIDE_TIMEOUT = 1500;
var FADE_TIME = 0.1; var FADE_TIME = 0.1;
var LEVEL_ANIMATION_TIME = 0.1; var LEVEL_ANIMATION_TIME = 0.1;
var LevelBar = new Lang.Class({ var LevelBar = class extends BarLevel.BarLevel {
Name: 'LevelBar', constructor() {
Extends: BarLevel.BarLevel, super(0, { styleClass: 'level' });
_init() {
this._level = 0; this._level = 0;
this._maxLevel = 100; this._maxLevel = 100;
let params = {
styleClass: 'level',
}
this.parent(this._level, params);
this.actor.accessible_name = _("Volume"); this.actor.accessible_name = _("Volume");
this.actor.connect('notify::width', () => { this.level = this.level; }); this.actor.connect('notify::width', () => { this.level = this.level; });
}, }
get level() { get level() {
return this._level; return this._level;
}, }
set level(value) { set level(value) {
this._level = Math.max(0, Math.min(value, this._maxLevel)); this._level = Math.max(0, Math.min(value, this._maxLevel));
this.setValue(this._level / 100); this.setValue(this._level / 100);
}, }
get maxLevel() { get maxLevel() {
return this._maxLevel; return this._maxLevel;
}, }
set maxLevel(value) { set maxLevel(value) {
this._maxLevel = Math.max(100, value); this._maxLevel = Math.max(100, value);
this.setMaximumValue(this._maxLevel / 100); this.setMaximumValue(this._maxLevel / 100);
} }
}); };
var OsdWindowConstraint = new Lang.Class({ var OsdWindowConstraint = new Lang.Class({
Name: 'OsdWindowConstraint', Name: 'OsdWindowConstraint',
@ -87,10 +81,8 @@ var OsdWindowConstraint = new Lang.Class({
} }
}); });
var OsdWindow = new Lang.Class({ var OsdWindow = class {
Name: 'OsdWindow', constructor(monitorIndex) {
_init(monitorIndex) {
this.actor = new St.Widget({ x_expand: true, this.actor = new St.Widget({ x_expand: true,
y_expand: true, y_expand: true,
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
@ -129,7 +121,7 @@ var OsdWindow = new Lang.Class({
this._relayout.bind(this)); this._relayout.bind(this));
this._relayout(); this._relayout();
Main.uiGroup.add_child(this.actor); Main.uiGroup.add_child(this.actor);
}, }
_onDestroy() { _onDestroy() {
if (this._monitorsChangedId) if (this._monitorsChangedId)
@ -140,17 +132,17 @@ var OsdWindow = new Lang.Class({
if (this._scaleChangedId) if (this._scaleChangedId)
themeContext.disconnect(this._scaleChangedId); themeContext.disconnect(this._scaleChangedId);
this._scaleChangedId = 0; this._scaleChangedId = 0;
}, }
setIcon(icon) { setIcon(icon) {
this._icon.gicon = icon; this._icon.gicon = icon;
}, }
setLabel(label) { setLabel(label) {
this._label.visible = (label != undefined); this._label.visible = (label != undefined);
if (label) if (label)
this._label.text = label; this._label.text = label;
}, }
setLevel(level) { setLevel(level) {
this._level.actor.visible = (level != undefined); this._level.actor.visible = (level != undefined);
@ -163,13 +155,13 @@ var OsdWindow = new Lang.Class({
else else
this._level.level = level; this._level.level = level;
} }
}, }
setMaxLevel(maxLevel) { setMaxLevel(maxLevel) {
if (maxLevel === undefined) if (maxLevel === undefined)
maxLevel = 100; maxLevel = 100;
this._level.maxLevel = maxLevel; this._level.maxLevel = maxLevel;
}, }
show() { show() {
if (!this._icon.gicon) if (!this._icon.gicon)
@ -192,7 +184,7 @@ var OsdWindow = new Lang.Class({
this._hideTimeoutId = Mainloop.timeout_add(HIDE_TIMEOUT, this._hideTimeoutId = Mainloop.timeout_add(HIDE_TIMEOUT,
this._hide.bind(this)); this._hide.bind(this));
GLib.Source.set_name_by_id(this._hideTimeoutId, '[gnome-shell] this._hide'); GLib.Source.set_name_by_id(this._hideTimeoutId, '[gnome-shell] this._hide');
}, }
cancel() { cancel() {
if (!this._hideTimeoutId) if (!this._hideTimeoutId)
@ -200,7 +192,7 @@ var OsdWindow = new Lang.Class({
Mainloop.source_remove(this._hideTimeoutId); Mainloop.source_remove(this._hideTimeoutId);
this._hide(); this._hide();
}, }
_hide() { _hide() {
this._hideTimeoutId = 0; this._hideTimeoutId = 0;
@ -214,14 +206,14 @@ var OsdWindow = new Lang.Class({
} }
}); });
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_reset() { _reset() {
this.actor.hide(); this.actor.hide();
this.setLabel(null); this.setLabel(null);
this.setMaxLevel(null); this.setMaxLevel(null);
this.setLevel(null); this.setLevel(null);
}, }
_relayout() { _relayout() {
/* assume 110x110 on a 640x480 display and scale from there */ /* 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._box.translation_y = Math.round(monitor.height / 4);
this._boxConstraint.minSize = popupSize; this._boxConstraint.minSize = popupSize;
} }
}); };
var OsdWindowManager = new Lang.Class({ var OsdWindowManager = class {
Name: 'OsdWindowManager', constructor() {
_init() {
this._osdWindows = []; this._osdWindows = [];
Main.layoutManager.connect('monitors-changed', Main.layoutManager.connect('monitors-changed',
this._monitorsChanged.bind(this)); this._monitorsChanged.bind(this));
this._monitorsChanged(); this._monitorsChanged();
}, }
_monitorsChanged() { _monitorsChanged() {
for (let i = 0; i < Main.layoutManager.monitors.length; i++) { 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; this._osdWindows.length = Main.layoutManager.monitors.length;
}, }
_showOsdWindow(monitorIndex, icon, label, level, maxLevel) { _showOsdWindow(monitorIndex, icon, label, level, maxLevel) {
this._osdWindows[monitorIndex].setIcon(icon); this._osdWindows[monitorIndex].setIcon(icon);
@ -271,7 +261,7 @@ var OsdWindowManager = new Lang.Class({
this._osdWindows[monitorIndex].setMaxLevel(maxLevel); this._osdWindows[monitorIndex].setMaxLevel(maxLevel);
this._osdWindows[monitorIndex].setLevel(level); this._osdWindows[monitorIndex].setLevel(level);
this._osdWindows[monitorIndex].show(); this._osdWindows[monitorIndex].show();
}, }
show(monitorIndex, icon, label, level, maxLevel) { show(monitorIndex, icon, label, level, maxLevel) {
if (monitorIndex != -1) { if (monitorIndex != -1) {
@ -285,10 +275,10 @@ var OsdWindowManager = new Lang.Class({
for (let i = 0; i < this._osdWindows.length; i++) for (let i = 0; i < this._osdWindows.length; i++)
this._showOsdWindow(i, icon, label, level, maxLevel); this._showOsdWindow(i, icon, label, level, maxLevel);
} }
}, }
hideAll() { hideAll() {
for (let i = 0; i < this._osdWindows.length; i++) for (let i = 0; i < this._osdWindows.length; i++)
this._osdWindows[i].cancel(); this._osdWindows[i].cancel();
} }
}); };

View File

@ -6,7 +6,6 @@ const Gtk = imports.gi.Gtk;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Gdk = imports.gi.Gdk; const Gdk = imports.gi.Gdk;
@ -35,13 +34,11 @@ var DND_WINDOW_SWITCH_TIMEOUT = 750;
var OVERVIEW_ACTIVATION_TIMEOUT = 0.5; var OVERVIEW_ACTIVATION_TIMEOUT = 0.5;
var ShellInfo = new Lang.Class({ var ShellInfo = class {
Name: 'ShellInfo', constructor() {
_init() {
this._source = null; this._source = null;
this._undoCallback = null; this._undoCallback = null;
}, }
_onUndoClicked() { _onUndoClicked() {
if (this._undoCallback) if (this._undoCallback)
@ -50,7 +47,7 @@ var ShellInfo = new Lang.Class({
if (this._source) if (this._source)
this._source.destroy(); this._source.destroy();
}, }
setMessage(text, options) { setMessage(text, options) {
options = Params.parse(options, { undoCallback: null, options = Params.parse(options, { undoCallback: null,
@ -84,18 +81,16 @@ var ShellInfo = new Lang.Class({
this._source.notify(notification); this._source.notify(notification);
} }
}); };
var Overview = new Lang.Class({ var Overview = class {
Name: 'Overview', constructor() {
_init() {
this._overviewCreated = false; this._overviewCreated = false;
this._initCalled = false; this._initCalled = false;
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
}, }
_createOverview() { _createOverview() {
if (this._overviewCreated) if (this._overviewCreated)
@ -167,7 +162,7 @@ var Overview = new Lang.Class({
if (this._initCalled) if (this._initCalled)
this.init(); this.init();
}, }
_updateBackgrounds() { _updateBackgrounds() {
for (let i = 0; i < this._bgManagers.length; i++) for (let i = 0; i < this._bgManagers.length; i++)
@ -181,7 +176,7 @@ var Overview = new Lang.Class({
vignette: true }); vignette: true });
this._bgManagers.push(bgManager); this._bgManagers.push(bgManager);
} }
}, }
_unshadeBackgrounds() { _unshadeBackgrounds() {
let backgrounds = this._backgroundGroup.get_children(); let backgrounds = this._backgroundGroup.get_children();
@ -193,7 +188,7 @@ var Overview = new Lang.Class({
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
} }
}, }
_shadeBackgrounds() { _shadeBackgrounds() {
let backgrounds = this._backgroundGroup.get_children(); let backgrounds = this._backgroundGroup.get_children();
@ -205,12 +200,12 @@ var Overview = new Lang.Class({
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
} }
}, }
_sessionUpdated() { _sessionUpdated() {
this.isDummy = !Main.sessionMode.hasOverview; this.isDummy = !Main.sessionMode.hasOverview;
this._createOverview(); this._createOverview();
}, }
// The members we construct that are implemented in JS might // The members we construct that are implemented in JS might
// want to access the overview as Main.overview to connect // 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)); Main.layoutManager.connect('monitors-changed', this._relayout.bind(this));
this._relayout(); this._relayout();
}, }
addSearchProvider(provider) { addSearchProvider(provider) {
this.viewSelector.addSearchProvider(provider); this.viewSelector.addSearchProvider(provider);
}, }
removeSearchProvider(provider) { removeSearchProvider(provider) {
this.viewSelector.removeSearchProvider(provider); this.viewSelector.removeSearchProvider(provider);
}, }
// //
// options: // options:
@ -279,7 +274,7 @@ var Overview = new Lang.Class({
return; return;
this._shellInfo.setMessage(text, options); this._shellInfo.setMessage(text, options);
}, }
_onDragBegin() { _onDragBegin() {
this._inXdndDrag = true; this._inXdndDrag = true;
@ -288,7 +283,7 @@ var Overview = new Lang.Class({
// Remember the workspace we started from // Remember the workspace we started from
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_index(); this._lastActiveWorkspaceIndex = workspaceManager.get_active_workspace_index();
}, }
_onDragEnd(time) { _onDragEnd(time) {
this._inXdndDrag = false; this._inXdndDrag = false;
@ -305,7 +300,7 @@ var Overview = new Lang.Class({
this._lastHoveredWindow = null; this._lastHoveredWindow = null;
DND.removeDragMonitor(this._dragMonitor); DND.removeDragMonitor(this._dragMonitor);
this.endItemDrag(); this.endItemDrag();
}, }
_resetWindowSwitchTimeout() { _resetWindowSwitchTimeout() {
if (this._windowSwitchTimeoutId != 0) { if (this._windowSwitchTimeoutId != 0) {
@ -313,7 +308,7 @@ var Overview = new Lang.Class({
this._windowSwitchTimeoutId = 0; this._windowSwitchTimeoutId = 0;
this._needsFakePointerEvent = false; this._needsFakePointerEvent = false;
} }
}, }
_fakePointerEvent() { _fakePointerEvent() {
let display = Gdk.Display.get_default(); let display = Gdk.Display.get_default();
@ -322,7 +317,7 @@ var Overview = new Lang.Class({
let [gdkScreen, pointerX, pointerY] = pointer.get_position(); let [gdkScreen, pointerX, pointerY] = pointer.get_position();
pointer.warp(gdkScreen, pointerX, pointerY); pointer.warp(gdkScreen, pointerX, pointerY);
}, }
_onDragMotion(dragEvent) { _onDragMotion(dragEvent) {
let targetIsWindow = dragEvent.targetActor && let targetIsWindow = dragEvent.targetActor &&
@ -356,19 +351,19 @@ var Overview = new Lang.Class({
} }
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
}, }
_onScrollEvent(actor, event) { _onScrollEvent(actor, event) {
this.emit('scroll-event', event); this.emit('scroll-event', event);
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
addAction(action) { addAction(action) {
if (this.isDummy) if (this.isDummy)
return; return;
this._backgroundGroup.add_action(action); this._backgroundGroup.add_action(action);
}, }
_getDesktopClone() { _getDesktopClone() {
let windows = global.get_window_actors().filter( let windows = global.get_window_actors().filter(
@ -384,7 +379,7 @@ var Overview = new Lang.Class({
clone.destroy(); clone.destroy();
}); });
return clone; return clone;
}, }
_relayout() { _relayout() {
// To avoid updating the position and size of the workspaces // 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._coverPane.set_size(global.screen_width, global.screen_height);
this._updateBackgrounds(); this._updateBackgrounds();
}, }
_onRestacked() { _onRestacked() {
let stack = global.get_window_actors(); let stack = global.get_window_actors();
@ -411,44 +406,44 @@ var Overview = new Lang.Class({
} }
this.emit('windows-restacked', stackIndices); this.emit('windows-restacked', stackIndices);
}, }
beginItemDrag(source) { beginItemDrag(source) {
this.emit('item-drag-begin'); this.emit('item-drag-begin');
this._inItemDrag = true; this._inItemDrag = true;
}, }
cancelledItemDrag(source) { cancelledItemDrag(source) {
this.emit('item-drag-cancelled'); this.emit('item-drag-cancelled');
}, }
endItemDrag(source) { endItemDrag(source) {
if (!this._inItemDrag) if (!this._inItemDrag)
return; return;
this.emit('item-drag-end'); this.emit('item-drag-end');
this._inItemDrag = false; this._inItemDrag = false;
}, }
beginWindowDrag(window) { beginWindowDrag(window) {
this.emit('window-drag-begin', window); this.emit('window-drag-begin', window);
this._inWindowDrag = true; this._inWindowDrag = true;
}, }
cancelledWindowDrag(window) { cancelledWindowDrag(window) {
this.emit('window-drag-cancelled', window); this.emit('window-drag-cancelled', window);
}, }
endWindowDrag(window) { endWindowDrag(window) {
if (!this._inWindowDrag) if (!this._inWindowDrag)
return; return;
this.emit('window-drag-end', window); this.emit('window-drag-end', window);
this._inWindowDrag = false; this._inWindowDrag = false;
}, }
focusSearch() { focusSearch() {
this.show(); this.show();
this._searchEntry.grab_key_focus(); this._searchEntry.grab_key_focus();
}, }
fadeInDesktop() { fadeInDesktop() {
this._desktopFade.opacity = 0; this._desktopFade.opacity = 0;
@ -457,7 +452,7 @@ var Overview = new Lang.Class({
{ opacity: 255, { opacity: 255,
time: ANIMATION_TIME, time: ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
}, }
fadeOutDesktop() { fadeOutDesktop() {
if (!this._desktopFade.get_n_children()) { if (!this._desktopFade.get_n_children()) {
@ -475,7 +470,7 @@ var Overview = new Lang.Class({
time: ANIMATION_TIME, time: ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
}, }
// Checks if the Activities button is currently sensitive to // Checks if the Activities button is currently sensitive to
// clicks. The first call to this function within the // 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) GLib.get_monotonic_time() / GLib.USEC_PER_SEC - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT)
return true; return true;
return false; return false;
}, }
_syncGrab() { _syncGrab() {
// We delay grab changes during animation so that when removing the // We delay grab changes during animation so that when removing the
@ -521,7 +516,7 @@ var Overview = new Lang.Class({
} }
} }
return true; return true;
}, }
// show: // show:
// //
@ -538,7 +533,7 @@ var Overview = new Lang.Class({
Main.layoutManager.showOverview(); Main.layoutManager.showOverview();
this._animateVisible(); this._animateVisible();
}, }
_animateVisible() { _animateVisible() {
@ -566,7 +561,7 @@ var Overview = new Lang.Class({
this._coverPane.raise_top(); this._coverPane.raise_top();
this._coverPane.show(); this._coverPane.show();
this.emit('showing'); this.emit('showing');
}, }
_showDone() { _showDone() {
this.animationInProgress = false; this.animationInProgress = false;
@ -580,7 +575,7 @@ var Overview = new Lang.Class({
this._syncGrab(); this._syncGrab();
global.sync_pointer(); global.sync_pointer();
}, }
// hide: // hide:
// //
@ -606,8 +601,7 @@ var Overview = new Lang.Class({
this._animateNotVisible(); this._animateNotVisible();
this._syncGrab(); this._syncGrab();
}, }
_animateNotVisible() { _animateNotVisible() {
if (!this.visible || this.animationInProgress) if (!this.visible || this.animationInProgress)
@ -631,7 +625,7 @@ var Overview = new Lang.Class({
this._coverPane.raise_top(); this._coverPane.raise_top();
this._coverPane.show(); this._coverPane.show();
this.emit('hiding'); this.emit('hiding');
}, }
_hideDone() { _hideDone() {
// Re-enable unredirection // Re-enable unredirection
@ -658,7 +652,7 @@ var Overview = new Lang.Class({
this._fakePointerEvent(); this._fakePointerEvent();
this._needsFakePointerEvent = false; this._needsFakePointerEvent = false;
} }
}, }
toggle() { toggle() {
if (this.isDummy) if (this.isDummy)
@ -668,10 +662,10 @@ var Overview = new Lang.Class({
this.hide(); this.hide();
else else
this.show(); this.show();
}, }
getShowAppsButton() { getShowAppsButton() {
return this._dash.showAppsButton; return this._dash.showAppsButton;
} }
}); };
Signals.addSignalMethods(Overview.prototype); Signals.addSignalMethods(Overview.prototype);

View File

@ -104,10 +104,8 @@ var SlideLayout = new Lang.Class({
}, },
}); });
var SlidingControl = new Lang.Class({ var SlidingControl = class {
Name: 'SlidingControl', constructor(params) {
_init(params) {
params = Params.parse(params, { slideDirection: SlideDirection.LEFT }); params = Params.parse(params, { slideDirection: SlideDirection.LEFT });
this._visible = true; 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-begin', this._onWindowDragBegin.bind(this));
Main.overview.connect('window-drag-cancelled', this._onWindowDragEnd.bind(this)); Main.overview.connect('window-drag-cancelled', this._onWindowDragEnd.bind(this));
Main.overview.connect('window-drag-end', this._onWindowDragEnd.bind(this)); Main.overview.connect('window-drag-end', this._onWindowDragEnd.bind(this));
}, }
_getSlide() { _getSlide() {
throw new Error('getSlide() must be overridden'); throw new Error('getSlide() must be overridden');
}, }
_updateSlide() { _updateSlide() {
Tweener.addTween(this.layout, { slideX: this._getSlide(), Tweener.addTween(this.layout, { slideX: this._getSlide(),
time: SIDE_CONTROLS_ANIMATION_TIME, time: SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
}, }
getVisibleWidth() { getVisibleWidth() {
let child = this.actor.get_first_child(); let child = this.actor.get_first_child();
let [, , natWidth, ] = child.get_preferred_size(); let [, , natWidth, ] = child.get_preferred_size();
return natWidth; return natWidth;
}, }
_getTranslation() { _getTranslation() {
let child = this.actor.get_first_child(); let child = this.actor.get_first_child();
@ -155,7 +153,7 @@ var SlidingControl = new Lang.Class({
return - visibleWidth; return - visibleWidth;
else else
return visibleWidth; return visibleWidth;
}, }
_updateTranslation() { _updateTranslation() {
let translationStart = 0; let translationStart = 0;
@ -176,57 +174,57 @@ var SlidingControl = new Lang.Class({
Tweener.addTween(this.layout, { translationX: translationEnd, Tweener.addTween(this.layout, { translationX: translationEnd,
time: SIDE_CONTROLS_ANIMATION_TIME, time: SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
}, }
_onOverviewHiding() { _onOverviewHiding() {
// We need to explicitly slideOut since showing pages // We need to explicitly slideOut since showing pages
// doesn't imply sliding out, instead, hiding the overview does. // doesn't imply sliding out, instead, hiding the overview does.
this.slideOut(); this.slideOut();
}, }
_onWindowDragBegin() { _onWindowDragBegin() {
this._onDragBegin(); this._onDragBegin();
}, }
_onWindowDragEnd() { _onWindowDragEnd() {
this._onDragEnd(); this._onDragEnd();
}, }
_onDragBegin() { _onDragBegin() {
this._inDrag = true; this._inDrag = true;
this._updateTranslation(); this._updateTranslation();
this._updateSlide(); this._updateSlide();
}, }
_onDragEnd() { _onDragEnd() {
this._inDrag = false; this._inDrag = false;
this._updateSlide(); this._updateSlide();
}, }
fadeIn() { fadeIn() {
Tweener.addTween(this.actor, { opacity: 255, Tweener.addTween(this.actor, { opacity: 255,
time: SIDE_CONTROLS_ANIMATION_TIME / 2, time: SIDE_CONTROLS_ANIMATION_TIME / 2,
transition: 'easeInQuad' transition: 'easeInQuad'
}); });
}, }
fadeHalf() { fadeHalf() {
Tweener.addTween(this.actor, { opacity: 128, Tweener.addTween(this.actor, { opacity: 128,
time: SIDE_CONTROLS_ANIMATION_TIME / 2, time: SIDE_CONTROLS_ANIMATION_TIME / 2,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
}, }
slideIn() { slideIn() {
this._visible = true; this._visible = true;
// we will update slideX and the translation from pageEmpty // we will update slideX and the translation from pageEmpty
}, }
slideOut() { slideOut() {
this._visible = false; this._visible = false;
this._updateTranslation(); this._updateTranslation();
// we will update slideX from pageEmpty // we will update slideX from pageEmpty
}, }
pageEmpty() { pageEmpty() {
// When pageEmpty is received, there's no visible view in the // 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.layout.slideX = this._getSlide();
this._updateTranslation(); this._updateTranslation();
} }
}); };
var ThumbnailsSlider = new Lang.Class({ var ThumbnailsSlider = class extends SlidingControl {
Name: 'ThumbnailsSlider', constructor(thumbnailsBox) {
Extends: SlidingControl, super({ slideDirection: SlideDirection.RIGHT });
_init(thumbnailsBox) {
this.parent({ slideDirection: SlideDirection.RIGHT });
this._thumbnailsBox = thumbnailsBox; this._thumbnailsBox = thumbnailsBox;
@ -259,7 +254,7 @@ var ThumbnailsSlider = new Lang.Class({
this._updateSlide.bind(this)); this._updateSlide.bind(this));
this.actor.connect('notify::hover', 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); this._thumbnailsBox.bind_property('visible', this.actor, 'visible', GObject.BindingFlags.SYNC_CREATE);
}, }
_getAlwaysZoomOut() { _getAlwaysZoomOut() {
// Always show the pager on hover, during a drag, or if workspaces are // Always show the pager on hover, during a drag, or if workspaces are
@ -287,17 +282,17 @@ var ThumbnailsSlider = new Lang.Class({
} }
return alwaysZoomOut; return alwaysZoomOut;
}, }
getNonExpandedWidth() { getNonExpandedWidth() {
let child = this.actor.get_first_child(); let child = this.actor.get_first_child();
return child.get_theme_node().get_length('visible-width'); return child.get_theme_node().get_length('visible-width');
}, }
_onDragEnd() { _onDragEnd() {
this.actor.sync_hover(); this.actor.sync_hover();
this.parent(); super._onDragEnd();
}, }
_getSlide() { _getSlide() {
if (!this._visible) if (!this._visible)
@ -312,23 +307,20 @@ var ThumbnailsSlider = new Lang.Class({
let expandedWidth = child.get_preferred_width(preferredHeight)[1]; let expandedWidth = child.get_preferred_width(preferredHeight)[1];
return this.getNonExpandedWidth() / expandedWidth; return this.getNonExpandedWidth() / expandedWidth;
}, }
getVisibleWidth() { getVisibleWidth() {
let alwaysZoomOut = this._getAlwaysZoomOut(); let alwaysZoomOut = this._getAlwaysZoomOut();
if (alwaysZoomOut) if (alwaysZoomOut)
return this.parent(); return super.getVisibleWidth();
else else
return this.getNonExpandedWidth(); return this.getNonExpandedWidth();
} }
}); };
var DashSlider = new Lang.Class({ var DashSlider = class extends SlidingControl {
Name: 'DashSlider', constructor(dash) {
Extends: SlidingControl, super({ slideDirection: SlideDirection.LEFT });
_init(dash) {
this.parent({ slideDirection: SlideDirection.LEFT });
this._dash = dash; this._dash = dash;
@ -344,23 +336,23 @@ var DashSlider = new Lang.Class({
this.actor.add_actor(this._dash.actor); this.actor.add_actor(this._dash.actor);
this._dash.connect('icon-size-changed', this._updateSlide.bind(this)); this._dash.connect('icon-size-changed', this._updateSlide.bind(this));
}, }
_getSlide() { _getSlide() {
if (this._visible || this._inDrag) if (this._visible || this._inDrag)
return 1; return 1;
else else
return 0; return 0;
}, }
_onWindowDragBegin() { _onWindowDragBegin() {
this.fadeHalf(); this.fadeHalf();
}, }
_onWindowDragEnd() { _onWindowDragEnd() {
this.fadeIn(); this.fadeIn();
} }
}); };
var DashSpacer = new Lang.Class({ var DashSpacer = new Lang.Class({
Name: 'DashSpacer', Name: 'DashSpacer',
@ -411,10 +403,8 @@ var ControlsLayout = new Lang.Class({
} }
}); });
var ControlsManager = new Lang.Class({ var ControlsManager = class {
Name: 'ControlsManager', constructor(searchEntry) {
_init(searchEntry) {
this.dash = new Dash.Dash(); this.dash = new Dash.Dash();
this._dashSlider = new DashSlider(this.dash); this._dashSlider = new DashSlider(this.dash);
this._dashSpacer = new DashSpacer(); this._dashSpacer = new DashSpacer();
@ -457,7 +447,7 @@ var ControlsManager = new Lang.Class({
Main.overview.connect('item-drag-cancelled', () => { Main.overview.connect('item-drag-cancelled', () => {
this.viewSelector.fadeIn(); this.viewSelector.fadeIn();
}); });
}, }
_updateWorkspacesGeometry() { _updateWorkspacesGeometry() {
let [x, y] = this.actor.get_transformed_position(); let [x, y] = this.actor.get_transformed_position();
@ -477,7 +467,7 @@ var ControlsManager = new Lang.Class({
geometry.x += thumbnailsWidth; geometry.x += thumbnailsWidth;
this.viewSelector.setWorkspacesFullGeometry(geometry); this.viewSelector.setWorkspacesFullGeometry(geometry);
}, }
_setVisibility() { _setVisibility() {
// Ignore the case when we're leaving the overview, since // Ignore the case when we're leaving the overview, since
@ -502,7 +492,7 @@ var ControlsManager = new Lang.Class({
this._thumbnailsSlider.slideIn(); this._thumbnailsSlider.slideIn();
else else
this._thumbnailsSlider.slideOut(); this._thumbnailsSlider.slideOut();
}, }
_updateSpacerVisibility() { _updateSpacerVisibility() {
if (Main.overview.animationInProgress && !Main.overview.visibleTarget) if (Main.overview.animationInProgress && !Main.overview.visibleTarget)
@ -510,7 +500,7 @@ var ControlsManager = new Lang.Class({
let activePage = this.viewSelector.getActivePage(); let activePage = this.viewSelector.getActivePage();
this._dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS); this._dashSpacer.visible = (activePage == ViewSelector.ViewPage.WINDOWS);
}, }
_onPageEmpty() { _onPageEmpty() {
this._dashSlider.pageEmpty(); this._dashSlider.pageEmpty();
@ -518,4 +508,4 @@ var ControlsManager = new Lang.Class({
this._updateSpacerVisibility(); this._updateSpacerVisibility();
} }
}); };

View File

@ -32,10 +32,8 @@ const CCW = 1;
const UP = 0; const UP = 0;
const DOWN = 1; const DOWN = 1;
var PadChooser = new Lang.Class({ var PadChooser = class {
Name: 'PadChooser', constructor(device, groupDevices) {
_init(device, groupDevices) {
this.actor = new St.Button({ style_class: 'pad-chooser-button', this.actor = new St.Button({ style_class: 'pad-chooser-button',
toggle_mode: true, toggle_mode: true,
x_fill: false, x_fill: false,
@ -62,7 +60,7 @@ var PadChooser = new Lang.Class({
this._padChooserMenu.close(true); this._padChooserMenu.close(true);
} }
}); });
}, }
_ensureMenu(devices) { _ensureMenu(devices) {
this._padChooserMenu = new PopupMenu.PopupMenu(this.actor, 0.5, St.Side.TOP); 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); this.emit('pad-selected', device);
}); });
} }
}, }
_onDestroy() { _onDestroy() {
this._padChooserMenu.destroy(); this._padChooserMenu.destroy();
}, }
update(devices) { update(devices) {
if (this._padChooserMenu) if (this._padChooserMenu)
this._padChooserMenu.actor.destroy(); this._padChooserMenu.actor.destroy();
this.actor.set_checked(false); this.actor.set_checked(false);
this._ensureMenu(devices); this._ensureMenu(devices);
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
}); };
Signals.addSignalMethods(PadChooser.prototype); Signals.addSignalMethods(PadChooser.prototype);
var KeybindingEntry = new Lang.Class({ var KeybindingEntry = class {
Name: 'KeybindingEntry', constructor() {
_init() {
this.actor = new St.Entry({ hint_text: _("New shortcut…"), this.actor = new St.Entry({ hint_text: _("New shortcut…"),
style: 'width: 10em' }); style: 'width: 10em' });
this.actor.connect('captured-event', this._onCapturedEvent.bind(this)); this.actor.connect('captured-event', this._onCapturedEvent.bind(this));
}, }
_onCapturedEvent(actor, event) { _onCapturedEvent(actor, event) {
if (event.type() != Clutter.EventType.KEY_PRESS) if (event.type() != Clutter.EventType.KEY_PRESS)
@ -121,13 +117,11 @@ var KeybindingEntry = new Lang.Class({
this.emit('keybinding-edited', str); this.emit('keybinding-edited', str);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
}); };
Signals.addSignalMethods(KeybindingEntry.prototype); Signals.addSignalMethods(KeybindingEntry.prototype);
var ActionComboBox = new Lang.Class({ var ActionComboBox = class {
Name: 'ActionComboBox', constructor() {
_init() {
this.actor = new St.Button({ style_class: 'button' }); this.actor = new St.Button({ style_class: 'button' });
this.actor.connect('clicked', this._onButtonClicked.bind(this)); this.actor.connect('clicked', this._onButtonClicked.bind(this));
this.actor.set_toggle_mode(true); this.actor.set_toggle_mode(true);
@ -175,43 +169,41 @@ var ActionComboBox = new Lang.Class({
} }
this.setAction(GDesktopEnums.PadButtonAction.NONE); this.setAction(GDesktopEnums.PadButtonAction.NONE);
}, }
_onActionSelected(action) { _onActionSelected(action) {
this.setAction(action); this.setAction(action);
this.popdown(); this.popdown();
this.emit('action-selected', action); this.emit('action-selected', action);
}, }
setAction(action) { setAction(action) {
this._label.set_text(this._actionLabels.get(action)); this._label.set_text(this._actionLabels.get(action));
}, }
popup() { popup() {
this._editMenu.open(true); this._editMenu.open(true);
}, }
popdown() { popdown() {
this._editMenu.close(true); this._editMenu.close(true);
}, }
_onButtonClicked() { _onButtonClicked() {
if (this.actor.get_checked()) if (this.actor.get_checked())
this.popup(); this.popup();
else else
this.popdown(); this.popdown();
}, }
setButtonActionsActive(active) { setButtonActionsActive(active) {
this._buttonItems.forEach(item => { item.setSensitive(active); }); this._buttonItems.forEach(item => { item.setSensitive(active); });
} }
}); };
Signals.addSignalMethods(ActionComboBox.prototype); Signals.addSignalMethods(ActionComboBox.prototype);
var ActionEditor = new Lang.Class({ var ActionEditor = class {
Name: 'ActionEditor', constructor() {
_init() {
let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL, let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL,
spacing: 12 }); spacing: 12 });
@ -230,7 +222,7 @@ var ActionEditor = new Lang.Class({
x_expand: false}); x_expand: false});
this._doneButton.connect('clicked', this._onEditingDone.bind(this)); this._doneButton.connect('clicked', this._onEditingDone.bind(this));
this.actor.add_actor(this._doneButton); this.actor.add_actor(this._doneButton);
}, }
_updateKeybindingEntryState() { _updateKeybindingEntryState() {
if (this._currentAction == GDesktopEnums.PadButtonAction.KEYBINDING) { if (this._currentAction == GDesktopEnums.PadButtonAction.KEYBINDING) {
@ -240,7 +232,7 @@ var ActionEditor = new Lang.Class({
} else { } else {
this._keybindingEdit.actor.hide(); this._keybindingEdit.actor.hide();
} }
}, }
setSettings(settings, action) { setSettings(settings, action) {
this._buttonSettings = settings; this._buttonSettings = settings;
@ -252,21 +244,21 @@ var ActionEditor = new Lang.Class({
let isButton = (action == Meta.PadActionType.BUTTON); let isButton = (action == Meta.PadActionType.BUTTON);
this._actionComboBox.setButtonActionsActive(isButton); this._actionComboBox.setButtonActionsActive(isButton);
}, }
close() { close() {
this._actionComboBox.popdown(); this._actionComboBox.popdown();
this.actor.hide(); this.actor.hide();
}, }
_onKeybindingEdited(entry, keybinding) { _onKeybindingEdited(entry, keybinding) {
this._currentKeybinding = keybinding; this._currentKeybinding = keybinding;
}, }
_onActionSelected(menu, action) { _onActionSelected(menu, action) {
this._currentAction = action; this._currentAction = action;
this._updateKeybindingEntryState(); this._updateKeybindingEntryState();
}, }
_storeSettings() { _storeSettings() {
if (!this._buttonSettings) if (!this._buttonSettings)
@ -283,14 +275,14 @@ var ActionEditor = new Lang.Class({
this._buttonSettings.set_string('keybinding', keybinding); this._buttonSettings.set_string('keybinding', keybinding);
else else
this._buttonSettings.reset('keybinding'); this._buttonSettings.reset('keybinding');
}, }
_onEditingDone() { _onEditingDone() {
this._storeSettings(); this._storeSettings();
this.close(); this.close();
this.emit('done'); this.emit('done');
} }
}); };
Signals.addSignalMethods(ActionEditor.prototype); Signals.addSignalMethods(ActionEditor.prototype);
var PadDiagram = new Lang.Class({ var PadDiagram = new Lang.Class({
@ -629,10 +621,8 @@ var PadDiagram = new Lang.Class({
} }
}); });
var PadOsd = new Lang.Class({ var PadOsd = class {
Name: 'PadOsd', constructor(padDevice, settings, imagePath, editionMode, monitorIndex) {
_init(padDevice, settings, imagePath, editionMode, monitorIndex) {
this.padDevice = padDevice; this.padDevice = padDevice;
this._groupPads = [ padDevice ]; this._groupPads = [ padDevice ];
this._settings = settings; this._settings = settings;
@ -752,7 +742,7 @@ var PadOsd = new Lang.Class({
this._syncEditionMode(); this._syncEditionMode();
Main.pushModal(this.actor); Main.pushModal(this.actor);
}, }
_updatePadChooser() { _updatePadChooser() {
if (this._groupPads.length > 1) { if (this._groupPads.length > 1) {
@ -769,7 +759,7 @@ var PadOsd = new Lang.Class({
this._padChooser.destroy(); this._padChooser.destroy();
this._padChooser = null; this._padChooser = null;
} }
}, }
_requestForOtherPad(pad) { _requestForOtherPad(pad) {
if (pad == this.padDevice || if (pad == this.padDevice ||
@ -779,13 +769,13 @@ var PadOsd = new Lang.Class({
let editionMode = this._editionMode; let editionMode = this._editionMode;
this.destroy(); this.destroy();
global.display.request_pad_osd(pad, editionMode); global.display.request_pad_osd(pad, editionMode);
}, }
_createLabel(type, number, dir) { _createLabel(type, number, dir) {
let str = global.display.get_pad_action_label(this.padDevice, type, number); let str = global.display.get_pad_action_label(this.padDevice, type, number);
let label = new St.Label({ text: str ? str : _("None") }); let label = new St.Label({ text: str ? str : _("None") });
this._padDiagram.addLabel(label, type, number, dir); this._padDiagram.addLabel(label, type, number, dir);
}, }
_onCapturedEvent(actor, event) { _onCapturedEvent(actor, event) {
if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS && if (event.type() == Clutter.EventType.PAD_BUTTON_PRESS &&
@ -830,7 +820,7 @@ var PadOsd = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_syncEditionMode() { _syncEditionMode() {
this._editButton.set_reactive(!this._editionMode); this._editButton.set_reactive(!this._editionMode);
@ -850,7 +840,7 @@ var PadOsd = new Lang.Class({
} }
this._titleLabel.clutter_text.set_markup('<span size="larger"><b>' + title + '</b></span>'); this._titleLabel.clutter_text.set_markup('<span size="larger"><b>' + title + '</b></span>');
}, }
_isEditedAction(type, number, dir) { _isEditedAction(type, number, dir) {
if (!this._editedAction) if (!this._editedAction)
@ -859,7 +849,7 @@ var PadOsd = new Lang.Class({
return (this._editedAction.type == type && return (this._editedAction.type == type &&
this._editedAction.number == number && this._editedAction.number == number &&
this._editedAction.dir == dir); this._editedAction.dir == dir);
}, }
_followUpActionEdition(str) { _followUpActionEdition(str) {
let { type, dir, number, mode } = this._editedAction; let { type, dir, number, mode } = this._editedAction;
@ -876,7 +866,7 @@ var PadOsd = new Lang.Class({
this._startStripActionEdition(number, DOWN, mode); this._startStripActionEdition(number, DOWN, mode);
return true; return true;
}, }
_endActionEdition() { _endActionEdition() {
this._actionEditor.close(); this._actionEditor.close();
@ -893,7 +883,7 @@ var PadOsd = new Lang.Class({
} }
this._editedActionSettings = null; this._editedActionSettings = null;
}, }
_startActionEdition(key, type, number, dir, mode) { _startActionEdition(key, type, number, dir, mode) {
if (this._isEditedAction(type, number, dir)) if (this._isEditedAction(type, number, dir))
@ -907,25 +897,25 @@ var PadOsd = new Lang.Class({
settingsPath); settingsPath);
this._actionEditor.setSettings(this._editedActionSettings, type); this._actionEditor.setSettings(this._editedActionSettings, type);
this._padDiagram.startEdition(type, number, dir); this._padDiagram.startEdition(type, number, dir);
}, }
_startButtonActionEdition(button) { _startButtonActionEdition(button) {
let ch = String.fromCharCode('A'.charCodeAt() + button); let ch = String.fromCharCode('A'.charCodeAt() + button);
let key = 'button' + ch; let key = 'button' + ch;
this._startActionEdition(key, Meta.PadActionType.BUTTON, button); this._startActionEdition(key, Meta.PadActionType.BUTTON, button);
}, }
_startRingActionEdition(ring, dir, mode) { _startRingActionEdition(ring, dir, mode) {
let ch = String.fromCharCode('A'.charCodeAt() + ring); let ch = String.fromCharCode('A'.charCodeAt() + ring);
let key = 'ring%s-%s-mode-%d'.format(ch, dir == CCW ? 'ccw' : 'cw', mode); let key = 'ring%s-%s-mode-%d'.format(ch, dir == CCW ? 'ccw' : 'cw', mode);
this._startActionEdition(key, Meta.PadActionType.RING, ring, dir, mode); this._startActionEdition(key, Meta.PadActionType.RING, ring, dir, mode);
}, }
_startStripActionEdition(strip, dir, mode) { _startStripActionEdition(strip, dir, mode) {
let ch = String.fromCharCode('A'.charCodeAt() + strip); let ch = String.fromCharCode('A'.charCodeAt() + strip);
let key = 'strip%s-%s-mode-%d'.format(ch, dir == UP ? 'up' : 'down', mode); let key = 'strip%s-%s-mode-%d'.format(ch, dir == UP ? 'up' : 'down', mode);
this._startActionEdition(key, Meta.PadActionType.STRIP, strip, dir, mode); this._startActionEdition(key, Meta.PadActionType.STRIP, strip, dir, mode);
}, }
setEditionMode(editionMode) { setEditionMode(editionMode) {
if (this._editionMode == editionMode) if (this._editionMode == editionMode)
@ -933,11 +923,11 @@ var PadOsd = new Lang.Class({
this._editionMode = editionMode; this._editionMode = editionMode;
this._syncEditionMode(); this._syncEditionMode();
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
_onDestroy() { _onDestroy() {
Main.popModal(this.actor); Main.popModal(this.actor);
@ -961,19 +951,17 @@ var PadOsd = new Lang.Class({
this.actor = null; this.actor = null;
this.emit('closed'); this.emit('closed');
} }
}); };
Signals.addSignalMethods(PadOsd.prototype); Signals.addSignalMethods(PadOsd.prototype);
const PadOsdIface = loadInterfaceXML('org.gnome.Shell.Wacom.PadOsd'); const PadOsdIface = loadInterfaceXML('org.gnome.Shell.Wacom.PadOsd');
var PadOsdService = new Lang.Class({ var PadOsdService = class {
Name: 'PadOsdService', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(PadOsdIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(PadOsdIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Wacom'); 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); Gio.DBus.session.own_name('org.gnome.Shell.Wacom.PadOsd', Gio.BusNameOwnerFlags.REPLACE, null, null);
}, }
ShowAsync(params, invocation) { ShowAsync(params, invocation) {
let [deviceNode, editionMode] = params; let [deviceNode, editionMode] = params;
@ -997,5 +985,5 @@ var PadOsdService = new Lang.Class({
global.display.request_pad_osd(padDevice, editionMode); global.display.request_pad_osd(padDevice, editionMode);
invocation.return_value(null); invocation.return_value(null);
} }
}); };
Signals.addSignalMethods(PadOsdService.prototype); Signals.addSignalMethods(PadOsdService.prototype);

View File

@ -488,16 +488,14 @@ var ActivitiesButton = new Lang.Class({
} }
}); });
var PanelCorner = new Lang.Class({ var PanelCorner = class {
Name: 'PanelCorner', constructor(side) {
_init(side) {
this._side = side; this._side = side;
this.actor = new St.DrawingArea({ style_class: 'panel-corner' }); this.actor = new St.DrawingArea({ style_class: 'panel-corner' });
this.actor.connect('style-changed', this._styleChanged.bind(this)); this.actor.connect('style-changed', this._styleChanged.bind(this));
this.actor.connect('repaint', this._repaint.bind(this)); this.actor.connect('repaint', this._repaint.bind(this));
}, }
_findRightmostButton(container) { _findRightmostButton(container) {
if (!container.get_children) if (!container.get_children)
@ -522,7 +520,7 @@ var PanelCorner = new Lang.Class({
return this._findRightmostButton(children[index]); return this._findRightmostButton(children[index]);
return children[index]; return children[index];
}, }
_findLeftmostButton(container) { _findLeftmostButton(container) {
if (!container.get_children) if (!container.get_children)
@ -547,7 +545,7 @@ var PanelCorner = new Lang.Class({
return this._findLeftmostButton(children[index]); return this._findLeftmostButton(children[index]);
return children[index]; return children[index];
}, }
setStyleParent(box) { setStyleParent(box) {
let side = this._side; let side = this._side;
@ -593,7 +591,7 @@ var PanelCorner = new Lang.Class({
// the .panel-button default // the .panel-button default
button.style = 'transition-duration: 0ms'; button.style = 'transition-duration: 0ms';
} }
}, }
_repaint() { _repaint() {
let node = this.actor.get_theme_node(); let node = this.actor.get_theme_node();
@ -641,7 +639,7 @@ var PanelCorner = new Lang.Class({
} }
cr.$dispose(); cr.$dispose();
}, }
_styleChanged() { _styleChanged() {
let node = this.actor.get_theme_node(); 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_size(cornerRadius, borderWidth + cornerRadius);
this.actor.set_anchor_point(0, borderWidth); this.actor.set_anchor_point(0, borderWidth);
} }
}); };
var AggregateLayout = new Lang.Class({ var AggregateLayout = new Lang.Class({
Name: 'AggregateLayout', Name: 'AggregateLayout',

View File

@ -210,19 +210,17 @@ var Button = new Lang.Class({
* of an icon and a menu section, which will be composed into the * of an icon and a menu section, which will be composed into the
* aggregate menu. * aggregate menu.
*/ */
var SystemIndicator = new Lang.Class({ var SystemIndicator = class {
Name: 'SystemIndicator', constructor() {
_init() {
this.indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box', this.indicators = new St.BoxLayout({ style_class: 'panel-status-indicators-box',
reactive: true }); reactive: true });
this.indicators.hide(); this.indicators.hide();
this.menu = new PopupMenu.PopupMenuSection(); this.menu = new PopupMenu.PopupMenuSection();
}, }
_syncIndicatorsVisible() { _syncIndicatorsVisible() {
this.indicators.visible = this.indicators.get_children().some(a => a.visible); this.indicators.visible = this.indicators.get_children().some(a => a.visible);
}, }
_addIndicator() { _addIndicator() {
let icon = new St.Icon({ style_class: 'system-status-icon' }); let icon = new St.Icon({ style_class: 'system-status-icon' });
@ -231,5 +229,5 @@ var SystemIndicator = new Lang.Class({
this._syncIndicatorsVisible(); this._syncIndicatorsVisible();
return icon; return icon;
} }
}); };
Signals.addSignalMethods(SystemIndicator.prototype); Signals.addSignalMethods(SystemIndicator.prototype);

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const GnomeDesktop = imports.gi.GnomeDesktop; const GnomeDesktop = imports.gi.GnomeDesktop;
@ -22,14 +21,12 @@ function getPointerWatcher() {
return _pointerWatcher; return _pointerWatcher;
} }
var PointerWatch = new Lang.Class({ var PointerWatch = class {
Name: 'PointerWatch', constructor(watcher, interval, callback) {
_init(watcher, interval, callback) {
this.watcher = watcher; this.watcher = watcher;
this.interval = interval; this.interval = interval;
this.callback = callback; this.callback = callback;
}, }
// remove: // remove:
// remove this watch. This function may safely be called // remove this watch. This function may safely be called
@ -37,19 +34,17 @@ var PointerWatch = new Lang.Class({
remove() { remove() {
this.watcher._removeWatch(this); this.watcher._removeWatch(this);
} }
}); };
var PointerWatcher = new Lang.Class({ var PointerWatcher = class {
Name: 'PointerWatcher', constructor() {
_init() {
this._idleMonitor = Meta.IdleMonitor.get_core(); this._idleMonitor = Meta.IdleMonitor.get_core();
this._idleMonitor.add_idle_watch(IDLE_TIME, this._onIdleMonitorBecameIdle.bind(this)); this._idleMonitor.add_idle_watch(IDLE_TIME, this._onIdleMonitorBecameIdle.bind(this));
this._idle = this._idleMonitor.get_idletime() > IDLE_TIME; this._idle = this._idleMonitor.get_idletime() > IDLE_TIME;
this._watches = []; this._watches = [];
this.pointerX = null; this.pointerX = null;
this.pointerY = null; this.pointerY = null;
}, }
// addWatch: // addWatch:
// @interval: hint as to the time resolution needed. When the user is // @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._watches.push(watch);
this._updateTimeout(); this._updateTimeout();
return watch; return watch;
}, }
_removeWatch(watch) { _removeWatch(watch) {
for (let i = 0; i < this._watches.length; i++) { for (let i = 0; i < this._watches.length; i++) {
@ -78,19 +73,19 @@ var PointerWatcher = new Lang.Class({
return; return;
} }
} }
}, }
_onIdleMonitorBecameActive(monitor) { _onIdleMonitorBecameActive(monitor) {
this._idle = false; this._idle = false;
this._updatePointer(); this._updatePointer();
this._updateTimeout(); this._updateTimeout();
}, }
_onIdleMonitorBecameIdle(monitor) { _onIdleMonitorBecameIdle(monitor) {
this._idle = true; this._idle = true;
this._idleMonitor.add_user_active_watch(this._onIdleMonitorBecameActive.bind(this)); this._idleMonitor.add_user_active_watch(this._onIdleMonitorBecameActive.bind(this));
this._updateTimeout(); this._updateTimeout();
}, }
_updateTimeout() { _updateTimeout() {
if (this._timeoutId) { if (this._timeoutId) {
@ -108,12 +103,12 @@ var PointerWatcher = new Lang.Class({
this._timeoutId = Mainloop.timeout_add(minInterval, this._timeoutId = Mainloop.timeout_add(minInterval,
this._onTimeout.bind(this)); this._onTimeout.bind(this));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._onTimeout'); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._onTimeout');
}, }
_onTimeout() { _onTimeout() {
this._updatePointer(); this._updatePointer();
return GLib.SOURCE_CONTINUE; return GLib.SOURCE_CONTINUE;
}, }
_updatePointer() { _updatePointer() {
let [x, y, mods] = global.get_pointer(); let [x, y, mods] = global.get_pointer();
@ -130,4 +125,4 @@ var PointerWatcher = new Lang.Class({
i++; i++;
} }
} }
}); };

View File

@ -4,7 +4,6 @@ const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
const St = imports.gi.St; const St = imports.gi.St;
@ -58,10 +57,8 @@ function arrowIcon(side) {
return arrow; return arrow;
} }
var PopupBaseMenuItem = new Lang.Class({ var PopupBaseMenuItem = class {
Name: 'PopupBaseMenuItem', constructor(params) {
_init(params) {
params = Params.parse (params, { reactive: true, params = Params.parse (params, { reactive: true,
activate: true, activate: true,
hover: 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-in', this._onKeyFocusIn.bind(this));
this.actor.connect('key-focus-out', this._onKeyFocusOut.bind(this)); this.actor.connect('key-focus-out', this._onKeyFocusOut.bind(this));
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
}, }
_getTopMenu() { _getTopMenu() {
if (this._parent) if (this._parent)
return this._parent._getTopMenu(); return this._parent._getTopMenu();
else else
return this; return this;
}, }
_setParent(parent) { _setParent(parent) {
this._parent = parent; this._parent = parent;
}, }
_onButtonPressEvent(actor, event) { _onButtonPressEvent(actor, event) {
// This is the CSS active state // This is the CSS active state
this.actor.add_style_pseudo_class ('active'); this.actor.add_style_pseudo_class ('active');
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onButtonReleaseEvent(actor, event) { _onButtonReleaseEvent(actor, event) {
this.actor.remove_style_pseudo_class ('active'); this.actor.remove_style_pseudo_class ('active');
this.activate(event); this.activate(event);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onTouchEvent(actor, event) { _onTouchEvent(actor, event) {
if (event.type() == Clutter.EventType.TOUCH_END) { if (event.type() == Clutter.EventType.TOUCH_END) {
@ -138,7 +135,7 @@ var PopupBaseMenuItem = new Lang.Class({
this.actor.add_style_pseudo_class ('active'); this.actor.add_style_pseudo_class ('active');
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onKeyPressEvent(actor, event) { _onKeyPressEvent(actor, event) {
let state = event.get_state(); let state = event.get_state();
@ -158,23 +155,23 @@ var PopupBaseMenuItem = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onKeyFocusIn(actor) { _onKeyFocusIn(actor) {
this.setActive(true); this.setActive(true);
}, }
_onKeyFocusOut(actor) { _onKeyFocusOut(actor) {
this.setActive(false); this.setActive(false);
}, }
_onHoverChanged(actor) { _onHoverChanged(actor) {
this.setActive(actor.hover); this.setActive(actor.hover);
}, }
activate(event) { activate(event) {
this.emit('activate', event); this.emit('activate', event);
}, }
setActive(active) { setActive(active) {
let activeChanged = active != this.active; let activeChanged = active != this.active;
@ -195,7 +192,7 @@ var PopupBaseMenuItem = new Lang.Class({
} }
this.emit('active-changed', active); this.emit('active-changed', active);
} }
}, }
syncSensitive() { syncSensitive() {
let sensitive = this.getSensitive(); let sensitive = this.getSensitive();
@ -203,12 +200,12 @@ var PopupBaseMenuItem = new Lang.Class({
this.actor.can_focus = sensitive; this.actor.can_focus = sensitive;
this.emit('sensitive-changed'); this.emit('sensitive-changed');
return sensitive; return sensitive;
}, }
getSensitive() { getSensitive() {
let parentSensitive = this._parent ? this._parent.getSensitive() : true; let parentSensitive = this._parent ? this._parent.getSensitive() : true;
return this._activatable && this._sensitive && parentSensitive; return this._activatable && this._sensitive && parentSensitive;
}, }
setSensitive(sensitive) { setSensitive(sensitive) {
if (this._sensitive == sensitive) if (this._sensitive == sensitive)
@ -216,15 +213,15 @@ var PopupBaseMenuItem = new Lang.Class({
this._sensitive = sensitive; this._sensitive = sensitive;
this.syncSensitive(); this.syncSensitive();
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
_onDestroy() { _onDestroy() {
this.emit('destroy'); this.emit('destroy');
}, }
setOrnament(ornament) { setOrnament(ornament) {
if (ornament == this._ornament) if (ornament == this._ornament)
@ -243,29 +240,23 @@ var PopupBaseMenuItem = new Lang.Class({
this.actor.remove_accessible_state(Atk.StateType.CHECKED); this.actor.remove_accessible_state(Atk.StateType.CHECKED);
} }
} }
}); };
Signals.addSignalMethods(PopupBaseMenuItem.prototype); Signals.addSignalMethods(PopupBaseMenuItem.prototype);
var PopupMenuItem = new Lang.Class({ var PopupMenuItem = class extends PopupBaseMenuItem {
Name: 'PopupMenuItem', constructor(text, params) {
Extends: PopupBaseMenuItem, super(params);
_init(text, params) {
this.parent(params);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
this.actor.add_child(this.label); this.actor.add_child(this.label);
this.actor.label_actor = this.label this.actor.label_actor = this.label
} }
}); };
var PopupSeparatorMenuItem = new Lang.Class({ var PopupSeparatorMenuItem = class extends PopupBaseMenuItem {
Name: 'PopupSeparatorMenuItem', constructor(text) {
Extends: PopupBaseMenuItem, super({ reactive: false,
can_focus: false});
_init(text) {
this.parent({ reactive: false,
can_focus: false});
this.label = new St.Label({ text: text || '' }); this.label = new St.Label({ text: text || '' });
this.actor.add(this.label); this.actor.add(this.label);
@ -279,17 +270,15 @@ var PopupSeparatorMenuItem = new Lang.Class({
y_expand: true, y_expand: true,
y_align: Clutter.ActorAlign.CENTER }); y_align: Clutter.ActorAlign.CENTER });
this.actor.add(this._separator, { expand: true }); this.actor.add(this._separator, { expand: true });
}, }
_syncVisibility() { _syncVisibility() {
this.label.visible = this.label.text != ''; this.label.visible = this.label.text != '';
} }
}); };
var Switch = new Lang.Class({ var Switch = class {
Name: 'Switch', constructor(state) {
_init(state) {
this.actor = new St.Bin({ style_class: 'toggle-switch', this.actor = new St.Bin({ style_class: 'toggle-switch',
accessible_role: Atk.Role.CHECK_BOX, accessible_role: Atk.Role.CHECK_BOX,
can_focus: true }); can_focus: true });
@ -300,7 +289,7 @@ var Switch = new Lang.Class({
// simply result in invisible toggle switches. // simply result in invisible toggle switches.
this.actor.add_style_class_name(_("toggle-switch-us")); this.actor.add_style_class_name(_("toggle-switch-us"));
this.setToggleState(state); this.setToggleState(state);
}, }
setToggleState(state) { setToggleState(state) {
if (state) if (state)
@ -308,19 +297,16 @@ var Switch = new Lang.Class({
else else
this.actor.remove_style_pseudo_class('checked'); this.actor.remove_style_pseudo_class('checked');
this.state = state; this.state = state;
}, }
toggle() { toggle() {
this.setToggleState(!this.state); this.setToggleState(!this.state);
} }
}); };
var PopupSwitchMenuItem = new Lang.Class({ var PopupSwitchMenuItem = class extends PopupBaseMenuItem {
Name: 'PopupSwitchMenuItem', constructor(text, active, params) {
Extends: PopupBaseMenuItem, super(params);
_init(text, active, params) {
this.parent(params);
this.label = new St.Label({ text: text }); this.label = new St.Label({ text: text });
this._switch = new Switch(active); this._switch = new Switch(active);
@ -338,7 +324,7 @@ var PopupSwitchMenuItem = new Lang.Class({
style_class: 'popup-status-menu-item' style_class: 'popup-status-menu-item'
}); });
this._statusBin.child = this._switch.actor; this._statusBin.child = this._switch.actor;
}, }
setStatus(text) { setStatus(text) {
if (text != null) { if (text != null) {
@ -352,7 +338,7 @@ var PopupSwitchMenuItem = new Lang.Class({
this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM; this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM;
} }
this.checkAccessibleState(); this.checkAccessibleState();
}, }
activate(event) { activate(event) {
if (this._switch.actor.mapped) { if (this._switch.actor.mapped) {
@ -365,23 +351,23 @@ var PopupSwitchMenuItem = new Lang.Class({
event.get_key_symbol() == Clutter.KEY_space) event.get_key_symbol() == Clutter.KEY_space)
return; return;
this.parent(event); super.activate(event);
}, }
toggle() { toggle() {
this._switch.toggle(); this._switch.toggle();
this.emit('toggled', this._switch.state); this.emit('toggled', this._switch.state);
this.checkAccessibleState(); this.checkAccessibleState();
}, }
get state() { get state() {
return this._switch.state; return this._switch.state;
}, }
setToggleState(state) { setToggleState(state) {
this._switch.setToggleState(state); this._switch.setToggleState(state);
this.checkAccessibleState(); this.checkAccessibleState();
}, }
checkAccessibleState() { checkAccessibleState() {
switch (this.actor.accessible_role) { switch (this.actor.accessible_role) {
@ -395,14 +381,11 @@ var PopupSwitchMenuItem = new Lang.Class({
this.actor.remove_accessible_state (Atk.StateType.CHECKED); this.actor.remove_accessible_state (Atk.StateType.CHECKED);
} }
} }
}); };
var PopupImageMenuItem = new Lang.Class({ var PopupImageMenuItem = class extends PopupBaseMenuItem {
Name: 'PopupImageMenuItem', constructor(text, icon, params) {
Extends: PopupBaseMenuItem, super(params);
_init(text, icon, params) {
this.parent(params);
this._icon = new St.Icon({ style_class: 'popup-menu-icon', this._icon = new St.Icon({ style_class: 'popup-menu-icon',
x_align: Clutter.ActorAlign.END }); x_align: Clutter.ActorAlign.END });
@ -412,7 +395,7 @@ var PopupImageMenuItem = new Lang.Class({
this.actor.label_actor = this.label; this.actor.label_actor = this.label;
this.setIcon(icon); this.setIcon(icon);
}, }
setIcon(icon) { setIcon(icon) {
// The 'icon' parameter can be either a Gio.Icon or a string. // The 'icon' parameter can be either a Gio.Icon or a string.
@ -421,13 +404,13 @@ var PopupImageMenuItem = new Lang.Class({
else else
this._icon.icon_name = icon; this._icon.icon_name = icon;
} }
}); };
var PopupMenuBase = new Lang.Class({ var PopupMenuBase = class {
Name: 'PopupMenuBase', constructor(sourceActor, styleClass) {
Abstract: true, if (new.target === PopupMenuBase)
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
_init(sourceActor, styleClass) {
this.sourceActor = sourceActor; this.sourceActor = sourceActor;
this._parent = null; this._parent = null;
@ -451,33 +434,33 @@ var PopupMenuBase = new Lang.Class({
this._sensitive = true; this._sensitive = true;
this._sessionUpdatedId = Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); this._sessionUpdatedId = Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
}, }
_getTopMenu() { _getTopMenu() {
if (this._parent) if (this._parent)
return this._parent._getTopMenu(); return this._parent._getTopMenu();
else else
return this; return this;
}, }
_setParent(parent) { _setParent(parent) {
this._parent = parent; this._parent = parent;
}, }
getSensitive() { getSensitive() {
let parentSensitive = this._parent ? this._parent.getSensitive() : true; let parentSensitive = this._parent ? this._parent.getSensitive() : true;
return this._sensitive && parentSensitive; return this._sensitive && parentSensitive;
}, }
setSensitive(sensitive) { setSensitive(sensitive) {
this._sensitive = sensitive; this._sensitive = sensitive;
this.emit('sensitive-changed'); this.emit('sensitive-changed');
}, }
_sessionUpdated() { _sessionUpdated() {
this._setSettingsVisibility(Main.sessionMode.allowSettings); this._setSettingsVisibility(Main.sessionMode.allowSettings);
this.close(); this.close();
}, }
addAction(title, callback, icon) { addAction(title, callback, icon) {
let menuItem; let menuItem;
@ -492,7 +475,7 @@ var PopupMenuBase = new Lang.Class({
}); });
return menuItem; return menuItem;
}, }
addSettingsAction(title, desktopFile) { addSettingsAction(title, desktopFile) {
let menuItem = this.addAction(title, () => { let menuItem = this.addAction(title, () => {
@ -511,14 +494,14 @@ var PopupMenuBase = new Lang.Class({
this._settingsActions[desktopFile] = menuItem; this._settingsActions[desktopFile] = menuItem;
return menuItem; return menuItem;
}, }
_setSettingsVisibility(visible) { _setSettingsVisibility(visible) {
for (let id in this._settingsActions) { for (let id in this._settingsActions) {
let item = this._settingsActions[id]; let item = this._settingsActions[id];
item.actor.visible = visible; item.actor.visible = visible;
} }
}, }
isEmpty() { isEmpty() {
let hasVisibleChildren = this.box.get_children().some(child => { let hasVisibleChildren = this.box.get_children().some(child => {
@ -528,21 +511,21 @@ var PopupMenuBase = new Lang.Class({
}); });
return !hasVisibleChildren; return !hasVisibleChildren;
}, }
itemActivated(animate) { itemActivated(animate) {
if (animate == undefined) if (animate == undefined)
animate = BoxPointer.PopupAnimation.FULL; animate = BoxPointer.PopupAnimation.FULL;
this._getTopMenu().close(animate); this._getTopMenu().close(animate);
}, }
_subMenuActiveChanged(submenu, submenuItem) { _subMenuActiveChanged(submenu, submenuItem) {
if (this._activeMenuItem && this._activeMenuItem != submenuItem) if (this._activeMenuItem && this._activeMenuItem != submenuItem)
this._activeMenuItem.setActive(false); this._activeMenuItem.setActive(false);
this._activeMenuItem = submenuItem; this._activeMenuItem = submenuItem;
this.emit('active-changed', submenuItem); this.emit('active-changed', submenuItem);
}, }
_connectItemSignals(menuItem) { _connectItemSignals(menuItem) {
menuItem._activeChangeId = menuItem.connect('active-changed', (menuItem, active) => { menuItem._activeChangeId = menuItem.connect('active-changed', (menuItem, active) => {
@ -590,7 +573,7 @@ var PopupMenuBase = new Lang.Class({
if (menuItem == this._activeMenuItem) if (menuItem == this._activeMenuItem)
this._activeMenuItem = null; this._activeMenuItem = null;
}); });
}, }
_updateSeparatorVisibility(menuItem) { _updateSeparatorVisibility(menuItem) {
if (menuItem.label.text) if (menuItem.label.text)
@ -626,7 +609,7 @@ var PopupMenuBase = new Lang.Class({
} }
menuItem.actor.show(); menuItem.actor.show();
}, }
moveMenuItem(menuItem, position) { moveMenuItem(menuItem, position) {
let items = this._getMenuItems(); let items = this._getMenuItems();
@ -644,7 +627,7 @@ var PopupMenuBase = new Lang.Class({
} else { } else {
this.box.set_child_above_sibling(menuItem.actor, null); this.box.set_child_above_sibling(menuItem.actor, null);
} }
}, }
addMenuItem(menuItem, position) { addMenuItem(menuItem, position) {
let before_item = null; let before_item = null;
@ -721,13 +704,13 @@ var PopupMenuBase = new Lang.Class({
menuItem._setParent(this); menuItem._setParent(this);
this.length++; this.length++;
}, }
_getMenuItems() { _getMenuItems() {
return this.box.get_children().map(a => a._delegate).filter(item => { return this.box.get_children().map(a => a._delegate).filter(item => {
return item instanceof PopupBaseMenuItem || item instanceof PopupMenuSection; return item instanceof PopupBaseMenuItem || item instanceof PopupMenuSection;
}); });
}, }
get firstMenuItem() { get firstMenuItem() {
let items = this._getMenuItems(); let items = this._getMenuItems();
@ -735,11 +718,11 @@ var PopupMenuBase = new Lang.Class({
return items[0]; return items[0];
else else
return null; return null;
}, }
get numMenuItems() { get numMenuItems() {
return this._getMenuItems().length; return this._getMenuItems().length;
}, }
removeAll() { removeAll() {
let children = this._getMenuItems(); let children = this._getMenuItems();
@ -747,14 +730,14 @@ var PopupMenuBase = new Lang.Class({
let item = children[i]; let item = children[i];
item.destroy(); item.destroy();
} }
}, }
toggle() { toggle() {
if (this.isOpen) if (this.isOpen)
this.close(BoxPointer.PopupAnimation.FULL); this.close(BoxPointer.PopupAnimation.FULL);
else else
this.open(BoxPointer.PopupAnimation.FULL); this.open(BoxPointer.PopupAnimation.FULL);
}, }
destroy() { destroy() {
this.close(); this.close();
@ -766,15 +749,12 @@ var PopupMenuBase = new Lang.Class({
Main.sessionMode.disconnect(this._sessionUpdatedId); Main.sessionMode.disconnect(this._sessionUpdatedId);
this._sessionUpdatedId = 0; this._sessionUpdatedId = 0;
} }
}); };
Signals.addSignalMethods(PopupMenuBase.prototype); Signals.addSignalMethods(PopupMenuBase.prototype);
var PopupMenu = new Lang.Class({ var PopupMenu = class extends PopupMenuBase {
Name: 'PopupMenu', constructor(sourceActor, arrowAlignment, arrowSide) {
Extends: PopupMenuBase, super(sourceActor, 'popup-menu-content');
_init(sourceActor, arrowAlignment, arrowSide) {
this.parent(sourceActor, 'popup-menu-content');
this._arrowAlignment = arrowAlignment; this._arrowAlignment = arrowAlignment;
this._arrowSide = arrowSide; this._arrowSide = arrowSide;
@ -798,14 +778,14 @@ var PopupMenu = new Lang.Class({
this._onKeyPress.bind(this)); this._onKeyPress.bind(this));
this._openedSubMenu = null; this._openedSubMenu = null;
}, }
_setOpenedSubMenu(submenu) { _setOpenedSubMenu(submenu) {
if (this._openedSubMenu) if (this._openedSubMenu)
this._openedSubMenu.close(true); this._openedSubMenu.close(true);
this._openedSubMenu = submenu; this._openedSubMenu = submenu;
}, }
_onKeyPress(actor, event) { _onKeyPress(actor, event) {
// Disable toggling the menu by keyboard // Disable toggling the menu by keyboard
@ -853,16 +833,15 @@ var PopupMenu = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else } else
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
setArrowOrigin(origin) { setArrowOrigin(origin) {
this._boxPointer.setArrowOrigin(origin); this._boxPointer.setArrowOrigin(origin);
}, }
setSourceAlignment(alignment) { setSourceAlignment(alignment) {
this._boxPointer.setSourceAlignment(alignment); this._boxPointer.setSourceAlignment(alignment);
}, }
open(animate) { open(animate) {
if (this.isOpen) if (this.isOpen)
@ -879,7 +858,7 @@ var PopupMenu = new Lang.Class({
this.actor.raise_top(); this.actor.raise_top();
this.emit('open-state-changed', true); this.emit('open-state-changed', true);
}, }
close(animate) { close(animate) {
if (this._activeMenuItem) if (this._activeMenuItem)
@ -896,43 +875,38 @@ var PopupMenu = new Lang.Class({
this.isOpen = false; this.isOpen = false;
this.emit('open-state-changed', false); this.emit('open-state-changed', false);
}, }
destroy() { destroy() {
if (this._keyPressId) if (this._keyPressId)
this.sourceActor.disconnect(this._keyPressId); this.sourceActor.disconnect(this._keyPressId);
this.parent(); super.destroy();
} }
}); };
var PopupDummyMenu = new Lang.Class({ var PopupDummyMenu = class {
Name: 'PopupDummyMenu', constructor(sourceActor) {
_init(sourceActor) {
this.sourceActor = sourceActor; this.sourceActor = sourceActor;
this.actor = sourceActor; this.actor = sourceActor;
this.actor._delegate = this; this.actor._delegate = this;
}, }
getSensitive() { getSensitive() {
return true; return true;
}, }
open() { this.emit('open-state-changed', true); }, open() { this.emit('open-state-changed', true); }
close() { this.emit('open-state-changed', false); }, close() { this.emit('open-state-changed', false); }
toggle() {}, toggle() {}
destroy() { destroy() {
this.emit('destroy'); this.emit('destroy');
}, }
}); };
Signals.addSignalMethods(PopupDummyMenu.prototype); Signals.addSignalMethods(PopupDummyMenu.prototype);
var PopupSubMenu = new Lang.Class({ var PopupSubMenu = class extends PopupMenuBase {
Name: 'PopupSubMenu', constructor(sourceActor, sourceArrow) {
Extends: PopupMenuBase, super(sourceActor);
_init(sourceActor, sourceArrow) {
this.parent(sourceActor);
this._arrow = sourceArrow; this._arrow = sourceArrow;
@ -948,7 +922,7 @@ var PopupSubMenu = new Lang.Class({
this.actor.clip_to_allocation = true; this.actor.clip_to_allocation = true;
this.actor.connect('key-press-event', this._onKeyPressEvent.bind(this)); this.actor.connect('key-press-event', this._onKeyPressEvent.bind(this));
this.actor.hide(); this.actor.hide();
}, }
_needsScrollbar() { _needsScrollbar() {
let topMenu = this._getTopMenu(); let topMenu = this._getTopMenu();
@ -957,11 +931,11 @@ var PopupSubMenu = new Lang.Class({
let topMaxHeight = topThemeNode.get_max_height(); let topMaxHeight = topThemeNode.get_max_height();
return topMaxHeight >= 0 && topNaturalHeight >= topMaxHeight; return topMaxHeight >= 0 && topNaturalHeight >= topMaxHeight;
}, }
getSensitive() { getSensitive() {
return this._sensitive && this.sourceActor._delegate.getSensitive(); return this._sensitive && this.sourceActor._delegate.getSensitive();
}, }
open(animate) { open(animate) {
if (this.isOpen) if (this.isOpen)
@ -1017,7 +991,7 @@ var PopupSubMenu = new Lang.Class({
} else { } else {
this._arrow.rotation_angle_z = targetAngle; this._arrow.rotation_angle_z = targetAngle;
} }
}, }
close(animate) { close(animate) {
if (!this.isOpen) if (!this.isOpen)
@ -1052,7 +1026,7 @@ var PopupSubMenu = new Lang.Class({
this._arrow.rotation_angle_z = 0; this._arrow.rotation_angle_z = 0;
this.actor.hide(); this.actor.hide();
} }
}, }
_onKeyPressEvent(actor, event) { _onKeyPressEvent(actor, event) {
// Move focus back to parent menu if the user types Left. // Move focus back to parent menu if the user types Left.
@ -1065,7 +1039,7 @@ var PopupSubMenu = new Lang.Class({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
}); };
/** /**
* PopupMenuSection: * PopupMenuSection:
@ -1075,30 +1049,24 @@ var PopupSubMenu = new Lang.Class({
* can add it to another menu), but is completely transparent * can add it to another menu), but is completely transparent
* to the user * to the user
*/ */
var PopupMenuSection = new Lang.Class({ var PopupMenuSection = class extends PopupMenuBase {
Name: 'PopupMenuSection', constructor() {
Extends: PopupMenuBase, super();
_init() {
this.parent();
this.actor = this.box; this.actor = this.box;
this.actor._delegate = this; this.actor._delegate = this;
this.isOpen = true; this.isOpen = true;
}, }
// deliberately ignore any attempt to open() or close(), but emit the // deliberately ignore any attempt to open() or close(), but emit the
// corresponding signal so children can still pick it up // corresponding signal so children can still pick it up
open() { this.emit('open-state-changed', true); }, open() { this.emit('open-state-changed', true); }
close() { this.emit('open-state-changed', false); }, close() { this.emit('open-state-changed', false); }
}); };
var PopupSubMenuMenuItem = new Lang.Class({ var PopupSubMenuMenuItem = class extends PopupBaseMenuItem {
Name: 'PopupSubMenuMenuItem', constructor(text, wantIcon) {
Extends: PopupBaseMenuItem, super();
_init(text, wantIcon) {
this.parent();
this.actor.add_style_class_name('popup-submenu-menu-item'); 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 = new PopupSubMenu(this.actor, this._triangle);
this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this)); this.menu.connect('open-state-changed', this._subMenuOpenStateChanged.bind(this));
}, }
_setParent(parent) { _setParent(parent) {
this.parent(parent); super._setParent(parent);
this.menu._setParent(parent); this.menu._setParent(parent);
}, }
syncSensitive() { syncSensitive() {
let sensitive = this.parent(); let sensitive = super.syncSensitive();
this._triangle.visible = sensitive; this._triangle.visible = sensitive;
if (!sensitive) if (!sensitive)
this.menu.close(false); this.menu.close(false);
}, }
_subMenuOpenStateChanged(menu, open) { _subMenuOpenStateChanged(menu, open) {
if (open) { if (open) {
@ -1154,28 +1122,28 @@ var PopupSubMenuMenuItem = new Lang.Class({
this.actor.remove_accessible_state (Atk.StateType.EXPANDED); this.actor.remove_accessible_state (Atk.StateType.EXPANDED);
this.actor.remove_style_pseudo_class('checked'); this.actor.remove_style_pseudo_class('checked');
} }
}, }
destroy() { destroy() {
this.menu.destroy(); this.menu.destroy();
this.parent(); super.destroy();
}, }
setSubmenuShown(open) { setSubmenuShown(open) {
if (open) if (open)
this.menu.open(BoxPointer.PopupAnimation.FULL); this.menu.open(BoxPointer.PopupAnimation.FULL);
else else
this.menu.close(BoxPointer.PopupAnimation.FULL); this.menu.close(BoxPointer.PopupAnimation.FULL);
}, }
_setOpenState(open) { _setOpenState(open) {
this.setSubmenuShown(open); this.setSubmenuShown(open);
}, }
_getOpenState() { _getOpenState() {
return this.menu.isOpen; return this.menu.isOpen;
}, }
_onKeyPressEvent(actor, event) { _onKeyPressEvent(actor, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
@ -1189,12 +1157,12 @@ var PopupSubMenuMenuItem = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return this.parent(actor, event); return super._onKeyPressEvent(actor, event);
}, }
activate(event) { activate(event) {
this._setOpenState(true); this._setOpenState(true);
}, }
_onButtonReleaseEvent(actor) { _onButtonReleaseEvent(actor) {
// Since we override the parent, we need to manage what the parent does // 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.actor.remove_style_pseudo_class ('active');
this._setOpenState(!this._getOpenState()); this._setOpenState(!this._getOpenState());
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onTouchEvent(actor, event) { _onTouchEvent(actor, event) {
if (event.type() == Clutter.EventType.TOUCH_END) { if (event.type() == Clutter.EventType.TOUCH_END) {
@ -1213,21 +1181,19 @@ var PopupSubMenuMenuItem = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
}); };
/* Basic implementation of a menu manager. /* Basic implementation of a menu manager.
* Call addMenu to add menus * Call addMenu to add menus
*/ */
var PopupMenuManager = new Lang.Class({ var PopupMenuManager = class {
Name: 'PopupMenuManager', constructor(owner, grabParams) {
_init(owner, grabParams) {
grabParams = Params.parse(grabParams, grabParams = Params.parse(grabParams,
{ actionMode: Shell.ActionMode.POPUP }); { actionMode: Shell.ActionMode.POPUP });
this._owner = owner; this._owner = owner;
this._grabHelper = new GrabHelper.GrabHelper(owner.actor, grabParams); this._grabHelper = new GrabHelper.GrabHelper(owner.actor, grabParams);
this._menus = []; this._menus = [];
}, }
addMenu(menu, position) { addMenu(menu, position) {
if (this._findMenu(menu) > -1) if (this._findMenu(menu) > -1)
@ -1256,7 +1222,7 @@ var PopupMenuManager = new Lang.Class({
this._menus.push(menudata); this._menus.push(menudata);
else else
this._menus.splice(position, 0, menudata); this._menus.splice(position, 0, menudata);
}, }
removeMenu(menu) { removeMenu(menu) {
if (menu == this.activeMenu) if (menu == this.activeMenu)
@ -1278,7 +1244,7 @@ var PopupMenuManager = new Lang.Class({
if (menu.sourceActor) if (menu.sourceActor)
this._grabHelper.removeActor(menu.sourceActor); this._grabHelper.removeActor(menu.sourceActor);
this._menus.splice(position, 1); this._menus.splice(position, 1);
}, }
get activeMenu() { get activeMenu() {
let firstGrab = this._grabHelper.grabStack[0]; let firstGrab = this._grabHelper.grabStack[0];
@ -1286,11 +1252,11 @@ var PopupMenuManager = new Lang.Class({
return firstGrab.actor._delegate; return firstGrab.actor._delegate;
else else
return null; return null;
}, }
ignoreRelease() { ignoreRelease() {
return this._grabHelper.ignoreRelease(); return this._grabHelper.ignoreRelease();
}, }
_onMenuOpenState(menu, open) { _onMenuOpenState(menu, open) {
if (open) { if (open) {
@ -1303,12 +1269,12 @@ var PopupMenuManager = new Lang.Class({
} else { } else {
this._grabHelper.ungrab({ actor: menu.actor }); this._grabHelper.ungrab({ actor: menu.actor });
} }
}, }
_changeMenu(newMenu) { _changeMenu(newMenu) {
newMenu.open(this.activeMenu ? BoxPointer.PopupAnimation.FADE newMenu.open(this.activeMenu ? BoxPointer.PopupAnimation.FADE
: BoxPointer.PopupAnimation.FULL); : BoxPointer.PopupAnimation.FULL);
}, }
_onMenuSourceEnter(menu) { _onMenuSourceEnter(menu) {
if (!this._grabHelper.grabbed) if (!this._grabHelper.grabbed)
@ -1319,11 +1285,11 @@ var PopupMenuManager = new Lang.Class({
this._changeMenu(menu); this._changeMenu(menu);
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onMenuDestroy(menu) { _onMenuDestroy(menu) {
this.removeMenu(menu); this.removeMenu(menu);
}, }
_findMenu(item) { _findMenu(item) {
for (let i = 0; i < this._menus.length; i++) { for (let i = 0; i < this._menus.length; i++) {
@ -1332,7 +1298,7 @@ var PopupMenuManager = new Lang.Class({
return i; return i;
} }
return -1; return -1;
}, }
_closeMenu(isUser, menu) { _closeMenu(isUser, menu) {
// If this isn't a user action, we called close() // If this isn't a user action, we called close()
@ -1341,4 +1307,4 @@ var PopupMenuManager = new Lang.Class({
if (isUser) if (isUser)
menu.close(BoxPointer.PopupAnimation.FULL); menu.close(BoxPointer.PopupAnimation.FULL);
} }
}); };

View File

@ -4,7 +4,6 @@ const Atk = imports.gi.Atk;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const ShellMenu = imports.gi.ShellMenu; const ShellMenu = imports.gi.ShellMenu;
const St = imports.gi.St; const St = imports.gi.St;
@ -38,10 +37,8 @@ function _removeItem(menu, position) {
items[position].destroy(); items[position].destroy();
} }
var RemoteMenuSeparatorItemMapper = new Lang.Class({ var RemoteMenuSeparatorItemMapper = class {
Name: 'RemoteMenuSeparatorItemMapper', constructor(trackerItem) {
_init(trackerItem) {
this._trackerItem = trackerItem; this._trackerItem = trackerItem;
this.menuItem = new PopupMenu.PopupSeparatorMenuItem(); this.menuItem = new PopupMenu.PopupSeparatorMenuItem();
this._trackerItem.connect('notify::label', this._updateLabel.bind(this)); this._trackerItem.connect('notify::label', this._updateLabel.bind(this));
@ -50,36 +47,31 @@ var RemoteMenuSeparatorItemMapper = new Lang.Class({
this.menuItem.connect('destroy', () => { this.menuItem.connect('destroy', () => {
trackerItem.run_dispose(); trackerItem.run_dispose();
}); });
}, }
_updateLabel() { _updateLabel() {
this.menuItem.label.text = stripMnemonics(this._trackerItem.label); this.menuItem.label.text = stripMnemonics(this._trackerItem.label);
}, }
}); };
var RequestSubMenu = new Lang.Class({ var RequestSubMenu = class extends PopupMenu.PopupSubMenuMenuItem {
Name: 'RequestSubMenu', constructor() {
Extends: PopupMenu.PopupSubMenuMenuItem, super('');
_init() {
this.parent('');
this._requestOpen = false; this._requestOpen = false;
}, }
_setOpenState(open) { _setOpenState(open) {
this.emit('request-open', open); this.emit('request-open', open);
this._requestOpen = open; this._requestOpen = open;
}, }
_getOpenState() { _getOpenState() {
return this._requestOpen; return this._requestOpen;
}, }
}); };
var RemoteMenuSubmenuItemMapper = new Lang.Class({ var RemoteMenuSubmenuItemMapper = class {
Name: 'RemoteMenuSubmenuItemMapper', constructor(trackerItem) {
_init(trackerItem) {
this._trackerItem = trackerItem; this._trackerItem = trackerItem;
this.menuItem = new RequestSubMenu(); this.menuItem = new RequestSubMenu();
this._trackerItem.connect('notify::label', this._updateLabel.bind(this)); this._trackerItem.connect('notify::label', this._updateLabel.bind(this));
@ -100,22 +92,19 @@ var RemoteMenuSubmenuItemMapper = new Lang.Class({
this.menuItem.connect('destroy', () => { this.menuItem.connect('destroy', () => {
trackerItem.run_dispose(); trackerItem.run_dispose();
}); });
}, }
destroy() { destroy() {
this._tracker.destroy(); this._tracker.destroy();
this.parent(); }
},
_updateLabel() { _updateLabel() {
this.menuItem.label.text = stripMnemonics(this._trackerItem.label); this.menuItem.label.text = stripMnemonics(this._trackerItem.label);
}, }
}); };
var RemoteMenuItemMapper = new Lang.Class({ var RemoteMenuItemMapper = class {
Name: 'RemoteMenuItemMapper', constructor(trackerItem) {
_init(trackerItem) {
this._trackerItem = trackerItem; this._trackerItem = trackerItem;
this.menuItem = new PopupMenu.PopupBaseMenuItem(); this.menuItem = new PopupMenu.PopupBaseMenuItem();
@ -146,20 +135,20 @@ var RemoteMenuItemMapper = new Lang.Class({
this.menuItem.connect('destroy', () => { this.menuItem.connect('destroy', () => {
trackerItem.run_dispose(); trackerItem.run_dispose();
}); });
}, }
_updateIcon() { _updateIcon() {
this._icon.gicon = this._trackerItem.icon; this._icon.gicon = this._trackerItem.icon;
this._icon.visible = (this._icon.gicon != null); this._icon.visible = (this._icon.gicon != null);
}, }
_updateLabel() { _updateLabel() {
this._label.text = stripMnemonics(this._trackerItem.label); this._label.text = stripMnemonics(this._trackerItem.label);
}, }
_updateSensitivity() { _updateSensitivity() {
this.menuItem.setSensitive(this._trackerItem.sensitive); this.menuItem.setSensitive(this._trackerItem.sensitive);
}, }
_updateDecoration() { _updateDecoration() {
let ornamentForRole = {}; let ornamentForRole = {};
@ -171,7 +160,7 @@ var RemoteMenuItemMapper = new Lang.Class({
ornament = ornamentForRole[this._trackerItem.role]; ornament = ornamentForRole[this._trackerItem.role];
this.menuItem.setOrnament(ornament); this.menuItem.setOrnament(ornament);
}, }
_updateRole() { _updateRole() {
let a11yRoles = {}; let a11yRoles = {};
@ -183,15 +172,12 @@ var RemoteMenuItemMapper = new Lang.Class({
this.menuItem.actor.accessible_role = a11yRole; this.menuItem.actor.accessible_role = a11yRole;
this._updateDecoration(); this._updateDecoration();
}, }
}); };
var RemoteMenu = new Lang.Class({ var RemoteMenu = class extends PopupMenu.PopupMenu {
Name: 'RemoteMenu', constructor(sourceActor, model, actionGroup) {
Extends: PopupMenu.PopupMenu, super(sourceActor, 0.0, St.Side.TOP);
_init(sourceActor, model, actionGroup) {
this.parent(sourceActor, 0.0, St.Side.TOP);
this._model = model; this._model = model;
this._actionGroup = actionGroup; this._actionGroup = actionGroup;
@ -200,14 +186,14 @@ var RemoteMenu = new Lang.Class({
null, /* action namespace */ null, /* action namespace */
_insertItem.bind(null, this), _insertItem.bind(null, this),
_removeItem.bind(null, this)); _removeItem.bind(null, this));
}, }
get actionGroup() { get actionGroup() {
return this._actionGroup; return this._actionGroup;
}, }
destroy() { destroy() {
this._tracker.destroy(); this._tracker.destroy();
this.parent(); super.destroy();
}, }
}); };

View File

@ -3,7 +3,6 @@
const GdkPixbuf = imports.gi.GdkPixbuf; const GdkPixbuf = imports.gi.GdkPixbuf;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -190,10 +189,8 @@ function loadRemoteSearchProviders(searchSettings, callback) {
callback(loadedProviders); callback(loadedProviders);
} }
var RemoteSearchProvider = new Lang.Class({ var RemoteSearchProvider = class {
Name: 'RemoteSearchProvider', constructor(appInfo, dbusName, dbusPath, autoStart, proxyInfo) {
_init(appInfo, dbusName, dbusPath, autoStart, proxyInfo) {
if (!proxyInfo) if (!proxyInfo)
proxyInfo = SearchProviderProxyInfo; proxyInfo = SearchProviderProxyInfo;
@ -215,7 +212,7 @@ var RemoteSearchProvider = new Lang.Class({
this.id = appInfo.get_id(); this.id = appInfo.get_id();
this.isRemoteProvider = true; this.isRemoteProvider = true;
this.canLaunchSearch = false; this.canLaunchSearch = false;
}, }
createIcon(size, meta) { createIcon(size, meta) {
let gicon = null; let gicon = null;
@ -236,7 +233,7 @@ var RemoteSearchProvider = new Lang.Class({
icon = new St.Icon({ gicon: gicon, icon = new St.Icon({ gicon: gicon,
icon_size: size }); icon_size: size });
return icon; return icon;
}, }
filterResults(results, maxNumber) { filterResults(results, maxNumber) {
if (results.length <= maxNumber) if (results.length <= maxNumber)
@ -246,7 +243,7 @@ var RemoteSearchProvider = new Lang.Class({
let specialResults = results.filter(r => r.startsWith('special:')); let specialResults = results.filter(r => r.startsWith('special:'));
return regularResults.slice(0, maxNumber).concat(specialResults.slice(0, maxNumber)); return regularResults.slice(0, maxNumber).concat(specialResults.slice(0, maxNumber));
}, }
_getResultsFinished(results, error, callback) { _getResultsFinished(results, error, callback) {
if (error) { if (error) {
@ -259,7 +256,7 @@ var RemoteSearchProvider = new Lang.Class({
} }
callback(results[0]); callback(results[0]);
}, }
getInitialResultSet(terms, callback, cancellable) { getInitialResultSet(terms, callback, cancellable) {
this.proxy.GetInitialResultSetRemote(terms, this.proxy.GetInitialResultSetRemote(terms,
@ -267,7 +264,7 @@ var RemoteSearchProvider = new Lang.Class({
this._getResultsFinished(results, error, callback); this._getResultsFinished(results, error, callback);
}, },
cancellable); cancellable);
}, }
getSubsearchResultSet(previousResults, newTerms, callback, cancellable) { getSubsearchResultSet(previousResults, newTerms, callback, cancellable) {
this.proxy.GetSubsearchResultSetRemote(previousResults, newTerms, this.proxy.GetSubsearchResultSetRemote(previousResults, newTerms,
@ -275,7 +272,7 @@ var RemoteSearchProvider = new Lang.Class({
this._getResultsFinished(results, error, callback); this._getResultsFinished(results, error, callback);
}, },
cancellable); cancellable);
}, }
_getResultMetasFinished(results, error, callback) { _getResultMetasFinished(results, error, callback) {
if (error) { if (error) {
@ -302,7 +299,7 @@ var RemoteSearchProvider = new Lang.Class({
clipboardText: metas[i]['clipboardText'] }); clipboardText: metas[i]['clipboardText'] });
} }
callback(resultMetas); callback(resultMetas);
}, }
getResultMetas(ids, callback, cancellable) { getResultMetas(ids, callback, cancellable) {
this.proxy.GetResultMetasRemote(ids, this.proxy.GetResultMetasRemote(ids,
@ -310,11 +307,11 @@ var RemoteSearchProvider = new Lang.Class({
this._getResultMetasFinished(results, error, callback); this._getResultMetasFinished(results, error, callback);
}, },
cancellable); cancellable);
}, }
activateResult(id) { activateResult(id) {
this.proxy.ActivateResultRemote(id); this.proxy.ActivateResultRemote(id);
}, }
launchSearch(terms) { launchSearch(terms) {
// the provider is not compatible with the new version of the interface, launch // 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'); log('Search provider ' + this.appInfo.get_id() + ' does not implement LaunchSearch');
this.appInfo.launch([], global.create_app_launch_context(0, -1)); this.appInfo.launch([], global.create_app_launch_context(0, -1));
} }
}); };
var RemoteSearchProvider2 = new Lang.Class({ var RemoteSearchProvider2 = class extends RemoteSearchProvider {
Name: 'RemoteSearchProvider2', constructor(appInfo, dbusName, dbusPath, autoStart) {
Extends: RemoteSearchProvider, super(appInfo, dbusName, dbusPath, autoStart, SearchProvider2ProxyInfo);
_init(appInfo, dbusName, dbusPath, autoStart) {
this.parent(appInfo, dbusName, dbusPath, autoStart, SearchProvider2ProxyInfo);
this.canLaunchSearch = true; this.canLaunchSearch = true;
}, }
activateResult(id, terms) { activateResult(id, terms) {
this.proxy.ActivateResultRemote(id, terms, global.get_current_time()); this.proxy.ActivateResultRemote(id, terms, global.get_current_time());
}, }
launchSearch(terms) { launchSearch(terms) {
this.proxy.LaunchSearchRemote(terms, global.get_current_time()); this.proxy.LaunchSearchRemote(terms, global.get_current_time());
} }
}); };

View File

@ -3,7 +3,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const St = imports.gi.St; const St = imports.gi.St;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -30,13 +29,10 @@ const EXEC_ARG_KEY = 'exec-arg';
var DIALOG_GROW_TIME = 0.1; var DIALOG_GROW_TIME = 0.1;
var RunDialog = new Lang.Class({ var RunDialog = class extends ModalDialog.ModalDialog {
Name: 'RunDialog', constructor() {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'run-dialog',
destroyOnClose: false });
_init() {
this.parent({ styleClass: 'run-dialog',
destroyOnClose: false });
this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA }); this._lockdownSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA }); this._terminalSettings = new Gio.Settings({ schema_id: TERMINAL_SCHEMA });
@ -144,7 +140,7 @@ var RunDialog = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}); });
}, }
_getCommandCompletion(text) { _getCommandCompletion(text) {
function _getCommon(s1, s2) { function _getCommon(s1, s2) {
@ -189,7 +185,7 @@ var RunDialog = new Lang.Class({
let common = results.reduce(_getCommon, null); let common = results.reduce(_getCommon, null);
return common.substr(text.length); return common.substr(text.length);
}, }
_getCompletion(text) { _getCompletion(text) {
if (text.indexOf('/') != -1) { if (text.indexOf('/') != -1) {
@ -197,7 +193,7 @@ var RunDialog = new Lang.Class({
} else { } else {
return this._getCommandCompletion(text); return this._getCommandCompletion(text);
} }
}, }
_run(input, inTerminal) { _run(input, inTerminal) {
let command = input; let command = input;
@ -248,7 +244,7 @@ var RunDialog = new Lang.Class({
} }
} }
} }
}, }
_showError(message) { _showError(message) {
this._commandError = true; this._commandError = true;
@ -269,7 +265,7 @@ var RunDialog = new Lang.Class({
} }
}); });
} }
}, }
_restart() { _restart() {
if (Meta.is_wayland_compositor()) { if (Meta.is_wayland_compositor()) {
@ -279,7 +275,7 @@ var RunDialog = new Lang.Class({
this._shouldFadeOut = false; this._shouldFadeOut = false;
this.close(); this.close();
Meta.restart(_("Restarting…")); Meta.restart(_("Restarting…"));
}, }
open() { open() {
this._history.lastItem(); this._history.lastItem();
@ -290,7 +286,7 @@ var RunDialog = new Lang.Class({
if (this._lockdownSettings.get_boolean(DISABLE_COMMAND_LINE_KEY)) if (this._lockdownSettings.get_boolean(DISABLE_COMMAND_LINE_KEY))
return; return;
this.parent(); super.open();
}, }
}); };
Signals.addSignalMethods(RunDialog.prototype); Signals.addSignalMethods(RunDialog.prototype);

View File

@ -60,10 +60,8 @@ var MANUAL_FADE_TIME = 0.3;
var BACKGROUND_FADE_TIME = 1.0; var BACKGROUND_FADE_TIME = 1.0;
var CURTAIN_SLIDE_TIME = 0.3; var CURTAIN_SLIDE_TIME = 0.3;
var Clock = new Lang.Class({ var Clock = class {
Name: 'ScreenShieldClock', constructor() {
_init() {
this.actor = new St.BoxLayout({ style_class: 'screen-shield-clock', this.actor = new St.BoxLayout({ style_class: 'screen-shield-clock',
vertical: true }); vertical: true });
@ -77,7 +75,7 @@ var Clock = new Lang.Class({
this._wallClock.connect('notify::clock', this._updateClock.bind(this)); this._wallClock.connect('notify::clock', this._updateClock.bind(this));
this._updateClock(); this._updateClock();
}, }
_updateClock() { _updateClock() {
this._time.text = this._wallClock.clock; this._time.text = this._wallClock.clock;
@ -87,18 +85,16 @@ var Clock = new Lang.Class({
long format */ long format */
let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d")); let dateFormat = Shell.util_translate_time_string(N_("%A, %B %d"));
this._date.text = date.toLocaleFormat(dateFormat); this._date.text = date.toLocaleFormat(dateFormat);
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
this._wallClock.run_dispose(); this._wallClock.run_dispose();
} }
}); };
var NotificationsBox = new Lang.Class({ var NotificationsBox = class {
Name: 'NotificationsBox', constructor() {
_init() {
this.actor = new St.BoxLayout({ vertical: true, this.actor = new St.BoxLayout({ vertical: true,
name: 'screenShieldNotifications', name: 'screenShieldNotifications',
style_class: 'screen-shield-notifications-container' }); style_class: 'screen-shield-notifications-container' });
@ -118,7 +114,7 @@ var NotificationsBox = new Lang.Class({
this._updateVisibility(); this._updateVisibility();
this._sourceAddedId = Main.messageTray.connect('source-added', this._sourceAdded.bind(this)); this._sourceAddedId = Main.messageTray.connect('source-added', this._sourceAdded.bind(this));
}, }
destroy() { destroy() {
if (this._sourceAddedId) { if (this._sourceAddedId) {
@ -132,21 +128,21 @@ var NotificationsBox = new Lang.Class({
} }
this.actor.destroy(); this.actor.destroy();
}, }
_updateVisibility() { _updateVisibility() {
this._notificationBox.visible = this._notificationBox.visible =
this._notificationBox.get_children().some(a => a.visible); this._notificationBox.get_children().some(a => a.visible);
this.actor.visible = this._notificationBox.visible; this.actor.visible = this._notificationBox.visible;
}, }
_makeNotificationCountText(count, isChat) { _makeNotificationCountText(count, isChat) {
if (isChat) if (isChat)
return ngettext("%d new message", "%d new messages", count).format(count); return ngettext("%d new message", "%d new messages", count).format(count);
else else
return ngettext("%d new notification", "%d new notifications", count).format(count); return ngettext("%d new notification", "%d new notifications", count).format(count);
}, }
_makeNotificationSource(source, box) { _makeNotificationSource(source, box) {
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE); let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
@ -166,7 +162,7 @@ var NotificationsBox = new Lang.Class({
box.visible = count != 0; box.visible = count != 0;
return [title, countLabel]; return [title, countLabel];
}, }
_makeNotificationDetailedSource(source, box) { _makeNotificationDetailedSource(source, box) {
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE); let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
@ -204,7 +200,7 @@ var NotificationsBox = new Lang.Class({
box.visible = visible; box.visible = visible;
return [title, null]; return [title, null];
}, }
_showSource(source, obj, box) { _showSource(source, obj, box) {
if (obj.detailed) { if (obj.detailed) {
@ -214,7 +210,7 @@ var NotificationsBox = new Lang.Class({
} }
box.visible = obj.visible && (source.unseenCount > 0); box.visible = obj.visible && (source.unseenCount > 0);
}, }
_sourceAdded(tray, source, initial) { _sourceAdded(tray, source, initial) {
let obj = { let obj = {
@ -276,11 +272,11 @@ var NotificationsBox = new Lang.Class({
if (obj.sourceBox.visible) if (obj.sourceBox.visible)
this.emit('wake-up-screen'); this.emit('wake-up-screen');
} }
}, }
_titleChanged(source, obj) { _titleChanged(source, obj) {
obj.titleLabel.text = source.title; obj.titleLabel.text = source.title;
}, }
_countChanged(source, obj) { _countChanged(source, obj) {
if (obj.detailed) { if (obj.detailed) {
@ -300,7 +296,7 @@ var NotificationsBox = new Lang.Class({
this._updateVisibility(); this._updateVisibility();
if (obj.sourceBox.visible) if (obj.sourceBox.visible)
this.emit('wake-up-screen'); this.emit('wake-up-screen');
}, }
_visibleChanged(source, obj) { _visibleChanged(source, obj) {
if (obj.visible == source.policy.showInLockScreen) if (obj.visible == source.policy.showInLockScreen)
@ -312,7 +308,7 @@ var NotificationsBox = new Lang.Class({
this._updateVisibility(); this._updateVisibility();
if (obj.sourceBox.visible) if (obj.sourceBox.visible)
this.emit('wake-up-screen'); this.emit('wake-up-screen');
}, }
_detailedChanged(source, obj) { _detailedChanged(source, obj) {
if (obj.detailed == source.policy.detailsInLockScreen) if (obj.detailed == source.policy.detailsInLockScreen)
@ -323,12 +319,12 @@ var NotificationsBox = new Lang.Class({
obj.sourceBox.destroy_all_children(); obj.sourceBox.destroy_all_children();
obj.titleLabel = obj.countLabel = null; obj.titleLabel = obj.countLabel = null;
this._showSource(source, obj, obj.sourceBox); this._showSource(source, obj, obj.sourceBox);
}, }
_onSourceDestroy(source, obj) { _onSourceDestroy(source, obj) {
this._removeSource(source, obj); this._removeSource(source, obj);
this._updateVisibility(); this._updateVisibility();
}, }
_removeSource(source, obj) { _removeSource(source, obj) {
obj.sourceBox.destroy(); obj.sourceBox.destroy();
@ -340,8 +336,8 @@ var NotificationsBox = new Lang.Class({
source.policy.disconnect(obj.policyChangedId); source.policy.disconnect(obj.policyChangedId);
this._sources.delete(source); this._sources.delete(source);
}, }
}); };
Signals.addSignalMethods(NotificationsBox.prototype); Signals.addSignalMethods(NotificationsBox.prototype);
var Arrow = new Lang.Class({ 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. * 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. * https://bugzilla.gnome.org/show_bug.cgi?id=668703 explains the dependency.
*/ */
var ScreenShield = new Lang.Class({ var ScreenShield = class {
Name: 'ScreenShield', constructor() {
_init() {
this.actor = Main.layoutManager.screenShieldGroup; this.actor = Main.layoutManager.screenShieldGroup;
this._lockScreenState = MessageTray.State.HIDDEN; this._lockScreenState = MessageTray.State.HIDDEN;
@ -573,7 +567,7 @@ var ScreenShield = new Lang.Class({
this._cursorTracker = Meta.CursorTracker.get_for_display(global.display); this._cursorTracker = Meta.CursorTracker.get_for_display(global.display);
this._syncInhibitor(); this._syncInhibitor();
}, }
_setActive(active) { _setActive(active) {
let prevIsActive = this._isActive; let prevIsActive = this._isActive;
@ -586,7 +580,7 @@ var ScreenShield = new Lang.Class({
this._loginSession.SetLockedHintRemote(active); this._loginSession.SetLockedHintRemote(active);
this._syncInhibitor(); this._syncInhibitor();
}, }
_createBackground(monitorIndex) { _createBackground(monitorIndex) {
let monitor = Main.layoutManager.monitors[monitorIndex]; let monitor = Main.layoutManager.monitors[monitorIndex];
@ -604,7 +598,7 @@ var ScreenShield = new Lang.Class({
this._bgManagers.push(bgManager); this._bgManagers.push(bgManager);
this._backgroundGroup.add_child(widget); this._backgroundGroup.add_child(widget);
}, }
_updateBackgrounds() { _updateBackgrounds() {
for (let i = 0; i < this._bgManagers.length; i++) 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++) for (let i = 0; i < Main.layoutManager.monitors.length; i++)
this._createBackground(i); this._createBackground(i);
}, }
_liftShield(onPrimary, velocity) { _liftShield(onPrimary, velocity) {
if (this._isLocked) { if (this._isLocked) {
@ -624,7 +618,7 @@ var ScreenShield = new Lang.Class({
} else { } else {
this.deactivate(true /* animate */); this.deactivate(true /* animate */);
} }
}, }
_maybeCancelDialog() { _maybeCancelDialog() {
if (!this._dialog) if (!this._dialog)
@ -639,7 +633,7 @@ var ScreenShield = new Lang.Class({
} else { } else {
this._dialog = null; this._dialog = null;
} }
}, }
_becomeModal() { _becomeModal() {
if (this._isModal) if (this._isModal)
@ -654,7 +648,7 @@ var ScreenShield = new Lang.Class({
this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED, this._isModal = Main.pushModal(this.actor, { options: Meta.ModalOptions.POINTER_ALREADY_GRABBED,
actionMode: Shell.ActionMode.LOCK_SCREEN }); actionMode: Shell.ActionMode.LOCK_SCREEN });
return this._isModal; return this._isModal;
}, }
_onLockScreenKeyPress(actor, event) { _onLockScreenKeyPress(actor, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
@ -684,7 +678,7 @@ var ScreenShield = new Lang.Class({
this._liftShield(true, 0); this._liftShield(true, 0);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onLockScreenScroll(actor, event) { _onLockScreenScroll(actor, event) {
if (this._lockScreenState != MessageTray.State.SHOWN) if (this._lockScreenState != MessageTray.State.SHOWN)
@ -704,7 +698,7 @@ var ScreenShield = new Lang.Class({
} }
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_syncInhibitor() { _syncInhibitor() {
let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY); let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY);
@ -723,7 +717,7 @@ var ScreenShield = new Lang.Class({
this._inhibitor.close(null); this._inhibitor.close(null);
this._inhibitor = null; this._inhibitor = null;
} }
}, }
_prepareForSleep(loginManager, aboutToSuspend) { _prepareForSleep(loginManager, aboutToSuspend) {
if (aboutToSuspend) { if (aboutToSuspend) {
@ -732,7 +726,7 @@ var ScreenShield = new Lang.Class({
} else { } else {
this._wakeUpScreen(); this._wakeUpScreen();
} }
}, }
_animateArrows() { _animateArrows() {
let arrows = this._arrowContainer.get_children(); let arrows = this._arrowContainer.get_children();
@ -754,7 +748,7 @@ var ScreenShield = new Lang.Class({
} }
return GLib.SOURCE_CONTINUE; return GLib.SOURCE_CONTINUE;
}, }
_onDragBegin() { _onDragBegin() {
Tweener.removeTweens(this._lockScreenGroup); Tweener.removeTweens(this._lockScreenGroup);
@ -764,7 +758,7 @@ var ScreenShield = new Lang.Class({
this._ensureUnlockDialog(false, false); this._ensureUnlockDialog(false, false);
return true; return true;
}, }
_onDragMotion() { _onDragMotion() {
let [origX, origY] = this._dragAction.get_press_coords(0); let [origX, origY] = this._dragAction.get_press_coords(0);
@ -776,7 +770,7 @@ var ScreenShield = new Lang.Class({
this._lockScreenGroup.y = newY; this._lockScreenGroup.y = newY;
return true; return true;
}, }
_onDragEnd(action, actor, eventX, eventY, modifiers) { _onDragEnd(action, actor, eventX, eventY, modifiers) {
if (this._lockScreenState != MessageTray.State.HIDING) if (this._lockScreenState != MessageTray.State.HIDING)
@ -804,7 +798,7 @@ var ScreenShield = new Lang.Class({
this._maybeCancelDialog(); this._maybeCancelDialog();
} }
}, }
_onStatusChanged(status) { _onStatusChanged(status) {
if (status != GnomeSession.PresenceStatus.IDLE) if (status != GnomeSession.PresenceStatus.IDLE)
@ -855,7 +849,7 @@ var ScreenShield = new Lang.Class({
} }
this._activateFade(this._longLightbox, STANDARD_FADE_TIME); this._activateFade(this._longLightbox, STANDARD_FADE_TIME);
}, }
_activateFade(lightbox, time) { _activateFade(lightbox, time) {
Main.uiGroup.set_child_above_sibling(lightbox.actor, null); Main.uiGroup.set_child_above_sibling(lightbox.actor, null);
@ -863,7 +857,7 @@ var ScreenShield = new Lang.Class({
if (this._becameActiveId == 0) if (this._becameActiveId == 0)
this._becameActiveId = this.idleMonitor.add_user_active_watch(this._onUserBecameActive.bind(this)); this._becameActiveId = this.idleMonitor.add_user_active_watch(this._onUserBecameActive.bind(this));
}, }
_onUserBecameActive() { _onUserBecameActive() {
// This function gets called here when the user becomes active // This function gets called here when the user becomes active
@ -893,15 +887,15 @@ var ScreenShield = new Lang.Class({
} else { } else {
this.deactivate(false); this.deactivate(false);
} }
}, }
_onLongLightboxShown() { _onLongLightboxShown() {
this.activate(false); this.activate(false);
}, }
_onShortLightboxShown() { _onShortLightboxShown() {
this._completeLockScreenShown(); this._completeLockScreenShown();
}, }
showDialog() { showDialog() {
if (!this._becomeModal()) { if (!this._becomeModal()) {
@ -915,7 +909,7 @@ var ScreenShield = new Lang.Class({
this._isLocked = true; this._isLocked = true;
if (this._ensureUnlockDialog(true, true)) if (this._ensureUnlockDialog(true, true))
this._hideLockScreen(false, 0); this._hideLockScreen(false, 0);
}, }
_hideLockScreenComplete() { _hideLockScreenComplete() {
if (Main.sessionMode.currentMode == 'lock-screen') if (Main.sessionMode.currentMode == 'lock-screen')
@ -928,7 +922,7 @@ var ScreenShield = new Lang.Class({
this._dialog.actor.grab_key_focus(); this._dialog.actor.grab_key_focus();
this._dialog.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); this._dialog.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
} }
}, }
_hideLockScreen(animate, velocity) { _hideLockScreen(animate, velocity) {
if (this._lockScreenState == MessageTray.State.HIDDEN) if (this._lockScreenState == MessageTray.State.HIDDEN)
@ -961,7 +955,7 @@ var ScreenShield = new Lang.Class({
} }
this._cursorTracker.set_pointer_visible(true); this._cursorTracker.set_pointer_visible(true);
}, }
_ensureUnlockDialog(onPrimary, allowCancel) { _ensureUnlockDialog(onPrimary, allowCancel) {
if (!this._dialog) { if (!this._dialog) {
@ -989,12 +983,12 @@ var ScreenShield = new Lang.Class({
this._dialog.allowCancel = allowCancel; this._dialog.allowCancel = allowCancel;
return true; return true;
}, }
_onUnlockFailed() { _onUnlockFailed() {
this._resetLockScreen({ animateLockScreen: true, this._resetLockScreen({ animateLockScreen: true,
fadeToBlack: false }); fadeToBlack: false });
}, }
_resetLockScreen(params) { _resetLockScreen(params) {
// Don't reset the lock screen unless it is completely hidden // 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') if (Main.sessionMode.currentMode != 'lock-screen')
Main.sessionMode.pushMode('lock-screen'); Main.sessionMode.pushMode('lock-screen');
}, }
_startArrowAnimation() { _startArrowAnimation() {
this._arrowActiveWatchId = 0; this._arrowActiveWatchId = 0;
@ -1050,7 +1044,7 @@ var ScreenShield = new Lang.Class({
if (!this._arrowWatchId) if (!this._arrowWatchId)
this._arrowWatchId = this.idleMonitor.add_idle_watch(ARROW_IDLE_TIME, this._arrowWatchId = this.idleMonitor.add_idle_watch(ARROW_IDLE_TIME,
this._pauseArrowAnimation.bind(this)); this._pauseArrowAnimation.bind(this));
}, }
_pauseArrowAnimation() { _pauseArrowAnimation() {
if (this._arrowAnimationId) { if (this._arrowAnimationId) {
@ -1060,7 +1054,7 @@ var ScreenShield = new Lang.Class({
if (!this._arrowActiveWatchId) if (!this._arrowActiveWatchId)
this._arrowActiveWatchId = this.idleMonitor.add_user_active_watch(this._startArrowAnimation.bind(this)); this._arrowActiveWatchId = this.idleMonitor.add_user_active_watch(this._startArrowAnimation.bind(this));
}, }
_stopArrowAnimation() { _stopArrowAnimation() {
if (this._arrowAnimationId) { if (this._arrowAnimationId) {
@ -1075,7 +1069,7 @@ var ScreenShield = new Lang.Class({
this.idleMonitor.remove_watch(this._arrowWatchId); this.idleMonitor.remove_watch(this._arrowWatchId);
this._arrowWatchId = 0; this._arrowWatchId = 0;
} }
}, }
_checkArrowAnimation() { _checkArrowAnimation() {
let idleTime = this.idleMonitor.get_idletime(); let idleTime = this.idleMonitor.get_idletime();
@ -1084,7 +1078,7 @@ var ScreenShield = new Lang.Class({
this._startArrowAnimation(); this._startArrowAnimation();
else else
this._pauseArrowAnimation(); this._pauseArrowAnimation();
}, }
_lockScreenShown(params) { _lockScreenShown(params) {
if (this._dialog && !this._isGreeter) { if (this._dialog && !this._isGreeter) {
@ -1122,12 +1116,12 @@ var ScreenShield = new Lang.Class({
this._completeLockScreenShown(); this._completeLockScreenShown();
} }
}, }
_completeLockScreenShown() { _completeLockScreenShown() {
this._setActive(true); this._setActive(true);
this.emit('lock-screen-shown'); this.emit('lock-screen-shown');
}, }
// Some of the actors in the lock screen are heavy in // Some of the actors in the lock screen are heavy in
// resources, so we only create them when needed // resources, so we only create them when needed
@ -1154,12 +1148,12 @@ var ScreenShield = new Lang.Class({
expand: true }); expand: true });
this._hasLockScreen = true; this._hasLockScreen = true;
}, }
_wakeUpScreen() { _wakeUpScreen() {
this._onUserBecameActive(); this._onUserBecameActive();
this.emit('wake-up-screen'); this.emit('wake-up-screen');
}, }
_clearLockScreen() { _clearLockScreen() {
this._clock.destroy(); this._clock.destroy();
@ -1176,26 +1170,26 @@ var ScreenShield = new Lang.Class({
this._lockScreenContentsBox.destroy(); this._lockScreenContentsBox.destroy();
this._hasLockScreen = false; this._hasLockScreen = false;
}, }
get locked() { get locked() {
return this._isLocked; return this._isLocked;
}, }
get active() { get active() {
return this._isActive; return this._isActive;
}, }
get activationTime() { get activationTime() {
return this._activationTime; return this._activationTime;
}, }
deactivate(animate) { deactivate(animate) {
if (this._dialog) if (this._dialog)
this._dialog.finish(() => { this._continueDeactivate(animate); }); this._dialog.finish(() => { this._continueDeactivate(animate); });
else else
this._continueDeactivate(animate); this._continueDeactivate(animate);
}, }
_continueDeactivate(animate) { _continueDeactivate(animate) {
this._hideLockScreen(animate, 0); this._hideLockScreen(animate, 0);
@ -1237,7 +1231,7 @@ var ScreenShield = new Lang.Class({
onComplete: this._completeDeactivate.bind(this), onComplete: this._completeDeactivate.bind(this),
onCompleteScope: this onCompleteScope: this
}); });
}, }
_completeDeactivate() { _completeDeactivate() {
if (this._dialog) { if (this._dialog) {
@ -1264,7 +1258,7 @@ var ScreenShield = new Lang.Class({
this._isLocked = false; this._isLocked = false;
this.emit('locked-changed'); this.emit('locked-changed');
global.set_runtime_state(LOCKED_STATE_STR, null); global.set_runtime_state(LOCKED_STATE_STR, null);
}, }
activate(animate) { activate(animate) {
if (this._activationTime == 0) if (this._activationTime == 0)
@ -1296,7 +1290,7 @@ var ScreenShield = new Lang.Class({
// blank during the animation. // blank during the animation.
// This is not a problem for the idle fade case, because we // This is not a problem for the idle fade case, because we
// activate without animation in that case. // activate without animation in that case.
}, }
lock(animate) { lock(animate) {
if (this._lockSettings.get_boolean(DISABLE_LOCK_KEY)) { if (this._lockSettings.get_boolean(DISABLE_LOCK_KEY)) {
@ -1328,7 +1322,7 @@ var ScreenShield = new Lang.Class({
this.activate(animate); this.activate(animate);
this.emit('locked-changed'); this.emit('locked-changed');
}, }
// If the previous shell crashed, and gnome-session restarted us, then re-lock // If the previous shell crashed, and gnome-session restarted us, then re-lock
lockIfWasLocked() { lockIfWasLocked() {
@ -1341,5 +1335,5 @@ var ScreenShield = new Lang.Class({
this.lock(false); this.lock(false);
}); });
} }
}); };
Signals.addSignalMethods(ScreenShield.prototype); Signals.addSignalMethods(ScreenShield.prototype);

View File

@ -2,7 +2,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -12,10 +11,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
const ScreencastIface = loadInterfaceXML('org.gnome.Shell.Screencast'); const ScreencastIface = loadInterfaceXML('org.gnome.Shell.Screencast');
var ScreencastService = new Lang.Class({ var ScreencastService = class {
Name: 'ScreencastService', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreencastIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreencastIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screencast'); 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' }); this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' });
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
}, }
get isRecording() { get isRecording() {
return this._recorders.size > 0; return this._recorders.size > 0;
}, }
_ensureRecorderForSender(sender) { _ensureRecorderForSender(sender) {
let recorder = this._recorders.get(sender); let recorder = this._recorders.get(sender);
@ -44,7 +41,7 @@ var ScreencastService = new Lang.Class({
this.emit('updated'); this.emit('updated');
} }
return recorder; return recorder;
}, }
_sessionUpdated() { _sessionUpdated() {
if (Main.sessionMode.allowScreencast) if (Main.sessionMode.allowScreencast)
@ -52,11 +49,11 @@ var ScreencastService = new Lang.Class({
for (let sender of this._recorders.keys()) for (let sender of this._recorders.keys())
this._stopRecordingForSender(sender); this._stopRecordingForSender(sender);
}, }
_onNameVanished(connection, name) { _onNameVanished(connection, name) {
this._stopRecordingForSender(name); this._stopRecordingForSender(name);
}, }
_stopRecordingForSender(sender) { _stopRecordingForSender(sender) {
let recorder = this._recorders.get(sender); let recorder = this._recorders.get(sender);
@ -69,7 +66,7 @@ var ScreencastService = new Lang.Class({
this.emit('updated'); this.emit('updated');
return true; return true;
}, }
_applyOptionalParameters(recorder, options) { _applyOptionalParameters(recorder, options) {
for (let option in options) for (let option in options)
@ -81,7 +78,7 @@ var ScreencastService = new Lang.Class({
recorder.set_framerate(options['framerate']); recorder.set_framerate(options['framerate']);
if ('draw-cursor' in options) if ('draw-cursor' in options)
recorder.set_draw_cursor(options['draw-cursor']); recorder.set_draw_cursor(options['draw-cursor']);
}, }
ScreencastAsync(params, invocation) { ScreencastAsync(params, invocation) {
let returnValue = [false, '']; let returnValue = [false, ''];
@ -105,7 +102,7 @@ var ScreencastService = new Lang.Class({
} }
invocation.return_value(GLib.Variant.new('(bs)', returnValue)); invocation.return_value(GLib.Variant.new('(bs)', returnValue));
}, }
ScreencastAreaAsync(params, invocation) { ScreencastAreaAsync(params, invocation) {
let returnValue = [false, '']; let returnValue = [false, ''];
@ -141,11 +138,11 @@ var ScreencastService = new Lang.Class({
} }
invocation.return_value(GLib.Variant.new('(bs)', returnValue)); invocation.return_value(GLib.Variant.new('(bs)', returnValue));
}, }
StopScreencastAsync(params, invocation) { StopScreencastAsync(params, invocation) {
let success = this._stopRecordingForSender(invocation.get_sender()); let success = this._stopRecordingForSender(invocation.get_sender());
invocation.return_value(GLib.Variant.new('(b)', [success])); invocation.return_value(GLib.Variant.new('(b)', [success]));
} }
}); };
Signals.addSignalMethods(ScreencastService.prototype); Signals.addSignalMethods(ScreencastService.prototype);

View File

@ -5,7 +5,6 @@ const Gdk = imports.gi.Gdk;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; const Signals = imports.signals;
@ -20,10 +19,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
const ScreenshotIface = loadInterfaceXML('org.gnome.Shell.Screenshot'); const ScreenshotIface = loadInterfaceXML('org.gnome.Shell.Screenshot');
var ScreenshotService = new Lang.Class({ var ScreenshotService = class {
Name: 'ScreenshotService', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenshotIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(ScreenshotIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell/Screenshot'); 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' }); 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); Gio.DBus.session.own_name('org.gnome.Shell.Screenshot', Gio.BusNameOwnerFlags.REPLACE, null, null);
}, }
_createScreenshot(invocation, needsDisk=true) { _createScreenshot(invocation, needsDisk=true) {
let lockedDown = false; let lockedDown = false;
@ -53,11 +50,11 @@ var ScreenshotService = new Lang.Class({
this._screenShooter.set(sender, shooter); this._screenShooter.set(sender, shooter);
return shooter; return shooter;
}, }
_onNameVanished(connection, name) { _onNameVanished(connection, name) {
this._removeShooterForSender(name); this._removeShooterForSender(name);
}, }
_removeShooterForSender(sender) { _removeShooterForSender(sender) {
let shooter = this._screenShooter.get(sender); let shooter = this._screenShooter.get(sender);
@ -66,14 +63,14 @@ var ScreenshotService = new Lang.Class({
Gio.bus_unwatch_name(shooter._watchNameId); Gio.bus_unwatch_name(shooter._watchNameId);
this._screenShooter.delete(sender); this._screenShooter.delete(sender);
}, }
_checkArea(x, y, width, height) { _checkArea(x, y, width, height) {
return x >= 0 && y >= 0 && return x >= 0 && y >= 0 &&
width > 0 && height > 0 && width > 0 && height > 0 &&
x + width <= global.screen_width && x + width <= global.screen_width &&
y + height <= global.screen_height; y + height <= global.screen_height;
}, }
_onScreenshotComplete(result, area, filenameUsed, flash, invocation) { _onScreenshotComplete(result, area, filenameUsed, flash, invocation) {
if (result) { if (result) {
@ -89,7 +86,7 @@ var ScreenshotService = new Lang.Class({
let retval = GLib.Variant.new('(bs)', [result, filenameUsed]); let retval = GLib.Variant.new('(bs)', [result, filenameUsed]);
invocation.return_value(retval); invocation.return_value(retval);
}, }
_scaleArea(x, y, width, height) { _scaleArea(x, y, width, height) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
@ -98,7 +95,7 @@ var ScreenshotService = new Lang.Class({
width *= scaleFactor; width *= scaleFactor;
height *= scaleFactor; height *= scaleFactor;
return [x, y, width, height]; return [x, y, width, height];
}, }
_unscaleArea(x, y, width, height) { _unscaleArea(x, y, width, height) {
let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
@ -107,7 +104,7 @@ var ScreenshotService = new Lang.Class({
width /= scaleFactor; width /= scaleFactor;
height /= scaleFactor; height /= scaleFactor;
return [x, y, width, height]; return [x, y, width, height];
}, }
ScreenshotAreaAsync(params, invocation) { ScreenshotAreaAsync(params, invocation) {
let [x, y, width, height, flash, filename, callback] = params; let [x, y, width, height, flash, filename, callback] = params;
@ -132,7 +129,7 @@ var ScreenshotService = new Lang.Class({
invocation.return_gerror (e); invocation.return_gerror (e);
} }
}); });
}, }
ScreenshotWindowAsync(params, invocation) { ScreenshotWindowAsync(params, invocation) {
let [include_frame, include_cursor, flash, filename] = params; let [include_frame, include_cursor, flash, filename] = params;
@ -150,7 +147,7 @@ var ScreenshotService = new Lang.Class({
invocation.return_gerror (e); invocation.return_gerror (e);
} }
}); });
}, }
ScreenshotAsync(params, invocation) { ScreenshotAsync(params, invocation) {
let [include_cursor, flash, filename] = params; let [include_cursor, flash, filename] = params;
@ -168,7 +165,7 @@ var ScreenshotService = new Lang.Class({
invocation.return_gerror (e); invocation.return_gerror (e);
} }
}); });
}, }
SelectAreaAsync(params, invocation) { SelectAreaAsync(params, invocation) {
let selectArea = new SelectArea(); let selectArea = new SelectArea();
@ -184,7 +181,7 @@ var ScreenshotService = new Lang.Class({
"Operation was cancelled"); "Operation was cancelled");
} }
}); });
}, }
FlashAreaAsync(params, invocation) { FlashAreaAsync(params, invocation) {
let [x, y, width, height] = params; 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}); let flashspot = new Flashspot({ x : x, y : y, width: width, height: height});
flashspot.fire(); flashspot.fire();
invocation.return_value(null); invocation.return_value(null);
}, }
PickColorAsync(params, invocation) { PickColorAsync(params, invocation) {
let pickPixel = new PickPixel(); let pickPixel = new PickPixel();
@ -227,12 +224,10 @@ var ScreenshotService = new Lang.Class({
} }
}); });
} }
}); };
var SelectArea = new Lang.Class({ var SelectArea = class {
Name: 'SelectArea', constructor() {
_init() {
this._startX = -1; this._startX = -1;
this._startY = -1; this._startY = -1;
this._lastX = 0; this._lastX = 0;
@ -265,7 +260,7 @@ var SelectArea = new Lang.Class({
border_width: 1, border_width: 1,
border_color: this._border }); border_color: this._border });
this._group.add_actor(this._rubberband); this._group.add_actor(this._rubberband);
}, }
show() { show() {
if (!this._grabHelper.grab({ actor: this._group, if (!this._grabHelper.grab({ actor: this._group,
@ -275,7 +270,7 @@ var SelectArea = new Lang.Class({
global.display.set_cursor(Meta.Cursor.CROSSHAIR); global.display.set_cursor(Meta.Cursor.CROSSHAIR);
Main.uiGroup.set_child_above_sibling(this._group, null); Main.uiGroup.set_child_above_sibling(this._group, null);
this._group.visible = true; this._group.visible = true;
}, }
_initRubberbandColors() { _initRubberbandColors() {
function colorFromRGBA(rgba) { function colorFromRGBA(rgba) {
@ -294,14 +289,14 @@ var SelectArea = new Lang.Class({
this._background = colorFromRGBA(context.get_background_color(Gtk.StateFlags.NORMAL)); this._background = colorFromRGBA(context.get_background_color(Gtk.StateFlags.NORMAL));
this._border = colorFromRGBA(context.get_border_color(Gtk.StateFlags.NORMAL)); this._border = colorFromRGBA(context.get_border_color(Gtk.StateFlags.NORMAL));
}, }
_getGeometry() { _getGeometry() {
return { x: Math.min(this._startX, this._lastX), return { x: Math.min(this._startX, this._lastX),
y: Math.min(this._startY, this._lastY), y: Math.min(this._startY, this._lastY),
width: Math.abs(this._startX - this._lastX) + 1, width: Math.abs(this._startX - this._lastX) + 1,
height: Math.abs(this._startY - this._lastY) + 1 }; height: Math.abs(this._startY - this._lastY) + 1 };
}, }
_onMotionEvent(actor, event) { _onMotionEvent(actor, event) {
if (this._startX == -1 || this._startY == -1) if (this._startX == -1 || this._startY == -1)
@ -316,7 +311,7 @@ var SelectArea = new Lang.Class({
this._rubberband.set_size(geometry.width, geometry.height); this._rubberband.set_size(geometry.width, geometry.height);
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onButtonPress(actor, event) { _onButtonPress(actor, event) {
[this._startX, this._startY] = event.get_coords(); [this._startX, this._startY] = event.get_coords();
@ -325,7 +320,7 @@ var SelectArea = new Lang.Class({
this._rubberband.set_position(this._startX, this._startY); this._rubberband.set_position(this._startX, this._startY);
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onButtonRelease(actor, event) { _onButtonRelease(actor, event) {
this._result = this._getGeometry(); this._result = this._getGeometry();
@ -338,7 +333,7 @@ var SelectArea = new Lang.Class({
} }
}); });
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onUngrab() { _onUngrab() {
global.display.set_cursor(Meta.Cursor.DEFAULT); global.display.set_cursor(Meta.Cursor.DEFAULT);
@ -349,13 +344,11 @@ var SelectArea = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
} }
}); };
Signals.addSignalMethods(SelectArea.prototype); Signals.addSignalMethods(SelectArea.prototype);
var PickPixel = new Lang.Class({ var PickPixel = class {
Name: 'PickPixel', constructor() {
_init() {
this._result = null; this._result = null;
this._group = new St.Widget({ visible: false, this._group = new St.Widget({ visible: false,
@ -370,7 +363,7 @@ var PickPixel = new Lang.Class({
let constraint = new Clutter.BindConstraint({ source: global.stage, let constraint = new Clutter.BindConstraint({ source: global.stage,
coordinate: Clutter.BindCoordinate.ALL }); coordinate: Clutter.BindCoordinate.ALL });
this._group.add_constraint(constraint); this._group.add_constraint(constraint);
}, }
show() { show() {
if (!this._grabHelper.grab({ actor: this._group, if (!this._grabHelper.grab({ actor: this._group,
@ -380,13 +373,13 @@ var PickPixel = new Lang.Class({
global.display.set_cursor(Meta.Cursor.CROSSHAIR); global.display.set_cursor(Meta.Cursor.CROSSHAIR);
Main.uiGroup.set_child_above_sibling(this._group, null); Main.uiGroup.set_child_above_sibling(this._group, null);
this._group.visible = true; this._group.visible = true;
}, }
_onButtonRelease(actor, event) { _onButtonRelease(actor, event) {
this._result = event.get_coords(); this._result = event.get_coords();
this._grabHelper.ungrab(); this._grabHelper.ungrab();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onUngrab() { _onUngrab() {
global.display.set_cursor(Meta.Cursor.DEFAULT); global.display.set_cursor(Meta.Cursor.DEFAULT);
@ -397,23 +390,20 @@ var PickPixel = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
} }
}); };
Signals.addSignalMethods(PickPixel.prototype); Signals.addSignalMethods(PickPixel.prototype);
var FLASHSPOT_ANIMATION_OUT_TIME = 0.5; // seconds var FLASHSPOT_ANIMATION_OUT_TIME = 0.5; // seconds
var Flashspot = new Lang.Class({ var Flashspot = class extends Lightbox.Lightbox {
Name: 'Flashspot', constructor(area) {
Extends: Lightbox.Lightbox, super(Main.uiGroup, { inhibitEvents: true,
width: area.width,
_init(area) { height: area.height });
this.parent(Main.uiGroup, { inhibitEvents: true,
width: area.width,
height: area.height });
this.actor.style_class = 'flashspot'; this.actor.style_class = 'flashspot';
this.actor.set_position(area.x, area.y); this.actor.set_position(area.x, area.y);
}, }
fire(doneCallback) { fire(doneCallback) {
this.actor.show(); this.actor.show();
@ -429,4 +419,4 @@ var Flashspot = new Lang.Class({
} }
}); });
} }
}); };

View File

@ -44,10 +44,8 @@ var MaxWidthBin = new Lang.Class({
} }
}); });
var SearchResult = new Lang.Class({ var SearchResult = class {
Name: 'SearchResult', constructor(provider, metaInfo, resultsView) {
_init(provider, metaInfo, resultsView) {
this.provider = provider; this.provider = provider;
this.metaInfo = metaInfo; this.metaInfo = metaInfo;
this._resultsView = resultsView; this._resultsView = resultsView;
@ -60,22 +58,18 @@ var SearchResult = new Lang.Class({
this.actor._delegate = this; this.actor._delegate = this;
this.actor.connect('clicked', this.activate.bind(this)); this.actor.connect('clicked', this.activate.bind(this));
}, }
activate() { activate() {
this.emit('activate', this.metaInfo.id); this.emit('activate', this.metaInfo.id);
} }
}); };
Signals.addSignalMethods(SearchResult.prototype); Signals.addSignalMethods(SearchResult.prototype);
var ListSearchResult = new Lang.Class({ var ListSearchResult = class extends SearchResult {
Name: 'ListSearchResult',
Extends: SearchResult,
ICON_SIZE: 24, constructor(provider, metaInfo, resultsView) {
super(provider, metaInfo, resultsView);
_init(provider, metaInfo, resultsView) {
this.parent(provider, metaInfo, resultsView);
this.actor.style_class = 'list-search-result'; this.actor.style_class = 'list-search-result';
this.actor.x_fill = true; this.actor.x_fill = true;
@ -122,26 +116,27 @@ var ListSearchResult = new Lang.Class({
} }
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
}, }
get ICON_SIZE() {
return 24;
}
_highlightTerms() { _highlightTerms() {
let markup = this._resultsView.highlightTerms(this.metaInfo['description'].split('\n')[0]); let markup = this._resultsView.highlightTerms(this.metaInfo['description'].split('\n')[0]);
this._descriptionLabel.clutter_text.set_markup(markup); this._descriptionLabel.clutter_text.set_markup(markup);
}, }
_onDestroy() { _onDestroy() {
if (this._termsChangedId) if (this._termsChangedId)
this._resultsView.disconnect(this._termsChangedId); this._resultsView.disconnect(this._termsChangedId);
this._termsChangedId = 0; this._termsChangedId = 0;
} }
}); };
var GridSearchResult = new Lang.Class({ var GridSearchResult = class extends SearchResult {
Name: 'GridSearchResult', constructor(provider, metaInfo, resultsView) {
Extends: SearchResult, super(provider, metaInfo, resultsView);
_init(provider, metaInfo, resultsView) {
this.parent(provider, metaInfo, resultsView);
this.actor.style_class = 'grid-search-result'; this.actor.style_class = 'grid-search-result';
@ -151,12 +146,10 @@ var GridSearchResult = new Lang.Class({
this.actor.set_child(content); this.actor.set_child(content);
this.actor.label_actor = this.icon.label; this.actor.label_actor = this.icon.label;
} }
}); };
var SearchResultsBase = new Lang.Class({ var SearchResultsBase = class {
Name: 'SearchResultsBase', constructor(provider, resultsView) {
_init(provider, resultsView) {
this.provider = provider; this.provider = provider;
this._resultsView = resultsView; this._resultsView = resultsView;
@ -177,19 +170,19 @@ var SearchResultsBase = new Lang.Class({
this._clipboard = St.Clipboard.get_default(); this._clipboard = St.Clipboard.get_default();
this._cancellable = new Gio.Cancellable(); this._cancellable = new Gio.Cancellable();
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
this._terms = []; this._terms = [];
}, }
_createResultDisplay(meta) { _createResultDisplay(meta) {
if (this.provider.createResultObject) if (this.provider.createResultObject)
return this.provider.createResultObject(meta, this._resultsView); return this.provider.createResultObject(meta, this._resultsView);
return null; return null;
}, }
clear() { clear() {
this._cancellable.cancel(); this._cancellable.cancel();
@ -198,21 +191,21 @@ var SearchResultsBase = new Lang.Class({
this._resultDisplays = {}; this._resultDisplays = {};
this._clearResultDisplay(); this._clearResultDisplay();
this.actor.hide(); this.actor.hide();
}, }
_keyFocusIn(actor) { _keyFocusIn(actor) {
this.emit('key-focus-in', actor); this.emit('key-focus-in', actor);
}, }
_activateResult(result, id) { _activateResult(result, id) {
this.provider.activateResult(id, this._terms); this.provider.activateResult(id, this._terms);
if (result.metaInfo.clipboardText) if (result.metaInfo.clipboardText)
this._clipboard.set_text(St.ClipboardType.CLIPBOARD, result.metaInfo.clipboardText); this._clipboard.set_text(St.ClipboardType.CLIPBOARD, result.metaInfo.clipboardText);
Main.overview.toggle(); Main.overview.toggle();
}, }
_setMoreCount(count) { _setMoreCount(count) {
}, }
_ensureResultActors(results, callback) { _ensureResultActors(results, callback) {
let metasNeeded = results.filter( let metasNeeded = results.filter(
@ -254,7 +247,7 @@ var SearchResultsBase = new Lang.Class({
callback(true); callback(true);
}, this._cancellable); }, this._cancellable);
} }
}, }
updateSearch(providerResults, terms, callback) { updateSearch(providerResults, terms, callback) {
this._terms = terms; this._terms = terms;
@ -288,14 +281,11 @@ var SearchResultsBase = new Lang.Class({
}); });
} }
} }
}); };
var ListSearchResults = new Lang.Class({ var ListSearchResults = class extends SearchResultsBase {
Name: 'ListSearchResults', constructor(provider, resultsView) {
Extends: SearchResultsBase, super(provider, resultsView);
_init(provider, resultsView) {
this.parent(provider, resultsView);
this._container = new St.BoxLayout({ style_class: 'search-section-content' }); this._container = new St.BoxLayout({ style_class: 'search-section-content' });
this.providerInfo = new ProviderInfo(provider); this.providerInfo = new ProviderInfo(provider);
@ -316,28 +306,28 @@ var ListSearchResults = new Lang.Class({
this._container.add(this._content, { expand: true }); this._container.add(this._content, { expand: true });
this._resultDisplayBin.set_child(this._container); this._resultDisplayBin.set_child(this._container);
}, }
_setMoreCount(count) { _setMoreCount(count) {
this.providerInfo.setMoreCount(count); this.providerInfo.setMoreCount(count);
}, }
_getMaxDisplayedResults() { _getMaxDisplayedResults() {
return MAX_LIST_SEARCH_RESULTS_ROWS; return MAX_LIST_SEARCH_RESULTS_ROWS;
}, }
_clearResultDisplay() { _clearResultDisplay() {
this._content.remove_all_children(); this._content.remove_all_children();
}, }
_createResultDisplay(meta) { _createResultDisplay(meta) {
return this.parent(meta, this._resultsView) || return super._createResultDisplay(meta, this._resultsView) ||
new ListSearchResult(this.provider, meta, this._resultsView); new ListSearchResult(this.provider, meta, this._resultsView);
}, }
_addItem(display) { _addItem(display) {
this._content.add_actor(display.actor); this._content.add_actor(display.actor);
}, }
getFirstResult() { getFirstResult() {
if (this._content.get_n_children() > 0) if (this._content.get_n_children() > 0)
@ -345,15 +335,12 @@ var ListSearchResults = new Lang.Class({
else else
return null; return null;
} }
}); };
Signals.addSignalMethods(ListSearchResults.prototype); Signals.addSignalMethods(ListSearchResults.prototype);
var GridSearchResults = new Lang.Class({ var GridSearchResults = class extends SearchResultsBase {
Name: 'GridSearchResults', constructor(provider, resultsView) {
Extends: SearchResultsBase, super(provider, resultsView);
_init(provider, resultsView) {
this.parent(provider, resultsView);
// We need to use the parent container to know how much results we can show. // 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 // 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. // 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._bin.set_child(this._grid);
this._resultDisplayBin.set_child(this._bin); this._resultDisplayBin.set_child(this._bin);
}, }
_getMaxDisplayedResults() { _getMaxDisplayedResults() {
let parentThemeNode = this._parentContainer.get_theme_node(); let parentThemeNode = this._parentContainer.get_theme_node();
let availableWidth = parentThemeNode.adjust_for_width(this._parentContainer.width); let availableWidth = parentThemeNode.adjust_for_width(this._parentContainer.width);
return this._grid.columnsForWidth(availableWidth) * this._grid.getRowLimit(); return this._grid.columnsForWidth(availableWidth) * this._grid.getRowLimit();
}, }
_clearResultDisplay() { _clearResultDisplay() {
this._grid.removeAll(); this._grid.removeAll();
}, }
_createResultDisplay(meta) { _createResultDisplay(meta) {
return this.parent(meta, this._resultsView) || return super._createResultDisplay(meta, this._resultsView) ||
new GridSearchResult(this.provider, meta, this._resultsView); new GridSearchResult(this.provider, meta, this._resultsView);
}, }
_addItem(display) { _addItem(display) {
this._grid.addItem(display); this._grid.addItem(display);
}, }
getFirstResult() { getFirstResult() {
if (this._grid.visibleItemsCount() > 0) if (this._grid.visibleItemsCount() > 0)
@ -395,13 +382,11 @@ var GridSearchResults = new Lang.Class({
else else
return null; return null;
} }
}); };
Signals.addSignalMethods(GridSearchResults.prototype); Signals.addSignalMethods(GridSearchResults.prototype);
var SearchResults = new Lang.Class({ var SearchResults = class {
Name: 'SearchResults', constructor() {
_init() {
this.actor = new St.BoxLayout({ name: 'searchResults', this.actor = new St.BoxLayout({ name: 'searchResults',
vertical: true }); vertical: true });
@ -459,7 +444,7 @@ var SearchResults = new Lang.Class({
this._registerProvider(new AppDisplay.AppSearchProvider()); this._registerProvider(new AppDisplay.AppSearchProvider());
this._reloadRemoteProviders(); this._reloadRemoteProviders();
}, }
_reloadRemoteProviders() { _reloadRemoteProviders() {
let remoteProviders = this._providers.filter(p => p.isRemoteProvider); let remoteProviders = this._providers.filter(p => p.isRemoteProvider);
@ -470,13 +455,13 @@ var SearchResults = new Lang.Class({
RemoteSearch.loadRemoteSearchProviders(this._searchSettings, providers => { RemoteSearch.loadRemoteSearchProviders(this._searchSettings, providers => {
providers.forEach(this._registerProvider.bind(this)); providers.forEach(this._registerProvider.bind(this));
}); });
}, }
_registerProvider(provider) { _registerProvider(provider) {
provider.searchInProgress = false; provider.searchInProgress = false;
this._providers.push(provider); this._providers.push(provider);
this._ensureProviderDisplay(provider); this._ensureProviderDisplay(provider);
}, }
_unregisterProvider(provider) { _unregisterProvider(provider) {
let index = this._providers.indexOf(provider); let index = this._providers.indexOf(provider);
@ -484,19 +469,19 @@ var SearchResults = new Lang.Class({
if (provider.display) if (provider.display)
provider.display.destroy(); provider.display.destroy();
}, }
_gotResults(results, provider) { _gotResults(results, provider) {
this._results[provider.id] = results; this._results[provider.id] = results;
this._updateResults(provider, results); this._updateResults(provider, results);
}, }
_clearSearchTimeout() { _clearSearchTimeout() {
if (this._searchTimeoutId > 0) { if (this._searchTimeoutId > 0) {
GLib.source_remove(this._searchTimeoutId); GLib.source_remove(this._searchTimeoutId);
this._searchTimeoutId = 0; this._searchTimeoutId = 0;
} }
}, }
_reset() { _reset() {
this._terms = []; this._terms = [];
@ -507,7 +492,7 @@ var SearchResults = new Lang.Class({
this._startingSearch = false; this._startingSearch = false;
this._updateSearchProgress(); this._updateSearchProgress();
}, }
_doSearch() { _doSearch() {
this._startingSearch = false; this._startingSearch = false;
@ -537,13 +522,13 @@ var SearchResults = new Lang.Class({
this._updateSearchProgress(); this._updateSearchProgress();
this._clearSearchTimeout(); this._clearSearchTimeout();
}, }
_onSearchTimeout() { _onSearchTimeout() {
this._searchTimeoutId = 0; this._searchTimeoutId = 0;
this._doSearch(); this._doSearch();
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
setTerms(terms) { setTerms(terms) {
// Check for the case of making a duplicate previous search before // 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._highlightRegex = new RegExp(`(${escapedTerms.join('|')})`, 'gi');
this.emit('terms-changed'); this.emit('terms-changed');
}, }
_onPan(action) { _onPan(action) {
let [dist, dx, dy] = action.get_motion_delta(0); let [dist, dx, dy] = action.get_motion_delta(0);
let adjustment = this._scrollView.vscroll.adjustment; let adjustment = this._scrollView.vscroll.adjustment;
adjustment.value -= (dy / this.actor.height) * adjustment.page_size; adjustment.value -= (dy / this.actor.height) * adjustment.page_size;
return false; return false;
}, }
_keyFocusIn(provider, actor) { _keyFocusIn(provider, actor) {
Util.ensureActorVisibleInScrollView(this._scrollView, actor); Util.ensureActorVisibleInScrollView(this._scrollView, actor);
}, }
_ensureProviderDisplay(provider) { _ensureProviderDisplay(provider) {
if (provider.display) if (provider.display)
@ -607,13 +592,13 @@ var SearchResults = new Lang.Class({
providerDisplay.actor.hide(); providerDisplay.actor.hide();
this._content.add(providerDisplay.actor); this._content.add(providerDisplay.actor);
provider.display = providerDisplay; provider.display = providerDisplay;
}, }
_clearDisplay() { _clearDisplay() {
this._providers.forEach(provider => { this._providers.forEach(provider => {
provider.display.clear(); provider.display.clear();
}); });
}, }
_maybeSetInitialSelection() { _maybeSetInitialSelection() {
let newDefaultResult = null; let newDefaultResult = null;
@ -639,14 +624,14 @@ var SearchResults = new Lang.Class({
this._defaultResult = newDefaultResult; this._defaultResult = newDefaultResult;
} }
}, }
get searchInProgress() { get searchInProgress() {
if (this._startingSearch) if (this._startingSearch)
return true; return true;
return this._providers.some(p => p.searchInProgress); return this._providers.some(p => p.searchInProgress);
}, }
_updateSearchProgress() { _updateSearchProgress() {
let haveResults = this._providers.some(provider => { let haveResults = this._providers.some(provider => {
@ -664,7 +649,7 @@ var SearchResults = new Lang.Class({
this._statusText.set_text(_("No results.")); this._statusText.set_text(_("No results."));
} }
} }
}, }
_updateResults(provider, results) { _updateResults(provider, results) {
let terms = this._terms; let terms = this._terms;
@ -676,7 +661,7 @@ var SearchResults = new Lang.Class({
this._maybeSetInitialSelection(); this._maybeSetInitialSelection();
this._updateSearchProgress(); this._updateSearchProgress();
}); });
}, }
activateDefault() { activateDefault() {
// If we have a search queued up, force the search now. // If we have a search queued up, force the search now.
@ -685,12 +670,12 @@ var SearchResults = new Lang.Class({
if (this._defaultResult) if (this._defaultResult)
this._defaultResult.activate(); this._defaultResult.activate();
}, }
highlightDefault(highlight) { highlightDefault(highlight) {
this._highlightDefault = highlight; this._highlightDefault = highlight;
this._setSelected(this._defaultResult, highlight); this._setSelected(this._defaultResult, highlight);
}, }
popupMenuDefault() { popupMenuDefault() {
// If we have a search queued up, force the search now. // If we have a search queued up, force the search now.
@ -699,7 +684,7 @@ var SearchResults = new Lang.Class({
if (this._defaultResult) if (this._defaultResult)
this._defaultResult.actor.popup_menu(); this._defaultResult.actor.popup_menu();
}, }
navigateFocus(direction) { navigateFocus(direction) {
let rtl = this.actor.get_text_direction() == Clutter.TextDirection.RTL; 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; let from = this._defaultResult ? this._defaultResult.actor : null;
this.actor.navigate_focus(from, direction, false); this.actor.navigate_focus(from, direction, false);
}, }
_setSelected(result, selected) { _setSelected(result, selected) {
if (!result) if (!result)
@ -725,7 +710,7 @@ var SearchResults = new Lang.Class({
} else { } else {
result.actor.remove_style_pseudo_class('selected'); result.actor.remove_style_pseudo_class('selected');
} }
}, }
highlightTerms(description) { highlightTerms(description) {
if (!description) if (!description)
@ -736,7 +721,7 @@ var SearchResults = new Lang.Class({
return description.replace(this._highlightRegex, '<b>$1</b>'); return description.replace(this._highlightRegex, '<b>$1</b>');
} }
}); };
Signals.addSignalMethods(SearchResults.prototype); Signals.addSignalMethods(SearchResults.prototype);
var ProviderInfo = new Lang.Class({ var ProviderInfo = new Lang.Class({

View File

@ -2,7 +2,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Signals = imports.signals; const Signals = imports.signals;
@ -151,40 +150,38 @@ function listModes() {
Mainloop.run('listModes'); Mainloop.run('listModes');
} }
var SessionMode = new Lang.Class({ var SessionMode = class {
Name: 'SessionMode', constructor() {
_init() {
_loadModes(); _loadModes();
let isPrimary = (_modes[global.session_mode] && let isPrimary = (_modes[global.session_mode] &&
_modes[global.session_mode].isPrimary); _modes[global.session_mode].isPrimary);
let mode = isPrimary ? global.session_mode : 'user'; let mode = isPrimary ? global.session_mode : 'user';
this._modeStack = [mode]; this._modeStack = [mode];
this._sync(); this._sync();
}, }
pushMode(mode) { pushMode(mode) {
this._modeStack.push(mode); this._modeStack.push(mode);
this._sync(); this._sync();
}, }
popMode(mode) { popMode(mode) {
if (this.currentMode != mode || this._modeStack.length === 1) if (this.currentMode != mode || this._modeStack.length === 1)
throw new Error("Invalid SessionMode.popMode"); throw new Error("Invalid SessionMode.popMode");
this._modeStack.pop(); this._modeStack.pop();
this._sync(); this._sync();
}, }
switchMode(to) { switchMode(to) {
if (this.currentMode == to) if (this.currentMode == to)
return; return;
this._modeStack[this._modeStack.length - 1] = to; this._modeStack[this._modeStack.length - 1] = to;
this._sync(); this._sync();
}, }
get currentMode() { get currentMode() {
return this._modeStack[this._modeStack.length - 1]; return this._modeStack[this._modeStack.length - 1];
}, }
_sync() { _sync() {
let params = _modes[this.currentMode]; let params = _modes[this.currentMode];
@ -205,5 +202,5 @@ var SessionMode = new Lang.Class({
this.emit('updated'); this.emit('updated');
} }
}); };
Signals.addSignalMethods(SessionMode.prototype); Signals.addSignalMethods(SessionMode.prototype);

View File

@ -19,10 +19,8 @@ const { loadInterfaceXML } = imports.misc.fileUtils;
const GnomeShellIface = loadInterfaceXML('org.gnome.Shell'); const GnomeShellIface = loadInterfaceXML('org.gnome.Shell');
const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver'); const ScreenSaverIface = loadInterfaceXML('org.gnome.ScreenSaver');
var GnomeShell = new Lang.Class({ var GnomeShell = class {
Name: 'GnomeShellDBus', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell');
@ -42,7 +40,7 @@ var GnomeShell = new Lang.Class({
this._checkOverviewVisibleChanged.bind(this)); this._checkOverviewVisibleChanged.bind(this));
Main.overview.connect('hidden', Main.overview.connect('hidden',
this._checkOverviewVisibleChanged.bind(this)); this._checkOverviewVisibleChanged.bind(this));
}, }
/** /**
* Eval: * Eval:
@ -75,11 +73,11 @@ var GnomeShell = new Lang.Class({
success = false; success = false;
} }
return [success, returnValue]; return [success, returnValue];
}, }
FocusSearch() { FocusSearch() {
Main.overview.focusSearch(); Main.overview.focusSearch();
}, }
ShowOSD(params) { ShowOSD(params) {
for (let param in params) for (let param in params)
@ -99,23 +97,23 @@ var GnomeShell = new Lang.Class({
icon = Gio.Icon.new_for_string(serializedIcon); icon = Gio.Icon.new_for_string(serializedIcon);
Main.osdWindowManager.show(monitorIndex, icon, label, level, maxLevel); Main.osdWindowManager.show(monitorIndex, icon, label, level, maxLevel);
}, }
FocusApp(id) { FocusApp(id) {
this.ShowApplications(); this.ShowApplications();
Main.overview.viewSelector.appDisplay.selectApp(id); Main.overview.viewSelector.appDisplay.selectApp(id);
}, }
ShowApplications() { ShowApplications() {
Main.overview.viewSelector.showApps(); Main.overview.viewSelector.showApps();
}, }
GrabAcceleratorAsync(params, invocation) { GrabAcceleratorAsync(params, invocation) {
let [accel, flags] = params; let [accel, flags] = params;
let sender = invocation.get_sender(); let sender = invocation.get_sender();
let bindingAction = this._grabAcceleratorForSender(accel, flags, sender); let bindingAction = this._grabAcceleratorForSender(accel, flags, sender);
return invocation.return_value(GLib.Variant.new('(u)', [bindingAction])); return invocation.return_value(GLib.Variant.new('(u)', [bindingAction]));
}, }
GrabAcceleratorsAsync(params, invocation) { GrabAcceleratorsAsync(params, invocation) {
let [accels] = params; let [accels] = params;
@ -126,7 +124,7 @@ var GnomeShell = new Lang.Class({
bindingActions.push(this._grabAcceleratorForSender(accel, flags, sender)); bindingActions.push(this._grabAcceleratorForSender(accel, flags, sender));
} }
return invocation.return_value(GLib.Variant.new('(au)', [bindingActions])); return invocation.return_value(GLib.Variant.new('(au)', [bindingActions]));
}, }
UngrabAcceleratorAsync(params, invocation) { UngrabAcceleratorAsync(params, invocation) {
let [action] = params; let [action] = params;
@ -138,7 +136,7 @@ var GnomeShell = new Lang.Class({
if (ungrabSucceeded) if (ungrabSucceeded)
this._grabbedAccelerators.delete(action); this._grabbedAccelerators.delete(action);
return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded])); return invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
}, }
_emitAcceleratorActivated(action, deviceid, timestamp) { _emitAcceleratorActivated(action, deviceid, timestamp) {
let destination = this._grabbedAccelerators.get(action); let destination = this._grabbedAccelerators.get(action);
@ -155,7 +153,7 @@ var GnomeShell = new Lang.Class({
info ? info.name : null, info ? info.name : null,
'AcceleratorActivated', 'AcceleratorActivated',
GLib.Variant.new('(ua{sv})', [action, params])); GLib.Variant.new('(ua{sv})', [action, params]));
}, }
_grabAcceleratorForSender(accelerator, flags, sender) { _grabAcceleratorForSender(accelerator, flags, sender) {
let bindingAction = global.display.grab_accelerator(accelerator); let bindingAction = global.display.grab_accelerator(accelerator);
@ -174,13 +172,13 @@ var GnomeShell = new Lang.Class({
} }
return bindingAction; return bindingAction;
}, }
_ungrabAccelerator(action) { _ungrabAccelerator(action) {
let ungrabSucceeded = global.display.ungrab_accelerator(action); let ungrabSucceeded = global.display.ungrab_accelerator(action);
if (ungrabSucceeded) if (ungrabSucceeded)
this._grabbedAccelerators.delete(action); this._grabbedAccelerators.delete(action);
}, }
_onGrabberBusNameVanished(connection, name) { _onGrabberBusNameVanished(connection, name) {
let grabs = this._grabbedAccelerators.entries(); let grabs = this._grabbedAccelerators.entries();
@ -190,61 +188,61 @@ var GnomeShell = new Lang.Class({
} }
Gio.bus_unwatch_name(this._grabbers.get(name)); Gio.bus_unwatch_name(this._grabbers.get(name));
this._grabbers.delete(name); this._grabbers.delete(name);
}, }
ShowMonitorLabelsAsync(params, invocation) { ShowMonitorLabelsAsync(params, invocation) {
let sender = invocation.get_sender(); let sender = invocation.get_sender();
let [dict] = params; let [dict] = params;
Main.osdMonitorLabeler.show(sender, dict); Main.osdMonitorLabeler.show(sender, dict);
}, }
ShowMonitorLabels2Async(params, invocation) { ShowMonitorLabels2Async(params, invocation) {
let sender = invocation.get_sender(); let sender = invocation.get_sender();
let [dict] = params; let [dict] = params;
Main.osdMonitorLabeler.show2(sender, dict); Main.osdMonitorLabeler.show2(sender, dict);
}, }
HideMonitorLabelsAsync(params, invocation) { HideMonitorLabelsAsync(params, invocation) {
let sender = invocation.get_sender(); let sender = invocation.get_sender();
Main.osdMonitorLabeler.hide(sender); Main.osdMonitorLabeler.hide(sender);
}, }
Mode: global.session_mode,
_checkOverviewVisibleChanged() { _checkOverviewVisibleChanged() {
if (Main.overview.visible !== this._cachedOverviewVisible) { if (Main.overview.visible !== this._cachedOverviewVisible) {
this._cachedOverviewVisible = Main.overview.visible; this._cachedOverviewVisible = Main.overview.visible;
this._dbusImpl.emit_property_changed('OverviewActive', new GLib.Variant('b', this._cachedOverviewVisible)); this._dbusImpl.emit_property_changed('OverviewActive', new GLib.Variant('b', this._cachedOverviewVisible));
} }
}, }
get Mode() {
return global.session_mode;
}
get OverviewActive() { get OverviewActive() {
return this._cachedOverviewVisible; return this._cachedOverviewVisible;
}, }
set OverviewActive(visible) { set OverviewActive(visible) {
if (visible) if (visible)
Main.overview.show(); Main.overview.show();
else else
Main.overview.hide(); Main.overview.hide();
}, }
ShellVersion: Config.PACKAGE_VERSION get ShellVersion() {
}); return Config.PACKAGE_VERSION;
}
};
const GnomeShellExtensionsIface = loadInterfaceXML('org.gnome.Shell.Extensions'); const GnomeShellExtensionsIface = loadInterfaceXML('org.gnome.Shell.Extensions');
var GnomeShellExtensions = new Lang.Class({ var GnomeShellExtensions = class {
Name: 'GnomeShellExtensionsDBus', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellExtensionsIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellExtensionsIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/Shell');
ExtensionSystem.connect('extension-state-changed', ExtensionSystem.connect('extension-state-changed',
this._extensionStateChanged.bind(this)); this._extensionStateChanged.bind(this));
}, }
ListExtensions() { ListExtensions() {
let out = {}; let out = {};
@ -253,7 +251,7 @@ var GnomeShellExtensions = new Lang.Class({
out[uuid] = dbusObj; out[uuid] = dbusObj;
} }
return out; return out;
}, }
GetExtensionInfo(uuid) { GetExtensionInfo(uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
@ -291,7 +289,7 @@ var GnomeShellExtensions = new Lang.Class({
} }
return out; return out;
}, }
GetExtensionErrors(uuid) { GetExtensionErrors(uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
@ -302,15 +300,15 @@ var GnomeShellExtensions = new Lang.Class({
return []; return [];
return extension.errors; return extension.errors;
}, }
InstallRemoteExtensionAsync([uuid], invocation) { InstallRemoteExtensionAsync([uuid], invocation) {
return ExtensionDownloader.installExtension(uuid, invocation); return ExtensionDownloader.installExtension(uuid, invocation);
}, }
UninstallExtension(uuid) { UninstallExtension(uuid) {
return ExtensionDownloader.uninstallExtension(uuid); return ExtensionDownloader.uninstallExtension(uuid);
}, }
LaunchExtensionPrefs(uuid) { LaunchExtensionPrefs(uuid) {
let appSys = Shell.AppSystem.get_default(); let appSys = Shell.AppSystem.get_default();
@ -319,7 +317,7 @@ var GnomeShellExtensions = new Lang.Class({
let timestamp = global.display.get_current_time_roundtrip(); let timestamp = global.display.get_current_time_roundtrip();
info.launch_uris(['extension:///' + uuid], info.launch_uris(['extension:///' + uuid],
global.create_app_launch_context(timestamp, -1)); global.create_app_launch_context(timestamp, -1));
}, }
ReloadExtension(uuid) { ReloadExtension(uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
@ -327,26 +325,24 @@ var GnomeShellExtensions = new Lang.Class({
return; return;
ExtensionSystem.reloadExtension(extension); ExtensionSystem.reloadExtension(extension);
}, }
CheckForUpdates() { CheckForUpdates() {
ExtensionDownloader.checkForUpdates(); ExtensionDownloader.checkForUpdates();
}, }
ShellVersion: Config.PACKAGE_VERSION, get ShellVersion() {
return Config.PACKAGE_VERSION;
}
_extensionStateChanged(_, newState) { _extensionStateChanged(_, newState) {
this._dbusImpl.emit_signal('ExtensionStatusChanged', this._dbusImpl.emit_signal('ExtensionStatusChanged',
GLib.Variant.new('(sis)', [newState.uuid, newState.state, newState.error])); 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; this._screenShield = screenShield;
screenShield.connect('active-changed', shield => { screenShield.connect('active-changed', shield => {
this._dbusImpl.emit_signal('ActiveChanged', GLib.Variant.new('(b)', [shield.active])); 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'); this._dbusImpl.export(Gio.DBus.session, '/org/gnome/ScreenSaver');
Gio.DBus.session.own_name('org.gnome.ScreenSaver', Gio.BusNameOwnerFlags.REPLACE, null, null); Gio.DBus.session.own_name('org.gnome.ScreenSaver', Gio.BusNameOwnerFlags.REPLACE, null, null);
}, }
LockAsync(parameters, invocation) { LockAsync(parameters, invocation) {
let tmpId = this._screenShield.connect('lock-screen-shown', () => { let tmpId = this._screenShield.connect('lock-screen-shown', () => {
@ -369,18 +365,18 @@ var ScreenSaverDBus = new Lang.Class({
}); });
this._screenShield.lock(true); this._screenShield.lock(true);
}, }
SetActive(active) { SetActive(active) {
if (active) if (active)
this._screenShield.activate(true); this._screenShield.activate(true);
else else
this._screenShield.deactivate(false); this._screenShield.deactivate(false);
}, }
GetActive() { GetActive() {
return this._screenShield.active; return this._screenShield.active;
}, }
GetActiveTime() { GetActiveTime() {
let started = this._screenShield.activationTime; let started = this._screenShield.activationTime;
@ -388,5 +384,5 @@ var ScreenSaverDBus = new Lang.Class({
return Math.floor((GLib.get_monotonic_time() - started) / 1000000); return Math.floor((GLib.get_monotonic_time() - started) / 1000000);
else else
return 0; return 0;
}, }
}); };

View File

@ -2,7 +2,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const BoxPointer = imports.ui.boxpointer; const BoxPointer = imports.ui.boxpointer;
@ -10,12 +9,9 @@ const Main = imports.ui.main;
const Params = imports.misc.params; const Params = imports.misc.params;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
var EntryMenu = new Lang.Class({ var EntryMenu = class extends PopupMenu.PopupMenu {
Name: 'ShellEntryMenu', constructor(entry) {
Extends: PopupMenu.PopupMenu, super(entry, 0, St.Side.TOP);
_init(entry) {
this.parent(entry, 0, St.Side.TOP);
this._entry = entry; this._entry = entry;
this._clipboard = St.Clipboard.get_default(); this._clipboard = St.Clipboard.get_default();
@ -36,18 +32,18 @@ var EntryMenu = new Lang.Class({
Main.uiGroup.add_actor(this.actor); Main.uiGroup.add_actor(this.actor);
this.actor.hide(); this.actor.hide();
}, }
_makePasswordItem() { _makePasswordItem() {
let item = new PopupMenu.PopupMenuItem(''); let item = new PopupMenu.PopupMenuItem('');
item.connect('activate', this._onPasswordActivated.bind(this)); item.connect('activate', this._onPasswordActivated.bind(this));
this.addMenuItem(item); this.addMenuItem(item);
this._passwordItem = item; this._passwordItem = item;
}, }
get isPassword() { get isPassword() {
return this._passwordItem != null; return this._passwordItem != null;
}, }
set isPassword(v) { set isPassword(v) {
if (v == this.isPassword) if (v == this.isPassword)
@ -61,7 +57,7 @@ var EntryMenu = new Lang.Class({
this._passwordItem = null; this._passwordItem = null;
this._entry.input_purpose = Clutter.InputContentPurpose.NORMAL; this._entry.input_purpose = Clutter.InputContentPurpose.NORMAL;
} }
}, }
open(animate) { open(animate) {
this._updatePasteItem(); this._updatePasteItem();
@ -69,26 +65,26 @@ var EntryMenu = new Lang.Class({
if (this._passwordItem) if (this._passwordItem)
this._updatePasswordItem(); this._updatePasswordItem();
this.parent(animate); super.open(animate);
this._entry.add_style_pseudo_class('focus'); this._entry.add_style_pseudo_class('focus');
let direction = Gtk.DirectionType.TAB_FORWARD; let direction = Gtk.DirectionType.TAB_FORWARD;
if (!this.actor.navigate_focus(null, direction, false)) if (!this.actor.navigate_focus(null, direction, false))
this.actor.grab_key_focus(); this.actor.grab_key_focus();
}, }
_updateCopyItem() { _updateCopyItem() {
let selection = this._entry.clutter_text.get_selection(); let selection = this._entry.clutter_text.get_selection();
this._copyItem.setSensitive(!this._entry.clutter_text.password_char && this._copyItem.setSensitive(!this._entry.clutter_text.password_char &&
selection && selection != ''); selection && selection != '');
}, }
_updatePasteItem() { _updatePasteItem() {
this._clipboard.get_text(St.ClipboardType.CLIPBOARD, this._clipboard.get_text(St.ClipboardType.CLIPBOARD,
(clipboard, text) => { (clipboard, text) => {
this._pasteItem.setSensitive(text && text != ''); this._pasteItem.setSensitive(text && text != '');
}); });
}, }
_updatePasswordItem() { _updatePasswordItem() {
let textHidden = (this._entry.clutter_text.password_char); let textHidden = (this._entry.clutter_text.password_char);
@ -96,12 +92,12 @@ var EntryMenu = new Lang.Class({
this._passwordItem.label.set_text(_("Show Text")); this._passwordItem.label.set_text(_("Show Text"));
else else
this._passwordItem.label.set_text(_("Hide Text")); this._passwordItem.label.set_text(_("Hide Text"));
}, }
_onCopyActivated() { _onCopyActivated() {
let selection = this._entry.clutter_text.get_selection(); let selection = this._entry.clutter_text.get_selection();
this._clipboard.set_text(St.ClipboardType.CLIPBOARD, selection); this._clipboard.set_text(St.ClipboardType.CLIPBOARD, selection);
}, }
_onPasteActivated() { _onPasteActivated() {
this._clipboard.get_text(St.ClipboardType.CLIPBOARD, 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(); let pos = this._entry.clutter_text.get_cursor_position();
this._entry.clutter_text.insert_text(text, pos); this._entry.clutter_text.insert_text(text, pos);
}); });
}, }
_onPasswordActivated() { _onPasswordActivated() {
let visible = !!(this._entry.clutter_text.password_char); let visible = !!(this._entry.clutter_text.password_char);
this._entry.clutter_text.set_password_char(visible ? '' : '\u25cf'); this._entry.clutter_text.set_password_char(visible ? '' : '\u25cf');
} }
}); };
function _setMenuAlignment(entry, stageX) { function _setMenuAlignment(entry, stageX) {
let [success, entryX, entryY] = entry.transform_stage_point(stageX, 0); let [success, entryX, entryY] = entry.transform_stage_point(stageX, 0);

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
@ -62,10 +61,8 @@ function _createIcon(gicon) {
/* -------------------------------------------------------- */ /* -------------------------------------------------------- */
var ListItem = new Lang.Class({ var ListItem = class {
Name: 'ListItem', constructor(app) {
_init(app) {
this._app = app; this._app = app;
let layout = new St.BoxLayout({ vertical: false}); let layout = new St.BoxLayout({ vertical: false});
@ -90,19 +87,17 @@ var ListItem = new Lang.Class({
layout.add(labelBin); layout.add(labelBin);
this.actor.connect('clicked', this._onClicked.bind(this)); this.actor.connect('clicked', this._onClicked.bind(this));
}, }
_onClicked() { _onClicked() {
this.emit('activate'); this.emit('activate');
this._app.activate(); this._app.activate();
} }
}); };
Signals.addSignalMethods(ListItem.prototype); Signals.addSignalMethods(ListItem.prototype);
var ShellMountOperation = new Lang.Class({ var ShellMountOperation = class {
Name: 'ShellMountOperation', constructor(source, params) {
_init(source, params) {
params = Params.parse(params, { existingDialog: null }); params = Params.parse(params, { existingDialog: null });
this._dialog = null; this._dialog = null;
@ -124,7 +119,7 @@ var ShellMountOperation = new Lang.Class({
this._onShowUnmountProgress.bind(this)); this._onShowUnmountProgress.bind(this));
this._gicon = source.get_icon(); this._gicon = source.get_icon();
}, }
_closeExistingDialog() { _closeExistingDialog() {
if (!this._existingDialog) if (!this._existingDialog)
@ -132,7 +127,7 @@ var ShellMountOperation = new Lang.Class({
this._existingDialog.close(); this._existingDialog.close();
this._existingDialog = null; this._existingDialog = null;
}, }
_onAskQuestion(op, message, choices) { _onAskQuestion(op, message, choices) {
this._closeExistingDialog(); this._closeExistingDialog();
@ -148,7 +143,7 @@ var ShellMountOperation = new Lang.Class({
this._dialog.update(message, choices); this._dialog.update(message, choices);
this._dialog.open(); this._dialog.open();
}, }
_onAskPassword(op, message, defaultUser, defaultDomain, flags) { _onAskPassword(op, message, defaultUser, defaultDomain, flags) {
if (this._existingDialog) { if (this._existingDialog) {
@ -173,7 +168,7 @@ var ShellMountOperation = new Lang.Class({
} }
}); });
this._dialog.open(); this._dialog.open();
}, }
close(op) { close(op) {
this._closeExistingDialog(); this._closeExistingDialog();
@ -188,7 +183,7 @@ var ShellMountOperation = new Lang.Class({
this._notifier.done(); this._notifier.done();
this._notifier = null; this._notifier = null;
} }
}, }
_onShowProcesses2(op) { _onShowProcesses2(op) {
this._closeExistingDialog(); this._closeExistingDialog();
@ -216,7 +211,7 @@ var ShellMountOperation = new Lang.Class({
} }
this._processesDialog.update(message, processes, choices); this._processesDialog.update(message, processes, choices);
}, }
_onShowUnmountProgress(op, message, timeLeft, bytesLeft) { _onShowUnmountProgress(op, message, timeLeft, bytesLeft) {
if (!this._notifier) if (!this._notifier)
@ -226,7 +221,7 @@ var ShellMountOperation = new Lang.Class({
this._notifier.done(message); this._notifier.done(message);
else else
this._notifier.show(message); this._notifier.show(message);
}, }
borrowDialog() { borrowDialog() {
if (this._dialogId != 0) { if (this._dialogId != 0) {
@ -236,18 +231,15 @@ var ShellMountOperation = new Lang.Class({
return this._dialog; return this._dialog;
} }
}); };
var ShellUnmountNotifier = new Lang.Class({ var ShellUnmountNotifier = class extends MessageTray.Source {
Name: 'ShellUnmountNotifier', constructor() {
Extends: MessageTray.Source, super('', 'media-removable');
_init() {
this.parent('', 'media-removable');
this._notification = null; this._notification = null;
Main.messageTray.add(this); Main.messageTray.add(this);
}, }
show(message) { show(message) {
let [header, text] = message.split('\n', 2); let [header, text] = message.split('\n', 2);
@ -261,7 +253,7 @@ var ShellUnmountNotifier = new Lang.Class({
} }
this.notify(this._notification); this.notify(this._notification);
}, }
done(message) { done(message) {
if (this._notification) { if (this._notification) {
@ -276,35 +268,29 @@ var ShellUnmountNotifier = new Lang.Class({
this.notify(notification); this.notify(notification);
} }
} }
}); };
var ShellMountQuestionDialog = new Lang.Class({ var ShellMountQuestionDialog = class extends ModalDialog.ModalDialog {
Name: 'ShellMountQuestionDialog', constructor(icon) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'mount-dialog' });
_init(icon) {
this.parent({ styleClass: 'mount-dialog' });
this._content = new Dialog.MessageDialogContent({ icon }); this._content = new Dialog.MessageDialogContent({ icon });
this.contentLayout.add(this._content, { x_fill: true, y_fill: false }); this.contentLayout.add(this._content, { x_fill: true, y_fill: false });
}, }
update(message, choices) { update(message, choices) {
_setLabelsForMessage(this._content, message); _setLabelsForMessage(this._content, message);
_setButtonsForChoices(this, choices); _setButtonsForChoices(this, choices);
} }
}); };
Signals.addSignalMethods(ShellMountQuestionDialog.prototype); Signals.addSignalMethods(ShellMountQuestionDialog.prototype);
var ShellMountPasswordDialog = new Lang.Class({ var ShellMountPasswordDialog = class extends ModalDialog.ModalDialog {
Name: 'ShellMountPasswordDialog', constructor(message, icon, flags) {
Extends: ModalDialog.ModalDialog,
_init(message, icon, flags) {
let strings = message.split('\n'); let strings = message.split('\n');
let title = strings.shift() || null; let title = strings.shift() || null;
let body = 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 }); let content = new Dialog.MessageDialogContent({ icon, title, body });
this.contentLayout.add_actor(content); this.contentLayout.add_actor(content);
@ -352,20 +338,20 @@ var ShellMountPasswordDialog = new Lang.Class({
}]; }];
this.setButtons(buttons); this.setButtons(buttons);
}, }
reaskPassword() { reaskPassword() {
this._passwordEntry.set_text(''); this._passwordEntry.set_text('');
this._errorMessageLabel.show(); this._errorMessageLabel.show();
}, }
_onCancelButton() { _onCancelButton() {
this.emit('response', -1, '', false); this.emit('response', -1, '', false);
}, }
_onUnlockButton() { _onUnlockButton() {
this._onEntryActivate(); this._onEntryActivate();
}, }
_onEntryActivate() { _onEntryActivate() {
global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY, global.settings.set_boolean(REMEMBER_MOUNT_PASSWORD_KEY,
@ -375,14 +361,11 @@ var ShellMountPasswordDialog = new Lang.Class({
this._rememberChoice && this._rememberChoice &&
this._rememberChoice.actor.checked); this._rememberChoice.actor.checked);
} }
}); };
var ShellProcessesDialog = new Lang.Class({ var ShellProcessesDialog = class extends ModalDialog.ModalDialog {
Name: 'ShellProcessesDialog', constructor(icon) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'mount-dialog' });
_init(icon) {
this.parent({ styleClass: 'mount-dialog' });
this._content = new Dialog.MessageDialogContent({ icon }); this._content = new Dialog.MessageDialogContent({ icon });
this.contentLayout.add(this._content, { x_fill: true, y_fill: false }); 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) if (this._applicationList.get_n_children() == 0)
scrollView.hide(); scrollView.hide();
}); });
}, }
_setAppsForPids(pids) { _setAppsForPids(pids) {
// remove all the items // remove all the items
@ -428,14 +411,14 @@ var ShellProcessesDialog = new Lang.Class({
this.emit('response', -1); this.emit('response', -1);
}); });
}); });
}, }
update(message, processes, choices) { update(message, processes, choices) {
this._setAppsForPids(processes); this._setAppsForPids(processes);
_setLabelsForMessage(this._content, message); _setLabelsForMessage(this._content, message);
_setButtonsForChoices(this, choices); _setButtonsForChoices(this, choices);
} }
}); };
Signals.addSignalMethods(ShellProcessesDialog.prototype); Signals.addSignalMethods(ShellProcessesDialog.prototype);
const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler'); const GnomeShellMountOpIface = loadInterfaceXML('org.Gtk.MountOperationHandler');
@ -447,10 +430,8 @@ var ShellMountOperationType = {
SHOW_PROCESSES: 3 SHOW_PROCESSES: 3
}; };
var GnomeShellMountOpHandler = new Lang.Class({ var GnomeShellMountOpHandler = class {
Name: 'GnomeShellMountOpHandler', constructor() {
_init() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellMountOpIface, this); this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(GnomeShellMountOpIface, this);
this._dbusImpl.export(Gio.DBus.session, '/org/gtk/MountOperationHandler'); this._dbusImpl.export(Gio.DBus.session, '/org/gtk/MountOperationHandler');
Gio.bus_own_name_on_connection(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._volumeMonitor = Gio.VolumeMonitor.get();
this._ensureEmptyRequest(); this._ensureEmptyRequest();
}, }
_ensureEmptyRequest() { _ensureEmptyRequest() {
this._currentId = null; this._currentId = null;
this._currentInvocation = null; this._currentInvocation = null;
this._currentType = ShellMountOperationType.NONE; this._currentType = ShellMountOperationType.NONE;
}, }
_clearCurrentRequest(response, details) { _clearCurrentRequest(response, details) {
if (this._currentInvocation) { if (this._currentInvocation) {
@ -475,7 +456,7 @@ var GnomeShellMountOpHandler = new Lang.Class({
} }
this._ensureEmptyRequest(); this._ensureEmptyRequest();
}, }
_setCurrentRequest(invocation, id, type) { _setCurrentRequest(invocation, id, type) {
let oldId = this._currentId; let oldId = this._currentId;
@ -492,20 +473,20 @@ var GnomeShellMountOpHandler = new Lang.Class({
return true; return true;
return false; return false;
}, }
_closeDialog() { _closeDialog() {
if (this._dialog) { if (this._dialog) {
this._dialog.close(); this._dialog.close();
this._dialog = null; this._dialog = null;
} }
}, }
_createGIcon(iconName) { _createGIcon(iconName) {
let realIconName = iconName ? iconName : 'drive-harddisk'; let realIconName = iconName ? iconName : 'drive-harddisk';
return new Gio.ThemedIcon({ name: realIconName, return new Gio.ThemedIcon({ name: realIconName,
use_default_fallbacks: true }); use_default_fallbacks: true });
}, }
/** /**
* AskPassword: * AskPassword:
@ -557,7 +538,7 @@ var GnomeShellMountOpHandler = new Lang.Class({
this._clearCurrentRequest(response, details); this._clearCurrentRequest(response, details);
}); });
this._dialog.open(); this._dialog.open();
}, }
/** /**
* AskQuestion: * AskQuestion:
@ -595,7 +576,7 @@ var GnomeShellMountOpHandler = new Lang.Class({
this._dialog.update(message, choices); this._dialog.update(message, choices);
this._dialog.open(); this._dialog.open();
}, }
/** /**
* ShowProcesses: * ShowProcesses:
@ -643,7 +624,7 @@ var GnomeShellMountOpHandler = new Lang.Class({
this._dialog.update(message, applicationPids, choices); this._dialog.update(message, applicationPids, choices);
this._dialog.open(); this._dialog.open();
}, }
/** /**
* Close: * Close:
@ -655,4 +636,4 @@ var GnomeShellMountOpHandler = new Lang.Class({
this._clearCurrentRequest(Gio.MountOperationResult.UNHANDLED, {}); this._clearCurrentRequest(Gio.MountOperationResult.UNHANDLED, {});
this._closeDialog(); this._closeDialog();
} }
}); };

View File

@ -3,7 +3,6 @@
const Atk = imports.gi.Atk; const Atk = imports.gi.Atk;
const Cairo = imports.cairo; const Cairo = imports.cairo;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const St = imports.gi.St; const St = imports.gi.St;
const Signals = imports.signals; 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_SCROLL_STEP = 0.02; /* Slider scrolling step in % */
var Slider = new Lang.Class({ var Slider = class extends BarLevel.BarLevel {
Name: "Slider", constructor(value) {
Extends: BarLevel.BarLevel,
_init(value) {
let params = { let params = {
styleClass: 'slider', styleClass: 'slider',
canFocus: true, canFocus: true,
reactive: true, reactive: true,
accessibleRole: Atk.Role.SLIDER, accessibleRole: Atk.Role.SLIDER,
} }
this.parent(value, params) super(value, params)
this.actor.connect('button-press-event', this._startDragging.bind(this)); this.actor.connect('button-press-event', this._startDragging.bind(this));
this.actor.connect('touch-event', this._touchDragging.bind(this)); this.actor.connect('touch-event', this._touchDragging.bind(this));
@ -33,10 +29,10 @@ var Slider = new Lang.Class({
this._dragging = false; this._dragging = false;
this._customAccessible.connect('get-minimum-increment', this._getMinimumIncrement.bind(this)); this._customAccessible.connect('get-minimum-increment', this._getMinimumIncrement.bind(this));
}, }
_barLevelRepaint(area) { _barLevelRepaint(area) {
this.parent(area); super._barLevelRepaint(area);
// Add handle // Add handle
let cr = area.get_context(); let cr = area.get_context();
@ -64,11 +60,11 @@ var Slider = new Lang.Class({
cr.stroke(); cr.stroke();
} }
cr.$dispose(); cr.$dispose();
}, }
_startDragging(actor, event) { _startDragging(actor, event) {
return this.startDragging(event); return this.startDragging(event);
}, }
startDragging(event) { startDragging(event) {
if (this._dragging) if (this._dragging)
@ -100,7 +96,7 @@ var Slider = new Lang.Class({
[absX, absY] = event.get_coords(); [absX, absY] = event.get_coords();
this._moveHandle(absX, absY); this._moveHandle(absX, absY);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_endDragging() { _endDragging() {
if (this._dragging) { if (this._dragging) {
@ -121,7 +117,7 @@ var Slider = new Lang.Class({
this.emit('drag-end'); this.emit('drag-end');
} }
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_touchDragging(actor, event) { _touchDragging(actor, event) {
let device = event.get_device(); let device = event.get_device();
@ -139,7 +135,7 @@ var Slider = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
scroll(event) { scroll(event) {
let direction = event.get_scroll_direction(); let direction = event.get_scroll_direction();
@ -164,18 +160,18 @@ var Slider = new Lang.Class({
this.actor.queue_repaint(); this.actor.queue_repaint();
this.emit('value-changed', this._value); this.emit('value-changed', this._value);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onScrollEvent(actor, event) { _onScrollEvent(actor, event) {
return this.scroll(event); return this.scroll(event);
}, }
_motionEvent(actor, event) { _motionEvent(actor, event) {
let absX, absY; let absX, absY;
[absX, absY] = event.get_coords(); [absX, absY] = event.get_coords();
this._moveHandle(absX, absY); this._moveHandle(absX, absY);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
onKeyPressEvent(actor, event) { onKeyPressEvent(actor, event) {
let key = event.get_key_symbol(); let key = event.get_key_symbol();
@ -189,7 +185,7 @@ var Slider = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_moveHandle(absX, absY) { _moveHandle(absX, absY) {
let relX, relY, sliderX, sliderY; let relX, relY, sliderX, sliderY;
@ -210,11 +206,10 @@ var Slider = new Lang.Class({
this._value = newvalue * this._maxValue; this._value = newvalue * this._maxValue;
this.actor.queue_repaint(); this.actor.queue_repaint();
this.emit('value-changed', this._value); this.emit('value-changed', this._value);
}, }
_getMinimumIncrement(actor) { _getMinimumIncrement(actor) {
return 0.1; return 0.1;
}, }
}); };
Signals.addSignalMethods(Slider.prototype); Signals.addSignalMethods(Slider.prototype);

View File

@ -2,7 +2,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GnomeBluetooth = imports.gi.GnomeBluetooth; const GnomeBluetooth = imports.gi.GnomeBluetooth;
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
@ -18,12 +17,9 @@ const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface
const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup'; const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup';
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'BTIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._indicator = this._addIndicator(); this._indicator = this._addIndicator();
this._indicator.icon_name = 'bluetooth-active-symbolic'; 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)); this._model.connect('row-inserted', this._sync.bind(this));
Main.sessionMode.connect('updated', this._sync.bind(this)); Main.sessionMode.connect('updated', this._sync.bind(this));
this._sync(); this._sync();
}, }
_getDefaultAdapter() { _getDefaultAdapter() {
let [ret, iter] = this._model.get_iter_first(); let [ret, iter] = this._model.get_iter_first();
@ -73,7 +69,7 @@ var Indicator = new Lang.Class({
ret = this._model.iter_next(iter); ret = this._model.iter_next(iter);
} }
return null; return null;
}, }
// nDevices is the number of devices setup for the current default // nDevices is the number of devices setup for the current default
// adapter if one exists and is powered. If unpowered or unavailable, // adapter if one exists and is powered. If unpowered or unavailable,
@ -111,7 +107,7 @@ var Indicator = new Lang.Class({
} }
return [ nDevices, nConnectedDevices]; return [ nDevices, nConnectedDevices];
}, }
_sync() { _sync() {
let [ nDevices, nConnectedDevices ] = this._getNDevices(); let [ nDevices, nConnectedDevices ] = this._getNDevices();
@ -136,5 +132,5 @@ var Indicator = new Lang.Class({
this._item.label.text = _("On"); this._item.label.text = _("On");
this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off"); this._toggleItem.label.text = this._proxy.BluetoothAirplaneMode ? _("Turn On") : _("Turn Off");
}, }
}); };

View File

@ -1,6 +1,5 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const St = imports.gi.St; 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 BrightnessInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Power.Screen');
const BrightnessProxy = Gio.DBusProxy.makeProxyWrapper(BrightnessInterface); const BrightnessProxy = Gio.DBusProxy.makeProxyWrapper(BrightnessInterface);
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'BrightnessIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super('display-brightness-symbolic');
_init() {
this.parent('display-brightness-symbolic');
this._proxy = new BrightnessProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, this._proxy = new BrightnessProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
(proxy, error) => { (proxy, error) => {
if (error) { if (error) {
@ -51,17 +47,17 @@ var Indicator = new Lang.Class({
return this._slider.onKeyPressEvent(actor, event); return this._slider.onKeyPressEvent(actor, event);
}); });
}, }
_sliderChanged(slider, value) { _sliderChanged(slider, value) {
let percent = value * 100; let percent = value * 100;
this._proxy.Brightness = percent; this._proxy.Brightness = percent;
}, }
_sync() { _sync() {
let visible = this._proxy.Brightness >= 0; let visible = this._proxy.Brightness >= 0;
this._item.actor.visible = visible; this._item.actor.visible = visible;
if (visible) if (visible)
this._slider.setValue(this._proxy.Brightness / 100.0); this._slider.setValue(this._proxy.Brightness / 100.0);
}, }
}); };

View File

@ -22,12 +22,9 @@ const Util = imports.misc.util;
const INPUT_SOURCE_TYPE_XKB = 'xkb'; const INPUT_SOURCE_TYPE_XKB = 'xkb';
const INPUT_SOURCE_TYPE_IBUS = 'ibus'; const INPUT_SOURCE_TYPE_IBUS = 'ibus';
var LayoutMenuItem = new Lang.Class({ var LayoutMenuItem = class extends PopupMenu.PopupBaseMenuItem {
Name: 'LayoutMenuItem', constructor(displayName, shortName) {
Extends: PopupMenu.PopupBaseMenuItem, super();
_init(displayName, shortName) {
this.parent();
this.label = new St.Label({ text: displayName }); this.label = new St.Label({ text: displayName });
this.indicator = new St.Label({ text: shortName }); this.indicator = new St.Label({ text: shortName });
@ -35,12 +32,10 @@ var LayoutMenuItem = new Lang.Class({
this.actor.add(this.indicator); this.actor.add(this.indicator);
this.actor.label_actor = this.label; this.actor.label_actor = this.label;
} }
}); };
var InputSource = new Lang.Class({ var InputSource = class {
Name: 'InputSource', constructor(type, id, displayName, shortName, index) {
_init(type, id, displayName, shortName, index) {
this.type = type; this.type = type;
this.id = id; this.id = id;
this.displayName = displayName; this.displayName = displayName;
@ -50,20 +45,20 @@ var InputSource = new Lang.Class({
this.properties = null; this.properties = null;
this.xkbId = this._getXkbId(); this.xkbId = this._getXkbId();
}, }
get shortName() { get shortName() {
return this._shortName; return this._shortName;
}, }
set shortName(v) { set shortName(v) {
this._shortName = v; this._shortName = v;
this.emit('changed'); this.emit('changed');
}, }
activate(interactive) { activate(interactive) {
this.emit('activate', !!interactive); this.emit('activate', !!interactive);
}, }
_getXkbId() { _getXkbId() {
let engineDesc = IBusManager.getIBusManager().getEngineDesc(this.id); let engineDesc = IBusManager.getIBusManager().getEngineDesc(this.id);
@ -75,7 +70,7 @@ var InputSource = new Lang.Class({
else else
return engineDesc.layout; return engineDesc.layout;
} }
}); };
Signals.addSignalMethods(InputSource.prototype); Signals.addSignalMethods(InputSource.prototype);
var InputSourcePopup = new Lang.Class({ var InputSourcePopup = new Lang.Class({
@ -139,54 +134,55 @@ var InputSourceSwitcher = new Lang.Class({
} }
}); });
var InputSourceSettings = new Lang.Class({ var InputSourceSettings = class {
Name: 'InputSourceSettings', constructor() {
Abstract: true, if (new.target === InputSourceSettings)
throw new TypeError('Cannot instantiate abstract class ' + new.target.name);
}
_emitInputSourcesChanged() { _emitInputSourcesChanged() {
this.emit('input-sources-changed'); this.emit('input-sources-changed');
}, }
_emitKeyboardOptionsChanged() { _emitKeyboardOptionsChanged() {
this.emit('keyboard-options-changed'); this.emit('keyboard-options-changed');
}, }
_emitPerWindowChanged() { _emitPerWindowChanged() {
this.emit('per-window-changed'); this.emit('per-window-changed');
}, }
get inputSources() { get inputSources() {
return []; return [];
}, }
get mruSources() { get mruSources() {
return []; return [];
}, }
set mruSources(sourcesList) { set mruSources(sourcesList) {
// do nothing // do nothing
}, }
get keyboardOptions() { get keyboardOptions() {
return []; return [];
}, }
get perWindow() { get perWindow() {
return false; return false;
} }
}); };
Signals.addSignalMethods(InputSourceSettings.prototype); Signals.addSignalMethods(InputSourceSettings.prototype);
var InputSourceSystemSettings = new Lang.Class({ var InputSourceSystemSettings = class extends InputSourceSettings {
Name: 'InputSourceSystemSettings', constructor() {
Extends: InputSourceSettings, super();
_BUS_NAME: 'org.freedesktop.locale1', this._BUS_NAME = 'org.freedesktop.locale1';
_BUS_PATH: '/org/freedesktop/locale1', this._BUS_PATH = '/org/freedesktop/locale1';
_BUS_IFACE: 'org.freedesktop.locale1', this._BUS_IFACE = 'org.freedesktop.locale1';
_BUS_PROPS_IFACE: 'org.freedesktop.DBus.Properties', this._BUS_PROPS_IFACE = 'org.freedesktop.DBus.Properties';
_init() {
this._layouts = ''; this._layouts = '';
this._variants = ''; this._variants = '';
this._options = ''; this._options = '';
@ -200,7 +196,7 @@ var InputSourceSystemSettings = new Lang.Class({
null, null,
Gio.DBusSignalFlags.NONE, Gio.DBusSignalFlags.NONE,
this._reload.bind(this)); this._reload.bind(this));
}, }
_reload() { _reload() {
Gio.DBus.system.call(this._BUS_NAME, Gio.DBus.system.call(this._BUS_NAME,
@ -232,7 +228,7 @@ var InputSourceSystemSettings = new Lang.Class({
this._emitKeyboardOptionsChanged(); this._emitKeyboardOptionsChanged();
} }
}); });
}, }
get inputSources() { get inputSources() {
let sourcesList = []; let sourcesList = [];
@ -246,29 +242,28 @@ var InputSourceSystemSettings = new Lang.Class({
sourcesList.push({ type: INPUT_SOURCE_TYPE_XKB, id: id }); sourcesList.push({ type: INPUT_SOURCE_TYPE_XKB, id: id });
} }
return sourcesList; return sourcesList;
}, }
get keyboardOptions() { get keyboardOptions() {
return this._options.split(','); return this._options.split(',');
} }
}); };
var InputSourceSessionSettings = new Lang.Class({ var InputSourceSessionSettings = class extends InputSourceSettings {
Name: 'InputSourceSessionSettings', constructor() {
Extends: InputSourceSettings, super();
_DESKTOP_INPUT_SOURCES_SCHEMA: 'org.gnome.desktop.input-sources', this._DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
_KEY_INPUT_SOURCES: 'sources', this._KEY_INPUT_SOURCES = 'sources';
_KEY_MRU_SOURCES: 'mru-sources', this._KEY_MRU_SOURCES = 'mru-sources';
_KEY_KEYBOARD_OPTIONS: 'xkb-options', this._KEY_KEYBOARD_OPTIONS = 'xkb-options';
_KEY_PER_WINDOW: 'per-window', this._KEY_PER_WINDOW = 'per-window';
_init() {
this._settings = new Gio.Settings({ schema_id: this._DESKTOP_INPUT_SOURCES_SCHEMA }); 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_INPUT_SOURCES, this._emitInputSourcesChanged.bind(this));
this._settings.connect('changed::' + this._KEY_KEYBOARD_OPTIONS, this._emitKeyboardOptionsChanged.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)); this._settings.connect('changed::' + this._KEY_PER_WINDOW, this._emitPerWindowChanged.bind(this));
}, }
_getSourcesList(key) { _getSourcesList(key) {
let sourcesList = []; let sourcesList = [];
@ -280,34 +275,32 @@ var InputSourceSessionSettings = new Lang.Class({
sourcesList.push({ type: type, id: id }); sourcesList.push({ type: type, id: id });
} }
return sourcesList; return sourcesList;
}, }
get inputSources() { get inputSources() {
return this._getSourcesList(this._KEY_INPUT_SOURCES); return this._getSourcesList(this._KEY_INPUT_SOURCES);
}, }
get mruSources() { get mruSources() {
return this._getSourcesList(this._KEY_MRU_SOURCES); return this._getSourcesList(this._KEY_MRU_SOURCES);
}, }
set mruSources(sourcesList) { set mruSources(sourcesList) {
let sources = GLib.Variant.new('a(ss)', sourcesList); let sources = GLib.Variant.new('a(ss)', sourcesList);
this._settings.set_value(this._KEY_MRU_SOURCES, sources); this._settings.set_value(this._KEY_MRU_SOURCES, sources);
}, }
get keyboardOptions() { get keyboardOptions() {
return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS); return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS);
}, }
get perWindow() { get perWindow() {
return this._settings.get_boolean(this._KEY_PER_WINDOW); return this._settings.get_boolean(this._KEY_PER_WINDOW);
} }
}); };
var InputSourceManager = new Lang.Class({ var InputSourceManager = class {
Name: 'InputSourceManager', constructor() {
_init() {
// All valid input sources currently in the gsettings // All valid input sources currently in the gsettings
// KEY_INPUT_SOURCES list indexed by their index there // KEY_INPUT_SOURCES list indexed by their index there
this._inputSources = {}; this._inputSources = {};
@ -361,14 +354,14 @@ var InputSourceManager = new Lang.Class({
this._sourcesPerWindowChanged(); this._sourcesPerWindowChanged();
this._disableIBus = false; this._disableIBus = false;
this._reloading = false; this._reloading = false;
}, }
reload() { reload() {
this._reloading = true; this._reloading = true;
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions); this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
this._inputSourcesChanged(); this._inputSourcesChanged();
this._reloading = false; this._reloading = false;
}, }
_ibusReadyCallback(im, ready) { _ibusReadyCallback(im, ready) {
if (this._ibusReady == ready) if (this._ibusReady == ready)
@ -377,7 +370,7 @@ var InputSourceManager = new Lang.Class({
this._ibusReady = ready; this._ibusReady = ready;
this._mruSources = []; this._mruSources = [];
this._inputSourcesChanged(); this._inputSourcesChanged();
}, }
_modifiersSwitcher() { _modifiersSwitcher() {
let sourceIndexes = Object.keys(this._inputSources); let sourceIndexes = Object.keys(this._inputSources);
@ -399,7 +392,7 @@ var InputSourceManager = new Lang.Class({
is.activate(true); is.activate(true);
return true; return true;
}, }
_switchInputSource(display, window, binding) { _switchInputSource(display, window, binding) {
if (this._mruSources.length < 2) if (this._mruSources.length < 2)
@ -418,12 +411,12 @@ var InputSourceManager = new Lang.Class({
let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward); let popup = new InputSourcePopup(this._mruSources, this._keybindingAction, this._keybindingActionBackward);
if (!popup.show(binding.is_reversed(), binding.get_name(), binding.get_mask())) if (!popup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
popup.fadeAndDestroy(); popup.fadeAndDestroy();
}, }
_keyboardOptionsChanged() { _keyboardOptionsChanged() {
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions); this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
this._keyboardManager.reapply(); this._keyboardManager.reapply();
}, }
_updateMruSettings() { _updateMruSettings() {
// If IBus is not ready we don't have a full picture of all // 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; this._settings.mruSources = sourcesList;
}, }
_currentInputSourceChanged(newSource) { _currentInputSourceChanged(newSource) {
let oldSource; let oldSource;
@ -458,7 +451,7 @@ var InputSourceManager = new Lang.Class({
} }
this._changePerWindowSource(); this._changePerWindowSource();
}, }
activateInputSource(is, interactive) { activateInputSource(is, interactive) {
// The focus changes during holdKeyboard/releaseKeyboard may trick // The focus changes during holdKeyboard/releaseKeyboard may trick
@ -492,7 +485,7 @@ var InputSourceManager = new Lang.Class({
if (interactive) if (interactive)
this._updateMruSettings(); this._updateMruSettings();
}, }
_updateMruSources() { _updateMruSources() {
let sourcesList = []; let sourcesList = [];
@ -537,7 +530,7 @@ var InputSourceManager = new Lang.Class({
} }
} }
this._mruSources = mruSources.concat(sourcesList); this._mruSources = mruSources.concat(sourcesList);
}, }
_inputSourcesChanged() { _inputSourcesChanged() {
let sources = this._settings.inputSources; 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 // All ibus engines are preloaded here to reduce the launching time
// when users switch the input sources. // when users switch the input sources.
this._ibusManager.preloadEngines(Object.keys(this._ibusSources)); this._ibusManager.preloadEngines(Object.keys(this._ibusSources));
}, }
_makeEngineShortName(engineDesc) { _makeEngineShortName(engineDesc) {
let symbol = engineDesc.get_symbol(); let symbol = engineDesc.get_symbol();
@ -634,7 +627,7 @@ var InputSourceManager = new Lang.Class({
return langCode.toLowerCase(); return langCode.toLowerCase();
return String.fromCharCode(0x2328); // keyboard glyph return String.fromCharCode(0x2328); // keyboard glyph
}, }
_ibusPropertiesRegistered(im, engineName, props) { _ibusPropertiesRegistered(im, engineName, props) {
let source = this._ibusSources[engineName]; let source = this._ibusSources[engineName];
@ -645,7 +638,7 @@ var InputSourceManager = new Lang.Class({
if (source == this._currentSource) if (source == this._currentSource)
this.emit('current-source-changed', null); this.emit('current-source-changed', null);
}, }
_ibusPropertyUpdated(im, engineName, prop) { _ibusPropertyUpdated(im, engineName, prop) {
let source = this._ibusSources[engineName]; let source = this._ibusSources[engineName];
@ -655,7 +648,7 @@ var InputSourceManager = new Lang.Class({
if (this._updateSubProperty(source.properties, prop) && if (this._updateSubProperty(source.properties, prop) &&
source == this._currentSource) source == this._currentSource)
this.emit('current-source-changed', null); this.emit('current-source-changed', null);
}, }
_updateSubProperty(props, prop) { _updateSubProperty(props, prop) {
if (!props) if (!props)
@ -672,7 +665,7 @@ var InputSourceManager = new Lang.Class({
} }
} }
return false; return false;
}, }
_ibusSetContentType(im, purpose, hints) { _ibusSetContentType(im, purpose, hints) {
if (purpose == IBus.InputPurpose.PASSWORD) { if (purpose == IBus.InputPurpose.PASSWORD) {
@ -689,7 +682,7 @@ var InputSourceManager = new Lang.Class({
this._disableIBus = false; this._disableIBus = false;
} }
this.reload(); this.reload();
}, }
_getNewInputSource(current) { _getNewInputSource(current) {
let sourceIndexes = Object.keys(this._inputSources); let sourceIndexes = Object.keys(this._inputSources);
@ -706,14 +699,14 @@ var InputSourceManager = new Lang.Class({
} }
return this._inputSources[sourceIndexes[0]]; return this._inputSources[sourceIndexes[0]];
}, }
_getCurrentWindow() { _getCurrentWindow() {
if (Main.overview.visible) if (Main.overview.visible)
return Main.overview; return Main.overview;
else else
return global.display.focus_window; return global.display.focus_window;
}, }
_setPerWindowInputSource() { _setPerWindowInputSource() {
let window = this._getCurrentWindow(); let window = this._getCurrentWindow();
@ -727,7 +720,7 @@ var InputSourceManager = new Lang.Class({
if (window._currentSource) if (window._currentSource)
window._currentSource.activate(false); window._currentSource.activate(false);
}, }
_sourcesPerWindowChanged() { _sourcesPerWindowChanged() {
this._sourcesPerWindow = this._settings.perWindow; this._sourcesPerWindow = this._settings.perWindow;
@ -755,7 +748,7 @@ var InputSourceManager = new Lang.Class({
delete Main.overview._inputSources; delete Main.overview._inputSources;
delete Main.overview._currentSource; delete Main.overview._currentSource;
} }
}, }
_changePerWindowSource() { _changePerWindowSource() {
if (!this._sourcesPerWindow) if (!this._sourcesPerWindow)
@ -767,16 +760,16 @@ var InputSourceManager = new Lang.Class({
window._inputSources = this._inputSources; window._inputSources = this._inputSources;
window._currentSource = this._currentSource; window._currentSource = this._currentSource;
}, }
get currentSource() { get currentSource() {
return this._currentSource; return this._currentSource;
}, }
get inputSources() { get inputSources() {
return this._inputSources; return this._inputSources;
}, }
}); };
Signals.addSignalMethods(InputSourceManager.prototype); Signals.addSignalMethods(InputSourceManager.prototype);
let _inputSourceManager = null; let _inputSourceManager = null;

View File

@ -3,7 +3,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Dialog = imports.ui.dialog; const Dialog = imports.ui.dialog;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -47,12 +46,9 @@ const GeoclueManager = Gio.DBusProxy.makeProxyWrapper(GeoclueIface);
var AgentIface = loadInterfaceXML('org.freedesktop.GeoClue2.Agent'); var AgentIface = loadInterfaceXML('org.freedesktop.GeoClue2.Agent');
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'LocationIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._settings = new Gio.Settings({ schema_id: LOCATION_SCHEMA }); this._settings = new Gio.Settings({ schema_id: LOCATION_SCHEMA });
this._settings.connect('changed::' + ENABLED, this._settings.connect('changed::' + ENABLED,
@ -85,11 +81,11 @@ var Indicator = new Lang.Class({
this._onMaxAccuracyLevelChanged(); this._onMaxAccuracyLevelChanged();
this._connectToGeoclue(); this._connectToGeoclue();
this._connectToPermissionStore(); this._connectToPermissionStore();
}, }
get MaxAccuracyLevel() { get MaxAccuracyLevel() {
return this._getMaxAccuracyLevel(); return this._getMaxAccuracyLevel();
}, }
AuthorizeAppAsync(params, invocation) { AuthorizeAppAsync(params, invocation) {
let [desktopId, reqAccuracyLevel] = params; let [desktopId, reqAccuracyLevel] = params;
@ -104,7 +100,7 @@ var Indicator = new Lang.Class({
invocation.return_value(GLib.Variant.new('(bu)', invocation.return_value(GLib.Variant.new('(bu)',
[ret, accuracyLevel])); [ret, accuracyLevel]));
}); });
}, }
_syncIndicator() { _syncIndicator() {
if (this._managerProxy == null) { if (this._managerProxy == null) {
@ -116,7 +112,7 @@ var Indicator = new Lang.Class({
this._indicator.visible = this._managerProxy.InUse; this._indicator.visible = this._managerProxy.InUse;
this._item.actor.visible = this._indicator.visible; this._item.actor.visible = this._indicator.visible;
this._updateMenuLabels(); this._updateMenuLabels();
}, }
_connectToGeoclue() { _connectToGeoclue() {
if (this._managerProxy != null || this._connecting) if (this._managerProxy != null || this._connecting)
@ -128,7 +124,7 @@ var Indicator = new Lang.Class({
'/org/freedesktop/GeoClue2/Manager', '/org/freedesktop/GeoClue2/Manager',
this._onManagerProxyReady.bind(this)); this._onManagerProxyReady.bind(this));
return true; return true;
}, }
_onManagerProxyReady(proxy, error) { _onManagerProxyReady(proxy, error) {
if (error != null) { if (error != null) {
@ -144,7 +140,7 @@ var Indicator = new Lang.Class({
this._syncIndicator(); this._syncIndicator();
this._managerProxy.AddAgentRemote('gnome-shell', this._onAgentRegistered.bind(this)); this._managerProxy.AddAgentRemote('gnome-shell', this._onAgentRegistered.bind(this));
}, }
_onAgentRegistered(result, error) { _onAgentRegistered(result, error) {
this._connecting = false; this._connecting = false;
@ -152,7 +148,7 @@ var Indicator = new Lang.Class({
if (error != null) if (error != null)
log(error.message); log(error.message);
}, }
_onGeoclueVanished() { _onGeoclueVanished() {
if (this._propertiesChangedId) { if (this._propertiesChangedId) {
@ -162,17 +158,17 @@ var Indicator = new Lang.Class({
this._managerProxy = null; this._managerProxy = null;
this._syncIndicator(); this._syncIndicator();
}, }
_onOnOffAction() { _onOnOffAction() {
let enabled = this._settings.get_boolean(ENABLED); let enabled = this._settings.get_boolean(ENABLED);
this._settings.set_boolean(ENABLED, !enabled); this._settings.set_boolean(ENABLED, !enabled);
}, }
_onSessionUpdated() { _onSessionUpdated() {
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive); this.menu.setSensitive(sensitive);
}, }
_updateMenuLabels() { _updateMenuLabels() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED)) {
@ -183,7 +179,7 @@ var Indicator = new Lang.Class({
this._item.label.text = _("Location Disabled"); this._item.label.text = _("Location Disabled");
this._onOffAction.label.text = _("Enable"); this._onOffAction.label.text = _("Enable");
} }
}, }
_onMaxAccuracyLevelChanged() { _onMaxAccuracyLevelChanged() {
this._updateMenuLabels(); this._updateMenuLabels();
@ -192,7 +188,7 @@ var Indicator = new Lang.Class({
// before we emit the notify for this property change. // before we emit the notify for this property change.
if (!this._connectToGeoclue()) if (!this._connectToGeoclue())
this._notifyMaxAccuracyLevel(); this._notifyMaxAccuracyLevel();
}, }
_getMaxAccuracyLevel() { _getMaxAccuracyLevel() {
if (this._settings.get_boolean(ENABLED)) { if (this._settings.get_boolean(ENABLED)) {
@ -203,23 +199,23 @@ var Indicator = new Lang.Class({
} else { } else {
return GeoclueAccuracyLevel.NONE; return GeoclueAccuracyLevel.NONE;
} }
}, }
_notifyMaxAccuracyLevel() { _notifyMaxAccuracyLevel() {
let variant = new GLib.Variant('u', this._getMaxAccuracyLevel()); let variant = new GLib.Variant('u', this._getMaxAccuracyLevel());
this._agent.emit_property_changed('MaxAccuracyLevel', variant); this._agent.emit_property_changed('MaxAccuracyLevel', variant);
}, }
_onGeocluePropsChanged(proxy, properties) { _onGeocluePropsChanged(proxy, properties) {
let unpacked = properties.deep_unpack(); let unpacked = properties.deep_unpack();
if ("InUse" in unpacked) if ("InUse" in unpacked)
this._syncIndicator(); this._syncIndicator();
}, }
_connectToPermissionStore() { _connectToPermissionStore() {
this._permStoreProxy = null; this._permStoreProxy = null;
new PermissionStore.PermissionStore(this._onPermStoreProxyReady.bind(this)); new PermissionStore.PermissionStore(this._onPermStoreProxyReady.bind(this));
}, }
_onPermStoreProxyReady(proxy, error) { _onPermStoreProxyReady(proxy, error) {
if (error != null) { if (error != null) {
@ -228,20 +224,15 @@ var Indicator = new Lang.Class({
} }
this._permStoreProxy = proxy; this._permStoreProxy = proxy;
}, }
}); };
function clamp(value, min, max) { function clamp(value, min, max) {
return Math.max(min, Math.min(max, value)); return Math.max(min, Math.min(max, value));
} }
var AppAuthorizer = new Lang.Class({ var AppAuthorizer = class {
Name: 'LocationAppAuthorizer', constructor(desktopId, reqAccuracyLevel, permStoreProxy, maxAccuracyLevel) {
_init(desktopId,
reqAccuracyLevel,
permStoreProxy,
maxAccuracyLevel) {
this.desktopId = desktopId; this.desktopId = desktopId;
this.reqAccuracyLevel = reqAccuracyLevel; this.reqAccuracyLevel = reqAccuracyLevel;
this._permStoreProxy = permStoreProxy; this._permStoreProxy = permStoreProxy;
@ -249,7 +240,7 @@ var AppAuthorizer = new Lang.Class({
this._permissions = {}; this._permissions = {};
this._accuracyLevel = GeoclueAccuracyLevel.NONE; this._accuracyLevel = GeoclueAccuracyLevel.NONE;
}, }
authorize(onAuthDone) { authorize(onAuthDone) {
this._onAuthDone = onAuthDone; this._onAuthDone = onAuthDone;
@ -265,7 +256,7 @@ var AppAuthorizer = new Lang.Class({
this._permStoreProxy.LookupRemote(APP_PERMISSIONS_TABLE, this._permStoreProxy.LookupRemote(APP_PERMISSIONS_TABLE,
APP_PERMISSIONS_ID, APP_PERMISSIONS_ID,
this._onPermLookupDone.bind(this)); this._onPermLookupDone.bind(this));
}, }
_onPermLookupDone(result, error) { _onPermLookupDone(result, error) {
if (error != null) { if (error != null) {
@ -298,7 +289,7 @@ var AppAuthorizer = new Lang.Class({
GeoclueAccuracyLevel.NONE; GeoclueAccuracyLevel.NONE;
this._completeAuth(); this._completeAuth();
} }
}, }
_userAuthorizeApp() { _userAuthorizeApp() {
let name = this._app.get_name(); let name = this._app.get_name();
@ -306,7 +297,7 @@ var AppAuthorizer = new Lang.Class({
let reason = appInfo.get_locale_string("X-Geoclue-Reason"); let reason = appInfo.get_locale_string("X-Geoclue-Reason");
this._showAppAuthDialog(name, reason); this._showAppAuthDialog(name, reason);
}, }
_showAppAuthDialog(name, reason) { _showAppAuthDialog(name, reason) {
this._dialog = new GeolocationDialog(name, this._dialog = new GeolocationDialog(name,
@ -320,7 +311,7 @@ var AppAuthorizer = new Lang.Class({
}); });
this._dialog.open(); this._dialog.open();
}, }
_completeAuth() { _completeAuth() {
if (this._accuracyLevel != GeoclueAccuracyLevel.NONE) { if (this._accuracyLevel != GeoclueAccuracyLevel.NONE) {
@ -331,7 +322,7 @@ var AppAuthorizer = new Lang.Class({
this._saveToPermissionStore(); this._saveToPermissionStore();
this._onAuthDone(this._accuracyLevel); this._onAuthDone(this._accuracyLevel);
}, }
_saveToPermissionStore() { _saveToPermissionStore() {
if (this._permStoreProxy == null) if (this._permStoreProxy == null)
@ -352,15 +343,12 @@ var AppAuthorizer = new Lang.Class({
if (error != null) if (error != null)
log(error.message); log(error.message);
}); });
}, }
}); };
var GeolocationDialog = new Lang.Class({ var GeolocationDialog = class extends ModalDialog.ModalDialog {
Name: 'GeolocationDialog', constructor(name, subtitle, reqAccuracyLevel) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'geolocation-dialog' });
_init(name, subtitle, reqAccuracyLevel) {
this.parent({ styleClass: 'geolocation-dialog' });
this.reqAccuracyLevel = reqAccuracyLevel; this.reqAccuracyLevel = reqAccuracyLevel;
let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' }); let icon = new Gio.ThemedIcon({ name: 'find-location-symbolic' });
@ -380,16 +368,16 @@ var GeolocationDialog = new Lang.Class({
action: this._onGrantClicked.bind(this) }); action: this._onGrantClicked.bind(this) });
this.setInitialKeyFocus(button); this.setInitialKeyFocus(button);
}, }
_onGrantClicked() { _onGrantClicked() {
this.emit('response', this.reqAccuracyLevel); this.emit('response', this.reqAccuracyLevel);
this.close(); this.close();
}, }
_onDenyClicked() { _onDenyClicked() {
this.emit('response', GeoclueAccuracyLevel.NONE); this.emit('response', GeoclueAccuracyLevel.NONE);
this.close(); this.close();
} }
}); };
Signals.addSignalMethods(GeolocationDialog.prototype); Signals.addSignalMethods(GeolocationDialog.prototype);

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
@ -15,12 +14,9 @@ const OBJECT_PATH = '/org/gnome/SettingsDaemon/Color';
const ColorInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Color'); const ColorInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Color');
const ColorProxy = Gio.DBusProxy.makeProxyWrapper(ColorInterface); const ColorProxy = Gio.DBusProxy.makeProxyWrapper(ColorInterface);
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'NightLightIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._indicator = this._addIndicator(); this._indicator = this._addIndicator();
this._indicator.icon_name = 'night-light-symbolic'; this._indicator.icon_name = 'night-light-symbolic';
@ -50,12 +46,12 @@ var Indicator = new Lang.Class({
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
this._sync(); this._sync();
}, }
_sessionUpdated() { _sessionUpdated() {
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive); this.menu.setSensitive(sensitive);
}, }
_sync() { _sync() {
let visible = this._proxy.NightLightActive; let visible = this._proxy.NightLightActive;
@ -67,4 +63,4 @@ var Indicator = new Lang.Class({
: _("Disable Until Tomorrow"); : _("Disable Until Tomorrow");
this._item.actor.visible = this._indicator.visible = visible; this._item.actor.visible = this._indicator.visible = visible;
} }
}); };

View File

@ -3,7 +3,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const St = imports.gi.St; const St = imports.gi.St;
const Lang = imports.lang;
const UPower = imports.gi.UPowerGlib; const UPower = imports.gi.UPowerGlib;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -20,12 +19,9 @@ const PowerManagerProxy = Gio.DBusProxy.makeProxyWrapper(DisplayDeviceInterface)
const SHOW_BATTERY_PERCENTAGE = 'show-battery-percentage'; const SHOW_BATTERY_PERCENTAGE = 'show-battery-percentage';
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'PowerIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' }); this._desktopSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
this._desktopSettings.connect('changed::' + SHOW_BATTERY_PERCENTAGE, this._desktopSettings.connect('changed::' + SHOW_BATTERY_PERCENTAGE,
@ -54,12 +50,12 @@ var Indicator = new Lang.Class({
Main.sessionMode.connect('updated', this._sessionUpdated.bind(this)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
}, }
_sessionUpdated() { _sessionUpdated() {
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive); this.menu.setSensitive(sensitive);
}, }
_getStatus() { _getStatus() {
let seconds = 0; let seconds = 0;
@ -97,7 +93,7 @@ var Indicator = new Lang.Class({
} }
return null; return null;
}, }
_sync() { _sync() {
// Do we have batteries or a UPS? // Do we have batteries or a UPS?
@ -128,5 +124,5 @@ var Indicator = new Lang.Class({
// The status label // The status label
this._item.label.text = this._getStatus(); this._item.label.text = this._getStatus();
}, }
}); };

View File

@ -1,17 +1,13 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
var RemoteAccessApplet = new Lang.Class({ var RemoteAccessApplet = class extends PanelMenu.SystemIndicator {
Name: 'RemoteAccessApplet', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
let backend = Meta.get_backend(); let backend = Meta.get_backend();
let controller = backend.get_remote_access_controller(); let controller = backend.get_remote_access_controller();
@ -33,7 +29,7 @@ var RemoteAccessApplet = new Lang.Class({
controller.connect('new-handle', (controller, handle) => { controller.connect('new-handle', (controller, handle) => {
this._onNewHandle(handle); this._onNewHandle(handle);
}); });
}, }
_ensureControls() { _ensureControls() {
if (this._indicator) if (this._indicator)
@ -52,7 +48,7 @@ var RemoteAccessApplet = new Lang.Class({
}); });
this._item.icon.icon_name = 'screen-shared-symbolic'; this._item.icon.icon_name = 'screen-shared-symbolic';
this.menu.addMenuItem(this._item); this.menu.addMenuItem(this._item);
}, }
_sync() { _sync() {
if (this._handles.size == 0) { if (this._handles.size == 0) {
@ -62,12 +58,12 @@ var RemoteAccessApplet = new Lang.Class({
this._indicator.visible = true; this._indicator.visible = true;
this._item.actor.visible = true; this._item.actor.visible = true;
} }
}, }
_onStopped(handle) { _onStopped(handle) {
this._handles.delete(handle); this._handles.delete(handle);
this._sync(); this._sync();
}, }
_onNewHandle(handle) { _onNewHandle(handle) {
this._handles.add(handle); this._handles.add(handle);
@ -77,5 +73,5 @@ var RemoteAccessApplet = new Lang.Class({
this._ensureControls(); this._ensureControls();
this._sync(); this._sync();
} }
}, }
}); };

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Signals = imports.signals; const Signals = imports.signals;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -16,10 +15,8 @@ const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill';
const RfkillManagerInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Rfkill'); const RfkillManagerInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Rfkill');
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface); const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface);
var RfkillManager = new Lang.Class({ var RfkillManager = class {
Name: 'RfkillManager', constructor() {
_init() {
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
(proxy, error) => { (proxy, error) => {
if (error) { if (error) {
@ -30,28 +27,28 @@ var RfkillManager = new Lang.Class({
this._changed.bind(this)); this._changed.bind(this));
this._changed(); this._changed();
}); });
}, }
get airplaneMode() { get airplaneMode() {
return this._proxy.AirplaneMode; return this._proxy.AirplaneMode;
}, }
set airplaneMode(v) { set airplaneMode(v) {
this._proxy.AirplaneMode = v; this._proxy.AirplaneMode = v;
}, }
get hwAirplaneMode() { get hwAirplaneMode() {
return this._proxy.HardwareAirplaneMode; return this._proxy.HardwareAirplaneMode;
}, }
get shouldShowAirplaneMode() { get shouldShowAirplaneMode() {
return this._proxy.ShouldShowAirplaneMode; return this._proxy.ShouldShowAirplaneMode;
}, }
_changed() { _changed() {
this.emit('airplane-mode-changed'); this.emit('airplane-mode-changed');
} }
}); };
Signals.addSignalMethods(RfkillManager.prototype); Signals.addSignalMethods(RfkillManager.prototype);
var _manager; var _manager;
@ -63,12 +60,9 @@ function getRfkillManager() {
return _manager; return _manager;
} }
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'RfkillIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._manager = getRfkillManager(); this._manager = getRfkillManager();
this._manager.connect('airplane-mode-changed', this._sync.bind(this)); 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)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
}, }
_sessionUpdated() { _sessionUpdated() {
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive); this.menu.setSensitive(sensitive);
}, }
_sync() { _sync() {
let airplaneMode = this._manager.airplaneMode; let airplaneMode = this._manager.airplaneMode;
@ -110,5 +104,5 @@ var Indicator = new Lang.Class({
this._offItem.label.text = _("Use hardware switch to turn off"); this._offItem.label.text = _("Use hardware switch to turn off");
else else
this._offItem.label.text = _("Turn Off"); this._offItem.label.text = _("Turn Off");
}, }
}); };

View File

@ -1,16 +1,11 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Main = imports.ui.main; const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu; const PanelMenu = imports.ui.panelMenu;
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'ScreencastIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._indicator = this._addIndicator(); this._indicator = this._addIndicator();
this._indicator.icon_name = 'media-record-symbolic'; this._indicator.icon_name = 'media-record-symbolic';
@ -18,9 +13,9 @@ var Indicator = new Lang.Class({
this._sync(); this._sync();
Main.screencastService.connect('updated', this._sync.bind(this)); Main.screencastService.connect('updated', this._sync.bind(this));
}, }
_sync() { _sync() {
this._indicator.visible = Main.screencastService.isRecording; this._indicator.visible = Main.screencastService.isRecording;
}, }
}); };

View File

@ -4,7 +4,6 @@ const AccountsService = imports.gi.AccountsService;
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; const St = imports.gi.St;
const GObject = imports.gi.GObject; const GObject = imports.gi.GObject;
@ -16,10 +15,8 @@ const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
var AltSwitcher = new Lang.Class({ var AltSwitcher = class {
Name: 'AltSwitcher', constructor(standard, alternate) {
_init(standard, alternate) {
this._standard = standard; this._standard = standard;
this._standard.connect('notify::visible', this._sync.bind(this)); this._standard.connect('notify::visible', this._sync.bind(this));
if (this._standard instanceof St.Button) if (this._standard instanceof St.Button)
@ -42,7 +39,7 @@ var AltSwitcher = new Lang.Class({
this.actor = new St.Bin(); this.actor = new St.Bin();
this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
this.actor.connect('notify::mapped', () => { this._flipped = false; }); this.actor.connect('notify::mapped', () => { this._flipped = false; });
}, }
_sync() { _sync() {
let childToShow = null; let childToShow = null;
@ -83,14 +80,14 @@ var AltSwitcher = new Lang.Class({
} }
this.actor.show(); this.actor.show();
}, }
_onDestroy() { _onDestroy() {
if (this._capturedEventId > 0) { if (this._capturedEventId > 0) {
global.stage.disconnect(this._capturedEventId); global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0; this._capturedEventId = 0;
} }
}, }
_onCapturedEvent(actor, event) { _onCapturedEvent(actor, event) {
let type = event.type(); let type = event.type();
@ -101,7 +98,7 @@ var AltSwitcher = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onLongPress(action, actor, state) { _onLongPress(action, actor, state) {
if (state == Clutter.LongPressState.QUERY || if (state == Clutter.LongPressState.QUERY ||
@ -112,14 +109,11 @@ var AltSwitcher = new Lang.Class({
this._sync(); this._sync();
return true; return true;
} }
}); };
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'SystemIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
let userManager = AccountsService.UserManager.get_default(); let userManager = AccountsService.UserManager.get_default();
this._user = userManager.get_user(GLib.get_user_name()); 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)); Main.sessionMode.connect('updated', this._sessionUpdated.bind(this));
this._sessionUpdated(); this._sessionUpdated();
}, }
_updateActionsVisibility() { _updateActionsVisibility() {
let visible = (this._settingsAction.visible || let visible = (this._settingsAction.visible ||
@ -155,18 +149,18 @@ var Indicator = new Lang.Class({
this._altSwitcher.actor.visible); this._altSwitcher.actor.visible);
this._actionsItem.actor.visible = visible; this._actionsItem.actor.visible = visible;
}, }
_sessionUpdated() { _sessionUpdated() {
this._settingsAction.visible = Main.sessionMode.allowSettings; this._settingsAction.visible = Main.sessionMode.allowSettings;
}, }
_updateMultiUser() { _updateMultiUser() {
let hasSwitchUser = this._loginScreenItem.actor.visible; let hasSwitchUser = this._loginScreenItem.actor.visible;
let hasLogout = this._logoutItem.actor.visible; let hasLogout = this._logoutItem.actor.visible;
this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout; this._switchUserSubMenu.actor.visible = hasSwitchUser || hasLogout;
}, }
_updateSwitchUserSubMenu() { _updateSwitchUserSubMenu() {
this._switchUserSubMenu.label.text = this._user.get_real_name(); 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.add_style_class_name('default-icon');
this._switchUserSubMenu.icon.remove_style_class_name('user-icon'); this._switchUserSubMenu.icon.remove_style_class_name('user-icon');
} }
}, }
_createActionButton(iconName, accessibleName) { _createActionButton(iconName, accessibleName) {
let icon = new St.Button({ reactive: true, let icon = new St.Button({ reactive: true,
@ -209,7 +203,7 @@ var Indicator = new Lang.Class({
style_class: 'system-menu-action' }); style_class: 'system-menu-action' });
icon.child = new St.Icon({ icon_name: iconName }); icon.child = new St.Icon({ icon_name: iconName });
return icon; return icon;
}, }
_createSubMenu() { _createSubMenu() {
let bindFlags = GObject.BindingFlags.DEFAULT | GObject.BindingFlags.SYNC_CREATE; let bindFlags = GObject.BindingFlags.DEFAULT | GObject.BindingFlags.SYNC_CREATE;
@ -340,11 +334,11 @@ var Indicator = new Lang.Class({
() => { this._updateActionsVisibility(); }); () => { this._updateActionsVisibility(); });
this._altSwitcher.actor.connect('notify::visible', this._altSwitcher.actor.connect('notify::visible',
() => { this._updateActionsVisibility(); }); () => { this._updateActionsVisibility(); });
}, }
_onSettingsClicked() { _onSettingsClicked() {
this.menu.itemActivated(); this.menu.itemActivated();
Main.overview.hide(); Main.overview.hide();
this._settingsApp.activate(); this._settingsApp.activate();
} }
}); };

View File

@ -4,7 +4,6 @@
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Lang = imports.lang;
const Polkit = imports.gi.Polkit; const Polkit = imports.gi.Polkit;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Signals = imports.signals; 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_NAME = 'org.freedesktop.bolt';
const BOLT_DBUS_PATH = '/org/freedesktop/bolt'; const BOLT_DBUS_PATH = '/org/freedesktop/bolt';
var Client = new Lang.Class({ var Client = class {
Name: 'BoltClient', constructor() {
_init() {
this._proxy = null; this._proxy = null;
let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface); let nodeInfo = Gio.DBusNodeInfo.new_for_xml(BoltClientInterface);
Gio.DBusProxy.new(Gio.DBus.system, Gio.DBusProxy.new(Gio.DBus.system,
@ -69,7 +65,7 @@ var Client = new Lang.Class({
this._onProxyReady.bind(this)); this._onProxyReady.bind(this));
this.probing = false; this.probing = false;
}, }
_onProxyReady(o, res) { _onProxyReady(o, res) {
try { try {
@ -85,7 +81,7 @@ var Client = new Lang.Class({
if (this.probing) if (this.probing)
this.emit('probing-changed', this.probing); this.emit('probing-changed', this.probing);
}, }
_onPropertiesChanged(proxy, properties) { _onPropertiesChanged(proxy, properties) {
let unpacked = properties.deep_unpack(); let unpacked = properties.deep_unpack();
@ -94,7 +90,7 @@ var Client = new Lang.Class({
this.probing = this._proxy.Probing; this.probing = this._proxy.Probing;
this.emit('probing-changed', this.probing); this.emit('probing-changed', this.probing);
}, }
_onDeviceAdded(proxy, emitter, params) { _onDeviceAdded(proxy, emitter, params) {
let [path] = params; let [path] = params;
@ -102,7 +98,7 @@ var Client = new Lang.Class({
BOLT_DBUS_NAME, BOLT_DBUS_NAME,
path); path);
this.emit('device-added', device); this.emit('device-added', device);
}, }
/* public methods */ /* public methods */
close() { close() {
@ -112,7 +108,7 @@ var Client = new Lang.Class({
this._proxy.disconnectSignal(this._deviceAddedId); this._proxy.disconnectSignal(this._deviceAddedId);
this._proxy.disconnect(this._propsChangedId); this._proxy.disconnect(this._propsChangedId);
this._proxy = null; this._proxy = null;
}, }
enrollDevice(id, policy, callback) { enrollDevice(id, policy, callback) {
this._proxy.EnrollDeviceRemote(id, policy, AuthCtrl.NONE, this._proxy.EnrollDeviceRemote(id, policy, AuthCtrl.NONE,
@ -129,34 +125,29 @@ var Client = new Lang.Class({
path); path);
callback(device, null); callback(device, null);
}); });
}, }
get authMode () { get authMode () {
return this._proxy.AuthMode; return this._proxy.AuthMode;
} }
};
});
Signals.addSignalMethods(Client.prototype); Signals.addSignalMethods(Client.prototype);
/* helper class to automatically authorize new devices */ /* helper class to automatically authorize new devices */
var AuthRobot = new Lang.Class({ var AuthRobot = class {
Name: 'BoltAuthRobot', constructor(client) {
_init(client) {
this._client = client; this._client = client;
this._devicesToEnroll = []; this._devicesToEnroll = [];
this._enrolling = false; this._enrolling = false;
this._client.connect('device-added', this._onDeviceAdded.bind(this)); this._client.connect('device-added', this._onDeviceAdded.bind(this));
}, }
close() { close() {
this.disconnectAll(); this.disconnectAll();
this._client = null; this._client = null;
}, }
/* the "device-added" signal will be emitted by boltd for every /* the "device-added" signal will be emitted by boltd for every
* device that is not currently stored in the database. We are * device that is not currently stored in the database. We are
@ -184,7 +175,7 @@ var AuthRobot = new Lang.Class({
* of the list */ * of the list */
this._devicesToEnroll.push(dev); this._devicesToEnroll.push(dev);
this._enrollDevices(); this._enrollDevices();
}, }
/* The enrollment queue: /* The enrollment queue:
* - new devices will be added to the end of the array. * - new devices will be added to the end of the array.
@ -199,7 +190,7 @@ var AuthRobot = new Lang.Class({
this._enrolling = true; this._enrolling = true;
GLib.idle_add(GLib.PRIORITY_DEFAULT, GLib.idle_add(GLib.PRIORITY_DEFAULT,
this._enrollDevicesIdle.bind(this)); this._enrollDevicesIdle.bind(this));
}, }
_onEnrollDone(device, error) { _onEnrollDone(device, error) {
if (error) if (error)
@ -214,7 +205,7 @@ var AuthRobot = new Lang.Class({
if (this._enrolling) if (this._enrolling)
GLib.idle_add(GLib.PRIORITY_DEFAULT, GLib.idle_add(GLib.PRIORITY_DEFAULT,
this._enrollDevicesIdle.bind(this)); this._enrollDevicesIdle.bind(this));
}, }
_enrollDevicesIdle() { _enrollDevicesIdle() {
let devices = this._devicesToEnroll; let devices = this._devicesToEnroll;
@ -228,19 +219,14 @@ var AuthRobot = new Lang.Class({
this._onEnrollDone.bind(this)); this._onEnrollDone.bind(this));
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
} }
};
});
Signals.addSignalMethods(AuthRobot.prototype); Signals.addSignalMethods(AuthRobot.prototype);
/* eof client.js */ /* eof client.js */
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'ThunderboltIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._indicator = this._addIndicator(); this._indicator = this._addIndicator();
this._indicator.icon_name = 'thunderbolt-symbolic'; 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())); log('Failed to get PolKit permission: %s'.format(e.toString()));
} }
}); });
}, }
_onDestroy() { _onDestroy() {
this._robot.close(); this._robot.close();
this._client.close(); this._client.close();
}, }
_ensureSource() { _ensureSource() {
if (!this._source) { if (!this._source) {
@ -283,7 +269,7 @@ var Indicator = new Lang.Class({
} }
return this._source; return this._source;
}, }
_notify(title, body) { _notify(title, body) {
if (this._notification) if (this._notification)
@ -302,14 +288,13 @@ var Indicator = new Lang.Class({
app.activate(); app.activate();
}); });
this._source.notify(this._notification); this._source.notify(this._notification);
}, }
/* Session callbacks */ /* Session callbacks */
_sync() { _sync() {
let active = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; let active = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this._indicator.visible = active && this._client.probing; this._indicator.visible = active && this._client.probing;
}, }
/* Bolt.Client callbacks */ /* Bolt.Client callbacks */
_onProbing(cli, probing) { _onProbing(cli, probing) {
@ -319,8 +304,7 @@ var Indicator = new Lang.Class({
this._indicator.icon_name = 'thunderbolt-symbolic'; this._indicator.icon_name = 'thunderbolt-symbolic';
this._sync(); this._sync();
}, }
/* AuthRobot callbacks */ /* AuthRobot callbacks */
_onEnrollDevice(obj, device, policy) { _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."); const body = _("New device has been detected and needs to be authorized by an administrator.");
this._notify(title, body); this._notify(title, body);
} }
}, }
_onEnrollFailed(obj, device, error) { _onEnrollFailed(obj, device, error) {
const title = _("Thunderbolt authorization error"); const title = _("Thunderbolt authorization error");
const body = _("Could not authorize the Thunderbolt device: %s".format(error.message)); const body = _("Could not authorize the Thunderbolt device: %s".format(error.message));
this._notify(title, body); this._notify(title, body);
} }
};
});

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const Lang = imports.lang;
const Gio = imports.gi.Gio; const Gio = imports.gi.Gio;
const Gvc = imports.gi.Gvc; const Gvc = imports.gi.Gvc;
const St = imports.gi.St; const St = imports.gi.St;
@ -29,10 +28,8 @@ function getMixerControl() {
return _mixerControl; return _mixerControl;
} }
var StreamSlider = new Lang.Class({ var StreamSlider = class {
Name: 'StreamSlider', constructor(control) {
_init(control) {
this._control = control; this._control = control;
this.item = new PopupMenu.PopupBaseMenuItem({ activate: false }); this.item = new PopupMenu.PopupBaseMenuItem({ activate: false });
@ -58,11 +55,11 @@ var StreamSlider = new Lang.Class({
this._stream = null; this._stream = null;
this._volumeCancellable = null; this._volumeCancellable = null;
}, }
get stream() { get stream() {
return this._stream; return this._stream;
}, }
set stream(stream) { set stream(stream) {
if (this._stream) { if (this._stream) {
@ -79,37 +76,37 @@ var StreamSlider = new Lang.Class({
} }
this._updateVisibility(); this._updateVisibility();
}, }
_disconnectStream(stream) { _disconnectStream(stream) {
stream.disconnect(this._mutedChangedId); stream.disconnect(this._mutedChangedId);
this._mutedChangedId = 0; this._mutedChangedId = 0;
stream.disconnect(this._volumeChangedId); stream.disconnect(this._volumeChangedId);
this._volumeChangedId = 0; this._volumeChangedId = 0;
}, }
_connectStream(stream) { _connectStream(stream) {
this._mutedChangedId = stream.connect('notify::is-muted', this._updateVolume.bind(this)); this._mutedChangedId = stream.connect('notify::is-muted', this._updateVolume.bind(this));
this._volumeChangedId = stream.connect('notify::volume', this._updateVolume.bind(this)); this._volumeChangedId = stream.connect('notify::volume', this._updateVolume.bind(this));
}, }
_shouldBeVisible() { _shouldBeVisible() {
return this._stream != null; return this._stream != null;
}, }
_updateVisibility() { _updateVisibility() {
let visible = this._shouldBeVisible(); let visible = this._shouldBeVisible();
this.item.actor.visible = visible; this.item.actor.visible = visible;
}, }
scroll(event) { scroll(event) {
return this._slider.scroll(event); return this._slider.scroll(event);
}, }
setValue(value) { setValue(value) {
// piggy-back off of sliderChanged // piggy-back off of sliderChanged
this._slider.setValue(value); this._slider.setValue(value);
}, }
_sliderChanged(slider, value, property) { _sliderChanged(slider, value, property) {
if (!this._stream) if (!this._stream)
@ -127,7 +124,7 @@ var StreamSlider = new Lang.Class({
this._stream.change_is_muted(false); this._stream.change_is_muted(false);
} }
this._stream.push_volume(); this._stream.push_volume();
}, }
_notifyVolumeChange() { _notifyVolumeChange() {
if (this._volumeCancellable) if (this._volumeCancellable)
@ -138,13 +135,13 @@ var StreamSlider = new Lang.Class({
player.play_from_theme('audio-volume-change', player.play_from_theme('audio-volume-change',
_("Volume changed"), _("Volume changed"),
this._volumeCancellable); this._volumeCancellable);
}, }
_updateVolume() { _updateVolume() {
let muted = this._stream.is_muted; let muted = this._stream.is_muted;
this._slider.setValue(muted ? 0 : (this._stream.volume / this._control.get_vol_max_norm())); this._slider.setValue(muted ? 0 : (this._stream.volume / this._control.get_vol_max_norm()));
this.emit('stream-updated'); this.emit('stream-updated');
}, }
_amplifySettingsChanged() { _amplifySettingsChanged() {
this._allowAmplified = this._soundSettings.get_boolean(ALLOW_AMPLIFIED_VOLUME_KEY); this._allowAmplified = this._soundSettings.get_boolean(ALLOW_AMPLIFIED_VOLUME_KEY);
@ -156,7 +153,7 @@ var StreamSlider = new Lang.Class({
if (this._stream) if (this._stream)
this._updateVolume(); this._updateVolume();
}, }
getIcon() { getIcon() {
if (!this._stream) if (!this._stream)
@ -180,14 +177,14 @@ var StreamSlider = new Lang.Class({
n = 4; n = 4;
} }
return icons[n]; return icons[n];
}, }
getLevel() { getLevel() {
if (!this._stream) if (!this._stream)
return null; return null;
return 100 * this._stream.volume / this._control.get_vol_max_norm(); return 100 * this._stream.volume / this._control.get_vol_max_norm();
}, }
getMaxLevel() { getMaxLevel() {
let maxVolume = this._control.get_vol_max_norm(); 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(); return 100 * maxVolume / this._control.get_vol_max_norm();
} }
}); };
Signals.addSignalMethods(StreamSlider.prototype); Signals.addSignalMethods(StreamSlider.prototype);
var OutputStreamSlider = new Lang.Class({ var OutputStreamSlider = class extends StreamSlider {
Name: 'OutputStreamSlider', constructor(control) {
Extends: StreamSlider, super(control);
_init(control) {
this.parent(control);
this._slider.actor.accessible_name = _("Volume"); this._slider.actor.accessible_name = _("Volume");
}, }
_connectStream(stream) { _connectStream(stream) {
this.parent(stream); super._connectStream(stream);
this._portChangedId = stream.connect('notify::port', this._portChanged.bind(this)); this._portChangedId = stream.connect('notify::port', this._portChanged.bind(this));
this._portChanged(); this._portChanged();
}, }
_findHeadphones(sink) { _findHeadphones(sink) {
// This only works for external headphones (e.g. bluetooth) // 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 sink.get_port().port.indexOf('headphone') >= 0;
return false; return false;
}, }
_disconnectStream(stream) { _disconnectStream(stream) {
this.parent(stream); super._disconnectStream(stream);
stream.disconnect(this._portChangedId); stream.disconnect(this._portChangedId);
this._portChangedId = 0; this._portChangedId = 0;
}, }
_updateSliderIcon() { _updateSliderIcon() {
this._icon.icon_name = (this._hasHeadphones ? this._icon.icon_name = (this._hasHeadphones ?
'audio-headphones-symbolic' : 'audio-headphones-symbolic' :
'audio-speakers-symbolic'); 'audio-speakers-symbolic');
}, }
_portChanged() { _portChanged() {
let hasHeadphones = this._findHeadphones(this._stream); let hasHeadphones = this._findHeadphones(this._stream);
@ -248,24 +242,21 @@ var OutputStreamSlider = new Lang.Class({
this._updateSliderIcon(); this._updateSliderIcon();
} }
} }
}); };
var InputStreamSlider = new Lang.Class({ var InputStreamSlider = class extends StreamSlider {
Name: 'InputStreamSlider', constructor(control) {
Extends: StreamSlider, super(control);
_init(control) {
this.parent(control);
this._slider.actor.accessible_name = _("Microphone"); this._slider.actor.accessible_name = _("Microphone");
this._control.connect('stream-added', this._maybeShowInput.bind(this)); this._control.connect('stream-added', this._maybeShowInput.bind(this));
this._control.connect('stream-removed', this._maybeShowInput.bind(this)); this._control.connect('stream-removed', this._maybeShowInput.bind(this));
this._icon.icon_name = 'audio-input-microphone-symbolic'; this._icon.icon_name = 'audio-input-microphone-symbolic';
}, }
_connectStream(stream) { _connectStream(stream) {
this.parent(stream); super._connectStream(stream);
this._maybeShowInput(); this._maybeShowInput();
}, }
_maybeShowInput() { _maybeShowInput() {
// only show input widgets if any application is recording audio // only show input widgets if any application is recording audio
@ -286,19 +277,16 @@ var InputStreamSlider = new Lang.Class({
this._showInput = showInput; this._showInput = showInput;
this._updateVisibility(); this._updateVisibility();
}, }
_shouldBeVisible() { _shouldBeVisible() {
return this.parent() && this._showInput; return super._shouldBeVisible() && this._showInput;
} }
}); };
var VolumeMenu = new Lang.Class({ var VolumeMenu = class extends PopupMenu.PopupMenuSection {
Name: 'VolumeMenu', constructor(control) {
Extends: PopupMenu.PopupMenuSection, super();
_init(control) {
this.parent();
this.hasHeadphones = false; this.hasHeadphones = false;
@ -319,11 +307,11 @@ var VolumeMenu = new Lang.Class({
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this._onControlStateChanged(); this._onControlStateChanged();
}, }
scroll(event) { scroll(event) {
return this._output.scroll(event); return this._output.scroll(event);
}, }
_onControlStateChanged() { _onControlStateChanged() {
if (this._control.get_state() == Gvc.MixerControlState.READY) { if (this._control.get_state() == Gvc.MixerControlState.READY) {
@ -332,35 +320,32 @@ var VolumeMenu = new Lang.Class({
} else { } else {
this.emit('icon-changed'); this.emit('icon-changed');
} }
}, }
_readOutput() { _readOutput() {
this._output.stream = this._control.get_default_sink(); this._output.stream = this._control.get_default_sink();
}, }
_readInput() { _readInput() {
this._input.stream = this._control.get_default_source(); this._input.stream = this._control.get_default_source();
}, }
getIcon() { getIcon() {
return this._output.getIcon(); return this._output.getIcon();
}, }
getLevel() { getLevel() {
return this._output.getLevel(); return this._output.getLevel();
}, }
getMaxLevel() { getMaxLevel() {
return this._output.getMaxLevel(); return this._output.getMaxLevel();
} }
}); };
var Indicator = new Lang.Class({ var Indicator = class extends PanelMenu.SystemIndicator {
Name: 'VolumeIndicator', constructor() {
Extends: PanelMenu.SystemIndicator, super();
_init() {
this.parent();
this._primaryIndicator = this._addIndicator(); this._primaryIndicator = this._addIndicator();
@ -380,7 +365,7 @@ var Indicator = new Lang.Class({
this.menu.addMenuItem(this._volumeMenu); this.menu.addMenuItem(this._volumeMenu);
this.indicators.connect('scroll-event', this._onScrollEvent.bind(this)); this.indicators.connect('scroll-event', this._onScrollEvent.bind(this));
}, }
_onScrollEvent(actor, event) { _onScrollEvent(actor, event) {
let result = this._volumeMenu.scroll(event); let result = this._volumeMenu.scroll(event);
@ -393,4 +378,4 @@ var Indicator = new Lang.Class({
Main.osdWindowManager.show(-1, gicon, null, level, maxLevel); Main.osdWindowManager.show(-1, gicon, null, level, maxLevel);
return result; return result;
} }
}); };

View File

@ -3,7 +3,6 @@
const Clutter = imports.gi.Clutter; const Clutter = imports.gi.Clutter;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Mainloop = imports.mainloop; const Mainloop = imports.mainloop;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const St = imports.gi.St; 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 // time updates; even better is to pay attention to the vertical
// vblank and sync to that when possible.) // vblank and sync to that when possible.)
// //
var ClutterFrameTicker = new Lang.Class({ var ClutterFrameTicker = class {
Name: 'ClutterFrameTicker', constructor() {
FRAME_RATE : 60,
_init() {
// We don't have a finite duration; tweener will tell us to stop // 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 // when we need to stop, so use 1000 seconds as "infinity", and
// set the timeline to loop. Doing this means we have to track // 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", perf_log.define_event("tweener.framePrepareDone",
"Finished preparing frame", "Finished preparing frame",
""); "");
}, }
get FRAME_RATE() {
return 60;
}
_onNewFrame(frame) { _onNewFrame(frame) {
// If there is a lot of setup to start the animation, then // 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"); perf_log.event("tweener.framePrepareStart");
this.emit('prepare-frame'); this.emit('prepare-frame');
perf_log.event("tweener.framePrepareDone"); perf_log.event("tweener.framePrepareDone");
}, }
getTime() { getTime() {
return this._currentTime; return this._currentTime;
}, }
start() { start() {
if (St.get_slow_down_factor() > 0) if (St.get_slow_down_factor() > 0)
Tweener.setTimeScale(1 / St.get_slow_down_factor()); Tweener.setTimeScale(1 / St.get_slow_down_factor());
this._timeline.start(); this._timeline.start();
global.begin_work(); global.begin_work();
}, }
stop() { stop() {
this._timeline.stop(); this._timeline.stop();
@ -225,6 +224,5 @@ var ClutterFrameTicker = new Lang.Class({
this._currentTime = -1; this._currentTime = -1;
global.end_work(); global.end_work();
} }
}); };
Signals.addSignalMethods(ClutterFrameTicker.prototype); Signals.addSignalMethods(ClutterFrameTicker.prototype);

View File

@ -8,7 +8,6 @@ const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib; const GLib = imports.gi.GLib;
const GnomeDesktop = imports.gi.GnomeDesktop; const GnomeDesktop = imports.gi.GnomeDesktop;
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const Signals = imports.signals; const Signals = imports.signals;
const Shell = imports.gi.Shell; 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) // The timeout before going back automatically to the lock screen (in seconds)
const IDLE_TIMEOUT = 2 * 60; const IDLE_TIMEOUT = 2 * 60;
var UnlockDialog = new Lang.Class({ var UnlockDialog = class {
Name: 'UnlockDialog', constructor(parentActor) {
_init(parentActor) {
this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW, this.actor = new St.Widget({ accessible_role: Atk.Role.WINDOW,
style_class: 'login-dialog', style_class: 'login-dialog',
layout_manager: new Clutter.BoxLayout(), layout_manager: new Clutter.BoxLayout(),
@ -85,7 +82,7 @@ var UnlockDialog = new Lang.Class({
this._idleMonitor = Meta.IdleMonitor.get_core(); this._idleMonitor = Meta.IdleMonitor.get_core();
this._idleWatchId = this._idleMonitor.add_idle_watch(IDLE_TIMEOUT * 1000, this._escape.bind(this)); this._idleWatchId = this._idleMonitor.add_idle_watch(IDLE_TIMEOUT * 1000, this._escape.bind(this));
}, }
_updateSensitivity(sensitive) { _updateSensitivity(sensitive) {
this._authPrompt.updateSensitivity(sensitive); this._authPrompt.updateSensitivity(sensitive);
@ -94,11 +91,11 @@ var UnlockDialog = new Lang.Class({
this._otherUserButton.reactive = sensitive; this._otherUserButton.reactive = sensitive;
this._otherUserButton.can_focus = sensitive; this._otherUserButton.can_focus = sensitive;
} }
}, }
_fail() { _fail() {
this.emit('failed'); this.emit('failed');
}, }
_onReset(authPrompt, beginRequest) { _onReset(authPrompt, beginRequest) {
let userName; let userName;
@ -110,18 +107,18 @@ var UnlockDialog = new Lang.Class({
} }
this._authPrompt.begin({ userName: userName }); this._authPrompt.begin({ userName: userName });
}, }
_escape() { _escape() {
if (this.allowCancel) if (this.allowCancel)
this._authPrompt.cancel(); this._authPrompt.cancel();
}, }
_otherUserClicked(button, event) { _otherUserClicked(button, event) {
Gdm.goto_login_session_sync(null); Gdm.goto_login_session_sync(null);
this._authPrompt.cancel(); this._authPrompt.cancel();
}, }
destroy() { destroy() {
this.popModal(); this.popModal();
@ -131,21 +128,21 @@ var UnlockDialog = new Lang.Class({
this._idleMonitor.remove_watch(this._idleWatchId); this._idleMonitor.remove_watch(this._idleWatchId);
this._idleWatchId = 0; this._idleWatchId = 0;
} }
}, }
cancel() { cancel() {
this._authPrompt.cancel(); this._authPrompt.cancel();
this.destroy(); this.destroy();
}, }
addCharacter(unichar) { addCharacter(unichar) {
this._authPrompt.addCharacter(unichar); this._authPrompt.addCharacter(unichar);
}, }
finish(onComplete) { finish(onComplete) {
this._authPrompt.finish(onComplete); this._authPrompt.finish(onComplete);
}, }
open(timestamp) { open(timestamp) {
this.actor.show(); this.actor.show();
@ -160,7 +157,7 @@ var UnlockDialog = new Lang.Class({
this._isModal = true; this._isModal = true;
return true; return true;
}, }
popModal(timestamp) { popModal(timestamp) {
if (this._isModal) { if (this._isModal) {
@ -168,5 +165,5 @@ var UnlockDialog = new Lang.Class({
this._isModal = false; this._isModal = false;
} }
} }
}); };
Signals.addSignalMethods(UnlockDialog.prototype); Signals.addSignalMethods(UnlockDialog.prototype);

View File

@ -19,10 +19,8 @@ var AVATAR_ICON_SIZE = 64;
// Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>. // Copyright (C) 2004-2005 James M. Cape <jcape@ignore-your.tv>.
// Copyright (C) 2008,2009 Red Hat, Inc. // Copyright (C) 2008,2009 Red Hat, Inc.
var Avatar = new Lang.Class({ var Avatar = class {
Name: 'Avatar', constructor(user, params) {
_init(user, params) {
this._user = user; this._user = user;
params = Params.parse(params, { reactive: false, params = Params.parse(params, { reactive: false,
iconSize: AVATAR_ICON_SIZE, 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. // Monitor the scaling factor to make sure we recreate the avatar when needed.
let themeContext = St.ThemeContext.get_for_stage(global.stage); let themeContext = St.ThemeContext.get_for_stage(global.stage);
themeContext.connect('notify::scale-factor', this.update.bind(this)); themeContext.connect('notify::scale-factor', this.update.bind(this));
}, }
setSensitive(sensitive) { setSensitive(sensitive) {
this.actor.can_focus = sensitive; this.actor.can_focus = sensitive;
this.actor.reactive = sensitive; this.actor.reactive = sensitive;
}, }
update() { update() {
let iconFile = this._user.get_icon_file(); 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; let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
this.actor.set_size(this._iconSize * scaleFactor, this._iconSize * scaleFactor); this.actor.set_size(this._iconSize * scaleFactor, this._iconSize * scaleFactor);
} }
}); };
var UserWidgetLabel = new Lang.Class({ var UserWidgetLabel = new Lang.Class({
Name: 'UserWidgetLabel', Name: 'UserWidgetLabel',
@ -151,10 +149,8 @@ var UserWidgetLabel = new Lang.Class({
}, },
}); });
var UserWidget = new Lang.Class({ var UserWidget = class {
Name: 'UserWidget', constructor(user) {
_init(user) {
this._user = user; this._user = user;
this.actor = new St.BoxLayout({ style_class: 'user-widget', 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._userLoadedId = this._user.connect('notify::is-loaded', this._updateUser.bind(this));
this._userChangedId = this._user.connect('changed', this._updateUser.bind(this)); this._userChangedId = this._user.connect('changed', this._updateUser.bind(this));
this._updateUser(); this._updateUser();
}, }
_onDestroy() { _onDestroy() {
if (this._userLoadedId != 0) { if (this._userLoadedId != 0) {
@ -185,9 +181,9 @@ var UserWidget = new Lang.Class({
this._user.disconnect(this._userChangedId); this._user.disconnect(this._userChangedId);
this._userChangedId = 0; this._userChangedId = 0;
} }
}, }
_updateUser() { _updateUser() {
this._avatar.update(); this._avatar.update();
} }
}); };

View File

@ -53,12 +53,10 @@ function getTermsForSearchString(searchString) {
return terms; return terms;
} }
var TouchpadShowOverviewAction = new Lang.Class({ var TouchpadShowOverviewAction = class {
Name: 'TouchpadShowOverviewAction', constructor(actor) {
_init(actor) {
actor.connect('captured-event', this._handleEvent.bind(this)); actor.connect('captured-event', this._handleEvent.bind(this));
}, }
_handleEvent(actor, event) { _handleEvent(actor, event) {
if (event.type() != Clutter.EventType.TOUCHPAD_PINCH) if (event.type() != Clutter.EventType.TOUCHPAD_PINCH)
@ -72,7 +70,7 @@ var TouchpadShowOverviewAction = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
}); };
Signals.addSignalMethods(TouchpadShowOverviewAction.prototype); Signals.addSignalMethods(TouchpadShowOverviewAction.prototype);
var ShowOverviewAction = new Lang.Class({ var ShowOverviewAction = new Lang.Class({
@ -138,10 +136,8 @@ var ShowOverviewAction = new Lang.Class({
} }
}); });
var ViewSelector = new Lang.Class({ var ViewSelector = class {
Name: 'ViewSelector', constructor(searchEntry, showAppsButton) {
_init(searchEntry, showAppsButton) {
this.actor = new Shell.Stack({ name: 'viewSelector' }); this.actor = new Shell.Stack({ name: 'viewSelector' });
this._showAppsButton = showAppsButton; this._showAppsButton = showAppsButton;
@ -263,22 +259,22 @@ var ViewSelector = new Lang.Class({
gesture = new TouchpadShowOverviewAction(global.stage); gesture = new TouchpadShowOverviewAction(global.stage);
gesture.connect('activated', this._pinchGestureActivated.bind(this)); gesture.connect('activated', this._pinchGestureActivated.bind(this));
}, }
_pinchGestureActivated(action, scale) { _pinchGestureActivated(action, scale) {
if (scale < PINCH_GESTURE_THRESHOLD) if (scale < PINCH_GESTURE_THRESHOLD)
Main.overview.show(); Main.overview.show();
}, }
_toggleAppsPage() { _toggleAppsPage() {
this._showAppsButton.checked = !this._showAppsButton.checked; this._showAppsButton.checked = !this._showAppsButton.checked;
Main.overview.show(); Main.overview.show();
}, }
showApps() { showApps() {
this._showAppsButton.checked = true; this._showAppsButton.checked = true;
Main.overview.show(); Main.overview.show();
}, }
show() { show() {
this.reset(); this.reset();
@ -291,7 +287,7 @@ var ViewSelector = new Lang.Class({
if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows()) if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows())
Main.overview.fadeOutDesktop(); Main.overview.fadeOutDesktop();
}, }
animateFromOverview() { animateFromOverview() {
// Make sure workspace page is fully visible to allow // Make sure workspace page is fully visible to allow
@ -304,16 +300,16 @@ var ViewSelector = new Lang.Class({
if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows()) if (!this._workspacesDisplay.activeWorkspaceHasMaximizedWindows())
Main.overview.fadeInDesktop(); Main.overview.fadeInDesktop();
}, }
setWorkspacesFullGeometry(geom) { setWorkspacesFullGeometry(geom) {
this._workspacesDisplay.setWorkspacesFullGeometry(geom); this._workspacesDisplay.setWorkspacesFullGeometry(geom);
}, }
hide() { hide() {
this.reset(); this.reset();
this._workspacesDisplay.hide(); this._workspacesDisplay.hide();
}, }
_addPage(actor, name, a11yIcon, params) { _addPage(actor, name, a11yIcon, params) {
params = Params.parse(params, { a11yFocus: null }); params = Params.parse(params, { a11yFocus: null });
@ -335,7 +331,7 @@ var ViewSelector = new Lang.Class({
page.hide(); page.hide();
this.actor.add_actor(page); this.actor.add_actor(page);
return page; return page;
}, }
_fadePageIn() { _fadePageIn() {
Tweener.addTween(this._activePage, Tweener.addTween(this._activePage,
@ -343,7 +339,7 @@ var ViewSelector = new Lang.Class({
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME, time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
}, }
_fadePageOut(page) { _fadePageOut(page) {
let oldPage = page; let oldPage = page;
@ -355,7 +351,7 @@ var ViewSelector = new Lang.Class({
this._animateIn(oldPage); this._animateIn(oldPage);
} }
}); });
}, }
_animateIn(oldPage) { _animateIn(oldPage) {
if (oldPage) if (oldPage)
@ -372,7 +368,7 @@ var ViewSelector = new Lang.Class({
} else { } else {
this._fadePageIn(); this._fadePageIn();
} }
}, }
_animateOut(page) { _animateOut(page) {
let oldPage = page; let oldPage = page;
@ -385,7 +381,7 @@ var ViewSelector = new Lang.Class({
} else { } else {
this._fadePageOut(page); this._fadePageOut(page);
} }
}, }
_showPage(page) { _showPage(page) {
if (!Main.overview.visible) if (!Main.overview.visible)
@ -402,17 +398,17 @@ var ViewSelector = new Lang.Class({
this._animateOut(oldPage) this._animateOut(oldPage)
else else
this._animateIn(); this._animateIn();
}, }
_a11yFocusPage(page) { _a11yFocusPage(page) {
this._showAppsButton.checked = page == this._appsPage; this._showAppsButton.checked = page == this._appsPage;
page.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false); page.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
}, }
_onShowAppsButtonToggled() { _onShowAppsButtonToggled() {
this._showPage(this._showAppsButton.checked ? this._showPage(this._showAppsButton.checked ?
this._appsPage : this._workspacesPage); this._appsPage : this._workspacesPage);
}, }
_onStageKeyPress(actor, event) { _onStageKeyPress(actor, event) {
// Ignore events while anything but the overview has // Ignore events while anything but the overview has
@ -443,7 +439,7 @@ var ViewSelector = new Lang.Class({
} }
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_searchCancelled() { _searchCancelled() {
this._showPage(this._showAppsButton.checked ? this._appsPage 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) */ // (https://bugzilla.gnome.org/show_bug.cgi?id=636341) */
if (this._text.text != '') if (this._text.text != '')
this.reset(); this.reset();
}, }
reset() { reset() {
// Don't drop the key focus on Clutter's side if anything but the // 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_cursor_visible(true);
this._text.set_selection(0, 0); this._text.set_selection(0, 0);
}, }
_onStageKeyFocusChanged() { _onStageKeyFocusChanged() {
let focus = global.stage.get_key_focus(); let focus = global.stage.get_key_focus();
@ -483,7 +479,7 @@ var ViewSelector = new Lang.Class({
this._entry.add_style_pseudo_class('focus'); this._entry.add_style_pseudo_class('focus');
else else
this._entry.remove_style_pseudo_class('focus'); this._entry.remove_style_pseudo_class('focus');
}, }
_onMapped() { _onMapped() {
if (this._entry.mapped) { if (this._entry.mapped) {
@ -498,7 +494,7 @@ var ViewSelector = new Lang.Class({
global.stage.disconnect(this._capturedEventId); global.stage.disconnect(this._capturedEventId);
this._capturedEventId = 0; this._capturedEventId = 0;
} }
}, }
_shouldTriggerSearch(symbol) { _shouldTriggerSearch(symbol) {
if (symbol == Clutter.Multi_key) if (symbol == Clutter.Multi_key)
@ -515,7 +511,7 @@ var ViewSelector = new Lang.Class({
return true; return true;
return false; return false;
}, }
startSearch(event) { startSearch(event) {
global.stage.set_key_focus(this._text); global.stage.set_key_focus(this._text);
@ -523,12 +519,12 @@ var ViewSelector = new Lang.Class({
let synthEvent = event.copy(); let synthEvent = event.copy();
synthEvent.set_source(this._text); synthEvent.set_source(this._text);
this._text.event(synthEvent, false); this._text.event(synthEvent, false);
}, }
// the entry does not show the hint // the entry does not show the hint
_isActivated() { _isActivated() {
return this._text.text == this._entry.get_text(); return this._text.text == this._entry.get_text();
}, }
_onTextChanged(se, prop) { _onTextChanged(se, prop) {
let terms = getTermsForSearchString(this._entry.get_text()); let terms = getTermsForSearchString(this._entry.get_text());
@ -553,7 +549,7 @@ var ViewSelector = new Lang.Class({
this._entry.set_secondary_icon(null); this._entry.set_secondary_icon(null);
this._searchCancelled(); this._searchCancelled();
} }
}, }
_onKeyPress(entry, event) { _onKeyPress(entry, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
@ -592,7 +588,7 @@ var ViewSelector = new Lang.Class({
} }
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
_onCapturedEvent(actor, event) { _onCapturedEvent(actor, event) {
if (event.type() == Clutter.EventType.BUTTON_PRESS) { if (event.type() == Clutter.EventType.BUTTON_PRESS) {
@ -609,7 +605,7 @@ var ViewSelector = new Lang.Class({
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, }
getActivePage() { getActivePage() {
if (this._activePage == this._workspacesPage) if (this._activePage == this._workspacesPage)
@ -618,7 +614,7 @@ var ViewSelector = new Lang.Class({
return ViewPage.APPS; return ViewPage.APPS;
else else
return ViewPage.SEARCH; return ViewPage.SEARCH;
}, }
fadeIn() { fadeIn() {
let actor = this._activePage; let actor = this._activePage;
@ -626,7 +622,7 @@ var ViewSelector = new Lang.Class({
time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / 2, time: OverviewControls.SIDE_CONTROLS_ANIMATION_TIME / 2,
transition: 'easeInQuad' transition: 'easeInQuad'
}); });
}, }
fadeHalf() { fadeHalf() {
let actor = this._activePage; let actor = this._activePage;
@ -635,5 +631,5 @@ var ViewSelector = new Lang.Class({
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
} }
}); };
Signals.addSignalMethods(ViewSelector.prototype); Signals.addSignalMethods(ViewSelector.prototype);

View File

@ -1,27 +1,24 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const Lang = imports.lang;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
const Main = imports.ui.main; const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray; const MessageTray = imports.ui.messageTray;
var WindowAttentionHandler = new Lang.Class({ var WindowAttentionHandler = class {
Name: 'WindowAttentionHandler', constructor() {
_init() {
this._tracker = Shell.WindowTracker.get_default(); this._tracker = Shell.WindowTracker.get_default();
this._windowDemandsAttentionId = global.display.connect('window-demands-attention', this._windowDemandsAttentionId = global.display.connect('window-demands-attention',
this._onWindowDemandsAttention.bind(this)); this._onWindowDemandsAttention.bind(this));
this._windowMarkedUrgentId = global.display.connect('window-marked-urgent', this._windowMarkedUrgentId = global.display.connect('window-marked-urgent',
this._onWindowDemandsAttention.bind(this)); this._onWindowDemandsAttention.bind(this));
}, }
_getTitleAndBanner(app, window) { _getTitleAndBanner(app, window) {
let title = app.get_name(); let title = app.get_name();
let banner = _("“%s” is ready").format(window.get_title()); let banner = _("“%s” is ready").format(window.get_title());
return [title, banner] return [title, banner]
}, }
_onWindowDemandsAttention(display, window) { _onWindowDemandsAttention(display, window) {
// We don't want to show the notification when the window is already focused, // 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); notification.update(title, banner);
})); }));
} }
}); };
var Source = new Lang.Class({ var Source = class WindowAttentionSource extends MessageTray.Source {
Name: 'WindowAttentionSource', constructor(app, window) {
Extends: MessageTray.Source, super(app.get_name());
_init(app, window) {
this._window = window; this._window = window;
this._app = app; this._app = app;
this.parent(app.get_name());
this.signalIDs = []; this.signalIDs = [];
this.signalIDs.push(this._window.connect('notify::demands-attention', this.signalIDs.push(this._window.connect('notify::demands-attention',
this._sync.bind(this))); this._sync.bind(this)));
@ -77,20 +71,20 @@ var Source = new Lang.Class({
() => { this.destroy(); })); () => { this.destroy(); }));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
}, }
_sync() { _sync() {
if (this._window.demands_attention || this._window.urgent) if (this._window.demands_attention || this._window.urgent)
return; return;
this.destroy(); this.destroy();
}, }
_onDestroy() { _onDestroy() {
for(let i = 0; i < this.signalIDs.length; i++) { for(let i = 0; i < this.signalIDs.length; i++) {
this._window.disconnect(this.signalIDs[i]); this._window.disconnect(this.signalIDs[i]);
} }
this.signalIDs = []; this.signalIDs = [];
}, }
_createPolicy() { _createPolicy() {
if (this._app && this._app.get_app_info()) { if (this._app && this._app.get_app_info()) {
@ -99,14 +93,14 @@ var Source = new Lang.Class({
} else { } else {
return new MessageTray.NotificationGenericPolicy(); return new MessageTray.NotificationGenericPolicy();
} }
}, }
createIcon(size) { createIcon(size) {
return this._app.create_icon_texture(size); return this._app.create_icon_texture(size);
}, }
open() { open() {
Main.activateWindow(this._window); Main.activateWindow(this._window);
this.destroy(); this.destroy();
} }
}); };

View File

@ -47,12 +47,9 @@ const GSD_WACOM_OBJECT_PATH = '/org/gnome/SettingsDaemon/Wacom';
const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom'); const GsdWacomIface = loadInterfaceXML('org.gnome.SettingsDaemon.Wacom');
const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface); const GsdWacomProxy = Gio.DBusProxy.makeProxyWrapper(GsdWacomIface);
var DisplayChangeDialog = new Lang.Class({ var DisplayChangeDialog = class extends ModalDialog.ModalDialog {
Name: 'DisplayChangeDialog', constructor(wm) {
Extends: ModalDialog.ModalDialog, super({ styleClass: 'prompt-dialog' });
_init(wm) {
this.parent({ styleClass: 'prompt-dialog' });
this._wm = wm; this._wm = wm;
@ -81,7 +78,7 @@ var DisplayChangeDialog = new Lang.Class({
this._timeoutId = Mainloop.timeout_add(ONE_SECOND, this._tick.bind(this)); this._timeoutId = Mainloop.timeout_add(ONE_SECOND, this._tick.bind(this));
GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick'); GLib.Source.set_name_by_id(this._timeoutId, '[gnome-shell] this._tick');
}, }
close(timestamp) { close(timestamp) {
if (this._timeoutId > 0) { if (this._timeoutId > 0) {
@ -89,14 +86,14 @@ var DisplayChangeDialog = new Lang.Class({
this._timeoutId = 0; this._timeoutId = 0;
} }
this.parent(timestamp); super.close(timestamp);
}, }
_formatCountDown() { _formatCountDown() {
let fmt = ngettext("Settings changes will revert in %d second", let fmt = ngettext("Settings changes will revert in %d second",
"Settings changes will revert in %d seconds"); "Settings changes will revert in %d seconds");
return fmt.format(this._countDown); return fmt.format(this._countDown);
}, }
_tick() { _tick() {
this._countDown--; this._countDown--;
@ -110,50 +107,48 @@ var DisplayChangeDialog = new Lang.Class({
this._content.body = this._formatCountDown(); this._content.body = this._formatCountDown();
return GLib.SOURCE_CONTINUE; return GLib.SOURCE_CONTINUE;
}, }
_onFailure() { _onFailure() {
this._wm.complete_display_change(false); this._wm.complete_display_change(false);
this.close(); this.close();
}, }
_onSuccess() { _onSuccess() {
this._wm.complete_display_change(true); this._wm.complete_display_change(true);
this.close(); this.close();
}, }
}); };
var WindowDimmer = new Lang.Class({ var WindowDimmer = class {
Name: 'WindowDimmer', constructor(actor) {
_init(actor) {
this._brightnessEffect = new Clutter.BrightnessContrastEffect(); this._brightnessEffect = new Clutter.BrightnessContrastEffect();
actor.add_effect(this._brightnessEffect); actor.add_effect(this._brightnessEffect);
this.actor = actor; this.actor = actor;
this._enabled = true; this._enabled = true;
this._dimFactor = 0.0; this._dimFactor = 0.0;
this._syncEnabled(); this._syncEnabled();
}, }
_syncEnabled() { _syncEnabled() {
this._brightnessEffect.enabled = (this._enabled && this._dimFactor > 0); this._brightnessEffect.enabled = (this._enabled && this._dimFactor > 0);
}, }
setEnabled(enabled) { setEnabled(enabled) {
this._enabled = enabled; this._enabled = enabled;
this._syncEnabled(); this._syncEnabled();
}, }
set dimFactor(factor) { set dimFactor(factor) {
this._dimFactor = factor; this._dimFactor = factor;
this._brightnessEffect.set_brightness(factor * DIM_BRIGHTNESS); this._brightnessEffect.set_brightness(factor * DIM_BRIGHTNESS);
this._syncEnabled(); this._syncEnabled();
}, }
get dimFactor() { get dimFactor() {
return this._dimFactor; return this._dimFactor;
} }
}); };
function getWindowDimmer(actor) { function getWindowDimmer(actor) {
let enabled = Meta.prefs_get_attach_modal_dialogs(); let enabled = Meta.prefs_get_attach_modal_dialogs();
@ -177,10 +172,8 @@ function getWindowDimmer(actor) {
*/ */
var LAST_WINDOW_GRACE_TIME = 1000; var LAST_WINDOW_GRACE_TIME = 1000;
var WorkspaceTracker = new Lang.Class({ var WorkspaceTracker = class {
Name: 'WorkspaceTracker', constructor(wm) {
_init(wm) {
this._wm = wm; this._wm = wm;
this._workspaces = []; this._workspaces = [];
@ -208,15 +201,15 @@ var WorkspaceTracker = new Lang.Class({
this._workspaceSettings.connect('changed::dynamic-workspaces', this._queueCheckWorkspaces.bind(this)); this._workspaceSettings.connect('changed::dynamic-workspaces', this._queueCheckWorkspaces.bind(this));
this._nWorkspacesChanged(); this._nWorkspacesChanged();
}, }
blockUpdates() { blockUpdates() {
this._pauseWorkspaceCheck = true; this._pauseWorkspaceCheck = true;
}, }
unblockUpdates() { unblockUpdates() {
this._pauseWorkspaceCheck = false; this._pauseWorkspaceCheck = false;
}, }
_checkWorkspaces() { _checkWorkspaces() {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
@ -283,7 +276,7 @@ var WorkspaceTracker = new Lang.Class({
this._checkWorkspacesId = 0; this._checkWorkspacesId = 0;
return false; return false;
}, }
keepWorkspaceAlive(workspace, duration) { keepWorkspaceAlive(workspace, duration) {
if (workspace._keepAliveId) if (workspace._keepAliveId)
@ -295,7 +288,7 @@ var WorkspaceTracker = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(workspace._keepAliveId, '[gnome-shell] this._queueCheckWorkspaces'); GLib.Source.set_name_by_id(workspace._keepAliveId, '[gnome-shell] this._queueCheckWorkspaces');
}, }
_windowRemoved(workspace, window) { _windowRemoved(workspace, window) {
workspace._lastRemovedWindow = window; workspace._lastRemovedWindow = window;
@ -308,33 +301,33 @@ var WorkspaceTracker = new Lang.Class({
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
GLib.Source.set_name_by_id(id, '[gnome-shell] this._queueCheckWorkspaces'); GLib.Source.set_name_by_id(id, '[gnome-shell] this._queueCheckWorkspaces');
}, }
_windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) {
// If the window left the primary monitor, that // If the window left the primary monitor, that
// might make that workspace empty // might make that workspace empty
if (monitorIndex == Main.layoutManager.primaryIndex) if (monitorIndex == Main.layoutManager.primaryIndex)
this._queueCheckWorkspaces(); this._queueCheckWorkspaces();
}, }
_windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) {
// If the window entered the primary monitor, that // If the window entered the primary monitor, that
// might make that workspace non-empty // might make that workspace non-empty
if (monitorIndex == Main.layoutManager.primaryIndex) if (monitorIndex == Main.layoutManager.primaryIndex)
this._queueCheckWorkspaces(); this._queueCheckWorkspaces();
}, }
_windowsRestacked() { _windowsRestacked() {
// Figure out where the pointer is in case we lost track of // Figure out where the pointer is in case we lost track of
// it during a grab. (In particular, if a trayicon popup menu // it during a grab. (In particular, if a trayicon popup menu
// is dismissed, see if we need to close the message tray.) // is dismissed, see if we need to close the message tray.)
global.sync_pointer(); global.sync_pointer();
}, }
_queueCheckWorkspaces() { _queueCheckWorkspaces() {
if (this._checkWorkspacesId == 0) if (this._checkWorkspacesId == 0)
this._checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, this._checkWorkspaces.bind(this)); this._checkWorkspacesId = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, this._checkWorkspaces.bind(this));
}, }
_nWorkspacesChanged() { _nWorkspacesChanged() {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
@ -382,18 +375,16 @@ var WorkspaceTracker = new Lang.Class({
return false; return false;
} }
}); };
var TilePreview = new Lang.Class({ var TilePreview = class {
Name: 'TilePreview', constructor() {
_init() {
this.actor = new St.Widget(); this.actor = new St.Widget();
global.window_group.add_actor(this.actor); global.window_group.add_actor(this.actor);
this._reset(); this._reset();
this._showing = false; this._showing = false;
}, }
show(window, tileRect, monitorIndex) { show(window, tileRect, monitorIndex) {
let windowActor = window.get_compositor_private(); let windowActor = window.get_compositor_private();
@ -437,7 +428,7 @@ var TilePreview = new Lang.Class({
time: WINDOW_ANIMATION_TIME, time: WINDOW_ANIMATION_TIME,
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
}, }
hide() { hide() {
if (!this._showing) if (!this._showing)
@ -450,13 +441,13 @@ var TilePreview = new Lang.Class({
transition: 'easeOutQuad', transition: 'easeOutQuad',
onComplete: this._reset.bind(this) onComplete: this._reset.bind(this)
}); });
}, }
_reset() { _reset() {
this.actor.hide(); this.actor.hide();
this._rect = null; this._rect = null;
this._monitorIndex = -1; this._monitorIndex = -1;
}, }
_updateStyle(monitor) { _updateStyle(monitor) {
let styles = ['tile-preview']; let styles = ['tile-preview'];
@ -469,17 +460,15 @@ var TilePreview = new Lang.Class({
this.actor.style_class = styles.join(' '); this.actor.style_class = styles.join(' ');
} }
}); };
var TouchpadWorkspaceSwitchAction = new Lang.Class({ var TouchpadWorkspaceSwitchAction = class {
Name: 'TouchpadWorkspaceSwitchAction', constructor(actor) {
_init(actor) {
this._dx = 0; this._dx = 0;
this._dy = 0; this._dy = 0;
actor.connect('captured-event', this._handleEvent.bind(this)); actor.connect('captured-event', this._handleEvent.bind(this));
this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'}); this._touchpadSettings = new Gio.Settings({schema_id: 'org.gnome.desktop.peripherals.touchpad'});
}, }
_checkActivated() { _checkActivated() {
let dir; let dir;
@ -497,7 +486,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({
this.emit('activated', dir); this.emit('activated', dir);
return true; return true;
}, }
_handleEvent(actor, event) { _handleEvent(actor, event) {
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW; let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
@ -533,7 +522,7 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
}); };
Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype); Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype);
var WorkspaceSwitchAction = new Lang.Class({ var WorkspaceSwitchAction = new Lang.Class({
@ -667,10 +656,8 @@ var AppSwitchAction = new Lang.Class({
} }
}); });
var ResizePopup = new Lang.Class({ var ResizePopup = class {
Name: 'ResizePopup', constructor() {
_init() {
this._widget = new St.Widget({ layout_manager: new Clutter.BinLayout() }); this._widget = new St.Widget({ layout_manager: new Clutter.BinLayout() });
this._label = new St.Label({ style_class: 'resize-popup', this._label = new St.Label({ style_class: 'resize-popup',
x_align: Clutter.ActorAlign.CENTER, x_align: Clutter.ActorAlign.CENTER,
@ -678,7 +665,7 @@ var ResizePopup = new Lang.Class({
x_expand: true, y_expand: true }); x_expand: true, y_expand: true });
this._widget.add_child(this._label); this._widget.add_child(this._label);
Main.uiGroup.add_actor(this._widget); Main.uiGroup.add_actor(this._widget);
}, }
set(rect, displayW, displayH) { set(rect, displayW, displayH) {
/* Translators: This represents the size of a window. The first number is /* 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_position(rect.x, rect.y);
this._widget.set_size(rect.width, rect.height); this._widget.set_size(rect.width, rect.height);
}, }
destroy() { destroy() {
this._widget.destroy(); this._widget.destroy();
this._widget = null; this._widget = null;
}, }
}); };
var WindowManager = new Lang.Class({ var WindowManager = class {
Name: 'WindowManager', constructor() {
_init() {
this._shellwm = global.window_manager; this._shellwm = global.window_manager;
this._minimizing = []; this._minimizing = [];
@ -1036,14 +1021,14 @@ var WindowManager = new Lang.Class({
currentWindow.unmake_fullscreen(); currentWindow.unmake_fullscreen();
}); });
global.stage.add_action(gesture); global.stage.add_action(gesture);
}, }
_showPadOsd(display, device, settings, imagePath, editionMode, monitorIndex) { _showPadOsd(display, device, settings, imagePath, editionMode, monitorIndex) {
this._currentPadOsd = new PadOsd.PadOsd(device, settings, imagePath, editionMode, monitorIndex); this._currentPadOsd = new PadOsd.PadOsd(device, settings, imagePath, editionMode, monitorIndex);
this._currentPadOsd.connect('closed', () => { this._currentPadOsd = null }); this._currentPadOsd.connect('closed', () => { this._currentPadOsd = null });
return this._currentPadOsd.actor; return this._currentPadOsd.actor;
}, }
_switchWorkspaceMotion(action, xRel, yRel) { _switchWorkspaceMotion(action, xRel, yRel) {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
@ -1062,7 +1047,7 @@ var WindowManager = new Lang.Class({
xRel = 0; xRel = 0;
this._switchData.container.set_position(xRel, yRel); this._switchData.container.set_position(xRel, yRel);
}, }
_switchWorkspaceCancel() { _switchWorkspaceCancel() {
if (!this._switchData || this._switchData.inProgress) if (!this._switchData || this._switchData.inProgress)
@ -1078,7 +1063,7 @@ var WindowManager = new Lang.Class({
onCompleteScope: this, onCompleteScope: this,
onCompleteParams: [switchData], onCompleteParams: [switchData],
}); });
}, }
_actionSwitchWorkspace(action, direction) { _actionSwitchWorkspace(action, direction) {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
@ -1091,7 +1076,7 @@ var WindowManager = new Lang.Class({
this._switchData.gestureActivated = true; this._switchData.gestureActivated = true;
this.actionMoveWorkspace(newWs); this.actionMoveWorkspace(newWs);
} }
}, }
_lookupIndex(windows, metaWindow) { _lookupIndex(windows, metaWindow) {
for (let i = 0; i < windows.length; i++) { for (let i = 0; i < windows.length; i++) {
@ -1100,7 +1085,7 @@ var WindowManager = new Lang.Class({
} }
} }
return -1; return -1;
}, }
_switchApp() { _switchApp() {
let windows = global.get_window_actors().filter(actor => { let windows = global.get_window_actors().filter(actor => {
@ -1129,7 +1114,7 @@ var WindowManager = new Lang.Class({
} }
Main.activateWindow(nextWindow); Main.activateWindow(nextWindow);
}, }
insertWorkspace(pos) { insertWorkspace(pos) {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
@ -1168,44 +1153,43 @@ var WindowManager = new Lang.Class({
newWs.activate(global.get_current_time()); newWs.activate(global.get_current_time());
this._blockAnimations = false; this._blockAnimations = false;
} }
}, }
keepWorkspaceAlive(workspace, duration) { keepWorkspaceAlive(workspace, duration) {
if (!this._workspaceTracker) if (!this._workspaceTracker)
return; return;
this._workspaceTracker.keepWorkspaceAlive(workspace, duration); this._workspaceTracker.keepWorkspaceAlive(workspace, duration);
}, }
skipNextEffect(actor) { skipNextEffect(actor) {
this._skippedActors.push(actor); this._skippedActors.push(actor);
}, }
setCustomKeybindingHandler(name, modes, handler) { setCustomKeybindingHandler(name, modes, handler) {
if (Meta.keybindings_set_custom_handler(name, handler)) if (Meta.keybindings_set_custom_handler(name, handler))
this.allowKeybinding(name, modes); this.allowKeybinding(name, modes);
}, }
addKeybinding(name, settings, flags, modes, handler) { addKeybinding(name, settings, flags, modes, handler) {
let action = global.display.add_keybinding(name, settings, flags, handler); let action = global.display.add_keybinding(name, settings, flags, handler);
if (action != Meta.KeyBindingAction.NONE) if (action != Meta.KeyBindingAction.NONE)
this.allowKeybinding(name, modes); this.allowKeybinding(name, modes);
return action; return action;
}, }
removeKeybinding(name) { removeKeybinding(name) {
if (global.display.remove_keybinding(name)) if (global.display.remove_keybinding(name))
this.allowKeybinding(name, Shell.ActionMode.NONE); this.allowKeybinding(name, Shell.ActionMode.NONE);
}, }
allowKeybinding(name, modes) { allowKeybinding(name, modes) {
this._allowedKeybindings[name] = modes; this._allowedKeybindings[name] = modes;
}, }
_shouldAnimate() { _shouldAnimate() {
return !(Main.overview.visible || this._blockAnimations); return !(Main.overview.visible || this._blockAnimations);
}, }
_shouldAnimateActor(actor, types) { _shouldAnimateActor(actor, types) {
if (this._removeEffect(this._skippedActors, actor)) if (this._removeEffect(this._skippedActors, actor))
@ -1219,7 +1203,7 @@ var WindowManager = new Lang.Class({
let type = actor.meta_window.get_window_type(); let type = actor.meta_window.get_window_type();
return types.indexOf(type) >= 0; return types.indexOf(type) >= 0;
}, }
_removeEffect(list, actor) { _removeEffect(list, actor) {
let idx = list.indexOf(actor); let idx = list.indexOf(actor);
@ -1228,7 +1212,7 @@ var WindowManager = new Lang.Class({
return true; return true;
} }
return false; return false;
}, }
_minimizeWindow(shellwm, actor) { _minimizeWindow(shellwm, actor) {
let types = [Meta.WindowType.NORMAL, let types = [Meta.WindowType.NORMAL,
@ -1292,7 +1276,7 @@ var WindowManager = new Lang.Class({
onOverwriteParams: [shellwm, actor] onOverwriteParams: [shellwm, actor]
}); });
} }
}, }
_minimizeWindowDone(shellwm, actor) { _minimizeWindowDone(shellwm, actor) {
if (this._removeEffect(this._minimizing, actor)) { if (this._removeEffect(this._minimizing, actor)) {
@ -1303,13 +1287,13 @@ var WindowManager = new Lang.Class({
shellwm.completed_minimize(actor); shellwm.completed_minimize(actor);
} }
}, }
_minimizeWindowOverwritten(shellwm, actor) { _minimizeWindowOverwritten(shellwm, actor) {
if (this._removeEffect(this._minimizing, actor)) { if (this._removeEffect(this._minimizing, actor)) {
shellwm.completed_minimize(actor); shellwm.completed_minimize(actor);
} }
}, }
_unminimizeWindow(shellwm, actor) { _unminimizeWindow(shellwm, actor) {
let types = [Meta.WindowType.NORMAL, let types = [Meta.WindowType.NORMAL,
@ -1374,7 +1358,7 @@ var WindowManager = new Lang.Class({
onOverwriteParams: [shellwm, actor] onOverwriteParams: [shellwm, actor]
}); });
} }
}, }
_unminimizeWindowDone(shellwm, actor) { _unminimizeWindowDone(shellwm, actor) {
if (this._removeEffect(this._unminimizing, actor)) { if (this._removeEffect(this._unminimizing, actor)) {
@ -1385,13 +1369,13 @@ var WindowManager = new Lang.Class({
shellwm.completed_unminimize(actor); shellwm.completed_unminimize(actor);
} }
}, }
_unminimizeWindowOverwritten(shellwm, actor) { _unminimizeWindowOverwritten(shellwm, actor) {
if (this._removeEffect(this._unminimizing, actor)) { if (this._removeEffect(this._unminimizing, actor)) {
shellwm.completed_unminimize(actor); shellwm.completed_unminimize(actor);
} }
}, }
_sizeChangeWindow(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) { _sizeChangeWindow(shellwm, actor, whichChange, oldFrameRect, oldBufferRect) {
let types = [Meta.WindowType.NORMAL]; let types = [Meta.WindowType.NORMAL];
@ -1404,7 +1388,7 @@ var WindowManager = new Lang.Class({
this._prepareAnimationInfo(shellwm, actor, oldFrameRect, whichChange); this._prepareAnimationInfo(shellwm, actor, oldFrameRect, whichChange);
else else
shellwm.completed_size_change(actor); shellwm.completed_size_change(actor);
}, }
_prepareAnimationInfo(shellwm, actor, oldFrameRect, change) { _prepareAnimationInfo(shellwm, actor, oldFrameRect, change) {
// Position a clone of the window on top of the old position, // 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, actor.__animationInfo = { clone: actorClone,
oldRect: oldFrameRect }; oldRect: oldFrameRect };
}, }
_sizeChangedWindow(shellwm, actor) { _sizeChangedWindow(shellwm, actor) {
if (!actor.__animationInfo) 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 // 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. // do this, otherwise our scale will be applied to the old texture size.
shellwm.completed_size_change(actor); shellwm.completed_size_change(actor);
}, }
_clearAnimationInfo(actor) { _clearAnimationInfo(actor) {
if (actor.__animationInfo) { if (actor.__animationInfo) {
@ -1485,7 +1469,7 @@ var WindowManager = new Lang.Class({
return true; return true;
} }
return false; return false;
}, }
_sizeChangeWindowDone(shellwm, actor) { _sizeChangeWindowDone(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) { if (this._removeEffect(this._resizing, actor)) {
@ -1496,12 +1480,12 @@ var WindowManager = new Lang.Class({
actor.translation_y = 0; actor.translation_y = 0;
this._clearAnimationInfo(actor); this._clearAnimationInfo(actor);
} }
}, }
_sizeChangeWindowOverwritten(shellwm, actor) { _sizeChangeWindowOverwritten(shellwm, actor) {
if (this._removeEffect(this._resizing, actor)) if (this._removeEffect(this._resizing, actor))
this._clearAnimationInfo(actor); this._clearAnimationInfo(actor);
}, }
_hasAttachedDialogs(window, ignoreWindow) { _hasAttachedDialogs(window, ignoreWindow) {
var count = 0; var count = 0;
@ -1515,7 +1499,7 @@ var WindowManager = new Lang.Class({
return true; return true;
}); });
return count != 0; return count != 0;
}, }
_checkDimming(window, ignoreWindow) { _checkDimming(window, ignoreWindow) {
let shouldDim = this._hasAttachedDialogs(window, ignoreWindow); let shouldDim = this._hasAttachedDialogs(window, ignoreWindow);
@ -1530,7 +1514,7 @@ var WindowManager = new Lang.Class({
this._dimmedWindows.filter(win => win != window); this._dimmedWindows.filter(win => win != window);
this._undimWindow(window); this._undimWindow(window);
} }
}, }
_dimWindow(window) { _dimWindow(window) {
let actor = window.get_compositor_private(); let actor = window.get_compositor_private();
@ -1547,7 +1531,7 @@ var WindowManager = new Lang.Class({
}); });
else else
dimmer.dimFactor = 1.0; dimmer.dimFactor = 1.0;
}, }
_undimWindow(window) { _undimWindow(window) {
let actor = window.get_compositor_private(); let actor = window.get_compositor_private();
@ -1563,7 +1547,7 @@ var WindowManager = new Lang.Class({
transition: 'linear' }); transition: 'linear' });
else else
dimmer.dimFactor = 0.0; dimmer.dimFactor = 0.0;
}, }
_mapWindow(shellwm, actor) { _mapWindow(shellwm, actor) {
actor._windowType = actor.meta_window.get_window_type(); actor._windowType = actor.meta_window.get_window_type();
@ -1647,7 +1631,7 @@ var WindowManager = new Lang.Class({
shellwm.completed_map(actor); shellwm.completed_map(actor);
return; return;
} }
}, }
_mapWindowDone(shellwm, actor) { _mapWindowDone(shellwm, actor) {
if (this._removeEffect(this._mapping, actor)) { if (this._removeEffect(this._mapping, actor)) {
@ -1660,13 +1644,13 @@ var WindowManager = new Lang.Class({
actor.translation_x = 0; actor.translation_x = 0;
shellwm.completed_map(actor); shellwm.completed_map(actor);
} }
}, }
_mapWindowOverwrite(shellwm, actor) { _mapWindowOverwrite(shellwm, actor) {
if (this._removeEffect(this._mapping, actor)) { if (this._removeEffect(this._mapping, actor)) {
shellwm.completed_map(actor); shellwm.completed_map(actor);
} }
}, }
_destroyWindow(shellwm, actor) { _destroyWindow(shellwm, actor) {
let window = actor.meta_window; let window = actor.meta_window;
@ -1738,7 +1722,7 @@ var WindowManager = new Lang.Class({
shellwm.completed_destroy(actor); shellwm.completed_destroy(actor);
return; return;
} }
}, }
_destroyWindowDone(shellwm, actor) { _destroyWindowDone(shellwm, actor) {
if (this._removeEffect(this._destroying, actor)) { if (this._removeEffect(this._destroying, actor)) {
@ -1749,7 +1733,7 @@ var WindowManager = new Lang.Class({
} }
shellwm.completed_destroy(actor); shellwm.completed_destroy(actor);
} }
}, }
_filterKeybinding(shellwm, binding) { _filterKeybinding(shellwm, binding) {
if (Main.actionMode == Shell.ActionMode.NONE) if (Main.actionMode == Shell.ActionMode.NONE)
@ -1764,7 +1748,7 @@ var WindowManager = new Lang.Class({
return false; return false;
return !(this._allowedKeybindings[binding.get_name()] & Main.actionMode); return !(this._allowedKeybindings[binding.get_name()] & Main.actionMode);
}, }
_syncStacking() { _syncStacking() {
if (this._switchData == null) if (this._switchData == null)
@ -1793,7 +1777,7 @@ var WindowManager = new Lang.Class({
} }
} }
} }
}, }
_getPositionForDirection(direction) { _getPositionForDirection(direction) {
let xDest = 0, yDest = 0; let xDest = 0, yDest = 0;
@ -1817,7 +1801,7 @@ var WindowManager = new Lang.Class({
xDest = global.screen_width; xDest = global.screen_width;
return [xDest, yDest]; return [xDest, yDest];
}, }
_prepareWorkspaceSwitch(from, to, direction) { _prepareWorkspaceSwitch(from, to, direction) {
if (this._switchData) if (this._switchData)
@ -1914,7 +1898,7 @@ var WindowManager = new Lang.Class({
switchData.windows.splice(switchData.windows.indexOf(w), 1); switchData.windows.splice(switchData.windows.indexOf(w), 1);
}); });
} }
}, }
_finishWorkspaceSwitch(switchData) { _finishWorkspaceSwitch(switchData) {
this._switchData = null; this._switchData = null;
@ -1934,7 +1918,7 @@ var WindowManager = new Lang.Class({
switchData.movingWindowBin.destroy(); switchData.movingWindowBin.destroy();
this._movingWindow = null; this._movingWindow = null;
}, }
_switchWorkspace(shellwm, from, to, direction) { _switchWorkspace(shellwm, from, to, direction) {
if (!Main.sessionMode.hasWorkspaces || !this._shouldAnimate()) { if (!Main.sessionMode.hasWorkspaces || !this._shouldAnimate()) {
@ -1967,28 +1951,28 @@ var WindowManager = new Lang.Class({
onCompleteScope: this, onCompleteScope: this,
onCompleteParams: [shellwm] onCompleteParams: [shellwm]
}); });
}, }
_switchWorkspaceDone(shellwm) { _switchWorkspaceDone(shellwm) {
this._finishWorkspaceSwitch(this._switchData); this._finishWorkspaceSwitch(this._switchData);
shellwm.completed_switch_workspace(); shellwm.completed_switch_workspace();
}, }
_showTilePreview(shellwm, window, tileRect, monitorIndex) { _showTilePreview(shellwm, window, tileRect, monitorIndex) {
if (!this._tilePreview) if (!this._tilePreview)
this._tilePreview = new TilePreview(); this._tilePreview = new TilePreview();
this._tilePreview.show(window, tileRect, monitorIndex); this._tilePreview.show(window, tileRect, monitorIndex);
}, }
_hideTilePreview(shellwm) { _hideTilePreview(shellwm) {
if (!this._tilePreview) if (!this._tilePreview)
return; return;
this._tilePreview.hide(); this._tilePreview.hide();
}, }
_showWindowMenu(shellwm, window, menu, rect) { _showWindowMenu(shellwm, window, menu, rect) {
this._windowMenuManager.showWindowMenuForWindow(window, menu, rect); this._windowMenuManager.showWindowMenuForWindow(window, menu, rect);
}, }
_startSwitcher(display, window, binding) { _startSwitcher(display, window, binding) {
let constructor = null; let constructor = null;
@ -2027,19 +2011,19 @@ var WindowManager = new Lang.Class({
if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask())) if (!tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask()))
tabPopup.destroy(); tabPopup.destroy();
}, }
_startA11ySwitcher(display, window, binding) { _startA11ySwitcher(display, window, binding) {
Main.ctrlAltTabManager.popup(binding.is_reversed(), binding.get_name(), binding.get_mask()); Main.ctrlAltTabManager.popup(binding.is_reversed(), binding.get_name(), binding.get_mask());
}, }
_toggleAppMenu(display, window, event, binding) { _toggleAppMenu(display, window, event, binding) {
Main.panel.toggleAppMenu(); Main.panel.toggleAppMenu();
}, }
_toggleCalendar(display, window, event, binding) { _toggleCalendar(display, window, event, binding) {
Main.panel.toggleCalendar(); Main.panel.toggleCalendar();
}, }
_toggleTweens() { _toggleTweens() {
this._tweensPaused = !this._tweensPaused; this._tweensPaused = !this._tweensPaused;
@ -2048,7 +2032,7 @@ var WindowManager = new Lang.Class({
OrigTweener.pauseAllTweens(); OrigTweener.pauseAllTweens();
else else
OrigTweener.resumeAllTweens(); OrigTweener.resumeAllTweens();
}, }
_showWorkspaceSwitcher(display, window, binding) { _showWorkspaceSwitcher(display, window, binding) {
let workspaceManager = display.get_workspace_manager(); let workspaceManager = display.get_workspace_manager();
@ -2117,7 +2101,7 @@ var WindowManager = new Lang.Class({
} }
this._workspaceSwitcherPopup.display(direction, newWs.index()); this._workspaceSwitcherPopup.display(direction, newWs.index());
} }
}, }
actionMoveWorkspace(workspace) { actionMoveWorkspace(workspace) {
if (!Main.sessionMode.hasWorkspaces) if (!Main.sessionMode.hasWorkspaces)
@ -2128,7 +2112,7 @@ var WindowManager = new Lang.Class({
if (activeWorkspace != workspace) if (activeWorkspace != workspace)
workspace.activate(global.get_current_time()); workspace.activate(global.get_current_time());
}, }
actionMoveWindow(window, workspace) { actionMoveWindow(window, workspace) {
if (!Main.sessionMode.hasWorkspaces) if (!Main.sessionMode.hasWorkspaces)
@ -2147,20 +2131,20 @@ var WindowManager = new Lang.Class({
global.display.clear_mouse_mode(); global.display.clear_mouse_mode();
workspace.activate_with_focus (window, global.get_current_time()); workspace.activate_with_focus (window, global.get_current_time());
} }
}, }
_confirmDisplayChange() { _confirmDisplayChange() {
let dialog = new DisplayChangeDialog(this._shellwm); let dialog = new DisplayChangeDialog(this._shellwm);
dialog.open(); dialog.open();
}, }
_createCloseDialog(shellwm, window) { _createCloseDialog(shellwm, window) {
return new CloseDialog.CloseDialog(window); return new CloseDialog.CloseDialog(window);
}, }
_createInhibitShortcutsDialog(shellwm, window) { _createInhibitShortcutsDialog(shellwm, window) {
return new InhibitShortcutsDialog.InhibitShortcutsDialog(window); return new InhibitShortcutsDialog.InhibitShortcutsDialog(window);
}, }
_showResizePopup(display, show, rect, displayW, displayH) { _showResizePopup(display, show, rect, displayW, displayH) {
if (show) { if (show) {
@ -2174,5 +2158,5 @@ var WindowManager = new Lang.Class({
this._resizePopup = null; this._resizePopup = null;
} }
} }
}, }
}); };

View File

@ -1,7 +1,6 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -* // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*
const Gtk = imports.gi.Gtk; const Gtk = imports.gi.Gtk;
const Lang = imports.lang;
const Meta = imports.gi.Meta; const Meta = imports.gi.Meta;
const St = imports.gi.St; const St = imports.gi.St;
const Shell = imports.gi.Shell; const Shell = imports.gi.Shell;
@ -11,12 +10,9 @@ const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu; const PopupMenu = imports.ui.popupMenu;
const RemoteMenu = imports.ui.remoteMenu; const RemoteMenu = imports.ui.remoteMenu;
var WindowMenu = new Lang.Class({ var WindowMenu = class extends PopupMenu.PopupMenu {
Name: 'WindowMenu', constructor(window, sourceActor) {
Extends: PopupMenu.PopupMenu, super(sourceActor, 0, St.Side.TOP);
_init(window, sourceActor) {
this.parent(sourceActor, 0, St.Side.TOP);
this.actor.add_style_class_name('window-menu'); this.actor.add_style_class_name('window-menu');
@ -24,7 +20,7 @@ var WindowMenu = new Lang.Class({
this.actor.hide(); this.actor.hide();
this._buildMenu(window); this._buildMenu(window);
}, }
_buildMenu(window) { _buildMenu(window) {
let type = window.get_window_type(); let type = window.get_window_type();
@ -177,16 +173,13 @@ var WindowMenu = new Lang.Class({
if (!window.can_close()) if (!window.can_close())
item.setSensitive(false); item.setSensitive(false);
} }
}); };
var AppMenu = new Lang.Class({ var AppMenu = class extends RemoteMenu.RemoteMenu {
Name: 'AppMenu', constructor(window, sourceActor) {
Extends: RemoteMenu.RemoteMenu,
_init(window, sourceActor) {
let app = Shell.WindowTracker.get_default().get_window_app(window); 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'); this.actor.add_style_class_name('fallback-app-menu');
let variant = window.get_gtk_theme_variant(); let variant = window.get_gtk_theme_variant();
@ -196,12 +189,10 @@ var AppMenu = new Lang.Class({
Main.layoutManager.uiGroup.add_actor(this.actor); Main.layoutManager.uiGroup.add_actor(this.actor);
this.actor.hide(); this.actor.hide();
} }
}); };
var WindowMenuManager = new Lang.Class({ var WindowMenuManager = class {
Name: 'WindowMenuManager', constructor() {
_init() {
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor }); this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
this._sourceActor = new St.Widget({ reactive: true, visible: false }); this._sourceActor = new St.Widget({ reactive: true, visible: false });
@ -209,7 +200,7 @@ var WindowMenuManager = new Lang.Class({
this._manager.activeMenu.toggle(); this._manager.activeMenu.toggle();
}); });
Main.uiGroup.add_actor(this._sourceActor); Main.uiGroup.add_actor(this._sourceActor);
}, }
showWindowMenuForWindow(window, type, rect) { showWindowMenuForWindow(window, type, rect) {
let menuType = (type == Meta.WindowMenuType.WM) ? WindowMenu : AppMenu; let menuType = (type == Meta.WindowMenuType.WM) ? WindowMenu : AppMenu;
@ -239,4 +230,4 @@ var WindowMenuManager = new Lang.Class({
window.disconnect(destroyId); window.disconnect(destroyId);
}); });
} }
}); };

View File

@ -102,10 +102,8 @@ var WindowCloneLayout = new Lang.Class({
} }
}); });
var WindowClone = new Lang.Class({ var WindowClone = class {
Name: 'WindowClone', constructor(realWindow, workspace) {
_init(realWindow, workspace) {
this.realWindow = realWindow; this.realWindow = realWindow;
this.metaWindow = realWindow.meta_window; this.metaWindow = realWindow.meta_window;
this.metaWindow._delegate = this; this.metaWindow._delegate = this;
@ -180,18 +178,18 @@ var WindowClone = new Lang.Class({
this._selected = false; this._selected = false;
this._closeRequested = false; this._closeRequested = false;
}, }
set slot(slot) { set slot(slot) {
this._slot = slot; this._slot = slot;
}, }
get slot() { get slot() {
if (this.inDrag) if (this.inDrag)
return this._dragSlot; return this._dragSlot;
else else
return this._slot; return this._slot;
}, }
deleteAll() { deleteAll() {
// Delete all windows, starting from the bottom-most (most-modal) one // 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.metaWindow.delete(global.get_current_time());
this._closeRequested = true; this._closeRequested = true;
}, }
addDialog(win) { addDialog(win) {
let parent = win.get_transient_for(); 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 // assume it's a close confirmation and leave the overview
if (this._closeRequested) if (this._closeRequested)
this._activate(); this._activate();
}, }
hasAttachedDialogs() { hasAttachedDialogs() {
return this.actor.get_n_children() > 1; return this.actor.get_n_children() > 1;
}, }
_doAddAttachedDialog(metaWin, realWin) { _doAddAttachedDialog(metaWin, realWin) {
let clone = new Clutter.Clone({ source: realWin }); let clone = new Clutter.Clone({ source: realWin });
@ -240,7 +238,7 @@ var WindowClone = new Lang.Class({
this._onMetaWindowSizeChanged(); this._onMetaWindowSizeChanged();
}); });
this.actor.add_child(clone); this.actor.add_child(clone);
}, }
_updateAttachedDialogs() { _updateAttachedDialogs() {
let iter = win => { let iter = win => {
@ -256,23 +254,23 @@ var WindowClone = new Lang.Class({
return true; return true;
}; };
this.metaWindow.foreach_transient(iter); this.metaWindow.foreach_transient(iter);
}, }
get boundingBox() { get boundingBox() {
return this._boundingBox; return this._boundingBox;
}, }
get width() { get width() {
return this._boundingBox.width; return this._boundingBox.width;
}, }
get height() { get height() {
return this._boundingBox.height; return this._boundingBox.height;
}, }
getOriginalPosition() { getOriginalPosition() {
return [this._boundingBox.x, this._boundingBox.y]; return [this._boundingBox.x, this._boundingBox.y];
}, }
_computeBoundingBox() { _computeBoundingBox() {
let rect = this.metaWindow.get_frame_rect(); 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 // Convert from a MetaRectangle to a native JS object
this._boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height }; this._boundingBox = { x: rect.x, y: rect.y, width: rect.width, height: rect.height };
this.actor.layout_manager.boundingBox = rect; this.actor.layout_manager.boundingBox = rect;
}, }
// Find the actor just below us, respecting reparenting done // Find the actor just below us, respecting reparenting done
// by DND code // by DND code
@ -307,7 +305,7 @@ var WindowClone = new Lang.Class({
} else { } else {
return this._stackAbove; return this._stackAbove;
} }
}, }
setStackAbove(actor) { setStackAbove(actor) {
this._stackAbove = actor; this._stackAbove = actor;
@ -320,11 +318,11 @@ var WindowClone = new Lang.Class({
this.actor.lower_bottom(); this.actor.lower_bottom();
else else
this.actor.raise(actualAbove); this.actor.raise(actualAbove);
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
_disconnectSignals() { _disconnectSignals() {
this.actor.get_children().forEach(child => { this.actor.get_children().forEach(child => {
@ -338,12 +336,12 @@ var WindowClone = new Lang.Class({
realWindow.meta_window.disconnect(child._posChangedId); realWindow.meta_window.disconnect(child._posChangedId);
realWindow.disconnect(child._destroyId); realWindow.disconnect(child._destroyId);
}); });
}, }
_onMetaWindowSizeChanged() { _onMetaWindowSizeChanged() {
this._computeBoundingBox(); this._computeBoundingBox();
this.emit('size-changed'); this.emit('size-changed');
}, }
_onDestroy() { _onDestroy() {
this._disconnectSignals(); this._disconnectSignals();
@ -357,12 +355,12 @@ var WindowClone = new Lang.Class({
} }
this.disconnectAll(); this.disconnectAll();
}, }
_activate() { _activate() {
this._selected = true; this._selected = true;
this.emit('selected', global.get_current_time()); this.emit('selected', global.get_current_time());
}, }
_onKeyPress(actor, event) { _onKeyPress(actor, event) {
let symbol = event.get_key_symbol(); let symbol = event.get_key_symbol();
@ -373,11 +371,11 @@ var WindowClone = new Lang.Class({
} }
return false; return false;
}, }
_onClicked(action, actor) { _onClicked(action, actor) {
this._activate(); this._activate();
}, }
_onLongPress(action, actor, state) { _onLongPress(action, actor, state) {
// Take advantage of the Clutter policy to consider // Take advantage of the Clutter policy to consider
@ -400,7 +398,7 @@ var WindowClone = new Lang.Class({
this.emit('show-chrome'); this.emit('show-chrome');
} }
return true; return true;
}, }
_onDragBegin(draggable, time) { _onDragBegin(draggable, time) {
this._dragSlot = this._slot; this._dragSlot = this._slot;
@ -408,19 +406,19 @@ var WindowClone = new Lang.Class({
this.dragOrigScale = this.actor.scale_x; this.dragOrigScale = this.actor.scale_x;
this.inDrag = true; this.inDrag = true;
this.emit('drag-begin'); this.emit('drag-begin');
}, }
handleDragOver(source, actor, x, y, time) { handleDragOver(source, actor, x, y, time) {
return this._workspace.handleDragOver(source, actor, x, y, time); return this._workspace.handleDragOver(source, actor, x, y, time);
}, }
acceptDrop(source, actor, x, y, time) { acceptDrop(source, actor, x, y, time) {
this._workspace.acceptDrop(source, actor, x, y, time); this._workspace.acceptDrop(source, actor, x, y, time);
}, }
_onDragCancelled(draggable, time) { _onDragCancelled(draggable, time) {
this.emit('drag-cancelled'); this.emit('drag-cancelled');
}, }
_onDragEnd(draggable, time, snapback) { _onDragEnd(draggable, time, snapback) {
this.inDrag = false; this.inDrag = false;
@ -438,7 +436,7 @@ var WindowClone = new Lang.Class({
this.emit('drag-end'); this.emit('drag-end');
} }
}); };
Signals.addSignalMethods(WindowClone.prototype); Signals.addSignalMethods(WindowClone.prototype);
@ -447,10 +445,8 @@ Signals.addSignalMethods(WindowClone.prototype);
* @parentActor: The actor which will be the parent of all overlay items * @parentActor: The actor which will be the parent of all overlay items
* such as app icon and window caption * such as app icon and window caption
*/ */
var WindowOverlay = new Lang.Class({ var WindowOverlay = class {
Name: 'WindowOverlay', constructor(windowClone, parentActor) {
_init(windowClone, parentActor) {
let metaWindow = windowClone.metaWindow; let metaWindow = windowClone.metaWindow;
this._windowClone = windowClone; this._windowClone = windowClone;
@ -505,37 +501,37 @@ var WindowOverlay = new Lang.Class({
// the signal will be emitted normally when we are added // the signal will be emitted normally when we are added
if (parentActor.get_stage()) if (parentActor.get_stage())
this._onStyleChanged(); this._onStyleChanged();
}, }
hide() { hide() {
this._hidden = true; this._hidden = true;
this.hideCloseButton(); this.hideCloseButton();
}, }
show() { show() {
this._hidden = false; this._hidden = false;
if (this._windowClone.actor['has-pointer']) if (this._windowClone.actor['has-pointer'])
this._animateVisible(); this._animateVisible();
}, }
chromeHeights() { chromeHeights() {
return [Math.max(this.borderSize, this.closeButton.height - this.closeButton._overlap), return [Math.max(this.borderSize, this.closeButton.height - this.closeButton._overlap),
(this.title.height - this.borderSize) / 2]; (this.title.height - this.borderSize) / 2];
}, }
chromeWidths() { chromeWidths() {
return [this.borderSize, return [this.borderSize,
Math.max(this.borderSize, this.closeButton.width - this.closeButton._overlap)]; Math.max(this.borderSize, this.closeButton.width - this.closeButton._overlap)];
}, }
setMaxChromeWidth(max) { setMaxChromeWidth(max) {
if (this._maxTitleWidth == max) if (this._maxTitleWidth == max)
return; return;
this._maxTitleWidth = max; this._maxTitleWidth = max;
}, }
relayout(animate) { relayout(animate) {
let button = this.closeButton; let button = this.closeButton;
@ -598,7 +594,7 @@ var WindowOverlay = new Lang.Class({
this.border.set_position(borderX, borderY); this.border.set_position(borderX, borderY);
this.border.set_size(borderWidth, borderHeight); this.border.set_size(borderWidth, borderHeight);
} }
}, }
_getCaption() { _getCaption() {
let metaWindow = this._windowClone.metaWindow; let metaWindow = this._windowClone.metaWindow;
@ -608,7 +604,7 @@ var WindowOverlay = new Lang.Class({
let tracker = Shell.WindowTracker.get_default(); let tracker = Shell.WindowTracker.get_default();
let app = tracker.get_window_app(metaWindow); let app = tracker.get_window_app(metaWindow);
return app.get_name(); return app.get_name();
}, }
_animateOverlayActor(actor, x, y, width, height) { _animateOverlayActor(actor, x, y, width, height) {
let params = { x: x, let params = { x: x,
@ -621,12 +617,12 @@ var WindowOverlay = new Lang.Class({
params.height = height; params.height = height;
Tweener.addTween(actor, params); Tweener.addTween(actor, params);
}, }
_windowCanClose() { _windowCanClose() {
return this._windowClone.metaWindow.can_close() && return this._windowClone.metaWindow.can_close() &&
!this._windowClone.hasAttachedDialogs(); !this._windowClone.hasAttachedDialogs();
}, }
_onDestroy() { _onDestroy() {
if (this._idleToggleCloseId > 0) { if (this._idleToggleCloseId > 0) {
@ -637,7 +633,7 @@ var WindowOverlay = new Lang.Class({
this.title.destroy(); this.title.destroy();
this.closeButton.destroy(); this.closeButton.destroy();
this.border.destroy(); this.border.destroy();
}, }
_animateVisible() { _animateVisible() {
this._parentActor.raise_top(); this._parentActor.raise_top();
@ -654,7 +650,7 @@ var WindowOverlay = new Lang.Class({
time: CLOSE_BUTTON_FADE_TIME, time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeOutQuad' }); transition: 'easeOutQuad' });
}); });
}, }
_animateInvisible() { _animateInvisible() {
[this.closeButton, this.border, this.title].forEach(a => { [this.closeButton, this.border, this.title].forEach(a => {
@ -664,7 +660,7 @@ var WindowOverlay = new Lang.Class({
time: CLOSE_BUTTON_FADE_TIME, time: CLOSE_BUTTON_FADE_TIME,
transition: 'easeInQuad' }); transition: 'easeInQuad' });
}); });
}, }
_onShowChrome() { _onShowChrome() {
// We might get enter events on the clone while the overlay is // We might get enter events on the clone while the overlay is
@ -676,14 +672,14 @@ var WindowOverlay = new Lang.Class({
this._animateVisible(); this._animateVisible();
this.emit('show-close-button'); this.emit('show-close-button');
}, }
_onHideChrome() { _onHideChrome() {
if (this._idleToggleCloseId == 0) { if (this._idleToggleCloseId == 0) {
this._idleToggleCloseId = Mainloop.timeout_add(750, this._idleToggleCloseButton.bind(this)); this._idleToggleCloseId = Mainloop.timeout_add(750, this._idleToggleCloseButton.bind(this));
GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton'); GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton');
} }
}, }
_idleToggleCloseButton() { _idleToggleCloseButton() {
this._idleToggleCloseId = 0; this._idleToggleCloseId = 0;
@ -693,7 +689,7 @@ var WindowOverlay = new Lang.Class({
this._animateInvisible(); this._animateInvisible();
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
hideCloseButton() { hideCloseButton() {
if (this._idleToggleCloseId > 0) { if (this._idleToggleCloseId > 0) {
@ -703,7 +699,7 @@ var WindowOverlay = new Lang.Class({
this.closeButton.hide(); this.closeButton.hide();
this.border.hide(); this.border.hide();
this.title.hide(); this.title.hide();
}, }
_onStyleChanged() { _onStyleChanged() {
let closeNode = this.closeButton.get_theme_node(); let closeNode = this.closeButton.get_theme_node();
@ -714,7 +710,7 @@ var WindowOverlay = new Lang.Class({
this._parentActor.queue_relayout(); this._parentActor.queue_relayout();
} }
}); };
Signals.addSignalMethods(WindowOverlay.prototype); Signals.addSignalMethods(WindowOverlay.prototype);
var WindowPositionFlags = { var WindowPositionFlags = {
@ -797,15 +793,15 @@ var WindowPositionFlags = {
// each window's "cell" area to be the same, but we shrink the thumbnail // 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. // and center it horizontally, and align it to the bottom vertically.
var LayoutStrategy = new Lang.Class({ var LayoutStrategy = class {
Name: 'LayoutStrategy', constructor(monitor, rowSpacing, columnSpacing) {
Abstract: true, if (new.target === LayoutStrategy)
throw new TypeError('Cannot instantiate abstract type ' + new.target.name);
_init(monitor, rowSpacing, columnSpacing) {
this._monitor = monitor; this._monitor = monitor;
this._rowSpacing = rowSpacing; this._rowSpacing = rowSpacing;
this._columnSpacing = columnSpacing; this._columnSpacing = columnSpacing;
}, }
_newRow() { _newRow() {
// Row properties: // Row properties:
@ -823,7 +819,7 @@ var LayoutStrategy = new Lang.Class({
width: 0, height: 0, width: 0, height: 0,
fullWidth: 0, fullHeight: 0, fullWidth: 0, fullHeight: 0,
windows: [] }; windows: [] };
}, }
// Computes and returns an individual scaling factor for @window, // Computes and returns an individual scaling factor for @window,
// to be applied in addition to the overal layout scale. // 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] // Map from [0, 1] to [1.5, 1]
return _interpolate(1.5, 1, ratio); return _interpolate(1.5, 1, ratio);
}, }
// Compute the size of each row, by assigning to the properties // Compute the size of each row, by assigning to the properties
// row.width, row.height, row.fullWidth, row.fullHeight, and // row.width, row.height, row.fullWidth, row.fullHeight, and
@ -849,7 +845,7 @@ var LayoutStrategy = new Lang.Class({
// intended to be called by subclasses. // intended to be called by subclasses.
_computeRowSizes(layout) { _computeRowSizes(layout) {
throw new Error('_computeRowSizes not implemented'); throw new Error('_computeRowSizes not implemented');
}, }
// Compute strategy-specific window slots for each window in // Compute strategy-specific window slots for each window in
// @windows, given the @layout. The strategy may also use @layout // @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. // * rows - A list of rows, which should be instantiated by _newRow.
computeLayout(windows, layout) { computeLayout(windows, layout) {
throw new Error('computeLayout not implemented'); throw new Error('computeLayout not implemented');
}, }
// Given @layout, compute the overall scale and space of the layout. // Given @layout, compute the overall scale and space of the layout.
// The scale is the individual, non-fancy scale of each window, and // 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.scale = scale;
layout.space = space; layout.space = space;
}, }
computeWindowSlots(layout, area) { computeWindowSlots(layout, area) {
this._computeRowSizes(layout); this._computeRowSizes(layout);
@ -971,12 +967,9 @@ var LayoutStrategy = new Lang.Class({
} }
return slots; return slots;
} }
}); };
var UnalignedLayoutStrategy = new Lang.Class({
Name: 'UnalignedLayoutStrategy',
Extends: LayoutStrategy,
var UnalignedLayoutStrategy = class extends LayoutStrategy {
_computeRowSizes(layout) { _computeRowSizes(layout) {
let { rows: rows, scale: scale } = layout; let { rows: rows, scale: scale } = layout;
for (let i = 0; i < rows.length; i++) { 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.width = row.fullWidth * scale + (row.windows.length - 1) * this._columnSpacing;
row.height = row.fullHeight * scale; row.height = row.fullHeight * scale;
} }
}, }
_keepSameRow(row, window, width, idealRowWidth) { _keepSameRow(row, window, width, idealRowWidth) {
if (row.fullWidth + width <= idealRowWidth) if (row.fullWidth + width <= idealRowWidth)
@ -997,12 +990,12 @@ var UnalignedLayoutStrategy = new Lang.Class({
return true; return true;
return false; return false;
}, }
_sortRow(row) { _sortRow(row) {
// Sort windows horizontally to minimize travel distance // Sort windows horizontally to minimize travel distance
row.windows.sort((a, b) => a.realWindow.x - b.realWindow.x); row.windows.sort((a, b) => a.realWindow.x - b.realWindow.x);
}, }
computeLayout(windows, layout) { computeLayout(windows, layout) {
let numRows = layout.numRows; let numRows = layout.numRows;
@ -1055,7 +1048,7 @@ var UnalignedLayoutStrategy = new Lang.Class({
layout.gridWidth = maxRow.fullWidth; layout.gridWidth = maxRow.fullWidth;
layout.gridHeight = gridHeight; layout.gridHeight = gridHeight;
} }
}); };
function padArea(area, padding) { function padArea(area, padding) {
return { return {
@ -1098,10 +1091,8 @@ const WorkspaceActor = new Lang.Class({
/** /**
* @metaWorkspace: a #Meta.Workspace, or null * @metaWorkspace: a #Meta.Workspace, or null
*/ */
var Workspace = new Lang.Class({ var Workspace = class {
Name: 'Workspace', constructor(metaWorkspace, monitorIndex) {
_init(metaWorkspace, monitorIndex) {
// When dragging a window, we use this slot for reserve space. // When dragging a window, we use this slot for reserve space.
this._reservedSlot = null; this._reservedSlot = null;
this._reservedSlotWindow = null; this._reservedSlotWindow = null;
@ -1174,7 +1165,7 @@ var Workspace = new Lang.Class({
if (this.actor.mapped) if (this.actor.mapped)
this._syncActualGeometry(); this._syncActualGeometry();
}); });
}, }
setFullGeometry(geom) { setFullGeometry(geom) {
if (rectEqual(this._fullGeometry, geom)) if (rectEqual(this._fullGeometry, geom))
@ -1184,7 +1175,7 @@ var Workspace = new Lang.Class({
if (this.actor.mapped) if (this.actor.mapped)
this._recalculateWindowPositions(WindowPositionFlags.NONE); this._recalculateWindowPositions(WindowPositionFlags.NONE);
}, }
setActualGeometry(geom) { setActualGeometry(geom) {
if (rectEqual(this._actualGeometry, geom)) if (rectEqual(this._actualGeometry, geom))
@ -1195,7 +1186,7 @@ var Workspace = new Lang.Class({
if (this.actor.mapped) if (this.actor.mapped)
this._syncActualGeometry(); this._syncActualGeometry();
}, }
_syncActualGeometry() { _syncActualGeometry() {
if (this._actualGeometryLater || !this._actualGeometryDirty) if (this._actualGeometryLater || !this._actualGeometryDirty)
@ -1216,7 +1207,7 @@ var Workspace = new Lang.Class({
return false; return false;
}); });
}, }
_lookupIndex(metaWindow) { _lookupIndex(metaWindow) {
for (let i = 0; i < this._windows.length; i++) { for (let i = 0; i < this._windows.length; i++) {
@ -1225,15 +1216,15 @@ var Workspace = new Lang.Class({
} }
} }
return -1; return -1;
}, }
containsMetaWindow(metaWindow) { containsMetaWindow(metaWindow) {
return this._lookupIndex(metaWindow) >= 0; return this._lookupIndex(metaWindow) >= 0;
}, }
isEmpty() { isEmpty() {
return this._windows.length == 0; return this._windows.length == 0;
}, }
setReservedSlot(metaWindow) { setReservedSlot(metaWindow) {
if (this._reservedSlotWindow == metaWindow) if (this._reservedSlotWindow == metaWindow)
@ -1248,7 +1239,7 @@ var Workspace = new Lang.Class({
} }
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
}, }
_recalculateWindowPositions(flags) { _recalculateWindowPositions(flags) {
this._positionWindowsFlags |= flags; this._positionWindowsFlags |= flags;
@ -1262,7 +1253,7 @@ var Workspace = new Lang.Class({
this._positionWindowsId = 0; this._positionWindowsId = 0;
return false; return false;
}); });
}, }
_realRecalculateWindowPositions(flags) { _realRecalculateWindowPositions(flags) {
if (this._repositionWindowsId > 0) { if (this._repositionWindowsId > 0) {
@ -1283,7 +1274,7 @@ var Workspace = new Lang.Class({
this._currentLayout = this._computeLayout(clones); this._currentLayout = this._computeLayout(clones);
this._updateWindowPositions(flags); this._updateWindowPositions(flags);
}, }
_updateWindowPositions(flags) { _updateWindowPositions(flags) {
if (this._currentLayout == null) { if (this._currentLayout == null) {
@ -1378,7 +1369,7 @@ var Workspace = new Lang.Class({
this._showWindowOverlay(clone, overlay); this._showWindowOverlay(clone, overlay);
} }
} }
}, }
syncStacking(stackIndices) { syncStacking(stackIndices) {
let clones = this._windows.slice(); let clones = this._windows.slice();
@ -1398,7 +1389,7 @@ var Workspace = new Lang.Class({
clone.setStackAbove(previousClone.actor); clone.setStackAbove(previousClone.actor);
} }
} }
}, }
_animateClone(clone, overlay, x, y, scale) { _animateClone(clone, overlay, x, y, scale) {
Tweener.addTween(clone.actor, Tweener.addTween(clone.actor,
@ -1414,7 +1405,7 @@ var Workspace = new Lang.Class({
}); });
clone.overlay.relayout(true); clone.overlay.relayout(true);
}, }
_showWindowOverlay(clone, overlay) { _showWindowOverlay(clone, overlay) {
if (clone.inDrag) if (clone.inDrag)
@ -1422,7 +1413,7 @@ var Workspace = new Lang.Class({
if (overlay && overlay._hidden) if (overlay && overlay._hidden)
overlay.show(); overlay.show();
}, }
_delayedWindowRepositioning() { _delayedWindowRepositioning() {
let [x, y, mask] = global.get_pointer(); let [x, y, mask] = global.get_pointer();
@ -1447,7 +1438,7 @@ var Workspace = new Lang.Class({
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
this._repositionWindowsId = 0; this._repositionWindowsId = 0;
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}, }
_doRemoveWindow(metaWin) { _doRemoveWindow(metaWin) {
let win = metaWin.get_compositor_private(); let win = metaWin.get_compositor_private();
@ -1493,7 +1484,7 @@ var Workspace = new Lang.Class({
this._repositionWindowsId = Mainloop.timeout_add(750, this._repositionWindowsId = Mainloop.timeout_add(750,
this._delayedWindowRepositioning.bind(this)); this._delayedWindowRepositioning.bind(this));
GLib.Source.set_name_by_id(this._repositionWindowsId, '[gnome-shell] this._delayedWindowRepositioning'); GLib.Source.set_name_by_id(this._repositionWindowsId, '[gnome-shell] this._delayedWindowRepositioning');
}, }
_doAddWindow(metaWin) { _doAddWindow(metaWin) {
if (this.leavingOverview) if (this.leavingOverview)
@ -1556,27 +1547,27 @@ var Workspace = new Lang.Class({
this._currentLayout = null; this._currentLayout = null;
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE);
}, }
_windowAdded(metaWorkspace, metaWin) { _windowAdded(metaWorkspace, metaWin) {
this._doAddWindow(metaWin); this._doAddWindow(metaWin);
}, }
_windowRemoved(metaWorkspace, metaWin) { _windowRemoved(metaWorkspace, metaWin) {
this._doRemoveWindow(metaWin); this._doRemoveWindow(metaWin);
}, }
_windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) {
if (monitorIndex == this.monitorIndex) { if (monitorIndex == this.monitorIndex) {
this._doAddWindow(metaWin); this._doAddWindow(metaWin);
} }
}, }
_windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) {
if (monitorIndex == this.monitorIndex) { if (monitorIndex == this.monitorIndex) {
this._doRemoveWindow(metaWin); this._doRemoveWindow(metaWin);
} }
}, }
// check for maximized windows on the workspace // check for maximized windows on the workspace
hasMaximizedWindows() { hasMaximizedWindows() {
@ -1588,7 +1579,7 @@ var Workspace = new Lang.Class({
return true; return true;
} }
return false; return false;
}, }
fadeToOverview() { fadeToOverview() {
// We don't want to reposition windows while animating in this way. // 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); this._fadeWindow(i, time, 0);
} }
} }
}, }
fadeFromOverview() { fadeFromOverview() {
this.leavingOverview = true; this.leavingOverview = true;
@ -1695,7 +1686,7 @@ var Workspace = new Lang.Class({
this._fadeWindow(i, time, 255); this._fadeWindow(i, time, 255);
} }
} }
}, }
_fadeWindow(index, time, opacity) { _fadeWindow(index, time, opacity) {
let clone = this._windows[index]; let clone = this._windows[index];
@ -1719,12 +1710,12 @@ var Workspace = new Lang.Class({
// The window is hidden // The window is hidden
clone.actor.opacity = 0; clone.actor.opacity = 0;
} }
}, }
zoomToOverview() { zoomToOverview() {
// Position and scale the windows. // Position and scale the windows.
this._recalculateWindowPositions(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL); this._recalculateWindowPositions(WindowPositionFlags.ANIMATE | WindowPositionFlags.INITIAL);
}, }
zoomFromOverview() { zoomFromOverview() {
let workspaceManager = global.workspace_manager; let workspaceManager = global.workspace_manager;
@ -1749,7 +1740,7 @@ var Workspace = new Lang.Class({
// Position and scale the windows. // Position and scale the windows.
for (let i = 0; i < this._windows.length; i++) for (let i = 0; i < this._windows.length; i++)
this._zoomWindowFromOverview(i); this._zoomWindowFromOverview(i);
}, }
_zoomWindowFromOverview(index) { _zoomWindowFromOverview(index) {
let clone = this._windows[index]; let clone = this._windows[index];
@ -1779,11 +1770,11 @@ var Workspace = new Lang.Class({
transition: 'easeOutQuad' transition: 'easeOutQuad'
}); });
} }
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
_onDestroy(actor) { _onDestroy(actor) {
if (this._overviewHiddenId) { if (this._overviewHiddenId) {
@ -1815,29 +1806,29 @@ var Workspace = new Lang.Class({
} }
this._windows = []; this._windows = [];
}, }
// Sets this.leavingOverview flag to false. // Sets this.leavingOverview flag to false.
_doneLeavingOverview() { _doneLeavingOverview() {
this.leavingOverview = false; this.leavingOverview = false;
}, }
_doneShowingOverview() { _doneShowingOverview() {
this._animatingWindowsFade = false; this._animatingWindowsFade = false;
this._recalculateWindowPositions(WindowPositionFlags.INITIAL); this._recalculateWindowPositions(WindowPositionFlags.INITIAL);
}, }
// Tests if @actor belongs to this workspaces and monitor // Tests if @actor belongs to this workspaces and monitor
_isMyWindow(actor) { _isMyWindow(actor) {
let win = actor.meta_window; let win = actor.meta_window;
return (this.metaWorkspace == null || win.located_on_workspace(this.metaWorkspace)) && return (this.metaWorkspace == null || win.located_on_workspace(this.metaWorkspace)) &&
(win.get_monitor() == this.monitorIndex); (win.get_monitor() == this.monitorIndex);
}, }
// Tests if @win should be shown in the Overview // Tests if @win should be shown in the Overview
_isOverviewWindow(win) { _isOverviewWindow(win) {
return !win.get_meta_window().skip_taskbar; return !win.get_meta_window().skip_taskbar;
}, }
// Create a clone of a (non-desktop) window and add it to the window list // Create a clone of a (non-desktop) window and add it to the window list
_addWindowClone(win, positioned) { _addWindowClone(win, positioned) {
@ -1884,7 +1875,7 @@ var Workspace = new Lang.Class({
this._windowOverlays.push(overlay); this._windowOverlays.push(overlay);
return [clone, overlay]; return [clone, overlay];
}, }
_removeWindowClone(metaWin) { _removeWindowClone(metaWin) {
// find the position of the window in our list // find the position of the window in our list
@ -1895,7 +1886,7 @@ var Workspace = new Lang.Class({
this._windowOverlays.splice(index, 1); this._windowOverlays.splice(index, 1);
return this._windows.splice(index, 1).pop(); return this._windows.splice(index, 1).pop();
}, }
_onShowOverlayClose(windowOverlay) { _onShowOverlayClose(windowOverlay) {
for (let i = 0; i < this._windowOverlays.length; i++) { for (let i = 0; i < this._windowOverlays.length; i++) {
@ -1904,7 +1895,7 @@ var Workspace = new Lang.Class({
continue; continue;
overlay.hideCloseButton(); overlay.hideCloseButton();
} }
}, }
_isBetterLayout(oldLayout, newLayout) { _isBetterLayout(oldLayout, newLayout) {
if (oldLayout.scale === undefined) if (oldLayout.scale === undefined)
@ -1926,7 +1917,7 @@ var Workspace = new Lang.Class({
// Lose -- worse scale and space // Lose -- worse scale and space
return false; return false;
} }
}, }
_getBestLayout(windows, area, rowSpacing, columnSpacing) { _getBestLayout(windows, area, rowSpacing, columnSpacing) {
// We look for the largest scale that allows us to fit the // We look for the largest scale that allows us to fit the
@ -1956,7 +1947,7 @@ var Workspace = new Lang.Class({
} }
return lastLayout; return lastLayout;
}, }
_getSpacingAndPadding() { _getSpacingAndPadding() {
let node = this.actor.get_theme_node(); let node = this.actor.get_theme_node();
@ -1985,20 +1976,20 @@ var Workspace = new Lang.Class({
padding.right += rightBorder; padding.right += rightBorder;
return [rowSpacing, columnSpacing, padding]; return [rowSpacing, columnSpacing, padding];
}, }
_computeLayout(windows) { _computeLayout(windows) {
let [rowSpacing, columnSpacing, padding] = this._getSpacingAndPadding(); let [rowSpacing, columnSpacing, padding] = this._getSpacingAndPadding();
let area = padArea(this._fullGeometry, padding); let area = padArea(this._fullGeometry, padding);
return this._getBestLayout(windows, area, rowSpacing, columnSpacing); return this._getBestLayout(windows, area, rowSpacing, columnSpacing);
}, }
_onCloneSelected(clone, time) { _onCloneSelected(clone, time) {
let wsIndex = undefined; let wsIndex = undefined;
if (this.metaWorkspace) if (this.metaWorkspace)
wsIndex = this.metaWorkspace.index(); wsIndex = this.metaWorkspace.index();
Main.activateWindow(clone.metaWindow, time, wsIndex); Main.activateWindow(clone.metaWindow, time, wsIndex);
}, }
// Draggable target interface // Draggable target interface
handleDragOver(source, actor, x, y, time) { handleDragOver(source, actor, x, y, time) {
@ -2008,7 +1999,7 @@ var Workspace = new Lang.Class({
return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.COPY_DROP;
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
}, }
acceptDrop(source, actor, x, y, time) { acceptDrop(source, actor, x, y, time) {
if (source.realWindow) { if (source.realWindow) {
@ -2044,6 +2035,5 @@ var Workspace = new Lang.Class({
return false; return false;
} }
}); };
Signals.addSignalMethods(Workspace.prototype); Signals.addSignalMethods(Workspace.prototype);

View File

@ -54,10 +54,8 @@ var PrimaryActorLayout = new Lang.Class({
}, },
}); });
var WindowClone = new Lang.Class({ var WindowClone = class {
Name: 'WindowClone', constructor(realWindow) {
_init(realWindow) {
this.clone = new Clutter.Clone({ source: realWindow }); this.clone = new Clutter.Clone({ source: realWindow });
/* Can't use a Shell.GenericContainer because of DND and reparenting... */ /* Can't use a Shell.GenericContainer because of DND and reparenting... */
@ -108,7 +106,7 @@ var WindowClone = new Lang.Class({
return true; return true;
}; };
this.metaWindow.foreach_transient(iter); this.metaWindow.foreach_transient(iter);
}, }
// Find the actor just below us, respecting reparenting done // Find the actor just below us, respecting reparenting done
// by DND code // by DND code
@ -124,7 +122,7 @@ var WindowClone = new Lang.Class({
} else { } else {
return this._stackAbove; return this._stackAbove;
} }
}, }
setStackAbove(actor) { setStackAbove(actor) {
this._stackAbove = actor; this._stackAbove = actor;
@ -139,15 +137,15 @@ var WindowClone = new Lang.Class({
this.actor.lower_bottom(); this.actor.lower_bottom();
else else
this.actor.raise(actualAbove); this.actor.raise(actualAbove);
}, }
destroy() { destroy() {
this.actor.destroy(); this.actor.destroy();
}, }
addAttachedDialog(win) { addAttachedDialog(win) {
this._doAddAttachedDialog(win, win.get_compositor_private()); this._doAddAttachedDialog(win, win.get_compositor_private());
}, }
_doAddAttachedDialog(metaDialog, realDialog) { _doAddAttachedDialog(metaDialog, realDialog) {
let clone = new Clutter.Clone({ source: realDialog }); let clone = new Clutter.Clone({ source: realDialog });
@ -160,7 +158,7 @@ var WindowClone = new Lang.Class({
clone.destroy(); clone.destroy();
}); });
this.actor.add_child(clone); this.actor.add_child(clone);
}, }
_updateDialogPosition(realDialog, cloneDialog) { _updateDialogPosition(realDialog, cloneDialog) {
let metaDialog = realDialog.meta_window; let metaDialog = realDialog.meta_window;
@ -168,11 +166,11 @@ var WindowClone = new Lang.Class({
let rect = this.metaWindow.get_frame_rect(); let rect = this.metaWindow.get_frame_rect();
cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y); cloneDialog.set_position(dialogRect.x - rect.x, dialogRect.y - rect.y);
}, }
_onPositionChanged() { _onPositionChanged() {
this.actor.set_position(this.realWindow.x, this.realWindow.y); this.actor.set_position(this.realWindow.x, this.realWindow.y);
}, }
_disconnectSignals() { _disconnectSignals() {
this.actor.get_children().forEach(child => { this.actor.get_children().forEach(child => {
@ -181,7 +179,7 @@ var WindowClone = new Lang.Class({
realWindow.disconnect(child._updateId); realWindow.disconnect(child._updateId);
realWindow.disconnect(child._destroyId); realWindow.disconnect(child._destroyId);
}); });
}, }
_onDestroy() { _onDestroy() {
this._disconnectSignals(); this._disconnectSignals();
@ -194,13 +192,13 @@ var WindowClone = new Lang.Class({
} }
this.disconnectAll(); this.disconnectAll();
}, }
_onButtonRelease(actor, event) { _onButtonRelease(actor, event) {
this.emit('selected', event.get_time()); this.emit('selected', event.get_time());
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onTouchEvent(actor, event) { _onTouchEvent(actor, event) {
if (event.type() != Clutter.EventType.TOUCH_END || if (event.type() != Clutter.EventType.TOUCH_END ||
@ -209,16 +207,16 @@ var WindowClone = new Lang.Class({
this.emit('selected', event.get_time()); this.emit('selected', event.get_time());
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
}, }
_onDragBegin(draggable, time) { _onDragBegin(draggable, time) {
this.inDrag = true; this.inDrag = true;
this.emit('drag-begin'); this.emit('drag-begin');
}, }
_onDragCancelled(draggable, time) { _onDragCancelled(draggable, time) {
this.emit('drag-cancelled'); this.emit('drag-cancelled');
}, }
_onDragEnd(draggable, time, snapback) { _onDragEnd(draggable, time, snapback) {
this.inDrag = false; this.inDrag = false;
@ -236,7 +234,7 @@ var WindowClone = new Lang.Class({
this.emit('drag-end'); this.emit('drag-end');
} }
}); };
Signals.addSignalMethods(WindowClone.prototype); Signals.addSignalMethods(WindowClone.prototype);
@ -254,10 +252,8 @@ var ThumbnailState = {
/** /**
* @metaWorkspace: a #Meta.Workspace * @metaWorkspace: a #Meta.Workspace
*/ */
var WorkspaceThumbnail = new Lang.Class({ var WorkspaceThumbnail = class {
Name: 'WorkspaceThumbnail', constructor(metaWorkspace) {
_init(metaWorkspace) {
this.metaWorkspace = metaWorkspace; this.metaWorkspace = metaWorkspace;
this.monitorIndex = Main.layoutManager.primaryIndex; this.monitorIndex = Main.layoutManager.primaryIndex;
@ -311,18 +307,18 @@ var WorkspaceThumbnail = new Lang.Class({
this.state = ThumbnailState.NORMAL; this.state = ThumbnailState.NORMAL;
this._slidePosition = 0; // Fully slid in this._slidePosition = 0; // Fully slid in
this._collapseFraction = 0; // Not collapsed this._collapseFraction = 0; // Not collapsed
}, }
_createBackground() { _createBackground() {
this._bgManager = new Background.BackgroundManager({ monitorIndex: Main.layoutManager.primaryIndex, this._bgManager = new Background.BackgroundManager({ monitorIndex: Main.layoutManager.primaryIndex,
container: this._contents, container: this._contents,
vignette: false }); vignette: false });
}, }
setPorthole(x, y, width, height) { setPorthole(x, y, width, height) {
this.actor.set_size(width, height); this.actor.set_size(width, height);
this._contents.set_position(-x, -y); this._contents.set_position(-x, -y);
}, }
_lookupIndex(metaWindow) { _lookupIndex(metaWindow) {
for (let i = 0; i < this._windows.length; i++) { for (let i = 0; i < this._windows.length; i++) {
@ -331,7 +327,7 @@ var WorkspaceThumbnail = new Lang.Class({
} }
} }
return -1; return -1;
}, }
syncStacking(stackIndices) { syncStacking(stackIndices) {
this._windows.sort((a, b) => { this._windows.sort((a, b) => {
@ -350,31 +346,31 @@ var WorkspaceThumbnail = new Lang.Class({
clone.setStackAbove(previousClone.actor); clone.setStackAbove(previousClone.actor);
} }
} }
}, }
set slidePosition(slidePosition) { set slidePosition(slidePosition) {
this._slidePosition = slidePosition; this._slidePosition = slidePosition;
this.actor.queue_relayout(); this.actor.queue_relayout();
}, }
get slidePosition() { get slidePosition() {
return this._slidePosition; return this._slidePosition;
}, }
set collapseFraction(collapseFraction) { set collapseFraction(collapseFraction) {
this._collapseFraction = collapseFraction; this._collapseFraction = collapseFraction;
this.actor.queue_relayout(); this.actor.queue_relayout();
}, }
get collapseFraction() { get collapseFraction() {
return this._collapseFraction; return this._collapseFraction;
}, }
_doRemoveWindow(metaWin) { _doRemoveWindow(metaWin) {
let clone = this._removeWindowClone(metaWin); let clone = this._removeWindowClone(metaWin);
if (clone) if (clone)
clone.destroy(); clone.destroy();
}, }
_doAddWindow(metaWin) { _doAddWindow(metaWin) {
if (this._removed) if (this._removed)
@ -428,11 +424,11 @@ var WorkspaceThumbnail = new Lang.Class({
let clone = this._windows[idx]; let clone = this._windows[idx];
clone.addAttachedDialog(metaWin); clone.addAttachedDialog(metaWin);
} }
}, }
_windowAdded(metaWorkspace, metaWin) { _windowAdded(metaWorkspace, metaWin) {
this._doAddWindow(metaWin); this._doAddWindow(metaWin);
}, }
_windowRemoved(metaWorkspace, metaWin) { _windowRemoved(metaWorkspace, metaWin) {
let index = this._allWindows.indexOf(metaWin); let index = this._allWindows.indexOf(metaWin);
@ -443,31 +439,31 @@ var WorkspaceThumbnail = new Lang.Class({
} }
this._doRemoveWindow(metaWin); this._doRemoveWindow(metaWin);
}, }
_windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) { _windowEnteredMonitor(metaDisplay, monitorIndex, metaWin) {
if (monitorIndex == this.monitorIndex) { if (monitorIndex == this.monitorIndex) {
this._doAddWindow(metaWin); this._doAddWindow(metaWin);
} }
}, }
_windowLeftMonitor(metaDisplay, monitorIndex, metaWin) { _windowLeftMonitor(metaDisplay, monitorIndex, metaWin) {
if (monitorIndex == this.monitorIndex) { if (monitorIndex == this.monitorIndex) {
this._doRemoveWindow(metaWin); this._doRemoveWindow(metaWin);
} }
}, }
_updateMinimized(metaWin) { _updateMinimized(metaWin) {
if (metaWin.minimized) if (metaWin.minimized)
this._doRemoveWindow(metaWin); this._doRemoveWindow(metaWin);
else else
this._doAddWindow(metaWin); this._doAddWindow(metaWin);
}, }
destroy() { destroy() {
if (this.actor) if (this.actor)
this.actor.destroy(); this.actor.destroy();
}, }
workspaceRemoved() { workspaceRemoved() {
if (this._removed) if (this._removed)
@ -482,7 +478,7 @@ var WorkspaceThumbnail = new Lang.Class({
for (let i = 0; i < this._allWindows.length; i++) for (let i = 0; i < this._allWindows.length; i++)
this._allWindows[i].disconnect(this._minimizedChangedIds[i]); this._allWindows[i].disconnect(this._minimizedChangedIds[i]);
}, }
_onDestroy(actor) { _onDestroy(actor) {
this.workspaceRemoved(); this.workspaceRemoved();
@ -494,20 +490,20 @@ var WorkspaceThumbnail = new Lang.Class({
this._windows = []; this._windows = [];
this.actor = null; this.actor = null;
}, }
// Tests if @actor belongs to this workspace and monitor // Tests if @actor belongs to this workspace and monitor
_isMyWindow(actor) { _isMyWindow(actor) {
let win = actor.meta_window; let win = actor.meta_window;
return win.located_on_workspace(this.metaWorkspace) && return win.located_on_workspace(this.metaWorkspace) &&
(win.get_monitor() == this.monitorIndex); (win.get_monitor() == this.monitorIndex);
}, }
// Tests if @win should be shown in the Overview // Tests if @win should be shown in the Overview
_isOverviewWindow(win) { _isOverviewWindow(win) {
return !win.get_meta_window().skip_taskbar && return !win.get_meta_window().skip_taskbar &&
win.get_meta_window().showing_on_its_workspace(); win.get_meta_window().showing_on_its_workspace();
}, }
// Create a clone of a (non-desktop) window and add it to the window list // Create a clone of a (non-desktop) window and add it to the window list
_addWindowClone(win) { _addWindowClone(win) {
@ -538,7 +534,7 @@ var WorkspaceThumbnail = new Lang.Class({
this._windows.push(clone); this._windows.push(clone);
return clone; return clone;
}, }
_removeWindowClone(metaWin) { _removeWindowClone(metaWin) {
// find the position of the window in our list // find the position of the window in our list
@ -548,7 +544,7 @@ var WorkspaceThumbnail = new Lang.Class({
return null; return null;
return this._windows.splice(index, 1).pop(); return this._windows.splice(index, 1).pop();
}, }
activate(time) { activate(time) {
if (this.state > ThumbnailState.NORMAL) if (this.state > ThumbnailState.NORMAL)
@ -561,7 +557,7 @@ var WorkspaceThumbnail = new Lang.Class({
Main.overview.hide(); Main.overview.hide();
else else
this.metaWorkspace.activate(time); this.metaWorkspace.activate(time);
}, }
// Draggable target interface used only by ThumbnailsBox // Draggable target interface used only by ThumbnailsBox
handleDragOverInternal(source, time) { handleDragOverInternal(source, time) {
@ -579,7 +575,7 @@ var WorkspaceThumbnail = new Lang.Class({
return DND.DragMotionResult.COPY_DROP; return DND.DragMotionResult.COPY_DROP;
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
}, }
acceptDropInternal(source, time) { acceptDropInternal(source, time) {
if (this.state > ThumbnailState.NORMAL) if (this.state > ThumbnailState.NORMAL)
@ -608,8 +604,7 @@ var WorkspaceThumbnail = new Lang.Class({
return false; return false;
} }
}); };
Signals.addSignalMethods(WorkspaceThumbnail.prototype); Signals.addSignalMethods(WorkspaceThumbnail.prototype);

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