|
Lines 811-833
Link Here
|
| 811 |
new_text_length = g_utf8_offset_to_pointer (new_text, n_chars) - new_text; |
811 |
new_text_length = g_utf8_offset_to_pointer (new_text, n_chars) - new_text; |
| 812 |
} |
812 |
} |
| 813 |
|
813 |
|
| 814 |
if (new_text_length + entry->n_bytes + 1 > entry->text_size) |
814 |
if (new_text_length + entry->x_n_bytes + 1 > entry->x_text_size) |
| 815 |
{ |
815 |
{ |
| 816 |
while (new_text_length + entry->n_bytes + 1 > entry->text_size) |
816 |
while (new_text_length + entry->x_n_bytes + 1 > entry->x_text_size) |
| 817 |
{ |
817 |
{ |
| 818 |
if (entry->text_size == 0) |
818 |
if (entry->x_text_size == 0) |
| 819 |
entry->text_size = MIN_SIZE; |
819 |
entry->x_text_size = MIN_SIZE; |
| 820 |
else |
820 |
else |
| 821 |
{ |
821 |
{ |
| 822 |
if (2 * (guint)entry->text_size < MAX_SIZE && |
822 |
if (2 * (guint)entry->x_text_size < MAX_SIZE && |
| 823 |
2 * (guint)entry->text_size > entry->text_size) |
823 |
2 * (guint)entry->x_text_size > entry->x_text_size) |
| 824 |
entry->text_size *= 2; |
824 |
entry->x_text_size *= 2; |
| 825 |
else |
825 |
else |
| 826 |
{ |
826 |
{ |
| 827 |
entry->text_size = MAX_SIZE; |
827 |
entry->x_text_size = MAX_SIZE; |
| 828 |
if (new_text_length > (gint)entry->text_size - (gint)entry->n_bytes - 1) |
828 |
if (new_text_length > (gint)entry->x_text_size - (gint)entry->x_n_bytes - 1) |
| 829 |
{ |
829 |
{ |
| 830 |
new_text_length = (gint)entry->text_size - (gint)entry->n_bytes - 1; |
830 |
new_text_length = (gint)entry->x_text_size - (gint)entry->x_n_bytes - 1; |
| 831 |
new_text_length = g_utf8_find_prev_char (new_text, new_text + new_text_length + 1) - new_text; |
831 |
new_text_length = g_utf8_find_prev_char (new_text, new_text + new_text_length + 1) - new_text; |
| 832 |
n_chars = g_utf8_strlen (new_text, new_text_length); |
832 |
n_chars = g_utf8_strlen (new_text, new_text_length); |
| 833 |
} |
833 |
} |
|
Lines 836-854
Link Here
|
| 836 |
} |
836 |
} |
| 837 |
} |
837 |
} |
| 838 |
|
838 |
|
| 839 |
entry->text = g_realloc (entry->text, entry->text_size); |
839 |
entry->text = g_realloc (entry->text, entry->x_text_size); |
| 840 |
} |
840 |
} |
| 841 |
|
841 |
|
| 842 |
index = g_utf8_offset_to_pointer (entry->text, *position) - entry->text; |
842 |
index = g_utf8_offset_to_pointer (entry->text, *position) - entry->text; |
| 843 |
|
843 |
|
| 844 |
g_memmove (entry->text + index + new_text_length, entry->text + index, entry->n_bytes - index); |
844 |
g_memmove (entry->text + index + new_text_length, entry->text + index, entry->x_n_bytes - index); |
| 845 |
memcpy (entry->text + index, new_text, new_text_length); |
845 |
memcpy (entry->text + index, new_text, new_text_length); |
| 846 |
|
846 |
|
| 847 |
entry->n_bytes += new_text_length; |
847 |
entry->x_n_bytes += new_text_length; |
| 848 |
entry->text_length += n_chars; |
848 |
entry->text_length += n_chars; |
| 849 |
|
849 |
|
| 850 |
/* NUL terminate for safety and convenience */ |
850 |
/* NUL terminate for safety and convenience */ |
| 851 |
entry->text[entry->n_bytes] = '\0'; |
851 |
entry->text[entry->x_n_bytes] = '\0'; |
| 852 |
|
852 |
|
| 853 |
if (entry->current_pos > *position) |
853 |
if (entry->current_pos > *position) |
| 854 |
entry->current_pos += n_chars; |
854 |
entry->current_pos += n_chars; |
|
Lines 881-889
Link Here
|
| 881 |
gint start_index = g_utf8_offset_to_pointer (entry->text, start_pos) - entry->text; |
881 |
gint start_index = g_utf8_offset_to_pointer (entry->text, start_pos) - entry->text; |
| 882 |
gint end_index = g_utf8_offset_to_pointer (entry->text, end_pos) - entry->text; |
882 |
gint end_index = g_utf8_offset_to_pointer (entry->text, end_pos) - entry->text; |
| 883 |
|
883 |
|
| 884 |
g_memmove (entry->text + start_index, entry->text + end_index, entry->n_bytes + 1 - end_index); |
884 |
g_memmove (entry->text + start_index, entry->text + end_index, entry->x_n_bytes + 1 - end_index); |
| 885 |
entry->text_length -= (end_pos - start_pos); |
885 |
entry->text_length -= (end_pos - start_pos); |
| 886 |
entry->n_bytes -= (end_index - start_index); |
886 |
entry->x_n_bytes -= (end_index - start_index); |
| 887 |
|
887 |
|
| 888 |
if (entry->current_pos > start_pos) |
888 |
if (entry->current_pos > start_pos) |
| 889 |
entry->current_pos -= MIN (entry->current_pos, end_pos) - start_pos; |
889 |
entry->current_pos -= MIN (entry->current_pos, end_pos) - start_pos; |
|
Lines 1157-1163
Link Here
|
| 1157 |
{ |
1157 |
{ |
| 1158 |
gtk_im_context_set_surrounding (context, |
1158 |
gtk_im_context_set_surrounding (context, |
| 1159 |
entry->text, |
1159 |
entry->text, |
| 1160 |
entry->n_bytes, |
1160 |
entry->x_n_bytes, |
| 1161 |
g_utf8_offset_to_pointer (entry->text, entry->current_pos) - entry->text); |
1161 |
g_utf8_offset_to_pointer (entry->text, entry->current_pos) - entry->text); |
| 1162 |
|
1162 |
|
| 1163 |
return TRUE; |
1163 |
return TRUE; |
|
Lines 1364-1370
Link Here
|
| 1364 |
|
1364 |
|
| 1365 |
if (entry->visible) |
1365 |
if (entry->visible) |
| 1366 |
{ |
1366 |
{ |
| 1367 |
g_string_prepend_len (tmp_string, entry->text, entry->n_bytes); |
1367 |
g_string_prepend_len (tmp_string, entry->text, entry->x_n_bytes); |
| 1368 |
g_string_insert (tmp_string, cursor_index, preedit_string); |
1368 |
g_string_insert (tmp_string, cursor_index, preedit_string); |
| 1369 |
} |
1369 |
} |
| 1370 |
else |
1370 |
else |
|
Lines 1373-1379
Link Here
|
| 1373 |
gint preedit_len_chars; |
1373 |
gint preedit_len_chars; |
| 1374 |
gunichar invisible_char; |
1374 |
gunichar invisible_char; |
| 1375 |
|
1375 |
|
| 1376 |
ch_len = g_utf8_strlen (entry->text, entry->n_bytes); |
1376 |
ch_len = g_utf8_strlen (entry->text, entry->x_n_bytes); |
| 1377 |
preedit_len_chars = g_utf8_strlen (preedit_string, -1); |
1377 |
preedit_len_chars = g_utf8_strlen (preedit_string, -1); |
| 1378 |
ch_len += preedit_len_chars; |
1378 |
ch_len += preedit_len_chars; |
| 1379 |
|
1379 |
|
|
Lines 1407-1413
Link Here
|
| 1407 |
{ |
1407 |
{ |
| 1408 |
if (entry->visible) |
1408 |
if (entry->visible) |
| 1409 |
{ |
1409 |
{ |
| 1410 |
pango_layout_set_text (layout, entry->text, entry->n_bytes); |
1410 |
pango_layout_set_text (layout, entry->text, entry->x_n_bytes); |
| 1411 |
} |
1411 |
} |
| 1412 |
else |
1412 |
else |
| 1413 |
{ |
1413 |
{ |