1 Commits

Author SHA1 Message Date
6d65871c4d Fix xtext resize paint clipping 2026-05-11 13:32:11 -06:00
3 changed files with 56 additions and 18 deletions

View File

@@ -4166,10 +4166,10 @@ const struct commands xc_cmds[] = {
static int
command_compare (const void *a, const void *b)
{
return g_ascii_strcasecmp (a, ((const struct commands *)b)->name);
return g_ascii_strcasecmp (a, ((struct commands *)b)->name);
}
static const struct commands *
static struct commands *
find_internal_command (char *name)
{
/* the "-1" is to skip the NULL terminator */
@@ -4205,7 +4205,7 @@ usercommand_show_help (session *sess, char *name)
static void
help (session *sess, char *tbuf, char *helpcmd, int quiet)
{
const struct commands *cmd;
struct commands *cmd;
if (plugin_show_help (sess, helpcmd))
return;
@@ -4763,7 +4763,7 @@ handle_command (session *sess, char *cmd, int check_spch)
char *word[PDIWORDS+1];
char *word_eol[PDIWORDS+1];
static int command_level = 0;
const struct commands *int_cmd;
struct commands *int_cmd;
char *pdibuf;
char *tbuf;
int len;

View File

@@ -2412,9 +2412,9 @@ mg_userlist_button (GtkWidget * box, char *label, char *cmd,
g_signal_connect (G_OBJECT (wid), "clicked",
G_CALLBACK (userlist_button_cb), cmd);
gtk_widget_set_hexpand (wid, TRUE);
gtk_widget_set_vexpand (wid, FALSE);
gtk_widget_set_vexpand (wid, TRUE);
gtk_widget_set_halign (wid, GTK_ALIGN_FILL);
gtk_widget_set_valign (wid, GTK_ALIGN_CENTER);
gtk_widget_set_valign (wid, GTK_ALIGN_FILL);
gtk_grid_attach (GTK_GRID (box), wid, a, c, b - a, d - c);
show_and_unfocus (wid);
}
@@ -3479,7 +3479,7 @@ mg_create_meters (session_gui *gui, GtkWidget *parent_box)
GtkWidget *infbox, *wid, *box;
gui->meter_box = infbox = box = mg_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 1);
gtk_box_pack_end (GTK_BOX (parent_box), box, 0, 0, 0);
gtk_box_pack_start (GTK_BOX (parent_box), box, 0, 0, 0);
if ((prefs.hex_gui_lagometer & 2) || (prefs.hex_gui_throttlemeter & 2))
{

View File

@@ -1283,13 +1283,25 @@ gtk_xtext_get_preferred_height_for_width (GtkWidget *widget, gint width,
*natural = requisition.height;
}
static void
gtk_xtext_invalidate_resize (GtkXText *xtext, xtext_buffer *buf)
{
buf->pagetop_ent = NULL;
dontscroll (buf);
xtext->force_render = TRUE;
}
static void
gtk_xtext_size_allocate (GtkWidget * widget, GtkAllocation * allocation)
{
GtkXText *xtext = GTK_XTEXT (widget);
int height_only = FALSE;
gboolean resized;
GdkWindow *window;
resized = allocation->width != xtext->buffer->window_width ||
allocation->height != xtext->buffer->window_height;
if (allocation->width == xtext->buffer->window_width)
height_only = TRUE;
@@ -1315,6 +1327,11 @@ gtk_xtext_size_allocate (GtkWidget * widget, GtkAllocation * allocation)
xtext_adj_set_value (xtext->adj,
xtext_adj_get_upper (xtext->adj) -
xtext_adj_get_page_size (xtext->adj));
if (resized)
{
gtk_xtext_invalidate_resize (xtext, xtext->buffer);
gtk_widget_queue_draw (widget);
}
}
}
@@ -1587,6 +1604,17 @@ gtk_xtext_render (GtkWidget *widget, GdkRectangle *area, cairo_t *cr)
gtk_widget_get_allocation (widget, &allocation);
if (xtext->force_render && area->x == 0 && area->y == 0 &&
area->height == allocation.height &&
area->width == allocation.width)
{
xtext->force_render = FALSE;
}
else if (xtext->force_render)
{
gtk_widget_queue_draw (widget);
}
if (area->x == 0 && area->y == 0 &&
area->height == allocation.height &&
area->width == allocation.width)
@@ -4302,13 +4330,9 @@ gtk_xtext_calc_lines (xtext_buffer *buf, int fire_signal)
int width;
int height;
int lines;
GdkWindow *window;
window = gtk_widget_get_window (GTK_WIDGET (buf->xtext));
if (!window)
return;
height = gdk_window_get_height (window);
width = gdk_window_get_width (window);
height = buf->window_height;
width = buf->window_width;
width -= MARGIN;
if (width < 30 || height < buf->xtext->fontsize || width < buf->indent + 30)
@@ -4520,6 +4544,7 @@ gtk_xtext_render_page (GtkXText * xtext)
int startline = adj_value;
int pos, overlap;
GdkWindow *window;
GtkAllocation allocation;
if(!gtk_widget_get_realized(GTK_WIDGET(xtext)))
return;
@@ -4530,8 +4555,9 @@ gtk_xtext_render_page (GtkXText * xtext)
window = gtk_widget_get_window (GTK_WIDGET (xtext));
if (!window)
return;
width = gdk_window_get_width (window);
height = gdk_window_get_height (window);
gtk_widget_get_allocation (GTK_WIDGET (xtext), &allocation);
width = allocation.width;
height = allocation.height;
if (width < 34 || height < xtext->fontsize || width < xtext->buffer->indent + 32)
return;
@@ -4919,12 +4945,13 @@ gtk_xtext_check_marker_visibility (GtkXText * xtext)
static void
gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint maxo)
{
gint off1, off2;
gint off1, off2, curlen;
GSList *cursl;
offsets_t marks;
offlen_t *meta;
off1 = 0;
curlen = 0;
cursl = slp;
while (cursl)
{
@@ -4934,6 +4961,7 @@ gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint max
off1 = meta->off + start;
break;
}
curlen += meta->len;
start -= meta->len;
end -= meta->len;
cursl = g_slist_next (cursl);
@@ -4948,6 +4976,7 @@ gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint max
off2 = meta->off + end;
break;
}
curlen += meta->len;
end -= meta->len;
cursl = g_slist_next (cursl);
}
@@ -5739,6 +5768,7 @@ gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render)
{
int w, h;
GdkWindow *window;
GtkAllocation allocation;
buf->xtext = xtext;
@@ -5765,8 +5795,9 @@ gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render)
window = gtk_widget_get_window (GTK_WIDGET (xtext));
if (!window)
return;
h = gdk_window_get_height (window);
w = gdk_window_get_width (window);
gtk_widget_get_allocation (GTK_WIDGET (xtext), &allocation);
h = allocation.height;
w = allocation.width;
/* after a font change */
if (buf->needs_recalc)
@@ -5804,6 +5835,10 @@ gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render)
if (render)
{
gboolean resized;
resized = buf->window_width != w || buf->window_height != h;
/* did the window change size since this buffer was last shown? */
if (buf->window_width != w)
{
@@ -5824,6 +5859,9 @@ gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render)
gtk_xtext_adjustment_set (buf, FALSE);
}
if (resized)
gtk_xtext_invalidate_resize (xtext, buf);
gtk_xtext_render_page (xtext);
{
GtkAllocation allocation;