[gnome-shell] Keyboard: fix timestamp handling to account for CURRENT_TIME



commit bf2d2071fc6062d25a6dadea830df5a5e2cbbb27
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Fri Jul 20 15:59:53 2012 +0200

    Keyboard: fix timestamp handling to account for CURRENT_TIME
    
    CLUTTER_CURRENT_TIME (like GDK_CURRENT_TIME and libX11 CurrentTime) is 0,
    and thus compares lower than all valid timestamps, meaning that
    focus changes without an X11 event in the stack are ignored by
    the on screen keyboard.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=664309

 js/ui/keyboard.js |   26 +++++++++++++++++++++-----
 1 files changed, 21 insertions(+), 5 deletions(-)
---
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 57e4db4..6a4d508 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -201,7 +201,7 @@ const Keyboard = new Lang.Class({
 
         this.actor = null;
 
-        this._timestamp = global.get_current_time();
+        this._timestamp = global.display.get_current_time_roundtrip();
         Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._redraw));
 
         this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA });
@@ -494,15 +494,30 @@ const Keyboard = new Lang.Class({
             this._moveTemporarily();
     },
 
+    // _compareTimestamp:
+    //
+    // Compare two timestamps taking into account
+    // CURRENT_TIME (0)
+    _compareTimestamp: function(one, two) {
+        if (one == two)
+            return 0;
+        if (one == Clutter.CURRENT_TIME)
+            return 1;
+        if (two == Clutter.CURRENT_TIME)
+            return -1;
+        return one - two;
+    },
+
     // D-Bus methods
     Show: function(timestamp) {
         if (!this._enableKeyboard)
             return;
 
-        if (timestamp - this._timestamp < 0)
+        if (this._compareTimestamp(timestamp, this._timestamp) < 0)
             return;
 
-        this._timestamp = timestamp;
+        if (timestamp != Clutter.CURRENT_TIME)
+            this._timestamp = timestamp;
         this.show();
     },
 
@@ -510,10 +525,11 @@ const Keyboard = new Lang.Class({
         if (!this._enableKeyboard)
             return;
 
-        if (timestamp - this._timestamp < 0)
+        if (this._compareTimestamp(timestamp, this._timestamp) < 0)
             return;
 
-        this._timestamp = timestamp;
+        if (timestamp != Clutter.CURRENT_TIME)
+            this._timestamp = timestamp;
         this.hide();
     },
 



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