@@ -186,13 +186,17 @@ fn process_output_event(
186
186
. expect ( "SCTK: wl_output has invalid UserData" ) ;
187
187
let mut udata = udata_mutex. lock ( ) . unwrap ( ) ;
188
188
if let Event :: Done = event {
189
- let ( id, pending_events, mut callbacks) =
190
- if let OutputData :: Pending { id, events : ref mut v, callbacks : ref mut cb } = * udata {
189
+ let ( id, pending_events, mut callbacks) = match * udata {
190
+ OutputData :: Pending { id, events : ref mut v, callbacks : ref mut cb } => {
191
191
( id, std:: mem:: replace ( v, vec ! [ ] ) , std:: mem:: replace ( cb, vec ! [ ] ) )
192
- } else {
193
- // a Done event on an output that is already ready => nothing to do
192
+ }
193
+ OutputData :: Ready { ref mut info, ref mut callbacks } => {
194
+ // a Done event on an output that is already ready was due to a
195
+ // status change (which was already merged)
196
+ notify ( & output, info, ddata, callbacks) ;
194
197
return ;
195
- } ;
198
+ }
199
+ } ;
196
200
let mut info = OutputInfo :: new ( id) ;
197
201
for evt in pending_events {
198
202
merge_event ( & mut info, evt) ;
@@ -203,9 +207,8 @@ fn process_output_event(
203
207
} else {
204
208
match * udata {
205
209
OutputData :: Pending { events : ref mut v, .. } => v. push ( event) ,
206
- OutputData :: Ready { ref mut info, ref mut callbacks } => {
210
+ OutputData :: Ready { ref mut info, .. } => {
207
211
merge_event ( info, event) ;
208
- notify ( & output, info, ddata, callbacks) ;
209
212
}
210
213
}
211
214
}
0 commit comments