Files
msime-windows/engine/contracts/webview/messages.json
T
fanlusky 426bb9d544 feat(server): WebView2 候选窗口支持滚轮翻页,并加上开关
PR #351 只给 D2D 候选窗口加了滚轮翻页,WebView2 后端还没有。

网页端只上报一个以 WHEEL_DELTA 为单位的原始 delta,notch 累加仍然
交给 CandidateWheel::ConsumeWheelDelta,两个宿主最终都汇聚到
WM_PAGE_CANDIDATE,翻页逻辑一份不重复。Chromium 的 wheelDeltaY 本身
就是 ±120/格,正是原生累加器期望的单位,deltaY 作标准回退。

同时把滚轮翻页做成可配置的 general.paging_mouse_wheel,默认关闭:
候选宿主是 NOACTIVATE 且从不获得焦点,滚轮只有在 Windows「当我悬停
在非活动窗口上方时滚动它们」开启时才会送达,无法无条件承诺,所以设为
opt-in,设置页里也写明了这个前提。开关只在 WM_PAGE_CANDIDATE 一处
判断;D2D 那边在 WM_MOUSEWHEEL 顶部提前返回 false,关闭时消息照旧
交给 DefWindowProc,与功能加入前一致。
2026-09-13 01:02:02 +08:00

697 lines
13 KiB
JSON

