diff --git a/panels/network/connection-editor/ce-page-details.c b/panels/network/connection-editor/ce-page-details.c
index 2d8583677..4291c3c50 100644
--- a/panels/network/connection-editor/ce-page-details.c
+++ b/panels/network/connection-editor/ce-page-details.c
@@ -131,6 +131,53 @@ all_user_changed (GtkToggleButton *b, CEPageDetails *page)
nm_setting_connection_add_permission (sc, "user", g_get_user_name (), NULL);
}
+static void
+restrict_data_changed (GtkSwitch *sw, GParamSpec *pspec, CEPageDetails *page)
+{
+ NMSettingConnection *s_con;
+ NMMetered metered;
+
+ s_con = nm_connection_get_setting_connection (CE_PAGE (page)->connection);
+
+ if (gtk_switch_get_active (sw))
+ metered = NM_METERED_YES;
+ else
+ metered = NM_METERED_NO;
+
+ g_object_set (s_con, "metered", metered, NULL);
+}
+
+static void
+update_restrict_data (CEPageDetails *page)
+{
+ NMSettingConnection *s_con;
+ NMMetered metered;
+ GtkWidget *widget;
+ const gchar *type;
+
+ s_con = nm_connection_get_setting_connection (CE_PAGE (page)->connection);
+
+ if (s_con == NULL)
+ return;
+
+ /* Disable for VPN; NetworkManager does not implement that yet (see
+ * bug https://bugzilla.gnome.org/show_bug.cgi?id=792618) */
+ type = nm_setting_connection_get_connection_type (s_con);
+ if (g_str_equal (type, NM_SETTING_VPN_SETTING_NAME))
+ return;
+
+ metered = nm_setting_connection_get_metered (s_con);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "restrict_data_grid"));
+ gtk_widget_show (widget);
+
+ widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "restrict_data_switch"));
+ gtk_switch_set_active (GTK_SWITCH (widget), metered == NM_METERED_YES || metered == NM_METERED_GUESS_YES);
+
+ g_signal_connect (widget, "notify::active", G_CALLBACK (restrict_data_changed), page);
+ g_signal_connect_swapped (widget, "notify::active", G_CALLBACK (ce_page_changed), page);
+}
+
static void
connect_details_page (CEPageDetails *page)
{
@@ -239,6 +286,9 @@ connect_details_page (CEPageDetails *page)
G_CALLBACK (all_user_changed), page);
g_signal_connect_swapped (widget, "toggled", G_CALLBACK (ce_page_changed), page);
+ /* Restrict Data switch */
+ update_restrict_data (page);
+
/* Forget button */
widget = GTK_WIDGET (gtk_builder_get_object (CE_PAGE (page)->builder, "button_forget"));
g_signal_connect (widget, "clicked", G_CALLBACK (forget_cb), page);
diff --git a/panels/network/connection-editor/details-page.ui b/panels/network/connection-editor/details-page.ui
index 3b1c71689..0d62429ef 100644
--- a/panels/network/connection-editor/details-page.ui
+++ b/panels/network/connection-editor/details-page.ui
@@ -355,6 +355,65 @@
1
+
+
+
+
+
+ 0
+ 11
+ 2
+ 1
+
+
+
True
@@ -370,7 +429,7 @@
0
- 11
+ 12
2
1