Merge pull request #248 from ZoiteChat/scroll-speed-fix

Fix xtext wheel scroll speed handling + prefs slider
This commit is contained in:
deepend-tildeclub
2026-05-25 10:29:40 -06:00
committed by GitHub
7 changed files with 50 additions and 9 deletions

View File

@@ -447,6 +447,7 @@ const struct prefs vars[] =
{"gui_tab_layout", P_OFFINT (hex_gui_tab_layout), TYPE_INT},
{"gui_tab_closebuttons", P_OFFINT (hex_gui_tab_closebuttons), TYPE_BOOL},
{"gui_tab_middleclose", P_OFFINT (hex_gui_tab_middleclose), TYPE_BOOL},
{"gui_mouse_scroll_speed", P_OFFINT (hex_gui_mouse_scroll_speed), TYPE_INT},
{"gui_tab_newtofront", P_OFFINT (hex_gui_tab_newtofront), TYPE_INT},
{"gui_tab_pos", P_OFFINT (hex_gui_tab_pos), TYPE_INT},
{"gui_tab_scrollchans", P_OFFINT (hex_gui_tab_scrollchans), TYPE_BOOL},
@@ -783,6 +784,7 @@ load_default_config(void)
prefs.hex_gui_tab_server = 1;
prefs.hex_gui_tab_sort = 1;
prefs.hex_gui_tab_scrollchans = 1;
prefs.hex_gui_mouse_scroll_speed = 10;
prefs.hex_gui_topicbar = 1;
prefs.hex_gui_transparency = 255;
prefs.hex_gui_tray = 1;

View File

@@ -267,6 +267,7 @@ struct zoitechatprefs
int hex_gui_tab_layout;
int hex_gui_tab_closebuttons;
int hex_gui_tab_middleclose;
int hex_gui_mouse_scroll_speed;
int hex_gui_tab_newtofront;
int hex_gui_tab_pos;
int hex_gui_tab_small;

View File

@@ -305,12 +305,14 @@ static gboolean
tab_scroll_cb (GtkWidget *widget, GdkEventScroll *event, gpointer cv)
{
int direction = cv_scroll_direction (event);
int i;
if (prefs.hex_gui_tab_scrollchans)
{
if (direction != 0)
{
mg_switch_page (1, direction);
for (i = 0; i < cv_scroll_step_count (); i++)
mg_switch_page (1, direction);
return TRUE;
}
}
@@ -318,12 +320,14 @@ tab_scroll_cb (GtkWidget *widget, GdkEventScroll *event, gpointer cv)
{
if (direction < 0)
{
tab_scroll_left_up_clicked (widget, cv);
for (i = 0; i < cv_scroll_step_count (); i++)
tab_scroll_left_up_clicked (widget, cv);
return TRUE;
}
else if (direction > 0)
{
tab_scroll_right_down_clicked (widget, cv);
for (i = 0; i < cv_scroll_step_count (); i++)
tab_scroll_right_down_clicked (widget, cv);
return TRUE;
}
}

View File

@@ -112,9 +112,11 @@ cv_tree_scroll_event_cb (GtkWidget *widget, GdkEventScroll *event, gpointer user
if (prefs.hex_gui_tab_scrollchans)
{
int direction = cv_scroll_direction (event);
int i;
if (direction != 0)
mg_switch_page (1, direction);
for (i = 0; i < cv_scroll_step_count (); i++)
mg_switch_page (1, direction);
return direction != 0;
}

View File

@@ -126,6 +126,15 @@ cv_scroll_direction (GdkEventScroll *event)
}
}
static int
cv_scroll_step_count (void)
{
int speed = prefs.hex_gui_mouse_scroll_speed;
if (speed < 1)
speed = 1;
return (speed + 9) / 10;
}
/* ======= TABS ======= */

View File

@@ -193,6 +193,7 @@ static const setting appearance_advanced_settings[] =
{ST_HEADER, N_("Advanced"),0,0,0},
{ST_EFILE, N_ ("Background image:"), P_OFFSETNL (hex_text_background), 0, 0, sizeof prefs.hex_text_background},
{ST_HSCALE, N_("Window opacity:"), P_OFFINTNL(hex_gui_transparency),0,0,0},
{ST_HSCALE, N_("Mouse wheel scroll speed (Slower ← → Faster):"), P_OFFINTNL(hex_gui_mouse_scroll_speed), 0, 0, 100},
{ST_END, 0, 0, 0, 0, 0}
};

View File

@@ -2938,19 +2938,41 @@ gtk_xtext_scroll (GtkWidget *widget, GdkEventScroll *event)
{
GtkXText *xtext = GTK_XTEXT (widget);
gfloat new_value;
gfloat step;
gdouble dx;
gdouble dy;
int direction = 0;
int speed = prefs.hex_gui_mouse_scroll_speed;
if (event->direction == GDK_SCROLL_UP) /* mouse wheel pageUp */
if (speed < 1)
speed = 1;
step = (xtext_adj_get_page_increment (xtext->adj) * speed) / 100.0f;
if (event->direction == GDK_SCROLL_SMOOTH &&
gdk_event_get_scroll_deltas ((GdkEvent *)event, &dx, &dy))
{
if (dy > 0)
direction = 1;
else if (dy < 0)
direction = -1;
}
else if (event->direction == GDK_SCROLL_UP)
direction = -1;
else if (event->direction == GDK_SCROLL_DOWN)
direction = 1;
if (direction < 0)
{
new_value = xtext_adj_get_value (xtext->adj) -
(xtext_adj_get_page_increment (xtext->adj) / 10);
step;
if (new_value < xtext_adj_get_lower (xtext->adj))
new_value = xtext_adj_get_lower (xtext->adj);
xtext_adj_set_value (xtext->adj, new_value);
}
else if (event->direction == GDK_SCROLL_DOWN) /* mouse wheel pageDn */
else if (direction > 0)
{
new_value = xtext_adj_get_value (xtext->adj) +
(xtext_adj_get_page_increment (xtext->adj) / 10);
step;
if (new_value > (xtext_adj_get_upper (xtext->adj) -
xtext_adj_get_page_size (xtext->adj)))
new_value = xtext_adj_get_upper (xtext->adj) -
@@ -2958,7 +2980,7 @@ gtk_xtext_scroll (GtkWidget *widget, GdkEventScroll *event)
xtext_adj_set_value (xtext->adj, new_value);
}
return FALSE;
return direction != 0;
}
static void