ad0ddfb15d
Ground-truth reapply of PR #40414 by @liuhao1024. The original branch predates the ts-ify migration and implemented the gesture by injecting a DOM wheel listener via executeJavaScript + a new IPC channel. Current Electron surfaces the modifier+wheel gesture natively as the main-process webContents 'zoom-changed' event, so the salvage uses that instead: no renderer injection, no new preload surface, no new IPC channel. The handler routes through setAndPersistZoomLevel — the same persist+notify funnel as the keyboard shortcuts — so wheel zoom uses the same 0.1 half-step, persists to zoom-state.json across restarts, and keeps the settings Scale control in sync. Session windows get the gesture automatically via wireCommonWindowHandlers; the pet overlay stays opted out via zoomWiringForWindowKind.