[gnome-shell] status/keyboard: Switch input source on special modifiers accelerator



commit a2a580954ac6b2c80592be1b0b68a2fe2b4fe625
Author: Rui Matos <tiagomatos gmail com>
Date:   Fri Mar 29 02:35:32 2013 +0100

    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

 js/ui/status/keyboard.js |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
index 0dbcc4a..903afe2 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]