86 lines
2.8 KiB
TypeScript
86 lines
2.8 KiB
TypeScript
import {WindowWrapper} from "./window.js";
|
|
import {Rect} from "../utils/rect.js";
|
|
import queueEvent from "../utils/events.js";
|
|
import {Logger} from "../utils/logger.js";
|
|
import Meta from "gi://Meta";
|
|
import Mtk from "@girs/mtk-17";
|
|
|
|
import WindowContainer from "./container.js";
|
|
import Window = Meta.Window;
|
|
|
|
export default class Monitor {
|
|
|
|
_id: number;
|
|
_workArea: Rect;
|
|
_workspaces: WindowContainer[] = [];
|
|
|
|
constructor(monitorId: number) {
|
|
this._id = monitorId;
|
|
const workspace = global.workspace_manager.get_active_workspace();
|
|
this._workArea = workspace.get_work_area_for_monitor(this._id);
|
|
Logger.log("CREATING MONITOR", monitorId);
|
|
Logger.log("WorkArea", this._workArea.x, this._workArea.y, this._workArea.width, this._workArea.height);
|
|
const workspaceCount = global.workspace_manager.get_n_workspaces()
|
|
Logger.log("Workspace Count", workspaceCount);
|
|
for (let i = 0; i < workspaceCount; i++) {
|
|
this._workspaces.push(new WindowContainer(this._workArea));
|
|
}
|
|
}
|
|
|
|
disconnectSignals() {
|
|
for (const container of this._workspaces) {
|
|
container.disconnectSignals();
|
|
}
|
|
}
|
|
|
|
removeAllWindows(): void {
|
|
for (const container of this._workspaces) {
|
|
container.removeAllWindows();
|
|
}
|
|
}
|
|
|
|
getWindow(windowId: number): WindowWrapper | undefined {
|
|
for (const container of this._workspaces) {
|
|
const win = container.getWindow(windowId);
|
|
if (win) {
|
|
return win;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
removeWindow(winWrap: WindowWrapper) {
|
|
const windowId = winWrap.getWindowId();
|
|
for (const container of this._workspaces) {
|
|
const win = container.getWindow(windowId);
|
|
if (win) {
|
|
container.removeWindow(windowId);
|
|
}
|
|
}
|
|
}
|
|
|
|
addWindow(winWrap: WindowWrapper) {
|
|
const window_workspace = winWrap.getWindow().get_workspace().index();
|
|
this._workspaces[window_workspace].addWindow(winWrap);
|
|
}
|
|
|
|
tileWindows(): void {
|
|
this._workArea = global.workspace_manager.get_active_workspace().get_work_area_for_monitor(this._id);
|
|
const activeWorkspace = global.workspace_manager.get_active_workspace();
|
|
this._workspaces[activeWorkspace.index()].move(this._workArea);
|
|
this._workspaces[activeWorkspace.index()].tileWindows()
|
|
}
|
|
|
|
removeWorkspace(workspaceId: number): void {
|
|
this._workspaces.splice(workspaceId, 1);
|
|
}
|
|
|
|
addWorkspace(): void {
|
|
this._workspaces.push(new WindowContainer(this._workArea));
|
|
}
|
|
|
|
itemDragged(item: WindowWrapper, x: number, y: number): void {
|
|
this._workspaces[item.getWorkspace()].itemDragged(item, x, y);
|
|
}
|
|
|
|
} |