diff options
author | Michael Wright <michaelwr@google.com> | 2013-02-26 11:09:12 -0800 |
---|---|---|
committer | Michael Wright <michaelwr@google.com> | 2013-02-26 11:13:27 -0800 |
commit | c8be1790590605603a8dca8f9ee93327c916de3f (patch) | |
tree | a00c1490fe283a9e54c91489f12c8a08e319f1ce /jni/com_android_terminal_Terminal.cpp | |
parent | 303dab01fa211d0da20136049196e3321241cad8 (diff) | |
download | Terminal-c8be1790590605603a8dca8f9ee93327c916de3f.tar.gz |
Added input error handling and enabled keyboard input
Change-Id: Ie74da0b39d9002802c76dc3ceecd5082e7504f26
Diffstat (limited to 'jni/com_android_terminal_Terminal.cpp')
-rw-r--r-- | jni/com_android_terminal_Terminal.cpp | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/jni/com_android_terminal_Terminal.cpp b/jni/com_android_terminal_Terminal.cpp index bc303dd..9f4b36e 100644 --- a/jni/com_android_terminal_Terminal.cpp +++ b/jni/com_android_terminal_Terminal.cpp @@ -34,7 +34,7 @@ #include <string.h> -#define USE_TEST_SHELL 1 +#define USE_TEST_SHELL 0 #define DEBUG_CALLBACKS 0 #define DEBUG_IO 0 @@ -87,9 +87,9 @@ public: size_t write(const char *bytes, size_t len); - int dispatchCharacter(int mod, int character); - int dispatchKey(int mod, int key); - void flushInput(); + bool dispatchCharacter(int mod, int character); + bool dispatchKey(int mod, int key); + bool flushInput(); int flushDamage(); int resize(short unsigned int rows, short unsigned int cols); @@ -387,25 +387,24 @@ size_t Terminal::write(const char *bytes, size_t len) { return ::write(mMasterFd, bytes, len); } -int Terminal::dispatchCharacter(int mod, int character) { +bool Terminal::dispatchCharacter(int mod, int character) { vterm_input_push_char(mVt, static_cast<VTermModifier>(mod), character); - flushInput(); - return 0; + return flushInput(); } -int Terminal::dispatchKey(int mod, int key) { +bool Terminal::dispatchKey(int mod, int key) { vterm_input_push_key(mVt, static_cast<VTermModifier>(mod), static_cast<VTermKey>(key)); - flushInput(); - return 0; + return flushInput(); } -void Terminal::flushInput() { +bool Terminal::flushInput() { size_t len = vterm_output_get_buffer_current(mVt); if (len) { char buf[len]; len = vterm_output_bufferread(mVt, buf, len); - write(buf, len); + return len == write(buf, len); } + return true; } int Terminal::flushDamage() { @@ -559,14 +558,14 @@ static jint com_android_terminal_Terminal_nativeGetCols(JNIEnv* env, jclass claz return term->getCols(); } -static jint com_android_terminal_Terminal_nativeDispatchCharacter(JNIEnv *env, jclass clazz, +static jboolean com_android_terminal_Terminal_nativeDispatchCharacter(JNIEnv *env, jclass clazz, jint ptr, jint mod, jint c) { Terminal* term = reinterpret_cast<Terminal*>(ptr); return term->dispatchCharacter(mod, c); } -static jint com_android_terminal_Terminal_nativeDispatchKey(JNIEnv *env, jclass clazz, jint ptr, - jint mod, jint c) { +static jboolean com_android_terminal_Terminal_nativeDispatchKey(JNIEnv *env, jclass clazz, + jint ptr, jint mod, jint c) { Terminal* term = reinterpret_cast<Terminal*>(ptr); return term->dispatchKey(mod, c); } @@ -580,8 +579,8 @@ static JNINativeMethod gMethods[] = { { "nativeGetCellRun", "(IIILcom/android/terminal/Terminal$CellRun;)I", (void*)com_android_terminal_Terminal_nativeGetCellRun }, { "nativeGetRows", "(I)I", (void*)com_android_terminal_Terminal_nativeGetRows }, { "nativeGetCols", "(I)I", (void*)com_android_terminal_Terminal_nativeGetCols }, - { "nativeDispatchCharacter", "(III)I", (void*)com_android_terminal_Terminal_nativeDispatchCharacter}, - { "nativeDispatchKey", "(III)I", (void*)com_android_terminal_Terminal_nativeDispatchKey }, + { "nativeDispatchCharacter", "(III)Z", (void*)com_android_terminal_Terminal_nativeDispatchCharacter}, + { "nativeDispatchKey", "(III)Z", (void*)com_android_terminal_Terminal_nativeDispatchKey }, }; int register_com_android_terminal_Terminal(JNIEnv* env) { |