wayland.shell.xdg: make names more explicit

This commit is contained in:
Victor Berger 2018-04-22 19:58:10 +02:00
parent 4579f20fae
commit 12e13f863b
5 changed files with 123 additions and 129 deletions

View File

@ -4,8 +4,8 @@ use rand;
use smithay::backend::graphics::egl::wayland::{BufferAccessError, Format}; use smithay::backend::graphics::egl::wayland::{BufferAccessError, Format};
use smithay::backend::graphics::egl::wayland::{EGLDisplay, EGLImages}; use smithay::backend::graphics::egl::wayland::{EGLDisplay, EGLImages};
use smithay::wayland::compositor::{compositor_init, CompositorToken, SurfaceAttributes, SurfaceEvent}; use smithay::wayland::compositor::{compositor_init, CompositorToken, SurfaceAttributes, SurfaceEvent};
use smithay::wayland::shell::xdg::{xdg_shell_init, PopupConfigure, ShellEvent, ShellState, ShellSurfaceRole, use smithay::wayland::shell::xdg::{xdg_shell_init, PopupConfigure, ShellState, ToplevelConfigure,
ToplevelConfigure}; XdgRequest, XdgSurfaceRole};
use smithay::wayland::shm::with_buffer_contents as shm_buffer_contents; use smithay::wayland::shm::with_buffer_contents as shm_buffer_contents;
use std::cell::RefCell; use std::cell::RefCell;
use std::rc::Rc; use std::rc::Rc;
@ -13,7 +13,7 @@ use std::sync::{Arc, Mutex};
use wayland_server::{Display, LoopToken, Resource}; use wayland_server::{Display, LoopToken, Resource};
use wayland_server::protocol::{wl_buffer, wl_callback, wl_surface}; use wayland_server::protocol::{wl_buffer, wl_callback, wl_surface};
define_roles!(Roles => [ ShellSurface, ShellSurfaceRole ] ); define_roles!(Roles => [ ShellSurface, XdgSurfaceRole ] );
#[derive(Default)] #[derive(Default)]
pub struct SurfaceData { pub struct SurfaceData {
@ -137,7 +137,7 @@ pub fn init_shell(
looptoken, looptoken,
compositor_token.clone(), compositor_token.clone(),
move |shell_event, ()| match shell_event { move |shell_event, ()| match shell_event {
ShellEvent::NewToplevel { surface } => { XdgRequest::NewToplevel { surface } => {
// place the window at a random location in the [0;300]x[0;300] square // place the window at a random location in the [0;300]x[0;300] square
use rand::distributions::{IndependentSample, Range}; use rand::distributions::{IndependentSample, Range};
let range = Range::new(0, 300); let range = Range::new(0, 300);
@ -151,7 +151,7 @@ pub fn init_shell(
}); });
shell_window_map.borrow_mut().insert(surface, (x, y)); shell_window_map.borrow_mut().insert(surface, (x, y));
} }
ShellEvent::NewPopup { surface } => surface.send_configure(PopupConfigure { XdgRequest::NewPopup { surface } => surface.send_configure(PopupConfigure {
size: (10, 10), size: (10, 10),
position: (10, 10), position: (10, 10),
serial: 42, serial: 42,

View File

@ -1,7 +1,7 @@
use smithay::utils::Rectangle; use smithay::utils::Rectangle;
use smithay::wayland::compositor::{CompositorToken, SubsurfaceRole, SurfaceAttributes, TraversalAction}; use smithay::wayland::compositor::{CompositorToken, SubsurfaceRole, SurfaceAttributes, TraversalAction};
use smithay::wayland::compositor::roles::Role; use smithay::wayland::compositor::roles::Role;
use smithay::wayland::shell::xdg::{ShellSurfaceRole, ToplevelSurface}; use smithay::wayland::shell::xdg::{ToplevelSurface, XdgSurfaceRole};
use wayland_server::Resource; use wayland_server::Resource;
use wayland_server::protocol::wl_surface; use wayland_server::protocol::wl_surface;
@ -14,7 +14,7 @@ struct Window<U, R, SD> {
impl<U, R, SD> Window<U, R, SD> impl<U, R, SD> Window<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<SubsurfaceRole> + Role<ShellSurfaceRole> + 'static, R: Role<SubsurfaceRole> + Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
// Find the topmost surface under this point if any and the location of this point in the surface // Find the topmost surface under this point if any and the location of this point in the surface
@ -121,7 +121,7 @@ impl<U, R, SD, F> WindowMap<U, R, SD, F>
where where
F: Fn(&SurfaceAttributes<U>) -> Option<(i32, i32)>, F: Fn(&SurfaceAttributes<U>) -> Option<(i32, i32)>,
U: 'static, U: 'static,
R: Role<SubsurfaceRole> + Role<ShellSurfaceRole> + 'static, R: Role<SubsurfaceRole> + Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
pub fn new(ctoken: CompositorToken<U, R>, get_size: F) -> WindowMap<U, R, SD, F> { pub fn new(ctoken: CompositorToken<U, R>, get_size: F) -> WindowMap<U, R, SD, F> {

View File

@ -32,15 +32,15 @@
//! # //! #
//! use smithay::wayland::compositor::roles::*; //! use smithay::wayland::compositor::roles::*;
//! use smithay::wayland::compositor::CompositorToken; //! use smithay::wayland::compositor::CompositorToken;
//! use smithay::wayland::shell::xdg::{xdg_shell_init, ShellSurfaceRole, ShellEvent}; //! use smithay::wayland::shell::xdg::{xdg_shell_init, XdgSurfaceRole, XdgRequest};
//! use wayland_protocols::unstable::xdg_shell::v6::server::zxdg_shell_v6::ZxdgShellV6; //! use wayland_protocols::unstable::xdg_shell::v6::server::zxdg_shell_v6::ZxdgShellV6;
//! use wayland_server::{EventLoop, LoopToken}; //! use wayland_server::{EventLoop, LoopToken};
//! # use wayland_server::protocol::{wl_seat, wl_output}; //! # use wayland_server::protocol::{wl_seat, wl_output};
//! # #[derive(Default)] struct MySurfaceData; //! # #[derive(Default)] struct MySurfaceData;
//! //!
//! // define the roles type. You need to integrate the ShellSurface role: //! // define the roles type. You need to integrate the XdgSurface role:
//! define_roles!(MyRoles => //! define_roles!(MyRoles =>
//! [ShellSurface, ShellSurfaceRole] //! [XdgSurface, XdgSurfaceRole]
//! ); //! );
//! //!
//! // define the metadata you want associated with the shell clients //! // define the metadata you want associated with the shell clients
@ -63,8 +63,8 @@
//! // token from the compositor implementation //! // token from the compositor implementation
//! compositor_token, //! compositor_token,
//! // your implementation, can also be a strucy implementing the //! // your implementation, can also be a strucy implementing the
//! // appropriate Implementation<(), ShellEvent<_, _, _>> trait //! // appropriate Implementation<(), XdgRequest<_, _, _>> trait
//! |event: ShellEvent<_, _, MyShellData>, ()| { /* ... */ }, //! |event: XdgRequest<_, _, MyShellData>, ()| { /* ... */ },
//! None // put a logger if you want //! None // put a logger if you want
//! ); //! );
//! //!
@ -106,13 +106,13 @@ mod xdg_handlers;
// compatibility handlers for the zxdg_shell_v6 protocol, its earlier version // compatibility handlers for the zxdg_shell_v6 protocol, its earlier version
mod zxdgv6_handlers; mod zxdgv6_handlers;
/// Metadata associated with the `shell_surface` role /// Metadata associated with the `xdg_surface` role
pub struct ShellSurfaceRole { pub struct XdgSurfaceRole {
/// Pending state as requested by the client /// Pending state as requested by the client
/// ///
/// The data in this field are double-buffered, you should /// The data in this field are double-buffered, you should
/// apply them on a surface commit. /// apply them on a surface commit.
pub pending_state: ShellSurfacePendingState, pub pending_state: XdgSurfacePendingState,
/// Geometry of the surface /// Geometry of the surface
/// ///
/// Defines, in surface relative coordinates, what should /// Defines, in surface relative coordinates, what should
@ -175,7 +175,7 @@ impl PositionerState {
} }
/// Contents of the pending state of a shell surface, depending on its role /// Contents of the pending state of a shell surface, depending on its role
pub enum ShellSurfacePendingState { pub enum XdgSurfacePendingState {
/// This a regular, toplevel surface /// This a regular, toplevel surface
/// ///
/// This corresponds to the `xdg_toplevel` role /// This corresponds to the `xdg_toplevel` role
@ -248,9 +248,9 @@ impl Clone for PopupState {
} }
} }
impl Default for ShellSurfacePendingState { impl Default for XdgSurfacePendingState {
fn default() -> ShellSurfacePendingState { fn default() -> XdgSurfacePendingState {
ShellSurfacePendingState::None XdgSurfacePendingState::None
} }
} }
@ -258,7 +258,7 @@ pub(crate) struct ShellImplementation<U, R, SD> {
log: ::slog::Logger, log: ::slog::Logger,
compositor_token: CompositorToken<U, R>, compositor_token: CompositorToken<U, R>,
loop_token: LoopToken, loop_token: LoopToken,
user_impl: Rc<RefCell<Implementation<(), ShellEvent<U, R, SD>>>>, user_impl: Rc<RefCell<Implementation<(), XdgRequest<U, R, SD>>>>,
shell_state: Arc<Mutex<ShellState<U, R, SD>>>, shell_state: Arc<Mutex<ShellState<U, R, SD>>>,
} }
@ -288,10 +288,10 @@ pub fn xdg_shell_init<U, R, SD, L, Impl>(
) )
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: Default + 'static, SD: Default + 'static,
L: Into<Option<::slog::Logger>>, L: Into<Option<::slog::Logger>>,
Impl: Implementation<(), ShellEvent<U, R, SD>>, Impl: Implementation<(), XdgRequest<U, R, SD>>,
{ {
let log = ::slog_or_stdlog(logger); let log = ::slog_or_stdlog(logger);
let shell_state = Arc::new(Mutex::new(ShellState { let shell_state = Arc::new(Mutex::new(ShellState {
@ -300,7 +300,7 @@ where
})); }));
let shell_impl = ShellImplementation { let shell_impl = ShellImplementation {
log: log.new(o!("smithay_module" => "shell_handler")), log: log.new(o!("smithay_module" => "xdg_shell_handler")),
loop_token: ltoken.clone(), loop_token: ltoken.clone(),
compositor_token: ctoken, compositor_token: ctoken,
user_impl: Rc::new(RefCell::new(implementation)), user_impl: Rc::new(RefCell::new(implementation)),
@ -332,15 +332,9 @@ pub struct ShellState<U, R, SD> {
impl<U, R, SD> ShellState<U, R, SD> impl<U, R, SD> ShellState<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
/// Cleans the internal surface storage by removing all dead surfaces
pub fn cleanup_surfaces(&mut self) {
self.known_toplevels.retain(|s| s.alive());
self.known_popups.retain(|s| s.alive());
}
/// Access all the shell surfaces known by this handler /// Access all the shell surfaces known by this handler
pub fn toplevel_surfaces(&self) -> &[ToplevelSurface<U, R, SD>] { pub fn toplevel_surfaces(&self) -> &[ToplevelSurface<U, R, SD>] {
&self.known_toplevels[..] &self.known_toplevels[..]
@ -409,7 +403,7 @@ impl<SD> ShellClient<SD> {
/// Send a ping request to this shell client /// Send a ping request to this shell client
/// ///
/// You'll receive the reply in the `Handler::cient_pong()` method. /// You'll receive the reply as a `XdgRequest::ClientPong` request.
/// ///
/// A typical use is to start a timer at the same time you send this ping /// A typical use is to start a timer at the same time you send this ping
/// request, and cancel it when you receive the pong. If the timer runs /// request, and cancel it when you receive the pong. If the timer runs
@ -486,7 +480,7 @@ pub struct ToplevelSurface<U, R, SD> {
impl<U, R, SD> ToplevelSurface<U, R, SD> impl<U, R, SD> ToplevelSurface<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
/// Is the toplevel surface refered by this handle still alive? /// Is the toplevel surface refered by this handle still alive?
@ -556,7 +550,7 @@ where
return false; return false;
} }
let configured = self.token let configured = self.token
.with_role_data::<ShellSurfaceRole, _, _>(&self.wl_surface, |data| data.configured) .with_role_data::<XdgSurfaceRole, _, _>(&self.wl_surface, |data| data.configured)
.expect("A shell surface object exists but the surface does not have the shell_surface role ?!"); .expect("A shell surface object exists but the surface does not have the shell_surface role ?!");
if !configured { if !configured {
match self.shell_surface { match self.shell_surface {
@ -610,8 +604,8 @@ where
return None; return None;
} }
self.token self.token
.with_role_data::<ShellSurfaceRole, _, _>(&self.wl_surface, |data| match data.pending_state { .with_role_data::<XdgSurfaceRole, _, _>(&self.wl_surface, |data| match data.pending_state {
ShellSurfacePendingState::Toplevel(ref state) => Some(state.clone()), XdgSurfacePendingState::Toplevel(ref state) => Some(state.clone()),
_ => None, _ => None,
}) })
.ok() .ok()
@ -638,7 +632,7 @@ pub struct PopupSurface<U, R, SD> {
impl<U, R, SD> PopupSurface<U, R, SD> impl<U, R, SD> PopupSurface<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
/// Is the popup surface refered by this handle still alive? /// Is the popup surface refered by this handle still alive?
@ -712,7 +706,7 @@ where
return false; return false;
} }
let configured = self.token let configured = self.token
.with_role_data::<ShellSurfaceRole, _, _>(&self.wl_surface, |data| data.configured) .with_role_data::<XdgSurfaceRole, _, _>(&self.wl_surface, |data| data.configured)
.expect("A shell surface object exists but the surface does not have the shell_surface role ?!"); .expect("A shell surface object exists but the surface does not have the shell_surface role ?!");
if !configured { if !configured {
match self.shell_surface { match self.shell_surface {
@ -769,8 +763,8 @@ where
return None; return None;
} }
self.token self.token
.with_role_data::<ShellSurfaceRole, _, _>(&self.wl_surface, |data| match data.pending_state { .with_role_data::<XdgSurfaceRole, _, _>(&self.wl_surface, |data| match data.pending_state {
ShellSurfacePendingState::Popup(ref state) => Some(state.clone()), XdgSurfacePendingState::Popup(ref state) => Some(state.clone()),
_ => None, _ => None,
}) })
.ok() .ok()
@ -816,7 +810,7 @@ pub struct PopupConfigure {
/// for you directly. /// for you directly.
/// ///
/// Depending on what you want to do, you might ignore some of them /// Depending on what you want to do, you might ignore some of them
pub enum ShellEvent<U, R, SD> { pub enum XdgRequest<U, R, SD> {
/// A new shell client was instanciated /// A new shell client was instanciated
NewClient { NewClient {
/// the client /// the client

View File

@ -1,6 +1,6 @@
use super::{make_shell_client_data, PopupConfigure, PopupKind, PopupState, PositionerState, ShellClient, use super::{make_shell_client_data, PopupConfigure, PopupKind, PopupState, PositionerState, ShellClient,
ShellClientData, ShellEvent, ShellImplementation, ShellSurfacePendingState, ShellSurfaceRole, ShellClientData, ShellImplementation, ToplevelConfigure, ToplevelKind, ToplevelState,
ToplevelConfigure, ToplevelKind, ToplevelState}; XdgRequest, XdgSurfacePendingState, XdgSurfaceRole};
use std::sync::Mutex; use std::sync::Mutex;
use utils::Rectangle; use utils::Rectangle;
use wayland::compositor::CompositorToken; use wayland::compositor::CompositorToken;
@ -16,7 +16,7 @@ pub(crate) fn implement_wm_base<U, R, SD>(
) -> Resource<xdg_wm_base::XdgWmBase> ) -> Resource<xdg_wm_base::XdgWmBase>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: Default + 'static, SD: Default + 'static,
{ {
let shell = shell.implement_nonsend( let shell = shell.implement_nonsend(
@ -27,7 +27,7 @@ where
shell.set_user_data(Box::into_raw(Box::new(Mutex::new(make_shell_client_data::<SD>()))) as *mut _); shell.set_user_data(Box::into_raw(Box::new(Mutex::new(make_shell_client_data::<SD>()))) as *mut _);
let mut user_impl = implem.user_impl.borrow_mut(); let mut user_impl = implem.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::NewClient { XdgRequest::NewClient {
client: make_shell_client(&shell), client: make_shell_client(&shell),
}, },
(), (),
@ -60,7 +60,7 @@ impl<U, R, SD> Implementation<Resource<xdg_wm_base::XdgWmBase>, xdg_wm_base::Req
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive(&mut self, request: xdg_wm_base::Request, shell: Resource<xdg_wm_base::XdgWmBase>) { fn receive(&mut self, request: xdg_wm_base::Request, shell: Resource<xdg_wm_base::XdgWmBase>) {
@ -72,8 +72,8 @@ where
implement_positioner(id, &self.loop_token); implement_positioner(id, &self.loop_token);
} }
xdg_wm_base::Request::GetXdgSurface { id, surface } => { xdg_wm_base::Request::GetXdgSurface { id, surface } => {
let role_data = ShellSurfaceRole { let role_data = XdgSurfaceRole {
pending_state: ShellSurfacePendingState::None, pending_state: XdgSurfacePendingState::None,
window_geometry: None, window_geometry: None,
pending_configures: Vec::new(), pending_configures: Vec::new(),
configured: false, configured: false,
@ -110,7 +110,7 @@ where
if valid { if valid {
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::ClientPong { XdgRequest::ClientPong {
client: make_shell_client(&shell), client: make_shell_client(&shell),
}, },
(), (),
@ -216,7 +216,7 @@ fn destroy_surface<U, R, SD>(
implem: Box<Implementation<Resource<xdg_surface::XdgSurface>, xdg_surface::Request>>, implem: Box<Implementation<Resource<xdg_surface::XdgSurface>, xdg_surface::Request>>,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!()); let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!());
@ -232,8 +232,8 @@ fn destroy_surface<U, R, SD>(
} }
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(&data.0, |rdata| { .with_role_data::<XdgSurfaceRole, _, _>(&data.0, |rdata| {
if let ShellSurfacePendingState::None = rdata.pending_state { if let XdgSurfacePendingState::None = rdata.pending_state {
// all is good // all is good
} else { } else {
data.1.post_error( data.1.post_error(
@ -249,7 +249,7 @@ impl<U, R, SD> Implementation<Resource<xdg_surface::XdgSurface>, xdg_surface::Re
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive(&mut self, request: xdg_surface::Request, xdg_surface: Resource<xdg_surface::XdgSurface>) { fn receive(&mut self, request: xdg_surface::Request, xdg_surface: Resource<xdg_surface::XdgSurface>) {
@ -261,8 +261,8 @@ where
} }
xdg_surface::Request::GetToplevel { id } => { xdg_surface::Request::GetToplevel { id } => {
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
data.pending_state = ShellSurfacePendingState::Toplevel(ToplevelState { data.pending_state = XdgSurfacePendingState::Toplevel(ToplevelState {
parent: None, parent: None,
title: String::new(), title: String::new(),
app_id: String::new(), app_id: String::new(),
@ -290,7 +290,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::NewToplevel { surface: handle }, ()); user_impl.receive(XdgRequest::NewToplevel { surface: handle }, ());
} }
xdg_surface::Request::GetPopup { xdg_surface::Request::GetPopup {
id, id,
@ -305,8 +305,8 @@ where
parent_surface.clone() parent_surface.clone()
}); });
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
data.pending_state = ShellSurfacePendingState::Popup(PopupState { data.pending_state = XdgSurfacePendingState::Popup(PopupState {
parent: parent_surface, parent: parent_surface,
positioner: positioner_data.clone(), positioner: positioner_data.clone(),
}); });
@ -331,7 +331,7 @@ where
let handle = make_popup_handle(self.compositor_token, &popup); let handle = make_popup_handle(self.compositor_token, &popup);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::NewPopup { surface: handle }, ()); user_impl.receive(XdgRequest::NewPopup { surface: handle }, ());
} }
xdg_surface::Request::SetWindowGeometry { xdg_surface::Request::SetWindowGeometry {
x, x,
@ -340,7 +340,7 @@ where
height, height,
} => { } => {
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
data.window_geometry = Some(Rectangle { data.window_geometry = Some(Rectangle {
x, x,
y, y,
@ -352,7 +352,7 @@ where
} }
xdg_surface::Request::AckConfigure { serial } => { xdg_surface::Request::AckConfigure { serial } => {
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
let mut found = false; let mut found = false;
data.pending_configures.retain(|&s| { data.pending_configures.retain(|&s| {
if s == serial { if s == serial {
@ -392,7 +392,7 @@ fn with_surface_toplevel_data<U, R, SD, F>(
f: F, f: F,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
F: FnOnce(&mut ToplevelState), F: FnOnce(&mut ToplevelState),
{ {
@ -400,8 +400,8 @@ fn with_surface_toplevel_data<U, R, SD, F>(
let &(ref surface, _, _) = unsafe { &*(ptr as *mut ShellSurfaceUserData) }; let &(ref surface, _, _) = unsafe { &*(ptr as *mut ShellSurfaceUserData) };
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| match data.pending_state { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| match data.pending_state {
ShellSurfacePendingState::Toplevel(ref mut toplevel_data) => f(toplevel_data), XdgSurfacePendingState::Toplevel(ref mut toplevel_data) => f(toplevel_data),
_ => unreachable!(), _ => unreachable!(),
}) })
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
@ -413,7 +413,7 @@ pub fn send_toplevel_configure<U, R>(
configure: ToplevelConfigure, configure: ToplevelConfigure,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
{ {
let &(ref surface, _, ref shell_surface) = let &(ref surface, _, ref shell_surface) =
unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) }; unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) };
@ -436,7 +436,7 @@ pub fn send_toplevel_configure<U, R>(
shell_surface.send(xdg_surface::Event::Configure { serial }); shell_surface.send(xdg_surface::Event::Configure { serial });
// Add the configure as pending // Add the configure as pending
token token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial)) .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial))
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
} }
@ -458,7 +458,7 @@ impl<U, R, SD> Implementation<Resource<xdg_toplevel::XdgToplevel>, xdg_toplevel:
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive(&mut self, request: xdg_toplevel::Request, toplevel: Resource<xdg_toplevel::XdgToplevel>) { fn receive(&mut self, request: xdg_toplevel::Request, toplevel: Resource<xdg_toplevel::XdgToplevel>) {
@ -490,7 +490,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::ShowWindowMenu { XdgRequest::ShowWindowMenu {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -503,7 +503,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Move { XdgRequest::Move {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -521,7 +521,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Resize { XdgRequest::Resize {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -543,18 +543,18 @@ where
xdg_toplevel::Request::SetMaximized => { xdg_toplevel::Request::SetMaximized => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::Maximize { surface: handle }, ()); user_impl.receive(XdgRequest::Maximize { surface: handle }, ());
} }
xdg_toplevel::Request::UnsetMaximized => { xdg_toplevel::Request::UnsetMaximized => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::UnMaximize { surface: handle }, ()); user_impl.receive(XdgRequest::UnMaximize { surface: handle }, ());
} }
xdg_toplevel::Request::SetFullscreen { output } => { xdg_toplevel::Request::SetFullscreen { output } => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Fullscreen { XdgRequest::Fullscreen {
surface: handle, surface: handle,
output, output,
}, },
@ -564,12 +564,12 @@ where
xdg_toplevel::Request::UnsetFullscreen => { xdg_toplevel::Request::UnsetFullscreen => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::UnFullscreen { surface: handle }, ()); user_impl.receive(XdgRequest::UnFullscreen { surface: handle }, ());
} }
xdg_toplevel::Request::SetMinimized => { xdg_toplevel::Request::SetMinimized => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::Minimize { surface: handle }, ()); user_impl.receive(XdgRequest::Minimize { surface: handle }, ());
} }
} }
} }
@ -580,7 +580,7 @@ fn destroy_toplevel<U, R, SD>(
implem: Box<Implementation<Resource<xdg_toplevel::XdgToplevel>, xdg_toplevel::Request>>, implem: Box<Implementation<Resource<xdg_toplevel::XdgToplevel>, xdg_toplevel::Request>>,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!()); let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!());
@ -596,8 +596,8 @@ fn destroy_toplevel<U, R, SD>(
} else { } else {
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(&data.0, |data| { .with_role_data::<XdgSurfaceRole, _, _>(&data.0, |data| {
data.pending_state = ShellSurfacePendingState::None; data.pending_state = XdgSurfacePendingState::None;
data.configured = false; data.configured = false;
}) })
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
@ -621,7 +621,7 @@ pub(crate) fn send_popup_configure<U, R>(
configure: PopupConfigure, configure: PopupConfigure,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
{ {
let &(ref surface, _, ref shell_surface) = let &(ref surface, _, ref shell_surface) =
unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) }; unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) };
@ -637,7 +637,7 @@ pub(crate) fn send_popup_configure<U, R>(
shell_surface.send(xdg_surface::Event::Configure { serial }); shell_surface.send(xdg_surface::Event::Configure { serial });
// Add the configure as pending // Add the configure as pending
token token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial)) .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial))
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
} }
@ -659,7 +659,7 @@ impl<U, R, SD> Implementation<Resource<xdg_popup::XdgPopup>, xdg_popup::Request>
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive(&mut self, request: xdg_popup::Request, popup: Resource<xdg_popup::XdgPopup>) { fn receive(&mut self, request: xdg_popup::Request, popup: Resource<xdg_popup::XdgPopup>) {
@ -671,7 +671,7 @@ where
let handle = make_popup_handle(self.compositor_token, &popup); let handle = make_popup_handle(self.compositor_token, &popup);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Grab { XdgRequest::Grab {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -688,7 +688,7 @@ fn destroy_popup<U, R, SD>(
implem: Box<Implementation<Resource<xdg_popup::XdgPopup>, xdg_popup::Request>>, implem: Box<Implementation<Resource<xdg_popup::XdgPopup>, xdg_popup::Request>>,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!()); let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!());
@ -704,8 +704,8 @@ fn destroy_popup<U, R, SD>(
} else { } else {
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(&data.0, |data| { .with_role_data::<XdgSurfaceRole, _, _>(&data.0, |data| {
data.pending_state = ShellSurfacePendingState::None; data.pending_state = XdgSurfacePendingState::None;
data.configured = false; data.configured = false;
}) })
.expect("xdg_popup exists but surface has not shell_surface role?!"); .expect("xdg_popup exists but surface has not shell_surface role?!");

View File

@ -1,6 +1,6 @@
use super::{make_shell_client_data, PopupConfigure, PopupKind, PopupState, PositionerState, ShellClient, use super::{make_shell_client_data, PopupConfigure, PopupKind, PopupState, PositionerState, ShellClient,
ShellClientData, ShellEvent, ShellImplementation, ShellSurfacePendingState, ShellSurfaceRole, ShellClientData, ShellImplementation, ToplevelConfigure, ToplevelKind, ToplevelState,
ToplevelConfigure, ToplevelKind, ToplevelState}; XdgRequest, XdgSurfacePendingState, XdgSurfaceRole};
use std::sync::Mutex; use std::sync::Mutex;
use utils::Rectangle; use utils::Rectangle;
use wayland::compositor::CompositorToken; use wayland::compositor::CompositorToken;
@ -18,7 +18,7 @@ pub(crate) fn implement_shell<U, R, SD>(
) -> Resource<zxdg_shell_v6::ZxdgShellV6> ) -> Resource<zxdg_shell_v6::ZxdgShellV6>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: Default + 'static, SD: Default + 'static,
{ {
let shell = shell.implement_nonsend( let shell = shell.implement_nonsend(
@ -29,7 +29,7 @@ where
shell.set_user_data(Box::into_raw(Box::new(Mutex::new(make_shell_client_data::<SD>()))) as *mut _); shell.set_user_data(Box::into_raw(Box::new(Mutex::new(make_shell_client_data::<SD>()))) as *mut _);
let mut user_impl = implem.user_impl.borrow_mut(); let mut user_impl = implem.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::NewClient { XdgRequest::NewClient {
client: make_shell_client(&shell), client: make_shell_client(&shell),
}, },
(), (),
@ -62,7 +62,7 @@ impl<U, R, SD> Implementation<Resource<zxdg_shell_v6::ZxdgShellV6>, zxdg_shell_v
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive(&mut self, request: zxdg_shell_v6::Request, shell: Resource<zxdg_shell_v6::ZxdgShellV6>) { fn receive(&mut self, request: zxdg_shell_v6::Request, shell: Resource<zxdg_shell_v6::ZxdgShellV6>) {
@ -74,8 +74,8 @@ where
implement_positioner(id, &self.loop_token); implement_positioner(id, &self.loop_token);
} }
zxdg_shell_v6::Request::GetXdgSurface { id, surface } => { zxdg_shell_v6::Request::GetXdgSurface { id, surface } => {
let role_data = ShellSurfaceRole { let role_data = XdgSurfaceRole {
pending_state: ShellSurfacePendingState::None, pending_state: XdgSurfacePendingState::None,
window_geometry: None, window_geometry: None,
pending_configures: Vec::new(), pending_configures: Vec::new(),
configured: false, configured: false,
@ -112,7 +112,7 @@ where
if valid { if valid {
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::ClientPong { XdgRequest::ClientPong {
client: make_shell_client(&shell), client: make_shell_client(&shell),
}, },
(), (),
@ -232,7 +232,7 @@ fn destroy_surface<U, R, SD>(
implem: Box<Implementation<Resource<zxdg_surface_v6::ZxdgSurfaceV6>, zxdg_surface_v6::Request>>, implem: Box<Implementation<Resource<zxdg_surface_v6::ZxdgSurfaceV6>, zxdg_surface_v6::Request>>,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!()); let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!());
@ -248,8 +248,8 @@ fn destroy_surface<U, R, SD>(
} }
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(&data.0, |rdata| { .with_role_data::<XdgSurfaceRole, _, _>(&data.0, |rdata| {
if let ShellSurfacePendingState::None = rdata.pending_state { if let XdgSurfacePendingState::None = rdata.pending_state {
// all is good // all is good
} else { } else {
data.1.post_error( data.1.post_error(
@ -265,7 +265,7 @@ impl<U, R, SD> Implementation<Resource<zxdg_surface_v6::ZxdgSurfaceV6>, zxdg_sur
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive( fn receive(
@ -281,8 +281,8 @@ where
} }
zxdg_surface_v6::Request::GetToplevel { id } => { zxdg_surface_v6::Request::GetToplevel { id } => {
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
data.pending_state = ShellSurfacePendingState::Toplevel(ToplevelState { data.pending_state = XdgSurfacePendingState::Toplevel(ToplevelState {
parent: None, parent: None,
title: String::new(), title: String::new(),
app_id: String::new(), app_id: String::new(),
@ -310,7 +310,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::NewToplevel { surface: handle }, ()); user_impl.receive(XdgRequest::NewToplevel { surface: handle }, ());
} }
zxdg_surface_v6::Request::GetPopup { zxdg_surface_v6::Request::GetPopup {
id, id,
@ -322,8 +322,8 @@ where
let parent_ptr = parent.get_user_data(); let parent_ptr = parent.get_user_data();
let &(ref parent_surface, _) = unsafe { &*(parent_ptr as *mut XdgSurfaceUserData) }; let &(ref parent_surface, _) = unsafe { &*(parent_ptr as *mut XdgSurfaceUserData) };
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
data.pending_state = ShellSurfacePendingState::Popup(PopupState { data.pending_state = XdgSurfacePendingState::Popup(PopupState {
parent: Some(parent_surface.clone()), parent: Some(parent_surface.clone()),
positioner: positioner_data.clone(), positioner: positioner_data.clone(),
}); });
@ -348,7 +348,7 @@ where
let handle = make_popup_handle(self.compositor_token, &popup); let handle = make_popup_handle(self.compositor_token, &popup);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::NewPopup { surface: handle }, ()); user_impl.receive(XdgRequest::NewPopup { surface: handle }, ());
} }
zxdg_surface_v6::Request::SetWindowGeometry { zxdg_surface_v6::Request::SetWindowGeometry {
x, x,
@ -357,7 +357,7 @@ where
height, height,
} => { } => {
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
data.window_geometry = Some(Rectangle { data.window_geometry = Some(Rectangle {
x, x,
y, y,
@ -369,7 +369,7 @@ where
} }
zxdg_surface_v6::Request::AckConfigure { serial } => { zxdg_surface_v6::Request::AckConfigure { serial } => {
self.compositor_token self.compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| {
let mut found = false; let mut found = false;
data.pending_configures.retain(|&s| { data.pending_configures.retain(|&s| {
if s == serial { if s == serial {
@ -409,7 +409,7 @@ fn with_surface_toplevel_data<U, R, SD, F>(
f: F, f: F,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
F: FnOnce(&mut ToplevelState), F: FnOnce(&mut ToplevelState),
{ {
@ -417,8 +417,8 @@ fn with_surface_toplevel_data<U, R, SD, F>(
let &(ref surface, _, _) = unsafe { &*(ptr as *mut ShellSurfaceUserData) }; let &(ref surface, _, _) = unsafe { &*(ptr as *mut ShellSurfaceUserData) };
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| match data.pending_state { .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| match data.pending_state {
ShellSurfacePendingState::Toplevel(ref mut toplevel_data) => f(toplevel_data), XdgSurfacePendingState::Toplevel(ref mut toplevel_data) => f(toplevel_data),
_ => unreachable!(), _ => unreachable!(),
}) })
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
@ -430,7 +430,7 @@ pub fn send_toplevel_configure<U, R>(
configure: ToplevelConfigure, configure: ToplevelConfigure,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
{ {
let &(ref surface, _, ref shell_surface) = let &(ref surface, _, ref shell_surface) =
unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) }; unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) };
@ -453,7 +453,7 @@ pub fn send_toplevel_configure<U, R>(
shell_surface.send(zxdg_surface_v6::Event::Configure { serial }); shell_surface.send(zxdg_surface_v6::Event::Configure { serial });
// Add the configure as pending // Add the configure as pending
token token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial)) .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial))
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
} }
@ -475,7 +475,7 @@ impl<U, R, SD> Implementation<Resource<zxdg_toplevel_v6::ZxdgToplevelV6>, zxdg_t
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive( fn receive(
@ -511,7 +511,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::ShowWindowMenu { XdgRequest::ShowWindowMenu {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -524,7 +524,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Move { XdgRequest::Move {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -542,7 +542,7 @@ where
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Resize { XdgRequest::Resize {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -564,18 +564,18 @@ where
zxdg_toplevel_v6::Request::SetMaximized => { zxdg_toplevel_v6::Request::SetMaximized => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::Maximize { surface: handle }, ()); user_impl.receive(XdgRequest::Maximize { surface: handle }, ());
} }
zxdg_toplevel_v6::Request::UnsetMaximized => { zxdg_toplevel_v6::Request::UnsetMaximized => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::UnMaximize { surface: handle }, ()); user_impl.receive(XdgRequest::UnMaximize { surface: handle }, ());
} }
zxdg_toplevel_v6::Request::SetFullscreen { output } => { zxdg_toplevel_v6::Request::SetFullscreen { output } => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Fullscreen { XdgRequest::Fullscreen {
surface: handle, surface: handle,
output, output,
}, },
@ -585,12 +585,12 @@ where
zxdg_toplevel_v6::Request::UnsetFullscreen => { zxdg_toplevel_v6::Request::UnsetFullscreen => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::UnFullscreen { surface: handle }, ()); user_impl.receive(XdgRequest::UnFullscreen { surface: handle }, ());
} }
zxdg_toplevel_v6::Request::SetMinimized => { zxdg_toplevel_v6::Request::SetMinimized => {
let handle = make_toplevel_handle(self.compositor_token, &toplevel); let handle = make_toplevel_handle(self.compositor_token, &toplevel);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive(ShellEvent::Minimize { surface: handle }, ()); user_impl.receive(XdgRequest::Minimize { surface: handle }, ());
} }
} }
} }
@ -601,7 +601,7 @@ fn destroy_toplevel<U, R, SD>(
implem: Box<Implementation<Resource<zxdg_toplevel_v6::ZxdgToplevelV6>, zxdg_toplevel_v6::Request>>, implem: Box<Implementation<Resource<zxdg_toplevel_v6::ZxdgToplevelV6>, zxdg_toplevel_v6::Request>>,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!()); let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!());
@ -617,8 +617,8 @@ fn destroy_toplevel<U, R, SD>(
} else { } else {
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(&data.0, |data| { .with_role_data::<XdgSurfaceRole, _, _>(&data.0, |data| {
data.pending_state = ShellSurfacePendingState::None; data.pending_state = XdgSurfacePendingState::None;
data.configured = false; data.configured = false;
}) })
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
@ -642,7 +642,7 @@ pub(crate) fn send_popup_configure<U, R>(
configure: PopupConfigure, configure: PopupConfigure,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
{ {
let &(ref surface, _, ref shell_surface) = let &(ref surface, _, ref shell_surface) =
unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) }; unsafe { &*(resource.get_user_data() as *mut ShellSurfaceUserData) };
@ -658,7 +658,7 @@ pub(crate) fn send_popup_configure<U, R>(
shell_surface.send(zxdg_surface_v6::Event::Configure { serial }); shell_surface.send(zxdg_surface_v6::Event::Configure { serial });
// Add the configure as pending // Add the configure as pending
token token
.with_role_data::<ShellSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial)) .with_role_data::<XdgSurfaceRole, _, _>(surface, |data| data.pending_configures.push(serial))
.expect("xdg_toplevel exists but surface has not shell_surface role?!"); .expect("xdg_toplevel exists but surface has not shell_surface role?!");
} }
@ -680,7 +680,7 @@ impl<U, R, SD> Implementation<Resource<zxdg_popup_v6::ZxdgPopupV6>, zxdg_popup_v
for ShellImplementation<U, R, SD> for ShellImplementation<U, R, SD>
where where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
fn receive(&mut self, request: zxdg_popup_v6::Request, popup: Resource<zxdg_popup_v6::ZxdgPopupV6>) { fn receive(&mut self, request: zxdg_popup_v6::Request, popup: Resource<zxdg_popup_v6::ZxdgPopupV6>) {
@ -692,7 +692,7 @@ where
let handle = make_popup_handle(self.compositor_token, &popup); let handle = make_popup_handle(self.compositor_token, &popup);
let mut user_impl = self.user_impl.borrow_mut(); let mut user_impl = self.user_impl.borrow_mut();
user_impl.receive( user_impl.receive(
ShellEvent::Grab { XdgRequest::Grab {
surface: handle, surface: handle,
seat, seat,
serial, serial,
@ -709,7 +709,7 @@ fn destroy_popup<U, R, SD>(
implem: Box<Implementation<Resource<zxdg_popup_v6::ZxdgPopupV6>, zxdg_popup_v6::Request>>, implem: Box<Implementation<Resource<zxdg_popup_v6::ZxdgPopupV6>, zxdg_popup_v6::Request>>,
) where ) where
U: 'static, U: 'static,
R: Role<ShellSurfaceRole> + 'static, R: Role<XdgSurfaceRole> + 'static,
SD: 'static, SD: 'static,
{ {
let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!()); let implem: ShellImplementation<U, R, SD> = *downcast_impl(implem).unwrap_or_else(|_| unreachable!());
@ -725,8 +725,8 @@ fn destroy_popup<U, R, SD>(
} else { } else {
implem implem
.compositor_token .compositor_token
.with_role_data::<ShellSurfaceRole, _, _>(&data.0, |data| { .with_role_data::<XdgSurfaceRole, _, _>(&data.0, |data| {
data.pending_state = ShellSurfacePendingState::None; data.pending_state = XdgSurfacePendingState::None;
data.configured = false; data.configured = false;
}) })
.expect("xdg_popup exists but surface has not shell_surface role?!"); .expect("xdg_popup exists but surface has not shell_surface role?!");