use wlroots_sys::{wlr_xdg_toplevel_move_event, wlr_xdg_toplevel_resize_event,
wlr_xdg_toplevel_set_fullscreen_event,
wlr_xdg_toplevel_show_window_menu_event};
use {output, shell::xdg_shell, utils::edges::Edges};
#[derive(Debug, PartialEq, Eq)]
pub struct Move {
event: *mut wlr_xdg_toplevel_move_event
}
#[derive(Debug, PartialEq, Eq)]
pub struct Resize {
event: *mut wlr_xdg_toplevel_resize_event
}
#[derive(Debug, PartialEq, Eq)]
pub struct SetFullscreen {
event: *mut wlr_xdg_toplevel_set_fullscreen_event
}
#[derive(Debug, PartialEq, Eq)]
pub struct ShowWindowMenu {
event: *mut wlr_xdg_toplevel_show_window_menu_event
}
impl Move {
pub(crate) unsafe fn from_ptr(event: *mut wlr_xdg_toplevel_move_event) -> Self {
Move { event }
}
pub fn surface(&self) -> xdg_shell::Handle {
unsafe { xdg_shell::Handle::from_ptr((*self.event).surface) }
}
pub fn serial(&self) -> u32 {
unsafe { (*self.event).serial }
}
}
impl Resize {
pub(crate) unsafe fn from_ptr(event: *mut wlr_xdg_toplevel_resize_event) -> Self {
Resize { event }
}
pub fn surface(&self) -> xdg_shell::Handle {
unsafe { xdg_shell::Handle::from_ptr((*self.event).surface) }
}
pub fn serial(&self) -> u32 {
unsafe { (*self.event).serial }
}
pub fn edges(&self) -> Edges {
unsafe {
let edges_bits = (*self.event).edges;
match Edges::from_bits(edges_bits) {
Some(edges) => edges,
None => panic!("got invalid edges: {}", edges_bits)
}
}
}
}
impl SetFullscreen {
pub(crate) unsafe fn from_ptr(event: *mut wlr_xdg_toplevel_set_fullscreen_event) -> Self {
SetFullscreen { event }
}
pub fn surface(&self) -> xdg_shell::Handle {
unsafe { xdg_shell::Handle::from_ptr((*self.event).surface) }
}
pub fn fullscreen(&self) -> bool {
unsafe { (*self.event).fullscreen }
}
pub fn output(&self) -> output::Handle {
unsafe { output::Handle::from_ptr((*self.event).output) }
}
}
impl ShowWindowMenu {
pub(crate) unsafe fn from_ptr(event: *mut wlr_xdg_toplevel_show_window_menu_event) -> Self {
ShowWindowMenu { event }
}
pub fn surface(&self) -> xdg_shell::Handle {
unsafe { xdg_shell::Handle::from_ptr((*self.event).surface) }
}
pub fn serial(&self) -> u32 {
unsafe { (*self.event).serial }
}
pub fn coords(&self) -> (u32, u32) {
unsafe { ((*self.event).x, (*self.event).y) }
}
}