Remove unnecessary mutexes
This commit is contained in:
parent
cd27436470
commit
606efebe1b
|
@ -49,8 +49,8 @@ use std::cell::RefCell;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::io::Error as IoError;
|
use std::io::Error as IoError;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
use std::sync::Arc;
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::{Arc, Mutex};
|
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use xkbcommon::xkb::keysyms as xkb;
|
use xkbcommon::xkb::keysyms as xkb;
|
||||||
use wayland_server::{StateToken, StateProxy};
|
use wayland_server::{StateToken, StateProxy};
|
||||||
|
@ -61,7 +61,7 @@ struct LibinputInputHandler {
|
||||||
pointer: PointerHandle,
|
pointer: PointerHandle,
|
||||||
keyboard: KeyboardHandle,
|
keyboard: KeyboardHandle,
|
||||||
window_map: Rc<RefCell<MyWindowMap>>,
|
window_map: Rc<RefCell<MyWindowMap>>,
|
||||||
pointer_location: Arc<Mutex<(f64, f64)>>,
|
pointer_location: Rc<RefCell<(f64, f64)>>,
|
||||||
screen_size: (u32, u32),
|
screen_size: (u32, u32),
|
||||||
serial: u32,
|
serial: u32,
|
||||||
running: Arc<AtomicBool>,
|
running: Arc<AtomicBool>,
|
||||||
|
@ -102,7 +102,7 @@ impl InputHandler<LibinputInputBackend> for LibinputInputHandler {
|
||||||
fn on_pointer_move(&mut self, _: &input::Seat, evt: event::pointer::PointerMotionEvent) {
|
fn on_pointer_move(&mut self, _: &input::Seat, evt: event::pointer::PointerMotionEvent) {
|
||||||
let (x, y) = (evt.dx(), evt.dy());
|
let (x, y) = (evt.dx(), evt.dy());
|
||||||
let serial = self.next_serial();
|
let serial = self.next_serial();
|
||||||
let mut location = self.pointer_location.lock().unwrap();
|
let mut location = self.pointer_location.borrow_mut();
|
||||||
location.0 += x;
|
location.0 += x;
|
||||||
location.1 += y;
|
location.1 += y;
|
||||||
let under = self.window_map.borrow().get_surface_under((location.0, location.1));
|
let under = self.window_map.borrow().get_surface_under((location.0, location.1));
|
||||||
|
@ -114,7 +114,7 @@ impl InputHandler<LibinputInputBackend> for LibinputInputHandler {
|
||||||
}
|
}
|
||||||
fn on_pointer_move_absolute(&mut self, _: &input::Seat, evt: event::pointer::PointerMotionAbsoluteEvent) {
|
fn on_pointer_move_absolute(&mut self, _: &input::Seat, evt: event::pointer::PointerMotionAbsoluteEvent) {
|
||||||
let (x, y) = (evt.absolute_x_transformed(self.screen_size.0), evt.absolute_y_transformed(self.screen_size.1));
|
let (x, y) = (evt.absolute_x_transformed(self.screen_size.0), evt.absolute_y_transformed(self.screen_size.1));
|
||||||
*self.pointer_location.lock().unwrap() = (x, y);
|
*self.pointer_location.borrow_mut() = (x, y);
|
||||||
let serial = self.next_serial();
|
let serial = self.next_serial();
|
||||||
let under = self.window_map.borrow().get_surface_under((x, y));
|
let under = self.window_map.borrow().get_surface_under((x, y));
|
||||||
self.pointer.motion(
|
self.pointer.motion(
|
||||||
|
@ -131,7 +131,7 @@ impl InputHandler<LibinputInputBackend> for LibinputInputHandler {
|
||||||
// change the keyboard focus
|
// change the keyboard focus
|
||||||
let under = self.window_map
|
let under = self.window_map
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.get_surface_and_bring_to_top(*self.pointer_location.lock().unwrap());
|
.get_surface_and_bring_to_top(*self.pointer_location.borrow());
|
||||||
self.keyboard
|
self.keyboard
|
||||||
.set_focus(under.as_ref().map(|&(ref s, _)| s), serial);
|
.set_focus(under.as_ref().map(|&(ref s, _)| s), serial);
|
||||||
wl_pointer::ButtonState::Pressed
|
wl_pointer::ButtonState::Pressed
|
||||||
|
@ -188,7 +188,7 @@ fn main() {
|
||||||
* Initialize session on the current tty
|
* Initialize session on the current tty
|
||||||
*/
|
*/
|
||||||
let (session, mut notifier) = DirectSession::new(None, log.clone()).unwrap();
|
let (session, mut notifier) = DirectSession::new(None, log.clone()).unwrap();
|
||||||
let session = Arc::new(Mutex::new(session));
|
let session = Rc::new(RefCell::new(session));
|
||||||
|
|
||||||
let running = Arc::new(AtomicBool::new(true));
|
let running = Arc::new(AtomicBool::new(true));
|
||||||
let r = running.clone();
|
let r = running.clone();
|
||||||
|
@ -196,7 +196,7 @@ fn main() {
|
||||||
r.store(false, Ordering::SeqCst);
|
r.store(false, Ordering::SeqCst);
|
||||||
}).expect("Error setting Ctrl-C handler");
|
}).expect("Error setting Ctrl-C handler");
|
||||||
|
|
||||||
let pointer_location = Arc::new(Mutex::new((0.0, 0.0)));
|
let pointer_location = Rc::new(RefCell::new((0.0, 0.0)));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the udev backend
|
* Initialize the udev backend
|
||||||
|
@ -264,9 +264,9 @@ fn main() {
|
||||||
* Initialize libinput backend
|
* Initialize libinput backend
|
||||||
*/
|
*/
|
||||||
let seat = session.seat();
|
let seat = session.seat();
|
||||||
let mut libinput_context = Libinput::new_from_udev::<LibinputSessionInterface<Arc<Mutex<DirectSession>>>>(session.into(), &context);
|
let mut libinput_context = Libinput::new_from_udev::<LibinputSessionInterface<Rc<RefCell<DirectSession>>>>(session.into(), &context);
|
||||||
let libinput_session_id = notifier.register(libinput_context.clone());
|
let libinput_session_id = notifier.register(libinput_context.clone());
|
||||||
libinput_context.udev_assign_seat(&seat);
|
libinput_context.udev_assign_seat(&seat).unwrap();
|
||||||
let mut libinput_backend = LibinputInputBackend::new(libinput_context, log.clone());
|
let mut libinput_backend = LibinputInputBackend::new(libinput_context, log.clone());
|
||||||
libinput_backend.set_handler(LibinputInputHandler {
|
libinput_backend.set_handler(LibinputInputHandler {
|
||||||
log: log.clone(),
|
log: log.clone(),
|
||||||
|
@ -312,7 +312,7 @@ struct UdevHandlerImpl {
|
||||||
shell_state_token: StateToken<ShellState<SurfaceData, Roles, (), ()>>,
|
shell_state_token: StateToken<ShellState<SurfaceData, Roles, (), ()>>,
|
||||||
compositor_token: CompositorToken<SurfaceData, Roles, ()>,
|
compositor_token: CompositorToken<SurfaceData, Roles, ()>,
|
||||||
window_map: Rc<RefCell<MyWindowMap>>,
|
window_map: Rc<RefCell<MyWindowMap>>,
|
||||||
pointer_location: Arc<Mutex<(f64, f64)>>,
|
pointer_location: Rc<RefCell<(f64, f64)>>,
|
||||||
pointer_image: ImageBuffer<Rgba<u8>, Vec<u8>>,
|
pointer_image: ImageBuffer<Rgba<u8>, Vec<u8>>,
|
||||||
logger: ::slog::Logger,
|
logger: ::slog::Logger,
|
||||||
}
|
}
|
||||||
|
@ -410,7 +410,7 @@ pub struct DrmHandlerImpl {
|
||||||
shell_state_token: StateToken<ShellState<SurfaceData, Roles, (), ()>>,
|
shell_state_token: StateToken<ShellState<SurfaceData, Roles, (), ()>>,
|
||||||
compositor_token: CompositorToken<SurfaceData, Roles, ()>,
|
compositor_token: CompositorToken<SurfaceData, Roles, ()>,
|
||||||
window_map: Rc<RefCell<MyWindowMap>>,
|
window_map: Rc<RefCell<MyWindowMap>>,
|
||||||
pointer_location: Arc<Mutex<(f64, f64)>>,
|
pointer_location: Rc<RefCell<(f64, f64)>>,
|
||||||
logger: ::slog::Logger,
|
logger: ::slog::Logger,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ impl DrmHandler<GliumDrawer<DrmBackend>> for DrmHandlerImpl {
|
||||||
let state = state.into();
|
let state = state.into();
|
||||||
let drawer = state.get(backend);
|
let drawer = state.get(backend);
|
||||||
{
|
{
|
||||||
let (x, y) = *self.pointer_location.lock().unwrap();
|
let (x, y) = *self.pointer_location.borrow();
|
||||||
let _ = (**drawer).set_cursor_position(x.trunc().abs() as u32, y.trunc().abs() as u32);
|
let _ = (**drawer).set_cursor_position(x.trunc().abs() as u32, y.trunc().abs() as u32);
|
||||||
}
|
}
|
||||||
let mut frame = drawer.draw();
|
let mut frame = drawer.draw();
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
use std::rc::Rc;
|
||||||
|
use std::cell::RefCell;
|
||||||
use std::os::unix::io::RawFd;
|
use std::os::unix::io::RawFd;
|
||||||
use nix::fcntl::OFlag;
|
use nix::fcntl::OFlag;
|
||||||
use wayland_server::StateProxy;
|
use wayland_server::StateProxy;
|
||||||
|
@ -41,6 +43,30 @@ impl Session for () {
|
||||||
fn seat(&self) -> String { String::from("seat0") }
|
fn seat(&self) -> String { String::from("seat0") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<S: Session> Session for Rc<RefCell<S>> {
|
||||||
|
type Error = S::Error;
|
||||||
|
|
||||||
|
fn open(&mut self, path: &Path, flags: OFlag) -> Result<RawFd, Self::Error> {
|
||||||
|
self.borrow_mut().open(path, flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn close(&mut self, fd: RawFd) -> Result<(), Self::Error> {
|
||||||
|
self.borrow_mut().close(fd)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn change_vt(&mut self, vt: i32) -> Result<(), Self::Error> {
|
||||||
|
self.borrow_mut().change_vt(vt)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_active(&self) -> bool {
|
||||||
|
self.borrow().is_active()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn seat(&self) -> String {
|
||||||
|
self.borrow().seat()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<S: Session> Session for Arc<Mutex<S>> {
|
impl<S: Session> Session for Arc<Mutex<S>> {
|
||||||
type Error = S::Error;
|
type Error = S::Error;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue