autocommit 2022-04-12 17:26:33 CEST
This commit is contained in:
parent
d9d1addbf5
commit
8924936079
26 changed files with 896 additions and 543 deletions
|
|
@ -118,18 +118,18 @@ impl NodeSeatState {
|
|||
while let Some((_, seat)) = self.grabs.pop() {
|
||||
seat.pointer_owner.revert_to_default(&seat);
|
||||
}
|
||||
let node_id = node.id();
|
||||
let node_id = node.node_id();
|
||||
while let Some((_, seat)) = self.dnd_targets.pop() {
|
||||
seat.pointer_owner.dnd_target_removed(&seat);
|
||||
}
|
||||
while let Some((_, seat)) = self.pointer_foci.pop() {
|
||||
let mut ps = seat.pointer_stack.borrow_mut();
|
||||
while let Some(last) = ps.pop() {
|
||||
if last.id() == node_id {
|
||||
if last.node_id() == node_id {
|
||||
break;
|
||||
}
|
||||
last.seat_state().leave(&seat);
|
||||
last.leave(&seat);
|
||||
last.node_seat_state().leave(&seat);
|
||||
last.node_leave(&seat);
|
||||
}
|
||||
seat.state.tree_changed();
|
||||
}
|
||||
|
|
@ -139,7 +139,7 @@ impl NodeSeatState {
|
|||
pub fn set_visible(&self, node: &dyn Node, visible: bool) {
|
||||
if !visible {
|
||||
if !self.kb_foci.is_empty() {
|
||||
node.active_changed(false);
|
||||
node.node_active_changed(false);
|
||||
}
|
||||
self.destroy_node2(node, false);
|
||||
}
|
||||
|
|
@ -251,14 +251,14 @@ impl WlSeatGlobal {
|
|||
}
|
||||
let node = self.keyboard_node.get();
|
||||
if shortcuts.is_empty() {
|
||||
node.key(self, key, state);
|
||||
node.node_key(self, key, state);
|
||||
} else if let Some(config) = self.state.config.get() {
|
||||
for shortcut in shortcuts {
|
||||
config.invoke_shortcut(self.id(), &shortcut);
|
||||
}
|
||||
}
|
||||
if let Some(mods) = new_mods {
|
||||
node.mods(self, mods);
|
||||
node.node_mods(self, mods);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -273,17 +273,19 @@ impl WlSeatGlobal {
|
|||
Some(ws) => ws,
|
||||
_ => return None,
|
||||
};
|
||||
let is_container = new.is_container();
|
||||
let is_container = new.node_is_container();
|
||||
for tl in self.toplevel_focus_history.rev_iter() {
|
||||
match tl.as_node().get_workspace() {
|
||||
match tl.as_node().node_get_workspace() {
|
||||
Some(ws) if ws.id == workspace.id => {}
|
||||
_ => continue,
|
||||
};
|
||||
let parent_is_float = match tl.parent() {
|
||||
Some(pn) => pn.is_float(),
|
||||
Some(pn) => pn.node_is_float(),
|
||||
_ => false,
|
||||
};
|
||||
if !parent_is_float && (!is_container || !tl.as_node().is_contained_in(new.id())) {
|
||||
if !parent_is_float
|
||||
&& (!is_container || !tl.as_node().node_is_contained_in(new.node_id()))
|
||||
{
|
||||
return Some(tl.deref().clone());
|
||||
}
|
||||
}
|
||||
|
|
@ -561,7 +563,7 @@ impl WlSeatGlobal {
|
|||
k.send_modifiers(serial, mods_depressed, mods_latched, mods_locked, group)
|
||||
});
|
||||
|
||||
if self.keyboard_node.get().client_id() != Some(surface.client.id) {
|
||||
if self.keyboard_node.get().node_client_id() != Some(surface.client.id) {
|
||||
self.offer_selection::<WlDataDevice>(&self.selection, &surface.client);
|
||||
self.offer_selection::<ZwpPrimarySelectionDeviceV1>(
|
||||
&self.primary_selection,
|
||||
|
|
|
|||
|
|
@ -63,18 +63,18 @@ impl KbOwner for DefaultKbOwner {
|
|||
|
||||
fn set_kb_node(&self, seat: &Rc<WlSeatGlobal>, node: Rc<dyn Node>) {
|
||||
let old = seat.keyboard_node.get();
|
||||
if old.id() == node.id() {
|
||||
if old.node_id() == node.node_id() {
|
||||
return;
|
||||
}
|
||||
old.unfocus(seat);
|
||||
if old.seat_state().unfocus(seat) {
|
||||
old.active_changed(false);
|
||||
old.node_unfocus(seat);
|
||||
if old.node_seat_state().unfocus(seat) {
|
||||
old.node_active_changed(false);
|
||||
}
|
||||
|
||||
if node.seat_state().focus(seat) {
|
||||
node.active_changed(true);
|
||||
if node.node_seat_state().focus(seat) {
|
||||
node.node_active_changed(true);
|
||||
}
|
||||
node.clone().focus(seat);
|
||||
node.clone().node_focus(seat);
|
||||
seat.keyboard_node.set(node.clone());
|
||||
}
|
||||
|
||||
|
|
@ -84,7 +84,7 @@ impl KbOwner for DefaultKbOwner {
|
|||
_ => return,
|
||||
};
|
||||
let node = seat.keyboard_node.get();
|
||||
let ws = match node.get_workspace() {
|
||||
let ws = match node.node_get_workspace() {
|
||||
None => return,
|
||||
Some(ws) => ws,
|
||||
};
|
||||
|
|
@ -93,7 +93,7 @@ impl KbOwner for DefaultKbOwner {
|
|||
return;
|
||||
}
|
||||
for tl in seat.toplevel_focus_history.rev_iter() {
|
||||
if let Some(tl_ws) = tl.as_node().get_workspace() {
|
||||
if let Some(tl_ws) = tl.as_node().node_get_workspace() {
|
||||
if tl_ws.id == new_ws.id {
|
||||
self.set_kb_node(seat, tl.deref().clone().into_node());
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ use {
|
|||
wl_seat::{wl_pointer::PendingScroll, Dnd, DroppedDnd, WlSeatError, WlSeatGlobal},
|
||||
wl_surface::WlSurface,
|
||||
},
|
||||
tree::{FoundNode, Node},
|
||||
tree::{FoundNode, Node, SizedNode},
|
||||
utils::{clonecell::CloneCell, smallmap::SmallMap},
|
||||
},
|
||||
std::{cell::Cell, rc::Rc},
|
||||
|
|
@ -54,7 +54,7 @@ impl PointerOwnerHolder {
|
|||
pub fn frame(&self, seat: &Rc<WlSeatGlobal>) {
|
||||
let pending = self.pending_scroll.take();
|
||||
if let Some(node) = self.owner.get().axis_node(seat) {
|
||||
node.axis_event(seat, &pending);
|
||||
node.node_axis_event(seat, &pending);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -140,8 +140,8 @@ impl PointerOwner for DefaultPointerOwner {
|
|||
buttons: SmallMap::new_with(button, ()),
|
||||
node: pn.clone(),
|
||||
}));
|
||||
pn.seat_state().add_pointer_grab(seat);
|
||||
pn.button(seat, button, state);
|
||||
pn.node_seat_state().add_pointer_grab(seat);
|
||||
pn.node_button(seat, button, state);
|
||||
}
|
||||
|
||||
fn axis_node(&self, seat: &Rc<WlSeatGlobal>) -> Option<Rc<dyn Node>> {
|
||||
|
|
@ -159,17 +159,19 @@ impl PointerOwner for DefaultPointerOwner {
|
|||
x: x_int,
|
||||
y: y_int,
|
||||
});
|
||||
seat.state.root.find_tree_at(x_int, y_int, &mut found_tree);
|
||||
seat.state
|
||||
.root
|
||||
.node_find_tree_at(x_int, y_int, &mut found_tree);
|
||||
let mut divergence = found_tree.len().min(stack.len());
|
||||
for (i, (found, stack)) in found_tree.iter().zip(stack.iter()).enumerate() {
|
||||
if found.node.id() != stack.id() {
|
||||
if found.node.node_id() != stack.node_id() {
|
||||
divergence = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (stack.len(), found_tree.len()) == (divergence, divergence) {
|
||||
if let Some(node) = found_tree.last() {
|
||||
node.node.clone().pointer_motion(
|
||||
node.node.clone().node_pointer_motion(
|
||||
seat,
|
||||
x.apply_fract(node.x),
|
||||
y.apply_fract(node.y),
|
||||
|
|
@ -177,15 +179,15 @@ impl PointerOwner for DefaultPointerOwner {
|
|||
}
|
||||
} else {
|
||||
if let Some(last) = stack.last() {
|
||||
last.pointer_unfocus(seat);
|
||||
last.node_pointer_unfocus(seat);
|
||||
}
|
||||
for old in stack.drain(divergence..).rev() {
|
||||
old.leave(seat);
|
||||
old.seat_state().leave(seat);
|
||||
old.node_leave(seat);
|
||||
old.node_seat_state().leave(seat);
|
||||
}
|
||||
if found_tree.len() == divergence {
|
||||
if let Some(node) = found_tree.last() {
|
||||
node.node.clone().pointer_motion(
|
||||
node.node.clone().node_pointer_motion(
|
||||
seat,
|
||||
x.apply_fract(node.x),
|
||||
y.apply_fract(node.y),
|
||||
|
|
@ -193,8 +195,8 @@ impl PointerOwner for DefaultPointerOwner {
|
|||
}
|
||||
} else {
|
||||
for new in found_tree.drain(divergence..) {
|
||||
new.node.seat_state().enter(seat);
|
||||
new.node.clone().pointer_enter(
|
||||
new.node.node_seat_state().enter(seat);
|
||||
new.node.clone().node_pointer_enter(
|
||||
seat,
|
||||
x.apply_fract(new.x),
|
||||
y.apply_fract(new.y),
|
||||
|
|
@ -203,7 +205,7 @@ impl PointerOwner for DefaultPointerOwner {
|
|||
}
|
||||
}
|
||||
if let Some(node) = stack.last() {
|
||||
node.pointer_focus(seat);
|
||||
node.node_pointer_focus(seat);
|
||||
}
|
||||
}
|
||||
found_tree.clear();
|
||||
|
|
@ -249,7 +251,7 @@ impl PointerOwner for GrabPointerOwner {
|
|||
KeyState::Released => {
|
||||
self.buttons.remove(&button);
|
||||
if self.buttons.is_empty() {
|
||||
self.node.seat_state().remove_pointer_grab(seat);
|
||||
self.node.node_seat_state().remove_pointer_grab(seat);
|
||||
seat.tree_changed.trigger();
|
||||
seat.pointer_owner
|
||||
.owner
|
||||
|
|
@ -260,7 +262,7 @@ impl PointerOwner for GrabPointerOwner {
|
|||
self.buttons.insert(button, ());
|
||||
}
|
||||
}
|
||||
self.node.clone().button(seat, button, state);
|
||||
self.node.clone().node_button(seat, button, state);
|
||||
}
|
||||
|
||||
fn axis_node(&self, _seat: &Rc<WlSeatGlobal>) -> Option<Rc<dyn Node>> {
|
||||
|
|
@ -269,11 +271,11 @@ impl PointerOwner for GrabPointerOwner {
|
|||
|
||||
fn handle_pointer_position(&self, seat: &Rc<WlSeatGlobal>) {
|
||||
let (x, y) = seat.pos.get();
|
||||
let pos = self.node.absolute_position();
|
||||
let pos = self.node.node_absolute_position();
|
||||
let (x_int, y_int) = pos.translate(x.round_down(), y.round_down());
|
||||
self.node
|
||||
.clone()
|
||||
.pointer_motion(seat, x.apply_fract(x_int), y.apply_fract(y_int));
|
||||
.node_pointer_motion(seat, x.apply_fract(x_int), y.apply_fract(y_int));
|
||||
}
|
||||
|
||||
fn start_drag(
|
||||
|
|
@ -290,7 +292,7 @@ impl PointerOwner for GrabPointerOwner {
|
|||
if self.buttons.len() != 1 {
|
||||
return Ok(());
|
||||
}
|
||||
if self.node.id() != origin.node_id {
|
||||
if self.node.node_id() != origin.node_id {
|
||||
return Ok(());
|
||||
}
|
||||
if let Some(icon) = &icon {
|
||||
|
|
@ -315,11 +317,11 @@ impl PointerOwner for GrabPointerOwner {
|
|||
{
|
||||
let mut stack = seat.pointer_stack.borrow_mut();
|
||||
for node in stack.drain(1..).rev() {
|
||||
node.leave(seat);
|
||||
node.seat_state().leave(seat);
|
||||
node.node_leave(seat);
|
||||
node.node_seat_state().leave(seat);
|
||||
}
|
||||
}
|
||||
self.node.seat_state().remove_pointer_grab(seat);
|
||||
self.node.node_seat_state().remove_pointer_grab(seat);
|
||||
// {
|
||||
// let old = seat.keyboard_node.set(seat.state.root.clone());
|
||||
// old.seat_state().unfocus(seat);
|
||||
|
|
@ -335,7 +337,7 @@ impl PointerOwner for GrabPointerOwner {
|
|||
}
|
||||
|
||||
fn revert_to_default(&self, seat: &Rc<WlSeatGlobal>) {
|
||||
self.node.seat_state().remove_pointer_grab(seat);
|
||||
self.node.node_seat_state().remove_pointer_grab(seat);
|
||||
seat.pointer_owner
|
||||
.owner
|
||||
.set(seat.pointer_owner.default.clone());
|
||||
|
|
@ -365,13 +367,13 @@ impl PointerOwner for DndPointerOwner {
|
|||
};
|
||||
let target = self.target.get();
|
||||
if should_drop {
|
||||
self.target.get().dnd_drop(&self.dnd);
|
||||
self.target.get().node_dnd_drop(&self.dnd);
|
||||
*seat.dropped_dnd.borrow_mut() = Some(DroppedDnd {
|
||||
dnd: self.dnd.clone(),
|
||||
});
|
||||
}
|
||||
target.dnd_leave(&self.dnd);
|
||||
target.seat_state().remove_dnd_target(seat);
|
||||
target.node_dnd_leave(&self.dnd);
|
||||
target.node_seat_state().remove_dnd_target(seat);
|
||||
if !should_drop {
|
||||
if let Some(src) = &self.dnd.src {
|
||||
ipc::detach_seat::<WlDataDevice>(src);
|
||||
|
|
@ -407,15 +409,15 @@ impl PointerOwner for DndPointerOwner {
|
|||
};
|
||||
let (x, y) = (x.apply_fract(x_int), y.apply_fract(y_int));
|
||||
let mut target = self.target.get();
|
||||
if node.id() != target.id() {
|
||||
target.dnd_leave(&self.dnd);
|
||||
target.seat_state().remove_dnd_target(seat);
|
||||
if node.node_id() != target.node_id() {
|
||||
target.node_dnd_leave(&self.dnd);
|
||||
target.node_seat_state().remove_dnd_target(seat);
|
||||
target = node;
|
||||
target.dnd_enter(&self.dnd, x, y);
|
||||
target.seat_state().add_dnd_target(seat);
|
||||
target.node_dnd_enter(&self.dnd, x, y);
|
||||
target.node_seat_state().add_dnd_target(seat);
|
||||
self.target.set(target);
|
||||
} else if (self.pos_x.get(), self.pos_y.get()) != (x, y) {
|
||||
node.dnd_motion(&self.dnd, x, y);
|
||||
node.node_dnd_motion(&self.dnd, x, y);
|
||||
}
|
||||
self.pos_x.set(x);
|
||||
self.pos_y.set(y);
|
||||
|
|
@ -436,8 +438,8 @@ impl PointerOwner for DndPointerOwner {
|
|||
|
||||
fn cancel_dnd(&self, seat: &Rc<WlSeatGlobal>) {
|
||||
let target = self.target.get();
|
||||
target.dnd_leave(&self.dnd);
|
||||
target.seat_state().remove_dnd_target(seat);
|
||||
target.node_dnd_leave(&self.dnd);
|
||||
target.node_seat_state().remove_dnd_target(seat);
|
||||
if let Some(src) = &self.dnd.src {
|
||||
ipc::detach_seat::<WlDataDevice>(src);
|
||||
}
|
||||
|
|
@ -455,7 +457,7 @@ impl PointerOwner for DndPointerOwner {
|
|||
}
|
||||
|
||||
fn dnd_target_removed(&self, seat: &Rc<WlSeatGlobal>) {
|
||||
self.target.get().dnd_leave(&self.dnd);
|
||||
self.target.get().node_dnd_leave(&self.dnd);
|
||||
self.target.set(seat.state.root.clone());
|
||||
seat.state.tree_changed();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ impl WlPointer {
|
|||
return Ok(());
|
||||
}
|
||||
};
|
||||
if pointer_node.client_id() != Some(self.seat.client.id) {
|
||||
if pointer_node.node_client_id() != Some(self.seat.client.id) {
|
||||
return Ok(());
|
||||
}
|
||||
self.seat.global.set_app_cursor(cursor_opt);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue