raiguard/odin-wayland
git clone https://git.raiguard.me/raiguard/odin-wayland
fd8ef50
trunk
1package testclient 2 3import "core:fmt" 4import "core:log" 5import wl "../mockgen" 6 7wl_display_error_handler :: proc ( e : wl . Display_Error , userdata : rawptr ) { 8log . 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 ) { 14log . info ( global_counter ^ , "globals!" ) 15global_counter ^ += 1 16 17switch e . interface { 18case wl . COMPOSITOR_INTERFACE_NAME : 19compositor : wl . Compositor_ID 20wl . 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 () { 27context . logger = log . create_console_logger ( allocator = context . allocator ) 28defer log . destroy_console_logger ( context . logger , context . allocator ) 29 30session := new ( wl . Session ) 31defer free ( session ) 32if ! wl . init ( session , context . allocator ) { 33panic ( "Failed to connect to Wayland." ) 34} 35defer wl . fini ( session ) 36log . info ( "Successfully connected to Wayland." ) 37 38wl . on_display_error ( session , wl_display_error_handler , nil ) 39wl . on_display_delete_id ( session , wl_display_delete_id_handler , nil ) 40 41global_counter : u32 42 43registry , _ := wl . display_get_registry ( session ) 44wl . on_event ( session , registry , wl_registry_global_handler , & global_counter ) 45wl . on_event ( session , registry , wl_registry_global_remove_handler , nil ) 46 47synced : bool 48sync_cb , _ := wl . display_sync ( session ) 49wl . on_event ( session , sync_cb , proc ( e : wl . Callback_Done , synced : ^ bool ) { synced ^ = true }, & synced ) 50 51for ! synced do wl . pump_events ( session ) 52 53log . info ( "Synced successfully, shutting down..." ) 54}