Alias ffi::shell_surface to shell::Surface and move rust impl
Change-Id: Ic6e613210002f05ec9eb29cbd5b96803f99a83f5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/croscomp/+/3277709
Tested-by: Kristian Kristensen <hoegsberg@chromium.org>
Reviewed-by: Lucas Berthou <berlu@chromium.org>
Commit-Queue: Kristian Kristensen <hoegsberg@chromium.org>
diff --git a/src/ffi.rs b/src/ffi.rs
index 26698f9..fa46e78 100644
--- a/src/ffi.rs
+++ b/src/ffi.rs
@@ -513,36 +513,6 @@
}
}
-impl shell_surface {
- pub fn get<'a>(surface: &mut weston_surface) -> Option<&'a mut shell_surface> {
- unsafe { get_shell_surface(surface).as_mut() }
- }
-
- pub fn r#move(&mut self, pointer: &mut weston_pointer, client_initiated: bool) {
- unsafe {
- shell_surface_move(self, pointer as *mut _, client_initiated);
- }
- }
-
- pub fn resize(&mut self, pointer: &mut weston_pointer, edges: u32) {
- unsafe {
- shell_surface_resize(self, pointer as *mut _, edges);
- }
- }
-
- pub fn set_size(&mut self, width: i32, height: i32) {
- unsafe { shell_surface_set_size(self, width, height) }
- }
-
- pub fn set_resizing(&mut self, edges: wl_shell_surface_resize) {
- unsafe { shell_surface_set_resizing(self, edges.0) }
- }
-
- pub fn get_geometry(&mut self) -> weston_geometry {
- unsafe { shell_surface_get_geometry(self) }
- }
-}
-
impl wl_shell_surface_resize {
pub fn has(&self, bit: wl_shell_surface_resize) -> bool {
*self & bit == bit
diff --git a/src/shell.rs b/src/shell.rs
index 89fc92e..b0c3494 100644
--- a/src/shell.rs
+++ b/src/shell.rs
@@ -232,3 +232,59 @@
debug!("-------------------- drop Shell")
}
}
+
+pub type Surface = ffi::shell_surface;
+
+impl Surface {
+ pub fn new(
+ shell: &mut Shell,
+ surface: *mut ffi::weston_surface,
+ view: *mut ffi::weston_view,
+ ) -> *mut Self {
+ unsafe { ffi::shell_surface_create(&mut shell.native as *mut _, surface, view) }
+ }
+
+ pub fn get<'a>(surface: &mut ffi::weston_surface) -> Option<&'a mut Surface> {
+ unsafe { ffi::get_shell_surface(surface).as_mut() }
+ }
+
+ pub fn r#move(&mut self, pointer: &mut ffi::weston_pointer, client_initiated: bool) {
+ unsafe {
+ ffi::shell_surface_move(self, pointer as *mut _, client_initiated);
+ }
+ }
+
+ pub fn resize(&mut self, pointer: &mut ffi::weston_pointer, edges: u32) {
+ unsafe {
+ ffi::shell_surface_resize(self, pointer as *mut _, edges);
+ }
+ }
+
+ pub fn set_size(&mut self, width: i32, height: i32) {
+ unsafe { ffi::shell_surface_set_size(self, width, height) }
+ }
+
+ pub fn set_resizing(&mut self, edges: ffi::wl_shell_surface_resize) {
+ unsafe { ffi::shell_surface_set_resizing(self, edges.0) }
+ }
+
+ pub fn get_geometry(&mut self) -> ffi::weston_geometry {
+ unsafe { ffi::shell_surface_get_geometry(self) }
+ }
+
+ pub fn set_maximized(&mut self, enable: bool) -> ffi::weston_size {
+ unsafe { ffi::shell_surface_set_maximized(self, enable) }
+ }
+
+ pub fn set_fullscreen(
+ &mut self,
+ enable: bool,
+ output: *mut ffi::weston_output,
+ ) -> ffi::weston_size {
+ unsafe { ffi::shell_surface_set_fullscreen(self, enable, output) }
+ }
+
+ pub fn set_minimized(&mut self) {
+ unsafe { ffi::shell_surface_set_minimized(self) }
+ }
+}
diff --git a/src/xdg_shell.rs b/src/xdg_shell.rs
index 83794c8..9ec03e2 100644
--- a/src/xdg_shell.rs
+++ b/src/xdg_shell.rs
@@ -4,10 +4,12 @@
use crate::ffi;
use crate::protocol;
+use crate::shell;
use log::debug;
use std::any::Any;
use std::cell::RefCell;
use std::rc::Rc;
+use std::ops::DerefMut;
use crate::server::Resource;
use protocol::xdg_popup::{self, XdgPopup};
@@ -149,7 +151,7 @@
struct Toplevel {
shell: Rc<RefCell<crate::Shell>>,
surface: *mut ffi::weston_surface,
- shsurf: *mut ffi::shell_surface,
+ shsurf: *mut shell::Surface,
surface_resource: Resource<XdgSurface>,
resource: Resource<XdgToplevel>,
title: String,
@@ -174,8 +176,8 @@
let shsurf = unsafe {
let view = ffi::weston_view_create(surface.surface);
- ffi::shell_surface_create(
- &mut (surface.shell.borrow_mut()).native as *mut _,
+ shell::Surface::new(
+ surface.shell.borrow_mut().deref_mut(),
surface.surface,
view,
)
@@ -292,12 +294,12 @@
}
SetMaximized => unsafe {
toplevel.pending_state.maximized = true;
- toplevel.pending_size = ffi::shell_surface_set_maximized(shsurf, true);
+ toplevel.pending_size = shsurf.set_maximized(true);
toplevel.schedule_configure(Rc::clone(&rc));
},
UnsetMaximized => unsafe {
toplevel.pending_state.maximized = false;
- toplevel.pending_size = ffi::shell_surface_set_maximized(shsurf, false);
+ toplevel.pending_size = shsurf.set_maximized(false);
toplevel.schedule_configure(Rc::clone(&rc));
},
SetFullscreen { output } => unsafe {
@@ -305,17 +307,17 @@
Some(output) => output.as_ref().user_data::<ffi::weston_output>(),
None => 0 as *mut _,
};
- toplevel.pending_size = ffi::shell_surface_set_fullscreen(shsurf, true, output);
+ toplevel.pending_size = shsurf.set_fullscreen(true, output);
toplevel.pending_state.fullscreen = true;
toplevel.schedule_configure(Rc::clone(&rc));
},
UnsetFullscreen => unsafe {
- toplevel.pending_size = ffi::shell_surface_set_fullscreen(shsurf, false, 0 as *mut _);
+ toplevel.pending_size = shsurf.set_fullscreen(false, 0 as *mut _);
toplevel.pending_state.fullscreen = true;
toplevel.schedule_configure(Rc::clone(&rc));
},
SetMinimized => unsafe {
- ffi::shell_surface_set_minimized(shsurf);
+ shsurf.set_minimized();
},
}
}