raiguard/odin-wayland

git clone https://git.raiguard.me/raiguard/odin-wayland

Caleb HeuerMove generated -> mockgenfd8ef50

trunk
1.6 KiB54 linesraw
1package testclient
2
3import "core:fmt"
4import "core:log"
5import wl "../mockgen"
6
7wl_display_error_handler :: proc(e: wl.Display_Error, userdata: rawptr) {
8	log.error(e)
9}
10
11wl_display_delete_id_handler :: proc(e: wl.Display_Delete_ID, userdata: rawptr) {}
12
13wl_registry_global_handler :: proc(e: wl.Registry_Global, global_counter: ^u32) {
14	log.info(global_counter^, "globals!")
15	global_counter^ += 1
16
17	switch e.interface {
18	case wl.COMPOSITOR_INTERFACE_NAME:
19		compositor: wl.Compositor_ID
20		wl.registry_bind(e.session, e.registry, e.name, e.interface, e.version, &compositor)
21	}
22}
23
24wl_registry_global_remove_handler :: proc(e: wl.Registry_Global_Remove, userdata: rawptr) {}
25
26main :: proc() {
27	context.logger = log.create_console_logger(allocator=context.allocator)
28	defer log.destroy_console_logger(context.logger, context.allocator)
29
30	session := new(wl.Session)
31	defer free(session)
32	if !wl.init(session, context.allocator) {
33		panic("Failed to connect to Wayland.")
34	}
35	defer wl.fini(session)
36	log.info("Successfully connected to Wayland.")
37
38	wl.on_display_error(session, wl_display_error_handler, nil)
39	wl.on_display_delete_id(session, wl_display_delete_id_handler, nil)
40
41	global_counter: u32
42
43	registry, _ := wl.display_get_registry(session)
44	wl.on_event(session, registry, wl_registry_global_handler, &global_counter)
45	wl.on_event(session, registry, wl_registry_global_remove_handler, nil)
46
47	synced: bool
48	sync_cb, _ := wl.display_sync(session)
49	wl.on_event(session, sync_cb, proc(e: wl.Callback_Done, synced: ^bool) { synced^ = true }, &synced)
50
51	for !synced do wl.pump_events(session)
52
53	log.info("Synced successfully, shutting down...")
54}