fn drain_events()

in src/platform_impl/linux/x11/mod.rs [390:419]


    fn drain_events<F>(&mut self, callback: &mut F, control_flow: &mut ControlFlow)
    where
        F: FnMut(Event<'_, T>, &RootELW<T>, &mut ControlFlow),
    {
        let target = &self.target;
        let mut xev = MaybeUninit::uninit();

        let wt = get_xtarget(&self.target);

        while unsafe { self.event_processor.poll_one_event(xev.as_mut_ptr()) } {
            let mut xev = unsafe { xev.assume_init() };
            self.event_processor.process_event(&mut xev, |event| {
                sticky_exit_callback(
                    event,
                    target,
                    control_flow,
                    &mut |event, window_target, control_flow| {
                        if let Event::RedrawRequested(crate::window::WindowId(
                            super::WindowId::X(wid),
                        )) = event
                        {
                            wt.pending_redraws.lock().unwrap().insert(wid);
                        } else {
                            callback(event, window_target, control_flow);
                        }
                    },
                );
            });
        }
    }