[gnome-shell/wip/carlosg/fix-issue-46: 7/7] keyboard: Set 'latched' pseudo-class on latched shift key



commit d2c693d5f1c66f3fad750f2475dd983dcb92f4c3
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Feb 15 14:48:46 2018 +0100

    keyboard: Set 'latched' pseudo-class on latched shift key
    
    This is pseudo-class is added on .shift-key-uppercase whenever the shift
    state is latched, a matching selector would be:
    .keyboard-key.shift-key-uppercase:latched {}

 js/ui/keyboard.js | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
---
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 33ec36810..2c1587383 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -450,6 +450,13 @@ var Key = new Lang.Class({
     setWidth: function (width) {
         this.keyButton.keyWidth = width;
     },
+
+    setLatched: function (latched) {
+        if (latched)
+            this.keyButton.add_style_pseudo_class('latched');
+        else
+            this.keyButton.remove_style_pseudo_class('latched');
+    },
 });
 Signals.addSignalMethods(Key.prototype);
 
@@ -749,6 +756,8 @@ var Keyboard = new Lang.Class({
             let level = (i >= 1 && levels.length == 3) ? i + 1 : i;
 
             let layout = new KeyContainer();
+            layout.shiftKeys = [];
+
             this._loadRows(currentLevel, level, levels.length, layout);
             layers[level] = layout;
             this.actor.add(layout, { expand: true });
@@ -845,7 +854,10 @@ var Keyboard = new Lang.Class({
             if (switchToLevel == 1) {
                 extraButton.connect('long-press', Lang.bind(this, function() {
                     this._latched = true;
+                    this._setCurrentLevelLatched(this._current_page, this._latched);
                 }));
+            } else if (switchToLevel == 0) {
+                layout.shiftKeys.push(extraButton);
             }
 
             /* Fixup default keys based on the number of levels/keys */
@@ -868,6 +880,13 @@ var Keyboard = new Lang.Class({
         }
     },
 
+    _setCurrentLevelLatched: function(layout, latched) {
+        for (let i = 0; layout.shiftKeys[i]; i++) {
+            let key = layout.shiftKeys[i];
+            key.setLatched(latched);
+        }
+    },
+
     _getDefaultKeysForRow: function(row, numRows, level) {
         let pre, post;
 
@@ -961,6 +980,7 @@ var Keyboard = new Lang.Class({
         let layers = this._groups[activeGroupName];
 
         if (this._current_page != null) {
+            this._setCurrentLevelLatched(this._current_page, false);
             this._current_page.hide();
         }
 


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