[gnome-shell/wip/carlosg/fix-issue-46: 3/8] keyboard: Implement Key object 'long-press' signal



commit d8fd7b5a44494cbfefc106e338e6068519240849
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Feb 15 12:18:59 2018 +0100

    keyboard: Implement Key object 'long-press' signal
    
    This signal may be emitted on any key, regardless of extended keys, so
    make the timeout useful for both situations.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/issues/46

 js/ui/keyboard.js | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index ad973685d..ea66b8375 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -263,6 +263,7 @@ var Key = new Lang.Class({
         this._capturedPress = false;
         this._capturedEventId = 0;
         this._unmapId = 0;
+        this._longPress = false;
     },
 
     _onDestroy: function() {
@@ -298,16 +299,25 @@ var Key = new Lang.Class({
     _press: function(key) {
         if (key != this.key || this._extended_keys.length == 0) {
             this.emit('pressed', this._getKeyval(key), key);
-        } else if (key == this.key) {
+        }
+
+        if (key == this.key) {
             this._pressTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
                                                     KEY_LONG_PRESS_TIME,
                                                     Lang.bind(this, function() {
-                                                        this.keyButton.set_hover(false);
-                                                        this.keyButton.fake_release();
+                                                        this._longPress = true;
                                                         this._pressTimeoutId = 0;
-                                                        this._touchPressed = false;
-                                                        this._ensureExtendedKeysPopup();
-                                                        this._showSubkeys();
+
+                                                        this.emit('long-press');
+
+                                                        if (this._extended_keys.length > 0) {
+                                                            this._touchPressed = false;
+                                                            this.keyButton.set_hover(false);
+                                                            this.keyButton.fake_release();
+                                                            this._ensureExtendedKeysPopup();
+                                                            this._showSubkeys();
+                                                        }
+
                                                         return GLib.SOURCE_REMOVE;
                                                     }));
         }
@@ -317,11 +327,14 @@ var Key = new Lang.Class({
         if (this._pressTimeoutId != 0) {
             GLib.source_remove(this._pressTimeoutId);
             this._pressTimeoutId = 0;
-            this.emit('pressed', this._getKeyval(key), key);
         }
 
+        if (!this._longPress && key == this.key && this._extended_keys.length > 0)
+            this.emit('pressed', this._getKeyval(key), key);
+
         this.emit('released', this._getKeyval(key), key);
         this._hideSubkeys();
+        this._longPress = false;
     },
 
     _onCapturedEvent: function(actor, event) {


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