diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index 0dbcc4ac4..903afe2dc 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -398,6 +398,8 @@ const InputSourceIndicator = new Lang.Class({ }); this._keyboardManager.g_default_timeout = MAX_INPUT_SOURCE_ACTIVATION_TIME; + global.display.connect('modifiers-accelerator-activated', Lang.bind(this, this._modifiersSwitcher)); + this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem()); this._showLayoutItem = this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, this._showLayout)); @@ -431,6 +433,28 @@ const InputSourceIndicator = new Lang.Class({ this._inputSourcesChanged(); }, + _modifiersSwitcher: function() { + let sourceIndexes = Object.keys(this._inputSources); + if (sourceIndexes.length == 0) { + releaseKeyboard(); + return true; + } + + let is = this._currentSource; + if (!is) + is = this._inputSources[sourceIndexes[0]]; + + let nextIndex = is.index + 1; + if (nextIndex > sourceIndexes[sourceIndexes.length - 1]) + nextIndex = 0; + + while (!(is = this._inputSources[nextIndex])) + nextIndex += 1; + + is.activate(); + return true; + }, + _switchInputSource: function(display, screen, window, binding) { if (this._mruSources.length < 2) return;