Narsil / rdev

Simple library to listen and send events to keyboard and mouse (MacOS, Windows, Linux)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

captured variable in a `Fn` closure cannot assign

yaojiu19 opened this issue · comments

when i use grab, i cant modify environment variable;

let mut button_right_act= false;
let mut is_block = false;
rdev::grab(move |event| {
    match event.event_type {
        EventType::ButtonPress(button) => {
            match button {
                Button::Right => {
                    button_right_act = true;
                    is_block = false;
                },
                _ => {}
            }
        },
        EventType::ButtonRelease(button) => {
            match button {
                Button::Right => {
                    button_right_act = false;
                },
                _ => {}
            }
        },
        EventType::MouseMove { x, y } => {
            if button_right_act {
               if x > 100.0 {
                  is_block = true;
               } 
            }
        },
        _ => {}
    }
    if is_block {
        None
    } else {
        Some(event)
    }
}).unwrap();

What is actually happening ?

I'm a beginner of rust.
I want move of ownership to closure, but Fn applies to closures that don’t move captured values out of their body and that don’t mutate captured values.
image
T: Fn(Event) -> Option + 'static
modify to
T: FnMut(Event) -> Option + 'static

I want move of ownership to closure, but Fn applies to closures that don’t move captured values out of their body and that don’t mutate captured values.

That's because you cannot.
You could use a global variable for that (that's unsafe but it works if your program is simple enough).
Or an Arc<Mutex<T>>