Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 292211
Collapse All | Expand All

(-)gtkextra/gtkitementry.c (-20 / +20 lines)
Lines 693-715 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
		    }
Lines 718-736 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;
Lines 763-771 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;
Lines 1028-1034 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;
Lines 1229-1235 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
Lines 1238-1244 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
Lines 1272-1278 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
        {

Return to bug 292211