Compare commits

...

6 Commits

Author SHA1 Message Date
Junkui Zhang
ce9edd7980 test 2025-05-23 21:52:46 +08:00
Junkui Zhang
d2235ae5cd test 2025-05-23 21:43:46 +08:00
Junkui Zhang
aeb2b39e00 test 2025-05-23 21:20:59 +08:00
Junkui Zhang
ed286ed1aa test x11 2025-05-22 20:38:11 +08:00
Junkui Zhang
aa0f53df5c test 2025-05-22 16:42:57 +08:00
Junkui Zhang
da715d3ab1 wtf? 2025-05-21 21:46:02 +08:00
2 changed files with 20 additions and 4 deletions

View File

@@ -1147,6 +1147,7 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
) { ) {
let mut client = this.get_client(); let mut client = this.get_client();
let mut state = client.borrow_mut(); let mut state = client.borrow_mut();
println!("Keyboard event: {event:#?}");
match event { match event {
wl_keyboard::Event::RepeatInfo { rate, delay } => { wl_keyboard::Event::RepeatInfo { rate, delay } => {
state.repeat.characters_per_second = rate as u32; state.repeat.characters_per_second = rate as u32;
@@ -1261,14 +1262,17 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
}; };
let focused_window = focused_window.clone(); let focused_window = focused_window.clone();
let keymap_state = state.keymap_state.as_ref().unwrap(); let modifiers = state.modifiers.clone();
let keymap_state = state.keymap_state.as_mut().unwrap();
let keycode = Keycode::from(key + MIN_KEYCODE); let keycode = Keycode::from(key + MIN_KEYCODE);
let keysym = keymap_state.key_get_one_sym(keycode); let keysym = keymap_state.key_get_one_sym(keycode);
println!("Key state: {key_state:?}");
match key_state { match key_state {
wl_keyboard::KeyState::Pressed if !keysym.is_modifier_key() => { wl_keyboard::KeyState::Pressed if !keysym.is_modifier_key() => {
let mut keystroke = keymap_state.update_key(keycode, xkb::KeyDirection::Down);
Keystroke::from_xkb(&keymap_state, state.modifiers, keycode); let mut keystroke = Keystroke::from_xkb(&keymap_state, modifiers, keycode);
println!("Key down: {keystroke:?}");
if let Some(mut compose) = state.compose_state.take() { if let Some(mut compose) = state.compose_state.take() {
compose.feed(keysym); compose.feed(keysym);
match compose.status() { match compose.status() {
@@ -1352,8 +1356,9 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for WaylandClientStatePtr {
focused_window.handle_input(input); focused_window.handle_input(input);
} }
wl_keyboard::KeyState::Released if !keysym.is_modifier_key() => { wl_keyboard::KeyState::Released if !keysym.is_modifier_key() => {
keymap_state.update_key(keycode, xkb::KeyDirection::Up);
let input = PlatformInput::KeyUp(KeyUpEvent { let input = PlatformInput::KeyUp(KeyUpEvent {
keystroke: Keystroke::from_xkb(keymap_state, state.modifiers, keycode), keystroke: Keystroke::from_xkb(keymap_state, modifiers, keycode),
}); });
if state.repeat.current_keycode == Some(keycode) { if state.repeat.current_keycode == Some(keycode) {
@@ -1391,6 +1396,7 @@ impl Dispatch<zwp_text_input_v3::ZwpTextInputV3, ()> for WaylandClientStatePtr {
this.disable_ime(); this.disable_ime();
} }
zwp_text_input_v3::Event::CommitString { text } => { zwp_text_input_v3::Event::CommitString { text } => {
println!(" zwp_text_input_v3::Event::CommitString {text:?}");
state.composing = false; state.composing = false;
let Some(window) = state.keyboard_focused_window.clone() else { let Some(window) = state.keyboard_focused_window.clone() else {
return; return;
@@ -1427,6 +1433,7 @@ impl Dispatch<zwp_text_input_v3::ZwpTextInputV3, ()> for WaylandClientStatePtr {
if let Some(text) = state.ime_pre_edit.take() { if let Some(text) = state.ime_pre_edit.take() {
drop(state); drop(state);
println!("zwp_text_input_v3::Event::PreeditString {text:?}");
window.handle_ime(ImeInput::SetMarkedText(text)); window.handle_ime(ImeInput::SetMarkedText(text));
if let Some(area) = window.get_ime_area() { if let Some(area) = window.get_ime_area() {
text_input.set_cursor_rectangle( text_input.set_cursor_rectangle(
@@ -1593,6 +1600,7 @@ impl Dispatch<wl_pointer::WlPointer, ()> for WaylandClientStatePtr {
{ {
compose.reset(); compose.reset();
drop(state); drop(state);
println!("wl_pointer::ButtonState::Pressed {}", text);
window.handle_ime(ImeInput::InsertText(text)); window.handle_ime(ImeInput::InsertText(text));
state = client.borrow_mut(); state = client.borrow_mut();
} }

View File

@@ -569,6 +569,7 @@ impl X11Client {
let xim_connected = xim_handler.connected; let xim_connected = xim_handler.connected;
drop(state); drop(state);
println!("XIM event: {:#?}", event);
let xim_filtered = match ximc.filter_event(&event, &mut xim_handler) { let xim_filtered = match ximc.filter_event(&event, &mut xim_handler) {
Ok(handled) => handled, Ok(handled) => handled,
Err(err) => { Err(err) => {
@@ -841,6 +842,7 @@ impl X11Client {
) )
}; };
state.xkb = xkb_state; state.xkb = xkb_state;
println!("X11 new keyboard notify");
} }
Event::XkbStateNotify(event) => { Event::XkbStateNotify(event) => {
let mut state = self.0.borrow_mut(); let mut state = self.0.borrow_mut();
@@ -860,6 +862,7 @@ impl X11Client {
locked_layout: event.locked_group.into(), locked_layout: event.locked_group.into(),
}; };
println!("X11 xkb state notify: {:?}", event);
if new_layout != old_layout { if new_layout != old_layout {
if let Some(mut callback) = state.common.callbacks.keyboard_layout_change.take() if let Some(mut callback) = state.common.callbacks.keyboard_layout_change.take()
{ {
@@ -886,6 +889,7 @@ impl X11Client {
} }
} }
Event::KeyPress(event) => { Event::KeyPress(event) => {
println!("KeyPress event: {:?}", event);
let window = self.get_window(event.event)?; let window = self.get_window(event.event)?;
let mut state = self.0.borrow_mut(); let mut state = self.0.borrow_mut();
@@ -895,6 +899,7 @@ impl X11Client {
let keystroke = { let keystroke = {
let code = event.detail.into(); let code = event.detail.into();
let xkb_state = state.previous_xkb_state.clone(); let xkb_state = state.previous_xkb_state.clone();
state.xkb.update_key(code, xkbc::KeyDirection::Down);
state.xkb.update_mask( state.xkb.update_mask(
event.state.bits() as ModMask, event.state.bits() as ModMask,
0, 0,
@@ -954,6 +959,7 @@ impl X11Client {
})); }));
} }
Event::KeyRelease(event) => { Event::KeyRelease(event) => {
println!("KeyRelease event: {:?}", event);
let window = self.get_window(event.event)?; let window = self.get_window(event.event)?;
let mut state = self.0.borrow_mut(); let mut state = self.0.borrow_mut();
@@ -963,6 +969,7 @@ impl X11Client {
let keystroke = { let keystroke = {
let code = event.detail.into(); let code = event.detail.into();
let xkb_state = state.previous_xkb_state.clone(); let xkb_state = state.previous_xkb_state.clone();
state.xkb.update_key(code, xkbc::KeyDirection::Up);
state.xkb.update_mask( state.xkb.update_mask(
event.state.bits() as ModMask, event.state.bits() as ModMask,
0, 0,
@@ -1242,6 +1249,7 @@ impl X11Client {
let mut xim_handler = state.xim_handler.take().unwrap(); let mut xim_handler = state.xim_handler.take().unwrap();
state.composing = !text.is_empty(); state.composing = !text.is_empty();
drop(state); drop(state);
println!("xim_handle_preedit: {}", text);
window.handle_ime_preedit(text); window.handle_ime_preedit(text);
if let Some(area) = window.get_ime_area() { if let Some(area) = window.get_ime_area() {