summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2007-08-17 12:39:55 +0000
committerSebastien Helleu <flashcode@flashtux.org>2007-08-17 12:39:55 +0000
commit4908e196adaafac045362dcbdeaf4027d895022c (patch)
tree4419a276c1026879743fcf70c7d819182a767056
parentdc92ee389ce0307342625dafcbd3f0502a9c229d (diff)
downloadweechat-4908e196adaafac045362dcbdeaf4027d895022c.zip
Fixed problem with input of UTF-8 chars in last cvs
-rw-r--r--src/gui/curses/gui-curses-keyboard.c48
-rw-r--r--weechat/src/gui/curses/gui-curses-keyboard.c48
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