@@ -45,6 +45,11 @@ impl CornerRadiusState {
4545}
4646
4747pub trait CornerRadiusHandler {
48+ fn add_corners (
49+ & mut self ,
50+ toplevel : & XdgToplevel ,
51+ toplevel_obj : cosmic_corner_radius_toplevel_v1:: CosmicCornerRadiusToplevelV1 ,
52+ ) ;
4853 fn corner_radius_state ( & mut self ) -> & mut CornerRadiusState ;
4954 fn toplevel_from_resource ( & mut self , toplevel : & XdgToplevel ) -> Option < ToplevelSurface > ;
5055 fn set_corner_radius (
@@ -111,7 +116,8 @@ where
111116 toplevel : toplevel. downgrade ( ) ,
112117 corners : None ,
113118 } ) ;
114- let _ = data_init. init ( id, data) ;
119+ let obj = data_init. init ( id, data) ;
120+ state. add_corners ( & toplevel, obj) ;
115121 }
116122 _ => unimplemented ! ( ) ,
117123 }
@@ -151,12 +157,16 @@ where
151157 cosmic_corner_radius_toplevel_v1:: Request :: Destroy => {
152158 let mut guard = data. lock ( ) . unwrap ( ) ;
153159 guard. corners = None ;
154- if let Some ( surface) = guard
155- . toplevel
156- . upgrade ( )
157- . ok ( )
158- . and_then ( |toplevel| state. toplevel_from_resource ( & toplevel) )
159- {
160+
161+ let Ok ( toplevel) = guard. toplevel . upgrade ( ) else {
162+ resource. post_error (
163+ cosmic_corner_radius_toplevel_v1:: Error :: ToplevelDestroyed as u32 ,
164+ format ! ( "{:?} No toplevel found" , resource) ,
165+ ) ;
166+ return ;
167+ } ;
168+
169+ if let Some ( surface) = state. toplevel_from_resource ( & toplevel) {
160170 with_states ( surface. wl_surface ( ) , |s| {
161171 let mut cached = s. cached_state . get :: < CacheableCorners > ( ) ;
162172 let pending = cached. pending ( ) ;
@@ -175,12 +185,15 @@ where
175185 } => {
176186 let mut guard = data. lock ( ) . unwrap ( ) ;
177187 guard. set_corner_radius ( top_left, top_right, bottom_right, bottom_left) ;
178- if let Some ( surface) = guard
179- . toplevel
180- . upgrade ( )
181- . ok ( )
182- . and_then ( |toplevel| state. toplevel_from_resource ( & toplevel) )
183- {
188+ let Ok ( toplevel) = guard. toplevel . upgrade ( ) else {
189+ resource. post_error (
190+ cosmic_corner_radius_toplevel_v1:: Error :: ToplevelDestroyed as u32 ,
191+ format ! ( "{:?} No toplevel found" , resource) ,
192+ ) ;
193+ return ;
194+ } ;
195+
196+ if let Some ( surface) = state. toplevel_from_resource ( & toplevel) {
184197 with_states ( surface. wl_surface ( ) , |s| {
185198 let mut cached = s. cached_state . get :: < CacheableCorners > ( ) ;
186199 let pending = cached. pending ( ) ;
@@ -194,12 +207,15 @@ where
194207 cosmic_corner_radius_toplevel_v1:: Request :: UnsetRadius => {
195208 let mut guard = data. lock ( ) . unwrap ( ) ;
196209 guard. corners = None ;
197- if let Some ( surface) = guard
198- . toplevel
199- . upgrade ( )
200- . ok ( )
201- . and_then ( |toplevel| state. toplevel_from_resource ( & toplevel) )
202- {
210+ let Ok ( toplevel) = guard. toplevel . upgrade ( ) else {
211+ resource. post_error (
212+ cosmic_corner_radius_toplevel_v1:: Error :: ToplevelDestroyed as u32 ,
213+ format ! ( "{:?} No toplevel found" , resource) ,
214+ ) ;
215+ return ;
216+ } ;
217+
218+ if let Some ( surface) = state. toplevel_from_resource ( & toplevel) {
203219 with_states ( surface. wl_surface ( ) , |s| {
204220 let mut cached = s. cached_state . get :: < CacheableCorners > ( ) ;
205221 let pending = cached. pending ( ) ;
0 commit comments