mirror of
				https://codeberg.org/waydeer/layer-shika.git
				synced 2025-11-04 03:04:23 +00:00 
			
		
		
		
	fix: dispatch missed events
This commit is contained in:
		
							parent
							
								
									d80fe53834
								
							
						
					
					
						commit
						584656c07f
					
				
					 1 changed files with 11 additions and 9 deletions
				
			
		| 
						 | 
					@ -175,17 +175,18 @@ impl WindowingSystem {
 | 
				
			||||||
    pub fn run(&mut self) -> Result<()> {
 | 
					    pub fn run(&mut self) -> Result<()> {
 | 
				
			||||||
        info!("Starting WindowingSystem main loop");
 | 
					        info!("Starting WindowingSystem main loop");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.state.window().render_frame_if_dirty()?;
 | 
					        while self.event_queue.blocking_dispatch(&mut self.state)? > 0 {
 | 
				
			||||||
 | 
					            self.connection.flush()?;
 | 
				
			||||||
 | 
					            self.state.window().render_frame_if_dirty()?;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.setup_wayland_event_source()?;
 | 
					        self.setup_wayland_event_source()?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let connection = Rc::clone(&self.connection);
 | 
					 | 
				
			||||||
        let event_queue = &mut self.event_queue;
 | 
					        let event_queue = &mut self.event_queue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.event_loop
 | 
					        self.event_loop
 | 
				
			||||||
            .run(None, &mut self.state, move |shared_data| {
 | 
					            .run(None, &mut self.state, move |shared_data| {
 | 
				
			||||||
                if let Err(e) =
 | 
					                if let Err(e) = Self::process_events(event_queue, shared_data) {
 | 
				
			||||||
                    Self::process_events(&Rc::clone(&connection), event_queue, shared_data)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    error!("Error processing events: {}", e);
 | 
					                    error!("Error processing events: {}", e);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
| 
						 | 
					@ -201,7 +202,11 @@ impl WindowingSystem {
 | 
				
			||||||
            .handle()
 | 
					            .handle()
 | 
				
			||||||
            .insert_source(
 | 
					            .insert_source(
 | 
				
			||||||
                calloop::generic::Generic::new(connection, Interest::READ, Mode::Level),
 | 
					                calloop::generic::Generic::new(connection, Interest::READ, Mode::Level),
 | 
				
			||||||
                move |_, _connection, _shared_data| Ok(PostAction::Continue),
 | 
					                move |_, connection, _shared_data| {
 | 
				
			||||||
 | 
					                    connection.flush().unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Ok(PostAction::Continue)
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
            .map_err(|e| anyhow::anyhow!("Failed to set up Wayland event source: {}", e))?;
 | 
					            .map_err(|e| anyhow::anyhow!("Failed to set up Wayland event source: {}", e))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -209,12 +214,9 @@ impl WindowingSystem {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn process_events(
 | 
					    fn process_events(
 | 
				
			||||||
        connection: &Rc<Connection>,
 | 
					 | 
				
			||||||
        event_queue: &mut EventQueue<WindowState>,
 | 
					        event_queue: &mut EventQueue<WindowState>,
 | 
				
			||||||
        shared_data: &mut WindowState,
 | 
					        shared_data: &mut WindowState,
 | 
				
			||||||
    ) -> Result<()> {
 | 
					    ) -> Result<()> {
 | 
				
			||||||
        connection.flush()?;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if let Some(guard) = event_queue.prepare_read() {
 | 
					        if let Some(guard) = event_queue.prepare_read() {
 | 
				
			||||||
            guard
 | 
					            guard
 | 
				
			||||||
                .read()
 | 
					                .read()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue