mirror of
https://github.com/zoriya/flake.git
synced 2025-12-05 22:26:21 +00:00
49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
import Gtk from "gi://Gtk?version=3.0";
|
|
import Gdk from "gi://Gdk";
|
|
|
|
import { Bar } from "./layouts/bar.js";
|
|
import { Notifications } from "./layouts/notifications.js";
|
|
import { OSD } from "./layouts/osd.js";
|
|
import { Quicksettings } from "./layouts/quicksettings.js";
|
|
|
|
/**
|
|
* @param {Array<(monitor: number) => Gtk.Window>} widgets
|
|
*/
|
|
export function forMonitors(widgets) {
|
|
const display = Gdk.Display.get_default();
|
|
|
|
display?.connect("monitor-added", (disp, gdkmonitor) => {
|
|
let monitor = 0;
|
|
for (let i = 0; i < display.get_n_monitors(); i++) {
|
|
if (gdkmonitor === display.get_monitor(i)) {
|
|
monitor = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
widgets.forEach((win) => App.addWindow(win(monitor)));
|
|
});
|
|
|
|
display?.connect("monitor-removed", (disp, monitor) => {
|
|
App.windows.forEach((win) => {
|
|
// @ts-ignore
|
|
if (win.gdkmonitor === monitor) App.removeWindow(win);
|
|
});
|
|
});
|
|
|
|
const n = display?.get_n_monitors() || 1;
|
|
return Array.from({ length: n }, (_, i) => i).flatMap((mon) =>
|
|
widgets.map((x) => x(mon)),
|
|
);
|
|
}
|
|
|
|
App.config({
|
|
closeWindowDelay: {
|
|
quicksettings: 300,
|
|
notifications: 200,
|
|
osd: 300,
|
|
},
|
|
style: `${App.configDir}/style.css`,
|
|
windows: [...forMonitors([Bar]), Quicksettings(), Notifications(), OSD()],
|
|
});
|