summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorHuang Peng <shawn.p.huang@gmail.com>2008-09-08 22:37:59 +0800
committerHuang Peng <shawn.p.huang@gmail.com>2008-09-08 22:37:59 +0800
commite3d960312eb0b3e272eb3194c43a1d1b94f6fb07 (patch)
tree749d8620738983ea3de1e87e696bd800e6114522 /test
parent3c0955994e98a8c0bf06d4f7e4ee06587fff1234 (diff)
downloadibus-e3d960312eb0b3e272eb3194c43a1d1b94f6fb07.tar.gz
ibus-e3d960312eb0b3e272eb3194c43a1d1b94f6fb07.tar.xz
ibus-e3d960312eb0b3e272eb3194c43a1d1b94f6fb07.zip
WIP.
Diffstat (limited to 'test')
-rwxr-xr-xtest/test_client.py70
1 files changed, 50 insertions, 20 deletions
diff --git a/test/test_client.py b/test/test_client.py
index 7cd7d81..bc885b0 100755
--- a/test/test_client.py
+++ b/test/test_client.py
@@ -14,14 +14,12 @@ from ibus import modifier
class DemoTerm:
def __init__(self):
- # self.__term_old = termios.tcgetattr(0)
- # tty.setraw(0)
self.__init_curses()
self.__bus = ibus.Bus()
self.__ic = self.__bus.create_input_context("DemoTerm")
self.__bus.set_capabilities(self.__ic, 7)
self.__bus.connect("commit-string", self.__commit_string_cb)
-
+
self.__bus.connect("update-preedit", self.__update_preedit_cb)
self.__bus.connect("show-preedit", self.__show_preedit_cb)
self.__bus.connect("hide-preedit", self.__hide_preedit_cb)
@@ -34,9 +32,11 @@ class DemoTerm:
self.__bus.connect("show-lookup-table", self.__show_lookup_table_cb)
self.__bus.connect("hide-lookup-table", self.__hide_lookup_table_cb)
glib.io_add_watch(0, glib.IO_IN, self.__stdin_cb)
+ # glib.timeout_add(500, self.__timeout_cb)
+
# self.__master_fd, self.__slave_fd = os.openpty()
# self.__run_shell()
-
+
self.__is_invalidate = False
self.__preedit = ""
self.__preedit_visible = False
@@ -45,36 +45,57 @@ class DemoTerm:
self.__lookup_table = None
self.__lookup_table_visible = False
+ # self.__old_sigwinch_cb = signal.signal(signal.SIGWINCH, self.__sigwinch_cb)
+
+ def __timeout_cb(self):
+ self.__stdin_cb(0, 0)
+ return True
+
+ def __sigwinch_cb(self, a, b):
+ self.__old_sigwinch_cb(a, b)
+ self.__invalidate()
+
def __init_curses(self):
self.__screen = curses.initscr()
curses.noecho()
curses.raw()
self.__screen.keypad(1)
self.__screen.refresh()
+ self.__screen.nodelay(1)
self.__max_y, self.__max_x = self.__screen.getmaxyx()
self.__state_pad = curses.newpad(2, self.__max_x)
self.__state_pad.bkgd(' ', curses.A_REVERSE)
self.__state_pad.addstr(0, 0, "Press Ctrl + v to enable or disable input method")
self.__state_pad.refresh(0, 0, self.__max_y - 2, 0, self.__max_y, self.__max_x)
-
+
def __fini_curses(self):
curses.noraw()
curses.echo()
curses.endwin()
-
+
def __stdin_cb(self, fd, condition):
+ while self.__process_input():
+ pass
+ return True
+
+ def __process_input(self):
c = self.__screen.getch()
-
+ if c < 0:
+ return False
+
if c == 3:
self.__loop.quit()
try:
if c == 22: # Ctrl + V => Ctrl + space
retval = self.__bus.process_key_event(self.__ic,
keysyms.space, True, modifier.CONTROL_MASK)
- elif c == 127 or c == 263: # BackSpace
+ elif c == curses.KEY_BACKSPACE: # BackSpace
self.__bus.process_key_event(self.__ic,
keysyms.BackSpace, True, 0)
retval = True
+ elif c == curses.KEY_RESIZE:
+ self.__invalidate()
+ retval = True
else:
retval = self.__bus.process_key_event(self.__ic, c, True, 0)
except:
@@ -106,18 +127,18 @@ class DemoTerm:
return
self.__preedit_visible = False
self.__invalidate()
-
+
def __update_aux_string_cb(self, bus, ic, text, attrs, visible):
self.__aux_string = text
self.__aux_string_visible = visible
self.__invalidate()
-
+
def __show_aux_string_cb(self, bus, ic):
if self.__aux_string_visible:
return
self.__aux_string_visible = True
self.__invalidate()
-
+
def __hide_aux_string_cb(self, bus, ic):
if not self.__aux_string_visible:
return
@@ -129,19 +150,19 @@ class DemoTerm:
self.__lookup_table = lookup_table
self.__lookup_table_visible = visible
self.__invalidate()
-
+
def __show_lookup_table_cb(self, bus, ic):
if self.__lookup_table_visible:
return
self.__lookup_table_visible = True
self.__invalidate()
-
+
def __hide_lookup_table_cb(self, bus, ic):
if not self.__lookup_table_visible:
return
self.__lookup_table_visible = False
self.__invalidate()
-
+
def __invalidate(self):
if self.__is_invalidate:
return
@@ -152,19 +173,28 @@ class DemoTerm:
if not self.__is_invalidate:
return False
self.__is_invalidate = False
-
+
+ y, x = self.__screen.getmaxyx()
+ if self.__max_x != x or self.__max_y != y:
+ self.__max_x = x
+ self.__max_y = y
+ self.__state_pad = curses.newpad(2, self.__max_x)
+ self.__state_pad.bkgd(' ', curses.A_REVERSE)
+ self.__state_pad.addstr(0, 0, "Press Ctrl + v to enable or disable input method")
+ self.__screen.clear()
+
self.__state_pad.clear()
# update preedit
if self.__preedit_visible:
self.__state_pad.addstr(0,0, self.__preedit, curses.A_REVERSE)
-
+
# update aux string
if self.__aux_string_visible:
self.__state_pad.addstr(" ", curses.A_REVERSE)
self.__state_pad.addstr(self.__aux_string, curses.A_REVERSE)
self.__state_pad.addstr(1, 0, "", curses.A_REVERSE)
-
+
# update lookup table
if self.__lookup_table_visible:
candidates = self.__lookup_table.get_canidates_in_current_page()
@@ -176,10 +206,10 @@ class DemoTerm:
if self.__preedit_visible == False and self.__aux_string_visible == False and self.__lookup_table_visible == False:
self.__state_pad.addstr(0, 0, "Press Ctrl + v to enable or disable input method")
-
+
self.__state_pad.refresh(0, 0, self.__max_y - 2, 0, self.__max_y, self.__max_x)
self.__screen.refresh()
-
+
return False
def __run_shell(self):
@@ -223,4 +253,4 @@ def main():
if __name__ == "__main__":
main()
-
+