From 4a8325c2f7ed45086299d9926c04a125d95f6913 Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 14 Jun 2021 09:43:00 +0700 Subject: [PATCH 1/9] refactor(web): removes redundant calc --- web/source/osk/visualKeyboard.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index 67058dbb31..dc21b074f3 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -969,10 +969,6 @@ namespace com.keyman.osk { padPercent = keys[j]['padpc'] * objectWidth; keys[j]['padpc']=padPercent; - // Recompute center's x-coord with exact, in-browser values. - ( keys[j]).proportionalX = (totalPercent + padPercent + (keyPercent/2))/objectWidth; - ( keys[j]).proportionalWidth = keyPercent / objectWidth; - totalPercent += padPercent+keyPercent; } @@ -986,20 +982,12 @@ namespace com.keyman.osk { keys[0]['widthpc']=keyPercent; totalPercent += keyPercent; keys[0]['padpc']=(objectWidth-totalPercent); - - // Recompute center's x-coord with exact, in-browser values. - ( keys[0]).proportionalX = (totalPercent - rightMargin - keyPercent/2)/objectWidth; - ( keys[0]).proportionalWidth = keyPercent / objectWidth; } else if(keys.length > 0) { j=keys.length-1; padPercent = keys[j]['padpc'] * objectWidth; keys[j]['padpc']=padPercent; totalPercent += padPercent; keys[j]['widthpc']= keyPercent = (objectWidth-totalPercent); - - // Recompute center's x-coord with exact, in-browser values. - ( keys[j]).proportionalX = (objectWidth - rightMargin - keyPercent/2)/objectWidth; - ( keys[j]).proportionalWidth = keyPercent / objectWidth; } } From 8fed3897186451ed76f5d5fc8a5cc357fb1cd5ce Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 14 Jun 2021 10:36:41 +0700 Subject: [PATCH 2/9] refactor(web): simplified calibration control flow --- .../src/keyboards/activeLayout.ts | 18 +++++----- web/source/osk/visualKeyboard.ts | 35 ++++--------------- 2 files changed, 17 insertions(+), 36 deletions(-) diff --git a/common/core/web/keyboard-processor/src/keyboards/activeLayout.ts b/common/core/web/keyboard-processor/src/keyboards/activeLayout.ts index 94636e90ec..6cdddf7d83 100644 --- a/common/core/web/keyboard-processor/src/keyboards/activeLayout.ts +++ b/common/core/web/keyboard-processor/src/keyboards/activeLayout.ts @@ -29,6 +29,7 @@ namespace com.keyman.keyboards { private baseKeyEvent: text.KeyEvent; isMnemonic: boolean = false; + proportionalPad: number; proportionalX: number; proportionalWidth: number; @@ -286,6 +287,12 @@ namespace com.keyman.keyboards { * and are intended for use with layout testing (while headless) in the future. */ + let setProportions = function(key: ActiveKey, padPc: number, keyPc: number, totalPc: number) { + key.proportionalPad = padPc; + key.proportionalWidth = keyPc; + key.proportionalX = (totalPc + padPc + (keyPc/2)); + } + // Calculate percentage-based scalings by summing defined widths and scaling each key to %. // Save each percentage key width as a separate member (do *not* overwrite layout specified width!) var keyPercent: number, padPercent: number, totalPercent=0; @@ -296,9 +303,7 @@ namespace com.keyman.keyboards { keys[j]['padpc']=padPercent; // compute center's default x-coord (used in headless modes) - ( keys[j]).proportionalX = (totalPercent + padPercent + (keyPercent/2)); - ( keys[j]).proportionalWidth = keyPercent; - + setProportions(keys[j] as ActiveKey, padPercent, keyPercent, totalPercent); totalPercent += padPercent+keyPercent; } @@ -314,9 +319,7 @@ namespace com.keyman.keyboards { keys[0]['padpc']=1-totalPercent; // compute center's default x-coord (used in headless modes) - ( keys[0]).proportionalX = ((totalPercent - rightMargin) - keyPercent/2); - ( keys[0]).proportionalWidth = keyPercent; - + setProportions(keys[0] as ActiveKey, padPercent, keyPercent, totalPercent); } else if(keys.length > 0) { let j=keys.length-1; padPercent=parseInt(keys[j]['pad'],10)/totalWidth; @@ -325,8 +328,7 @@ namespace com.keyman.keyboards { keys[j]['widthpc'] = keyPercent = 1-totalPercent; // compute center's default x-coord (used in headless modes) - ( keys[j]).proportionalX = (1 - rightMargin) - keyPercent/2; - ( keys[j]).proportionalWidth = keyPercent; + setProportions(keys[j] as ActiveKey, padPercent, keyPercent, totalPercent); } // Add class functions to the existing layout object, allowing it to act as an ActiveLayout. diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index dc21b074f3..67e013ac73 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -868,7 +868,7 @@ namespace com.keyman.osk { var n: number, i: number, j: number; var layers: keyboards.LayoutLayer[], gDiv: HTMLDivElement; var rowHeight: number, rDiv: HTMLDivElement; - var keys: keyboards.LayoutKey[], key: keyboards.LayoutKey, rs: CSSStyleDeclaration, gs: CSSStyleDeclaration; + var keys: keyboards.ActiveKey[], key: keyboards.ActiveKey, rs: CSSStyleDeclaration, gs: CSSStyleDeclaration; layers=layout['layer']; @@ -962,37 +962,16 @@ namespace com.keyman.osk { // Overwrite the previously-computed percent. // NB: the 'percent' suffix is historical, units are percent on desktop devices, but pixels on touch devices // All key widths and paddings are rounded for uniformity - var keyPercent: number, padPercent: number, totalPercent=0; - for(j=0; j 0) { - j=keys.length-1; - padPercent = keys[j]['padpc'] * objectWidth; - keys[j]['padpc']=padPercent; - totalPercent += padPercent; - keys[j]['widthpc']= keyPercent = (objectWidth-totalPercent); + for(j=0; j Date: Mon, 14 Jun 2021 13:41:10 +0700 Subject: [PATCH 3/9] refactor(web): moves key-event init from osk preprocessor --- web/source/osk/preProcessor.ts | 33 ++---------------------- web/source/osk/visualKeyboard.ts | 43 ++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 31 deletions(-) diff --git a/web/source/osk/preProcessor.ts b/web/source/osk/preProcessor.ts index 28d286685a..ceeee89cf6 100644 --- a/web/source/osk/preProcessor.ts +++ b/web/source/osk/preProcessor.ts @@ -1,26 +1,5 @@ namespace com.keyman.osk { export class PreProcessor { - static _GetClickEventProperties(e: keyboards.ActiveKey, Lelem: HTMLElement): text.KeyEvent { - let keyman = com.keyman.singleton; - let core = keyman.core; - - // Start: mirrors _GetKeyEventProperties - - // First check the virtual key, and process shift, control, alt or function keys - let Lkc = e.constructKeyEvent(core.keyboardProcessor, keyman.util.device.coreSpec); - - // If it's actually a state key modifier, trigger its effects immediately, as KeyboardEvents would do the same. - switch(Lkc.kName) { - case 'K_CAPS': - case 'K_NUMLOCK': - case 'K_SCROLL': - core.keyboardProcessor.stateKeys[Lkc.kName] = ! core.keyboardProcessor.stateKeys[Lkc.kName]; - } - - // End - mirrors _GetKeyEventProperties - return Lkc; - } - /** * Simulate a keystroke according to the touched keyboard button element * @@ -48,19 +27,11 @@ namespace com.keyman.osk { // Deleting matched deadkeys here seems to correct some of the issues. (JD 6/6/14) outputTarget.deadkeys().deleteMatched(); // Delete any matched deadkeys before continuing - // Future note: we need to refactor osk.OSKKeySpec to instead be a 'tag field' for - // keyboards.ActiveKey. (Prob with generics, allowing the Web-only parts to - // be fully specified within the tag.) - // - // Would avoid the type shenanigans needed here because of our current type-abuse setup - // for key spec tracking. - let keySpec = (e['key'] ? e['key'].spec : null) as unknown as keyboards.ActiveKey; - if(!keySpec) { - console.error("OSK key with ID '" + e.id + "', keyID '" + e.keyId + "' missing needed specification"); + let Lkc = keyman['osk'].vkbd.initKeyEvent(e, touch, keyDistribution); + if(!Lkc) { return true; } - let Lkc = PreProcessor._GetClickEventProperties(keySpec, Lelem); if(keyman.core.languageProcessor.isActive) { Lkc.source = touch; Lkc.keyDistribution = keyDistribution; diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index 67e013ac73..581c2f09a2 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -1535,6 +1535,49 @@ namespace com.keyman.osk { } //#endregion + initKeyEvent(e: osk.KeyElement, touch?: Touch, keyDistribution?: text.KeyDistribution) { + // Turn off key highlighting (or preview) + this.highlightKey(e,false); + + let core = com.keyman.singleton.core; // only singleton-based ref currently needed here. + + // Future note: we need to refactor osk.OSKKeySpec to instead be a 'tag field' for + // keyboards.ActiveKey. (Prob with generics, allowing the Web-only parts to + // be fully specified within the tag.) + // + // Would avoid the type shenanigans needed here because of our current type-abuse setup + // for key spec tracking. + let keySpec = (e['key'] ? e['key'].spec : null) as unknown as keyboards.ActiveKey; + if(!keySpec) { + console.error("OSK key with ID '" + e.id + "', keyID '" + e.keyId + "' missing needed specification"); + return null; + } + + + // Start: mirrors _GetKeyEventProperties + + // First check the virtual key, and process shift, control, alt or function keys + let Lkc = keySpec.constructKeyEvent(core.keyboardProcessor, this.device.coreSpec); + + // If it's actually a state key modifier, trigger its effects immediately, as KeyboardEvents would do the same. + switch(Lkc.kName) { + case 'K_CAPS': + case 'K_NUMLOCK': + case 'K_SCROLL': + core.keyboardProcessor.stateKeys[Lkc.kName] = ! core.keyboardProcessor.stateKeys[Lkc.kName]; + } + + // End - mirrors _GetKeyEventProperties + + // if(keyman.core.languageProcessor.isActive) { + // Lkc.source = touch; + // Lkc.keyDistribution = keyDistribution; + // } + + // Send the event. + return Lkc; + } + // cancel = function(e) {} //cancel event is never generated by iOS /** From ca26d22ffff033f63e3375dc3f67773ec6cfc98a Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 14 Jun 2021 13:52:20 +0700 Subject: [PATCH 4/9] refactor(web): key distribution gen as part of initKeyEvent --- web/source/osk/preProcessor.ts | 20 ++++++-------------- web/source/osk/visualKeyboard.ts | 19 ++++++++----------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/web/source/osk/preProcessor.ts b/web/source/osk/preProcessor.ts index ceeee89cf6..d0df6c2481 100644 --- a/web/source/osk/preProcessor.ts +++ b/web/source/osk/preProcessor.ts @@ -9,17 +9,19 @@ namespace com.keyman.osk { * * @param {Object} e element touched (or clicked) */ - static clickKey(e: osk.KeyElement, touch?: Touch, layerId?: string, keyDistribution?: text.KeyDistribution) { + static clickKey(e: osk.KeyElement, touch?: Touch) { let keyman = com.keyman.singleton; + let Lkc = keyman['osk'].vkbd.initKeyEvent(e, touch); + if(!Lkc) { + return true; + } + var Lelem = keyman.domManager.getLastActiveElement(); if(Lelem != null) { // Handle any DOM state management related to click inputs. let outputTarget = dom.Utils.getOutputTarget(Lelem); keyman.domManager.initActiveElement(Lelem); - - // Turn off key highlighting (or preview) - keyman['osk'].vkbd.highlightKey(e,false); // Clear any cached codepoint data; we can rebuild it if it's unchanged. outputTarget.invalidateSelection(); @@ -27,16 +29,6 @@ namespace com.keyman.osk { // Deleting matched deadkeys here seems to correct some of the issues. (JD 6/6/14) outputTarget.deadkeys().deleteMatched(); // Delete any matched deadkeys before continuing - let Lkc = keyman['osk'].vkbd.initKeyEvent(e, touch, keyDistribution); - if(!Lkc) { - return true; - } - - if(keyman.core.languageProcessor.isActive) { - Lkc.source = touch; - Lkc.keyDistribution = keyDistribution; - } - if(!keyman.isEmbedded) { keyman.uiManager.setActivatingUI(true); com.keyman.dom.DOMEventHandlers.states._IgnoreNextSelChange = 100; diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index 581c2f09a2..517e476690 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -1152,10 +1152,9 @@ namespace com.keyman.osk { // Also backspace, to allow delete to repeat while key held } else if(keyName == 'K_BKSP') { - let touchProbabilities = this.getTouchProbabilities(e.changedTouches[0]); // While we could inline the execution of the delete key here, we lose the ability to // record the backspace key if we do so. - PreProcessor.clickKey(key, e.changedTouches[0], this.layerId, touchProbabilities); + PreProcessor.clickKey(key, e.changedTouches[0]); this.deleteKey = key; this.deleting = window.setTimeout(this.repeatDelete,500); this.keyPending = null; @@ -1163,8 +1162,7 @@ namespace com.keyman.osk { } else { if(this.keyPending) { this.highlightKey(this.keyPending, false); - let touchProbabilities = this.getTouchProbabilities(this.touchPending); - PreProcessor.clickKey(this.keyPending, this.touchPending, this.layerId, touchProbabilities); + PreProcessor.clickKey(this.keyPending, this.touchPending); this.clearPopup(); // Decrement the number of unreleased touch points to prevent // sending the keystroke again when the key is actually released @@ -1237,8 +1235,7 @@ namespace com.keyman.osk { // Output character unless moved off key if(this.keyPending.className.indexOf('hidden') < 0 && tc > 0 && !beyondEdge) { - let touchProbabilities = this.getTouchProbabilities(e.changedTouches[0]); - PreProcessor.clickKey(this.keyPending, e.changedTouches[0], this.layerId, touchProbabilities); + PreProcessor.clickKey(this.keyPending, e.changedTouches[0]); } this.clearPopup(); this.keyPending = null; @@ -1535,7 +1532,7 @@ namespace com.keyman.osk { } //#endregion - initKeyEvent(e: osk.KeyElement, touch?: Touch, keyDistribution?: text.KeyDistribution) { + initKeyEvent(e: osk.KeyElement, touch?: Touch) { // Turn off key highlighting (or preview) this.highlightKey(e,false); @@ -1569,10 +1566,10 @@ namespace com.keyman.osk { // End - mirrors _GetKeyEventProperties - // if(keyman.core.languageProcessor.isActive) { - // Lkc.source = touch; - // Lkc.keyDistribution = keyDistribution; - // } + if(core.languageProcessor.isActive && touch) { + Lkc.source = touch; + Lkc.keyDistribution = this.getTouchProbabilities(touch);; + } // Send the event. return Lkc; From 9920fabce5a60145dd745834a954f9d936ac939e Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 14 Jun 2021 15:05:15 +0700 Subject: [PATCH 5/9] refactor(web): preps osk key event for event-raising paradigm --- web/source/osk/preProcessor.ts | 9 +++++++-- web/source/osk/visualKeyboard.ts | 22 +++++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/web/source/osk/preProcessor.ts b/web/source/osk/preProcessor.ts index d0df6c2481..82871c0325 100644 --- a/web/source/osk/preProcessor.ts +++ b/web/source/osk/preProcessor.ts @@ -16,6 +16,11 @@ namespace com.keyman.osk { return true; } + return this.raiseKeyEvent(Lkc); + } + + static raiseKeyEvent(keyEvent: text.KeyEvent) { + let keyman = com.keyman.singleton; var Lelem = keyman.domManager.getLastActiveElement(); if(Lelem != null) { @@ -36,7 +41,7 @@ namespace com.keyman.osk { com.keyman.dom.DOMEventHandlers.states._IgnoreNextSelChange = 0; } - let retVal = PreProcessor.handleClick(Lkc, outputTarget, e); + let retVal = PreProcessor.handleClick(keyEvent, outputTarget, null); // Now that processing is done, we can do a bit of post-processing, too. keyman.uiManager.setActivatingUI(false); // I2498 - KeymanWeb OSK does not accept clicks in FF when using automatic UI @@ -50,7 +55,7 @@ namespace com.keyman.osk { // after the KeyEvent object has been properly instantiated. This should help catch any // mutual last-minute DOM-side interactions before passing control to the processor... such as // the UI-control command keys as seen below. - static handleClick(Lkc: text.KeyEvent, outputTarget: text.OutputTarget, e: KeyElement) { + static handleClick(Lkc: text.KeyEvent, outputTarget: text.OutputTarget, e: osk.KeyElement) { let keyman = com.keyman.singleton; // Exclude menu and OSK hide keys from normal click processing if(Lkc.kName == 'K_LOPT' || Lkc.kName == 'K_ROPT') { diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index 517e476690..a23dc3430b 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -1142,7 +1142,7 @@ namespace com.keyman.osk { // Special function keys need immediate action if(keyName == 'K_LOPT' || keyName == 'K_ROPT') { window.setTimeout(function(this: VisualKeyboard){ - PreProcessor.clickKey(key); + this.modelKeyClick(key); // Because we immediately process the key, we need to re-highlight it after the click. this.highlightKey(key, true); // Highlighting'll be cleared automatically later. @@ -1154,7 +1154,7 @@ namespace com.keyman.osk { } else if(keyName == 'K_BKSP') { // While we could inline the execution of the delete key here, we lose the ability to // record the backspace key if we do so. - PreProcessor.clickKey(key, e.changedTouches[0]); + this.modelKeyClick(key, e.changedTouches[0]); this.deleteKey = key; this.deleting = window.setTimeout(this.repeatDelete,500); this.keyPending = null; @@ -1162,7 +1162,7 @@ namespace com.keyman.osk { } else { if(this.keyPending) { this.highlightKey(this.keyPending, false); - PreProcessor.clickKey(this.keyPending, this.touchPending); + this.modelKeyClick(this.keyPending, this.touchPending); this.clearPopup(); // Decrement the number of unreleased touch points to prevent // sending the keystroke again when the key is actually released @@ -1235,7 +1235,7 @@ namespace com.keyman.osk { // Output character unless moved off key if(this.keyPending.className.indexOf('hidden') < 0 && tc > 0 && !beyondEdge) { - PreProcessor.clickKey(this.keyPending, e.changedTouches[0]); + this.modelKeyClick(this.keyPending, e.changedTouches[0]); } this.clearPopup(); this.keyPending = null; @@ -1514,7 +1514,7 @@ namespace com.keyman.osk { **/ repeatDelete: () => void = function(this: VisualKeyboard) { if(this.deleting) { - PreProcessor.clickKey(this.deleteKey); + this.modelKeyClick(this.deleteKey); this.deleting = window.setTimeout(this.repeatDelete,100); } }.bind(this); @@ -1532,6 +1532,14 @@ namespace com.keyman.osk { } //#endregion + modelKeyClick(e: osk.KeyElement, touch?: Touch) { + let keyEvent = this.initKeyEvent(e, touch); + + // TODO: convert into an actual event, raised by the VisualKeyboard. + // Its code is intended to lie outside of the OSK-Core library/module. + PreProcessor.raiseKeyEvent(keyEvent); + } + initKeyEvent(e: osk.KeyElement, touch?: Touch) { // Turn off key highlighting (or preview) this.highlightKey(e,false); @@ -1571,7 +1579,7 @@ namespace com.keyman.osk { Lkc.keyDistribution = this.getTouchProbabilities(touch);; } - // Send the event. + // Return the event object. return Lkc; } @@ -1979,7 +1987,7 @@ namespace com.keyman.osk { // Process as click if mouse button released anywhere over key if(util.eventType(e) == 'mouseup') { if(key.id == this.currentKey) { - PreProcessor.clickKey(key); + this.modelKeyClick(key); } this.currentKey=''; } From 28fe887f84c2936708f846c7ae88fb5d856ba879 Mon Sep 17 00:00:00 2001 From: jahorton Date: Mon, 14 Jun 2021 15:32:40 +0700 Subject: [PATCH 6/9] fix(web): patches up KMW recorder --- web/tools/recorder/scribe.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/web/tools/recorder/scribe.ts b/web/tools/recorder/scribe.ts index f6c083a01c..06f9a0bb98 100644 --- a/web/tools/recorder/scribe.ts +++ b/web/tools/recorder/scribe.ts @@ -29,6 +29,7 @@ namespace com.keyman { export namespace osk { export declare var PreProcessor: any; + export declare var VisualKeyboard: any; } } @@ -199,15 +200,15 @@ namespace KMWRecorder { return retVal; } - var _originalClickKey = com.keyman.osk.PreProcessor.clickKey; //.bind(keyman.osk); - com.keyman.osk.PreProcessor.clickKey = function(e) { + var _originalModelKeyClick = com.keyman.osk.VisualKeyboard.prototype.modelKeyClick; //.bind(keyman.osk); + com.keyman.osk.VisualKeyboard.prototype.modelKeyClick = function(e, touch) { let in_output = com.keyman.dom.Utils.getOutputTarget(recordingElement); if(!in_output || com.keyman.dom.DOMEventHandlers.states.activeElement != in_output.getElement()) { - return _originalClickKey(e); + return _originalModelKeyClick.call(this, e, touch); } let event = KMWRecorder.Scribe.recordOSKEvent(e); - var retVal = _originalClickKey(e); + var retVal = _originalModelKeyClick.call(this, e, touch); let recording = Scribe.recordKeystroke(recorderScribe._currentKeyEvent, event); @@ -254,9 +255,9 @@ namespace KMWRecorder { } var _originalProcessKeyEvent = keyman.core.processKeyEvent.bind(keyman.core); - keyman.core.processKeyEvent = function(keyEvent /* com.keyman.text.KeyEvent */) { + keyman.core.processKeyEvent = function(keyEvent /* com.keyman.text.KeyEvent */, target /* com.keyman.text.OutputTarget */) { recorderScribe._currentKeyEvent = keyEvent; - return _originalProcessKeyEvent(keyEvent); + return _originalProcessKeyEvent(keyEvent, target); } } } From c401640c8ac2b8af895a3bce8cd82fd57101d3ff Mon Sep 17 00:00:00 2001 From: Eberhard Beilharz Date: Mon, 14 Jun 2021 17:36:36 +0200 Subject: [PATCH 7/9] chore(linux): Fix warnings --- linux/ibus-keyman/src/engine.c | 3 ++- linux/ibus-keyman/src/keymanutil.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/linux/ibus-keyman/src/engine.c b/linux/ibus-keyman/src/engine.c index 91cafb5cef..6853aa4149 100644 --- a/linux/ibus-keyman/src/engine.c +++ b/linux/ibus-keyman/src/engine.c @@ -832,7 +832,8 @@ ibus_keyman_engine_process_key_event (IBusEngine *engine, g_message("Saving keyboard option to DConf"); // Load the current keyboard options from DConf keyman_put_options_todconf(keyman->kb_name, keyman->kb_name, - action_items[i].option->key, action_items[i].option->value); + (gchar *)action_items[i].option->key, + (gchar *)action_items[i].option->value); } } break; diff --git a/linux/ibus-keyman/src/keymanutil.c b/linux/ibus-keyman/src/keymanutil.c index 75a7344fed..c699b603a9 100644 --- a/linux/ibus-keyman/src/keymanutil.c +++ b/linux/ibus-keyman/src/keymanutil.c @@ -437,7 +437,7 @@ keyman_put_options_todconf(gchar *package_id, if (child_settings != NULL) { g_message("writing keyboard options to DConf"); - g_settings_set_strv(child_settings, KEYMAN_DCONF_OPTIONS_KEY, options); + g_settings_set_strv(child_settings, KEYMAN_DCONF_OPTIONS_KEY, (const gchar *const *)options); } g_object_unref(G_OBJECT(child_settings)); From 455639ba1e6623901c0a33f43b1212ab8c6d1da8 Mon Sep 17 00:00:00 2001 From: Keyman Build Agent Date: Tue, 15 Jun 2021 14:03:43 -0400 Subject: [PATCH 8/9] auto: increment master version to 15.0.69 --- HISTORY.md | 10 ++++++++++ VERSION.md | 2 +- .../web/input-processor/package-lock.json | 2 +- common/core/web/input-processor/package.json | 16 +++++++-------- .../web/keyboard-processor/package-lock.json | 2 +- .../core/web/keyboard-processor/package.json | 10 +++++----- .../core/web/tools/recorder/package-lock.json | 2 +- common/core/web/tools/recorder/package.json | 10 +++++----- .../tools/sentry-manager/package-lock.json | 2 +- .../web/tools/sentry-manager/package.json | 4 ++-- common/core/web/utils/package-lock.json | 2 +- common/core/web/utils/package.json | 6 +++--- common/models/templates/package-lock.json | 2 +- common/models/templates/package.json | 8 ++++---- common/models/types/package-lock.json | 2 +- common/models/types/package.json | 2 +- common/models/wordbreakers/package-lock.json | 2 +- common/models/wordbreakers/package.json | 4 ++-- common/predictive-text/package-lock.json | 2 +- common/predictive-text/package.json | 14 ++++++------- developer/js/package-lock.json | 2 +- developer/js/package.json | 8 ++++---- lerna.json | 2 +- resources/gosh/package-lock.json | 2 +- resources/gosh/package.json | 2 +- resources/web-environment/package-lock.json | 2 +- resources/web-environment/package.json | 4 ++-- web/package-lock.json | 2 +- web/package.json | 20 +++++++++---------- 29 files changed, 79 insertions(+), 69 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 6fc80375d9..ee5d3ad9a5 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,15 @@ # Keyman Version History +## 15.0.68 alpha 2021-06-15 + +* chore(common): Add YouTube links to Keyman 14 features (#5276) +* chore(common): Check in crowdin strings for Spanish (Latin America) (#5269) +* refactor(web): polishes management of OSK keys (#5257) +* refactor(web): Visual Keyboard disentanglement - pass 1 (#5259) +* refactor(web): VisualKeyboard height styling consistency (#5278) +* fix(common/models): predictive-text engine use of NFD input (#5273) +* chore(linux): Fix warnings (#5282) + ## 15.0.67 alpha 2021-06-12 * feat(linux): Fix Linux packaging on i386 (#5250) diff --git a/VERSION.md b/VERSION.md index 73267416bb..c89f10253c 100644 --- a/VERSION.md +++ b/VERSION.md @@ -1 +1 @@ -15.0.68 \ No newline at end of file +15.0.69 \ No newline at end of file diff --git a/common/core/web/input-processor/package-lock.json b/common/core/web/input-processor/package-lock.json index fbbce42d29..d0bf9600d6 100644 --- a/common/core/web/input-processor/package-lock.json +++ b/common/core/web/input-processor/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/input-processor", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/common/core/web/input-processor/package.json b/common/core/web/input-processor/package.json index 909a6ca5ef..a197093e8d 100644 --- a/common/core/web/input-processor/package.json +++ b/common/core/web/input-processor/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/input-processor", - "version": "15.0.68", + "version": "15.0.69", "description": "The core text and prediction processing engine for KeymanWeb", "repository": { "type": "git", @@ -18,8 +18,8 @@ }, "homepage": "https://github.com/keymanapp/keyman#readme", "devDependencies": { - "@keymanapp/lexical-model-compiler": "^15.0.68", - "@keymanapp/resources-gosh": "^15.0.68", + "@keymanapp/lexical-model-compiler": "^15.0.69", + "@keymanapp/resources-gosh": "^15.0.69", "@types/node": "^11.9.4", "chai": "^4.3.4", "mocha": "^8.4.0", @@ -34,11 +34,11 @@ "mocha": "mocha" }, "dependencies": { - "@keymanapp/keyboard-processor": "^15.0.68", - "@keymanapp/lexical-model-layer": "^15.0.68", - "@keymanapp/models-types": "^15.0.68", - "@keymanapp/web-environment": "^15.0.68", - "@keymanapp/web-utils": "^15.0.68", + "@keymanapp/keyboard-processor": "^15.0.69", + "@keymanapp/lexical-model-layer": "^15.0.69", + "@keymanapp/models-types": "^15.0.69", + "@keymanapp/web-environment": "^15.0.69", + "@keymanapp/web-utils": "^15.0.69", "eventemitter3": "^4.0.0" } } diff --git a/common/core/web/keyboard-processor/package-lock.json b/common/core/web/keyboard-processor/package-lock.json index 72bad24d3a..c1722f7911 100644 --- a/common/core/web/keyboard-processor/package-lock.json +++ b/common/core/web/keyboard-processor/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/keyboard-processor", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/common/core/web/keyboard-processor/package.json b/common/core/web/keyboard-processor/package.json index 0ede7a4e03..7c14a034d7 100644 --- a/common/core/web/keyboard-processor/package.json +++ b/common/core/web/keyboard-processor/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/keyboard-processor", - "version": "15.0.68", + "version": "15.0.69", "description": "Core module for Keyman keyboard support in KeymanWeb.", "repository": { "type": "git", @@ -18,7 +18,7 @@ }, "homepage": "https://github.com/keymanapp/keyman#readme", "devDependencies": { - "@keymanapp/resources-gosh": "^15.0.68", + "@keymanapp/resources-gosh": "^15.0.69", "chai": "^4.3.4", "mocha": "^8.4.0", "mocha-teamcity-reporter": "^4.0.0", @@ -32,9 +32,9 @@ "mocha": "mocha" }, "dependencies": { - "@keymanapp/models-types": "^15.0.68", - "@keymanapp/web-environment": "^15.0.68", - "@keymanapp/web-utils": "^15.0.68", + "@keymanapp/models-types": "^15.0.69", + "@keymanapp/web-environment": "^15.0.69", + "@keymanapp/web-utils": "^15.0.69", "@types/node": "^11.9.4" } } diff --git a/common/core/web/tools/recorder/package-lock.json b/common/core/web/tools/recorder/package-lock.json index b2a2f8ed56..01fd429cc4 100644 --- a/common/core/web/tools/recorder/package-lock.json +++ b/common/core/web/tools/recorder/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/recorder-core", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/common/core/web/tools/recorder/package.json b/common/core/web/tools/recorder/package.json index c2c0a31199..b5c718fac9 100644 --- a/common/core/web/tools/recorder/package.json +++ b/common/core/web/tools/recorder/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/recorder-core", - "version": "15.0.68", + "version": "15.0.69", "description": "Core classes used to develop KeymanWeb test cases based on keystrokes", "main": "index.js", "scripts": { @@ -17,10 +17,10 @@ }, "homepage": "https://github.com/keymanapp/keyman#readme", "dependencies": { - "@keymanapp/keyboard-processor": "^15.0.68", - "@keymanapp/models-types": "^15.0.68", - "@keymanapp/web-environment": "^15.0.68", - "@keymanapp/web-utils": "^15.0.68" + "@keymanapp/keyboard-processor": "^15.0.69", + "@keymanapp/models-types": "^15.0.69", + "@keymanapp/web-environment": "^15.0.69", + "@keymanapp/web-utils": "^15.0.69" }, "devDependencies": { "typescript": "^3.8.3" diff --git a/common/core/web/tools/sentry-manager/package-lock.json b/common/core/web/tools/sentry-manager/package-lock.json index 5aa4361c79..2497d0f78e 100644 --- a/common/core/web/tools/sentry-manager/package-lock.json +++ b/common/core/web/tools/sentry-manager/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/web-sentry-manager", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/common/core/web/tools/sentry-manager/package.json b/common/core/web/tools/sentry-manager/package.json index 24f2310dfd..4728189104 100644 --- a/common/core/web/tools/sentry-manager/package.json +++ b/common/core/web/tools/sentry-manager/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/web-sentry-manager", - "version": "15.0.68", + "version": "15.0.69", "description": "Common setup for KeymanWeb's Sentry-based error reporting", "main": "dist/index.js", "scripts": { @@ -20,7 +20,7 @@ "typescript": "^3.8.3" }, "dependencies": { - "@keymanapp/web-environment": "^15.0.68", + "@keymanapp/web-environment": "^15.0.69", "@sentry/browser": "^5.27.4" } } diff --git a/common/core/web/utils/package-lock.json b/common/core/web/utils/package-lock.json index 4e63b6ea91..78b5dfe009 100644 --- a/common/core/web/utils/package-lock.json +++ b/common/core/web/utils/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/web-utils", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/common/core/web/utils/package.json b/common/core/web/utils/package.json index 71230bddbb..2bd7b2c7b6 100644 --- a/common/core/web/utils/package.json +++ b/common/core/web/utils/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/web-utils", - "version": "15.0.68", + "version": "15.0.69", "description": "Common utility functions used throughout other Keyman packages", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -20,8 +20,8 @@ }, "homepage": "https://github.com/keymanapp/keyman#readme", "devDependencies": { - "@keymanapp/resources-gosh": "^15.0.68", - "@keymanapp/web-environment": "^15.0.68", + "@keymanapp/resources-gosh": "^15.0.69", + "@keymanapp/web-environment": "^15.0.69", "@types/node": "^14.0.5", "typescript": "^3.8.3" } diff --git a/common/models/templates/package-lock.json b/common/models/templates/package-lock.json index bf8d95d86d..68d5706ecc 100644 --- a/common/models/templates/package-lock.json +++ b/common/models/templates/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/models-templates", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/common/models/templates/package.json b/common/models/templates/package.json index 8c1f678cf5..0a34dc0f00 100644 --- a/common/models/templates/package.json +++ b/common/models/templates/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/models-templates", - "version": "15.0.68", + "version": "15.0.69", "description": "Backing model implementations (templates) for Keyman's modelling layer", "keywords": [ "lm", @@ -42,8 +42,8 @@ "url": "https://github.com/keymanapp/keyman/issues" }, "devDependencies": { - "@keymanapp/models-types": "^15.0.68", - "@keymanapp/web-utils": "^15.0.68", + "@keymanapp/models-types": "^15.0.69", + "@keymanapp/web-utils": "^15.0.69", "@types/chai": "^4.2.11", "@types/mocha": "^7.0.2", "@types/node": "^14.0.4", @@ -52,6 +52,6 @@ "typescript": "^3.8.3" }, "dependencies": { - "@keymanapp/models-wordbreakers": "^15.0.68" + "@keymanapp/models-wordbreakers": "^15.0.69" } } diff --git a/common/models/types/package-lock.json b/common/models/types/package-lock.json index 208411199c..04e3131f32 100644 --- a/common/models/types/package-lock.json +++ b/common/models/types/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/models-types", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/common/models/types/package.json b/common/models/types/package.json index ee5f44bd8a..36f17a09d1 100644 --- a/common/models/types/package.json +++ b/common/models/types/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/models-types", - "version": "15.0.68", + "version": "15.0.69", "description": "Type definitions in used in the modeling (lexical model/predictive text) component of Keyman.", "types": "./index.d.ts", "scripts": { diff --git a/common/models/wordbreakers/package-lock.json b/common/models/wordbreakers/package-lock.json index f07ebac66a..c37198ded6 100644 --- a/common/models/wordbreakers/package-lock.json +++ b/common/models/wordbreakers/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/models-wordbreakers", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/common/models/wordbreakers/package.json b/common/models/wordbreakers/package.json index d2b1fb8992..211fcbf6e8 100644 --- a/common/models/wordbreakers/package.json +++ b/common/models/wordbreakers/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/models-wordbreakers", - "version": "15.0.68", + "version": "15.0.69", "description": "Word breakers bundled in the modeling layer", "keywords": [ "lexical model", @@ -40,7 +40,7 @@ "url": "https://github.com/keymanapp/keyman/issues" }, "devDependencies": { - "@keymanapp/models-types": "^15.0.68", + "@keymanapp/models-types": "^15.0.69", "@types/chai": "^4.2.11", "@types/mocha": "^7.0.2", "chai": "^4.3.4", diff --git a/common/predictive-text/package-lock.json b/common/predictive-text/package-lock.json index e978cc025b..227b3b625e 100644 --- a/common/predictive-text/package-lock.json +++ b/common/predictive-text/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/lexical-model-layer", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/common/predictive-text/package.json b/common/predictive-text/package.json index e04518fd36..1392719d5e 100644 --- a/common/predictive-text/package.json +++ b/common/predictive-text/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/lexical-model-layer", - "version": "15.0.68", + "version": "15.0.69", "description": "Keyman/Predictive Text integration layer", "main": "build/index.js", "scripts": { @@ -21,8 +21,8 @@ }, "homepage": "https://github.com/keymanapp/keyman#readme", "devDependencies": { - "@keymanapp/models-types": "^15.0.68", - "@keymanapp/resources-gosh": "^15.0.68", + "@keymanapp/models-types": "^15.0.69", + "@keymanapp/resources-gosh": "^15.0.69", "@types/node": "^10.17.21", "chai": "^4.3.4", "karma": "^6.3.2", @@ -46,10 +46,10 @@ "typescript": "^3.8.3" }, "dependencies": { - "@keymanapp/models-templates": "^15.0.68", - "@keymanapp/models-wordbreakers": "^15.0.68", - "@keymanapp/web-environment": "^15.0.68", - "@keymanapp/web-utils": "^15.0.68", + "@keymanapp/models-templates": "^15.0.69", + "@keymanapp/models-wordbreakers": "^15.0.69", + "@keymanapp/web-environment": "^15.0.69", + "@keymanapp/web-utils": "^15.0.69", "es6-shim": "^0.35.5", "string.prototype.codepointat": "^0.2.1", "string.prototype.startswith": "^0.2.0" diff --git a/developer/js/package-lock.json b/developer/js/package-lock.json index c4a2c46106..0d60e5b7d2 100644 --- a/developer/js/package-lock.json +++ b/developer/js/package-lock.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/lexical-model-compiler", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/developer/js/package.json b/developer/js/package.json index 4a20180e07..0fa1e3e59b 100644 --- a/developer/js/package.json +++ b/developer/js/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/lexical-model-compiler", - "version": "15.0.68", + "version": "15.0.69", "description": "Keyman Developer lexical model compiler", "keywords": [ "keyboard", @@ -37,14 +37,14 @@ "node": ">=12.0.0" }, "dependencies": { - "@keymanapp/models-types": "^15.0.68", + "@keymanapp/models-types": "^15.0.69", "commander": "^3.0.0", "typescript": "^3.8.3", "xml2js": "^0.4.19" }, "devDependencies": { - "@keymanapp/models-templates": "^15.0.68", - "@keymanapp/models-wordbreakers": "^15.0.68", + "@keymanapp/models-templates": "^15.0.69", + "@keymanapp/models-wordbreakers": "^15.0.69", "@types/chai": "^4.1.7", "@types/mocha": "^5.2.7", "@types/node": "^10.14.6", diff --git a/lerna.json b/lerna.json index b9f07ab803..f8b353f310 100644 --- a/lerna.json +++ b/lerna.json @@ -20,5 +20,5 @@ "ts-node", "typescript" ], - "version": "15.0.68" + "version": "15.0.69" } diff --git a/resources/gosh/package-lock.json b/resources/gosh/package-lock.json index 7a34a3b506..1c8f1b1e48 100644 --- a/resources/gosh/package-lock.json +++ b/resources/gosh/package-lock.json @@ -1,5 +1,5 @@ { "name": "@keymanapp/resources-gosh", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 1 } diff --git a/resources/gosh/package.json b/resources/gosh/package.json index 39456c4578..4bc5085bcc 100644 --- a/resources/gosh/package.json +++ b/resources/gosh/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/resources-gosh", - "version": "15.0.68", + "version": "15.0.69", "description": "Good Ol' Shell", "author": "Marc Durdin (https://github.com/mcdurdin)", "contributors": [ diff --git a/resources/web-environment/package-lock.json b/resources/web-environment/package-lock.json index 777388218c..a6caa2eb03 100644 --- a/resources/web-environment/package-lock.json +++ b/resources/web-environment/package-lock.json @@ -1,5 +1,5 @@ { "name": "@keymanapp/web-environment", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 1 } diff --git a/resources/web-environment/package.json b/resources/web-environment/package.json index 926bd269a1..7575c4b182 100644 --- a/resources/web-environment/package.json +++ b/resources/web-environment/package.json @@ -1,6 +1,6 @@ { "name": "@keymanapp/web-environment", - "version": "15.0.68", + "version": "15.0.69", "description": "A compilation utility for passing select environment variables into our TS builds", "author": "Joshua Horton (https://github.com/jahorton)", "homepage": "https://github.com/keymanapp/keyman", @@ -17,6 +17,6 @@ "url": "https://github.com/keymanapp/keyman/issues" }, "devDependencies": { - "@keymanapp/resources-gosh": "^15.0.68" + "@keymanapp/resources-gosh": "^15.0.69" } } diff --git a/web/package-lock.json b/web/package-lock.json index 4a075cdf84..4e6dcfa279 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,6 +1,6 @@ { "name": "keyman", - "version": "15.0.68", + "version": "15.0.69", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/web/package.json b/web/package.json index 38c5ce53e5..2924c69c00 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "keyman", - "version": "15.0.68", + "version": "15.0.69", "description": "Facilitates text input in any language.", "repository": { "type": "git", @@ -18,8 +18,8 @@ }, "homepage": "https://github.com/keymanapp/keyman#readme", "devDependencies": { - "@keymanapp/resources-gosh": "^15.0.68", - "@keymanapp/web-sentry-manager": "^15.0.68", + "@keymanapp/resources-gosh": "^15.0.69", + "@keymanapp/web-sentry-manager": "^15.0.69", "@sentry/cli": "^1.52.3", "chai": "^4.3.4", "google-closure-compiler-java": "^20200224.0.0", @@ -52,13 +52,13 @@ "sentry-cli": "sentry-cli" }, "dependencies": { - "@keymanapp/input-processor": "^15.0.68", - "@keymanapp/keyboard-processor": "^15.0.68", - "@keymanapp/lexical-model-layer": "^15.0.68", - "@keymanapp/models-types": "^15.0.68", - "@keymanapp/recorder-core": "^15.0.68", - "@keymanapp/web-environment": "^15.0.68", - "@keymanapp/web-utils": "^15.0.68", + "@keymanapp/input-processor": "^15.0.69", + "@keymanapp/keyboard-processor": "^15.0.69", + "@keymanapp/lexical-model-layer": "^15.0.69", + "@keymanapp/models-types": "^15.0.69", + "@keymanapp/recorder-core": "^15.0.69", + "@keymanapp/web-environment": "^15.0.69", + "@keymanapp/web-utils": "^15.0.69", "@types/node": "^11.9.4", "es6-shim": "^0.35.5", "eventemitter3": "^4.0.0" From 6c90a37a51f4cf22243ecaac0899b4daed3026c3 Mon Sep 17 00:00:00 2001 From: jahorton Date: Wed, 16 Jun 2021 08:21:39 +0700 Subject: [PATCH 9/9] chore(web): adjustments for PR review comments --- web/.gitignore | 3 --- web/source/osk/{abstractions.ts => keytip.interface.ts} | 0 web/source/osk/visualKeyboard.ts | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) rename web/source/osk/{abstractions.ts => keytip.interface.ts} (100%) diff --git a/web/.gitignore b/web/.gitignore index 86e05f06b7..fe29333720 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,9 +1,6 @@ # Legacy build folders. output/ build/ -embedded/ - -!source/**/embedded # Current build folders. intermediate/ diff --git a/web/source/osk/abstractions.ts b/web/source/osk/keytip.interface.ts similarity index 100% rename from web/source/osk/abstractions.ts rename to web/source/osk/keytip.interface.ts diff --git a/web/source/osk/visualKeyboard.ts b/web/source/osk/visualKeyboard.ts index 480441a68b..81bd1d71cc 100644 --- a/web/source/osk/visualKeyboard.ts +++ b/web/source/osk/visualKeyboard.ts @@ -1,6 +1,6 @@ /// /// -/// +/// /// namespace com.keyman.osk {