diff --git a/src/main.cpp b/src/main.cpp index 858efc1..46dc79e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -167,7 +167,48 @@ int main (int argc, char *argv[]) { } spdlog::info("Found {} output(s)", application_state->outputs.size()); + + spdlog::info("Found {} output(s)", application_state->outputs.size()); + +// Request lock session + spdlog::info("Requesting session lock..."); + application_state->session_lock = ext_session_lock_manager_v1_lock(application_state->lock_manager); + ext_session_lock_v1_add_listener(application_state->session_lock, &lock_listener, application_state.get()); + +// Create lock surface for each output + for (auto& output : application_state->outputs) { + // Create Wayland surface + output->wl_out_surface= wl_compositor_create_surface(application_state->compostier); + // Get lock surface for this output + output->lock_surface = ext_session_lock_v1_get_lock_surface( + application_state->session_lock, + output->wl_out_surface, + output->output + ); + + // Add listener for configure events + ext_session_lock_surface_v1_add_listener( + output->lock_surface, + &lock_surface_listener, + output.get() + ); + + // Commit to trigger configure + wl_surface_commit(output->wl_out_surface); + + spdlog::debug("Created lock surface for output {}", output->registry_id); + } + + // Flush and wait for configure/locked events + wl_display_flush(application_state->display); + wl_display_roundtrip(application_state->display); + + if (!application_state->locked) { + throw std::runtime_error("Failed to acquire lock"); + } + + spdlog::info("✅ Lock acquired successfully!"); return 0; }