{
"version": 1,
"client": {
"configRequest": {
"surfaces": [
"settings"
]
},
"skinCatalogRequest": {
"surfaces": [
"settings"
]
},
"openSkinDirectory": {
"surfaces": [
"settings"
]
},
"openHandwritingPanel": {
"surfaces": [
"settings"
]
},
"restartServer": {
"surfaces": [
"settings"
]
},
"copyText": {
"surfaces": [
"settings"
],
"data": {
"type": "string"
}
},
"openExternalUrl": {
"surfaces": [
"settings"
],
"data": {
"type": "string"
}
},
"dragStart": {
"surfaces": [
"settings",
"toolbar"
]
},
"focus": {
"surfaces": [
"settings"
]
},
"resizeStart": {
"surfaces": [
"settings"
],
"data": {
"type": "string",
"enum": [
"left",
"right",
"top",
"bottom",
"left-top",
"right-top",
"left-bottom",
"right-bottom",
"client"
]
}
},
"resizeHitTest": {
"surfaces": [
"settings"
],
"data": {
"type": "string",
"enum": [
"left",
"right",
"top",
"bottom",
"left-top",
"right-top",
"left-bottom",
"right-bottom",
"client"
]
}
},
"windowControl": {
"surfaces": [
"settings"
],
"data": {
"type": "string",
"enum": [
"minimize",
"maximize",
"restore",
"close"
]
}
},
"maximizeButtonRect": {
"surfaces": [
"settings"
],
"data": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number",
"minimum": 0
},
"height": {
"type": "number",
"minimum": 0
},
"dpr": {
"type": "number",
"minimum": 0.01
}
},
"required": [
"x",
"y",
"width",
"height",
"dpr"
],
"additionalProperties": false
}
},
"configUpdate": {
"surfaces": [
"settings"
],
"data": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"required": [
"path",
"value"
],
"additionalProperties": false
}
},
"dictionaryRequest": {
"surfaces": [
"settings"
],
"data": {
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"dictionary": {
"type": "string",
"enum": [
"quanpin",
"wubi",
"english",
"quick"
]
},
"action": {
"type": "string",
"enum": [
"query",
"create",
"update",
"delete",
"import",
"importHans",
"export"
]
},
"word": {
"type": "string"
},
"code": {
"type": "string"
},
"content": {
"type": "string"
},
"weight": {
"type": "integer"
},
"oldWord": {
"type": "string"
},
"oldCode": {
"type": "string"
},
"display": {
"type": "string"
},
"oldDisplay": {
"type": "string"
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 2147483647
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"required": [
"requestId",
"dictionary",
"action"
],
"additionalProperties": false
}
},
"openKeyboardPanel": {
"surfaces": [
"settings",
"toolbar"
]
},
"candidate": {
"surfaces": [
"candidate"
],
"data": {
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"delete": {
"surfaces": [
"candidate"
],
"data": {
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"pin": {
"surfaces": [
"candidate"
],
"data": {
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"clearPosition": {
"surfaces": [
"candidate"
],
"data": {
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"candidateWheel": {
"surfaces": [
"candidate"
],
"data": {
"type": "integer",
"minimum": -32768,
"maximum": 32767
}
},
"fixPosition": {
"surfaces": [
"candidate"
],
"data": {
"type": "object",
"properties": {
"index": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"position": {
"type": "integer",
"minimum": 1,
"maximum": 5
}
},
"required": [
"index",
"position"
],
"additionalProperties": false
}
},
"contextMenuResize": {
"surfaces": [
"candidate"
],
"data": {
"type": "object",
"properties": {
"width": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"height": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"topExpansion": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"leftExpansion": {
"type": "integer",
"minimum": 0,
"maximum": 65535
}
},
"required": [
"width",
"height"
],
"additionalProperties": false
}
},
"contextMenuClosed": {
"surfaces": [
"candidate"
]
},
"candidatePointerArmed": {
"surfaces": [
"candidate"
]
},
"candidatePointerMotion": {
"surfaces": [
"candidate"
]
},
"candidateFrameProbe": {
"surfaces": [
"candidate"
],
"data": {
"type": "object",
"properties": {
"revision": {
"type": "integer"
},
"stage": {
"type": "integer"
},
"performanceMs": {
"type": "number",
"minimum": 0
}
},
"required": [
"revision",
"stage",
"performanceMs"
],
"additionalProperties": false
}
},
"candidatePointerProbe": {
"surfaces": [
"candidate"
],
"data": {
"type": "object",
"properties": {
"probe": {
"type": "integer"
},
"screenX": {
"type": "integer"
},
"screenY": {
"type": "integer"
},
"clientX": {
"type": "integer"
},
"clientY": {
"type": "integer"
},
"movementX": {
"type": "integer"
},
"movementY": {
"type": "integer"
},
"armed": {
"type": "boolean"
}
},
"required": [
"probe",
"screenX",
"screenY",
"clientX",
"clientY",
"movementX",
"movementY",
"armed"
],
"additionalProperties": false
}
},
"contentTruncated": {
"surfaces": [
"candidate",
"toolbar",
"menu"
],
"data": {
"type": "object",
"properties": {
"surface": {
"type": "string",
"enum": [
"candidate",
"toolbar",
"menu",
"ftb",
"candwnd",
"cand"
]
},
"width": {
"type": "number",
"minimum": 0
},
"height": {
"type": "number",
"minimum": 0
}
},
"required": [
"surface",
"width",
"height"
],
"additionalProperties": true
}
},
"floatingToggle": {
"surfaces": [
"menu"
],
"data": {
"type": "boolean"
}
},
"settings": {
"surfaces": [
"menu"
]
},
"about": {
"surfaces": [
"menu"
]
},
"emojiSymbols": {
"surfaces": [
"menu"
]
},
"keyboardPanel": {
"surfaces": [
"menu"
]
},
"handwritingPanel": {
"surfaces": [
"menu"
]
},
"voiceInput": {
"surfaces": [
"menu"
]
},
"ready": {
"surfaces": [
"toolbar"
]
},
"exitEnglishInputMode": {
"surfaces": [
"toolbar"
]
},
"changeCharacterSet": {
"surfaces": [
"toolbar"
]
},
"openSettings": {
"surfaces": [
"toolbar"
]
},
"openEmojiPanel": {
"surfaces": [
"toolbar"
]
},
"changeIMEMode": {
"surfaces": [
"toolbar"
],
"data": {
"type": "string",
"enum": [
"cn",
"en"
]
}
},
"changeCharMode": {
"surfaces": [
"toolbar"
],
"data": {
"type": "string",
"enum": [
"fullwidth",
"halfwidth"
]
}
},
"changePuncMode": {
"surfaces": [
"toolbar"
],
"data": {
"type": "string",
"enum": [
"puncEn",
"puncCn"
]
}
}
},
"server": {
"configSnapshot": {
"data": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": true
}
},
"windowState": {
"data": {
"type": "object",
"properties": {
"isMaximized": {
"type": "boolean"
}
},
"required": [
"isMaximized"
],
"additionalProperties": false
}
},
"maxButtonEvent": {
"data": {
"type": "object",
"properties": {
"event": {
"type": "string",
"enum": [
"enter",
"leave",
"down",
"up",
"click"
]
}
},
"required": [
"event"
],
"additionalProperties": false
}
},
"dictionaryResponse": {
"properties": {
"requestId": {
"type": "string"
},
"action": {
"type": "string"
},
"dictionary": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"message": {
"type": "string"
},
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"word": {
"type": "string"
},
"code": {
"type": "string"
},
"display": {
"type": "string"
},
"weight": {
"type": "integer"
}
},
"required": [
"word"
],
"additionalProperties": false
}
},
"content": {
"type": "string"
},
"filename": {
"type": "string"
},
"offset": {
"type": "integer",
"minimum": 0
},
"hasMore": {
"type": "boolean"
}
},
"required": [
"requestId",
"ok",
"message",
"rows"
],
"additionalProperties": true
}
}
}