I'm trying to setup the keypress function to assign the shift+up key combination to scroll back a single line in the vte terminal window. Here is what I have so far:
case GDK_Up:
if (event -> state & GDK_SHIFT_MASK)
{
GtkAdjustment *verticalAdjust;
gdouble lower = 0;
gdouble upper = 0;
gdouble page_size = 0;
gdouble step_size = 0.1;
verticalAdjust = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrollwin[0]));
lower = gtk_adjustment_get_lower(verticalAdjust);
upper = gtk_adjustment_get_upper(verticalAdjust);
page_size = gtk_adjustment_get_page_size(verticalAdjust);
step_size = ((upper - page_size) - lower)/page_size;
gtk_adjustment_set_value (verticalAdjust, step_size);
gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW(scrollwin[0]), verticalAdjust);
printf("vertAdj: %f, lower: %f, upper: %f, pg_size: %f, step_size: %f\n", gtk_adjustment_get_value(verticalAdjust), lower, upper, page_size, step_size);
return TRUE;
}
I read in the docs for gtk_adjustment_set_value ()
:
Note that for adjustments which are used in a GtkScrollbar, the effective range of allowed values goes from adjustment->lower to adjustment->upper - adjustment->page_size.
It doesn't give any guidance under gtk_scrolled_window_set_vadjustment
.
So I thought maybe this formula would give me the scroll step size of a single line:
`step_size = ((upper - page_size) - lower)/page_size;`
I was wrong. I tried a step size equal to the step_increment of the GtkAdjust structure Set with:
step_size = gtk_adjustment_get_step_increment(verticalAdjust);
This just left the step_size at 1.0 for the most part, and scrolled back way too much when upper reached ~60.
I tried a step_size of 0.1, 1, 10 and I can't seem to make any sense out of how this whole adjustment thing works.
I just opened a new terminal window and typed dmesg then a single shift+up. I verified via the output created by the printf statement above that the step_size was 1.0, upper was 420 and the scrolled window scrolled all the way to the top. Something is not working right or I'm not getting something.
Any guidance would be much appreciated. Thanks.