smithay_client_toolkit/session_lock/
dispatch.rs1use crate::{dispatch2::Dispatch2, globals::GlobalData};
2use std::sync::atomic::Ordering;
3use wayland_client::{Connection, QueueHandle};
4use wayland_protocols::ext::session_lock::v1::client::{
5 ext_session_lock_manager_v1, ext_session_lock_surface_v1, ext_session_lock_v1,
6};
7
8use super::{
9 SessionLock, SessionLockData, SessionLockHandler, SessionLockSurface,
10 SessionLockSurfaceConfigure, SessionLockSurfaceData,
11};
12
13impl<D> Dispatch2<ext_session_lock_manager_v1::ExtSessionLockManagerV1, D> for GlobalData {
14 fn event(
15 &self,
16 _state: &mut D,
17 _proxy: &ext_session_lock_manager_v1::ExtSessionLockManagerV1,
18 _event: ext_session_lock_manager_v1::Event,
19 _: &Connection,
20 _: &QueueHandle<D>,
21 ) {
22 unreachable!()
23 }
24}
25
26impl<D> Dispatch2<ext_session_lock_v1::ExtSessionLockV1, D> for SessionLockData
27where
28 D: SessionLockHandler,
29{
30 fn event(
31 &self,
32 state: &mut D,
33 proxy: &ext_session_lock_v1::ExtSessionLockV1,
34 event: ext_session_lock_v1::Event,
35 conn: &Connection,
36 qh: &QueueHandle<D>,
37 ) {
38 if let Some(session_lock) = SessionLock::from_ext_session_lock(proxy) {
39 match event {
40 ext_session_lock_v1::Event::Locked => {
41 session_lock.0.locked.store(true, Ordering::SeqCst);
42 state.locked(conn, qh, session_lock);
43 }
44 ext_session_lock_v1::Event::Finished => {
45 state.finished(conn, qh, session_lock);
46 }
47 _ => unreachable!(),
48 }
49 }
50 }
51}
52
53impl<D> Dispatch2<ext_session_lock_surface_v1::ExtSessionLockSurfaceV1, D>
54 for SessionLockSurfaceData
55where
56 D: SessionLockHandler,
57{
58 fn event(
59 &self,
60 state: &mut D,
61 proxy: &ext_session_lock_surface_v1::ExtSessionLockSurfaceV1,
62 event: ext_session_lock_surface_v1::Event,
63 conn: &Connection,
64 qh: &QueueHandle<D>,
65 ) {
66 if let Some(session_lock_surface) = SessionLockSurface::from_ext_session_lock_surface(proxy)
67 {
68 match event {
69 ext_session_lock_surface_v1::Event::Configure { serial, width, height } => {
70 proxy.ack_configure(serial);
71 state.configure(
72 conn,
73 qh,
74 session_lock_surface,
75 SessionLockSurfaceConfigure { new_size: (width, height) },
76 serial,
77 );
78 }
79 _ => unreachable!(),
80 }
81 }
82 }
83}