From f99b4da4ecfbe5aa3b8853f514a866e22531d9ae Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Sun, 15 May 2011 19:31:02 +0200 Subject: [PATCH] KeyboardStatus: disambiguate duplicate short descriptions If two layouts have the same short description (for example, english (US) and english (dvorak)), add a subscript for disambiguating among them. https://bugzilla.gnome.org/show_bug.cgi?id=650128 --- js/ui/status/keyboard.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index 1db0d8286..7b425a434 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -79,6 +79,28 @@ XKBIndicator.prototype = { }); }, + _adjust_group_names: function(names) { + // Disambiguate duplicate names with a subscript + // This is O(N^2) to avoid sorting names + // but N <= 4 so who cares? + + for (let i = 0; i < names.length; i++) { + let name = names[i]; + let cnt = 0; + for (let j = i + 1; j < names.length; j++) { + if (names[j] == name) { + cnt++; + // U+2081 SUBSCRIPT ONE + names[j] = name + String.fromCharCode(0x2081 + cnt); + } + } + if (cnt != 0) + names[i] = name + '\u2081'; + } + + return names; + }, + _sync_config: function() { this._showFlags = this._config.if_flags_shown(); if (this._showFlags) { @@ -101,7 +123,7 @@ XKBIndicator.prototype = { for (let i = 0; i < this._labelActors.length; i++) this._labelActors[i].destroy(); - let short_names = this._config.get_short_group_names(); + let short_names = this._adjust_group_names(this._config.get_short_group_names()); this._selectedLayout = null; this._layoutItems = [ ];