Fix X11 memory leak and remove mio-misc (#1987)

* Fix X11 memory leak and remove mio-misc

I also fixed a couple of clippy lints.
Fixes #1984

* Send the redraw event before waking up the main event

* Use .map instead of a match, and remove comments saved by git

* Remove unnecessary pub keywords on `WakeSender` in x11/mod.rs
This commit is contained in:
Davester47 2021-08-24 03:38:56 -07:00 committed by GitHub
parent 125ee0b446
commit 9e72396709
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 38 deletions

View file

@ -11,7 +11,6 @@ use std::{
use x11_dl::xlib::TrueColor;
use libc;
use mio_misc::channel::Sender;
use parking_lot::Mutex;
use crate::{
@ -26,7 +25,9 @@ use crate::{
window::{CursorIcon, Fullscreen, Icon, UserAttentionType, WindowAttributes},
};
use super::{ffi, util, EventLoopWindowTarget, ImeSender, WindowId, XConnection, XError};
use super::{
ffi, util, EventLoopWindowTarget, ImeSender, WakeSender, WindowId, XConnection, XError,
};
#[derive(Debug)]
pub struct SharedState {
@ -104,7 +105,7 @@ pub struct UnownedWindow {
cursor_visible: Mutex<bool>,
ime_sender: Mutex<ImeSender>,
pub shared_state: Mutex<SharedState>,
redraw_sender: Sender<WindowId>,
redraw_sender: WakeSender<WindowId>,
}
impl UnownedWindow {
@ -274,7 +275,10 @@ impl UnownedWindow {
cursor_visible: Mutex::new(true),
ime_sender: Mutex::new(event_loop.ime_sender.clone()),
shared_state: SharedState::new(guessed_monitor, window_attrs.visible),
redraw_sender: event_loop.redraw_sender.clone(),
redraw_sender: WakeSender {
waker: event_loop.redraw_sender.waker.clone(),
sender: event_loop.redraw_sender.sender.clone(),
},
};
// Title must be set before mapping. Some tiling window managers (i.e. i3) use the window
@ -1102,7 +1106,7 @@ impl UnownedWindow {
fn update_normal_hints<F>(&self, callback: F) -> Result<(), XError>
where
F: FnOnce(&mut util::NormalHints<'_>) -> (),
F: FnOnce(&mut util::NormalHints<'_>),
{
let mut normal_hints = self.xconn.get_normal_hints(self.xwindow)?;
callback(&mut normal_hints);
@ -1183,7 +1187,7 @@ impl UnownedWindow {
)
} else {
let window_size = Some(Size::from(self.inner_size()));
(window_size.clone(), window_size)
(window_size, window_size)
};
self.set_maximizable_inner(resizable).queue();
@ -1445,7 +1449,11 @@ impl UnownedWindow {
#[inline]
pub fn request_redraw(&self) {
self.redraw_sender.send(WindowId(self.xwindow)).unwrap();
self.redraw_sender
.sender
.send(WindowId(self.xwindow))
.unwrap();
self.redraw_sender.waker.wake().unwrap();
}
#[inline]