Link Here
|
693 |
new_text_length = g_utf8_offset_to_pointer (new_text, n_chars) - new_text; |
693 |
new_text_length = g_utf8_offset_to_pointer (new_text, n_chars) - new_text; |
694 |
} |
694 |
} |
695 |
|
695 |
|
696 |
if (new_text_length + entry->n_bytes + 1 > entry->text_size) |
696 |
if (new_text_length + entry->x_n_bytes + 1 > entry->x_text_size) |
697 |
{ |
697 |
{ |
698 |
while (new_text_length + entry->n_bytes + 1 > entry->text_size) |
698 |
while (new_text_length + entry->x_n_bytes + 1 > entry->x_text_size) |
699 |
{ |
699 |
{ |
700 |
if (entry->text_size == 0) |
700 |
if (entry->x_text_size == 0) |
701 |
entry->text_size = MIN_SIZE; |
701 |
entry->x_text_size = MIN_SIZE; |
702 |
else |
702 |
else |
703 |
{ |
703 |
{ |
704 |
if (2 * (guint)entry->text_size < MAX_SIZE && |
704 |
if (2 * (guint)entry->x_text_size < MAX_SIZE && |
705 |
2 * (guint)entry->text_size > entry->text_size) |
705 |
2 * (guint)entry->x_text_size > entry->x_text_size) |
706 |
entry->text_size *= 2; |
706 |
entry->x_text_size *= 2; |
707 |
else |
707 |
else |
708 |
{ |
708 |
{ |
709 |
entry->text_size = MAX_SIZE; |
709 |
entry->x_text_size = MAX_SIZE; |
710 |
if (new_text_length > (gint)entry->text_size - (gint)entry->n_bytes - 1) |
710 |
if (new_text_length > (gint)entry->x_text_size - (gint)entry->x_n_bytes - 1) |
711 |
{ |
711 |
{ |
712 |
new_text_length = (gint)entry->text_size - (gint)entry->n_bytes - 1; |
712 |
new_text_length = (gint)entry->x_text_size - (gint)entry->x_n_bytes - 1; |
713 |
new_text_length = g_utf8_find_prev_char (new_text, new_text + new_text_length + 1) - new_text; |
713 |
new_text_length = g_utf8_find_prev_char (new_text, new_text + new_text_length + 1) - new_text; |
714 |
n_chars = g_utf8_strlen (new_text, new_text_length); |
714 |
n_chars = g_utf8_strlen (new_text, new_text_length); |
715 |
} |
715 |
} |
Link Here
|
718 |
} |
718 |
} |
719 |
} |
719 |
} |
720 |
|
720 |
|
721 |
entry->text = g_realloc (entry->text, entry->text_size); |
721 |
entry->text = g_realloc (entry->text, entry->x_text_size); |
722 |
} |
722 |
} |
723 |
|
723 |
|
724 |
index = g_utf8_offset_to_pointer (entry->text, *position) - entry->text; |
724 |
index = g_utf8_offset_to_pointer (entry->text, *position) - entry->text; |
725 |
|
725 |
|
726 |
g_memmove (entry->text + index + new_text_length, entry->text + index, entry->n_bytes - index); |
726 |
g_memmove (entry->text + index + new_text_length, entry->text + index, entry->x_n_bytes - index); |
727 |
memcpy (entry->text + index, new_text, new_text_length); |
727 |
memcpy (entry->text + index, new_text, new_text_length); |
728 |
|
728 |
|
729 |
entry->n_bytes += new_text_length; |
729 |
entry->x_n_bytes += new_text_length; |
730 |
entry->text_length += n_chars; |
730 |
entry->text_length += n_chars; |
731 |
|
731 |
|
732 |
/* NUL terminate for safety and convenience */ |
732 |
/* NUL terminate for safety and convenience */ |
733 |
entry->text[entry->n_bytes] = '\0'; |
733 |
entry->text[entry->x_n_bytes] = '\0'; |
734 |
|
734 |
|
735 |
if (entry->current_pos > *position) |
735 |
if (entry->current_pos > *position) |
736 |
entry->current_pos += n_chars; |
736 |
entry->current_pos += n_chars; |
Link Here
|
763 |
gint start_index = g_utf8_offset_to_pointer (entry->text, start_pos) - entry->text; |
763 |
gint start_index = g_utf8_offset_to_pointer (entry->text, start_pos) - entry->text; |
764 |
gint end_index = g_utf8_offset_to_pointer (entry->text, end_pos) - entry->text; |
764 |
gint end_index = g_utf8_offset_to_pointer (entry->text, end_pos) - entry->text; |
765 |
|
765 |
|
766 |
g_memmove (entry->text + start_index, entry->text + end_index, entry->n_bytes + 1 - end_index); |
766 |
g_memmove (entry->text + start_index, entry->text + end_index, entry->x_n_bytes + 1 - end_index); |
767 |
entry->text_length -= (end_pos - start_pos); |
767 |
entry->text_length -= (end_pos - start_pos); |
768 |
entry->n_bytes -= (end_index - start_index); |
768 |
entry->x_n_bytes -= (end_index - start_index); |
769 |
|
769 |
|
770 |
if (entry->current_pos > start_pos) |
770 |
if (entry->current_pos > start_pos) |
771 |
entry->current_pos -= MIN (entry->current_pos, end_pos) - start_pos; |
771 |
entry->current_pos -= MIN (entry->current_pos, end_pos) - start_pos; |
Link Here
|
1028 |
{ |
1028 |
{ |
1029 |
gtk_im_context_set_surrounding (context, |
1029 |
gtk_im_context_set_surrounding (context, |
1030 |
entry->text, |
1030 |
entry->text, |
1031 |
entry->n_bytes, |
1031 |
entry->x_n_bytes, |
1032 |
g_utf8_offset_to_pointer (entry->text, entry->current_pos) - entry->text); |
1032 |
g_utf8_offset_to_pointer (entry->text, entry->current_pos) - entry->text); |
1033 |
|
1033 |
|
1034 |
return TRUE; |
1034 |
return TRUE; |
Link Here
|
1229 |
|
1229 |
|
1230 |
if (entry->visible) |
1230 |
if (entry->visible) |
1231 |
{ |
1231 |
{ |
1232 |
g_string_prepend_len (tmp_string, entry->text, entry->n_bytes); |
1232 |
g_string_prepend_len (tmp_string, entry->text, entry->x_n_bytes); |
1233 |
g_string_insert (tmp_string, cursor_index, preedit_string); |
1233 |
g_string_insert (tmp_string, cursor_index, preedit_string); |
1234 |
} |
1234 |
} |
1235 |
else |
1235 |
else |
Link Here
|
1238 |
gint preedit_len_chars; |
1238 |
gint preedit_len_chars; |
1239 |
gunichar invisible_char; |
1239 |
gunichar invisible_char; |
1240 |
|
1240 |
|
1241 |
ch_len = g_utf8_strlen (entry->text, entry->n_bytes); |
1241 |
ch_len = g_utf8_strlen (entry->text, entry->x_n_bytes); |
1242 |
preedit_len_chars = g_utf8_strlen (preedit_string, -1); |
1242 |
preedit_len_chars = g_utf8_strlen (preedit_string, -1); |
1243 |
ch_len += preedit_len_chars; |
1243 |
ch_len += preedit_len_chars; |
1244 |
|
1244 |
|
Link Here
|
1272 |
{ |
1272 |
{ |
1273 |
if (entry->visible) |
1273 |
if (entry->visible) |
1274 |
{ |
1274 |
{ |
1275 |
pango_layout_set_text (layout, entry->text, entry->n_bytes); |
1275 |
pango_layout_set_text (layout, entry->text, entry->x_n_bytes); |
1276 |
} |
1276 |
} |
1277 |
else |
1277 |
else |
1278 |
{ |
1278 |
{ |