aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/mod.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-09-03 14:22:04 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-09-03 14:22:04 +0400
commitcc1c9d93254df120fc1041e121cb3b5edd00ffc9 (patch)
treeb39afcd0df6d74ec10bf511aed23b16ce105fe11 /src/handlers/mod.rs
parent03a9fd8af3bbd8a0e6dbc33516dce83cce564166 (diff)
downloadniri-cc1c9d93254df120fc1041e121cb3b5edd00ffc9.tar.gz
niri-cc1c9d93254df120fc1041e121cb3b5edd00ffc9.tar.bz2
niri-cc1c9d93254df120fc1041e121cb3b5edd00ffc9.zip
Add initial dmabuf feedback implementation
Diffstat (limited to 'src/handlers/mod.rs')
-rw-r--r--src/handlers/mod.rs28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index 7e643d5d..0e330322 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -2,6 +2,8 @@ mod compositor;
mod layer_shell;
mod xdg_shell;
+use smithay::backend::allocator::dmabuf::Dmabuf;
+use smithay::backend::renderer::ImportDma;
use smithay::input::pointer::CursorImageStatus;
use smithay::input::{Seat, SeatHandler, SeatState};
use smithay::reexports::wayland_server::protocol::wl_data_source::WlDataSource;
@@ -11,9 +13,10 @@ use smithay::wayland::data_device::{
set_data_device_focus, ClientDndGrabHandler, DataDeviceHandler, DataDeviceState,
ServerDndGrabHandler,
};
+use smithay::wayland::dmabuf::{DmabufGlobal, DmabufHandler, DmabufState, ImportError};
use smithay::{
- delegate_data_device, delegate_output, delegate_pointer_gestures, delegate_presentation,
- delegate_seat, delegate_tablet_manager,
+ delegate_data_device, delegate_dmabuf, delegate_output, delegate_pointer_gestures,
+ delegate_presentation, delegate_seat, delegate_tablet_manager,
};
use crate::niri::State;
@@ -75,3 +78,24 @@ delegate_data_device!(State);
delegate_output!(State);
delegate_presentation!(State);
+
+impl DmabufHandler for State {
+ fn dmabuf_state(&mut self) -> &mut DmabufState {
+ self.backend.tty().dmabuf_state()
+ }
+
+ fn dmabuf_imported(
+ &mut self,
+ _global: &DmabufGlobal,
+ dmabuf: Dmabuf,
+ ) -> Result<(), ImportError> {
+ match self.backend.renderer().import_dmabuf(&dmabuf, None) {
+ Ok(_texture) => Ok(()),
+ Err(err) => {
+ warn!("error importing dmabuf: {err:?}");
+ Err(ImportError::Failed)
+ }
+ }
+ }
+}
+delegate_dmabuf!(State);