@@ -2,21 +2,45 @@ open Wlroots
22
33type view
44
5- type st = {
5+ type tinywl_output = {
6+ output : Output .t ;
7+
8+ frame : Wl.Listener .t ;
9+ }
10+
11+ type tinywl_server = {
612 display : Wl.Display .t ;
713 backend : Backend .t ;
814 renderer : Renderer .t ;
9- output_layout : Output.Layout .t ;
10- mutable outputs : Output .t list ;
15+ output_layout : Output_layout .t ;
16+ mutable outputs : tinywl_output list ;
1117 mutable views : view list ;
1218 mutable keyboards : Keyboard .t list ;
1319
1420 new_output : Wl.Listener .t ;
1521}
1622
17- let server_new_output _st _ _ =
23+ let output_frame _st _ _ =
1824 failwith " todo"
1925
26+ let server_new_output st _ output =
27+ let output_ok =
28+ match Output. preferred_mode output with
29+ | Some mode ->
30+ Output. set_mode output mode;
31+ Output. enable output true ;
32+ Output. commit output
33+ | None -> true
34+ in
35+ if output_ok then begin
36+ let o = { output; frame = Wl.Listener. create () } in
37+ Wl.Signal. add (Output. signal_frame output) o.frame (output_frame st);
38+ st.outputs < - o :: st.outputs;
39+
40+ Output_layout. add_auto st.output_layout output;
41+ Output. create_global output;
42+ end
43+
2044let server_new_xdg_surface _st _ _ =
2145 failwith " todo"
2246
@@ -60,7 +84,7 @@ let () =
6084 let _compositor = Compositor. create display renderer in
6185 let _data_manager = Data_device.Manager. create display in
6286
63- let output_layout = Output.Layout . create () in
87+ let output_layout = Output_layout . create () in
6488
6589 let xdg_shell = Xdg_shell. create display in
6690
0 commit comments