Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 319307 | Differences between
and this patch

Collapse All | Expand All

(-)old/geda-gattrib-1.4.3/src/gtkitementry_2_2.c (-20 / +20 lines)
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
        {

Return to bug 319307