[gnome-shell] KeyboardStatus: handle modifier key indicators
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] KeyboardStatus: handle modifier key indicators
- Date: Fri, 21 Jan 2011 18:38:51 +0000 (UTC)
commit 20f49e8c8917bff0d6e17ba6218fcbaec3b016e9
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Wed Jan 12 16:00:54 2011 +0100
KeyboardStatus: handle modifier key indicators
Introduce a generic framework for on/off indicators that are shown
in the panel, next to the system status area, and use it for
showing the status of modifier keys.
https://bugzilla.gnome.org/show_bug.cgi?id=600771
js/ui/panel.js | 28 ++++++++++++++++------
js/ui/status/keyboard.js | 55 +++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 72 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 97789d8..c1baf2c 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -43,6 +43,10 @@ const STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION = {
if (Config.HAVE_BLUETOOTH)
STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION['bluetooth'] = imports.ui.status.bluetooth.Indicator;
+const STANDARD_TRAY_INDICATOR_FACTORIES = [
+ imports.ui.status.keyboard.ModifierIndicatorFactory
+];
+
// in org.gnome.desktop.interface
const CLOCK_FORMAT_KEY = 'clock-format';
@@ -809,17 +813,18 @@ Panel.prototype = {
/* right */
- // System status applets live in statusBox, while legacy tray icons
+ // On-off indicators (for keyboard leds and accessx) are in indicatorBox
+ // System status applets live in statusBox, and legacy tray icons
// live in trayBox
// The trayBox is hidden when there are no tray icons.
- let statusBox = new St.BoxLayout({ name: 'statusTray' });
- let trayBox = new St.BoxLayout({ name: 'legacyTray' });
- this._trayBox = trayBox;
- this._statusBox = statusBox;
+ this._indicatorBox = new St.BoxLayout({ name: 'indicatorBox' });
+ this._trayBox = new St.BoxLayout({ name: 'legacyTray' });
+ this._statusBox = new St.BoxLayout({ name: 'statusTray' });
- trayBox.hide();
- this._rightBox.add(trayBox);
- this._rightBox.add(statusBox);
+ this._trayBox.hide();
+ this._rightBox.add(this._indicatorBox);
+ this._rightBox.add(this._trayBox);
+ this._rightBox.add(this._statusBox);
Main.statusIconDispatcher.connect('status-icon-added', Lang.bind(this, this._onTrayIconAdded));
Main.statusIconDispatcher.connect('status-icon-removed', Lang.bind(this, this._onTrayIconRemoved));
@@ -869,6 +874,13 @@ Panel.prototype = {
},
startStatusArea: function() {
+ for (let i = 0; i < STANDARD_TRAY_INDICATOR_FACTORIES.length; i++) {
+ let factory = new STANDARD_TRAY_INDICATOR_FACTORIES[i];
+ let indicators = factory.getIndicators();
+ for (let j = 0; j < indicators.length; j++)
+ this._indicatorBox.add(indicators[j]);
+ }
+
for (let i = 0; i < STANDARD_TRAY_ICON_ORDER.length; i++) {
let role = STANDARD_TRAY_ICON_ORDER[i];
let constructor = STANDARD_TRAY_ICON_SHELL_IMPLEMENTATION[role];
diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
index 404a766..3813c62 100644
--- a/js/ui/status/keyboard.js
+++ b/js/ui/status/keyboard.js
@@ -42,7 +42,7 @@ LayoutMenuItem.prototype = {
};
function XKBIndicator() {
- this._init.apply(this, arguments);
+ this._init.call(this);
}
XKBIndicator.prototype = {
@@ -75,7 +75,7 @@ XKBIndicator.prototype = {
this._sync_config();
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
- this.menu.addAction(_("Keyboard Settings"), function() {
+ this.menu.addAction(_("Localization Settings"), function() {
GLib.spawn_command_line_async('gnome-control-center region');
});
},
@@ -203,4 +203,53 @@ XKBIndicator.prototype = {
for (let i = 0; i < this._labelActors.length; i++)
this._labelActors[i].allocate_align_fill(box, 0.5, 0, false, false, flags);
}
-};
\ No newline at end of file
+};
+
+function ModifierIndicatorFactory() {
+ this._init.call(this);
+}
+
+ModifierIndicatorFactory.prototype = {
+ _init: function() {
+ this._settings = new Gio.Settings({ schema: INDICATOR_SCHEMA });
+ this._settings.connect('changed::show-keyboard-leds-indicator', Lang.bind(this, this._changed));
+
+ this._config = Gkbd.Configuration.get();
+ this._config.connect('indicators-changed', Lang.bind(this, this._changed));
+
+ this._scrollLock = new St.Icon({ icon_name: 'kbdled-scroll-lock', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
+ this._numLock = new St.Icon({ icon_name: 'kbdled-num-lock', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
+ this._capsLock = new St.Icon({ icon_name: 'kbdled-caps-lock', icon_type: St.IconType.SYMBOLIC, style_class: 'system-status-icon' });
+
+ this._changed();
+ },
+
+ getIndicators: function() {
+ return [this._scrollLock, this._numLock, this._capsLock];
+ },
+
+ _changed: function() {
+ let enable = this._settings.get_boolean('show-keyboard-leds-indicator');
+
+ if (enable) {
+ if (this._config.get_scroll_lock_state())
+ this._scrollLock.show();
+ else
+ this._scrollLock.hide();
+
+ if (this._config.get_num_lock_state())
+ this._numLock.show();
+ else
+ this._numLock.hide();
+
+ if (this._config.get_caps_lock_state())
+ this._capsLock.show();
+ else
+ this._capsLock.hide();
+ } else {
+ this._scrollLock.hide();
+ this._numLock.hide();
+ this._capsLock.hide();
+ }
+ }
+};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]