[gnome-initial-setup/wip/gbsneto/low-res-screens: 2/5] driver: scroll to top when page changes
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-initial-setup/wip/gbsneto/low-res-screens: 2/5] driver: scroll to top when page changes
- Date: Tue, 15 Mar 2016 23:39:53 +0000 (UTC)
commit 7ce893807a56d25ecc9dfa0944672c9e07596bf7
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Tue Mar 15 17:16:41 2016 -0300
driver: scroll to top when page changes
When the user changes the page, the scrolled window
should be scrolled to the top.
Fix that by adding a new GisAssistant::page-changed
signal and scrolling to top whenever this signal is
fired.
gnome-initial-setup/gis-assistant.c | 30 ++++++++++++++++++++++++++++++
gnome-initial-setup/gis-assistant.ui | 1 +
gnome-initial-setup/gis-driver.c | 11 +++++++++++
3 files changed, 42 insertions(+), 0 deletions(-)
---
diff --git a/gnome-initial-setup/gis-assistant.c b/gnome-initial-setup/gis-assistant.c
index 82a4f84..38e730e 100644
--- a/gnome-initial-setup/gis-assistant.c
+++ b/gnome-initial-setup/gis-assistant.c
@@ -34,6 +34,12 @@ enum {
PROP_LAST,
};
+enum {
+ PAGE_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
static GParamSpec *obj_props[PROP_LAST];
struct _GisAssistantPrivate
@@ -63,6 +69,12 @@ struct _GisAssistantPagePrivate
};
static void
+visible_child_changed (GisAssistant *assistant)
+{
+ g_signal_emit (assistant, signals[PAGE_CHANGED], 0);
+}
+
+static void
widget_destroyed (GtkWidget *widget,
GisAssistant *assistant)
{
@@ -463,6 +475,8 @@ gis_assistant_class_init (GisAssistantClass *klass)
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, title);
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass), GisAssistant, stack);
+ gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), visible_child_changed);
+
gobject_class->get_property = gis_assistant_get_property;
obj_props[PROP_TITLE] =
@@ -471,5 +485,21 @@ gis_assistant_class_init (GisAssistantClass *klass)
NULL,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
+ /**
+ * GisAssistant::page-changed:
+ * @assistant: the #GisAssistant
+ *
+ * The ::page-changed signal is emitted when the visible page
+ * changed.
+ */
+ signals[PAGE_CHANGED] =
+ g_signal_new ("page-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 0);
+
g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
}
diff --git a/gnome-initial-setup/gis-assistant.ui b/gnome-initial-setup/gis-assistant.ui
index 3dc0295..49a1a24 100644
--- a/gnome-initial-setup/gis-assistant.ui
+++ b/gnome-initial-setup/gis-assistant.ui
@@ -87,6 +87,7 @@
<property name="hexpand">True</property>
<property name="hhomogeneous">False</property>
<property name="vhomogeneous">False</property>
+ <signal name="notify::visible-child" handler="visible_child_changed" object="GisAssistant"
swapped="yes"/>
</object>
</child>
</object>
diff --git a/gnome-initial-setup/gis-driver.c b/gnome-initial-setup/gis-driver.c
index aecec2d..9861c6c 100644
--- a/gnome-initial-setup/gis-driver.c
+++ b/gnome-initial-setup/gis-driver.c
@@ -99,6 +99,12 @@ gis_driver_finalize (GObject *object)
}
static void
+assistant_page_changed (GtkScrolledWindow *sw)
+{
+ gtk_adjustment_set_value (gtk_scrolled_window_get_vadjustment (sw), 0);
+}
+
+static void
prepare_main_window (GisDriver *driver)
{
GisDriverPrivate *priv = gis_driver_get_instance_private (driver);
@@ -112,6 +118,11 @@ prepare_main_window (GisDriver *driver)
gtk_container_add (GTK_CONTAINER (sw), child);
g_object_unref (child);
+ g_signal_connect_swapped (priv->assistant,
+ "page-changed",
+ G_CALLBACK (assistant_page_changed),
+ sw);
+
gtk_window_set_titlebar (priv->main_window,
gis_assistant_get_titlebar (priv->assistant));
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]