summaryrefslogtreecommitdiff
path: root/urwid
diff options
context:
space:
mode:
authorIan Ward <ian@excess.org>2013-12-24 08:20:09 -0800
committerIan Ward <ian@excess.org>2013-12-24 08:20:09 -0800
commit08fe48fef19603ed88ed8b587f74da9d6963a805 (patch)
tree2c533a580453cc2a02eb274c4feae9ad4bc5675d /urwid
parent47be52f7580fb9aaef39beaaee4e150bbdb86562 (diff)
parentb8891164c7bdf428e778e6798c7fa98705112ebb (diff)
downloadurwid-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-xurwid/curses_display.py26
-rwxr-xr-xurwid/html_fragment.py2
-rw-r--r--urwid/lcd_display.py2
-rw-r--r--urwid/raw_display.py20
-rwxr-xr-xurwid/web_display.py2
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