diff options
author | Ian Ward <ian@excess.org> | 2013-12-24 08:20:09 -0800 |
---|---|---|
committer | Ian Ward <ian@excess.org> | 2013-12-24 08:20:09 -0800 |
commit | 08fe48fef19603ed88ed8b587f74da9d6963a805 (patch) | |
tree | 2c533a580453cc2a02eb274c4feae9ad4bc5675d /urwid | |
parent | 47be52f7580fb9aaef39beaaee4e150bbdb86562 (diff) | |
parent | b8891164c7bdf428e778e6798c7fa98705112ebb (diff) | |
download | urwid-08fe48fef19603ed88ed8b587f74da9d6963a805.tar.gz |
Merge pull request #26 from garrison/master
allow Screen.set_mouse_tracking(False) to disable mouse tracking
Diffstat (limited to 'urwid')
-rwxr-xr-x | urwid/curses_display.py | 26 | ||||
-rwxr-xr-x | urwid/html_fragment.py | 2 | ||||
-rw-r--r-- | urwid/lcd_display.py | 2 | ||||
-rw-r--r-- | urwid/raw_display.py | 20 | ||||
-rwxr-xr-x | urwid/web_display.py | 2 |
5 files changed, 37 insertions, 15 deletions
diff --git a/urwid/curses_display.py b/urwid/curses_display.py index dba940b..457fbcf 100755 --- a/urwid/curses_display.py +++ b/urwid/curses_display.py @@ -70,23 +70,33 @@ class Screen(BaseScreen, RealTerminal): self.prev_input_resize = 0 self.set_input_timeouts() self.last_bstate = 0 + self._mouse_tracking_enabled = False self.register_palette_entry(None, 'default','default') - def set_mouse_tracking(self): + def set_mouse_tracking(self, enable=True): """ Enable mouse tracking. After calling this function get_input will include mouse click events along with keystrokes. """ - curses.mousemask(0 - | curses.BUTTON1_PRESSED | curses.BUTTON1_RELEASED - | curses.BUTTON2_PRESSED | curses.BUTTON2_RELEASED - | curses.BUTTON3_PRESSED | curses.BUTTON3_RELEASED - | curses.BUTTON4_PRESSED | curses.BUTTON4_RELEASED - | curses.BUTTON_SHIFT | curses.BUTTON_ALT - | curses.BUTTON_CTRL) + enable = bool(enable) + if enable == self._mouse_tracking_enabled: + return + + if enable: + curses.mousemask(0 + | curses.BUTTON1_PRESSED | curses.BUTTON1_RELEASED + | curses.BUTTON2_PRESSED | curses.BUTTON2_RELEASED + | curses.BUTTON3_PRESSED | curses.BUTTON3_RELEASED + | curses.BUTTON4_PRESSED | curses.BUTTON4_RELEASED + | curses.BUTTON_SHIFT | curses.BUTTON_ALT + | curses.BUTTON_CTRL) + else: + raise NotImplementedError() + + self._mouse_tracking_enabled = enable def start(self): """ diff --git a/urwid/html_fragment.py b/urwid/html_fragment.py index 9aba906..7ba835e 100755 --- a/urwid/html_fragment.py +++ b/urwid/html_fragment.py @@ -66,7 +66,7 @@ class HtmlGenerator(BaseScreen): self.bright_is_bold = bright_is_bold self.has_underline = has_underline - def set_mouse_tracking(self): + def set_mouse_tracking(self, enable=True): """Not yet implemented""" pass diff --git a/urwid/lcd_display.py b/urwid/lcd_display.py index c66338d..71a1cfa 100644 --- a/urwid/lcd_display.py +++ b/urwid/lcd_display.py @@ -30,7 +30,7 @@ class LCDScreen(BaseScreen): has_underline=None): pass - def set_mouse_tracking(self): + def set_mouse_tracking(self, enable=True): pass def start(self): diff --git a/urwid/raw_display.py b/urwid/raw_display.py index 74ec840..1cd8b00 100644 --- a/urwid/raw_display.py +++ b/urwid/raw_display.py @@ -64,6 +64,7 @@ class Screen(BaseScreen, RealTerminal): self.maxrow = None self.gpm_mev = None self.gpm_event_pending = False + self._mouse_tracking_enabled = False self.last_bstate = 0 self._setup_G1_done = False self._rows_used = None @@ -132,16 +133,25 @@ class Screen(BaseScreen, RealTerminal): """ signal.signal(signal.SIGWINCH, signal.SIG_DFL) - def set_mouse_tracking(self): + def set_mouse_tracking(self, enable=True): """ - Enable mouse tracking. + Enable (or disable) mouse tracking. After calling this function get_input will include mouse click events along with keystrokes. """ - self._term_output_file.write(escape.MOUSE_TRACKING_ON) + enable = bool(enable) + if enable == self._mouse_tracking_enabled: + return - self._start_gpm_tracking() + if enable: + self._term_output_file.write(escape.MOUSE_TRACKING_ON) + self._start_gpm_tracking() + else: + self._term_output_file.write(escape.MOUSE_TRACKING_OFF) + self._stop_gpm_tracking() + + self._mouse_tracking_enabled = enable def _start_gpm_tracking(self): if not os.path.isfile("/usr/bin/mev"): @@ -156,6 +166,8 @@ class Screen(BaseScreen, RealTerminal): self.gpm_mev = m def _stop_gpm_tracking(self): + if not self.gpm_mev: + return os.kill(self.gpm_mev.pid, signal.SIGINT) os.waitpid(self.gpm_mev.pid, 0) self.gpm_mev = None diff --git a/urwid/web_display.py b/urwid/web_display.py index f22e104..69aa1ad 100755 --- a/urwid/web_display.py +++ b/urwid/web_display.py @@ -614,7 +614,7 @@ class Screen: background = "light gray" self.palette[name] = (foreground, background, mono) - def set_mouse_tracking(self): + def set_mouse_tracking(self, enable=True): """Not yet implemented""" pass |