Guest User

Untitled

a guest
Feb 18th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. diff -r 1a1111fa4d13 urwid/raw_display.py
  2. --- a/urwid/raw_display.py Sat Jul 16 12:25:31 2011 -0400
  3. +++ b/urwid/raw_display.py Sun Jul 17 09:43:45 2011 +0800
  4. @@ -69,6 +69,10 @@
  5. self._cy = 0
  6. self.bright_is_bold = os.environ.get('TERM',None) != "xterm"
  7. self._next_timeout = None
  8. + self._emulate_double_press = True
  9. + self._double_press_timing = 0.2
  10. + self._last_mouse_press = None
  11. + self._last_mouse_release = None
  12. self._term_output_file = sys.stdout
  13. self._term_input_file = sys.stdin
  14. # pipe for signalling external event loops about resize events
  15. @@ -348,9 +352,54 @@
  16.  
  17. original_codes = codes
  18. try:
  19. + if self._last_mouse_press and not codes:
  20. + processed.append(self._last_mouse_press)
  21. + self._last_mouse_press = None
  22. + if self._last_mouse_release:
  23. + processed.append(self._last_mouse_release)
  24. + self._last_mouse_release = None
  25. while codes:
  26. run, codes = escape.process_keyqueue(
  27. codes, True)
  28. + new_run = []
  29. + if self._emulate_double_press:
  30. + while run:
  31. + one_run = run.pop(0)
  32. + if self._last_mouse_press:
  33. + # Has one previous mouse press
  34. + if util.is_mouse_event(one_run):
  35. + if self._last_mouse_press == one_run:
  36. + # The second press enters, we have a double press
  37. + new_run.append((one_run[0].replace('press', 'double press'),) + tuple(one_run[1:]))
  38. + self._last_mouse_press = None
  39. + self._last_mouse_release = None
  40. + elif self._last_mouse_press[0].replace('press', 'release') == one_run[0] and \
  41. + self._last_mouse_press[2:] == one_run[2:]:
  42. + # Release event with exactly same x, y. Button is ignored due to release button is zero.
  43. + # Discard this release event
  44. + self._last_mouse_release = one_run
  45. + else:
  46. + # Not a mouse event, can't be double press this round
  47. + new_run.append(self._last_mouse_press)
  48. + self._last_mouse_press = None
  49. + if self._last_mouse_release:
  50. + new_run.append(self._last_mouse_release)
  51. + self._last_mouse_release = None
  52. + new_run.append(one_run)
  53. + else:
  54. + # Not a mouse event, can't be double press this round
  55. + new_run.append(self._last_mouse_press)
  56. + self._last_mouse_press = None
  57. + if self._last_mouse_release:
  58. + new_run.append(self._last_mouse_release)
  59. + self._last_mouse_release = None
  60. + new_run.append(one_run)
  61. + elif util.is_mouse_event(one_run) and 'mouse press' in one_run[0] and one_run[1] not in (4, 5):
  62. + # No previous mouse press event and here comes one
  63. + self._last_mouse_press = one_run
  64. + else:
  65. + new_run.append(one_run)
  66. + run = new_run
  67. processed.extend(run)
  68. except escape.MoreInputRequired:
  69. k = len(original_codes) - len(codes)
  70. @@ -371,7 +420,10 @@
  71. processed.append('window resize')
  72. self._resized = False
  73.  
  74. - yield (self.max_wait, processed, original_codes)
  75. + if self._last_mouse_press:
  76. + yield (self._double_press_timing, processed, original_codes)
  77. + else:
  78. + yield (self.max_wait, processed, original_codes)
  79. empty_resize_pipe()
  80.  
  81. def _fake_input_iter(self):
Add Comment
Please, Sign In to add comment