Why XGrabKey generates extra focus-out and focus-in events?

后端 未结 7 2075
时光说笑
时光说笑 2020-12-14 00:33

Does anyone know an xlib function to trap a keypress event without losing the original focus? How to get rid of it?

(or \"to use XGrabKey() without generating Grab-s

7条回答
  •  失恋的感觉
    2020-12-14 01:20

    My current code(from http://diyism-myboard.googlecode.com/files/myboard.py):

    disp=Display()
    screen=disp.screen()
    root=screen.root
    
    def grab_key(key, mod):
        key_code=string_to_keycode(key)
        #3rd: bool owner_events, 4th: pointer_mode, 5th: keyboard_mode, X.GrabModeSync, X.GrabModeAsync
        root.grab_key(key_code, mod, 0, X.GrabModeAsync, X.GrabModeAsync)
        root.grab_key(key_code, mod|X.LockMask, 0, X.GrabModeAsync, X.GrabModeAsync) #caps lock
        root.grab_key(key_code, mod|X.Mod2Mask, 0, X.GrabModeAsync, X.GrabModeAsync) #num lock
        root.grab_key(key_code, mod|X.LockMask|X.Mod2Mask, 0, X.GrabModeAsync, X.GrabModeAsync)
    
    def main():
        grab_key('Shift_L', X.NONE)
        grab_key('Shift_R', X.NONE)
        while 1:
              evt=root.display.next_event()
              if evt.type in [X.KeyPress, X.KeyRelease]: #ignore X.MappingNotify(=34)
                 handle_event(evt)
    
    if __name__ == '__main__':
       main()
    

    When i press "shift" key, the focus lost, and when i release it, the focus come back.

提交回复
热议问题