diff options
author | Aylur <[email protected]> | 2024-09-07 18:00:17 +0200 |
---|---|---|
committer | Aylur <[email protected]> | 2024-09-07 18:00:17 +0200 |
commit | e06ae737ef0a29e98363d6453ae3049aed164a64 (patch) | |
tree | c41bd26dcf2411400cdc8c6601f22af6ca25b1f6 /docs/ags/faq.md | |
parent | 3c68f1eda2d0ad89e2c55560c25947615296168f (diff) |
feat: App monitor signals
Diffstat (limited to 'docs/ags/faq.md')
-rw-r--r-- | docs/ags/faq.md | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/docs/ags/faq.md b/docs/ags/faq.md index baf9d6c..eef0bcb 100644 --- a/docs/ags/faq.md +++ b/docs/ags/faq.md @@ -212,3 +212,46 @@ App.start({ :::info It is considered bad practice to populate the global scope, but its your code, not a public library. ::: + +## Auto create Window for each Monitor + +To have Window widgets appear on a monitor when its plugged in, listen to `App.monitor_added`. + +:::code-group + +```tsx [Bar.tsx] +export default function Bar(gdkmonitor: Gdk.Monitor) { + return <window gdkmonitor={gdkmonitor} /> +} +``` + +::: + +:::code-group + +```ts [app.ts] +import { Gdk, Gtk } from "astal" +import Bar from "./Bar" + +function main() { + const bars = new Map<Gdk.Monitor, Gtk.Widget>() + + // initialize + for (const gdkmonitor of App.get_monitors()) { + bars.set(gdkmonitor, Bar(gdkmonitor)) + } + + App.connect("monitor-added", (_, gdkmonitor) => { + bars.set(gdkmonitor, Bar(gdkmonitor)) + }) + + App.connect("monitor-removed", (_, gdkmonitor) => { + bars.get(gdkmonitor)?.destroy() + bars.delete(gdkmonitor) + }) +} + +App.start({ main }) +``` + +::: |