Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:GA
geoclue2
geoclue-auto-detect-timezone-when-network-chang...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File geoclue-auto-detect-timezone-when-network-change.patch of Package geoclue2
diff -Nura geoclue-2.4.3/src/gclue-web-source.c geoclue-2.4.3_new/src/gclue-web-source.c --- geoclue-2.4.3/src/gclue-web-source.c 2015-09-07 20:17:11.000000000 +0800 +++ geoclue-2.4.3_new/src/gclue-web-source.c 2018-05-23 14:23:47.100209659 +0800 @@ -48,7 +48,7 @@ guint64 last_submitted; - gboolean network_available; + gboolean internet_available; }; G_DEFINE_ABSTRACT_TYPE (GClueWebSource, gclue_web_source, GCLUE_TYPE_LOCATION_SOURCE) @@ -99,12 +99,37 @@ g_object_unref (location); } +static gboolean +get_internet_available (void) +{ + GNetworkMonitor *monitor = g_network_monitor_get_default (); + gboolean available; + +#if GLIB_CHECK_VERSION(2, 44, 0) + available = (g_network_monitor_get_connectivity (monitor) == + G_NETWORK_CONNECTIVITY_FULL); +#else + GSocketConnectable *connectable; + + connectable = g_network_address_new ("location.services.mozilla.com", + 80); + available = g_network_monitor_can_reach (monitor, + connectable, + NULL, + NULL); + g_object_unref (connectable); +#endif + + return available; +} + static void -refresh_accuracy_level (GClueWebSource *web, - gboolean available) +refresh_accuracy_level (GClueWebSource *web) { GClueAccuracyLevel new, existing; + gboolean available; + available = get_internet_available (); existing = gclue_location_source_get_available_accuracy_level (GCLUE_LOCATION_SOURCE (web)); new = GCLUE_WEB_SOURCE_GET_CLASS (web)->get_available_accuracy_level @@ -119,23 +144,23 @@ } static void -on_network_changed (GNetworkMonitor *monitor, - gboolean available, +on_network_changed (GNetworkMonitor *monitor G_GNUC_UNUSED, + gboolean available G_GNUC_UNUSED, gpointer user_data) { GClueWebSource *web = GCLUE_WEB_SOURCE (user_data); GError *error = NULL; - gboolean last_available = web->priv->network_available; + gboolean last_available = web->priv->internet_available; - refresh_accuracy_level (web, available); + refresh_accuracy_level (web); if (!gclue_location_source_get_active (GCLUE_LOCATION_SOURCE (user_data))) return; - web->priv->network_available = available; - if (last_available == available) - return; /* We already reacted to netork change */ - if (!available) { + web->priv->internet_available = get_internet_available (); + if (last_available == web->priv->internet_available) + return; /* We already reacted to network change */ + if (!web->priv->internet_available) { g_debug ("Network unavailable"); return; } @@ -203,8 +228,8 @@ "network-changed", G_CALLBACK (on_network_changed), object); - on_network_changed (monitor, - g_network_monitor_get_network_available (monitor), + on_network_changed (NULL, + TRUE, object); } @@ -239,14 +264,11 @@ void gclue_web_source_refresh (GClueWebSource *source) { - GNetworkMonitor *monitor; - g_return_if_fail (GCLUE_IS_WEB_SOURCE (source)); - monitor = g_network_monitor_get_default (); - if (g_network_monitor_get_network_available (monitor)) { - source->priv->network_available = FALSE; - on_network_changed (monitor, TRUE, source); + if (get_internet_available ()) { + source->priv->internet_available = FALSE; + on_network_changed (NULL, TRUE, source); } } @@ -292,7 +314,6 @@ { GClueLocationSource *source = GCLUE_LOCATION_SOURCE (source_object); GClueWebSource *web = GCLUE_WEB_SOURCE (user_data); - GNetworkMonitor *monitor; GClueLocation *location; SoupMessage *query; GError *error = NULL; @@ -308,8 +329,7 @@ web->priv->last_submitted = geocode_location_get_timestamp (GEOCODE_LOCATION (location)); - monitor = g_network_monitor_get_default (); - if (!g_network_monitor_get_network_available (monitor)) + if (!get_internet_available ()) return; query = GCLUE_WEB_SOURCE_GET_CLASS (web)->create_submit_query
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor