stack: Remember previous position during focus navigation
This commit is contained in:
parent
e6f563d04e
commit
e116f20396
6 changed files with 137 additions and 73 deletions
|
|
@ -18,7 +18,7 @@ use smithay::{
|
|||
},
|
||||
output::Output,
|
||||
reexports::{input::Device as InputDevice, wayland_server::DisplayHandle},
|
||||
utils::{Buffer, IsAlive, Monotonic, Point, Rectangle, Time, Transform},
|
||||
utils::{Buffer, IsAlive, Monotonic, Point, Rectangle, Serial, Time, Transform},
|
||||
wayland::compositor::with_states,
|
||||
};
|
||||
use tracing::warn;
|
||||
|
|
@ -172,6 +172,9 @@ struct ActiveOutput(pub Mutex<Output>);
|
|||
/// The output which currently has keyboard focus
|
||||
struct FocusedOutput(pub Mutex<Option<Output>>);
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct LastModifierChange(pub Mutex<Option<Serial>>);
|
||||
|
||||
pub fn create_seat(
|
||||
dh: &DisplayHandle,
|
||||
seat_state: &mut SeatState<State>,
|
||||
|
|
@ -186,6 +189,7 @@ pub fn create_seat(
|
|||
userdata.insert_if_missing(SupressedKeys::default);
|
||||
userdata.insert_if_missing(SupressedButtons::default);
|
||||
userdata.insert_if_missing(ModifiersShortcutQueue::default);
|
||||
userdata.insert_if_missing(LastModifierChange::default);
|
||||
userdata.insert_if_missing_threadsafe(SeatMoveGrabState::default);
|
||||
userdata.insert_if_missing_threadsafe(SeatMenuGrabState::default);
|
||||
userdata.insert_if_missing_threadsafe(CursorState::default);
|
||||
|
|
@ -241,6 +245,7 @@ pub trait SeatExt {
|
|||
fn supressed_keys(&self) -> &SupressedKeys;
|
||||
fn supressed_buttons(&self) -> &SupressedButtons;
|
||||
fn modifiers_shortcut_queue(&self) -> &ModifiersShortcutQueue;
|
||||
fn last_modifier_change(&self) -> Option<Serial>;
|
||||
|
||||
fn cursor_geometry(
|
||||
&self,
|
||||
|
|
@ -315,6 +320,16 @@ impl SeatExt for Seat<State> {
|
|||
self.user_data().get::<ModifiersShortcutQueue>().unwrap()
|
||||
}
|
||||
|
||||
fn last_modifier_change(&self) -> Option<Serial> {
|
||||
*self
|
||||
.user_data()
|
||||
.get::<LastModifierChange>()
|
||||
.unwrap()
|
||||
.0
|
||||
.lock()
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn cursor_geometry(
|
||||
&self,
|
||||
loc: impl Into<Point<f64, Buffer>>,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue