--- a/tuikit/driver/cursesw.py Mon Feb 16 21:17:43 2015 +0100
+++ b/tuikit/driver/cursesw.py Sat Feb 21 12:01:57 2015 +0100
@@ -3,7 +3,7 @@
import logging
from tuikit.driver.driver import Driver
-from tuikit.core.events import ResizeEvent, KeypressEvent
+from tuikit.core.events import ResizeEvent, KeypressEvent, MouseEvent
from tuikit.core.coords import Point
@@ -106,7 +106,12 @@
self.stdscr.addstr(y, x, ch)
else:
raise TypeError('Integer or one-char string is required.')
- except curses.error as e:
+ except curses.error:
+ if x == self.size.w - 1 and y == self.size.h - 1:
+ # Curses putch to lower-right corner gives error because
+ # scrolling is disabled and cursor cannot move to next char.
+ # Let's just ignore that for now.
+ return
self._log.exception('putch(%r, %s, %s) error:' % (ch, x, y))
def draw(self, buffer, x=0, y=0):
@@ -162,7 +167,7 @@
timeout -- float, in seconds (None=infinite)
Returns:
- [('event', param1, ...), ...]
+ List of Event objects.
"""
# Set timeout
@@ -200,21 +205,21 @@
return res
def _process_mouse(self):
- out = []
+ res = []
try:
_id, x, y, _z, bstate = curses.getmouse()
except curses.error:
- return out
+ return res
pos = Point(x, y)
if bstate & curses.REPORT_MOUSE_POSITION:
if self._mouse_last_pos != pos:
if self._mouse_last_pos:
relpos = pos - self._mouse_last_pos
- out += [('mousemove', 0, pos, relpos)]
+ res.append(MouseEvent('mousemove', 0, pos, relpos))
self._mouse_last_pos = pos
- # we are interested only in changes, not buttons already pressed before event
+ # We are interested only in changes, not buttons already pressed before event
if self._mouse_last_bstate is not None:
old = self._mouse_last_bstate
new = bstate
@@ -224,23 +229,23 @@
self._mouse_last_bstate = bstate
if bstate & curses.BUTTON1_PRESSED:
- out += [('mousedown', 1, pos)]
+ res.append(MouseEvent('mousedown', 1, pos))
if bstate & curses.BUTTON2_PRESSED:
- out += [('mousedown', 2, pos)]
+ res.append(MouseEvent('mousedown', 2, pos))
if bstate & curses.BUTTON3_PRESSED:
- out += [('mousedown', 3, pos)]
+ res.append(MouseEvent('mousedown', 3, pos))
if bstate & curses.BUTTON1_RELEASED:
- out += [('mouseup', 1, pos)]
+ res.append(MouseEvent('mouseup', 1, pos))
if bstate & curses.BUTTON2_RELEASED:
- out += [('mouseup', 2, pos)]
+ res.append(MouseEvent('mouseup', 2, pos))
if bstate & curses.BUTTON3_RELEASED:
- out += [('mouseup', 3, pos)]
+ res.append(MouseEvent('mouseup', 3, pos))
- # reset last pos when pressed/released
- if len(out) > 0 and out[-1][0] in ('mousedown', 'mouseup'):
+ # Reset last pos when pressed/released
+ if len(res) > 0 and res[-1].name in ('mousedown', 'mouseup'):
self._mouse_last_pos = None
- return out
+ return res
def _split_keyname_mods(self, keyname):
"""Parse keynames in form "shift+tab", return (keyname, mod)."""