mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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:
parent
ed17cd6065
commit
48e9de5aae
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -90,6 +90,7 @@ struct _GnucashSheet
|
||||
guint changed_signal;
|
||||
|
||||
GtkAdjustment *hadj, *vadj;
|
||||
GtkWidget *hscrollbar, *vscrollbar;
|
||||
|
||||
GFunc moved_cb;
|
||||
gpointer moved_cb_data;
|
||||
|
Loading…
Reference in New Issue
Block a user