Skip to content

Commit adc930d

Browse files
chore: when keyboard enter the surface, we should also update surface (#318)
resolve: #317 We forgot the handle the keyboard enter event
1 parent 80b043f commit adc930d

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

layershellev/src/lib.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1623,10 +1623,11 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
16231623
use keyboard::*;
16241624
use xkb_keyboard::ElementState;
16251625
let surface_id = state.current_surface_id();
1626-
let keyboard_state = state.keyboard_state.as_mut().unwrap();
1626+
16271627
match event {
16281628
wl_keyboard::Event::Keymap { format, fd, size } => match format {
16291629
WEnum::Value(KeymapFormat::XkbV1) => {
1630+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
16301631
let context = &mut keyboard_state.xkb_context;
16311632
context.set_keymap_from_fd(fd, size as usize)
16321633
}
@@ -1635,12 +1636,15 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
16351636
}
16361637
_ => unreachable!(),
16371638
},
1638-
wl_keyboard::Event::Enter { .. } => {
1639+
wl_keyboard::Event::Enter { surface, .. } => {
1640+
state.update_current_surface(Some(surface));
1641+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
16391642
if let Some(token) = keyboard_state.repeat_token.take() {
16401643
state.to_remove_tokens.push(token);
16411644
}
16421645
}
16431646
wl_keyboard::Event::Leave { .. } => {
1647+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
16441648
keyboard_state.current_repeat = None;
16451649
state.message.push((
16461650
surface_id,
@@ -1666,6 +1670,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
16661670
return;
16671671
}
16681672
};
1673+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
16691674
let key = key + 8;
16701675
if let Some(mut key_context) = keyboard_state.xkb_context.key_context() {
16711676
let event = key_context.process_key_event(key, pressed_state, false);
@@ -1727,6 +1732,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
17271732
group,
17281733
..
17291734
} => {
1735+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
17301736
let xkb_context = &mut keyboard_state.xkb_context;
17311737
let xkb_state = match xkb_context.state_mut() {
17321738
Some(state) => state,
@@ -1741,6 +1747,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
17411747
))
17421748
}
17431749
wl_keyboard::Event::RepeatInfo { rate, delay } => {
1750+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
17441751
keyboard_state.repeat_info = if rate == 0 {
17451752
// Stop the repeat once we get a disable event.
17461753
keyboard_state.current_repeat = None;

sessionlockev/src/lib.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -847,10 +847,11 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
847847
use keyboard::*;
848848
use xkb_keyboard::ElementState;
849849
let surface_id = state.current_surface_id();
850-
let keyboard_state = state.keyboard_state.as_mut().unwrap();
850+
851851
match event {
852852
wl_keyboard::Event::Keymap { format, fd, size } => match format {
853853
WEnum::Value(KeymapFormat::XkbV1) => {
854+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
854855
let context = &mut keyboard_state.xkb_context;
855856
context.set_keymap_from_fd(fd, size as usize)
856857
}
@@ -859,12 +860,15 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
859860
}
860861
_ => unreachable!(),
861862
},
862-
wl_keyboard::Event::Enter { .. } => {
863+
wl_keyboard::Event::Enter { surface, .. } => {
864+
state.update_current_surface(Some(surface));
865+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
863866
if let Some(token) = keyboard_state.repeat_token.take() {
864867
state.to_remove_tokens.push(token);
865868
}
866869
}
867870
wl_keyboard::Event::Leave { .. } => {
871+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
868872
keyboard_state.current_repeat = None;
869873
state.message.push((
870874
surface_id,
@@ -889,6 +893,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
889893
return;
890894
}
891895
};
896+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
892897
let key = key + 8;
893898
if let Some(mut key_context) = keyboard_state.xkb_context.key_context() {
894899
let event = key_context.process_key_event(key, pressed_state, false);
@@ -950,6 +955,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
950955
group,
951956
..
952957
} => {
958+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
953959
let xkb_context = &mut keyboard_state.xkb_context;
954960
let xkb_state = match xkb_context.state_mut() {
955961
Some(state) => state,
@@ -964,6 +970,7 @@ impl<T> Dispatch<wl_keyboard::WlKeyboard, ()> for WindowState<T> {
964970
))
965971
}
966972
wl_keyboard::Event::RepeatInfo { rate, delay } => {
973+
let keyboard_state = state.keyboard_state.as_mut().unwrap();
967974
keyboard_state.repeat_info = if rate == 0 {
968975
// Stop the repeat once we get a disable event.
969976
keyboard_state.current_repeat = None;

0 commit comments

Comments
 (0)