diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2007-08-17 12:39:55 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2007-08-17 12:39:55 +0000 |
commit | 4908e196adaafac045362dcbdeaf4027d895022c (patch) | |
tree | 4419a276c1026879743fcf70c7d819182a767056 | |
parent | dc92ee389ce0307342625dafcbd3f0502a9c229d (diff) | |
download | weechat-4908e196adaafac045362dcbdeaf4027d895022c.zip |
Fixed problem with input of UTF-8 chars in last cvs
-rw-r--r-- | src/gui/curses/gui-curses-keyboard.c | 48 | ||||
-rw-r--r-- | weechat/src/gui/curses/gui-curses-keyboard.c | 48 |
2 files changed, 78 insertions, 18 deletions
diff --git a/src/gui/curses/gui-curses-keyboard.c b/src/gui/curses/gui-curses-keyboard.c index 56e1cca96..f02030c15 100644 --- a/src/gui/curses/gui-curses-keyboard.c +++ b/src/gui/curses/gui-curses-keyboard.c @@ -269,25 +269,55 @@ gui_keyboard_read () else if ((key & 0xE0) == 0xC0) { key_str[0] = (char) key; - key_str[1] = (char) (getch ()); - key_str[2] = '\0'; + if (i < gui_keyboard_buffer_size - 1) + { + key_str[1] = (char) (gui_keyboard_buffer[++i]); + key_str[2] = '\0'; + } + else + key_str[1] = '\0'; } /* 3 chars: 1110vvvv 10vvvvvv 10vvvvvv */ else if ((key & 0xF0) == 0xE0) { key_str[0] = (char) key; - key_str[1] = (char) (getch ()); - key_str[2] = (char) (getch ()); - key_str[3] = '\0'; + if (i < gui_keyboard_buffer_size - 1) + { + key_str[1] = (char) (gui_keyboard_buffer[++i]); + if (i < gui_keyboard_buffer_size - 1) + { + key_str[2] = (char) (gui_keyboard_buffer[++i]); + key_str[3] = '\0'; + } + else + key_str[2] = '\0'; + } + else + key_str[1] = '\0'; } /* 4 chars: 11110vvv 10vvvvvv 10vvvvvv 10vvvvvv */ else if ((key & 0xF8) == 0xF0) { key_str[0] = (char) key; - key_str[1] = (char) (getch ()); - key_str[2] = (char) (getch ()); - key_str[3] = (char) (getch ()); - key_str[4] = '\0'; + if (i < gui_keyboard_buffer_size - 1) + { + key_str[1] = (char) (gui_keyboard_buffer[++i]); + if (i < gui_keyboard_buffer_size - 1) + { + key_str[2] = (char) (gui_keyboard_buffer[++i]); + if (i < gui_keyboard_buffer_size - 1) + { + key_str[3] = (char) (gui_keyboard_buffer[++i]); + key_str[4] = '\0'; + } + else + key_str[3] = '\0'; + } + else + key_str[2] = '\0'; + } + else + key_str[1] = '\0'; } } else diff --git a/weechat/src/gui/curses/gui-curses-keyboard.c b/weechat/src/gui/curses/gui-curses-keyboard.c index 56e1cca96..f02030c15 100644 --- a/weechat/src/gui/curses/gui-curses-keyboard.c +++ b/weechat/src/gui/curses/gui-curses-keyboard.c @@ -269,25 +269,55 @@ gui_keyboard_read () else if ((key & 0xE0) == 0xC0) { key_str[0] = (char) key; - key_str[1] = (char) (getch ()); - key_str[2] = '\0'; + if (i < gui_keyboard_buffer_size - 1) + { + key_str[1] = (char) (gui_keyboard_buffer[++i]); + key_str[2] = '\0'; + } + else + key_str[1] = '\0'; } /* 3 chars: 1110vvvv 10vvvvvv 10vvvvvv */ else if ((key & 0xF0) == 0xE0) { key_str[0] = (char) key; - key_str[1] = (char) (getch ()); - key_str[2] = (char) (getch ()); - key_str[3] = '\0'; + if (i < gui_keyboard_buffer_size - 1) + { + key_str[1] = (char) (gui_keyboard_buffer[++i]); + if (i < gui_keyboard_buffer_size - 1) + { + key_str[2] = (char) (gui_keyboard_buffer[++i]); + key_str[3] = '\0'; + } + else + key_str[2] = '\0'; + } + else + key_str[1] = '\0'; } /* 4 chars: 11110vvv 10vvvvvv 10vvvvvv 10vvvvvv */ else if ((key & 0xF8) == 0xF0) { key_str[0] = (char) key; - key_str[1] = (char) (getch ()); - key_str[2] = (char) (getch ()); - key_str[3] = (char) (getch ()); - key_str[4] = '\0'; + if (i < gui_keyboard_buffer_size - 1) + { + key_str[1] = (char) (gui_keyboard_buffer[++i]); + if (i < gui_keyboard_buffer_size - 1) + { + key_str[2] = (char) (gui_keyboard_buffer[++i]); + if (i < gui_keyboard_buffer_size - 1) + { + key_str[3] = (char) (gui_keyboard_buffer[++i]); + key_str[4] = '\0'; + } + else + key_str[3] = '\0'; + } + else + key_str[2] = '\0'; + } + else + key_str[1] = '\0'; } } else |