chore: Update smithay/libcosmic
This commit is contained in:
parent
3cff426805
commit
cf75bc1952
7 changed files with 207 additions and 170 deletions
|
|
@ -47,6 +47,7 @@ use smithay::{
|
|||
GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent, MotionEvent,
|
||||
RelativeMotionEvent,
|
||||
},
|
||||
touch::{DownEvent, MotionEvent as TouchMotionEvent, UpEvent},
|
||||
Seat, SeatState,
|
||||
},
|
||||
output::Output,
|
||||
|
|
@ -1313,19 +1314,18 @@ impl State {
|
|||
let under = State::surface_under(position, &output, &mut self.common.shell)
|
||||
.map(|(target, pos)| (target, pos.as_logical()));
|
||||
|
||||
if let Some((target, pos)) = under {
|
||||
if let Some(wl_surface) = target.wl_surface() {
|
||||
let serial = SERIAL_COUNTER.next_serial();
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.down(
|
||||
serial,
|
||||
event.time_msec(),
|
||||
&wl_surface,
|
||||
position.as_logical() - pos.to_f64(),
|
||||
event.slot(),
|
||||
);
|
||||
}
|
||||
}
|
||||
let serial = SERIAL_COUNTER.next_serial();
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.down(
|
||||
self,
|
||||
under,
|
||||
&DownEvent {
|
||||
slot: event.slot(),
|
||||
location: position.as_logical(),
|
||||
serial,
|
||||
time: event.time_msec(),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
InputEvent::TouchMotion { event, .. } => {
|
||||
|
|
@ -1346,30 +1346,44 @@ impl State {
|
|||
let under = State::surface_under(position, &output, &mut self.common.shell)
|
||||
.map(|(target, pos)| (target, pos.as_logical()));
|
||||
|
||||
if let Some((_target, pos)) = under {
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.motion(
|
||||
event.time_msec(),
|
||||
event.slot(),
|
||||
position.as_logical() - pos.to_f64(),
|
||||
);
|
||||
}
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.motion(
|
||||
self,
|
||||
under,
|
||||
&TouchMotionEvent {
|
||||
slot: event.slot(),
|
||||
location: position.as_logical(),
|
||||
time: event.time_msec(),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
InputEvent::TouchUp { event, .. } => {
|
||||
if let Some(seat) = self.common.seat_with_device(&event.device()) {
|
||||
let serial = SERIAL_COUNTER.next_serial();
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.up(serial, event.time_msec(), event.slot());
|
||||
touch.up(
|
||||
self,
|
||||
&UpEvent {
|
||||
slot: event.slot(),
|
||||
time: event.time_msec(),
|
||||
serial,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
InputEvent::TouchCancel { event, .. } => {
|
||||
if let Some(seat) = self.common.seat_with_device(&event.device()) {
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.cancel();
|
||||
touch.cancel(self);
|
||||
}
|
||||
}
|
||||
InputEvent::TouchFrame { event, .. } => {
|
||||
if let Some(seat) = self.common.seat_with_device(&event.device()) {
|
||||
let touch = seat.get_touch().unwrap();
|
||||
touch.frame(self);
|
||||
}
|
||||
}
|
||||
InputEvent::TouchFrame { event: _, .. } => {}
|
||||
InputEvent::TabletToolAxis { event, .. } => {
|
||||
if let Some(seat) = self.common.seat_with_device(&event.device()).cloned() {
|
||||
let Some(output) =
|
||||
|
|
|
|||
|
|
@ -18,12 +18,6 @@ use smithay::{
|
|||
},
|
||||
input::{
|
||||
keyboard::{KeyboardTarget, KeysymHandle, ModifiersState},
|
||||
pointer::{
|
||||
AxisFrame, ButtonEvent, GestureHoldBeginEvent, GestureHoldEndEvent,
|
||||
GesturePinchBeginEvent, GesturePinchEndEvent, GesturePinchUpdateEvent,
|
||||
GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent, MotionEvent,
|
||||
PointerTarget, RelativeMotionEvent,
|
||||
},
|
||||
Seat,
|
||||
},
|
||||
output::Output,
|
||||
|
|
@ -670,11 +664,22 @@ impl KeyboardTarget<State> for CosmicSurface {
|
|||
if self.0.is_x11() {
|
||||
keys = vec![];
|
||||
}
|
||||
KeyboardTarget::enter(&self.0, seat, data, keys, serial)
|
||||
|
||||
match self.0.underlying_surface() {
|
||||
WindowSurface::Wayland(toplevel) => {
|
||||
KeyboardTarget::enter(toplevel.wl_surface(), seat, data, keys, serial)
|
||||
}
|
||||
WindowSurface::X11(x11) => KeyboardTarget::enter(x11, seat, data, keys, serial),
|
||||
}
|
||||
}
|
||||
|
||||
fn leave(&self, seat: &Seat<State>, data: &mut State, serial: smithay::utils::Serial) {
|
||||
KeyboardTarget::leave(&self.0, seat, data, serial)
|
||||
match self.0.underlying_surface() {
|
||||
WindowSurface::Wayland(toplevel) => {
|
||||
KeyboardTarget::leave(toplevel.wl_surface(), seat, data, serial)
|
||||
}
|
||||
WindowSurface::X11(x11) => KeyboardTarget::leave(x11, seat, data, serial),
|
||||
}
|
||||
}
|
||||
|
||||
fn key(
|
||||
|
|
@ -686,7 +691,14 @@ impl KeyboardTarget<State> for CosmicSurface {
|
|||
serial: smithay::utils::Serial,
|
||||
time: u32,
|
||||
) {
|
||||
KeyboardTarget::key(&self.0, seat, data, key, state, serial, time)
|
||||
match self.0.underlying_surface() {
|
||||
WindowSurface::Wayland(toplevel) => {
|
||||
KeyboardTarget::key(toplevel.wl_surface(), seat, data, key, state, serial, time)
|
||||
}
|
||||
WindowSurface::X11(x11) => {
|
||||
KeyboardTarget::key(x11, seat, data, key, state, serial, time)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn modifiers(
|
||||
|
|
@ -696,110 +708,14 @@ impl KeyboardTarget<State> for CosmicSurface {
|
|||
modifiers: ModifiersState,
|
||||
serial: smithay::utils::Serial,
|
||||
) {
|
||||
KeyboardTarget::modifiers(&self.0, seat, data, modifiers, serial)
|
||||
}
|
||||
}
|
||||
|
||||
impl PointerTarget<State> for CosmicSurface {
|
||||
fn enter(&self, seat: &Seat<State>, data: &mut State, event: &MotionEvent) {
|
||||
PointerTarget::enter(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &MotionEvent) {
|
||||
PointerTarget::motion(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn relative_motion(&self, seat: &Seat<State>, data: &mut State, event: &RelativeMotionEvent) {
|
||||
PointerTarget::relative_motion(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn button(&self, seat: &Seat<State>, data: &mut State, event: &ButtonEvent) {
|
||||
PointerTarget::button(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn axis(&self, seat: &Seat<State>, data: &mut State, frame: AxisFrame) {
|
||||
PointerTarget::axis(&self.0, seat, data, frame)
|
||||
}
|
||||
|
||||
fn frame(&self, seat: &Seat<State>, data: &mut State) {
|
||||
PointerTarget::frame(&self.0, seat, data)
|
||||
}
|
||||
|
||||
fn leave(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
serial: smithay::utils::Serial,
|
||||
time: u32,
|
||||
) {
|
||||
PointerTarget::leave(&self.0, seat, data, serial, time)
|
||||
}
|
||||
|
||||
fn gesture_swipe_begin(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GestureSwipeBeginEvent,
|
||||
) {
|
||||
PointerTarget::gesture_swipe_begin(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_swipe_update(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GestureSwipeUpdateEvent,
|
||||
) {
|
||||
PointerTarget::gesture_swipe_update(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_swipe_end(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GestureSwipeEndEvent,
|
||||
) {
|
||||
PointerTarget::gesture_swipe_end(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_pinch_begin(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GesturePinchBeginEvent,
|
||||
) {
|
||||
PointerTarget::gesture_pinch_begin(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_pinch_update(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GesturePinchUpdateEvent,
|
||||
) {
|
||||
PointerTarget::gesture_pinch_update(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_pinch_end(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GesturePinchEndEvent,
|
||||
) {
|
||||
PointerTarget::gesture_pinch_end(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_hold_begin(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &GestureHoldBeginEvent,
|
||||
) {
|
||||
PointerTarget::gesture_hold_begin(&self.0, seat, data, event)
|
||||
}
|
||||
|
||||
fn gesture_hold_end(&self, seat: &Seat<State>, data: &mut State, event: &GestureHoldEndEvent) {
|
||||
PointerTarget::gesture_hold_end(&self.0, seat, data, event)
|
||||
match self.0.underlying_surface() {
|
||||
WindowSurface::Wayland(toplevel) => {
|
||||
KeyboardTarget::modifiers(toplevel.wl_surface(), seat, data, modifiers, serial)
|
||||
}
|
||||
WindowSurface::X11(x11) => {
|
||||
KeyboardTarget::modifiers(x11, seat, data, modifiers, serial)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,12 @@ use smithay::{
|
|||
pointer::{
|
||||
AxisFrame, ButtonEvent, GestureHoldBeginEvent, GestureHoldEndEvent,
|
||||
GesturePinchBeginEvent, GesturePinchEndEvent, GesturePinchUpdateEvent,
|
||||
GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent, MotionEvent,
|
||||
PointerTarget, RelativeMotionEvent,
|
||||
GestureSwipeBeginEvent, GestureSwipeEndEvent, GestureSwipeUpdateEvent,
|
||||
MotionEvent as PointerMotionEvent, PointerTarget, RelativeMotionEvent,
|
||||
},
|
||||
touch::{
|
||||
DownEvent, MotionEvent as TouchMotionEvent, OrientationEvent, ShapeEvent, TouchTarget,
|
||||
UpEvent,
|
||||
},
|
||||
Seat,
|
||||
},
|
||||
|
|
@ -205,7 +209,7 @@ impl IsAlive for KeyboardFocusTarget {
|
|||
}
|
||||
|
||||
impl PointerTarget<State> for PointerFocusTarget {
|
||||
fn enter(&self, seat: &Seat<State>, data: &mut State, event: &MotionEvent) {
|
||||
fn enter(&self, seat: &Seat<State>, data: &mut State, event: &PointerMotionEvent) {
|
||||
if let Some(element) = self.toplevel(data) {
|
||||
for session in element.cursor_sessions() {
|
||||
session.set_cursor_pos(Some(
|
||||
|
|
@ -233,7 +237,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => PointerTarget::enter(f, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &MotionEvent) {
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &PointerMotionEvent) {
|
||||
if let Some(element) = self.toplevel(data) {
|
||||
for session in element.cursor_sessions() {
|
||||
session.set_cursor_pos(Some(
|
||||
|
|
@ -483,6 +487,92 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
}
|
||||
}
|
||||
|
||||
impl TouchTarget<State> for PointerFocusTarget {
|
||||
fn down(&self, seat: &Seat<State>, data: &mut State, event: &DownEvent, seq: Serial) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::down(surface, seat, data, event, seq)
|
||||
}
|
||||
// TODO: implement TouchTarget for iced/CosmicWindow/CosmicStack/ResizeFork/Grabs
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn up(&self, seat: &Seat<State>, data: &mut State, event: &UpEvent, seq: Serial) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::up(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &TouchMotionEvent, seq: Serial) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::motion(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn frame(&self, seat: &Seat<State>, data: &mut State, seq: Serial) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::frame(surface, seat, data, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn cancel(&self, seat: &Seat<State>, data: &mut State, seq: Serial) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::cancel(surface, seat, data, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn shape(&self, seat: &Seat<State>, data: &mut State, event: &ShapeEvent, seq: Serial) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::shape(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn orientation(
|
||||
&self,
|
||||
seat: &Seat<State>,
|
||||
data: &mut State,
|
||||
event: &OrientationEvent,
|
||||
seq: Serial,
|
||||
) {
|
||||
match self {
|
||||
PointerFocusTarget::WlSurface { surface, .. } => {
|
||||
TouchTarget::orientation(surface, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::WindowUI(_window) => {}
|
||||
PointerFocusTarget::StackUI(_stack) => {}
|
||||
PointerFocusTarget::ResizeFork(_fork) => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl KeyboardTarget<State> for KeyboardFocusTarget {
|
||||
fn enter(
|
||||
&self,
|
||||
|
|
@ -498,7 +588,7 @@ impl KeyboardTarget<State> for KeyboardFocusTarget {
|
|||
}
|
||||
KeyboardFocusTarget::Group(_) => {}
|
||||
KeyboardFocusTarget::LayerSurface(l) => {
|
||||
KeyboardTarget::enter(l, seat, data, keys, serial)
|
||||
KeyboardTarget::enter(l.wl_surface(), seat, data, keys, serial)
|
||||
}
|
||||
KeyboardFocusTarget::Popup(p) => {
|
||||
KeyboardTarget::enter(p.wl_surface(), seat, data, keys, serial)
|
||||
|
|
@ -513,7 +603,9 @@ impl KeyboardTarget<State> for KeyboardFocusTarget {
|
|||
KeyboardFocusTarget::Element(w) => KeyboardTarget::leave(w, seat, data, serial),
|
||||
KeyboardFocusTarget::Fullscreen(w) => KeyboardTarget::leave(w, seat, data, serial),
|
||||
KeyboardFocusTarget::Group(_) => {}
|
||||
KeyboardFocusTarget::LayerSurface(l) => KeyboardTarget::leave(l, seat, data, serial),
|
||||
KeyboardFocusTarget::LayerSurface(l) => {
|
||||
KeyboardTarget::leave(l.wl_surface(), seat, data, serial)
|
||||
}
|
||||
KeyboardFocusTarget::Popup(p) => {
|
||||
KeyboardTarget::leave(p.wl_surface(), seat, data, serial)
|
||||
}
|
||||
|
|
@ -540,7 +632,7 @@ impl KeyboardTarget<State> for KeyboardFocusTarget {
|
|||
}
|
||||
KeyboardFocusTarget::Group(_) => {}
|
||||
KeyboardFocusTarget::LayerSurface(l) => {
|
||||
KeyboardTarget::key(l, seat, data, key, state, serial, time)
|
||||
KeyboardTarget::key(l.wl_surface(), seat, data, key, state, serial, time)
|
||||
}
|
||||
KeyboardFocusTarget::Popup(p) => {
|
||||
KeyboardTarget::key(p.wl_surface(), seat, data, key, state, serial, time)
|
||||
|
|
@ -566,7 +658,7 @@ impl KeyboardTarget<State> for KeyboardFocusTarget {
|
|||
}
|
||||
KeyboardFocusTarget::Group(_) => {}
|
||||
KeyboardFocusTarget::LayerSurface(l) => {
|
||||
KeyboardTarget::modifiers(l, seat, data, modifiers, serial)
|
||||
KeyboardTarget::modifiers(l.wl_surface(), seat, data, modifiers, serial)
|
||||
}
|
||||
KeyboardFocusTarget::Popup(p) => {
|
||||
KeyboardTarget::modifiers(p.wl_surface(), seat, data, modifiers, serial)
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ impl CompositorHandler for State {
|
|||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
fn commit(&mut self, surface: &WlSurface) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ use std::cell::RefCell;
|
|||
impl SeatHandler for State {
|
||||
type KeyboardFocus = KeyboardFocusTarget;
|
||||
type PointerFocus = PointerFocusTarget;
|
||||
type TouchFocus = PointerFocusTarget;
|
||||
|
||||
fn seat_state(&mut self) -> &mut SeatState<Self> {
|
||||
&mut self.common.seat_state
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue