diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-03 14:22:04 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-03 14:22:04 +0400 |
| commit | cc1c9d93254df120fc1041e121cb3b5edd00ffc9 (patch) | |
| tree | b39afcd0df6d74ec10bf511aed23b16ce105fe11 /src/handlers/mod.rs | |
| parent | 03a9fd8af3bbd8a0e6dbc33516dce83cce564166 (diff) | |
| download | niri-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.rs | 28 |
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); |
