Toggle enable-mouse-events cursor while alt is held for mouseEventsRequireAlt.

Extract AltMouseCursorController to bind DOM listeners only when the option and mouse protocol are active.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Daniel Imms
2026-05-27 16:20:45 -07:00
co-authored by Cursor
parent f8e9a81d0e
commit bf8af4a871
2 changed files with 92 additions and 3 deletions
+19 -1
View File
@@ -3,7 +3,7 @@
* @license MIT
*/
import { assert } from 'chai';
import { MouseService } from 'browser/services/MouseService';
import { AltMouseCursorController, MouseService } from 'browser/services/MouseService';
import { MouseStateService } from 'common/services/MouseStateService';
import { CoreMouseAction, CoreMouseButton } from 'common/Types';
import { IBufferService, ICoreService, ILogService, IOptionsService } from 'common/services/Services';
@@ -332,4 +332,22 @@ describe('MouseService mouseEventsRequireAlt', () => {
assert.isTrue(sent);
assert.deepEqual(reports, ['\x1b[<0;1;1M']);
});
it('should toggle enable-mouse-events class when alt modifier changes', () => {
const element = createTestMouseTargetElement();
const altMouseCursor = new AltMouseCursorController(element, {
addEventListener: () => {},
removeEventListener: () => {}
} as any, () => true);
const sync = (altHeld: boolean) => altMouseCursor.syncFromModifier({
getModifierState: (key: string) => key === 'Alt' && altHeld
} as KeyboardEvent);
assert.isFalse(element.classList.contains('enable-mouse-events'));
sync(true);
assert.isTrue(element.classList.contains('enable-mouse-events'));
sync(false);
assert.isFalse(element.classList.contains('enable-mouse-events'));
});
});