[gnome-shell/wip/carlosg/osk-cldr: 28/45] keyboard: Use InputMethod underneath
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/carlosg/osk-cldr: 28/45] keyboard: Use InputMethod underneath
- Date: Thu, 25 Jan 2018 21:29:56 +0000 (UTC)
commit 5d58ecd426133d3dd754f5b24b8ea06f22826eef
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Dec 5 20:05:18 2017 +0100
keyboard: Use InputMethod underneath
js/ui/keyboard.js | 68 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 59 insertions(+), 9 deletions(-)
---
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index d3e30a2fa..4152cb676 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -100,7 +100,7 @@ var Key = new Lang.Class({
_press: function(key) {
if (key != this.key || this._extended_keys.length == 0) {
- this.emit('pressed', this._getKeyval(key));
+ this.emit('pressed', this._getKeyval(key), key);
} else if (key == this.key) {
this._pressTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
KEY_LONG_PRESS_TIME,
@@ -122,10 +122,10 @@ var Key = new Lang.Class({
if (this._pressTimeoutId != 0) {
GLib.source_remove(this._pressTimeoutId);
this._pressTimeoutId = 0;
- this.emit('pressed', this._getKeyval(key));
+ this.emit('pressed', this._getKeyval(key), key);
}
- this.emit('released', this._getKeyval(key));
+ this.emit('released', this._getKeyval(key), key);
},
_makeKey: function (key) {
@@ -408,6 +408,8 @@ var Keyboard = new Lang.Class({
this._keyboardController.disconnect(this._keyboardNotifyId);
if (this._keyboardGroupsChangedId)
this._keyboardController.disconnect(this._keyboardGroupsChangedId);
+ if (this._keyboardStateId)
+ this._keyboardController.disconnect(this._keyboardStateId);
if (this._focusNotifyId)
global.stage.disconnect(this._focusNotifyId);
this._keyboard = null;
@@ -438,6 +440,7 @@ var Keyboard = new Lang.Class({
this._keyboardNotifyId = this._keyboardController.connect('active-group', Lang.bind(this,
this._onGroupChanged));
this._keyboardGroupsChangedId = this._keyboardController.connect('groups-changed', Lang.bind(this,
this._onKeyboardGroupsChanged));
+ this._keyboardStateId = this._keyboardController.connect('panel-state', Lang.bind(this,
this._onKeyboardStateChanged));
this._focusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this,
this._onKeyFocusChanged));
},
@@ -529,15 +532,23 @@ var Keyboard = new Lang.Class({
button.connect('hide-subkeys', Lang.bind(this, function() {
this._hideSubkeys();
}));
- button.connect('pressed', Lang.bind(this, function(actor, keyval) {
+ button.connect('pressed', Lang.bind(this, function(actor, keyval, str) {
this._hideSubkeys();
- if (keyval != 0)
- this._keyboardController.keyvalPress(keyval);
+ if (!Main.inputMethod.currentFocus ||
+ !this._keyboardController.commitString(str, true)) {
+ if (keyval != 0) {
+ this._keyboardController.keyvalPress(keyval);
+ button._keyvalPress = true;
+ }
+ }
}));
- button.connect('released', Lang.bind(this, function(actor, keyval) {
+ button.connect('released', Lang.bind(this, function(actor, keyval, str) {
this._hideSubkeys();
- if (keyval != 0)
- this._keyboardController.keyvalRelease(keyval);
+ if (keyval != 0) {
+ if (button._keyvalPress)
+ this._keyboardController.keyvalRelease(keyval);
+ button._keyvalPress = false;
+ }
}));
keyboardRow.add(button.container, { expand: true, x_fill: false, x_align: St.Align.END });
@@ -697,6 +708,23 @@ var Keyboard = new Lang.Class({
this._addKeys();
},
+ _onKeyboardStateChanged: function(controller, state) {
+ let enabled;
+ if (state == Clutter.InputPanelState.OFF)
+ enabled = false;
+ else if (state == Clutter.InputPanelState.ON)
+ enabled = true;
+ else if (state == Clutter.InputPanelState.TOGGLE)
+ enabled = (this._keyboardVisible == false);
+ else
+ return;
+
+ if (enabled)
+ this.show(Main.layoutManager.focusIndex);
+ else
+ this.hide();
+ },
+
_setActiveLayer: function (activeLevel) {
let activeGroupName = this._keyboardController.getCurrentGroup();
let layers = this._groups[activeGroupName];
@@ -849,6 +877,10 @@ var KeyboardController = new Lang.Class({
this._sourcesModifiedId = this._inputSourceManager.connect ('sources-changed',
Lang.bind(this,
this._onSourcesModified));
this._currentSource = this._inputSourceManager.currentSource;
+
+ Main.inputMethod.connect('notify::content-purpose', Lang.bind(this,
this._onContentPurposeHintsChanged));
+ Main.inputMethod.connect('notify::content-hints', Lang.bind(this,
this._onContentPurposeHintsChanged));
+ Main.inputMethod.connect('input-panel-state', Lang.bind(this, function(o, state) {
this.emit('panel-state', state); }));
},
_onSourcesModified: function () {
@@ -861,6 +893,13 @@ var KeyboardController = new Lang.Class({
this.emit('active-group', source.id);
},
+ _onContentPurposeHintsChanged: function(method) {
+ let hints = method.content_hints;
+ let purpose = method.content_purpose;
+
+ // XXX: hook numeric/emoji/etc special keyboards
+ },
+
getGroups: function () {
let inputSources = this._inputSourceManager.inputSources;
let groups = []
@@ -877,6 +916,17 @@ var KeyboardController = new Lang.Class({
return this._currentSource.xkbId;
},
+ commitString: function(string, fromKey) {
+ if (string == null)
+ return false;
+ /* Let ibus methods fall through keyval emission */
+ if (fromKey && this._currentSource.type == InputSourceManager.INPUT_SOURCE_TYPE_IBUS)
+ return false;
+
+ Main.inputMethod.commit(string);
+ return true;
+ },
+
keyvalPress: function(keyval) {
this._virtualDevice.notify_keyval(Clutter.get_current_event_time(),
keyval, Clutter.KeyState.PRESSED);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]