1
0
Fork 0
forked from wry/wry

autocommit 2022-04-12 17:26:33 CEST

This commit is contained in:
Julian Orth 2022-04-12 17:26:33 +02:00
parent d9d1addbf5
commit 8924936079
26 changed files with 896 additions and 543 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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();
}

View file

@ -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);