[gnome-initial-setup] GisTimezonePage: Fix timezone lookup after locale change
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-initial-setup] GisTimezonePage: Fix timezone lookup after locale change
- Date: Tue, 17 Nov 2015 08:17:21 +0000 (UTC)
commit e0b7f968213d26807d00ca5841c03f4a5a4605b2
Author: Tristan Van Berkom <tristan vanberkom codethink co uk>
Date: Tue Nov 17 14:49:11 2015 +0900
GisTimezonePage: Fix timezone lookup after locale change
When the locale changes then all of the GisPages are rebuilt and
added to the already visible assistant widget - resulting in the
new timezone page being immediately mapped. The result is that
geolocation lookup is immediately cancelled and never gets a chance
to complete if a language is ever selected.
As the current code assumes that the widget is only mapped when it is
actually displayed (which is only true when the parent assistant is
not yet mapped when the child page is added) - Changed the code to
use the explicit gis_page_shown() api instead.
This performs the same intended geolocation lookup cancellation, only
in a more reliable codepath.
.../pages/timezone/gis-timezone-page.c | 22 +++++++++----------
1 files changed, 10 insertions(+), 12 deletions(-)
---
diff --git a/gnome-initial-setup/pages/timezone/gis-timezone-page.c
b/gnome-initial-setup/pages/timezone/gis-timezone-page.c
index 5b2d3df..1e4a603 100644
--- a/gnome-initial-setup/pages/timezone/gis-timezone-page.c
+++ b/gnome-initial-setup/pages/timezone/gis-timezone-page.c
@@ -424,16 +424,6 @@ stop_geolocation (GisTimezonePage *page)
}
static void
-page_mapped (GtkWidget *widget,
- gpointer user_data)
-{
- GisTimezonePage *page = user_data;
-
- /* Stop timezone geolocation if it hasn't finished by the time we get here */
- stop_geolocation (page);
-}
-
-static void
gis_timezone_page_constructed (GObject *object)
{
GisTimezonePage *page = GIS_TIMEZONE_PAGE (object);
@@ -462,8 +452,6 @@ gis_timezone_page_constructed (GObject *object)
g_signal_connect (priv->search_entry, "notify::location",
G_CALLBACK (entry_location_changed), page);
- g_signal_connect (page, "map",
- G_CALLBACK (page_mapped), page);
g_signal_connect (priv->search_entry, "map",
G_CALLBACK (entry_mapped), page);
g_signal_connect (priv->stack, "notify::visible-child",
@@ -494,6 +482,15 @@ gis_timezone_page_locale_changed (GisPage *page)
}
static void
+gis_timezone_page_shown (GisPage *page)
+{
+ GisTimezonePage *tz_page = GIS_TIMEZONE_PAGE (page);
+
+ /* Stop timezone geolocation if it hasn't finished by the time we get here */
+ stop_geolocation (tz_page);
+}
+
+static void
gis_timezone_page_class_init (GisTimezonePageClass *klass)
{
GisPageClass *page_class = GIS_PAGE_CLASS (klass);
@@ -510,6 +507,7 @@ gis_timezone_page_class_init (GisTimezonePageClass *klass)
page_class->page_id = PAGE_ID;
page_class->locale_changed = gis_timezone_page_locale_changed;
+ page_class->shown = gis_timezone_page_shown;
object_class->constructed = gis_timezone_page_constructed;
object_class->dispose = gis_timezone_page_dispose;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]