summaryrefslogtreecommitdiff
path: root/docs/ags/faq.md
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-09-07 18:00:17 +0200
committerAylur <[email protected]>2024-09-07 18:00:17 +0200
commite06ae737ef0a29e98363d6453ae3049aed164a64 (patch)
treec41bd26dcf2411400cdc8c6601f22af6ca25b1f6 /docs/ags/faq.md
parent3c68f1eda2d0ad89e2c55560c25947615296168f (diff)
feat: App monitor signals
Diffstat (limited to 'docs/ags/faq.md')
-rw-r--r--docs/ags/faq.md43
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 })
+```
+
+:::