1
0
Fork 0
forked from wry/wry

tree: force focus change after dnd drop

This commit is contained in:
Julian Orth 2024-02-15 15:37:57 +01:00
parent dc554a780e
commit 2abce40e8b

View file

@ -5,7 +5,10 @@ use {
ifs::{ ifs::{
ipc, ipc,
ipc::{wl_data_device::ClipboardIpc, wl_data_source::WlDataSource}, ipc::{wl_data_device::ClipboardIpc, wl_data_source::WlDataSource},
wl_seat::{wl_pointer::PendingScroll, Dnd, DroppedDnd, WlSeatError, WlSeatGlobal}, wl_seat::{
wl_pointer::PendingScroll, Dnd, DroppedDnd, WlSeatError, WlSeatGlobal,
CHANGE_CURSOR_MOVED,
},
wl_surface::WlSurface, wl_surface::WlSurface,
}, },
state::DeviceHandlerData, state::DeviceHandlerData,
@ -132,6 +135,11 @@ impl PointerOwnerHolder {
pub fn clear(&self) { pub fn clear(&self) {
self.owner.set(self.default.clone()); self.owner.set(self.default.clone());
} }
fn set_default_pointer_owner(&self, seat: &Rc<WlSeatGlobal>) {
seat.pointer_owner.owner.set(self.default.clone());
seat.changes.or_assign(CHANGE_CURSOR_MOVED);
}
} }
trait PointerOwner { trait PointerOwner {
@ -300,10 +308,8 @@ impl PointerOwner for GrabPointerOwner {
if self.buttons.is_empty() { if self.buttons.is_empty() {
self.node.node_seat_state().remove_pointer_grab(seat); self.node.node_seat_state().remove_pointer_grab(seat);
// log::info!("button"); // log::info!("button");
seat.pointer_owner.set_default_pointer_owner(seat);
seat.tree_changed.trigger(); seat.tree_changed.trigger();
seat.pointer_owner
.owner
.set(seat.pointer_owner.default.clone());
} }
} }
KeyState::Pressed => { KeyState::Pressed => {
@ -394,9 +400,7 @@ impl PointerOwner for GrabPointerOwner {
fn revert_to_default(&self, seat: &Rc<WlSeatGlobal>) { fn revert_to_default(&self, seat: &Rc<WlSeatGlobal>) {
self.node.node_seat_state().remove_pointer_grab(seat); self.node.node_seat_state().remove_pointer_grab(seat);
seat.pointer_owner seat.pointer_owner.set_default_pointer_owner(seat);
.owner
.set(seat.pointer_owner.default.clone());
} }
fn dnd_target_removed(&self, seat: &Rc<WlSeatGlobal>) { fn dnd_target_removed(&self, seat: &Rc<WlSeatGlobal>) {
@ -438,10 +442,7 @@ impl PointerOwner for DndPointerOwner {
if let Some(icon) = self.icon.get() { if let Some(icon) = self.icon.get() {
icon.dnd_icons.remove(&seat.id()); icon.dnd_icons.remove(&seat.id());
} }
seat.pointer_owner seat.pointer_owner.set_default_pointer_owner(seat);
.owner
.set(seat.pointer_owner.default.clone());
// log::info!("button2");
seat.tree_changed.trigger(); seat.tree_changed.trigger();
} }
@ -511,10 +512,7 @@ impl PointerOwner for DndPointerOwner {
if let Some(icon) = self.icon.get() { if let Some(icon) = self.icon.get() {
icon.dnd_icons.remove(&seat.id()); icon.dnd_icons.remove(&seat.id());
} }
seat.pointer_owner seat.pointer_owner.set_default_pointer_owner(seat);
.owner
.set(seat.pointer_owner.default.clone());
// log::info!("cancel_dnd");
seat.tree_changed.trigger(); seat.tree_changed.trigger();
} }