[gnome-shell] Keyboard: fix timestamp handling to account for CURRENT_TIME
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Keyboard: fix timestamp handling to account for CURRENT_TIME
- Date: Thu, 13 Sep 2012 21:49:24 +0000 (UTC)
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]