diff options
author | Benjamin Otte <otte@redhat.com> | 2017-11-05 16:12:35 +0100 |
---|---|---|
committer | Daniel Boles <dboles@src.gnome.org> | 2017-11-22 19:11:31 +0000 |
commit | f8cb3fc3a847f2f106ec5f7b2f3e4a9241ea8f9c (patch) | |
tree | fcf3259a337860fdabf246ddd8fe577908d93b1a | |
parent | 38e68815c6fd8dc04341ce4397a5e9a5d1923637 (diff) | |
download | gtk+-f8cb3fc3a847f2f106ec5f7b2f3e4a9241ea8f9c.tar.gz |
emojichooser: animate the adjustment
... instead of doing a dance with the scrolled window to get it to scroll
the adjustment.
-rw-r--r-- | gtk/gtkemojichooser.c | 36 |
1 files changed, 8 insertions, 28 deletions
diff --git a/gtk/gtkemojichooser.c b/gtk/gtkemojichooser.c index 1828b4da3d..6a8f4359ff 100644 --- a/gtk/gtkemojichooser.c +++ b/gtk/gtkemojichooser.c @@ -19,7 +19,7 @@ #include "gtkemojichooser.h" -#include "gtkadjustment.h" +#include "gtkadjustmentprivate.h" #include "gtkbox.h" #include "gtkbutton.h" #include "gtkcssprovider.h" @@ -62,8 +62,6 @@ struct _GtkEmojiChooser EmojiSection symbols; EmojiSection flags; - EmojiSection *scroll_to_section; - GtkGesture *recent_press; GtkGesture *people_press; GtkGesture *body_press; @@ -97,41 +95,23 @@ gtk_emoji_chooser_finalize (GObject *object) G_OBJECT_CLASS (gtk_emoji_chooser_parent_class)->finalize (object); } -static gboolean -scroll_in_idle (gpointer data) -{ - GtkEmojiChooser *chooser = data; - GtkAdjustment *adj; - GtkAllocation alloc = { 0, 0, 0, 0 }; - double page_increment, value; - gboolean dummy; - - adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (chooser->scrolled_window)); - if (chooser->scroll_to_section->heading) - gtk_widget_get_allocation (chooser->scroll_to_section->heading, &alloc); - page_increment = gtk_adjustment_get_page_increment (adj); - value = gtk_adjustment_get_value (adj); - gtk_adjustment_set_page_increment (adj, alloc.y - value); - g_signal_emit_by_name (chooser->scrolled_window, "scroll-child", GTK_SCROLL_PAGE_FORWARD, FALSE, &dummy); - gtk_adjustment_set_page_increment (adj, page_increment); - - return G_SOURCE_REMOVE; -} - static void scroll_to_section (GtkButton *button, gpointer data) { EmojiSection *section = data; GtkEmojiChooser *chooser; + GtkAdjustment *adj; + GtkAllocation alloc = { 0, 0, 0, 0 }; chooser = GTK_EMOJI_CHOOSER (gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_EMOJI_CHOOSER)); - if (chooser->scroll_to_section == section) - return; + adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (chooser->scrolled_window)); + + if (section->heading) + gtk_widget_get_allocation (section->heading, &alloc); - chooser->scroll_to_section = section; - g_idle_add (scroll_in_idle, chooser); + gtk_adjustment_animate_to_value (adj, alloc.y); } static void |