Fix problem with scrollbar sliders not tracking value

There seems to be a problem with scrollbar sliders do not track the
value and also if you try to drag the slider it does not move. This may
be related to bug https://bugzilla.gnome.org/show_bug.cgi?id=765410

What I have found is that this problem can be overcome by hiding and
showing the scrollbar so this commit does so.
This commit is contained in:
Robert Fewell 2017-09-23 13:33:37 +01:00
parent ed17cd6065
commit 48e9de5aae
3 changed files with 41 additions and 0 deletions

View File

@ -486,6 +486,31 @@ gnucash_register_configure (GnucashSheet *sheet, gchar * state_section)
LEAVE(" ");
}
static gboolean
gnucash_register_enter_scrollbar (GtkWidget *widget,
GdkEvent *event, gpointer user_data)
{
GnucashRegister *reg = user_data;
GnucashSheet *sheet = GNUCASH_SHEET(reg->sheet);
GtkWidget *vscrollbar = sheet->vscrollbar;
GtkWidget *hscrollbar = sheet->hscrollbar;
// There seems to be a problem with the scrollbar slider not being
// updated as the mouse moves possibly related to the following bug
// https://bugzilla.gnome.org/show_bug.cgi?id=765410
// If they are hidden and shown it seems to fix it.
gtk_widget_hide (GTK_WIDGET(vscrollbar));
gtk_widget_show (GTK_WIDGET(vscrollbar));
if (gtk_widget_is_visible (hscrollbar))
{
gtk_widget_hide (GTK_WIDGET(hscrollbar));
gtk_widget_show (GTK_WIDGET(hscrollbar));
}
return FALSE;
}
static GtkWidget *
gnucash_register_create_widget (Table *table)
@ -530,6 +555,10 @@ gnucash_register_create_widget (Table *table)
gtk_widget_set_valign (GTK_WIDGET(scrollbar), GTK_ALIGN_FILL);
g_object_set (GTK_WIDGET(scrollbar), "margin", 0, NULL);
gtk_widget_show (scrollbar);
GNUCASH_SHEET(sheet)->vscrollbar = scrollbar;
g_signal_connect(G_OBJECT(scrollbar), "enter-notify-event",
G_CALLBACK(gnucash_register_enter_scrollbar), reg);
scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_HORIZONTAL, GNUCASH_SHEET(sheet)->hadj);
gtk_grid_attach (GTK_GRID(widget), GTK_WIDGET(scrollbar), 0, 2, 1, 1);
@ -541,6 +570,10 @@ gnucash_register_create_widget (Table *table)
reg->hscrollbar = scrollbar;
gtk_widget_show (reg->hscrollbar);
reg->hscrollbar_visible = TRUE;
GNUCASH_SHEET(sheet)->hscrollbar = scrollbar;
g_signal_connect(G_OBJECT(scrollbar), "enter-notify-event",
G_CALLBACK(gnucash_register_enter_scrollbar), reg);
g_signal_connect (GNUCASH_SHEET(sheet)->hadj, "changed",
G_CALLBACK (gnucash_register_update_hadjustment), reg);

View File

@ -1356,6 +1356,13 @@ gnucash_scroll_event (GtkWidget *widget, GdkEventScroll *event)
gtk_adjustment_set_value(vadj, v_value);
if (event->delta_y == 0)
{
// There are problems with the slider not tracking the value so
// when delta_y is 0 hide and showing the scrollbar seems to fix it
gtk_widget_hide (GTK_WIDGET(sheet->vscrollbar));
gtk_widget_show (GTK_WIDGET(sheet->vscrollbar));
}
return TRUE;
}

View File

@ -90,6 +90,7 @@ struct _GnucashSheet
guint changed_signal;
GtkAdjustment *hadj, *vadj;
GtkWidget *hscrollbar, *vscrollbar;
GFunc moved_cb;
gpointer moved_cb_data;