@@ -34,8 +34,8 @@ pub enum CGEventTapOption {
3434 ListenOnly = 1 ,
3535}
3636
37- pub static mut LAST_FLAGS : CGEventFlags = CGEventFlags :: CGEventFlagNull ;
3837lazy_static ! {
38+ pub static ref LAST_FLAGS : Mutex <CGEventFlags > = Mutex :: new( CGEventFlags :: CGEventFlagNull ) ;
3939 pub static ref KEYBOARD_STATE : Mutex <Keyboard > = Mutex :: new( Keyboard :: new( ) . unwrap( ) ) ;
4040}
4141
@@ -143,50 +143,50 @@ pub unsafe fn convert(
143143 let key = key_from_code ( code) ;
144144
145145 // Determine if this is a press or release based on flag changes
146- let event = if flags. contains ( CGEventFlags :: CGEventFlagShift )
147- && !LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagShift )
146+ let global_flags = LAST_FLAGS . lock ( ) . unwrap ( ) ;
147+ if flags. contains ( CGEventFlags :: CGEventFlagShift )
148+ && !global_flags. contains ( CGEventFlags :: CGEventFlagShift )
148149 {
149- LAST_FLAGS = flags;
150+ * global_flags = flags;
150151 Some ( EventType :: KeyPress ( key) )
151152 } else if !flags. contains ( CGEventFlags :: CGEventFlagShift )
152- && LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagShift )
153+ && * global_flags . contains ( CGEventFlags :: CGEventFlagShift )
153154 {
154- LAST_FLAGS = flags;
155+ * global_flags = flags;
155156 Some ( EventType :: KeyRelease ( key) )
156157 } else if flags. contains ( CGEventFlags :: CGEventFlagControl )
157- && !LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagControl )
158+ && !* global_flags . contains ( CGEventFlags :: CGEventFlagControl )
158159 {
159- LAST_FLAGS = flags;
160+ * global_flags = flags;
160161 Some ( EventType :: KeyPress ( key) )
161162 } else if !flags. contains ( CGEventFlags :: CGEventFlagControl )
162- && LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagControl )
163+ && * global_flags . contains ( CGEventFlags :: CGEventFlagControl )
163164 {
164- LAST_FLAGS = flags;
165+ * global_flags = flags;
165166 Some ( EventType :: KeyRelease ( key) )
166167 } else if flags. contains ( CGEventFlags :: CGEventFlagAlternate )
167- && !LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagAlternate )
168+ && !* global_flags . contains ( CGEventFlags :: CGEventFlagAlternate )
168169 {
169- LAST_FLAGS = flags;
170+ * global_flags = flags;
170171 Some ( EventType :: KeyPress ( key) )
171172 } else if !flags. contains ( CGEventFlags :: CGEventFlagAlternate )
172- && LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagAlternate )
173+ && * global_flags . contains ( CGEventFlags :: CGEventFlagAlternate )
173174 {
174- LAST_FLAGS = flags;
175+ * global_flags = flags;
175176 Some ( EventType :: KeyRelease ( key) )
176177 } else if flags. contains ( CGEventFlags :: CGEventFlagCommand )
177- && !LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagCommand )
178+ && !* global_flags . contains ( CGEventFlags :: CGEventFlagCommand )
178179 {
179- LAST_FLAGS = flags;
180+ * global_flags = flags;
180181 Some ( EventType :: KeyPress ( key) )
181182 } else if !flags. contains ( CGEventFlags :: CGEventFlagCommand )
182- && LAST_FLAGS . contains ( CGEventFlags :: CGEventFlagCommand )
183+ && * global_flags . contains ( CGEventFlags :: CGEventFlagCommand )
183184 {
184- LAST_FLAGS = flags;
185+ * global_flags = flags;
185186 Some ( EventType :: KeyRelease ( key) )
186187 } else {
187188 None
188- } ;
189- event
189+ }
190190 }
191191 CGEventType :: ScrollWheel => {
192192 let delta_y =
0 commit comments