10 Commits

Author SHA1 Message Date
deepend-tildeclub
72427006dd Merge pull request #231 from mlt/py-eol
fix(python): concatenate bytes in compile_line of py console
2026-05-12 15:34:31 -06:00
deepend-tildeclub
0e5f702651 Merge pull request #233 from ZoiteChat/userlist-button-meter-layout-fix
Tighten userlist button/meter layout
2026-05-11 08:17:02 -06:00
4f1b0fc838 Tighten userlist button/meter layout 2026-05-11 01:35:57 -06:00
Mikhail Titov
23d0963c2d fix(python): decode the console input to str in _on_say_command 2026-05-10 23:57:43 -05:00
deepend-tildeclub
dcb35fb80f Merge pull request #230 from ZoiteChat/fix-scrollbar-consistency
UI Consistency: Use native GTK scrollbars across main panes
2026-05-10 08:31:15 -06:00
b1768854c3 Tighten userlist count/pane width behavior 2026-05-09 12:53:35 -06:00
4ed4eaf8e8 fix FSF address. 2026-05-08 20:50:51 -06:00
deepend-tildeclub
d167b53b17 Merge pull request #227 from ZoiteChat/fix-tab-scroll-skip
Consume handled tab wheel events
2026-05-08 07:52:37 -06:00
18eff80a30 UI Consistency: Use native GTK scrollbars across main panes 2026-05-07 13:29:22 -06:00
a44ec5f624 Consume handled tab wheel events 2026-05-07 12:03:41 -06:00
8 changed files with 148 additions and 51 deletions

View File

@@ -320,9 +320,9 @@ def _on_say_command(word, word_eol, userdata):
return 0 return 0
try: try:
python = _cstr(word_eol[1]) python = __decode(_cstr(word_eol[1]))
except Exception: except Exception:
python = b'' python = ''
if not python: if not python:
return 1 return 1

View File

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

View File

@@ -2,10 +2,10 @@
* Copyright (C) 1998-2010 Peter Zelezny. * Copyright (C) 1998-2010 Peter Zelezny.
* Copyright (C) 2009-2013 Berke Viktor. * Copyright (C) 2009-2013 Berke Viktor.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or
* it under the terms of the GNU General Public License as published by * modify it under the terms of the GNU General Public License
* the Free Software Foundation; either version 2 of the License, or * as published by the Free Software Foundation; either version 2
* (at your option) any later version. * of the License, or (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -13,8 +13,8 @@
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software * along with this program; if not, see
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * <https://www.gnu.org/licenses/>.
*/ */
/* You can distribute this header with your plugins for easy compilation */ /* You can distribute this header with your plugins for easy compilation */

View File

@@ -304,21 +304,28 @@ tab_scroll_right_down_clicked (GtkWidget *widget, chanview *cv)
static gboolean static gboolean
tab_scroll_cb (GtkWidget *widget, GdkEventScroll *event, gpointer cv) tab_scroll_cb (GtkWidget *widget, GdkEventScroll *event, gpointer cv)
{ {
if (prefs.hex_gui_tab_scrollchans)
{
int direction = cv_scroll_direction (event); int direction = cv_scroll_direction (event);
if (prefs.hex_gui_tab_scrollchans)
{
if (direction != 0) if (direction != 0)
{
mg_switch_page (1, direction); mg_switch_page (1, direction);
return TRUE;
}
} }
else else
{ {
int direction = cv_scroll_direction (event);
if (direction < 0) if (direction < 0)
{
tab_scroll_left_up_clicked (widget, cv); tab_scroll_left_up_clicked (widget, cv);
return TRUE;
}
else if (direction > 0) else if (direction > 0)
{
tab_scroll_right_down_clicked (widget, cv); tab_scroll_right_down_clicked (widget, cv);
return TRUE;
}
} }
return FALSE; return FALSE;
@@ -346,13 +353,12 @@ cv_tabs_init (chanview *cv)
viewport = gtk_scrolled_window_new (0, 0); viewport = gtk_scrolled_window_new (0, 0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (viewport), GTK_SHADOW_NONE); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (viewport), GTK_SHADOW_NONE);
gtk_scrolled_window_set_overlay_scrolling (GTK_SCROLLED_WINDOW (viewport), FALSE);
if (cv->vertical) if (cv->vertical)
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport), gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
else else
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport), gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (viewport),
GTK_POLICY_ALWAYS, GTK_POLICY_NEVER); GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (viewport), 1); gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (viewport), 1);
gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (viewport), 1); gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (viewport), 1);
gtk_widget_set_hexpand (viewport, TRUE); gtk_widget_set_hexpand (viewport, TRUE);

