Merge pull request #486 from Smithay/fix/dnd_seat

data_device: Pass seat to DnD events
This commit is contained in:
Victoria Brekenfeld 2022-02-02 16:40:28 +01:00 committed by GitHub
commit 8c92e5f720
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 3 deletions

View File

@ -167,7 +167,7 @@ impl<BackendData: Backend + 'static> AnvilState<BackendData> {
DataDeviceEvent::DnDStarted { icon, .. } => { DataDeviceEvent::DnDStarted { icon, .. } => {
*dnd_icon2.lock().unwrap() = icon; *dnd_icon2.lock().unwrap() = icon;
} }
DataDeviceEvent::DnDDropped => { DataDeviceEvent::DnDDropped { .. } => {
*dnd_icon2.lock().unwrap() = None; *dnd_icon2.lock().unwrap() = None;
} }
_ => {} _ => {}

View File

@ -209,7 +209,9 @@ impl PointerGrab for DnDGrab {
source.cancelled(); source.cancelled();
} }
} }
(&mut *self.callback.borrow_mut())(super::DataDeviceEvent::DnDDropped); (&mut *self.callback.borrow_mut())(super::DataDeviceEvent::DnDDropped {
seat: self.seat.clone(),
});
self.icon = None; self.icon = None;
// in all cases abandon the drop // in all cases abandon the drop
// no more buttons are pressed, release the grab // no more buttons are pressed, release the grab

View File

@ -88,13 +88,18 @@ pub enum DataDeviceEvent {
/// The icon the client requested to be used to be associated with the cursor icon /// The icon the client requested to be used to be associated with the cursor icon
/// during the drag'n'drop. /// during the drag'n'drop.
icon: Option<wl_surface::WlSurface>, icon: Option<wl_surface::WlSurface>,
/// The seat on which the DnD operation was started
seat: Seat,
}, },
/// The drag'n'drop action was finished by the user releasing the buttons /// The drag'n'drop action was finished by the user releasing the buttons
/// ///
/// At this point, any pointer icon should be removed. /// At this point, any pointer icon should be removed.
/// ///
/// Note that this event will only be generated for client-initiated drag'n'drop session. /// Note that this event will only be generated for client-initiated drag'n'drop session.
DnDDropped, DnDDropped {
/// The seat on which the DnD action was finished.
seat: Seat,
},
/// A client requested to read the server-set selection /// A client requested to read the server-set selection
SendSelection { SendSelection {
/// the requested mime type /// the requested mime type
@ -445,6 +450,7 @@ where
(&mut *callback.borrow_mut())(DataDeviceEvent::DnDStarted { (&mut *callback.borrow_mut())(DataDeviceEvent::DnDStarted {
source: source.clone(), source: source.clone(),
icon: icon.clone(), icon: icon.clone(),
seat: seat.clone(),
}); });
let start_data = pointer.grab_start_data().unwrap(); let start_data = pointer.grab_start_data().unwrap();
pointer.set_grab( pointer.set_grab(