Initializing an app
As described previously, once initialized, wayland-client
provides you with
a Connection
object, representing your wayland connection.
From this connection, we can then recover the WlDisplay
proxy, which represents the initial
wl_display
object, the starting point of your Wayland interactions.
We also need to create and EventQueue
, which will be needed to process the events from all our objects.
The skeleton of a Wayland app may thus look like this:
use wayland_client::Connection; fn main() { let connection = Connection::connect_to_env() .expect("Failed to find a Wayland socket."); // initialize your State struct let my_state = State::new(); let mut event_queue = connection.new_event_queue(); let display = connection.display(); /* * Proceed to initialize the rest of your app */ // And the main loop: // // This assumes that the `state` struct contains an `exit` boolean field, // that is set to true when the app decided it should exit. while !state.exit { event_queue .blocking_dispatch(&mut state) .expect("Wayland connection lost!"); } }
With that in place, we can now proceed to the last core concept of the protocol: the globals and the registry.