View File

@@ -2412,9 +2412,9 @@ mg_userlist_button (GtkWidget * box, char *label, char *cmd,
g_signal_connect (G_OBJECT (wid), "clicked", g_signal_connect (G_OBJECT (wid), "clicked",
G_CALLBACK (userlist_button_cb), cmd); G_CALLBACK (userlist_button_cb), cmd);
gtk_widget_set_hexpand (wid, TRUE); gtk_widget_set_hexpand (wid, TRUE);
gtk_widget_set_vexpand (wid, TRUE); gtk_widget_set_vexpand (wid, FALSE);
gtk_widget_set_halign (wid, GTK_ALIGN_FILL); gtk_widget_set_halign (wid, GTK_ALIGN_FILL);
gtk_widget_set_valign (wid, GTK_ALIGN_FILL); gtk_widget_set_valign (wid, GTK_ALIGN_CENTER);
gtk_grid_attach (GTK_GRID (box), wid, a, c, b - a, d - c); gtk_grid_attach (GTK_GRID (box), wid, a, c, b - a, d - c);
show_and_unfocus (wid); show_and_unfocus (wid);
} }
@@ -3413,8 +3413,13 @@ mg_create_textarea (session *sess, GtkWidget *box)
inbox = mg_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2); inbox = mg_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2);
gtk_box_pack_start (GTK_BOX (vbox), inbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), inbox, TRUE, TRUE, 0);
frame = gtk_frame_new (NULL); frame = gtk_scrolled_window_new (NULL, NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_widget_set_hexpand (frame, TRUE);
gtk_widget_set_vexpand (frame, TRUE);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (frame),
GTK_SHADOW_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (frame),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (inbox), frame, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (inbox), frame, TRUE, TRUE, 0);
theme_get_xtext_colors_for_widget (frame, xtext_palette, XTEXT_COLS); theme_get_xtext_colors_for_widget (frame, xtext_palette, XTEXT_COLS);
@@ -3431,9 +3436,7 @@ mg_create_textarea (session *sess, GtkWidget *box)
g_signal_connect (G_OBJECT (xtext), "word_click", g_signal_connect (G_OBJECT (xtext), "word_click",
G_CALLBACK (mg_word_clicked), NULL); G_CALLBACK (mg_word_clicked), NULL);
gui->vscrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, gui->vscrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (frame));
GTK_XTEXT (xtext)->adj);
gtk_box_pack_start (GTK_BOX (inbox), gui->vscrollbar, FALSE, TRUE, 0);
gtk_drag_dest_set (gui->vscrollbar, 5, dnd_dest_targets, 2, gtk_drag_dest_set (gui->vscrollbar, 5, dnd_dest_targets, 2,
GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK); GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
@@ -3476,7 +3479,7 @@ mg_create_meters (session_gui *gui, GtkWidget *parent_box)
GtkWidget *infbox, *wid, *box; GtkWidget *infbox, *wid, *box;
gui->meter_box = infbox = box = mg_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 1); gui->meter_box = infbox = box = mg_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 1);
gtk_box_pack_start (GTK_BOX (parent_box), box, 0, 0, 0); gtk_box_pack_end (GTK_BOX (parent_box), box, 0, 0, 0);
if ((prefs.hex_gui_lagometer & 2) || (prefs.hex_gui_throttlemeter & 2)) if ((prefs.hex_gui_lagometer & 2) || (prefs.hex_gui_throttlemeter & 2))
{ {
@@ -3661,8 +3664,14 @@ mg_create_userlist (session_gui *gui, GtkWidget *box)
gtk_box_pack_start (GTK_BOX (box), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), vbox, TRUE, TRUE, 0);
gui->namelistinfo = gtk_label_new (NULL); gui->namelistinfo = gtk_label_new (NULL);
gtk_label_set_xalign (GTK_LABEL (gui->namelistinfo), 0.0f); gtk_label_set_xalign (GTK_LABEL (gui->namelistinfo), 0.5f);
gtk_widget_set_halign (gui->namelistinfo, GTK_ALIGN_START); gtk_label_set_justify (GTK_LABEL (gui->namelistinfo), GTK_JUSTIFY_CENTER);
gtk_label_set_ellipsize (GTK_LABEL (gui->namelistinfo), PANGO_ELLIPSIZE_END);
gtk_label_set_width_chars (GTK_LABEL (gui->namelistinfo), 1);
gtk_widget_set_margin_start (gui->namelistinfo, 0);
gtk_widget_set_margin_end (gui->namelistinfo, 0);
gtk_widget_set_hexpand (gui->namelistinfo, TRUE);
gtk_widget_set_halign (gui->namelistinfo, GTK_ALIGN_FILL);
if (prefs.hex_gui_ulist_count) if (prefs.hex_gui_ulist_count)
gtk_box_pack_start (GTK_BOX (vbox), gui->namelistinfo, 0, 0, 0); gtk_box_pack_start (GTK_BOX (vbox), gui->namelistinfo, 0, 0, 0);

View File

@@ -93,23 +93,14 @@ userlist_apply_saved_column_width (GtkTreeViewColumn *column, int width)
static void static void
userlist_update_min_width (session *sess) userlist_update_min_width (session *sess)
{ {
GtkRequisition minimum;
GtkRequisition natural;
GtkWidget *scrolled_window; GtkWidget *scrolled_window;
int width;
if (!sess || !sess->gui || !sess->gui->user_box || !sess->gui->namelistinfo || !sess->gui->user_tree) if (!sess || !sess->gui || !sess->gui->user_tree)
return; return;
gtk_widget_get_preferred_size (sess->gui->namelistinfo, &minimum, &natural);
width = MAX (minimum.width, natural.width);
if (width < 1)
width = 1;
scrolled_window = gtk_widget_get_parent (sess->gui->user_tree); scrolled_window = gtk_widget_get_parent (sess->gui->user_tree);
if (GTK_IS_SCROLLED_WINDOW (scrolled_window)) if (GTK_IS_SCROLLED_WINDOW (scrolled_window))
gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (scrolled_window), width); gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (scrolled_window), 1);
gtk_widget_set_size_request (sess->gui->user_box, width, -1);
} }
GdkPixbuf * GdkPixbuf *
@@ -909,17 +900,19 @@ userlist_create (GtkWidget *box)
}; };
sw = gtk_scrolled_window_new (NULL, NULL); sw = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_set_hexpand (sw, TRUE);
gtk_widget_set_vexpand (sw, TRUE);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
GTK_SHADOW_ETCHED_IN); GTK_SHADOW_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
prefs.hex_gui_ulist_show_hosts ? GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
GTK_POLICY_AUTOMATIC : gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (sw), 1);
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (box), sw, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), sw, TRUE, TRUE, 0);
gtk_widget_show (sw); gtk_widget_show (sw);
treeview = gtk_tree_view_new (); treeview = gtk_tree_view_new ();
gtk_widget_set_hexpand (treeview, TRUE);
gtk_widget_set_vexpand (treeview, TRUE);
gtk_widget_set_name (treeview, "zoitechat-userlist"); gtk_widget_set_name (treeview, "zoitechat-userlist");
gtk_widget_set_can_focus (treeview, TRUE); gtk_widget_set_can_focus (treeview, TRUE);
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);

