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 + + + + + True + 18 + 12 + + + + True + True + 0 + Restrict Data Usage + True + + + + + + True + True + + + 1 + 0 + + + + + + True + True + 0 + Prevents background network activity in order to limit costs and prevent caps from exceed on metered connections. + True + 60 + + + + + + + 0 + 1 + + + + + + 0 + 11 + 2 + 1 + + + True @@ -370,7 +429,7 @@ 0 - 11 + 12 2 1