@@ -792,25 +792,22 @@ impl Keymap {
792
792
) where
793
793
F : FnMut ( & Keymap , Keycode ) ,
794
794
{
795
- let mut data_box: Box < ( & Keymap , F ) > = mem:: transmute ( Box :: from_raw ( data) ) ;
796
- {
797
- let ( keymap, ref mut closure) = * data_box;
798
- closure ( keymap, key. into ( ) ) ;
799
- }
800
- let _ = Box :: into_raw ( data_box) ;
795
+ let ( keymap, closure) = & mut * data. cast :: < ( & Keymap , F ) > ( ) ;
796
+ closure ( keymap, key. into ( ) ) ;
801
797
}
802
798
803
799
/// Run a specified closure for every valid keycode in the keymap.
804
800
pub fn key_for_each < F > ( & self , closure : F )
805
801
where
806
802
F : FnMut ( & Keymap , Keycode ) ,
807
803
{
808
- let data_box = Box :: new ( ( self , closure) ) ;
809
- let data_ptr = Box :: into_raw ( data_box) . cast ( ) ;
810
-
804
+ let mut data = ( self , closure) ;
811
805
unsafe {
812
- ffi:: xkb_keymap_key_for_each ( self . get_raw_ptr ( ) , Self :: callback :: < F > , data_ptr) ;
813
- mem:: drop ( Box :: from_raw ( data_ptr. cast :: < ( & Keymap , F ) > ( ) ) ) ;
806
+ ffi:: xkb_keymap_key_for_each (
807
+ self . get_raw_ptr ( ) ,
808
+ Self :: callback :: < F > ,
809
+ & mut data as * mut _ as * mut _ ,
810
+ ) ;
814
811
}
815
812
}
816
813
0 commit comments