c1de2788b1
The design has a combined volume-network-power indicator in the lock screen, which when opened shows a volume slider. Implement it by abstracting the volume menu into a PopupMenuSection, and by creating three StIcons bound to the real ones. https://bugzilla.gnome.org/show_bug.cgi?id=682540
139 lines
4.8 KiB
JavaScript
139 lines
4.8 KiB
JavaScript
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
|
|
const Lang = imports.lang;
|
|
|
|
const Config = imports.misc.config;
|
|
const Main = imports.ui.main;
|
|
const Params = imports.misc.params;
|
|
|
|
|
|
const STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION = {
|
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
|
'volume': imports.ui.status.volume.Indicator,
|
|
'battery': imports.ui.status.power.Indicator,
|
|
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
|
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
|
'userMenu': imports.ui.userMenu.UserMenuButton
|
|
};
|
|
|
|
if (Config.HAVE_BLUETOOTH)
|
|
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['bluetooth'] =
|
|
imports.ui.status.bluetooth.Indicator;
|
|
|
|
try {
|
|
STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION['network'] =
|
|
imports.ui.status.network.NMApplet;
|
|
} catch(e) {
|
|
log('NMApplet is not supported. It is possible that your NetworkManager version is too old');
|
|
}
|
|
|
|
|
|
const DEFAULT_MODE = 'user';
|
|
|
|
const _modes = {
|
|
'gdm': { hasOverview: false,
|
|
hasAppMenu: false,
|
|
showCalendarEvents: false,
|
|
allowSettings: false,
|
|
allowExtensions: false,
|
|
allowKeybindingsWhenModal: true,
|
|
hasRunDialog: false,
|
|
hasWorkspaces: false,
|
|
createSession: Main.createGDMSession,
|
|
createUnlockDialog: Main.createGDMLoginDialog,
|
|
extraStylesheet: null,
|
|
statusArea: {
|
|
order: [
|
|
'a11y', 'display', 'keyboard',
|
|
'volume', 'battery', 'lockScreen', 'powerMenu'
|
|
],
|
|
implementation: {
|
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
|
'volume': imports.ui.status.volume.Indicator,
|
|
'battery': imports.ui.status.power.Indicator,
|
|
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
|
'keyboard': imports.ui.status.keyboard.InputSourceIndicator,
|
|
'powerMenu': imports.gdm.powerMenu.PowerMenuButton
|
|
}
|
|
}
|
|
},
|
|
|
|
'initial-setup': { hasOverview: false,
|
|
hasAppMenu: false,
|
|
showCalendarEvents: false,
|
|
allowSettings: false,
|
|
allowExtensions: false,
|
|
allowKeybindingsWhenModal: false,
|
|
hasRunDialog: false,
|
|
hasWorkspaces: false,
|
|
createSession: Main.createInitialSetupSession,
|
|
extraStylesheet: null,
|
|
statusArea: {
|
|
order: [
|
|
'a11y', 'keyboard', 'volume', 'lockScreen',
|
|
],
|
|
implementation: {
|
|
'a11y': imports.ui.status.accessibility.ATIndicator,
|
|
'keyboard': imports.ui.status.keyboard.XKBIndicator,
|
|
'volume': imports.ui.status.volume.Indicator,
|
|
'lockScreen': imports.ui.status.lockScreenMenu.Indicator,
|
|
}
|
|
}
|
|
},
|
|
|
|
'user': { hasOverview: true,
|
|
hasAppMenu: true,
|
|
showCalendarEvents: true,
|
|
allowSettings: true,
|
|
allowExtensions: true,
|
|
allowKeybindingsWhenModal: false,
|
|
hasRunDialog: true,
|
|
hasWorkspaces: true,
|
|
createSession: Main.createUserSession,
|
|
createUnlockDialog: Main.createSessionUnlockDialog,
|
|
extraStylesheet: null,
|
|
statusArea: {
|
|
order: [
|
|
'input-method', 'a11y', 'keyboard', 'volume', 'bluetooth',
|
|
'network', 'battery', 'lockScreen', 'userMenu'
|
|
],
|
|
implementation: STANDARD_STATUS_AREA_SHELL_IMPLEMENTATION
|
|
}
|
|
}
|
|
};
|
|
|
|
function listModes() {
|
|
let modes = Object.getOwnPropertyNames(_modes);
|
|
for (let i = 0; i < modes.length; i++)
|
|
print(modes[i]);
|
|
}
|
|
|
|
const SessionMode = new Lang.Class({
|
|
Name: 'SessionMode',
|
|
|
|
_init: function() {
|
|
let params = _modes[global.session_mode];
|
|
|
|
params = Params.parse(params, _modes[DEFAULT_MODE]);
|
|
|
|
this._createSession = params.createSession;
|
|
delete params.createSession;
|
|
this._createUnlockDialog = params.createUnlockDialog;
|
|
delete params.createUnlockDialog;
|
|
|
|
Lang.copyProperties(params, this);
|
|
},
|
|
|
|
createSession: function() {
|
|
if (this._createSession)
|
|
this._createSession();
|
|
},
|
|
|
|
createUnlockDialog: function() {
|
|
if (this._createUnlockDialog)
|
|
return this._createUnlockDialog.apply(this, arguments);
|
|
else
|
|
return null;
|
|
},
|
|
});
|