keyboard: Don't hide or show the keyboard immediately
Acting on each Show/Hide DBus call immediately may cause a lot of jittery movement when Alt+Tabbing or even just switching tabs in e.g. gnome-terminal. To make the OSK feel sturdier, we wait a bit before actually showing or hiding it so that we can coalesce tight sequences of Show/Hide calls. I.e. the last call wins which means that we might end up not doing anything. https://bugzilla.gnome.org/show_bug.cgi?id=688646
This commit is contained in:
parent
6255c77eba
commit
449575ceae
@ -11,9 +11,12 @@ const Signals = imports.signals;
|
|||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
|
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
|
const Layout = imports.ui.layout;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const MessageTray = imports.ui.messageTray;
|
const MessageTray = imports.ui.messageTray;
|
||||||
|
|
||||||
|
const KEYBOARD_REST_TIME = Layout.KEYBOARD_ANIMATION_TIME * 2 * 1000;
|
||||||
|
|
||||||
const KEYBOARD_SCHEMA = 'org.gnome.shell.keyboard';
|
const KEYBOARD_SCHEMA = 'org.gnome.shell.keyboard';
|
||||||
const KEYBOARD_TYPE = 'keyboard-type';
|
const KEYBOARD_TYPE = 'keyboard-type';
|
||||||
|
|
||||||
@ -151,6 +154,13 @@ const Keyboard = new Lang.Class({
|
|||||||
this._subkeysBoxPointer = null;
|
this._subkeysBoxPointer = null;
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
this._capturedPress = false;
|
this._capturedPress = false;
|
||||||
|
|
||||||
|
this._keyboardVisible = false;
|
||||||
|
Main.layoutManager.connect('keyboard-visible-changed', Lang.bind(this, function(o, visible) {
|
||||||
|
this._keyboardVisible = visible;
|
||||||
|
}));
|
||||||
|
this._keyboardRequested = false;
|
||||||
|
this._keyboardRestingId = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
init: function () {
|
init: function () {
|
||||||
@ -461,7 +471,37 @@ const Keyboard = new Lang.Class({
|
|||||||
actor._extended_keys || actor.extended_key;
|
actor._extended_keys || actor.extended_key;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_clearKeyboardRestTimer: function() {
|
||||||
|
if (!this._keyboardRestingId)
|
||||||
|
return;
|
||||||
|
GLib.source_remove(this._keyboardRestingId);
|
||||||
|
this._keyboardRestingId = 0;
|
||||||
|
},
|
||||||
|
|
||||||
show: function (monitor) {
|
show: function (monitor) {
|
||||||
|
this._keyboardRequested = true;
|
||||||
|
|
||||||
|
if (this._keyboardVisible) {
|
||||||
|
if (monitor != Main.layoutManager.keyboardIndex) {
|
||||||
|
Main.layoutManager.keyboardIndex = monitor;
|
||||||
|
this._redraw();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._clearKeyboardRestTimer();
|
||||||
|
this._keyboardRestingId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
|
||||||
|
KEYBOARD_REST_TIME,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._clearKeyboardRestTimer();
|
||||||
|
this._show(monitor);
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_show: function(monitor) {
|
||||||
|
if (!this._keyboardRequested)
|
||||||
|
return;
|
||||||
|
|
||||||
Main.layoutManager.keyboardIndex = monitor;
|
Main.layoutManager.keyboardIndex = monitor;
|
||||||
this._redraw();
|
this._redraw();
|
||||||
Main.layoutManager.showKeyboard();
|
Main.layoutManager.showKeyboard();
|
||||||
@ -469,6 +509,24 @@ const Keyboard = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
hide: function () {
|
hide: function () {
|
||||||
|
this._keyboardRequested = false;
|
||||||
|
|
||||||
|
if (!this._keyboardVisible)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._clearKeyboardRestTimer();
|
||||||
|
this._keyboardRestingId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
|
||||||
|
KEYBOARD_REST_TIME,
|
||||||
|
Lang.bind(this, function() {
|
||||||
|
this._clearKeyboardRestTimer();
|
||||||
|
this._hide();
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
_hide: function() {
|
||||||
|
if (this._keyboardRequested)
|
||||||
|
return;
|
||||||
|
|
||||||
this._hideSubkeys();
|
this._hideSubkeys();
|
||||||
Main.layoutManager.hideKeyboard();
|
Main.layoutManager.hideKeyboard();
|
||||||
this._createSource();
|
this._createSource();
|
||||||
|
Loading…
Reference in New Issue
Block a user