keymanapp / keyman

Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
https://keyman.com/
Other
372 stars 102 forks source link

bug(web): longpress up-flick shortcut usability issues - too easy to trigger #10647

Closed mcdurdin closed 1 week ago

mcdurdin commented 3 months ago

Keyman 17.0.256-alpha on Android, Samsung A53/5G phone, Android 14

In this example, the e key gets a diacritic at about 8 seconds. There are other examples as well.

https://github.com/keymanapp/keyman/assets/4498365/9927254b-d1fc-45f9-8c6b-424946cc0fe0

No, I am not attempting to type precisely or use suggested corrections for this video. :grin:

jahorton commented 3 months ago

Re: one of the keypresses:

image

And the other:

image

So, remember that up-flick longpress shortcut? I'm blaming that. Sounds like we may need to take one or more of the following approaches:

  1. Increase the up-flick distance threshold.
  2. If completed via up-flick, require a certain amount of time pass; if that time doesn't elapse, the subkey-selection process gets cancelled in favor of the base key.
mcdurdin commented 3 weeks ago

Here's a repro with attached video. (Logging per #11277)

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

https://github.com/keymanapp/keyman/assets/4498365/d4c9db40-b2cc-4ac5-bb4b-cc53687572c1

[
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_N",
      "sources": [
        {
          "identifier": "touch:525",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 248.33334350585938,
                "targetY": 138.33334350585938,
                "t": 132597186,
                "item": "default-K_N"
              },
              {
                "targetX": 248.2890625,
                "targetY": 138.33334350585938,
                "t": 132597207.9000001,
                "item": "default-K_N"
              },
              {
                "targetX": 248.33334350585938,
                "targetY": 138.33334350585938,
                "t": 132597210.10000014,
                "item": "default-K_N"
              },
              {
                "targetX": 248.62240600585938,
                "targetY": 137.7548828125,
                "t": 132597259.60000014,
                "item": "default-K_N"
              },
              {
                "targetX": 248.6666717529297,
                "targetY": 137.6666717529297,
                "t": 132597268.29999995,
                "item": "default-K_N"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0.7453582671771405,
              "duration": 82.29999995231628,
              "sampleCount": 5,
              "rawDistance": 0.833920400327363
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:525"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:526",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 302.66668701171875,
                "targetY": 45,
                "t": 132597403.5,
                "item": "default-K_O"
              },
              {
                "targetX": 302.6224060058594,
                "targetY": 45,
                "t": 132597418,
                "item": "default-K_O"
              },
              {
                "targetX": 302.66668701171875,
                "targetY": 45,
                "t": 132597430.70000005,
                "item": "default-K_O"
              },
              {
                "targetX": 302.66668701171875,
                "targetY": 45,
                "t": 132597443.29999995,
                "item": "default-K_O"
              },
              {
                "targetX": 297.39422607421875,
                "targetY": 50.93522644042969,
                "t": 132597475.9000001,
                "item": "default-K_L"
              },
              {
                "targetX": 297.39422607421875,
                "targetY": 50.93522644042969,
                "t": 132597476.4000001,
                "item": "default-K_L"
              },
              {
                "targetX": 296.75946044921875,
                "targetY": 51.57389831542969,
                "t": 132597486.10000014,
                "item": "default-K_L"
              },
              {
                "targetX": 296.66668701171875,
                "targetY": 51.66667175292969,
                "t": 132597491.20000005,
                "item": "default-K_L"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 3.8744073760143007,
              "cardinal": "sw",
              "netDistance": 8.969086478639316,
              "duration": 87.70000004768372,
              "sampleCount": 8,
              "rawDistance": 9.059100314101052
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:526"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "flick-start",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:527",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 153.6666717529297,
                "targetY": 30.666671752929688,
                "t": 132597516.20000005,
                "item": "default-K_T"
              },
              {
                "targetX": 153.6666717529297,
                "targetY": 30.666671752929688,
                "t": 132597525,
                "item": "default-K_T"
              },
              {
                "targetX": 151.5416717529297,
                "targetY": 35.652671813964844,
                "t": 132597577,
                "item": "default-K_T"
              },
              {
                "targetX": 148.3434295654297,
                "targetY": 39.44987487792969,
                "t": 132597585.70000005,
                "item": "default-K_T"
              },
              {
                "targetX": 147,
                "targetY": 41,
                "t": 132597591.9000001,
                "item": "default-K_T"
              }
            ],
            "stats": {
              "angle": 3.71455936826273,
              "cardinal": "sw",
              "netDistance": 12.297242980563237,
              "duration": 75.70000004768372,
              "sampleCount": 5,
              "rawDistance": 12.435837605769263
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:527"
      ]
    },
    {
      "gestureSetId": "default",
      "matchedId": "flick-reset-end",
      "linkType": "complete",
      "item": "default-K_T",
      "sources": [],
      "allSourceIds": [
        "touch:527"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_SPACE",
      "sources": [
        {
          "identifier": "touch:528",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 225.6666717529297,
                "targetY": 173,
                "t": 132597638.60000014,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 225.6666717529297,
                "targetY": 172.9557342529297,
                "t": 132597658.4000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 225.6666717529297,
                "targetY": 173,
                "t": 132597662,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 225.9557342529297,
                "targetY": 172.4215545654297,
                "t": 132597702.29999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 226,
                "targetY": 172.33334350585938,
                "t": 132597712.10000014,
                "item": "default-K_SPACE"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0.7453446192700639,
              "duration": 73.5,
              "sampleCount": 5,
              "rawDistance": 0.833876233325523
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:528"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "longpress",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:529",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 134.33334350585938,
                "targetY": 41.66667175292969,
                "t": 132597771.10000014,
                "item": "default-K_R"
              },
              {
                "targetX": 126.07682800292969,
                "targetY": 36.3798828125,
                "t": 132597837.9000001,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 31.377609252929688,
                "t": 132597853.29999995,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 31.377609252929688,
                "t": 132597854.29999995,
                "item": "default-K_R"
              }
            ],
            "stats": {
              "angle": 5.286392476605971,
              "cardinal": "nw",
              "netDistance": 18.94861035574078,
              "duration": 83.19999980926514,
              "sampleCount": 4,
              "rawDistance": 18.948812886232915
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:529"
      ]
    },
    {
      "gestureSetId": "none",
      "matchedId": "subkey-select",
      "linkType": "complete",
      "item": "popup-default-U_0213",
      "sources": [
        {
          "identifier": "touch:529",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 134.33334350585938,
                "targetY": 94.66667175292969,
                "t": 132597771.10000014,
                "item": "default-K_R"
              },
              {
                "targetX": 126.07682800292969,
                "targetY": 89.3798828125,
                "t": 132597837.9000001,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 84.37760925292969,
                "t": 132597853.29999995,
                "item": "default-K_R"
              },
              {
                "targetX": 118.42155456542969,
                "targetY": 84.37760925292969,
                "t": 132597854.29999995,
                "item": "default-K_R"
              },
              {
                "targetX": 118.33333587646484,
                "targetY": 84.33333587646484,
                "t": 132597894.29999995,
                "item": "popup-default-U_0213"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 5.28582940138711,
              "cardinal": "nw",
              "netDistance": 19.04673395825433,
              "duration": 123.19999980926514,
              "sampleCount": 5,
              "rawDistance": 19.047517845309315
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:529"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_E",
      "sources": [
        {
          "identifier": "touch:530",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 88.66667175292969,
                "targetY": 29,
                "t": 132597932.5,
                "item": "default-K_E"
              },
              {
                "targetX": 88.66667175292969,
                "targetY": 29,
                "t": 132597979.70000005,
                "item": "default-K_E"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 47.200000047683716,
              "sampleCount": 2,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:530"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:531",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 322,
                "targetY": 45,
                "t": 132597997.20000005,
                "item": "default-K_O"
              },
              {
                "targetX": 322,
                "targetY": 45,
                "t": 132598089.5,
                "item": "default-K_O"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 92.29999995231628,
              "sampleCount": 2,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:531"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_R",
      "sources": [
        {
          "identifier": "touch:532",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 129,
                "targetY": 34.333335876464844,
                "t": 132598172.60000014,
                "item": "default-K_R"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 0,
              "sampleCount": 1,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:532"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:533",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 308.3333435058594,
                "targetY": 35.66667175292969,
                "t": 132598204,
                "item": "default-K_O"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 0,
              "sampleCount": 1,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:533"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_O",
      "sources": [
        {
          "identifier": "touch:534",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598347.10000014,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.622398376464844,
                "t": 132598370,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598381.79999995,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598394.4000001,
                "item": "default-K_O"
              },
              {
                "targetX": 295.66668701171875,
                "targetY": 42.66667175292969,
                "t": 132598404.9000001,
                "item": "default-K_O"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 57.799999952316284,
              "sampleCount": 5,
              "rawDistance": 0.0885467529296875
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:534"
      ]
    }
  ]
]
mcdurdin commented 3 weeks ago

Another repro.

Highlight is at 0:15 with m intended. (I didn't notice quickly enough to get history for the first unintended r with diacritic!)

https://github.com/keymanapp/keyman/assets/4498365/a8851e3d-d6e9-47a9-8cf6-a57fcc405e44

[
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_E",
      "sources": [
        {
          "identifier": "touch:607",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006237.70000005,
                "item": "default-K_E"
              },
              {
                "targetX": 98.37760925292969,
                "targetY": 35.333335876464844,
                "t": 133006254.4000001,
                "item": "default-K_E"
              },
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006255.5,
                "item": "default-K_E"
              },
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006285.4000001,
                "item": "default-K_E"
              },
              {
                "targetX": 98.33333587646484,
                "targetY": 35.333335876464844,
                "t": 133006312.4000001,
                "item": "default-K_E"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 74.70000004768372,
              "sampleCount": 5,
              "rawDistance": 0.0885467529296875
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:607"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_SPACE",
      "sources": [
        {
          "identifier": "touch:608",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 240,
                "targetY": 172.6666717529297,
                "t": 133006363.79999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 239,
                "targetY": 172.6666717529297,
                "t": 133006375.9000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 240,
                "targetY": 172.6666717529297,
                "t": 133006392.79999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 237.35678100585938,
                "targetY": 166.7233123779297,
                "t": 133006442.29999995,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 237,
                "targetY": 166,
                "t": 133006454.29999995,
                "item": "default-K_SPACE"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 5.860331666553952,
              "cardinal": "nw",
              "netDistance": 7.3105753714266974,
              "duration": 90.5,
              "sampleCount": 5,
              "rawDistance": 9.311142895984577
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:608"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "flick-start",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:609",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 193,
                "targetY": 130.6666717529297,
                "t": 133006580.9000001,
                "item": "default-K_B"
              },
              {
                "targetX": 192.9117889404297,
                "targetY": 130.7109375,
                "t": 133006597.70000005,
                "item": "default-K_B"
              },
              {
                "targetX": 193,
                "targetY": 130.6666717529297,
                "t": 133006606.29999995,
                "item": "default-K_B"
              },
              {
                "targetX": 198.59213256835938,
                "targetY": 131.9814453125,
                "t": 133006656.60000014,
                "item": "default-K_B"
              },
              {
                "targetX": 202.3193359375,
                "targetY": 132,
                "t": 133006664.29999995,
                "item": "default-K_B"
              },
              {
                "targetX": 202.6666717529297,
                "targetY": 132,
                "t": 133006672.4000001,
                "item": "default-K_B"
              },
              {
                "targetX": 205.9117889404297,
                "targetY": 130.7109375,
                "t": 133006689.4000001,
                "item": "default-K_B"
              }
            ],
            "stats": {
              "angle": 1.574224633581177,
              "cardinal": "e",
              "netDistance": 12.911864818784546,
              "duration": 108.5,
              "sampleCount": 7,
              "rawDistance": 13.508359026548284
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:609"
      ]
    },
    {
      "gestureSetId": "default",
      "matchedId": "flick-reset-end",
      "linkType": "complete",
      "item": "default-K_B",
      "sources": [],
      "allSourceIds": [
        "touch:609"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_I",
      "sources": [
        {
          "identifier": "touch:610",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 253.33334350585938,
                "targetY": 24.333335876464844,
                "t": 133006806.60000014,
                "item": "default-K_I"
              },
              {
                "targetX": 253.2008514404297,
                "targetY": 24.333335876464844,
                "t": 133006822.9000001,
                "item": "default-K_I"
              },
              {
                "targetX": 253.33334350585938,
                "targetY": 24.333335876464844,
                "t": 133006831.5,
                "item": "default-K_I"
              },
              {
                "targetX": 248.05014038085938,
                "targetY": 32.260093688964844,
                "t": 133006873.29999995,
                "item": "default-K_U"
              },
              {
                "targetX": 248.05014038085938,
                "targetY": 32.260093688964844,
                "t": 133006873.79999995,
                "item": "default-K_U"
              },
              {
                "targetX": 247.4215545654297,
                "targetY": 32.333335876464844,
                "t": 133006882.10000014,
                "item": "default-K_U"
              },
              {
                "targetX": 247.33334350585938,
                "targetY": 32.333335876464844,
                "t": 133006888,
                "item": "default-K_U"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 3.7850937623830774,
              "cardinal": "sw",
              "netDistance": 10,
              "duration": 81.39999985694885,
              "sampleCount": 7,
              "rawDistance": 10.512088716068373
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:610"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_T",
      "sources": [
        {
          "identifier": "touch:611",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 159,
                "targetY": 36,
                "t": 133006948.60000014,
                "item": "default-K_T"
              },
              {
                "targetX": 158.9557342529297,
                "targetY": 36,
                "t": 133006968.9000001,
                "item": "default-K_T"
              },
              {
                "targetX": 159,
                "targetY": 36,
                "t": 133006973.10000014,
                "item": "default-K_T"
              },
              {
                "targetX": 158.6666717529297,
                "targetY": 36.333335876464844,
                "t": 133007024.29999995,
                "item": "default-K_T"
              },
              {
                "targetX": 151.6666717529297,
                "targetY": 39.95573425292969,
                "t": 133007040.70000005,
                "item": "default-K_T"
              },
              {
                "targetX": 151.6666717529297,
                "targetY": 40,
                "t": 133007042.60000014,
                "item": "default-K_T"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 4.213041967135186,
              "cardinal": "sw",
              "netDistance": 8.353304925553678,
              "duration": 94,
              "sampleCount": 6,
              "rawDistance": 8.48593644742464
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:611"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_SPACE",
      "sources": [
        {
          "identifier": "touch:612",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 233.33334350585938,
                "targetY": 163,
                "t": 133007049,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 233.33334350585938,
                "targetY": 163,
                "t": 133007077.4000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 233.8740234375,
                "targetY": 153.26498413085938,
                "t": 133007108.4000001,
                "item": "default-K_SPACE"
              },
              {
                "targetX": 234,
                "targetY": 151,
                "t": 133007125,
                "item": "default-K_SPACE"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 0.05549766014351466,
              "cardinal": "n",
              "netDistance": 12.018503687280704,
              "duration": 76,
              "sampleCount": 4,
              "rawDistance": 12.01850369305674
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:612"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "longpress",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:613",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 256.3333435058594,
                "targetY": 130,
                "t": 133007215.79999995,
                "item": "default-K_M"
              },
              {
                "targetX": 257.3232421875,
                "targetY": 121.41342163085938,
                "t": 133007291.10000014,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298.70000005,
                "item": "default-K_M"
              }
            ],
            "stats": {
              "angle": 0.09078383549729901,
              "cardinal": "n",
              "netDistance": 18.312058034521733,
              "duration": 82.90000009536743,
              "sampleCount": 4,
              "rawDistance": 18.316768945725826
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:613"
      ]
    },
    {
      "gestureSetId": "none",
      "matchedId": "subkey-select",
      "linkType": "complete",
      "item": "popup-default-U_1E41",
      "sources": [
        {
          "identifier": "touch:613",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 44.333343505859375,
                "targetY": 84,
                "t": 133007215.79999995,
                "item": "default-K_M"
              },
              {
                "targetX": 45.3232421875,
                "targetY": 75.41342163085938,
                "t": 133007291.10000014,
                "item": "default-K_M"
              },
              {
                "targetX": 45.993499755859375,
                "targetY": 65.76335144042969,
                "t": 133007298,
                "item": "default-K_M"
              },
              {
                "targetX": 45.993499755859375,
                "targetY": 65.76335144042969,
                "t": 133007298.70000005,
                "item": "default-K_M"
              },
              {
                "targetX": 46,
                "targetY": 65.08822631835938,
                "t": 133007309.70000005,
                "item": "popup-default-U_1E41"
              },
              {
                "targetX": 46,
                "targetY": 65,
                "t": 133007320,
                "item": "popup-default-U_1E41"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "angle": 0.08749480949450114,
              "cardinal": "n",
              "netDistance": 19.0729584456492,
              "duration": 104.20000004768372,
              "sampleCount": 6,
              "rawDistance": 19.080151678277012
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:613"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_U",
      "sources": [
        {
          "identifier": "touch:614",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 236.33334350585938,
                "targetY": 47.333335876464844,
                "t": 133007409.5,
                "item": "default-K_U"
              },
              {
                "targetX": 236.2890625,
                "targetY": 47.333335876464844,
                "t": 133007417,
                "item": "default-K_U"
              },
              {
                "targetX": 236.33334350585938,
                "targetY": 47.333335876464844,
                "t": 133007423.60000014,
                "item": "default-K_U"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 14.100000143051147,
              "sampleCount": 3,
              "rawDistance": 0.08856201171875
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:614"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_S",
      "sources": [
        {
          "identifier": "touch:615",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007497.79999995,
                "item": "default-K_S"
              },
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007507.79999995,
                "item": "default-K_S"
              },
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007509.70000005,
                "item": "default-K_S"
              },
              {
                "targetX": 75.66667175292969,
                "targetY": 72,
                "t": 133007548.70000005,
                "item": "default-K_S"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 50.90000009536743,
              "sampleCount": 4,
              "rawDistance": 0
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:615"
      ]
    }
  ],
  [
    {
      "gestureSetId": "default",
      "matchedId": "initial-tap",
      "linkType": "chain",
      "item": "default-K_T",
      "sources": [
        {
          "identifier": "touch:616",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 157,
                "targetY": 42,
                "t": 133007675,
                "item": "default-K_T"
              },
              {
                "targetX": 156.9557342529297,
                "targetY": 42,
                "t": 133007696.29999995,
                "item": "default-K_T"
              },
              {
                "targetX": 157,
                "targetY": 42,
                "t": 133007708.10000014,
                "item": "default-K_T"
              }
            ],
            "wasCancelled": false,
            "stats": {
              "netDistance": 0,
              "duration": 33.10000014305115,
              "sampleCount": 3,
              "rawDistance": 0.088531494140625
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:616"
      ]
    }
  ]
]
jahorton commented 3 weeks ago

Interesting tidbit 1:

{
  "gestureSetId": "default",
  "matchedId": "flick-start",
  "linkType": "chain",
  "sources": [
    {
      "identifier": "touch:527",
      "isFromTouch": true,
      "path": {
        "coords": [/* ... */],
        "stats": {
          "angle": 3.71455936826273,
          "cardinal": "sw",
          "netDistance": 12.297242980563237,
          "duration": 75.70000004768372,
          "sampleCount": 5,
          "rawDistance": 12.435837605769263
        }
      },
      "stateToken": "default"
    }
  ]
}

That is a surprisingly low 'netDistance' for the flick-start to trigger. I'd ask if it was intended, but the rest of that gesture's lifetime indicates yes - you did go all the way to flick-end.

mcdurdin commented 3 weeks ago

I'd ask if it was intended, but the rest of that gesture's lifetime indicates yes - you did go all the way to flick-end.

I did no intentional flicks in either video

jahorton commented 3 weeks ago
    {
      "gestureSetId": "default",
      "matchedId": "longpress",
      "linkType": "chain",
      "sources": [
        {
          "identifier": "touch:613",
          "isFromTouch": true,
          "path": {
            "coords": [
              {
                "targetX": 256.3333435058594,
                "targetY": 130,
                "t": 133007215.79999995,
                "item": "default-K_M"
              },
              {
                "targetX": 257.3232421875,
                "targetY": 121.41342163085938,
                "t": 133007291.10000014,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298,
                "item": "default-K_M"
              },
              {
                "targetX": 257.9934997558594,
                "targetY": 111.76335144042969,
                "t": 133007298.70000005,
                "item": "default-K_M"
              }
            ],
            "stats": {
              "angle": 0.09078383549729901,
              "cardinal": "n",
              "netDistance": 18.312058034521733,
              "duration": 82.90000009536743,
              "sampleCount": 4,
              "rawDistance": 18.316768945725826
            }
          },
          "stateToken": "default"
        }
      ],
      "allSourceIds": [
        "touch:613"
      ]
    }

That's 18 pixels of movement that it recorded, all within the span of 83ms. If the second tap weren't there, I'd have a reason to question if the coordinate-remapper (for layer changes, etc) did something odd, but it is present. (You can see remapper effects in its following "subkey-select" section - the original coordinates are included, but remapped based on the subkey display area.)

jahorton commented 3 weeks ago

I'd ask if it was intended, but the rest of that gesture's lifetime indicates yes - you did go all the way to flick-end.

I did no intentional flicks in either video

Oh. Guess I skimmed to fast; you're right, as it does end with flick-reset-end. That simply outputs the base key, and if you never got far, you probably wouldn't even have noticed any flick-preview scrolling.

mcdurdin commented 3 weeks ago

Added a note to the first video:

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

And second:

Highlight is at 0:15 with m intended.

jahorton commented 3 weeks ago

Added a note to the first video:

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

And second:

Highlight is at 0:15 with m intended.

The initial touch location of the 'r', as indicated by the opacity of the touch-indicator on the key.

initial 'r' press location

The gesture-engine notes 'yep, it's been touched' here after a delay of two or three frames and finally displays the key-preview here.

key-preview activates

Two frames later, the subkey menu displays:

subkey menu gets activated

One frame later, the subkey is activated and output... with the subkey menu still showing for a moment. (Its cancellation is triggered by recognition of the end of the gesture, which is processed after the last gesture-component match.)

Subkey is output, with the subkey menu still visible

Two frames later, the subkey menu disappears.

jahorton commented 3 weeks ago

One notable thing from that sequence of images - less than half of the 'flick' distance was actually north-directed - a substantial component of the motion was horizontal. That is something that could be cleaned up.

A focused 'start' and 'end' comparison, excerpted from the screenshots above:

start vs end

I'd say that's about a 30-degree angle, direction between north-east and east-north-east.

From the path-model as it is:

'n', 'nw', and 'ne' - approx 67.5 degrees on each side of due N in total.

30 degrees from horizontal would fall within that.

jahorton commented 3 weeks ago

Added a note to the first video:

Highlight in this video is at 0:11, where I intend to type a plain r but instead get ȓ.

And second:

Highlight is at 0:15 with m intended.

And that would be the one I extracted above. I only later realized you had two different recordings... but there are others with clearer stats for the 'unintended' cases. Sadly, the 'r' I focused on above was kicked out of history before you stopped (I kept it to the most recent 10), but the first sequence has a good one:

"stats": {
  "angle": 5.28582940138711,
  "cardinal": "nw",
  "netDistance": 19.04673395825433,
  "duration": 123.19999980926514,
  "sampleCount": 5,
  "rawDistance": 19.047517845309315
}

That angle corresponds to 302.9 degrees - or -57.1 degrees, a generally 'nw' direction. Its purely-vertical distance is only 54.3% of its netDistance... which would have put the vertical distance travelled at only 10.36 px. That'd be well within the threshold if I had it properly checking only the vertical component.