actions.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. try:
  2. import Xlib.X
  3. import Xlib.protocol.event
  4. except ImportError:
  5. pass
  6. class SelectFogAction:
  7. def __init__(self):
  8. self._button = Xlib.X.Button1
  9. def execute(self, extended_controls, xkeyevent):
  10. engine_geometry = extended_controls._engine_window.get_geometry()
  11. smaller_dimension = min(engine_geometry.width, engine_geometry.height)
  12. attr = dict(
  13. window=extended_controls.engine_window,
  14. detail=self._button,
  15. state=xkeyevent.state,
  16. event_x=int(engine_geometry.width/2-smaller_dimension/2+smaller_dimension*0.619), # 908,
  17. event_y=int(engine_geometry.height/2-smaller_dimension/2+smaller_dimension*0.453), # 1064,
  18. # apparently root_x & root_y do not need to correspond with event_x/y.
  19. # attributes are still required to be set.
  20. root_x=0, # xkeyevent.root_x,
  21. root_y=0, # xkeyevent.root_y,
  22. child=xkeyevent.child,
  23. root=xkeyevent.root,
  24. time=xkeyevent.time, # X.CurrentTime
  25. same_screen=xkeyevent.same_screen,
  26. )
  27. if isinstance(xkeyevent, Xlib.protocol.event.KeyPress):
  28. e = Xlib.protocol.event.ButtonPress(**attr)
  29. else:
  30. e = Xlib.protocol.event.ButtonRelease(**attr)
  31. extended_controls.engine_window.send_event(e)
  32. class RewriteKeyEventAction:
  33. def __init__(self, keysym=None):
  34. self._keysym = keysym
  35. def execute(self, extended_controls, xkeyevent):
  36. attr = dict(
  37. window=extended_controls.engine_window,
  38. detail=xkeyevent.detail,
  39. state=xkeyevent.state,
  40. root_x=xkeyevent.root_x,
  41. root_y=xkeyevent.root_y,
  42. event_x=xkeyevent.event_x,
  43. event_y=xkeyevent.event_y,
  44. child=xkeyevent.child,
  45. root=xkeyevent.root,
  46. time=xkeyevent.time, # X.CurrentTime
  47. same_screen=xkeyevent.same_screen,
  48. )
  49. if self._keysym:
  50. attr['detail'] = extended_controls.xdisplay.keysym_to_keycode(
  51. self._keysym)
  52. extended_controls.engine_window.send_event(
  53. type(xkeyevent)(**attr),
  54. )
  55. class ForwardKeyEventAction(RewriteKeyEventAction):
  56. def __init__(self):
  57. super().__init__(keysym=None)
  58. class ToggleExtendedControlsAction:
  59. def execute(self, extended_controls, xkeyevent):
  60. if isinstance(xkeyevent, Xlib.protocol.event.KeyPress):
  61. extended_controls.toggle()