fix(MessageClickActions): deferDoubleClickForTriple (#724)

This commit is contained in:
Key 2026-02-04 17:11:07 +00:00 • committed by GitHub
parent 3b38cac430
commit b2b4031702
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -200,6 +200,11 @@ const settings = definePluginSettings({
markers: makeRange(50, 500, 50),
default: 150
},
deferDoubleClickForTriple: {
type: OptionType.BOOLEAN,
description: "Delay double-click to allow triple-click actions (disables triple-click when off)",
default: true
},
selectionHoldTimeout: {
type: OptionType.NUMBER,
description: "Timeout to allow text selection (ms)",
@ -538,6 +543,12 @@ export default definePlugin({
}
if (isTripleClick) {
if (!settings.store.deferDoubleClickForTriple) {
mouseDownCount = 0;
doubleClickDetected = false;
secondMouseDownTime = 0;
return;
}
if (doubleClickTimeout) {
clearTimeout(doubleClickTimeout);
doubleClickTimeout = null;
@ -556,7 +567,14 @@ export default definePlugin({
}
const canDoubleClick = (isModifierPressed(doubleClickModifier) || doubleClickModifier === "NONE") && doubleClickAction !== "NONE";
const canTripleClick = isModifierPressed(tripleClickModifier) && tripleClickAction !== "NONE";
const canTripleClick =
settings.store.deferDoubleClickForTriple &&
isModifierPressed(tripleClickModifier) &&
tripleClickAction !== "NONE";
const shouldDeferDoubleClick =
canDoubleClick &&
canTripleClick &&
doubleClickModifier === tripleClickModifier;
if (isDoubleClick) {
doubleClickFired = true;
@ -576,7 +594,7 @@ export default definePlugin({
}
};
if (canTripleClick && canDoubleClick) {
if (shouldDeferDoubleClick) {
if (doubleClickTimeout) {
clearTimeout(doubleClickTimeout);
}
@ -613,8 +631,10 @@ export default definePlugin({
secondMouseDownTime = 0;
};
const hasDoubleClickAction = settings.store.doubleClickAction !== "NONE" || settings.store.doubleClickOthersAction !== "NONE";
if (hasDoubleClickAction && singleClickModifier === "NONE") {
const canDoubleClickWithCurrentModifier =
doubleClickAction !== "NONE" &&
(doubleClickModifier === "NONE" || isModifierPressed(doubleClickModifier));
if (canDoubleClickWithCurrentModifier && singleClickModifier === "NONE") {
singleClickTimeout = setTimeout(() => {
executeSingleClick();
singleClickTimeout = null;