UNPKG

bond-wm

Version:

An X Window Manager built on web technologies.

41 lines (34 loc) 1.15 kB
import { geometryContains } from "@bond-wm/shared"; import { IXClient, XQueryPointerResult } from "@bond-wm/shared"; import { XWMContext } from "./wm"; export function queryPointer(X: IXClient, relativeWid: number): Promise<XQueryPointerResult> { return new Promise((resolve, reject) => { X.QueryPointer(relativeWid, (err, result) => { if (err) { reject(err); } else { resolve(result); } }); }); } export async function getScreenIndexWithCursor(context: XWMContext, relativeWid: number): Promise<number> { const pointerInfo = await queryPointer(context.X, relativeWid); if (!pointerInfo) { return -1; } const screens = context.store.getState().screens.filter((s) => s.root === pointerInfo.root); if (!screens.length) { return -1; } if (screens.length === 1) { return screens[0].index; } // With Xinerama setup, we need to check the pointer coords to determine the screen. for (const screen of screens) { if (geometryContains(screen, pointerInfo.rootX, pointerInfo.rootY)) { return screen.index; } } return screens[0].index; // None matched above? }