From 3d722b15a21977931a0bfa99bd8c6a235682a6d9 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Sat, 11 Apr 2026 19:43:29 +0200 Subject: start implementing wm --- src/Waylean.lean | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'src/Waylean.lean') diff --git a/src/Waylean.lean b/src/Waylean.lean index 47f9db9..8402351 100644 --- a/src/Waylean.lean +++ b/src/Waylean.lean @@ -1,23 +1,50 @@ import Wayland import Waylean.Registry +import Std.Data.HashMap open Wayland Protocols Waylean +structure Output where + removed : Bool + structure State where registry : Registry.State := .new + outputs : Std.HashMap RiverOutputV1 Output := { } + +structure Context where + wm : RiverWindowManagerV1 + xkbBindings : RiverXkbBindingsV1 + +abbrev WindowManagerM (σ : Type) := ReaderT Context (DisplayM σ) def zoomRegistry {α : Type} : DisplayM Registry.State α → DisplayM State α := DisplayM.zoom (mk_lens registry) +def handle (ctx : Context) : RiverWindowManagerV1.Event → DisplayM State Unit + | .unavailable => do + DisplayM.liftIO <| IO.println "Another window manager is already running" + DisplayM.requestQuit + | .finished => do + DisplayM.requestQuit + | .manageStart => do + let (removedOutputs, aliveOutputs) := (← get).outputs.partition (Function.const _ Output.removed) + pure () + | .renderStart => pure () + | .sessionLocked => pure () + | .sessionUnlocked => pure () + | .window win => pure () + | .output out => pure () + | .seat seat => pure () + def launch : DisplayM State Unit := do _ ← DisplayM.registerSignal .SIGINT do - DisplayM.liftIO (IO.println "Received SIGINT") + DisplayM.liftIO <| IO.println "Received SIGINT" DisplayM.requestQuit - zoomRegistry Registry.init DisplayM.sync do - let shm : WlShm ← zoomRegistry Registry.bindSingleton - shm.release + let wm : RiverWindowManagerV1 ← zoomRegistry Registry.bindSingleton + let xkbBindings : RiverXkbBindingsV1 ← zoomRegistry Registry.bindSingleton + wm.listen (handle { wm, xkbBindings }) def main : IO Unit := DisplayM.run launch { } -- cgit v1.3.1