From b2b4031702ae8ecb060b4b4c80fcfd3ccb2b4d30 Mon Sep 17 00:00:00 2001 From: Key Date: Wed, 4 Feb 2026 17:11:07 +0000 Subject: [PATCH] fix(MessageClickActions): deferDoubleClickForTriple (#724) --- src/plugins/messageClickActions/index.ts | 28 ++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/plugins/messageClickActions/index.ts b/src/plugins/messageClickActions/index.ts index a016b25d1..b75c44ef0 100644 --- a/src/plugins/messageClickActions/index.ts +++ b/src/plugins/messageClickActions/index.ts @@ -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;