Upgrade backends to calloop 0.4 and renamed gl-traits
This commit is contained in:
parent
38ec44f70c
commit
505791e336
|
@ -10,8 +10,8 @@ repository = "https://github.com/Smithay/smithay"
|
||||||
members = [ "anvil" ]
|
members = [ "anvil" ]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
wayland-server = "0.21.1"
|
wayland-server = "0.21.4"
|
||||||
wayland-sys = "0.21.1"
|
wayland-sys = "0.21.3"
|
||||||
wayland-commons = "0.21.1"
|
wayland-commons = "0.21.1"
|
||||||
nix = "0.11"
|
nix = "0.11"
|
||||||
xkbcommon = "0.2.1"
|
xkbcommon = "0.2.1"
|
||||||
|
@ -28,7 +28,7 @@ input = { version = "0.4.0", optional = true }
|
||||||
udev = { version = "0.2.0", optional = true }
|
udev = { version = "0.2.0", optional = true }
|
||||||
dbus = { version = "0.6.1", optional = true }
|
dbus = { version = "0.6.1", optional = true }
|
||||||
systemd = { version = "^0.2.0", optional = true }
|
systemd = { version = "^0.2.0", optional = true }
|
||||||
wayland-protocols = { version = "0.21.1", features = ["unstable_protocols", "native_server"] }
|
wayland-protocols = { version = "0.21.3", features = ["unstable_protocols", "native_server"] }
|
||||||
image = "0.17.0"
|
image = "0.17.0"
|
||||||
error-chain = "0.11.0"
|
error-chain = "0.11.0"
|
||||||
lazy_static = "1.0.0"
|
lazy_static = "1.0.0"
|
||||||
|
|
|
@ -7,25 +7,22 @@ use input as libinput;
|
||||||
use input::event;
|
use input::event;
|
||||||
|
|
||||||
use std::{
|
use std::{
|
||||||
cell::RefCell,
|
|
||||||
collections::hash_map::{DefaultHasher, Entry, HashMap},
|
collections::hash_map::{DefaultHasher, Entry, HashMap},
|
||||||
hash::{Hash, Hasher},
|
hash::{Hash, Hasher},
|
||||||
io::Error as IoError,
|
io::Error as IoError,
|
||||||
os::unix::io::RawFd,
|
os::unix::io::{AsRawFd, RawFd},
|
||||||
path::Path,
|
|
||||||
rc::Rc,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use wayland_server::calloop::{
|
use wayland_server::calloop::{
|
||||||
generic::{EventedRawFd, Generic},
|
generic::{EventedFd, Generic},
|
||||||
mio::Ready,
|
mio::Ready,
|
||||||
LoopHandle, Source,
|
LoopHandle, Source, InsertError,
|
||||||
};
|
};
|
||||||
|
|
||||||
// No idea if this is the same across unix platforms
|
// No idea if this is the same across unix platforms
|
||||||
// Lets make this linux exclusive for now, once someone tries to build it for
|
// Lets make this linux exclusive for now, once someone tries to build it for
|
||||||
// any BSD-like system, they can verify if this is right and make a PR to change this.
|
// any BSD-like system, they can verify if this is right and make a PR to change this.
|
||||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
#[cfg(all(any(target_os = "linux", target_os = "android"), feature = "backend_session"))]
|
||||||
const INPUT_MAJOR: u32 = 13;
|
const INPUT_MAJOR: u32 = 13;
|
||||||
|
|
||||||
/// Libinput based `InputBackend`.
|
/// Libinput based `InputBackend`.
|
||||||
|
@ -590,6 +587,12 @@ impl<S: Session> libinput::LibinputInterface for LibinputSessionInterface<S> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl AsRawFd for LibinputInputBackend {
|
||||||
|
fn as_raw_fd(&self) -> RawFd {
|
||||||
|
unsafe { self.context.fd() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Binds a `LibinputInputBackend` to a given `EventLoop`.
|
/// Binds a `LibinputInputBackend` to a given `EventLoop`.
|
||||||
///
|
///
|
||||||
/// Automatically feeds the backend with incoming events without any manual calls to
|
/// Automatically feeds the backend with incoming events without any manual calls to
|
||||||
|
@ -597,22 +600,16 @@ impl<S: Session> libinput::LibinputInterface for LibinputSessionInterface<S> {
|
||||||
pub fn libinput_bind<Data: 'static>(
|
pub fn libinput_bind<Data: 'static>(
|
||||||
backend: LibinputInputBackend,
|
backend: LibinputInputBackend,
|
||||||
handle: LoopHandle<Data>,
|
handle: LoopHandle<Data>,
|
||||||
) -> ::std::result::Result<Source<Generic<EventedRawFd>>, (IoError, LibinputInputBackend)> {
|
) -> ::std::result::Result<Source<Generic<EventedFd<LibinputInputBackend>>>, InsertError<Generic<EventedFd<LibinputInputBackend>>>> {
|
||||||
let mut source = Generic::from_raw_fd(unsafe { backend.context.fd() });
|
let mut source = Generic::from_fd_source(backend);
|
||||||
source.set_interest(Ready::readable());
|
source.set_interest(Ready::readable());
|
||||||
let backend = Rc::new(RefCell::new(backend));
|
|
||||||
let fail_backend = backend.clone();
|
handle.insert_source(source, move |evt, _| {
|
||||||
handle
|
|
||||||
.insert_source(source, move |_, _| {
|
|
||||||
use backend::input::InputBackend;
|
use backend::input::InputBackend;
|
||||||
if let Err(error) = backend.borrow_mut().dispatch_new_events() {
|
|
||||||
warn!(backend.borrow().logger, "Libinput errored: {}", error);
|
let mut backend = evt.source.borrow_mut();
|
||||||
|
if let Err(error) = backend.0.dispatch_new_events() {
|
||||||
|
warn!(backend.0.logger, "Libinput errored: {}", error);
|
||||||
}
|
}
|
||||||
}).map_err(move |e| {
|
|
||||||
// the backend in the closure should already have been dropped
|
|
||||||
let backend = Rc::try_unwrap(fail_backend)
|
|
||||||
.unwrap_or_else(|_| unreachable!())
|
|
||||||
.into_inner();
|
|
||||||
(e.into(), backend)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
|
|
||||||
use backend::{
|
use backend::{
|
||||||
graphics::{
|
graphics::{
|
||||||
|
gl::{GLGraphicsBackend, PixelFormat},
|
||||||
|
CursorBackend,
|
||||||
|
SwapBuffersError,
|
||||||
|
},
|
||||||
egl::{
|
egl::{
|
||||||
context::GlAttributes,
|
context::GlAttributes,
|
||||||
error as egl_error,
|
error as egl_error,
|
||||||
error::Result as EGLResult,
|
error::Result as EGLResult,
|
||||||
native,
|
native,
|
||||||
wayland::{EGLDisplay, EGLWaylandExtensions},
|
EGLDisplay, EGLContext, EGLGraphicsBackend, EGLSurface,
|
||||||
EGLContext, EGLGraphicsBackend, EGLSurface, PixelFormat, SwapBuffersError,
|
|
||||||
},
|
|
||||||
GraphicsBackend,
|
|
||||||
},
|
},
|
||||||
input::{
|
input::{
|
||||||
Axis, AxisSource, Event as BackendEvent, InputBackend, InputHandler, KeyState, KeyboardKeyEvent,
|
Axis, AxisSource, Event as BackendEvent, InputBackend, InputHandler, KeyState, KeyboardKeyEvent,
|
||||||
|
@ -156,12 +157,12 @@ where
|
||||||
let reqs = Default::default();
|
let reqs = Default::default();
|
||||||
let window = Rc::new(
|
let window = Rc::new(
|
||||||
if native::NativeDisplay::<native::Wayland>::is_backend(&winit_window) {
|
if native::NativeDisplay::<native::Wayland>::is_backend(&winit_window) {
|
||||||
let context =
|
let mut context =
|
||||||
EGLContext::<native::Wayland, WinitWindow>::new(winit_window, attributes, reqs, log.clone())?;
|
EGLContext::<native::Wayland, WinitWindow>::new(winit_window, attributes, reqs, log.clone())?;
|
||||||
let surface = context.create_surface(())?;
|
let surface = context.create_surface(())?;
|
||||||
Window::Wayland { context, surface }
|
Window::Wayland { context, surface }
|
||||||
} else if native::NativeDisplay::<native::X11>::is_backend(&winit_window) {
|
} else if native::NativeDisplay::<native::X11>::is_backend(&winit_window) {
|
||||||
let context =
|
let mut context =
|
||||||
EGLContext::<native::X11, WinitWindow>::new(winit_window, attributes, reqs, log.clone())?;
|
EGLContext::<native::X11, WinitWindow>::new(winit_window, attributes, reqs, log.clone())?;
|
||||||
let surface = context.create_surface(())?;
|
let surface = context.create_surface(())?;
|
||||||
Window::X11 { context, surface }
|
Window::X11 { context, surface }
|
||||||
|
@ -226,8 +227,8 @@ impl WinitGraphicsBackend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GraphicsBackend for WinitGraphicsBackend {
|
impl<'a> CursorBackend<'a> for WinitGraphicsBackend {
|
||||||
type CursorFormat = MouseCursor;
|
type CursorFormat = &'a MouseCursor;
|
||||||
type Error = ();
|
type Error = ();
|
||||||
|
|
||||||
fn set_cursor_position(&self, x: u32, y: u32) -> ::std::result::Result<(), ()> {
|
fn set_cursor_position(&self, x: u32, y: u32) -> ::std::result::Result<(), ()> {
|
||||||
|
@ -240,11 +241,13 @@ impl GraphicsBackend for WinitGraphicsBackend {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_cursor_representation(
|
fn set_cursor_representation<'b>(
|
||||||
&self,
|
&'b self,
|
||||||
cursor: &Self::CursorFormat,
|
cursor: Self::CursorFormat,
|
||||||
_hotspot: (u32, u32),
|
_hotspot: (u32, u32),
|
||||||
) -> ::std::result::Result<(), ()> {
|
) -> ::std::result::Result<(), ()>
|
||||||
|
where 'a: 'b
|
||||||
|
{
|
||||||
// Cannot log this one, as `CursorFormat` is not `Debug` and should not be
|
// Cannot log this one, as `CursorFormat` is not `Debug` and should not be
|
||||||
debug!(self.logger, "Changing cursor representation");
|
debug!(self.logger, "Changing cursor representation");
|
||||||
self.window.window().set_cursor(*cursor);
|
self.window.window().set_cursor(*cursor);
|
||||||
|
@ -252,7 +255,7 @@ impl GraphicsBackend for WinitGraphicsBackend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EGLGraphicsBackend for WinitGraphicsBackend {
|
impl GLGraphicsBackend for WinitGraphicsBackend {
|
||||||
fn swap_buffers(&self) -> ::std::result::Result<(), SwapBuffersError> {
|
fn swap_buffers(&self) -> ::std::result::Result<(), SwapBuffersError> {
|
||||||
trace!(self.logger, "Swapping buffers");
|
trace!(self.logger, "Swapping buffers");
|
||||||
match *self.window {
|
match *self.window {
|
||||||
|
@ -303,7 +306,7 @@ impl EGLGraphicsBackend for WinitGraphicsBackend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl EGLWaylandExtensions for WinitGraphicsBackend {
|
impl EGLGraphicsBackend for WinitGraphicsBackend {
|
||||||
fn bind_wl_display(&self, display: &Display) -> EGLResult<EGLDisplay> {
|
fn bind_wl_display(&self, display: &Display) -> EGLResult<EGLDisplay> {
|
||||||
match *self.window {
|
match *self.window {
|
||||||
Window::Wayland { ref context, .. } => context.bind_wl_display(display),
|
Window::Wayland { ref context, .. } => context.bind_wl_display(display),
|
||||||
|
|
Loading…
Reference in New Issue