summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui/curses/gui-curses-bar.c32
-rw-r--r--src/gui/curses/gui-curses-chat.c15
-rw-r--r--src/gui/gui-chat.c11
3 files changed, 34 insertions, 24 deletions
diff --git a/src/gui/curses/gui-curses-bar.c b/src/gui/curses/gui-curses-bar.c
index f48af84dc..3d2027480 100644
--- a/src/gui/curses/gui-curses-bar.c
+++ b/src/gui/curses/gui-curses-bar.c
@@ -787,23 +787,25 @@ gui_bar_window_print_string (struct t_gui_bar_window *bar_window,
snprintf (utf_char, sizeof (utf_char), ".");
size_on_screen = utf8_char_size_screen (utf_char);
- if (*x + size_on_screen > bar_window->width)
+ if (size_on_screen > 0)
{
- if (CONFIG_INTEGER(gui_bar_get_option_filling (bar_window->bar)) == GUI_BAR_FILLING_VERTICAL)
- return 0;
- if (*y >= bar_window->height - 1)
- return 0;
- *x = 0;
- (*y)++;
- wmove (bar_window->win_bar, *y, *x);
+ if (*x + size_on_screen > bar_window->width)
+ {
+ if (CONFIG_INTEGER(gui_bar_get_option_filling (bar_window->bar)) == GUI_BAR_FILLING_VERTICAL)
+ return 0;
+ if (*y >= bar_window->height - 1)
+ return 0;
+ *x = 0;
+ (*y)++;
+ wmove (bar_window->win_bar, *y, *x);
+ }
+ output = string_iconv_from_internal (NULL, utf_char);
+ wprintw (bar_window->win_bar, "%s",
+ (output) ? output : utf_char);
+ if (output)
+ free (output);
+ *x += size_on_screen;
}
- output = string_iconv_from_internal (NULL, utf_char);
- wprintw (bar_window->win_bar, "%s",
- (output) ? output : utf_char);
- if (output)
- free (output);
-
- *x += size_on_screen;
string = next_char;
}
diff --git a/src/gui/curses/gui-curses-chat.c b/src/gui/curses/gui-curses-chat.c
index ce6bfb59f..9459c8e47 100644
--- a/src/gui/curses/gui-curses-chat.c
+++ b/src/gui/curses/gui-curses-chat.c
@@ -446,18 +446,21 @@ gui_chat_display_word_raw (struct t_gui_window *window, const char *string,
utf_char[next_char - string] = '\0';
if (gui_window_utf_char_valid (utf_char))
{
+ size_on_screen = utf8_strlen_screen (utf_char);
if (max_chars_on_screen > 0)
{
- size_on_screen = utf8_strlen_screen (utf_char);
if (chars_displayed + size_on_screen > max_chars_on_screen)
return;
chars_displayed += size_on_screen;
}
- output = string_iconv_from_internal (NULL, utf_char);
- wprintw (GUI_CURSES(window)->win_chat,
- "%s", (output) ? output : utf_char);
- if (output)
- free (output);
+ if (size_on_screen > 0)
+ {
+ output = string_iconv_from_internal (NULL, utf_char);
+ wprintw (GUI_CURSES(window)->win_chat,
+ "%s", (output) ? output : utf_char);
+ if (output)
+ free (output);
+ }
}
else
{
diff --git a/src/gui/gui-chat.c b/src/gui/gui-chat.c
index 3d4bfd5ba..6e72682ba 100644
--- a/src/gui/gui-chat.c
+++ b/src/gui/gui-chat.c
@@ -121,7 +121,7 @@ gui_chat_prefix_build ()
int
gui_chat_strlen_screen (const char *string)
{
- int length;
+ int length, size_on_screen;
length = 0;
while (string && string[0])
@@ -129,7 +129,9 @@ gui_chat_strlen_screen (const char *string)
string = gui_chat_string_next_char (NULL, (unsigned char *)string, 0);
if (string)
{
- length += utf8_char_size_screen (string);
+ size_on_screen = utf8_char_size_screen (string);
+ if (size_on_screen > 0)
+ length += size_on_screen;
string = utf8_next_char (string);
}
}
@@ -167,6 +169,7 @@ int
gui_chat_string_real_pos (const char *string, int pos)
{
const char *real_pos, *ptr_string;
+ int size_on_screen;
if (pos <= 0)
return 0;
@@ -180,7 +183,9 @@ gui_chat_string_real_pos (const char *string, int pos)
0);
if (ptr_string)
{
- pos -= utf8_char_size_screen (ptr_string);
+ size_on_screen = utf8_char_size_screen (ptr_string);
+ if (size_on_screen > 0)
+ pos -= size_on_screen;
ptr_string = utf8_next_char (ptr_string);
real_pos = ptr_string;
}