diff options
Diffstat (limited to 'x11-terms/wezterm/files')
6 files changed, 577 insertions, 0 deletions
diff --git a/x11-terms/wezterm/files/wezterm-20221119-vendored-sources.patch b/x11-terms/wezterm/files/wezterm-20221119-vendored-sources.patch new file mode 100644 index 000000000000..dee994d4675d --- /dev/null +++ b/x11-terms/wezterm/files/wezterm-20221119-vendored-sources.patch @@ -0,0 +1,13 @@ +--- wezterm-20221119-145034-49b9839f-orig/.cargo/config 2022-11-20 08:50:34.000000000 +1100 ++++ wezterm-20221119-145034-49b9839f/.cargo/config 2022-11-23 20:26:40.035751458 +1100 +@@ -7,3 +7,10 @@ + # enabled for the target, so let's turn that on here. + [target.x86_64-pc-windows-msvc] + rustflags = "-C target-feature=+crt-static" ++ ++[source."https://github.com/wez/libssh-rs.git"] ++git = "https://github.com/wez/libssh-rs.git" ++replace-with = "vendored-sources" ++ ++[source.vendored-sources] ++directory = "deps/crates" diff --git a/x11-terms/wezterm/files/wezterm-20221119-xcb-imdkit.patch b/x11-terms/wezterm/files/wezterm-20221119-xcb-imdkit.patch new file mode 100644 index 000000000000..9eab22ce7231 --- /dev/null +++ b/x11-terms/wezterm/files/wezterm-20221119-xcb-imdkit.patch @@ -0,0 +1,11 @@ +--- wezterm-20221119-145034-49b9839f-orig/window/Cargo.toml 2022-11-20 08:50:34.000000000 +1100 ++++ wezterm-20221119-145034-49b9839f/window/Cargo.toml 2022-11-23 23:12:42.239159069 +1100 +@@ -78,7 +78,7 @@ + wayland-protocols = {version="0.29", optional=true} + wayland-client = {version="0.29", optional=true} + wayland-egl = {version="0.29", optional=true} +-xcb-imdkit = { version="0.2", git="https://github.com/wez/xcb-imdkit-rs.git", branch="waiting-on-release"} ++xcb-imdkit = {version="0.1.2"} + serde = {version="1.0", features = ["derive"]} + zbus = "3.0" + zvariant = "3.6" diff --git a/x11-terms/wezterm/files/wezterm-20221119-xcb.patch b/x11-terms/wezterm/files/wezterm-20221119-xcb.patch new file mode 100644 index 000000000000..606f12040411 --- /dev/null +++ b/x11-terms/wezterm/files/wezterm-20221119-xcb.patch @@ -0,0 +1,9 @@ +--- wezterm-20221119-145034-49b9839f-orig/Cargo.toml 2022-11-20 08:50:34.000000000 +1100 ++++ wezterm-20221119-145034-49b9839f/Cargo.toml 2022-11-23 20:25:13.624137781 +1100 +@@ -23,6 +23,3 @@ + # https://jakedeichert.com/blog/reducing-rust-incremental-compilation-times-on-macos-by-70-percent/ + # Disabled because it breaks builds on Windows + #split-debuginfo = "unpacked" +- +-[patch.crates-io] +-xcb = {version="1.1.1", git="https://github.com/rust-x-bindings/rust-xcb", rev="a85a4cf8937898b1da972367df4648143ede38ea"} diff --git a/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p1.patch b/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p1.patch new file mode 100644 index 000000000000..c6ad621a0431 --- /dev/null +++ b/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p1.patch @@ -0,0 +1,408 @@ +commit 605f9ed36f2c9a514120d1b1b963b48ea3062280 +Author: Wez Furlong <wez@wezfurlong.org> +Date: Sat May 7 14:12:02 2022 -0700 + + Update for xcb 1.1 + + The API changed quite substantially (and for the better!). + This commit is adjusting for that. + + There's a wart that I hope will be tackled upstream in + https://github.com/rust-x-bindings/rust-xcb/issues/188 + +diff --git a/examples/example.rs b/examples/example.rs +index 5262247..3feea8c 100644 +--- a/examples/example.rs ++++ b/examples/example.rs +@@ -1,36 +1,31 @@ + use std::sync::Arc; ++use xcb::x::{Cw, EventMask, Window}; ++use xcb::Event; + use xcb_imdkit::{ImeClient, InputStyle}; + +-fn create_window(connection: Arc<xcb::Connection>, screen: &xcb::Screen) -> u32 { +- let w = connection.generate_id(); +- let mask = xcb::EVENT_MASK_KEY_PRESS +- | xcb::EVENT_MASK_KEY_RELEASE +- | xcb::EVENT_MASK_FOCUS_CHANGE +- | xcb::EVENT_MASK_VISIBILITY_CHANGE +- | xcb::EVENT_MASK_STRUCTURE_NOTIFY; +- let values = [ +- (xcb::CW_BACK_PIXEL, screen.white_pixel()), +- (xcb::CW_EVENT_MASK, mask), +- ]; +- xcb::create_window( +- &connection, +- xcb::COPY_FROM_PARENT as u8, +- w, +- screen.root(), +- 0, +- 0, +- 400, +- 400, +- 10, +- xcb::WINDOW_CLASS_INPUT_OUTPUT as u16, +- screen.root_visual(), +- &values, +- ); +- xcb::map_window(&connection, w); +- unsafe { +- xcb::ffi::xcb_flush(connection.get_raw_conn()); +- } +- w ++fn create_window(connection: Arc<xcb::Connection>, screen: &xcb::x::Screen) -> Window { ++ let wid = connection.generate_id(); ++ let mask = EventMask::KEY_PRESS ++ | EventMask::KEY_RELEASE ++ | EventMask::FOCUS_CHANGE ++ | EventMask::VISIBILITY_CHANGE ++ | EventMask::STRUCTURE_NOTIFY; ++ connection.send_request(&xcb::x::CreateWindow { ++ depth: xcb::x::COPY_FROM_PARENT as u8, ++ wid, ++ parent: screen.root(), ++ x: 0, ++ y: 0, ++ width: 400, ++ height: 400, ++ border_width: 10, ++ class: xcb::x::WindowClass::InputOutput, ++ visual: screen.root_visual(), ++ value_list: &[Cw::BackPixel(screen.white_pixel()), Cw::EventMask(mask)], ++ }); ++ connection.send_request(&xcb::x::MapWindow { window: wid }); ++ connection.flush().unwrap(); ++ wid + } + + fn main() { +@@ -49,23 +44,9 @@ fn main() { + InputStyle::PREEDIT_CALLBACKS, + None, + ); +- ime.set_commit_string_cb(|win, input| println!("Win {}, got: {}", win, input)); ++ ime.set_commit_string_cb(|win, input| println!("Win {:?}, got: {}", win, input)); + ime.set_forward_event_cb(|win, e| { +- dbg!( +- win, +- e.response_type(), +- e.detail(), +- e.time(), +- e.root(), +- e.event(), +- e.child(), +- e.root_x(), +- e.root_y(), +- e.event_x(), +- e.event_y(), +- e.state(), +- e.same_screen(), +- ); ++ eprintln!("win={:?} {:?}", win, e); + }); + ime.set_preedit_draw_cb(|win, info| { + dbg!(win, info); +@@ -79,22 +60,16 @@ fn main() { + let mut focus_win = wins[0]; + let mut n = 0; + loop { +- let event = connection.wait_for_event(); +- if event.is_none() { +- break; +- } +- let event = event.unwrap(); +- dbg!(event.response_type()); +- +- let event_type = event.response_type() & !0x80; +- if xcb::FOCUS_IN == event_type { +- let event: &xcb::FocusInEvent = unsafe { xcb::cast_event(&event) }; +- focus_win = event.event(); +- ime.update_pos(focus_win, 0, 0); +- } +- +- if xcb::CONFIGURE_NOTIFY == event_type { +- ime.update_pos(focus_win, 0, 0); ++ let event = dbg!(connection.wait_for_event().unwrap()); ++ match &event { ++ Event::X(xcb::x::Event::FocusIn(event)) => { ++ focus_win = event.event(); ++ ime.update_pos(focus_win, 0, 0); ++ } ++ Event::X(xcb::x::Event::ConfigureNotify(_)) => { ++ ime.update_pos(focus_win, 0, 0); ++ } ++ _ => {} + } + + println!(">>>>{}>>>>", n); +diff --git a/src/clib.rs b/src/clib.rs +index 6996380..55dbde0 100644 +--- a/src/clib.rs ++++ b/src/clib.rs +@@ -26,4 +26,3 @@ impl Default for xcb_xim_im_callback { + } + } + } +- +diff --git a/src/lib.rs b/src/lib.rs +index f9b56c8..b966a38 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -15,6 +15,8 @@ extern crate lazy_static; + use std::os::raw::{c_char, c_void}; + use std::pin::Pin; + use std::sync::{Arc, Mutex}; ++use xcb::x::Window; ++use xcb::{Event, Raw, Xid, XidNew}; + + use bitflags::bitflags; + +@@ -49,6 +51,60 @@ extern "C" fn create_ic_callback(im: *mut xcb_xim_t, new_ic: xcb_xic_t, user_dat + } + } + ++fn raw_event(event: &Event) -> Option<*mut xcb::ffi::xcb_generic_event_t> { ++ match event { ++ Event::X(xcb::x::Event::KeyPress(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::KeyRelease(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ButtonPress(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ButtonRelease(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::MotionNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::EnterNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::LeaveNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::FocusIn(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::FocusOut(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::KeymapNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::Expose(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::GraphicsExposure(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::NoExposure(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::VisibilityNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::CreateNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::DestroyNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::UnmapNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::MapNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::MapRequest(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ReparentNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ConfigureNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ConfigureRequest(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::GravityNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ResizeRequest(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::CirculateNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::CirculateRequest(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::PropertyNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::SelectionClear(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::SelectionRequest(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::SelectionNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ColormapNotify(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::ClientMessage(e)) => Some(e.as_raw()), ++ Event::X(xcb::x::Event::MappingNotify(e)) => Some(e.as_raw()), ++ Event::Unknown(e) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::NewKeyboardNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::MapNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::StateNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::ControlsNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::IndicatorStateNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::IndicatorMapNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::NamesNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::CompatMapNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::BellNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::ActionMessage(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::AccessXNotify(e)) => Some(e.as_raw()), ++ Event::Xkb(xcb::xkb::Event::ExtensionDeviceNotify(e)) => Some(e.as_raw()), ++ // https://github.com/rust-x-bindings/rust-xcb/issues/188 ++ #[allow(unreachable_patterns)] ++ _ => None, ++ } ++} ++ + extern "C" fn open_callback(im: *mut xcb_xim_t, user_data: *mut c_void) { + let ime = unsafe { ime_from_user_data(user_data) }; + let input_style = ime.input_style.bits(); +@@ -121,7 +177,7 @@ extern "C" fn commit_string_callback( + ) { + let input = unsafe { xim_encoding_to_utf8(im, input, length as usize) }; + let ime = unsafe { ime_from_user_data(user_data) }; +- let win = ime.pos_req.win; ++ let win = unsafe { Window::new(ime.pos_req.win) }; + ime.callbacks.commit_string.as_mut().map(|f| f(win, &input)); + } + +@@ -135,16 +191,30 @@ extern "C" fn update_pos_callback(_im: *mut xcb_xim_t, ic: xcb_xic_t, user_data: + } + } + ++const XCB_KEY_PRESS: u8 = 2; ++const XCB_KEY_RELEASE: u8 = 3; ++ + extern "C" fn forward_event_callback( + _im: *mut xcb_xim_t, + _ic: xcb_xic_t, + event: *mut xcb_key_press_event_t, + user_data: *mut c_void, + ) { +- let ptr = event as *const xcb::ffi::xcb_key_press_event_t; +- let event = xcb::KeyPressEvent { ptr: ptr as _ }; ++ let pressed = unsafe { ((*event).response_type & 0x7f) == XCB_KEY_PRESS }; ++ let ptr = event as *const xcb::ffi::xcb_generic_event_t; ++ let event = unsafe { ++ if pressed { ++ xcb::Event::X(xcb::x::Event::KeyPress(xcb::x::KeyPressEvent::from_raw( ++ ptr as _, ++ ))) ++ } else { ++ xcb::Event::X(xcb::x::Event::KeyRelease( ++ xcb::x::KeyReleaseEvent::from_raw(ptr as _), ++ )) ++ } ++ }; + let ime = unsafe { ime_from_user_data(user_data) }; +- let win = ime.pos_req.win; ++ let win = unsafe { Window::new(ime.pos_req.win) }; + ime.callbacks.forward_event.as_mut().map(|f| f(win, &event)); + + // xcb::KeyPressEvent has a Drop impl that will free `event`, but since we don't own it, we +@@ -154,7 +224,7 @@ extern "C" fn forward_event_callback( + + extern "C" fn preedit_start_callback(_im: *mut xcb_xim_t, _ic: xcb_xic_t, user_data: *mut c_void) { + let ime = unsafe { ime_from_user_data(user_data) }; +- let win = ime.pos_req.win; ++ let win = unsafe { Window::new(ime.pos_req.win) }; + ime.callbacks.preedit_start.as_mut().map(|f| f(win)); + } + +@@ -167,7 +237,7 @@ extern "C" fn preedit_draw_callback( + let frame = unsafe { &*frame }; + let preedit_info = PreeditInfo { inner: frame, im }; + let ime = unsafe { ime_from_user_data(user_data) }; +- let win = ime.pos_req.win; ++ let win = unsafe { Window::new(ime.pos_req.win) }; + ime.callbacks + .preedit_draw + .as_mut() +@@ -176,7 +246,7 @@ extern "C" fn preedit_draw_callback( + + extern "C" fn preedit_done_callback(_im: *mut xcb_xim_t, _ic: xcb_xic_t, user_data: *mut c_void) { + let ime = unsafe { ime_from_user_data(user_data) }; +- let win = ime.pos_req.win; ++ let win = unsafe { Window::new(ime.pos_req.win) }; + ime.callbacks.preedit_done.as_mut().map(|f| f(win)); + } + +@@ -195,10 +265,10 @@ bitflags! { + } + } + +-type StringCB = dyn for<'a> FnMut(u32, &'a str); +-type KeyPressCB = dyn for<'a> FnMut(u32, &'a xcb::KeyPressEvent); +-type PreeditDrawCB = dyn for<'a> FnMut(u32, PreeditInfo<'a>); +-type NotifyCB = dyn FnMut(u32); ++type StringCB = dyn for<'a> FnMut(Window, &'a str); ++type KeyPressCB = dyn for<'a> FnMut(Window, &'a xcb::Event); ++type PreeditDrawCB = dyn for<'a> FnMut(Window, PreeditInfo<'a>); ++type NotifyCB = dyn FnMut(Window); + + #[derive(Default)] + struct Callbacks { +@@ -403,24 +473,29 @@ impl ImeClient { + /// [`set_forward_event_cb`]: ImeClient::set_forward_event_cb + /// [`set_commit_string_cb`]: ImeClient::set_commit_string_cb + /// [`set_preedit_draw_cb`]: ImeClient::set_preedit_draw_cb +- pub fn process_event(&mut self, event: &xcb::GenericEvent) -> bool { +- if !unsafe { xcb_xim_filter_event(self.im, event.ptr as _) } { +- let mask = event.response_type() & !0x80; +- if (mask == xcb::ffi::XCB_KEY_PRESS) || (mask == xcb::ffi::XCB_KEY_RELEASE) { +- match self.ic { +- Some(ic) => { +- unsafe { +- xcb_xim_forward_event(self.im, ic, event.ptr as _); ++ pub fn process_event(&mut self, event: &xcb::Event) -> bool { ++ match raw_event(event) { ++ None => false, ++ Some(raw) => { ++ if !unsafe { xcb_xim_filter_event(self.im, raw as _) } { ++ let mask = unsafe { (*raw).response_type & !0x80 }; ++ if (mask == XCB_KEY_PRESS) || (mask == XCB_KEY_RELEASE) { ++ match self.ic { ++ Some(ic) => { ++ unsafe { ++ xcb_xim_forward_event(self.im, ic, raw as _); ++ } ++ return true; ++ } ++ _ => { ++ self.try_open_ic(); ++ } + } +- return true; +- } +- _ => { +- self.try_open_ic(); + } + } ++ false + } + } +- false + } + + /// Set the position at which to place the IME window. +@@ -431,8 +506,12 @@ impl ImeClient { + /// Return `true` if an update for the IME window position has been sent to the IME, `false` if + /// the update has been queued. If there is still an update request queued and this method is + /// called, the previously queued request is discarded in favor of the new one. +- pub fn update_pos(&mut self, win: u32, x: i16, y: i16) -> bool { +- self.pos_req = ImePos { win, x, y }; ++ pub fn update_pos(&mut self, win: Window, x: i16, y: i16) -> bool { ++ self.pos_req = ImePos { ++ win: win.resource_id(), ++ x, ++ y, ++ }; + match self.ic { + Some(ic) => { + if self.is_processing_pos_update { +@@ -504,7 +583,7 @@ impl ImeClient { + /// [`update_pos`]: ImeClient::update_pos + pub fn set_commit_string_cb<F>(&mut self, f: F) + where +- F: for<'a> FnMut(u32, &'a str) + 'static, ++ F: for<'a> FnMut(Window, &'a str) + 'static, + { + self.callbacks.commit_string = Some(Box::new(f)); + } +@@ -520,7 +599,7 @@ impl ImeClient { + /// [`update_pos`]: ImeClient::update_pos + pub fn set_forward_event_cb<F>(&mut self, f: F) + where +- F: for<'a> FnMut(u32, &'a xcb::KeyPressEvent) + 'static, ++ F: for<'a> FnMut(Window, &'a xcb::Event) + 'static, + { + self.callbacks.forward_event = Some(Box::new(f)); + } +@@ -533,7 +612,7 @@ impl ImeClient { + /// [`update_pos`]: ImeClient::update_pos + pub fn set_preedit_start_cb<F>(&mut self, f: F) + where +- F: FnMut(u32) + 'static, ++ F: FnMut(Window) + 'static, + { + self.callbacks.preedit_start = Some(Box::new(f)); + } +@@ -547,7 +626,7 @@ impl ImeClient { + /// [`update_pos`]: ImeClient::update_pos + pub fn set_preedit_draw_cb<F>(&mut self, f: F) + where +- F: for<'a> FnMut(u32, PreeditInfo<'a>) + 'static, ++ F: for<'a> FnMut(Window, PreeditInfo<'a>) + 'static, + { + self.callbacks.preedit_draw = Some(Box::new(f)); + } +@@ -560,7 +639,7 @@ impl ImeClient { + /// [`update_pos`]: ImeClient::update_pos + pub fn set_preedit_done_cb<F>(&mut self, f: F) + where +- F: FnMut(u32) + 'static, ++ F: FnMut(Window) + 'static, + { + self.callbacks.preedit_done = Some(Box::new(f)); + } diff --git a/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p2.patch b/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p2.patch new file mode 100644 index 000000000000..ed3b7f7a67db --- /dev/null +++ b/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p2.patch @@ -0,0 +1,124 @@ +commit ede7c71b85fe2537efef6cf999a45690316211cf +Author: Wez Furlong <wez@wezfurlong.org> +Date: Sun May 8 13:51:09 2022 -0700 + + I submitted a PR to remove the as_raw wart + + refs: https://github.com/rust-x-bindings/rust-xcb/pull/190 + +diff --git a/src/lib.rs b/src/lib.rs +index b966a38..64c99cf 100644 +--- a/src/lib.rs ++++ b/src/lib.rs +@@ -16,7 +16,7 @@ use std::os::raw::{c_char, c_void}; + use std::pin::Pin; + use std::sync::{Arc, Mutex}; + use xcb::x::Window; +-use xcb::{Event, Raw, Xid, XidNew}; ++use xcb::{Raw, Xid, XidNew}; + + use bitflags::bitflags; + +@@ -51,60 +51,6 @@ extern "C" fn create_ic_callback(im: *mut xcb_xim_t, new_ic: xcb_xic_t, user_dat + } + } + +-fn raw_event(event: &Event) -> Option<*mut xcb::ffi::xcb_generic_event_t> { +- match event { +- Event::X(xcb::x::Event::KeyPress(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::KeyRelease(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ButtonPress(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ButtonRelease(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::MotionNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::EnterNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::LeaveNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::FocusIn(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::FocusOut(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::KeymapNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::Expose(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::GraphicsExposure(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::NoExposure(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::VisibilityNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::CreateNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::DestroyNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::UnmapNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::MapNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::MapRequest(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ReparentNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ConfigureNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ConfigureRequest(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::GravityNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ResizeRequest(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::CirculateNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::CirculateRequest(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::PropertyNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::SelectionClear(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::SelectionRequest(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::SelectionNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ColormapNotify(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::ClientMessage(e)) => Some(e.as_raw()), +- Event::X(xcb::x::Event::MappingNotify(e)) => Some(e.as_raw()), +- Event::Unknown(e) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::NewKeyboardNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::MapNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::StateNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::ControlsNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::IndicatorStateNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::IndicatorMapNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::NamesNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::CompatMapNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::BellNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::ActionMessage(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::AccessXNotify(e)) => Some(e.as_raw()), +- Event::Xkb(xcb::xkb::Event::ExtensionDeviceNotify(e)) => Some(e.as_raw()), +- // https://github.com/rust-x-bindings/rust-xcb/issues/188 +- #[allow(unreachable_patterns)] +- _ => None, +- } +-} +- + extern "C" fn open_callback(im: *mut xcb_xim_t, user_data: *mut c_void) { + let ime = unsafe { ime_from_user_data(user_data) }; + let input_style = ime.input_style.bits(); +@@ -474,28 +420,24 @@ impl ImeClient { + /// [`set_commit_string_cb`]: ImeClient::set_commit_string_cb + /// [`set_preedit_draw_cb`]: ImeClient::set_preedit_draw_cb + pub fn process_event(&mut self, event: &xcb::Event) -> bool { +- match raw_event(event) { +- None => false, +- Some(raw) => { +- if !unsafe { xcb_xim_filter_event(self.im, raw as _) } { +- let mask = unsafe { (*raw).response_type & !0x80 }; +- if (mask == XCB_KEY_PRESS) || (mask == XCB_KEY_RELEASE) { +- match self.ic { +- Some(ic) => { +- unsafe { +- xcb_xim_forward_event(self.im, ic, raw as _); +- } +- return true; +- } +- _ => { +- self.try_open_ic(); +- } ++ let raw = event.as_raw(); ++ if !unsafe { xcb_xim_filter_event(self.im, raw as _) } { ++ let mask = unsafe { (*raw).response_type & !0x80 }; ++ if (mask == XCB_KEY_PRESS) || (mask == XCB_KEY_RELEASE) { ++ match self.ic { ++ Some(ic) => { ++ unsafe { ++ xcb_xim_forward_event(self.im, ic, raw as _); + } ++ return true; ++ } ++ _ => { ++ self.try_open_ic(); + } + } +- false + } + } ++ false + } + + /// Set the position at which to place the IME window. diff --git a/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p3.patch b/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p3.patch new file mode 100644 index 000000000000..55656a853524 --- /dev/null +++ b/x11-terms/wezterm/files/xcb-imdkit-0.1.2-p3.patch @@ -0,0 +1,12 @@ +--- xcb-imdkit-0.1.2-orig/Cargo.toml 1970-01-01 10:00:01.000000000 +1000 ++++ xcb-imdkit-0.1.2/Cargo.toml 2022-11-24 00:25:10.925697921 +1100 +@@ -36,7 +36,8 @@ + version = "1.4.0" + + [dependencies.xcb] +-version = "0.9.0" ++version = "1.2.0" ++features = ["xkb"] + [build-dependencies.cc] + version = "1.0" + |