View File

@@ -110,6 +110,15 @@ enum
TARGET_COMPOUND_TEXT TARGET_COMPOUND_TEXT
}; };
enum
{
PROP_0,
PROP_HADJUSTMENT,
PROP_VADJUSTMENT,
PROP_HSCROLL_POLICY,
PROP_VSCROLL_POLICY
};
/* Selection targets for PRIMARY selection / copy-paste. /* Selection targets for PRIMARY selection / copy-paste.
* *
@@ -158,7 +167,8 @@ gtk_xtext_install_selection_targets (GtkWidget *widget)
static guint xtext_signals[LAST_SIGNAL]; static guint xtext_signals[LAST_SIGNAL];
G_DEFINE_TYPE (GtkXText, gtk_xtext, GTK_TYPE_WIDGET) G_DEFINE_TYPE_WITH_CODE (GtkXText, gtk_xtext, GTK_TYPE_WIDGET,
G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL))
char *nocasestrstr (const char *text, const char *tofind); /* util.c */ char *nocasestrstr (const char *text, const char *tofind); /* util.c */
int xtext_get_stamp_str (time_t, char **); int xtext_get_stamp_str (time_t, char **);
@@ -171,6 +181,10 @@ static void gtk_xtext_adjustment_changed (GtkAdjustment * adj,
GtkXText * xtext); GtkXText * xtext);
static void gtk_xtext_scroll_adjustments (GtkXText *xtext, GtkAdjustment *hadj, static void gtk_xtext_scroll_adjustments (GtkXText *xtext, GtkAdjustment *hadj,
GtkAdjustment *vadj); GtkAdjustment *vadj);
static void gtk_xtext_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec);
static void gtk_xtext_get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec);
static int gtk_xtext_render_ents (GtkXText * xtext, textentry *, textentry *); static int gtk_xtext_render_ents (GtkXText * xtext, textentry *, textentry *);
static void gtk_xtext_recalc_widths (xtext_buffer *buf, int); static void gtk_xtext_recalc_widths (xtext_buffer *buf, int);
static void gtk_xtext_fix_indent (xtext_buffer *buf); static void gtk_xtext_fix_indent (xtext_buffer *buf);
@@ -794,6 +808,9 @@ gtk_xtext_init (GtkXText * xtext)
xtext->recycle = FALSE; xtext->recycle = FALSE;
xtext->dont_render = FALSE; xtext->dont_render = FALSE;
xtext->dont_render2 = FALSE; xtext->dont_render2 = FALSE;
xtext->hadj = NULL;
xtext->hscroll_policy = GTK_SCROLL_MINIMUM;
xtext->vscroll_policy = GTK_SCROLL_MINIMUM;
gtk_xtext_scroll_adjustments (xtext, NULL, NULL); gtk_xtext_scroll_adjustments (xtext, NULL, NULL);
gtk_xtext_install_selection_targets (GTK_WIDGET (xtext)); gtk_xtext_install_selection_targets (GTK_WIDGET (xtext));
@@ -886,6 +903,66 @@ gtk_xtext_adjustment_changed (GtkAdjustment * adj, GtkXText * xtext)
xtext->buffer->old_value = xtext_adj_get_value (adj); xtext->buffer->old_value = xtext_adj_get_value (adj);
} }
static void
gtk_xtext_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
{
GtkXText *xtext = GTK_XTEXT (object);
GtkAdjustment *adj;
switch (prop_id)
{
case PROP_HADJUSTMENT:
adj = g_value_get_object (value);
if (xtext->hadj == adj)
break;
if (xtext->hadj)
g_object_unref (xtext->hadj);
xtext->hadj = adj ? g_object_ref (adj) : NULL;
g_object_notify (object, "hadjustment");
break;
case PROP_VADJUSTMENT:
gtk_xtext_scroll_adjustments (xtext, NULL, g_value_get_object (value));
g_object_notify (object, "vadjustment");
break;
case PROP_HSCROLL_POLICY:
xtext->hscroll_policy = g_value_get_enum (value);
g_object_notify (object, "hscroll-policy");
break;
case PROP_VSCROLL_POLICY:
xtext->vscroll_policy = g_value_get_enum (value);
g_object_notify (object, "vscroll-policy");
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
gtk_xtext_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
{
GtkXText *xtext = GTK_XTEXT (object);
switch (prop_id)
{
case PROP_HADJUSTMENT:
g_value_set_object (value, xtext->hadj);
break;
case PROP_VADJUSTMENT:
g_value_set_object (value, xtext->adj);
break;
case PROP_HSCROLL_POLICY:
g_value_set_enum (value, xtext->hscroll_policy);
break;
case PROP_VSCROLL_POLICY:
g_value_set_enum (value, xtext->vscroll_policy);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
GtkWidget * GtkWidget *
gtk_xtext_new (const XTextColor *palette, int separator) gtk_xtext_new (const XTextColor *palette, int separator)
{ {
@@ -952,6 +1029,11 @@ gtk_xtext_cleanup (GtkXText *xtext)
xtext->adj = NULL; xtext->adj = NULL;
} }
if (xtext->hadj)
{
g_object_unref (G_OBJECT (xtext->hadj));
xtext->hadj = NULL;
}
if (xtext->hand_cursor) if (xtext->hand_cursor)
{ {
@@ -2924,6 +3006,13 @@ gtk_xtext_class_init (GtkXTextClass * class)
widget_class = (GtkWidgetClass *) class; widget_class = (GtkWidgetClass *) class;
xtext_class = (GtkXTextClass *) class; xtext_class = (GtkXTextClass *) class;
object_class->set_property = gtk_xtext_set_property;
object_class->get_property = gtk_xtext_get_property;
g_object_class_override_property (object_class, PROP_HADJUSTMENT, "hadjustment");
g_object_class_override_property (object_class, PROP_VADJUSTMENT, "vadjustment");
g_object_class_override_property (object_class, PROP_HSCROLL_POLICY, "hscroll-policy");
g_object_class_override_property (object_class, PROP_VSCROLL_POLICY, "vscroll-policy");
xtext_signals[WORD_CLICK] = xtext_signals[WORD_CLICK] =
g_signal_new ("word_click", g_signal_new ("word_click",
G_TYPE_FROM_CLASS (object_class), G_TYPE_FROM_CLASS (object_class),
@@ -4830,13 +4919,12 @@ gtk_xtext_check_marker_visibility (GtkXText * xtext)
static void static void
gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint maxo) gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint maxo)
{ {
gint off1, off2, curlen; gint off1, off2;
GSList *cursl; GSList *cursl;
offsets_t marks; offsets_t marks;
offlen_t *meta; offlen_t *meta;
off1 = 0; off1 = 0;
curlen = 0;
cursl = slp; cursl = slp;
while (cursl) while (cursl)
{ {
@@ -4846,7 +4934,6 @@ gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint max
off1 = meta->off + start; off1 = meta->off + start;
break; break;
} }
curlen += meta->len;
start -= meta->len; start -= meta->len;
end -= meta->len; end -= meta->len;
cursl = g_slist_next (cursl); cursl = g_slist_next (cursl);
@@ -4861,7 +4948,6 @@ gtk_xtext_unstrip_color (gint start, gint end, GSList *slp, GList **gl, gint max
off2 = meta->off + end; off2 = meta->off + end;
break; break;
} }
curlen += meta->len;
end -= meta->len; end -= meta->len;
cursl = g_slist_next (cursl); cursl = g_slist_next (cursl);
} }

View File

@@ -134,6 +134,9 @@ struct _GtkXText
xtext_buffer *selection_buffer; xtext_buffer *selection_buffer;
GtkAdjustment *adj; GtkAdjustment *adj;
GtkAdjustment *hadj;
GtkScrollablePolicy hscroll_policy;
GtkScrollablePolicy vscroll_policy;
cairo_surface_t *background_surface; /* 0 = use palette[19] */ cairo_surface_t *background_surface; /* 0 = use palette[19] */
cairo_surface_t *background_clip_surface; cairo_surface_t *background_clip_surface;
GdkWindow *draw_window; /* points to ->window */ GdkWindow *draw_window; /* points to ->window */