Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -r 1a1111fa4d13 urwid/raw_display.py
- --- a/urwid/raw_display.py Sat Jul 16 12:25:31 2011 -0400
- +++ b/urwid/raw_display.py Sun Jul 17 09:43:45 2011 +0800
- @@ -69,6 +69,10 @@
- self._cy = 0
- self.bright_is_bold = os.environ.get('TERM',None) != "xterm"
- self._next_timeout = None
- + self._emulate_double_press = True
- + self._double_press_timing = 0.2
- + self._last_mouse_press = None
- + self._last_mouse_release = None
- self._term_output_file = sys.stdout
- self._term_input_file = sys.stdin
- # pipe for signalling external event loops about resize events
- @@ -348,9 +352,54 @@
- original_codes = codes
- try:
- + if self._last_mouse_press and not codes:
- + processed.append(self._last_mouse_press)
- + self._last_mouse_press = None
- + if self._last_mouse_release:
- + processed.append(self._last_mouse_release)
- + self._last_mouse_release = None
- while codes:
- run, codes = escape.process_keyqueue(
- codes, True)
- + new_run = []
- + if self._emulate_double_press:
- + while run:
- + one_run = run.pop(0)
- + if self._last_mouse_press:
- + # Has one previous mouse press
- + if util.is_mouse_event(one_run):
- + if self._last_mouse_press == one_run:
- + # The second press enters, we have a double press
- + new_run.append((one_run[0].replace('press', 'double press'),) + tuple(one_run[1:]))
- + self._last_mouse_press = None
- + self._last_mouse_release = None
- + elif self._last_mouse_press[0].replace('press', 'release') == one_run[0] and \
- + self._last_mouse_press[2:] == one_run[2:]:
- + # Release event with exactly same x, y. Button is ignored due to release button is zero.
- + # Discard this release event
- + self._last_mouse_release = one_run
- + else:
- + # Not a mouse event, can't be double press this round
- + new_run.append(self._last_mouse_press)
- + self._last_mouse_press = None
- + if self._last_mouse_release:
- + new_run.append(self._last_mouse_release)
- + self._last_mouse_release = None
- + new_run.append(one_run)
- + else:
- + # Not a mouse event, can't be double press this round
- + new_run.append(self._last_mouse_press)
- + self._last_mouse_press = None
- + if self._last_mouse_release:
- + new_run.append(self._last_mouse_release)
- + self._last_mouse_release = None
- + new_run.append(one_run)
- + elif util.is_mouse_event(one_run) and 'mouse press' in one_run[0] and one_run[1] not in (4, 5):
- + # No previous mouse press event and here comes one
- + self._last_mouse_press = one_run
- + else:
- + new_run.append(one_run)
- + run = new_run
- processed.extend(run)
- except escape.MoreInputRequired:
- k = len(original_codes) - len(codes)
- @@ -371,7 +420,10 @@
- processed.append('window resize')
- self._resized = False
- - yield (self.max_wait, processed, original_codes)
- + if self._last_mouse_press:
- + yield (self._double_press_timing, processed, original_codes)
- + else:
- + yield (self.max_wait, processed, original_codes)
- empty_resize_pipe()
- def _fake_input_iter(self):
Add Comment
Please, Sign In to add comment