Skip to content

Commit

Permalink
[WIP] Support touch scroll in register
Browse files Browse the repository at this point in the history
Just as an experiment, I'd like to compare how standard scrolling
behavior feels in the register view.  I find the current fast and
quantized scroll to be disconcerting, but I recognize that a lot of
thought, and trial and error, have already gone into the existing
custom scroll interactions.

This patch replaces custom scrolling with a ScrolledWindow container,
but is incomplete in many ways:
* Breaks mouse wheel scrolling.
* Breaks cursor scrolling (with keyboard).

However, I like some of what we get:
* Touch interaction feels correct.
* Fading scrollbars are more modern and consistent.
  • Loading branch information
adamwight committed Nov 8, 2023
1 parent 0650f56 commit 9d1e648
Showing 1 changed file with 21 additions and 32 deletions.
53 changes: 21 additions & 32 deletions gnucash/register/register-gnome/gnucash-register.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,6 @@ gnucash_register_create_widget (Table *table)
GtkWidget *header;
GtkWidget *widget;
GtkWidget *sheet;
GtkWidget *scrollbar;

reg = g_object_new (GNUCASH_TYPE_REGISTER, NULL);
widget = GTK_WIDGET(reg);
Expand All @@ -538,41 +537,31 @@ gnucash_register_create_widget (Table *table)
gtk_widget_set_vexpand (header, FALSE);
gtk_widget_set_valign (header, GTK_ALIGN_FILL);
g_object_set (header, "margin", 0, NULL);
gtk_widget_show (header);

gtk_grid_attach (GTK_GRID(widget), sheet, 0, 1, 1, 1);
gtk_widget_set_hexpand (sheet, TRUE);
gtk_widget_set_halign (sheet, GTK_ALIGN_FILL);
gtk_widget_set_vexpand (sheet, TRUE);
gtk_widget_set_valign (sheet, GTK_ALIGN_FILL);
g_object_set (sheet, "margin", 0, NULL);
gtk_widget_show (sheet);

scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, GNUCASH_SHEET(sheet)->vadj);
gtk_grid_attach (GTK_GRID(widget), GTK_WIDGET(scrollbar), 1, 0, 1, 2);
gtk_widget_set_hexpand (GTK_WIDGET(scrollbar), FALSE);
gtk_widget_set_halign (GTK_WIDGET(scrollbar), GTK_ALIGN_FILL);
gtk_widget_set_vexpand (GTK_WIDGET(scrollbar), TRUE);
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;

scrollbar = gtk_scrollbar_new (GTK_ORIENTATION_HORIZONTAL, GNUCASH_SHEET(sheet)->hadj);
gtk_grid_attach (GTK_GRID(widget), GTK_WIDGET(scrollbar), 0, 2, 1, 1);
gtk_widget_set_hexpand (GTK_WIDGET(scrollbar), TRUE);
gtk_widget_set_halign (GTK_WIDGET(scrollbar), GTK_ALIGN_FILL);
gtk_widget_set_vexpand (GTK_WIDGET(scrollbar), FALSE);
gtk_widget_set_valign (GTK_WIDGET(scrollbar), GTK_ALIGN_FILL);
g_object_set (GTK_WIDGET(scrollbar), "margin", 0, NULL);
reg->hscrollbar = scrollbar;
gtk_widget_show (reg->hscrollbar);
reg->hscrollbar_visible = TRUE;
GNUCASH_SHEET(sheet)->hscrollbar = scrollbar;

GtkWidget* swin =
GTK_WIDGET(gtk_scrolled_window_new (NULL, NULL));
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(swin),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
GNUCASH_SHEET(sheet)->vscrollbar =
gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(swin));
GNUCASH_SHEET(sheet)->hscrollbar =
gtk_scrolled_window_get_hscrollbar(GTK_SCROLLED_WINDOW(swin));

g_signal_connect (GNUCASH_SHEET(sheet)->hadj, "changed",
G_CALLBACK (gnucash_register_update_hadjustment), reg);

gtk_container_add (GTK_CONTAINER(swin), GTK_WIDGET(sheet));

gtk_grid_attach (GTK_GRID(widget), swin, 0, 1, 1, 1);
gtk_widget_set_hexpand (swin, TRUE);
gtk_widget_set_halign (swin, GTK_ALIGN_FILL);
gtk_widget_set_vexpand (swin, TRUE);
gtk_widget_set_valign (swin, GTK_ALIGN_FILL);
g_object_set (swin, "margin", 0, NULL);

gtk_widget_show_all (widget);

return widget;
}

Expand Down

0 comments on commit 9d1e648

Please sign in to comment.