status/keyboard: Switch input source on special modifiers accelerator
This simply mimics the X server's layout switching behavior by advancing to the next input source and wrapping around. https://bugzilla.gnome.org/show_bug.cgi?id=697008
This commit is contained in:
parent
cd7197e605
commit
d45ab6f15e
@ -390,6 +390,8 @@ const InputSourceIndicator = new Lang.Class({
|
|||||||
});
|
});
|
||||||
this._keyboardManager.g_default_timeout = MAX_INPUT_SOURCE_ACTIVATION_TIME;
|
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.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||||
this._showLayoutItem = this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, this._showLayout));
|
this._showLayoutItem = this.menu.addAction(_("Show Keyboard Layout"), Lang.bind(this, this._showLayout));
|
||||||
|
|
||||||
@ -423,6 +425,28 @@ const InputSourceIndicator = new Lang.Class({
|
|||||||
this._inputSourcesChanged();
|
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) {
|
_switchInputSource: function(display, screen, window, binding) {
|
||||||
if (this._mruSources.length < 2)
|
if (this._mruSources.length < 2)
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user