keyboard: Only rebuild keyboard actor on keyboard type changes
About every other situation can do with synchronizing keyboard visibility, and keyboard layout changes are already handled internally in the Keyboard object. A downside of this approach is that once created, there will always be a Keyboard instance and its full actor hierarchy. Seems reasonable to do that since we can't tell it won't ever be needed. https://bugzilla.gnome.org/show_bug.cgi?id=785309
This commit is contained in:
parent
775d77bf6d
commit
08ad345f23
@ -171,7 +171,7 @@ var Keyboard = new Lang.Class({
|
|||||||
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
|
this._keyboardSettings = new Gio.Settings({ schema_id: KEYBOARD_SCHEMA });
|
||||||
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
|
this._keyboardSettings.connect('changed', Lang.bind(this, this._sync));
|
||||||
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
this._a11yApplicationsSettings = new Gio.Settings({ schema_id: A11Y_APPLICATIONS_SCHEMA });
|
||||||
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._sync));
|
this._a11yApplicationsSettings.connect('changed', Lang.bind(this, this._syncEnabled));
|
||||||
this._lastDeviceId = null;
|
this._lastDeviceId = null;
|
||||||
|
|
||||||
Caribou.DisplayAdapter.set_default(new LocalAdapter());
|
Caribou.DisplayAdapter.set_default(new LocalAdapter());
|
||||||
@ -183,7 +183,7 @@ var Keyboard = new Lang.Class({
|
|||||||
|
|
||||||
if (device.get_device_name().indexOf('XTEST') < 0) {
|
if (device.get_device_name().indexOf('XTEST') < 0) {
|
||||||
this._lastDeviceId = deviceId;
|
this._lastDeviceId = deviceId;
|
||||||
this._sync();
|
this._syncEnabled();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
this._sync();
|
this._sync();
|
||||||
@ -304,24 +304,32 @@ var Keyboard = new Lang.Class({
|
|||||||
return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE;
|
return device.get_device_type() == Clutter.InputDeviceType.TOUCHSCREEN_DEVICE;
|
||||||
},
|
},
|
||||||
|
|
||||||
_sync: function () {
|
_syncEnabled: function () {
|
||||||
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD) ||
|
this._enableKeyboard = this._a11yApplicationsSettings.get_boolean(SHOW_KEYBOARD) ||
|
||||||
this._lastDeviceIsTouchscreen();
|
this._lastDeviceIsTouchscreen();
|
||||||
if (!this._enableKeyboard && !this._keyboard)
|
if (!this._enableKeyboard && !this._keyboard)
|
||||||
return;
|
return;
|
||||||
if (this._enableKeyboard && this._keyboard &&
|
|
||||||
this._keyboard.keyboard_type == this._keyboardSettings.get_string(KEYBOARD_TYPE))
|
|
||||||
return;
|
|
||||||
|
|
||||||
this._setCaretTrackerEnabled(this._enableKeyboard);
|
this._setCaretTrackerEnabled(this._enableKeyboard);
|
||||||
|
|
||||||
if (this._keyboard)
|
if (this._enableKeyboard) {
|
||||||
this._destroyKeyboard();
|
if (!this._keyboard)
|
||||||
|
|
||||||
if (this._enableKeyboard)
|
|
||||||
this._setupKeyboard();
|
this._setupKeyboard();
|
||||||
else
|
else
|
||||||
|
Main.layoutManager.showKeyboard();
|
||||||
|
} else {
|
||||||
Main.layoutManager.hideKeyboard(true);
|
Main.layoutManager.hideKeyboard(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_sync: function () {
|
||||||
|
if (this._keyboard &&
|
||||||
|
this._keyboard.keyboard_type != this._keyboardSettings.get_string(KEYBOARD_TYPE)) {
|
||||||
|
this._destroyKeyboard();
|
||||||
|
this._setupKeyboard();
|
||||||
|
}
|
||||||
|
|
||||||
|
this._syncEnabled();
|
||||||
},
|
},
|
||||||
|
|
||||||
_destroyKeyboard: function() {
|
_destroyKeyboard: function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user