* Update SCTK to 0.11.0
Updates smithay-client-toolkit to 0.11.0. The major highlight
of that updated, is update of wayland-rs to 0.27.0. Switching
to wayland-cursor, instead of using libwayland-cursor. It
also fixes the following bugs:
- Disabled repeat rate not being handled.
- Decoration buttons not working after tty switch.
- Scaling not being applied on output reenable.
- Crash when `XCURSOR_SIZE` is `0`.
- Pointer getting created in some cases without pointer capability.
- On kwin, fix space between window and decorations on startup.
- Incorrect size event when entering fullscreen when using
client side decorations.
- Client side decorations not being hided properly in fullscreen.
- Size tracking between fullscreen/tiled state changes.
- Repeat rate triggering multiple times from slow callback handler.
- Resizable attribute not being applied properly on startup.
- Not working IME
Besides those fixes it also adds a bunch of missing virtual key codes,
implements proper cursor grabbing, adds right click on decorations
to open application menu, disabled maximize button for non-resizeable
window, and fall back for cursor icon to similar ones, if the requested
is missing.
It also adds new methods to a `Theme` trait, such as:
- `title_font(&self) -> Option<(String, f32)>` - The font for a title.
- `title_color(&self, window_active: bool) -> [u8; 4]` - The color of
the text in the title.
Fixes #1680.
Fixes #1678.
Fixes #1676.
Fixes #1646.
Fixes #1614.
Fixes #1601.
Fixes #1533.
Fixes #1509.
Fixes #952.
Fixes #947.
74 lines
2.1 KiB
Rust
74 lines
2.1 KiB
Rust
//! Data which is used in pointer callbacks.
|
|
|
|
use std::cell::{Cell, RefCell};
|
|
use std::rc::Rc;
|
|
|
|
use sctk::reexports::client::protocol::wl_surface::WlSurface;
|
|
use sctk::reexports::client::Attached;
|
|
use sctk::reexports::protocols::unstable::pointer_constraints::v1::client::zwp_pointer_constraints_v1::{ZwpPointerConstraintsV1};
|
|
use sctk::reexports::protocols::unstable::pointer_constraints::v1::client::zwp_confined_pointer_v1::ZwpConfinedPointerV1;
|
|
|
|
use crate::event::{ModifiersState, TouchPhase};
|
|
|
|
/// A data being used by pointer handlers.
|
|
pub(super) struct PointerData {
|
|
/// Winit's surface the pointer is currently over.
|
|
pub surface: Option<WlSurface>,
|
|
|
|
/// Current modifiers state.
|
|
///
|
|
/// This refers a state of modifiers from `WlKeyboard` on
|
|
/// the given seat.
|
|
pub modifiers_state: Rc<RefCell<ModifiersState>>,
|
|
|
|
/// Pointer constraints.
|
|
pub pointer_constraints: Option<Attached<ZwpPointerConstraintsV1>>,
|
|
|
|
pub confined_pointer: Rc<RefCell<Option<ZwpConfinedPointerV1>>>,
|
|
|
|
/// A latest event serial.
|
|
pub latest_serial: Rc<Cell<u32>>,
|
|
|
|
/// The currently accumulated axis data on a pointer.
|
|
pub axis_data: AxisData,
|
|
}
|
|
|
|
impl PointerData {
|
|
pub fn new(
|
|
confined_pointer: Rc<RefCell<Option<ZwpConfinedPointerV1>>>,
|
|
pointer_constraints: Option<Attached<ZwpPointerConstraintsV1>>,
|
|
modifiers_state: Rc<RefCell<ModifiersState>>,
|
|
) -> Self {
|
|
Self {
|
|
surface: None,
|
|
latest_serial: Rc::new(Cell::new(0)),
|
|
confined_pointer,
|
|
modifiers_state,
|
|
pointer_constraints,
|
|
axis_data: AxisData::new(),
|
|
}
|
|
}
|
|
}
|
|
|
|
/// Axis data.
|
|
#[derive(Clone, Copy)]
|
|
pub(super) struct AxisData {
|
|
/// Current state of the axis.
|
|
pub axis_state: TouchPhase,
|
|
|
|
/// A buffer for `PixelDelta` event.
|
|
pub axis_buffer: Option<(f32, f32)>,
|
|
|
|
/// A buffer for `LineDelta` event.
|
|
pub axis_discrete_buffer: Option<(f32, f32)>,
|
|
}
|
|
|
|
impl AxisData {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
axis_state: TouchPhase::Ended,
|
|
axis_buffer: None,
|
|
axis_discrete_buffer: None,
|
|
}
|
|
}
|
|
}
|