added a min_indent threshold and only grow indent when the change is meaningful (greater than one space width), then only run the expensive gtk_xtext_recalc_widths() path when indent truly increased.

I also kept the existing correctness behavior: when indent does materially change, it still fixes/recalculates and updates ent->indent/force_render as before.
This commit is contained in:
2026-02-17 14:33:16 -07:00
parent eb112f9cd7
commit 97cbe98b3d

View File

@@ -5462,6 +5462,7 @@ gtk_xtext_append_indent (xtext_buffer *buf,
int space; int space;
int tempindent; int tempindent;
int left_width; int left_width;
int min_indent;
if (left_len == -1) if (left_len == -1)
left_len = strlen (left_text); left_len = strlen (left_text);
@@ -5500,24 +5501,32 @@ gtk_xtext_append_indent (xtext_buffer *buf,
else else
space = 0; space = 0;
min_indent = MARGIN + space;
/* do we need to auto adjust the separator position? */ /* do we need to auto adjust the separator position? */
if (buf->xtext->auto_indent && if (buf->xtext->auto_indent &&
buf->indent < buf->xtext->max_auto_indent && buf->indent < buf->xtext->max_auto_indent &&
ent->indent < MARGIN + space) ent->indent < min_indent)
{ {
tempindent = MARGIN + space + buf->xtext->space_width + left_width; tempindent = min_indent + buf->xtext->space_width + left_width;
if (tempindent > buf->indent) /* Ignore tiny one-pixel style nudges.
* They can trigger expensive full-width recalculations and are
* perceived as a slight delay when sending messages with indenting on. */
if (tempindent > buf->indent + buf->xtext->space_width)
buf->indent = tempindent; buf->indent = tempindent;
if (buf->indent > buf->xtext->max_auto_indent) if (buf->indent > buf->xtext->max_auto_indent)
buf->indent = buf->xtext->max_auto_indent; buf->indent = buf->xtext->max_auto_indent;
gtk_xtext_fix_indent (buf); if (buf->indent > ent->indent + left_width + buf->xtext->space_width)
gtk_xtext_recalc_widths (buf, FALSE); {
gtk_xtext_fix_indent (buf);
gtk_xtext_recalc_widths (buf, FALSE);
ent->indent = (buf->indent - left_width) - buf->xtext->space_width; ent->indent = (buf->indent - left_width) - buf->xtext->space_width;
buf->xtext->force_render = TRUE; buf->xtext->force_render = TRUE;
}
} }
gtk_xtext_append_entry (buf, ent, stamp); gtk_xtext_append_entry (buf, ent, stamp);