From a11c410b5097efe3943c7eac495258fc169849ba Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Mar 29 2022 10:09:12 +0000 Subject: import gnome-control-center-3.28.2-33.el8 --- diff --git a/SOURCES/0001-display-Only-display-configuration-options-if-apply-.patch b/SOURCES/0001-display-Only-display-configuration-options-if-apply-.patch new file mode 100644 index 0000000..9916dbb --- /dev/null +++ b/SOURCES/0001-display-Only-display-configuration-options-if-apply-.patch @@ -0,0 +1,185 @@ +From 22c43422f83a69d7654953db368585f168952aab Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Fri, 4 Feb 2022 11:45:53 +0100 +Subject: [PATCH] display: Only display configuration options if apply is + allowed + +org.gnome.Mutter.DisplayConfig contains a new property that tells +whether apply will be allowed to be called or not. Whether it is true or +not depends on policy stored in any of its monitors.xml configuration +files. + +In order to make it clearer that configuration is not possible, except +for night light, make sure to hide the unconfigurable parts, leaving +only night light. +--- + .../display/cc-display-config-manager-dbus.c | 36 +++++++++++++++++++ + panels/display/cc-display-config-manager.c | 6 ++++ + panels/display/cc-display-config-manager.h | 3 ++ + panels/display/cc-display-panel.c | 23 ++++++++++++ + 4 files changed, 68 insertions(+) + +diff --git a/panels/display/cc-display-config-manager-dbus.c b/panels/display/cc-display-config-manager-dbus.c +index 8912faaa8..7f85c3a01 100644 +--- a/panels/display/cc-display-config-manager-dbus.c ++++ b/panels/display/cc-display-config-manager-dbus.c +@@ -31,6 +31,8 @@ struct _CcDisplayConfigManagerDBus + guint monitors_changed_id; + + GVariant *current_state; ++ ++ gboolean apply_allowed; + }; + + G_DEFINE_TYPE (CcDisplayConfigManagerDBus, +@@ -119,6 +121,8 @@ bus_gotten (GObject *object, + CcDisplayConfigManagerDBus *self; + GDBusConnection *connection; + GError *error = NULL; ++ g_autoptr(GDBusProxy) proxy = NULL; ++ g_autoptr(GVariant) variant = NULL; + + connection = g_bus_get_finish (result, &error); + if (!connection) +@@ -145,12 +149,35 @@ bus_gotten (GObject *object, + monitors_changed, + self, + NULL); ++ ++ proxy = g_dbus_proxy_new_sync (self->connection, ++ G_DBUS_PROXY_FLAGS_NONE, ++ NULL, ++ "org.gnome.Mutter.DisplayConfig", ++ "/org/gnome/Mutter/DisplayConfig", ++ "org.gnome.Mutter.DisplayConfig", ++ NULL, ++ &error); ++ if (!proxy) ++ { ++ g_warning ("Failed to create D-Bus proxy to \"org.gnome.Mutter.DisplayConfig\": %s", ++ error->message); ++ return; ++ } ++ ++ variant = g_dbus_proxy_get_cached_property (proxy, "ApplyMonitorsConfigAllowed"); ++ if (variant) ++ self->apply_allowed = g_variant_get_boolean (variant); ++ else ++ g_warning ("Missing property 'ApplyMonitorsConfigAllowed' on DisplayConfig API"); ++ + get_current_state (self); + } + + static void + cc_display_config_manager_dbus_init (CcDisplayConfigManagerDBus *self) + { ++ self->apply_allowed = TRUE; + self->cancellable = g_cancellable_new (); + g_bus_get (G_BUS_TYPE_SESSION, self->cancellable, bus_gotten, self); + } +@@ -172,6 +199,14 @@ cc_display_config_manager_dbus_finalize (GObject *object) + G_OBJECT_CLASS (cc_display_config_manager_dbus_parent_class)->finalize (object); + } + ++static gboolean ++cc_display_config_manager_dbus_get_apply_allowed (CcDisplayConfigManager *pself) ++{ ++ CcDisplayConfigManagerDBus *self = CC_DISPLAY_CONFIG_MANAGER_DBUS (pself); ++ ++ return self->apply_allowed; ++} ++ + static void + cc_display_config_manager_dbus_class_init (CcDisplayConfigManagerDBusClass *klass) + { +@@ -181,6 +216,7 @@ cc_display_config_manager_dbus_class_init (CcDisplayConfigManagerDBusClass *klas + gobject_class->finalize = cc_display_config_manager_dbus_finalize; + + parent_class->get_current = cc_display_config_manager_dbus_get_current; ++ parent_class->get_apply_allowed = cc_display_config_manager_dbus_get_apply_allowed; + } + + CcDisplayConfigManager * +diff --git a/panels/display/cc-display-config-manager.c b/panels/display/cc-display-config-manager.c +index 0da298a29..3d683c53d 100644 +--- a/panels/display/cc-display-config-manager.c ++++ b/panels/display/cc-display-config-manager.c +@@ -59,3 +59,9 @@ cc_display_config_manager_get_current (CcDisplayConfigManager *self) + { + return CC_DISPLAY_CONFIG_MANAGER_GET_CLASS (self)->get_current (self); + } ++ ++gboolean ++cc_display_config_manager_get_apply_allowed (CcDisplayConfigManager *self) ++{ ++ return CC_DISPLAY_CONFIG_MANAGER_GET_CLASS (self)->get_apply_allowed (self); ++} +diff --git a/panels/display/cc-display-config-manager.h b/panels/display/cc-display-config-manager.h +index 134cea0a1..22c16758c 100644 +--- a/panels/display/cc-display-config-manager.h ++++ b/panels/display/cc-display-config-manager.h +@@ -35,10 +35,13 @@ struct _CcDisplayConfigManagerClass + GObjectClass parent_class; + + CcDisplayConfig * (*get_current) (CcDisplayConfigManager *self); ++ gboolean (* get_apply_allowed) (CcDisplayConfigManager *self); + }; + + CcDisplayConfig * cc_display_config_manager_get_current (CcDisplayConfigManager *self); + ++gboolean cc_display_config_manager_get_apply_allowed (CcDisplayConfigManager *self); ++ + void _cc_display_config_manager_emit_changed (CcDisplayConfigManager *self); + + G_END_DECLS +diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c +index 0b4fa193d..1b0db8321 100644 +--- a/panels/display/cc-display-panel.c ++++ b/panels/display/cc-display-panel.c +@@ -1245,6 +1245,22 @@ make_output_ui (CcDisplayPanel *panel) + return listbox; + } + ++static GtkWidget * ++make_night_light_only_ui (CcDisplayPanel *panel) ++{ ++ CcDisplayPanelPrivate *priv = panel->priv; ++ GtkWidget *vbox; ++ ++ priv->rows_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); ++ ++ vbox = make_main_vbox (priv->main_size_group); ++ ++ gtk_container_add (GTK_CONTAINER (vbox), make_night_light_widget (panel)); ++ ++ g_clear_object (&priv->rows_size_group); ++ return make_scrollable (vbox); ++} ++ + static GtkWidget * + make_single_output_ui (CcDisplayPanel *panel) + { +@@ -2097,6 +2113,12 @@ on_screen_changed (CcDisplayPanel *panel) + if (!priv->current_config) + goto show_error; + ++ if (!cc_display_config_manager_get_apply_allowed (priv->manager)) ++ { ++ main_widget = make_night_light_only_ui (panel); ++ goto show_main_widget; ++ } ++ + ensure_monitor_labels (panel); + + if (!priv->current_output) +@@ -2121,6 +2143,7 @@ on_screen_changed (CcDisplayPanel *panel) + main_widget = make_multi_output_ui (panel); + } + ++ show_main_widget: + gtk_widget_show_all (main_widget); + gtk_stack_add_named (GTK_STACK (priv->stack), main_widget, "main"); + gtk_stack_set_visible_child (GTK_STACK (priv->stack), main_widget); +-- +2.33.1 + diff --git a/SOURCES/0001-displays-Don-t-enlarge-display-panel-artificially.patch b/SOURCES/0001-displays-Don-t-enlarge-display-panel-artificially.patch new file mode 100644 index 0000000..6f4cda7 --- /dev/null +++ b/SOURCES/0001-displays-Don-t-enlarge-display-panel-artificially.patch @@ -0,0 +1,41 @@ +From 228857e1f4513c513ca5252b780656d8d8952632 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Wed, 9 Jun 2021 16:51:10 +0200 +Subject: [PATCH] displays: Don't enlarge display panel artificially + +Don't set a size group on the main box, and don't let the padding +boxes expand, either. This makes the display panel able to fit +again in a 800x600 resolution. +--- + panels/display/cc-display-panel.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c +index 0b4fa193d..0e7dc131e 100644 +--- a/panels/display/cc-display-panel.c ++++ b/panels/display/cc-display-panel.c +@@ -541,9 +541,9 @@ static GtkWidget * + wrap_in_boxes (GtkWidget *widget) + { + GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, PANEL_PADDING); +- gtk_box_pack_start (GTK_BOX (box), make_bin(), TRUE, TRUE, 0); ++ gtk_box_pack_start (GTK_BOX (box), make_bin(), FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), widget, TRUE, TRUE, 0); +- gtk_box_pack_start (GTK_BOX (box), make_bin(), TRUE, TRUE, 0); ++ gtk_box_pack_start (GTK_BOX (box), make_bin(), FALSE, FALSE, 0); + return box; + } + +@@ -586,9 +586,6 @@ make_main_vbox (GtkSizeGroup *size_group) + gtk_widget_set_margin_top (vbox, PANEL_PADDING); + gtk_widget_set_margin_bottom (vbox, PANEL_PADDING); + +- if (size_group) +- gtk_size_group_add_widget (size_group, vbox); +- + return vbox; + } + +-- +2.32.0.rc1 + diff --git a/SOURCES/0001-network-Fix-OWE-settings.patch b/SOURCES/0001-network-Fix-OWE-settings.patch new file mode 100644 index 0000000..f28b4cb --- /dev/null +++ b/SOURCES/0001-network-Fix-OWE-settings.patch @@ -0,0 +1,59 @@ +From 5b280e46029f1d857fb69ccc0db2e63b8a0e3c82 Mon Sep 17 00:00:00 2001 +From: Ana Cabral +Date: Mon, 21 Feb 2022 21:49:29 +0100 +Subject: [PATCH] network: Fix OWE settings + +Enhanced Open (OWE) is not being saved properly from connection-editor. +When we create a Wi-Fi connection using Enhanced Open (OWE) Security +from nm-connection-editor and save it, it was not being saved and the +security was being set as "None", with Wireless Security Setting +being discarded. This is fixed by this commit. The fix is also being +done in libnma (implementing OWE in libnma, +https://gitlab.gnome.org/GNOME/libnma/-/issues/9), but this commit +fixes meanwhile it gets ready. + +It was solved by adding treatment for the case in which owe was set. +OWE is not treated anymore in the same case as None. + +https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1521 +--- + .../connection-editor/ce-page-security.c | 23 +++++++++++++++---- + 1 file changed, 19 insertions(+), 4 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c +index 52efb9da1..ce42be146 100644 +--- a/panels/network/connection-editor/ce-page-security.c ++++ b/panels/network/connection-editor/ce-page-security.c +@@ -435,10 +435,25 @@ validate (CEPage *page, + + wireless_security_unref (sec); + } else { +- /* No security, unencrypted */ +- nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY); +- nm_connection_remove_setting (connection, NM_TYPE_SETTING_802_1X); +- valid = TRUE; ++ ++ if (gtk_combo_box_get_active ((CE_PAGE_SECURITY (page))->security_combo) == 0) { ++ /* No security, unencrypted */ ++ nm_connection_remove_setting (connection, NM_TYPE_SETTING_WIRELESS_SECURITY); ++ nm_connection_remove_setting (connection, NM_TYPE_SETTING_802_1X); ++ valid = TRUE; ++ } else { ++ /* owe case: ++ * fill the connection manually until libnma implements OWE wireless security ++ */ ++ NMSetting *sws; ++ ++ sws = nm_setting_wireless_security_new (); ++ g_object_set (sws, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "owe", NULL); ++ nm_connection_add_setting (connection, sws); ++ nm_connection_remove_setting (connection, NM_TYPE_SETTING_802_1X); ++ valid = TRUE; ++ } ++ + } + + return valid; +-- +2.35.1 + diff --git a/SOURCES/0001-network-Populate-AP-list-from-idle-handler.patch b/SOURCES/0001-network-Populate-AP-list-from-idle-handler.patch new file mode 100644 index 0000000..f5b4b26 --- /dev/null +++ b/SOURCES/0001-network-Populate-AP-list-from-idle-handler.patch @@ -0,0 +1,73 @@ +From 3e03aaba0453894aa0affd5b2e4f6a54794387cf Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Wed, 28 Jul 2021 22:16:21 +0200 +Subject: [PATCH 1/8] network: Populate AP list from idle handler + +Doing this should prevent the UI from becoming completely unusable as +updates of the AP list should be batched up rather than processed +sequentially. +--- + panels/network/net-device-wifi.c | 19 +++++++++++++++++-- + 1 file changed, 17 insertions(+), 2 deletions(-) + +diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c +index 313e9ab8c..33758e499 100644 +--- a/panels/network/net-device-wifi.c ++++ b/panels/network/net-device-wifi.c +@@ -64,6 +64,7 @@ struct _NetDeviceWifiPrivate + gchar *selected_connection_id; + gchar *selected_ap_id; + guint scan_id; ++ guint populate_ap_list_idle_id; + GCancellable *cancellable; + }; + +@@ -1619,6 +1620,7 @@ net_device_wifi_finalize (GObject *object) + g_clear_object (&priv->cancellable); + } + disable_scan_timeout (device_wifi); ++ g_clear_handle_id (&priv->populate_ap_list_idle_id, g_source_remove); + + g_clear_pointer (&priv->details_dialog, gtk_widget_destroy); + g_object_unref (priv->builder); +@@ -2145,8 +2147,8 @@ open_history (NetDeviceWifi *device_wifi) + gtk_window_present (GTK_WINDOW (dialog)); + } + +-static void +-populate_ap_list (NetDeviceWifi *device_wifi) ++static gboolean ++populate_ap_list_idle (NetDeviceWifi *device_wifi) + { + GtkWidget *list; + GtkSizeGroup *rows; +@@ -2162,6 +2164,8 @@ populate_ap_list (NetDeviceWifi *device_wifi) + GtkWidget *button; + GList *children, *child; + ++ device_wifi->priv->populate_ap_list_idle_id = 0; ++ + list = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, "listbox")); + + children = gtk_container_get_children (GTK_CONTAINER (list)); +@@ -2217,6 +2221,17 @@ populate_ap_list (NetDeviceWifi *device_wifi) + + g_slist_free (connections); + g_ptr_array_free (aps_unique, TRUE); ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++populate_ap_list (NetDeviceWifi *device_wifi) ++{ ++ if (device_wifi->priv->populate_ap_list_idle_id != 0) ++ return; ++ ++ device_wifi->priv->populate_ap_list_idle_id = g_idle_add ((GSourceFunc) populate_ap_list_idle, device_wifi); + } + + static void +-- +2.34.1 + diff --git a/SOURCES/0002-ce-page-security-add-SAE-support.patch b/SOURCES/0002-ce-page-security-add-SAE-support.patch new file mode 100644 index 0000000..c0747ee --- /dev/null +++ b/SOURCES/0002-ce-page-security-add-SAE-support.patch @@ -0,0 +1,61 @@ +From f57cad1d508b4f07cc39fd6f7abedd66d1fe9b50 Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Fri, 20 Dec 2019 19:54:01 +0100 +Subject: [PATCH 2/8] ce-page-security: add SAE support + +(cherry picked from commit 2e79c531942cf88051498c962116c010835ab7e1) +--- + .../connection-editor/ce-page-security.c | 23 +++++++++++++++++++ + 1 file changed, 23 insertions(+) + +diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c +index d06e3aeb1..5104d7442 100644 +--- a/panels/network/connection-editor/ce-page-security.c ++++ b/panels/network/connection-editor/ce-page-security.c +@@ -68,6 +68,11 @@ get_default_type_for_security (NMSettingWirelessSecurity *sec) + return NMU_SEC_LEAP; + return NMU_SEC_DYNAMIC_WEP; + } ++#if NM_CHECK_VERSION(1,20,6) ++ if (!strcmp (key_mgmt, "sae")) { ++ return NMU_SEC_SAE; ++ } ++#endif + + if ( !strcmp (key_mgmt, "wpa-none") + || !strcmp (key_mgmt, "wpa-psk")) { +@@ -336,6 +341,21 @@ finish_setup (CEPageSecurity *page) + } + } + ++#if NM_CHECK_VERSION(1,20,6) ++ if (nm_utils_security_valid (NMU_SEC_SAE, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { ++ WirelessSecurityWPAPSK *ws_wpa_psk; ++ ++ ws_wpa_psk = ws_wpa_psk_new (connection, FALSE); ++ if (ws_wpa_psk) { ++ add_security_item (page, WIRELESS_SECURITY (ws_wpa_psk), sec_model, ++ &iter, _("WPA3 Personal"), FALSE); ++ if ((active < 0) && ((default_type == NMU_SEC_SAE))) ++ active = item; ++ item++; ++ } ++ } ++#endif ++ + gtk_combo_box_set_model (combo, GTK_TREE_MODEL (sec_model)); + gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo)); + +@@ -451,6 +471,9 @@ ce_page_security_new (NMConnection *connection, + if (default_type == NMU_SEC_STATIC_WEP || + default_type == NMU_SEC_LEAP || + default_type == NMU_SEC_WPA_PSK || ++#if NM_CHECK_VERSION(1,20,6) ++ default_type == NMU_SEC_SAE || ++#endif + default_type == NMU_SEC_WPA2_PSK) { + CE_PAGE (page)->security_setting = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME; + } +-- +2.34.1 + diff --git a/SOURCES/0003-ce-page-details-add-SAE-support.patch b/SOURCES/0003-ce-page-details-add-SAE-support.patch new file mode 100644 index 0000000..1ae22f9 --- /dev/null +++ b/SOURCES/0003-ce-page-details-add-SAE-support.patch @@ -0,0 +1,37 @@ +From 17ca12acd4e0a924a1acd5107b8569dd66d368af Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Sat, 21 Dec 2019 17:39:02 +0100 +Subject: [PATCH 3/8] ce-page-details: add SAE support + +(cherry picked from commit 97f6c8f53c15c7ccb9dd7a65ce1ac02ebc18a724) +--- + panels/network/connection-editor/ce-page-details.c | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-details.c b/panels/network/connection-editor/ce-page-details.c +index c972c0e5b..f0c594dd4 100644 +--- a/panels/network/connection-editor/ce-page-details.c ++++ b/panels/network/connection-editor/ce-page-details.c +@@ -60,8 +60,17 @@ get_ap_security_string (NMAccessPoint *ap) + g_string_append_printf (str, "%s, ", _("WPA")); + } + if (rsn_flags != NM_802_11_AP_SEC_NONE) { +- /* TRANSLATORS: this WPA WiFi security */ +- g_string_append_printf (str, "%s, ", _("WPA2")); ++#if NM_CHECK_VERSION(1,20,6) ++ if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_SAE) { ++ /* TRANSLATORS: this WPA3 WiFi security */ ++ g_string_append_printf (str, "%s, ", _("WPA3")); ++ } ++ else ++#endif ++ { ++ /* TRANSLATORS: this WPA WiFi security */ ++ g_string_append_printf (str, "%s, ", _("WPA2")); ++ } + } + if ((wpa_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X) || + (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_802_1X)) { +-- +2.34.1 + diff --git a/SOURCES/0004-net-device-wifi-Decode-SAE-AP-security.patch b/SOURCES/0004-net-device-wifi-Decode-SAE-AP-security.patch new file mode 100644 index 0000000..6cfeb0d --- /dev/null +++ b/SOURCES/0004-net-device-wifi-Decode-SAE-AP-security.patch @@ -0,0 +1,42 @@ +From 0904ae538704409c19c08c88957ff4283d4a152d Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Tue, 2 Feb 2021 17:27:05 +0100 +Subject: [PATCH 4/8] net-device-wifi: Decode SAE AP security + +Decode this information for the wireless row. Note that we don't really +need this, as it would incorrectly select WPA2 which results in the same +icon. + +Based on upstream commit da0c45f2ab2b7b78695cfff9d6b7a2b045340ac7 +--- + panels/network/net-device-wifi.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c +index 33758e499..da1e4837a 100644 +--- a/panels/network/net-device-wifi.c ++++ b/panels/network/net-device-wifi.c +@@ -46,7 +46,8 @@ typedef enum { + NM_AP_SEC_NONE, + NM_AP_SEC_WEP, + NM_AP_SEC_WPA, +- NM_AP_SEC_WPA2 ++ NM_AP_SEC_WPA2, ++ NM_AP_SEC_SAE + } NMAccessPointSecurity; + + static void nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi); +@@ -146,6 +147,10 @@ get_access_point_security (NMAccessPoint *ap) + wpa_flags != NM_802_11_AP_SEC_NONE && + rsn_flags != NM_802_11_AP_SEC_NONE) + type = NM_AP_SEC_WPA; ++#if NM_CHECK_VERSION(1,20,6) ++ else if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_SAE) ++ type = NM_AP_SEC_SAE; ++#endif + else + type = NM_AP_SEC_WPA2; + +-- +2.34.1 + diff --git a/SOURCES/0005-network-complete-SAE-support.patch b/SOURCES/0005-network-complete-SAE-support.patch new file mode 100644 index 0000000..d3ffe1d --- /dev/null +++ b/SOURCES/0005-network-complete-SAE-support.patch @@ -0,0 +1,477 @@ +From 1289e8ea1dbeb91012c262fcb6f014ec73d4c690 Mon Sep 17 00:00:00 2001 +From: Jonathan Kang +Date: Wed, 9 Sep 2020 14:58:06 +0800 +Subject: [PATCH 5/8] network: complete SAE support + +Added WirelessSecuritySAE class to fully implement SAE support. + +Heavily modifid and based on the 3.28.2 version of the WPA PSK widget. + +(cherry picked from commit 918838f567740172591ff1f2c32d8227c348be72) +--- + .../connection-editor/ce-page-security.c | 8 +- + panels/network/wireless-security/meson.build | 3 + + .../wireless-security.gresource.xml | 1 + + .../wireless-security/wireless-security.h | 1 + + panels/network/wireless-security/ws-sae.c | 214 ++++++++++++++++++ + panels/network/wireless-security/ws-sae.h | 30 +++ + panels/network/wireless-security/ws-sae.ui | 117 ++++++++++ + 7 files changed, 370 insertions(+), 4 deletions(-) + create mode 100644 panels/network/wireless-security/ws-sae.c + create mode 100644 panels/network/wireless-security/ws-sae.h + create mode 100644 panels/network/wireless-security/ws-sae.ui + +diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c +index 5104d7442..37b1e1286 100644 +--- a/panels/network/connection-editor/ce-page-security.c ++++ b/panels/network/connection-editor/ce-page-security.c +@@ -343,11 +343,11 @@ finish_setup (CEPageSecurity *page) + + #if NM_CHECK_VERSION(1,20,6) + if (nm_utils_security_valid (NMU_SEC_SAE, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { +- WirelessSecurityWPAPSK *ws_wpa_psk; ++ WirelessSecuritySAE *ws_sae; + +- ws_wpa_psk = ws_wpa_psk_new (connection, FALSE); +- if (ws_wpa_psk) { +- add_security_item (page, WIRELESS_SECURITY (ws_wpa_psk), sec_model, ++ ws_sae = ws_sae_new (connection, FALSE); ++ if (ws_sae) { ++ add_security_item (page, WIRELESS_SECURITY (ws_sae), sec_model, + &iter, _("WPA3 Personal"), FALSE); + if ((active < 0) && ((default_type == NMU_SEC_SAE))) + active = item; +diff --git a/panels/network/wireless-security/meson.build b/panels/network/wireless-security/meson.build +index 47def7a63..6036f56af 100644 +--- a/panels/network/wireless-security/meson.build ++++ b/panels/network/wireless-security/meson.build +@@ -14,6 +14,7 @@ nm_applet_headers = [ + 'wireless-security.h', + 'ws-leap.h', + 'ws-dynamic-wep.h', ++ 'ws-sae.h', + 'ws-wep-key.h', + 'ws-wpa-eap.h', + 'ws-wpa-psk.h' +@@ -31,6 +32,7 @@ nm_applet_sources = [ + 'wireless-security.c', + 'ws-leap.c', + 'ws-dynamic-wep.c', ++ 'ws-sae.c', + 'ws-wep-key.c', + 'ws-wpa-eap.c', + 'ws-wpa-psk.c' +@@ -47,6 +49,7 @@ nm_resource_data = [ + 'eap-method-ttls.ui', + 'ws-dynamic-wep.ui', + 'ws-leap.ui', ++ 'ws-sae.ui', + 'ws-wep-key.ui', + 'ws-wpa-eap.ui', + 'ws-wpa-psk.ui' +diff --git a/panels/network/wireless-security/wireless-security.gresource.xml b/panels/network/wireless-security/wireless-security.gresource.xml +index a483d06a0..fa1a965ad 100644 +--- a/panels/network/wireless-security/wireless-security.gresource.xml ++++ b/panels/network/wireless-security/wireless-security.gresource.xml +@@ -9,6 +9,7 @@ + eap-method-ttls.ui + ws-dynamic-wep.ui + ws-leap.ui ++ ws-sae.ui + ws-wep-key.ui + ws-wpa-eap.ui + ws-wpa-psk.ui +diff --git a/panels/network/wireless-security/wireless-security.h b/panels/network/wireless-security/wireless-security.h +index 975e750f6..c5508ad1b 100644 +--- a/panels/network/wireless-security/wireless-security.h ++++ b/panels/network/wireless-security/wireless-security.h +@@ -102,6 +102,7 @@ GType wireless_security_get_type (void); + #include "ws-wep-key.h" + #include "ws-wpa-psk.h" + #include "ws-leap.h" ++#include "ws-sae.h" + #include "ws-wpa-eap.h" + #include "ws-dynamic-wep.h" + +diff --git a/panels/network/wireless-security/ws-sae.c b/panels/network/wireless-security/ws-sae.c +new file mode 100644 +index 000000000..96138d522 +--- /dev/null ++++ b/panels/network/wireless-security/ws-sae.c +@@ -0,0 +1,214 @@ ++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ ++/* NetworkManager Applet -- allow user control over networking ++ * ++ * Dan Williams ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Copyright 2007 - 2014 Red Hat, Inc. ++ */ ++ ++#include "nm-default.h" ++ ++#include ++#include ++ ++#include "wireless-security.h" ++#include "helpers.h" ++#include "nma-ui-utils.h" ++#include "utils.h" ++ ++#define WPA_PMK_LEN 32 ++ ++struct _WirelessSecuritySAE { ++ WirelessSecurity parent; ++ ++ gboolean editing_connection; ++ const char *password_flags_name; ++}; ++ ++static void ++show_toggled_cb (GtkCheckButton *button, WirelessSecurity *sec) ++{ ++ GtkWidget *widget; ++ gboolean visible; ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (sec->builder, "sae_entry")); ++ g_assert (widget); ++ ++ visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); ++ gtk_entry_set_visibility (GTK_ENTRY (widget), visible); ++} ++ ++static gboolean ++validate (WirelessSecurity *parent, GError **error) ++{ ++ GtkWidget *entry; ++ const char *key; ++ ++ entry = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_entry")); ++ g_assert (entry); ++ ++ key = gtk_entry_get_text (GTK_ENTRY (entry)); ++ if (key == NULL || key[0] == '\0') { ++ widget_set_error (entry); ++ g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("Wi-Fi password is missing.")); ++ return FALSE; ++ } ++ widget_unset_error (entry); ++ ++ /* passphrase can be between 8 and 63 characters inclusive */ ++ ++ return TRUE; ++} ++ ++static void ++add_to_size_group (WirelessSecurity *parent, GtkSizeGroup *group) ++{ ++ GtkWidget *widget; ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_type_label")); ++ gtk_size_group_add_widget (group, widget); ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_label")); ++ gtk_size_group_add_widget (group, widget); ++} ++ ++static void ++fill_connection (WirelessSecurity *parent, NMConnection *connection) ++{ ++ WirelessSecuritySAE *sae = (WirelessSecuritySAE *) parent; ++ GtkWidget *widget, *passwd_entry; ++ const char *key; ++ NMSettingWireless *s_wireless; ++ NMSettingWirelessSecurity *s_wireless_sec; ++ NMSettingSecretFlags secret_flags; ++ const char *mode; ++ gboolean is_adhoc = FALSE; ++ ++ s_wireless = nm_connection_get_setting_wireless (connection); ++ g_assert (s_wireless); ++ ++ mode = nm_setting_wireless_get_mode (s_wireless); ++ if (mode && !strcmp (mode, "adhoc")) ++ is_adhoc = TRUE; ++ ++ /* Blow away the old security setting by adding a clear one */ ++ s_wireless_sec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); ++ nm_connection_add_setting (connection, (NMSetting *) s_wireless_sec); ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_entry")); ++ passwd_entry = widget; ++ key = gtk_entry_get_text (GTK_ENTRY (widget)); ++ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_PSK, key, NULL); ++ ++ /* Save PSK_FLAGS to the connection */ ++ secret_flags = nma_utils_menu_to_secret_flags (passwd_entry); ++ nm_setting_set_secret_flags (NM_SETTING (s_wireless_sec), NM_SETTING_WIRELESS_SECURITY_PSK, ++ secret_flags, NULL); ++ ++ /* Update secret flags and popup when editing the connection */ ++ if (sae->editing_connection) ++ nma_utils_update_password_storage (passwd_entry, secret_flags, ++ NM_SETTING (s_wireless_sec), sae->password_flags_name); ++ ++ wireless_security_clear_ciphers (connection); ++ if (is_adhoc) { ++ /* Ad-Hoc settings as specified by the supplicant */ ++ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "sae", NULL); ++ nm_setting_wireless_security_add_proto (s_wireless_sec, "rsn"); ++ nm_setting_wireless_security_add_pairwise (s_wireless_sec, "ccmp"); ++ nm_setting_wireless_security_add_group (s_wireless_sec, "ccmp"); ++ } else { ++ g_object_set (s_wireless_sec, NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "sae", NULL); ++ ++ /* Just leave ciphers and protocol empty, the supplicant will ++ * figure that out magically based on the AP IEs and card capabilities. ++ */ ++ } ++} ++ ++static void ++update_secrets (WirelessSecurity *parent, NMConnection *connection) ++{ ++ helper_fill_secret_entry (connection, ++ parent->builder, ++ "sae_entry", ++ NM_TYPE_SETTING_WIRELESS_SECURITY, ++ (HelperSecretFunc) nm_setting_wireless_security_get_psk); ++} ++ ++WirelessSecuritySAE * ++ws_sae_new (NMConnection *connection, gboolean secrets_only) ++{ ++ WirelessSecurity *parent; ++ WirelessSecuritySAE *sec; ++ NMSetting *setting = NULL; ++ GtkWidget *widget; ++ ++ parent = wireless_security_init (sizeof (WirelessSecuritySAE), ++ validate, ++ add_to_size_group, ++ fill_connection, ++ update_secrets, ++ NULL, ++ "/org/gnome/ControlCenter/network/ws-sae.ui", ++ "sae_notebook", ++ "sae_entry"); ++ if (!parent) ++ return NULL; ++ ++ parent->adhoc_compatible = FALSE; ++ sec = (WirelessSecuritySAE *) parent; ++ sec->editing_connection = secrets_only ? FALSE : TRUE; ++ sec->password_flags_name = NM_SETTING_WIRELESS_SECURITY_PSK; ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_entry")); ++ g_assert (widget); ++ g_signal_connect (G_OBJECT (widget), "changed", ++ (GCallback) wireless_security_changed_cb, ++ sec); ++ gtk_entry_set_width_chars (GTK_ENTRY (widget), 28); ++ ++ /* Create password-storage popup menu for password entry under entry's secondary icon */ ++ if (connection) ++ setting = (NMSetting *) nm_connection_get_setting_wireless_security (connection); ++ nma_utils_setup_password_storage (widget, 0, setting, sec->password_flags_name, ++ FALSE, secrets_only); ++ ++ /* Fill secrets, if any */ ++ if (connection) ++ update_secrets (WIRELESS_SECURITY (sec), connection); ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "show_checkbutton_wpa")); ++ g_assert (widget); ++ g_signal_connect (G_OBJECT (widget), "toggled", ++ (GCallback) show_toggled_cb, ++ sec); ++ ++ /* Hide WPA/RSN for now since this can be autodetected by NM and the ++ * supplicant when connecting to the AP. ++ */ ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_type_combo")); ++ g_assert (widget); ++ gtk_widget_hide (widget); ++ ++ widget = GTK_WIDGET (gtk_builder_get_object (parent->builder, "sae_type_label")); ++ g_assert (widget); ++ gtk_widget_hide (widget); ++ ++ return sec; ++} +diff --git a/panels/network/wireless-security/ws-sae.h b/panels/network/wireless-security/ws-sae.h +new file mode 100644 +index 000000000..9a1262cd0 +--- /dev/null ++++ b/panels/network/wireless-security/ws-sae.h +@@ -0,0 +1,30 @@ ++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ ++/* NetworkManager Applet -- allow user control over networking ++ * ++ * Dan Williams ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Copyright 2007 - 2014 Red Hat, Inc. ++ */ ++ ++#ifndef WS_SAE_H ++#define WS_SAE_H ++ ++typedef struct _WirelessSecuritySAE WirelessSecuritySAE; ++ ++WirelessSecuritySAE * ws_sae_new (NMConnection *connection, gboolean secrets_only); ++ ++#endif /* WS_SAE_H */ +diff --git a/panels/network/wireless-security/ws-sae.ui b/panels/network/wireless-security/ws-sae.ui +new file mode 100644 +index 000000000..d523f16c8 +--- /dev/null ++++ b/panels/network/wireless-security/ws-sae.ui +@@ -0,0 +1,117 @@ ++ ++ ++ ++ ++ True ++ False ++ False ++ False ++ ++ ++ True ++ False ++ 3 ++ 2 ++ 6 ++ 6 ++ ++ ++ True ++ False ++ 1 ++ _Password ++ True ++ sae_entry ++ ++ ++ GTK_FILL ++ ++ ++ ++ ++ ++ True ++ True ++ 64 ++ False ++ True ++ ++ ++ 1 ++ 2 ++ ++ ++ ++ ++ ++ True ++ False ++ 1 ++ _Type ++ True ++ sae_type_combo ++ ++ ++ 2 ++ 3 ++ GTK_FILL ++ ++ ++ ++ ++ ++ True ++ False ++ 0 ++ ++ ++ 1 ++ 2 ++ GTK_FILL ++ ++ ++ ++ ++ ++ Sho_w password ++ True ++ True ++ False ++ True ++ True ++ ++ ++ 1 ++ 2 ++ 1 ++ 2 ++ GTK_FILL ++ ++ ++ ++ ++ ++ True ++ False ++ ++ ++ 1 ++ 2 ++ 2 ++ 3 ++ GTK_FILL ++ ++ ++ ++ ++ ++ ++ True ++ False ++ ++ ++ False ++ ++ ++ ++ +-- +2.34.1 + diff --git a/SOURCES/0006-Add-support-for-Enhanced-Open-WiFi-security.patch b/SOURCES/0006-Add-support-for-Enhanced-Open-WiFi-security.patch new file mode 100644 index 0000000..bd73588 --- /dev/null +++ b/SOURCES/0006-Add-support-for-Enhanced-Open-WiFi-security.patch @@ -0,0 +1,114 @@ +From 73fb050f06649e717aea5654394fe45cd921d4df Mon Sep 17 00:00:00 2001 +From: David Bauer +Date: Fri, 17 Jul 2020 03:41:44 +0000 +Subject: [PATCH 6/8] Add support for Enhanced Open WiFi security + +(cherry picked from commit 1d0b664f7c5e38e9d8933956c1cc4661244edb7d) +--- + .../connection-editor/ce-page-details.c | 6 +++++ + .../connection-editor/ce-page-security.c | 22 +++++++++++++++++++ + panels/network/net-device-wifi.c | 10 +++++++-- + 3 files changed, 36 insertions(+), 2 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-details.c b/panels/network/connection-editor/ce-page-details.c +index f0c594dd4..8bdb932a4 100644 +--- a/panels/network/connection-editor/ce-page-details.c ++++ b/panels/network/connection-editor/ce-page-details.c +@@ -65,6 +65,12 @@ get_ap_security_string (NMAccessPoint *ap) + /* TRANSLATORS: this WPA3 WiFi security */ + g_string_append_printf (str, "%s, ", _("WPA3")); + } ++#if NM_CHECK_VERSION(1,24,0) ++ else if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_OWE) { ++ /* TRANSLATORS: this Enhanced Open WiFi security */ ++ g_string_append_printf (str, "%s, ", _("Enhanced Open")); ++ } ++#endif + else + #endif + { +diff --git a/panels/network/connection-editor/ce-page-security.c b/panels/network/connection-editor/ce-page-security.c +index 37b1e1286..52efb9da1 100644 +--- a/panels/network/connection-editor/ce-page-security.c ++++ b/panels/network/connection-editor/ce-page-security.c +@@ -68,6 +68,13 @@ get_default_type_for_security (NMSettingWirelessSecurity *sec) + return NMU_SEC_LEAP; + return NMU_SEC_DYNAMIC_WEP; + } ++ ++#if NM_CHECK_VERSION(1,24,0) ++ if (!strcmp (key_mgmt, "owe")) { ++ return NMU_SEC_OWE; ++ } ++#endif ++ + #if NM_CHECK_VERSION(1,20,6) + if (!strcmp (key_mgmt, "sae")) { + return NMU_SEC_SAE; +@@ -255,6 +262,18 @@ finish_setup (CEPageSecurity *page) + item++; + } + ++#if NM_CHECK_VERSION(1,24,0) ++ if (nm_utils_security_valid (NMU_SEC_OWE, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { ++ gtk_list_store_insert_with_values (sec_model, &iter, -1, ++ S_NAME_COLUMN, _("Enhanced Open"), ++ S_ADHOC_VALID_COLUMN, FALSE, ++ -1); ++ if (active < 0 && default_type == NMU_SEC_OWE) ++ active = item; ++ item++; ++ } ++#endif ++ + if (nm_utils_security_valid (NMU_SEC_STATIC_WEP, dev_caps, FALSE, is_adhoc, 0, 0, 0)) { + WirelessSecurityWEPKey *ws_wep; + NMWepKeyType wep_type = NM_WEP_KEY_TYPE_KEY; +@@ -473,6 +492,9 @@ ce_page_security_new (NMConnection *connection, + default_type == NMU_SEC_WPA_PSK || + #if NM_CHECK_VERSION(1,20,6) + default_type == NMU_SEC_SAE || ++#endif ++#if NM_CHECK_VERSION(1,24,0) ++ default_type == NMU_SEC_OWE || + #endif + default_type == NMU_SEC_WPA2_PSK) { + CE_PAGE (page)->security_setting = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME; +diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c +index da1e4837a..fc2fba63f 100644 +--- a/panels/network/net-device-wifi.c ++++ b/panels/network/net-device-wifi.c +@@ -47,7 +47,8 @@ typedef enum { + NM_AP_SEC_WEP, + NM_AP_SEC_WPA, + NM_AP_SEC_WPA2, +- NM_AP_SEC_SAE ++ NM_AP_SEC_SAE, ++ NM_AP_SEC_OWE, + } NMAccessPointSecurity; + + static void nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi); +@@ -150,6 +151,10 @@ get_access_point_security (NMAccessPoint *ap) + #if NM_CHECK_VERSION(1,20,6) + else if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_SAE) + type = NM_AP_SEC_SAE; ++#endif ++#if NM_CHECK_VERSION(1,20,6) ++ else if (rsn_flags & NM_802_11_AP_SEC_KEY_MGMT_OWE) ++ type = NM_AP_SEC_OWE; + #endif + else + type = NM_AP_SEC_WPA2; +@@ -1930,7 +1935,8 @@ make_row (GtkSizeGroup *rows, + + if (in_range) { + if (security != NM_AP_SEC_UNKNOWN && +- security != NM_AP_SEC_NONE) { ++ security != NM_AP_SEC_NONE && ++ security != NM_AP_SEC_OWE) { + widget = gtk_image_new_from_icon_name ("network-wireless-encrypted-symbolic", GTK_ICON_SIZE_MENU); + } else { + widget = gtk_label_new (""); +-- +2.34.1 + diff --git a/SOURCES/0007-network-Fix-connection-selection-and-SSID-display-fo.patch b/SOURCES/0007-network-Fix-connection-selection-and-SSID-display-fo.patch new file mode 100644 index 0000000..0bfa761 --- /dev/null +++ b/SOURCES/0007-network-Fix-connection-selection-and-SSID-display-fo.patch @@ -0,0 +1,216 @@ +From e6cebd2fc9b0d18a92f2935e23551b62a7031236 Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Tue, 4 Jan 2022 11:29:25 +0100 +Subject: [PATCH 7/8] network: Fix connection selection and SSID display for + OWE + +When dealing with OWE APs, we need to use the SSID from the connection +rather than the AP. In this case, we want to group the current AP with +other APs that have the connection SSID. + +As such, first change the unqiue AP selection to take the active AP and +active connection into account (preferring the active AP for correct +signal strength display). + +Then, make sure we have the active connection in the list everywhere and +skip the SSID check when assiging the AP to the connection for the +active AP/connection. + +This way we make sure to have the active connection together with the +active AP in the list. The code will prefer to display the connections +SSID rather than the APS, so we get the right one for OWE. + +This mimicks the behaviour of newer g-c-c versions without pulling in +the full rewrite of the connection list widget. +--- + panels/network/net-device-wifi.c | 86 ++++++++++++++++++++++++++------ + 1 file changed, 72 insertions(+), 14 deletions(-) + +diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c +index fc2fba63f..af489afcc 100644 +--- a/panels/network/net-device-wifi.c ++++ b/panels/network/net-device-wifi.c +@@ -163,25 +163,50 @@ get_access_point_security (NMAccessPoint *ap) + } + + static GPtrArray * +-panel_get_strongest_unique_aps (const GPtrArray *aps) ++panel_get_strongest_unique_aps (NMDevice *nm_device) + { +- GBytes *ssid, *ssid_tmp; ++ const GPtrArray *aps; + GPtrArray *aps_unique = NULL; + gboolean add_ap; + guint i; + guint j; + NMAccessPoint *ap; + NMAccessPoint *ap_tmp; ++ NMAccessPoint *active_ap; ++ NMActiveConnection *ac; ++ NMConnection *ac_con = NULL; ++ GBytes *ac_ssid = NULL; ++ ++ aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device)); ++ active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (nm_device)); ++ ++ /* Use the connection SSID for the active AP as it is different with OWE. */ ++ ac = nm_device_get_active_connection (nm_device); ++ if (ac) ++ ac_con = NM_CONNECTION (nm_active_connection_get_connection (ac)); ++ if (ac_con) { ++ NMSetting *setting; ++ ++ setting = nm_connection_get_setting_by_name (ac_con, NM_SETTING_WIRELESS_SETTING_NAME); ++ if (setting) ++ ac_ssid = nm_setting_wireless_get_ssid (NM_SETTING_WIRELESS (setting)); ++ } + + /* we will have multiple entries for typical hotspots, just + * filter to the one with the strongest signal */ + aps_unique = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); + if (aps != NULL) + for (i = 0; i < aps->len; i++) { ++ GBytes *ssid = NULL; ++ + ap = NM_ACCESS_POINT (g_ptr_array_index (aps, i)); + ++ if (ap == active_ap) ++ ssid = ac_ssid; ++ if (!ssid) ++ ssid = nm_access_point_get_ssid (ap); ++ + /* Hidden SSIDs don't get shown in the list */ +- ssid = nm_access_point_get_ssid (ap); + if (!ssid) + continue; + +@@ -189,8 +214,15 @@ panel_get_strongest_unique_aps (const GPtrArray *aps) + + /* get already added list */ + for (j=0; jlen; j++) { ++ GBytes *ssid_tmp = NULL; ++ + ap_tmp = NM_ACCESS_POINT (g_ptr_array_index (aps_unique, j)); +- ssid_tmp = nm_access_point_get_ssid (ap_tmp); ++ ++ ssid_tmp = NULL; ++ if (ap_tmp == active_ap) ++ ssid_tmp = ac_ssid; ++ if (!ssid_tmp) ++ ssid_tmp = nm_access_point_get_ssid (ap_tmp); + g_assert (ssid_tmp); + + /* is this the same type and data? */ +@@ -202,9 +234,12 @@ panel_get_strongest_unique_aps (const GPtrArray *aps) + nm_utils_escape_ssid (g_bytes_get_data (ssid_tmp, NULL), + g_bytes_get_size (ssid_tmp))); + +- /* the new access point is stronger */ +- if (nm_access_point_get_strength (ap) > ++ if (ap_tmp == active_ap) { ++ add_ap = FALSE; ++ } else if (ap == active_ap || ++ nm_access_point_get_strength (ap) > + nm_access_point_get_strength (ap_tmp)) { ++ /* the new access point is the default or stronger */ + g_debug ("removing %s", + nm_utils_escape_ssid (g_bytes_get_data (ssid_tmp, NULL), + g_bytes_get_size (ssid_tmp))); +@@ -2042,9 +2077,10 @@ open_history (NetDeviceWifi *device_wifi) + GtkWidget *separator; + GSList *connections; + GSList *l; +- const GPtrArray *aps; + GPtrArray *aps_unique = NULL; + NMAccessPoint *active_ap; ++ NMActiveConnection *ac; ++ NMConnection *ac_con = NULL; + guint i; + NMDevice *nm_device; + GtkWidget *list; +@@ -2119,10 +2155,15 @@ open_history (NetDeviceWifi *device_wifi) + + connections = net_device_get_valid_connections (NET_DEVICE (device_wifi)); + +- aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device)); +- aps_unique = panel_get_strongest_unique_aps (aps); ++ aps_unique = panel_get_strongest_unique_aps (nm_device); + active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (nm_device)); + ++ ac = nm_device_get_active_connection (nm_device); ++ if (ac) ++ ac_con = NM_CONNECTION (nm_active_connection_get_connection (ac)); ++ if (ac_con && !g_slist_find (connections, ac_con)) ++ connections = g_slist_prepend (connections, ac_con); ++ + for (l = connections; l; l = l->next) { + NMConnection *connection = l->data; + NMAccessPoint *ap = NULL; +@@ -2137,7 +2178,13 @@ open_history (NetDeviceWifi *device_wifi) + GBytes *ssid_ap; + ap = NM_ACCESS_POINT (g_ptr_array_index (aps_unique, i)); + ssid_ap = nm_access_point_get_ssid (ap); +- if (nm_utils_same_ssid (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid), ++ ++ /* Skip SSID check for active connection/AP (will not match with OWE) */ ++ if (ap == active_ap && connection == ac_con) ++ break; ++ ++ if (ssid_ap && ++ nm_utils_same_ssid (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid), + g_bytes_get_data (ssid_ap, NULL), g_bytes_get_size (ssid_ap), + TRUE)) + break; +@@ -2167,13 +2214,14 @@ populate_ap_list_idle (NetDeviceWifi *device_wifi) + NMDevice *nm_device; + GSList *connections; + GSList *l; +- const GPtrArray *aps; + GPtrArray *aps_unique = NULL; + NMAccessPoint *active_ap; + guint i; + GtkWidget *row; + GtkWidget *button; + GList *children, *child; ++ NMActiveConnection *ac; ++ NMConnection *ac_con = NULL; + + device_wifi->priv->populate_ap_list_idle_id = 0; + +@@ -2192,10 +2240,15 @@ populate_ap_list_idle (NetDeviceWifi *device_wifi) + + connections = net_device_get_valid_connections (NET_DEVICE (device_wifi)); + +- aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device)); +- aps_unique = panel_get_strongest_unique_aps (aps); ++ aps_unique = panel_get_strongest_unique_aps (nm_device); + active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (nm_device)); + ++ ac = nm_device_get_active_connection (nm_device); ++ if (ac) ++ ac_con = NM_CONNECTION (nm_active_connection_get_connection (ac)); ++ if (ac_con && !g_slist_find (connections, ac_con)) ++ connections = g_slist_prepend (connections, ac_con); ++ + for (i = 0; i < aps_unique->len; i++) { + GBytes *ssid_ap; + NMAccessPoint *ap; +@@ -2212,9 +2265,14 @@ populate_ap_list_idle (NetDeviceWifi *device_wifi) + continue; + } + ++ /* Skip SSID check for active connection/AP (will not match with OWE) */ ++ if (ap == active_ap && connection == ac_con) ++ break; ++ + setting = nm_connection_get_setting_by_name (connection, NM_SETTING_WIRELESS_SETTING_NAME); + ssid = nm_setting_wireless_get_ssid (NM_SETTING_WIRELESS (setting)); +- if (nm_utils_same_ssid (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid), ++ if (ssid_ap && ++ nm_utils_same_ssid (g_bytes_get_data (ssid, NULL), g_bytes_get_size (ssid), + g_bytes_get_data (ssid_ap, NULL), g_bytes_get_size (ssid_ap), + TRUE)) + break; +-- +2.34.1 + diff --git a/SOURCES/0008-network-Fix-saving-passwords-for-non-wifi-connection.patch b/SOURCES/0008-network-Fix-saving-passwords-for-non-wifi-connection.patch new file mode 100644 index 0000000..324de72 --- /dev/null +++ b/SOURCES/0008-network-Fix-saving-passwords-for-non-wifi-connection.patch @@ -0,0 +1,51 @@ +From 4269c292020aa11d7b8e17e804ad207e892d2bfe Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Thu, 9 Dec 2021 17:53:09 +0100 +Subject: [PATCH 8/8] network: Fix saving passwords for non-wifi connections + +When validating security settings for non-wifi connections, we +temporarily create a wireless connection. Unfortunately, when this +connection is destroyed, it'll clear the stored password from the 802.1x +settings object. + +Avoid this by removing the setting before unref'ing the temporary +connection. +--- + .../connection-editor/ce-page-8021x-security.c | 15 +++++---------- + 1 file changed, 5 insertions(+), 10 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-8021x-security.c b/panels/network/connection-editor/ce-page-8021x-security.c +index f7d31969a..0ac057f79 100644 +--- a/panels/network/connection-editor/ce-page-8021x-security.c ++++ b/panels/network/connection-editor/ce-page-8021x-security.c +@@ -126,22 +126,17 @@ validate (CEPage *cepage, NMConnection *connection, GError **error) + /* FIXME: get failed property and error out of wireless security objects */ + valid = wireless_security_validate (page->security, error); + if (valid) { +- NMSetting *s_con; +- + /* Here's a nice hack to work around the fact that ws_802_1x_fill_connection needs wireless setting. */ +- tmp_connection = nm_simple_connection_new (); ++ tmp_connection = nm_simple_connection_new_clone (connection); + nm_connection_add_setting (tmp_connection, nm_setting_wireless_new ()); + +- /* temp connection needs a 'connection' setting too, since most of +- * the EAP methods need the UUID for CA cert ignore stuff. +- */ +- s_con = nm_connection_get_setting (connection, NM_TYPE_SETTING_CONNECTION); +- nm_connection_add_setting (tmp_connection, nm_setting_duplicate (s_con)); +- + ws_802_1x_fill_connection (page->security, "wpa_eap_auth_combo", tmp_connection); + ++ /* NOTE: It is important we create a copy of the settings, as the ++ * secrets might be cleared otherwise. ++ */ + s_8021x = nm_connection_get_setting (tmp_connection, NM_TYPE_SETTING_802_1X); +- nm_connection_add_setting (connection, NM_SETTING (g_object_ref (s_8021x))); ++ nm_connection_add_setting (connection, nm_setting_duplicate (NM_SETTING (s_8021x))); + + g_object_unref (tmp_connection); + } +-- +2.34.1 + diff --git a/SOURCES/Update-translations.patch b/SOURCES/Update-translations.patch index 40a74e6..aa49149 100644 --- a/SOURCES/Update-translations.patch +++ b/SOURCES/Update-translations.patch @@ -1,14 +1,15 @@ -From b94f7fd737ac003070c754bb3f76d4788f9af799 Mon Sep 17 00:00:00 2001 +From 069b43926986c9f935871c6c82c5c61e7d60651d Mon Sep 17 00:00:00 2001 From: Kalev Lember -Date: Mon, 1 Mar 2021 14:26:47 +0100 +Date: Fri, 10 Sep 2021 14:04:05 +0200 Subject: [PATCH] Update translations https://bugzilla.redhat.com/show_bug.cgi?id=1876291 --- po/fr.po | 1115 ++++----- po/ja.po | 4791 ++++++++++++++++++++------------------- + po/pt_BR.po | 928 +++++--- po/zh_CN.po | 6279 ++++++++++++++++++++++++++++----------------------- - 3 files changed, 6530 insertions(+), 5655 deletions(-) + 4 files changed, 7124 insertions(+), 5989 deletions(-) diff --git a/po/fr.po b/po/fr.po index 7c55fd2aa..b71cd5c3f 100644 @@ -12607,6 +12608,2179 @@ index bc144dd5d..f9ad4605c 100644 -#~ msgid "Used to determine your geographical location" -#~ msgstr "あなたの地理的位置を特定するのに使用されます" +diff --git a/po/pt_BR.po b/po/pt_BR.po +index bc0861bda..fc221f2b6 100644 +--- a/po/pt_BR.po ++++ b/po/pt_BR.po +@@ -27,21 +27,22 @@ + # Artur de Aquino Morais , 2016. + # Rafael Fontenelle , 2012-2017. + # Enrico Nicoletto , 2012-2016, 2018. ++# Felipe Borges , 2021. ++# + msgid "" + msgstr "" + "Project-Id-Version: gnome-control-center\n" +-"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-control-center/" +-"issues\n" +-"POT-Creation-Date: 2018-02-20 09:14+0000\n" +-"PO-Revision-Date: 2018-02-20 20:14-0300\n" +-"Last-Translator: Enrico Nicoletto \n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2021-02-12 14:19+0100\n" ++"PO-Revision-Date: 2021-07-02 11:51+0200\n" ++"Last-Translator: Felipe Borges \n" + "Language-Team: Brazilian Portuguese \n" + "Language: pt_BR\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" +-"Plural-Forms: nplurals=2; plural=(n > 1);\n" +-"X-Generator: Poedit 2.0.6\n" ++"Plural-Forms: nplurals=2; plural=(n > 1)\n" ++"X-Generator: Gtranslator 40.0\n" + "X-Project-Style: gnome\n" + + #: panels/background/background.ui:49 +@@ -128,26 +129,27 @@ msgstr "Você pode adicionar imagens para a pasta %s e elas aparecerão aqui" + #: panels/background/cc-background-chooser-dialog.c:560 + #: panels/color/cc-color-panel.c:225 panels/color/cc-color-panel.c:963 + #: panels/color/color-calibrate.ui:25 panels/color/color.ui:657 +-#: panels/common/language-chooser.ui:23 panels/display/cc-display-panel.c:2594 ++#: panels/common/language-chooser.ui:23 panels/display/cc-display-panel.c:2597 ++#: panels/info/cc-subscription-register-dialog.ui:18 + #: panels/network/connection-editor/connection-editor.ui:15 + #: panels/network/connection-editor/vpn-helpers.c:181 + #: panels/network/connection-editor/vpn-helpers.c:310 +-#: panels/network/net-device-wifi.c:1371 panels/network/net-device-wifi.c:1451 +-#: panels/network/net-device-wifi.c:1690 panels/network/network-wifi.ui:24 ++#: panels/network/net-device-wifi.c:1411 panels/network/net-device-wifi.c:1491 ++#: panels/network/net-device-wifi.c:1736 panels/network/network-wifi.ui:24 + #: panels/printers/new-printer-dialog.ui:45 + #: panels/printers/pp-details-dialog.c:331 + #: panels/privacy/cc-privacy-panel.c:1053 panels/region/format-chooser.ui:25 + #: panels/region/input-chooser.ui:13 + #: panels/search/cc-search-locations-dialog.c:642 +-#: panels/sharing/cc-sharing-panel.c:384 ++#: panels/sharing/cc-sharing-panel.c:392 + #: panels/user-accounts/data/account-dialog.ui:28 + #: panels/user-accounts/data/join-dialog.ui:20 + #: panels/user-accounts/data/password-dialog.ui:21 + #: panels/user-accounts/um-fingerprint-dialog.c:261 +-#: panels/user-accounts/um-photo-dialog.c:102 +-#: panels/user-accounts/um-photo-dialog.c:229 +-#: panels/user-accounts/um-user-panel.c:635 +-#: panels/user-accounts/um-user-panel.c:653 ++#: panels/user-accounts/um-photo-dialog.c:103 ++#: panels/user-accounts/um-photo-dialog.c:230 ++#: panels/user-accounts/um-user-panel.c:634 ++#: panels/user-accounts/um-user-panel.c:652 + msgid "_Cancel" + msgstr "_Cancelar" + +@@ -182,12 +184,13 @@ msgstr "Plano de fundo" + msgid "Change your background image to a wallpaper or photo" + msgstr "Altere sua imagem de fundo para um papel de parede ou uma foto" + +-#: panels/background/gnome-background-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/background/gnome-background-panel.desktop.in.in:7 + msgid "preferences-desktop-wallpaper" + msgstr "preferences-desktop-wallpaper" + +-#. Translators: those are keywords for the background control-center panel +-#: panels/background/gnome-background-panel.desktop.in.in:14 ++#. Translators: Search terms to find the Background panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/background/gnome-background-panel.desktop.in.in:15 + msgid "Wallpaper;Screen;Desktop;" + msgstr "Papel de parede;Tela;Área de trabalho;Desktop;" + +@@ -232,24 +235,21 @@ msgstr "Desligue o alternador do modo avião para habilitar o Bluetooth." + + #. Translators: The found device is a printer connected via Bluetooth + #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:3 +-#: panels/network/network.ui:101 panels/printers/pp-new-printer-dialog.c:1816 ++#: panels/printers/pp-new-printer-dialog.c:1816 + msgid "Bluetooth" + msgstr "Bluetooth" + +-#: panels/network/network.ui:68 +-msgid "Other Devices" +-msgstr "Outros dispositivos" +- + #: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:4 + msgid "Turn Bluetooth on and off and connect your devices" + msgstr "Ligue e desligue o Bluetooth e conecte seus dispositivos" + +-#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:5 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:6 + msgid "bluetooth" + msgstr "bluetooth" + +-#. Translators: those are keywords for the bluetooth control-center panel +-#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Bluetooth panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/bluetooth/gnome-bluetooth-panel.desktop.in.in:19 + msgid "share;sharing;bluetooth;obex;" + msgstr "compartilhar;compartilhamento;bluetooth;obex;" + +@@ -899,12 +899,13 @@ msgstr "" + "Calibre a cor dos seus dispositivos, tais como monitores, câmeras ou " + "impressoras" + +-#: panels/color/gnome-color-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/color/gnome-color-panel.desktop.in.in:7 + msgid "preferences-color" + msgstr "preferences-color" + +-#. Translators: those are keywords for the color control-center panel +-#: panels/color/gnome-color-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Color panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/color/gnome-color-panel.desktop.in.in:19 + msgid "Color;ICC;Profile;Calibrate;Printer;Display;" + msgstr "Cor;ICC;Perfil;Calibração;Impressão;Tela;" + +@@ -1122,12 +1123,13 @@ msgstr "AM / PM" + msgid "Change the date and time, including time zone" + msgstr "Altere a data e hora, incluindo fuso horário" + +-#: panels/datetime/gnome-datetime-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/datetime/gnome-datetime-panel.desktop.in.in:7 + msgid "preferences-system-time" + msgstr "preferences-system-time" + +-#. Translators: those are keywords for the date and time control-center panel +-#: panels/datetime/gnome-datetime-panel.desktop.in.in:14 ++#. Translators: Search terms to find the Date and Time panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/datetime/gnome-datetime-panel.desktop.in.in:15 + msgid "Clock;Timezone;Location;" + msgstr "Relógio;Fuso horário;Localização;" + +@@ -1140,58 +1142,58 @@ msgid "To change time or date settings, you need to authenticate." + msgstr "" + "Para modificar configurações de data ou hora você precisa se autenticar." + +-#: panels/display/cc-display-panel.c:729 ++#: panels/display/cc-display-panel.c:732 + msgctxt "Display rotation" + msgid "Landscape" + msgstr "Paisagem" + +-#: panels/display/cc-display-panel.c:732 ++#: panels/display/cc-display-panel.c:735 + msgctxt "Display rotation" + msgid "Portrait Right" + msgstr "Retrato direito" + +-#: panels/display/cc-display-panel.c:735 ++#: panels/display/cc-display-panel.c:738 + msgctxt "Display rotation" + msgid "Portrait Left" + msgstr "Retrato esquerdo" + +-#: panels/display/cc-display-panel.c:738 ++#: panels/display/cc-display-panel.c:741 + msgctxt "Display rotation" + msgid "Landscape (flipped)" + msgstr "Paisagem (virado)" + + #. Translators: This option sets orientation of print (portrait, landscape...) +-#: panels/display/cc-display-panel.c:805 ++#: panels/display/cc-display-panel.c:808 + #: panels/printers/pp-options-dialog.c:558 + msgid "Orientation" + msgstr "Orientação" + +-#: panels/display/cc-display-panel.c:870 panels/display/cc-display-panel.c:1673 ++#: panels/display/cc-display-panel.c:873 panels/display/cc-display-panel.c:1676 + #: panels/printers/pp-options-dialog.c:87 + msgid "Resolution" + msgstr "Resolução" + +-#: panels/display/cc-display-panel.c:958 ++#: panels/display/cc-display-panel.c:961 + msgid "Refresh Rate" + msgstr "Taxa de atualização" + +-#: panels/display/cc-display-panel.c:1095 ++#: panels/display/cc-display-panel.c:1098 + msgid "Scale" + msgstr "Escala" + +-#: panels/display/cc-display-panel.c:1148 ++#: panels/display/cc-display-panel.c:1151 + msgid "Adjust for TV" + msgstr "Ajustar para TV" + +-#: panels/display/cc-display-panel.c:1410 ++#: panels/display/cc-display-panel.c:1413 + msgid "Primary Display" + msgstr "Tela primária" + +-#: panels/display/cc-display-panel.c:1439 ++#: panels/display/cc-display-panel.c:1442 + msgid "Display Arrangement" + msgstr "Organização de telas" + +-#: panels/display/cc-display-panel.c:1440 ++#: panels/display/cc-display-panel.c:1443 + msgid "" + "Drag displays to match your setup. The top bar is placed on the primary " + "display." +@@ -1199,41 +1201,41 @@ msgstr "" + "Arraste as teclas para corresponder a sua configuração. A barra superior " + "fica posicionada na tela primária." + +-#: panels/display/cc-display-panel.c:1863 ++#: panels/display/cc-display-panel.c:1866 + msgid "Display Mode" + msgstr "Modo da tela" + +-#: panels/display/cc-display-panel.c:1879 ++#: panels/display/cc-display-panel.c:1882 + msgid "Join Displays" + msgstr "Juntar as telas" + +-#: panels/display/cc-display-panel.c:1882 ++#: panels/display/cc-display-panel.c:1885 + msgid "Mirror" + msgstr "Espelhar" + +-#: panels/display/cc-display-panel.c:1885 ++#: panels/display/cc-display-panel.c:1888 + msgid "Single Display" + msgstr "Tela única" + +-#: panels/display/cc-display-panel.c:2590 ++#: panels/display/cc-display-panel.c:2593 + msgid "Apply Changes?" + msgstr "Aplicar alterações?" + +-#: panels/display/cc-display-panel.c:2604 ++#: panels/display/cc-display-panel.c:2607 + #: panels/network/connection-editor/connection-editor.ui:24 + #: panels/network/network-wifi.ui:38 + msgid "_Apply" + msgstr "_Aplicar" + +-#: panels/display/cc-display-panel.c:2979 ++#: panels/display/cc-display-panel.c:2982 + #, c-format + msgid "%.2lf Hz" + msgstr "%.2lf Hz" + + #. TRANSLATORS: the state of the night light setting +-#: panels/display/cc-display-panel.c:3195 ++#: panels/display/cc-display-panel.c:3198 + #: panels/notifications/cc-notifications-panel.c:292 +-#: panels/power/cc-power-panel.c:1988 panels/power/cc-power-panel.c:1995 ++#: panels/power/cc-power-panel.c:1994 panels/power/cc-power-panel.c:2001 + #: panels/privacy/cc-privacy-panel.c:190 panels/privacy/cc-privacy-panel.c:257 + #: panels/universal-access/cc-ua-panel.c:333 + #: panels/universal-access/cc-ua-panel.c:714 +@@ -1245,9 +1247,9 @@ msgstr "Ativada" + + # Painel "Telas", quando a tela está conectada, mas Desativada. Evitei + # desligada, pois ela pode estar ligada sem estar sendo usada. -- Rafael +-#: panels/display/cc-display-panel.c:3195 panels/network/net-proxy.c:54 ++#: panels/display/cc-display-panel.c:3198 panels/network/net-proxy.c:54 + #: panels/notifications/cc-notifications-panel.c:292 +-#: panels/power/cc-power-panel.c:1982 panels/power/cc-power-panel.c:1993 ++#: panels/power/cc-power-panel.c:1988 panels/power/cc-power-panel.c:1999 + #: panels/privacy/cc-privacy-panel.c:190 panels/privacy/cc-privacy-panel.c:257 + #: panels/universal-access/cc-ua-panel.c:333 + #: panels/universal-access/cc-ua-panel.c:714 +@@ -1261,11 +1263,11 @@ msgstr "Ativada" + msgid "Off" + msgstr "Desativada" + +-#: panels/display/cc-display-panel.c:3216 ++#: panels/display/cc-display-panel.c:3219 + msgid "_Night Light" + msgstr "Luz _noturna" + +-#: panels/display/cc-display-panel.c:3281 ++#: panels/display/cc-display-panel.c:3284 + msgid "Could not get screen information" + msgstr "Não foi possível obter informação sobre a tela" + +@@ -1341,12 +1343,13 @@ msgstr "Telas" + msgid "Choose how to use connected monitors and projectors" + msgstr "Escolha como usar os monitores e projetores conectados" + +-#: panels/display/gnome-display-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/display/gnome-display-panel.desktop.in.in:7 + msgid "preferences-desktop-display" + msgstr "preferences-desktop-display" + +-#. Translators: those are keywords for the display control-center panel +-#: panels/display/gnome-display-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Displays panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/display/gnome-display-panel.desktop.in.in:19 + msgid "" + "Panel;Projector;xrandr;Screen;Resolution;Refresh;Monitor;Night;Light;Blue;" + "redshift;color;sunset;sunrise;" +@@ -1356,8 +1359,10 @@ msgstr "" + "sol;" + + #. TRANSLATORS: AP type +-#: panels/info/cc-info-overview-panel.c:374 +-#: panels/info/cc-info-overview-panel.c:457 panels/network/panel-common.c:123 ++#: panels/info/cc-info-overview-panel.c:385 ++#: panels/info/cc-info-overview-panel.c:465 ++#: panels/info/cc-subscription-details-dialog.c:109 ++#: panels/network/panel-common.c:123 + msgid "Unknown" + msgstr "Desconhecido" + +@@ -1365,24 +1370,24 @@ msgstr "Desconhecido" + #. * example: + #. * "Fedora 25 (Workstation Edition); Build ID: xyz" or + #. * "Ubuntu 16.04 LTS; Build ID: jki" +-#: panels/info/cc-info-overview-panel.c:465 ++#: panels/info/cc-info-overview-panel.c:473 + #, c-format + msgid "%s; Build ID: %s" + msgstr "%s; ID de compilação: %s" + + #. translators: This is the type of architecture for the OS +-#: panels/info/cc-info-overview-panel.c:482 ++#: panels/info/cc-info-overview-panel.c:490 + #, c-format + msgid "64-bit" + msgstr "64 bits" + + #. translators: This is the type of architecture for the OS +-#: panels/info/cc-info-overview-panel.c:485 ++#: panels/info/cc-info-overview-panel.c:493 + #, c-format + msgid "32-bit" + msgstr "32 bits" + +-#: panels/info/cc-info-overview-panel.c:775 ++#: panels/info/cc-info-overview-panel.c:782 + #, c-format + msgid "Version %s" + msgstr "Versão %s" +@@ -1478,6 +1483,220 @@ msgstr "CD de vídeo" + msgid "Windows software" + msgstr "Software do Windows" + ++# Taken from upstream https://github.com/candlepin/subscription-manager/blob/main/po/pt_BR.po ++#: panels/info/cc-subscription-details-dialog.c:125 ++msgid "Subscribed" ++msgstr "Subscrito" ++ ++#: panels/info/cc-subscription-details-dialog.c:127 ++msgid "No Specific Subscription" ++msgstr "Nenhuma Subscrição Especifica" ++ ++#: panels/info/cc-subscription-details-dialog.c:129 ++msgid "Not Subscribed" ++msgstr "Não está subscrito" ++ ++#: panels/info/cc-subscription-details-dialog.c:138 ++msgid "Product Name" ++msgstr "Nome do Produto" ++ ++#: panels/info/cc-subscription-details-dialog.c:139 ++msgid "Product ID" ++msgstr "ID do Produto" ++ ++#: panels/info/cc-subscription-details-dialog.c:140 ++msgid "Version" ++msgstr "Versão" ++ ++#: panels/info/cc-subscription-details-dialog.c:141 ++msgid "Arch" ++msgstr "Arquitetura" ++ ++#: panels/info/cc-subscription-details-dialog.c:142 ++msgid "Status" ++msgstr "Estado" ++ ++#: panels/info/cc-subscription-details-dialog.c:146 ++msgid "Starts" ++msgstr "_Começar" ++ ++#: panels/info/cc-subscription-details-dialog.c:147 ++msgid "Ends" ++msgstr "Finaliza" ++ ++#: panels/info/cc-subscription-details-dialog.c:175 ++#: panels/info/cc-subscription-details-dialog.ui:9 ++#: panels/info/cc-subscription-register-dialog.ui:337 ++#: panels/info/cc-subscription-register-dialog.ui:470 ++msgid "Registration Details" ++msgstr "Detalhes do Registro" ++ ++#: panels/info/cc-subscription-details-dialog.c:188 ++msgid "Subscribe System" ++msgstr "Registrar Sistema" ++ ++#: panels/info/cc-subscription-details-dialog.c:201 ++msgid "Looking For Available Subscriptions…" ++msgstr "Procurando por Subscrições Disponíveis…" ++ ++#: panels/info/cc-subscription-details-dialog.c:215 ++msgid "Unregister System" ++msgstr "Cancelar Registro do Sistema" ++ ++#: panels/info/cc-subscription-details-dialog.c:229 ++msgid "Unregistering System…" ++msgstr "Cancelando Registro do Sistema…" ++ ++#. the widgets are duplicate to allow sliding between two stack pages ++#: panels/info/cc-subscription-details-dialog.c:252 ++#: panels/info/cc-subscription-details-dialog.c:253 ++#: panels/info/cc-subscription-details-dialog.c:254 ++msgid "No installed products detected." ++msgstr "Nenhum produto instalado detectado." ++ ++#: panels/info/cc-subscription-details-dialog.ui:42 ++msgid "_Unregister" ++msgstr "Cancelar Registro" ++ ++#: panels/info/cc-subscription-details-dialog.ui:63 ++msgid "_Subscribe" ++msgstr "_Registrar" ++ ++#: panels/info/cc-subscription-details-dialog.ui:138 ++msgid "Failed to Unregister System" ++msgstr "Falha ao Cancelar Registro do Sistema" ++ ++#: panels/info/cc-subscription-details-dialog.ui:197 ++msgid "This system is subscribed to receive software updates." ++msgstr "Este sistema está registrado para receber atualizações de software." ++ ++#: panels/info/cc-subscription-details-dialog.ui:215 ++msgid "" ++"This system lacks subscriptions to receive updates for some installed " ++"software." ++msgstr "" ++"Este sistema não tem registro para receber algumas atualizações para os " ++"softwares instalados." ++ ++#: panels/info/cc-subscription-details-dialog.ui:233 ++msgid "This system lacks subscriptions to receive software updates." ++msgstr "Este sistema não tem registro para receber atualizações de software." ++ ++#: panels/info/cc-subscription-details-dialog.ui:251 ++msgid "This system is registered to receive software updates." ++msgstr "Este sistema está registrado para receber atualizações de software." ++ ++#: panels/info/cc-subscription-details-dialog.ui:269 ++msgid "This system has no supported software installed." ++msgstr "Este sistema não tem software suportados instalados." ++ ++#: panels/info/cc-subscription-details-dialog.ui:303 ++msgid "_Unregister…" ++msgstr "Cancelar registro…" ++ ++#: panels/info/cc-subscription-details-dialog.ui:324 ++msgid "_Subscribe…" ++msgstr "Registrar…" ++ ++#: panels/info/cc-subscription-details-dialog.ui:357 ++msgid "" ++"Subscribing with Red Hat will allow this system to receive software updates." ++msgstr "" ++"Registrando com a Red Hat vai permitir que este sistema receba atualizações " ++"de software." ++ ++#: panels/info/cc-subscription-details-dialog.ui:391 ++msgid "" ++"Warning: unregistering this system will result in it no longer receiving " ++"software updates." ++msgstr "" ++"Aviso: cancelando o registro deste sistema vai interromper o recebimento de " ++"atualizações de software." ++ ++#: panels/info/cc-subscription-register-dialog.c:81 ++#: panels/info/cc-subscription-register-dialog.ui:9 ++msgid "Register System" ++msgstr "Registrar Sistema" ++ ++#: panels/info/cc-subscription-register-dialog.c:88 ++msgid "Registering System…" ++msgstr "Registrando Sistema…" ++ ++#: panels/info/cc-subscription-register-dialog.ui:37 ++msgid "_Register" ++msgstr "_Registrar" ++ ++#: panels/info/cc-subscription-register-dialog.ui:107 ++msgid "Failed to Register System" ++msgstr "Falha ao Registrar Sistema" ++ ++#: panels/info/cc-subscription-register-dialog.ui:159 ++msgid "Register this system with Red Hat to receive software updates." ++msgstr "" ++"Registre esse sistema com a Red Hat para receber atualizações de software." ++ ++#: panels/info/cc-subscription-register-dialog.ui:179 ++msgid "Registration Server" ++msgstr "Servidor de Registro" ++ ++#: panels/info/cc-subscription-register-dialog.ui:199 ++msgid "Red Hat" ++msgstr "Red Hat" ++ ++#: panels/info/cc-subscription-register-dialog.ui:212 ++msgid "Custom Address" ++msgstr "Endereço Personalizado" ++ ++#: panels/info/cc-subscription-register-dialog.ui:236 ++msgid "_URL" ++msgstr "_URL" ++ ++#: panels/info/cc-subscription-register-dialog.ui:270 ++msgid "Registration Type" ++msgstr "Tipo de Registro" ++ ++#: panels/info/cc-subscription-register-dialog.ui:289 ++msgid "Red Hat Account" ++msgstr "Conta Red Hat" ++ ++#: panels/info/cc-subscription-register-dialog.ui:302 ++msgid "Activation Keys" ++msgstr "Chaves de Ativação" ++ ++#: panels/info/cc-subscription-register-dialog.ui:355 ++msgid "_Login" ++msgstr "_Login" ++ ++#: panels/info/cc-subscription-register-dialog.ui:388 ++#: panels/network/network-wifi.ui:545 ++#: panels/network/wireless-security/eap-method-leap.ui:40 ++#: panels/network/wireless-security/eap-method-simple.ui:40 ++#: panels/network/wireless-security/ws-leap.ui:40 ++#: panels/network/wireless-security/ws-wpa-psk.ui:22 ++#: panels/sharing/sharing.ui:351 ++#: panels/user-accounts/data/account-dialog.ui:300 ++#: panels/user-accounts/data/account-dialog.ui:525 ++#: panels/user-accounts/data/user-accounts-dialog.ui:205 ++msgid "_Password" ++msgstr "_Senha" ++ ++#: panels/info/cc-subscription-register-dialog.ui:427 ++#: panels/info/cc-subscription-register-dialog.ui:540 ++msgid "_Organization" ++msgstr "_Organização" ++ ++#: panels/info/cc-subscription-register-dialog.ui:487 ++msgid "" ++"Enter comma separated activation key(s). If the activation keys have " ++"conflicting settings, the rightmost key takes precedence." ++msgstr "" ++"Insira chave(s) de ativação separadas por vírgula. Se as chaves de ativação " ++"tiverem configurações conflitantes, as últimas chaves são priorizadas." ++ ++#: panels/info/cc-subscription-register-dialog.ui:508 ++msgid "_Activation Keys" ++msgstr "Chaves de _Ativação" ++ + #: panels/info/gnome-default-apps-panel.desktop.in.in:3 + msgid "Default Applications" + msgstr "Aplicativos padrão" +@@ -1486,12 +1705,13 @@ msgstr "Aplicativos padrão" + msgid "Configure Default Applications" + msgstr "Configure os aplicativos padrão" + +-#: panels/info/gnome-default-apps-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/info/gnome-default-apps-panel.desktop.in.in:7 + msgid "starred" + msgstr "destacado" + +-#. Translators: those are keywords for the Default Applications panel +-#: panels/info/gnome-default-apps-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Default Applications panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/info/gnome-default-apps-panel.desktop.in.in:19 + msgid "default;application;preferred;media;" + msgstr "padrão;aplicativo;preferido;mídia;" + +@@ -1503,14 +1723,17 @@ msgstr "Sobre" + msgid "View information about your system" + msgstr "Veja informações sobre seu sistema" + +-#: panels/info/gnome-info-overview-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/info/gnome-info-overview-panel.desktop.in.in:7 + msgid "help-about" + msgstr "help-about" + +-#. Translators: those are keywords for the System Information panel ++#. Translators: Search terms to find the About panel. ++#. Do NOT translate or localize the semicolons! ++#. The list MUST also end with a semicolon! + #. "Preferred Applications" is the old name for the preference, so make + #. sure that you use the same "translation" for those keywords +-#: panels/info/gnome-info-overview-panel.desktop.in.in:20 ++#: panels/info/gnome-info-overview-panel.desktop.in.in:23 + msgid "" + "device;system;information;memory;processor;version;default;application;" + "preferred;cd;dvd;usb;audio;video;disc;removable;media;autorun;" +@@ -1527,12 +1750,13 @@ msgstr "Mídia removível" + msgid "Configure Removable Media settings" + msgstr "Configure as configurações de mídias removíveis" + +-#: panels/info/gnome-removable-media-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/info/gnome-removable-media-panel.desktop.in.in:7 + msgid "media-removable" + msgstr "media-removable" + +-#. Translators: those are keywords for the Removable Media panel +-#: panels/info/gnome-removable-media-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Removable Media panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/info/gnome-removable-media-panel.desktop.in.in:19 + msgid "" + "device;system;default;application;preferred;cd;dvd;usb;audio;video;disc;" + "removable;media;autorun;" +@@ -1564,47 +1788,73 @@ msgstr "_Vídeo" + msgid "_Photos" + msgstr "_Fotos" + +-#: panels/info/info-overview.ui:58 ++#: panels/info/info-overview.ui:61 + msgid "Device name" + msgstr "Nome do dispositivo" + +-#: panels/info/info-overview.ui:74 ++#: panels/info/info-overview.ui:77 + msgid "Memory" + msgstr "Memória" + +-#: panels/info/info-overview.ui:90 ++#: panels/info/info-overview.ui:93 + msgid "Processor" + msgstr "Processador" + +-#: panels/info/info-overview.ui:106 ++#: panels/info/info-overview.ui:109 + msgid "Graphics" + msgstr "Gráficos" + +-#. To translators: this field contains the distro name and version +-#: panels/info/info-overview.ui:121 +-msgid "OS name" +-msgstr "Nome do SO" +- + #. To translators: this field contains the distro type +-#: panels/info/info-overview.ui:137 ++#: panels/info/info-overview.ui:140 + msgid "OS type" + msgstr "Tipo do SO" + +-#: panels/info/info-overview.ui:153 ++#: panels/info/info-overview.ui:156 + msgid "Virtualization" + msgstr "Virtualização" + +-#: panels/info/info-overview.ui:169 ++#: panels/info/info-overview.ui:172 + msgid "Disk" + msgstr "Disco" + +-#: panels/info/info-overview.ui:274 ++#: panels/info/info-overview.ui:277 + msgid "Calculating…" + msgstr "Calculando…" + +-#: panels/info/info-overview.ui:314 +-msgid "Check for updates" +-msgstr "Verificar atualizações" ++#: panels/info/info-overview.ui:333 ++msgid "System Not Registered" ++msgstr "Sistema Não Registrado" ++ ++#: panels/info/info-overview.ui:345 ++msgid "Register this system to receive software updates." ++msgstr "Registre este sistema para receber atualizações de software." ++ ++#: panels/info/info-overview.ui:355 ++msgid "_Register…" ++msgstr "_Registrar…" ++ ++#: panels/info/info-overview.ui:388 ++msgid "Registered System" ++msgstr "Sistema Registrado" ++ ++#: panels/info/info-overview.ui:404 ++msgid "System is registered and able to receive software updates." ++msgstr "" ++"O sistema está registrado e pronto para receber atualizações de software." ++ ++#: panels/info/info-overview.ui:418 ++msgid "System is registered but is unable to receive all software updates." ++msgstr "" ++"Este sistema está registrado mas é incapaz de receber todas as atualizações " ++"de software." ++ ++#: panels/info/info-overview.ui:433 ++msgid "_Details" ++msgstr "Detalhes" ++ ++#: panels/info/info-overview.ui:457 ++msgid "_View Updates" ++msgstr "_Ver Atualizações" + + #: panels/info/info-removable-media.ui:43 + msgid "Select how media should be handled" +@@ -1710,8 +1960,8 @@ msgstr "Lançadores" + msgid "Launch help browser" + msgstr "Lançar o navegador de ajuda" + +-#: panels/keyboard/01-launchers.xml.in:6 shell/cc-window.c:223 +-#: shell/cc-window.c:761 shell/gnome-control-center.desktop.in.in:3 ++#: panels/keyboard/01-launchers.xml.in:6 shell/cc-window.c:220 ++#: shell/cc-window.c:756 shell/gnome-control-center.desktop.in.in:3 + #: shell/window.ui:125 + msgid "Settings" + msgstr "Configurações" +@@ -1737,6 +1987,11 @@ msgstr "Pasta pessoal" + msgid "Search" + msgstr "Pesquisa" + ++#: panels/keyboard/01-launchers.xml.in:16 ++msgctxt "keybinding" ++msgid "Search" ++msgstr "Pesquisa" ++ + #: panels/keyboard/01-screenshot.xml.in:2 + msgid "Screenshots" + msgstr "Capturas de tela" +@@ -1921,12 +2176,13 @@ msgid "View and change keyboard shortcuts and set your typing preferences" + msgstr "" + "Veja e altere os atalhos de teclado e defina suas preferências de digitação" + +-#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:7 + msgid "input-keyboard" + msgstr "input-keyboard" + +-#. Translators: those are keywords for the keyboard control-center panel +-#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Keyboard panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/keyboard/gnome-keyboard-panel.desktop.in.in:19 + msgid "" + "Shortcut;Workspace;Window;Resize;Zoom;Contrast;Input;Source;Lock;Volume;" + msgstr "" +@@ -2001,7 +2257,7 @@ msgstr "Substituir" + msgid "Set" + msgstr "Definir" + +-#: panels/mouse/cc-mouse-panel.c:82 panels/wacom/cc-wacom-panel.c:402 ++#: panels/mouse/cc-mouse-panel.c:82 panels/wacom/cc-wacom-panel.c:441 + msgid "Test Your _Settings" + msgstr "_Testar suas configurações" + +@@ -2016,12 +2272,13 @@ msgstr "" + "Altere a sensibilidade do seu mouse ou touchpad e selecione modo canhoto ou " + "destro" + +-#: panels/mouse/gnome-mouse-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/mouse/gnome-mouse-panel.desktop.in.in:7 + msgid "input-mouse" + msgstr "input-mouse" + +-#. Translators: those are keywords for the mouse and touchpad control-center panel +-#: panels/mouse/gnome-mouse-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Mouse and Touchpad panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/mouse/gnome-mouse-panel.desktop.in.in:19 + msgid "Trackpad;Pointer;Click;Tap;Double;Button;Trackball;Scroll;" + msgstr "" + "Trackpad;Ponteiro;Clicar;Tap;Toque;Batida;Duplo;Botão;Trackball;Rolagem;" +@@ -2130,7 +2387,7 @@ msgid "Single click, secondary button" + msgstr "Clique único, botão secundário" + + #. add proxy to device list +-#: panels/network/cc-network-panel.c:579 ++#: panels/network/cc-network-panel.c:583 + msgid "Network proxy" + msgstr "Proxy da rede" + +@@ -2138,23 +2395,23 @@ msgstr "Proxy da rede" + #. * window for vpn connections, it is also used to display + #. * vpn connections in the device list. + #. +-#: panels/network/cc-network-panel.c:715 panels/network/net-vpn.c:192 +-#: panels/network/net-vpn.c:321 ++#: panels/network/cc-network-panel.c:719 panels/network/net-vpn.c:170 ++#: panels/network/net-vpn.c:299 + #, c-format + msgid "%s VPN" + msgstr "VPN %s" + +-#: panels/network/cc-network-panel.c:779 panels/network/wifi.ui:282 ++#: panels/network/cc-network-panel.c:810 panels/network/wifi.ui:282 + msgid "Oops, something has gone wrong. Please contact your software vendor." + msgstr "Oops, algo deu errado. Por favor contate o seu fornecedor de software." + +-#: panels/network/cc-network-panel.c:785 ++#: panels/network/cc-network-panel.c:816 + msgid "NetworkManager needs to be running." + msgstr "O NetworkManager precisa estar em execução." + +-#: panels/network/cc-wifi-panel.c:212 ++#: panels/network/cc-wifi-panel.c:213 + #: panels/network/gnome-wifi-panel.desktop.in.in:3 +-#: panels/network/network-wifi.ui:1766 ++#: panels/network/network-wifi.ui:1769 + msgid "Wi-Fi" + msgstr "Wi-Fi" + +@@ -2205,31 +2462,31 @@ msgstr "Perfil %d" + + #. TRANSLATORS: this WEP WiFi security + #: panels/network/connection-editor/ce-page-details.c:56 +-#: panels/network/net-device-wifi.c:231 panels/network/net-device-wifi.c:453 ++#: panels/network/net-device-wifi.c:235 panels/network/net-device-wifi.c:468 + msgid "WEP" + msgstr "WEP" + + #. TRANSLATORS: this WPA WiFi security + #: panels/network/connection-editor/ce-page-details.c:60 +-#: panels/network/net-device-wifi.c:235 panels/network/net-device-wifi.c:458 ++#: panels/network/net-device-wifi.c:239 panels/network/net-device-wifi.c:473 + #: panels/network/network-wifi.ui:593 + msgid "WPA" + msgstr "WPA" + + #. TRANSLATORS: this WPA WiFi security + #: panels/network/connection-editor/ce-page-details.c:64 +-#: panels/network/net-device-wifi.c:239 ++#: panels/network/net-device-wifi.c:243 + msgid "WPA2" + msgstr "WPA2" + + #. TRANSLATORS: this Enterprise WiFi security + #: panels/network/connection-editor/ce-page-details.c:69 +-#: panels/network/net-device-wifi.c:244 ++#: panels/network/net-device-wifi.c:248 + msgid "Enterprise" + msgstr "Empresarial" + + #: panels/network/connection-editor/ce-page-details.c:74 +-#: panels/network/net-device-wifi.c:249 panels/network/net-device-wifi.c:443 ++#: panels/network/net-device-wifi.c:253 panels/network/net-device-wifi.c:458 + msgctxt "Wifi security" + msgid "None" + msgstr "Nenhuma" +@@ -2241,7 +2498,7 @@ msgstr "Nunca" + + #: panels/network/connection-editor/ce-page-details.c:110 + #: panels/network/net-device-ethernet.c:121 +-#: panels/network/net-device-wifi.c:552 ++#: panels/network/net-device-wifi.c:567 + #, c-format + msgid "%i day ago" + msgid_plural "%i days ago" +@@ -2250,37 +2507,37 @@ msgstr[1] "%i dias atrás" + + #. Translators: network device speed + #: panels/network/connection-editor/ce-page-details.c:225 +-#: panels/network/net-device-ethernet.c:50 panels/network/net-device-wifi.c:608 ++#: panels/network/net-device-ethernet.c:50 panels/network/net-device-wifi.c:646 + #, c-format + msgid "%d Mb/s" + msgstr "%d Mb/s" + + #: panels/network/connection-editor/ce-page-details.c:251 +-#: panels/network/net-device-wifi.c:637 ++#: panels/network/net-device-wifi.c:675 + msgctxt "Signal strength" + msgid "None" + msgstr "Nenhum" + + #: panels/network/connection-editor/ce-page-details.c:253 +-#: panels/network/net-device-wifi.c:639 ++#: panels/network/net-device-wifi.c:677 + msgctxt "Signal strength" + msgid "Weak" + msgstr "Fraca" + + #: panels/network/connection-editor/ce-page-details.c:255 +-#: panels/network/net-device-wifi.c:641 ++#: panels/network/net-device-wifi.c:679 + msgctxt "Signal strength" + msgid "Ok" + msgstr "Ok" + + #: panels/network/connection-editor/ce-page-details.c:257 +-#: panels/network/net-device-wifi.c:643 ++#: panels/network/net-device-wifi.c:681 + msgctxt "Signal strength" + msgid "Good" + msgstr "Boa" + + #: panels/network/connection-editor/ce-page-details.c:259 +-#: panels/network/net-device-wifi.c:645 ++#: panels/network/net-device-wifi.c:683 + msgctxt "Signal strength" + msgid "Excellent" + msgstr "Excelente" +@@ -2298,7 +2555,7 @@ msgid "Remove VPN" + msgstr "Remover VPN" + + #: panels/network/connection-editor/ce-page-details.c:334 +-#: panels/network/network-wifi.ui:1456 shell/cc-window.c:215 ++#: panels/network/network-wifi.ui:1456 shell/cc-window.c:212 + #: shell/panel-list.ui:103 + msgid "Details" + msgstr "Detalhes" +@@ -2320,12 +2577,12 @@ msgstr "Excluir endereço" + msgid "Delete Route" + msgstr "Excluir rota" + +-#: panels/network/connection-editor/ce-page-ip4.c:896 ++#: panels/network/connection-editor/ce-page-ip4.c:899 + #: panels/network/network-wifi.ui:1464 + msgid "IPv4" + msgstr "IPv4" + +-#: panels/network/connection-editor/ce-page-ip6.c:828 ++#: panels/network/connection-editor/ce-page-ip6.c:831 + #: panels/network/network-wifi.ui:1468 + msgid "IPv6" + msgstr "IPv6" +@@ -2632,8 +2889,8 @@ msgstr "Selecione um arquivo para importar" + + #: panels/network/connection-editor/vpn-helpers.c:182 + #: panels/printers/pp-details-dialog.c:332 +-#: panels/sharing/cc-sharing-panel.c:385 +-#: panels/user-accounts/um-photo-dialog.c:230 ++#: panels/sharing/cc-sharing-panel.c:393 ++#: panels/user-accounts/um-photo-dialog.c:231 + msgid "_Open" + msgstr "_Abrir" + +@@ -2698,12 +2955,13 @@ msgstr "Rede" + msgid "Control how you connect to the Internet" + msgstr "Controle como você conecta à Internet" + +-#: panels/network/gnome-network-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/network/gnome-network-panel.desktop.in.in:7 + msgid "network-workgroup" + msgstr "network-workgroup" + +-#. Translators: those are keywords for the network control-center panel +-#: panels/network/gnome-network-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Network panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/network/gnome-network-panel.desktop.in.in:19 + msgid "" + "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Proxy;WAN;Broadband;Modem;Bluetooth;vpn;" + "DNS;" +@@ -2715,27 +2973,28 @@ msgstr "" + msgid "Control how you connect to Wi-Fi networks" + msgstr "Controle como você conecta a redes Wi-Fi" + +-#: panels/network/gnome-wifi-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/network/gnome-wifi-panel.desktop.in.in:7 + msgid "network-wireless" + msgstr "network-wireless" + +-#. Translators: those are keywords for the wi-fi control-center panel +-#: panels/network/gnome-wifi-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Wi-Fi panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/network/gnome-wifi-panel.desktop.in.in:19 + msgid "Network;Wireless;Wi-Fi;Wifi;IP;LAN;Broadband;DNS;" + msgstr "Rede;Sem fio;Wireless;Wi-Fi;Wifi;IP;LAN;Banda larga;DNS;" + + #: panels/network/net-device-ethernet.c:107 +-#: panels/network/net-device-wifi.c:538 ++#: panels/network/net-device-wifi.c:553 + msgid "never" + msgstr "nunca" + + #: panels/network/net-device-ethernet.c:117 +-#: panels/network/net-device-wifi.c:548 ++#: panels/network/net-device-wifi.c:563 + msgid "today" + msgstr "hoje" + + #: panels/network/net-device-ethernet.c:119 +-#: panels/network/net-device-wifi.c:550 ++#: panels/network/net-device-wifi.c:565 + msgid "yesterday" + msgstr "ontem" + +@@ -2754,13 +3013,13 @@ msgstr "Último uso" + #. * profile. It is also used to display ethernet in the + #. * device list. + #. +-#: panels/network/net-device-ethernet.c:276 ++#: panels/network/net-device-ethernet.c:277 + #: panels/network/network-ethernet.ui:19 panels/network/network-simple.ui:39 + msgid "Wired" + msgstr "Com fio" + +-#: panels/network/net-device-ethernet.c:344 +-#: panels/network/net-device-wifi.c:1849 panels/network/network-ethernet.ui:120 ++#: panels/network/net-device-ethernet.c:345 ++#: panels/network/net-device-wifi.c:1895 panels/network/network-ethernet.ui:120 + #: panels/network/network-mobile.ui:394 panels/network/network-simple.ui:75 + #: panels/network/network-vpn.ui:79 + msgid "Options…" +@@ -2770,14 +3029,14 @@ msgstr "Opções…" + msgid "Add new connection" + msgstr "Adicionar nova conexão" + +-#: panels/network/net-device-wifi.c:1328 ++#: panels/network/net-device-wifi.c:1368 + #, c-format + msgid "Switching on the wireless hotspot will disconnect you from %s." + msgstr "" + "Trocar de ponto de acesso de conexão sem fio irá desconectar você de %s." + +-#: panels/network/net-device-wifi.c:1332 ++#: panels/network/net-device-wifi.c:1372 + msgid "" + "It is not possible to access the Internet through your wireless while the " + "hotspot is active." +@@ -2785,11 +3044,11 @@ msgstr "" + "Não é possível acessar a Internet através da sua conexão sem fio enquanto o " + "ponto de acesso estiver ativo." + +-#: panels/network/net-device-wifi.c:1339 ++#: panels/network/net-device-wifi.c:1379 + msgid "Turn On Wi-Fi Hotspot?" + msgstr "Ligar o ponto de acesso Wi-Fi?" + +-#: panels/network/net-device-wifi.c:1361 ++#: panels/network/net-device-wifi.c:1401 + msgid "" + "Wi-Fi hotspots are usually used to share an additional Internet connection " + "over Wi-Fi." +@@ -2797,28 +3056,28 @@ msgstr "" + "Pontos de acessos Wi-Fi são geralmente usados para compartilhar uma conexão " + "Internet adicional pelo Wi-Fi." + +-#: panels/network/net-device-wifi.c:1372 ++#: panels/network/net-device-wifi.c:1412 + msgid "_Turn On" + msgstr "_Ligar" + +-#: panels/network/net-device-wifi.c:1449 ++#: panels/network/net-device-wifi.c:1489 + msgid "Stop hotspot and disconnect any users?" + msgstr "Parar ponto de acesso e desconectar todos os usuários?" + +-#: panels/network/net-device-wifi.c:1452 ++#: panels/network/net-device-wifi.c:1492 + msgid "_Stop Hotspot" + msgstr "_Parar ponto de acesso" + +-#: panels/network/net-device-wifi.c:1552 ++#: panels/network/net-device-wifi.c:1592 + msgid "System policy prohibits use as a Hotspot" + msgstr "A política do sistema proíbe o uso de um ponto de acesso" + +-#: panels/network/net-device-wifi.c:1555 ++#: panels/network/net-device-wifi.c:1595 + msgid "Wireless device does not support Hotspot mode" + msgstr "" + "O dispositivo de rede sem fio não possui suporte a modo de ponto de acesso" + +-#: panels/network/net-device-wifi.c:1687 ++#: panels/network/net-device-wifi.c:1733 + msgid "" + "Network details for the selected networks, including passwords and any " + "custom configuration will be lost." +@@ -2826,16 +3085,16 @@ msgstr "" + "Detalhes de rede selecionadas, incluindo senhas e qualquer configuração " + "personalizada serão perdidos." + +-#: panels/network/net-device-wifi.c:1691 panels/network/network-wifi.ui:1362 ++#: panels/network/net-device-wifi.c:1737 panels/network/network-wifi.ui:1362 + msgid "_Forget" + msgstr "_Esquecer" + +-#: panels/network/net-device-wifi.c:2000 panels/network/net-device-wifi.c:2007 ++#: panels/network/net-device-wifi.c:2046 panels/network/net-device-wifi.c:2053 + msgid "Known Wi-Fi Networks" + msgstr "Redes Wi-Fi conhecidas" + + #. translators: This is the label for the "Forget wireless network" functionality +-#: panels/network/net-device-wifi.c:2040 ++#: panels/network/net-device-wifi.c:2086 + msgctxt "Wi-Fi Network" + msgid "_Forget" + msgstr "_Esquecer" +@@ -2912,6 +3171,10 @@ msgstr "_URL de configuração" + msgid "Turn device off" + msgstr "Desligar dispositivo" + ++#: panels/network/network.ui:101 ++msgid "Other Devices" ++msgstr "Outros dispositivos" ++ + #: panels/network/network.ui:194 + msgid "Not set up" + msgstr "Não configurado" +@@ -2928,18 +3191,6 @@ msgstr "Cone_xão automática" + msgid "details" + msgstr "detalhes" + +-#: panels/network/network-wifi.ui:545 +-#: panels/network/wireless-security/eap-method-leap.ui:40 +-#: panels/network/wireless-security/eap-method-simple.ui:40 +-#: panels/network/wireless-security/ws-leap.ui:40 +-#: panels/network/wireless-security/ws-wpa-psk.ui:22 +-#: panels/sharing/sharing.ui:351 +-#: panels/user-accounts/data/account-dialog.ui:300 +-#: panels/user-accounts/data/account-dialog.ui:525 +-#: panels/user-accounts/data/user-accounts-dialog.ui:205 +-msgid "_Password" +-msgstr "_Senha" +- + #: panels/network/network-wifi.ui:622 + msgid "Show P_assword" + msgstr "_Mostrar senha" +@@ -3054,19 +3305,19 @@ msgctxt "Wi-Fi passkey" + msgid "Password" + msgstr "Senha" + +-#: panels/network/network-wifi.ui:1796 ++#: panels/network/network-wifi.ui:1799 + msgid "Turn Wi-Fi off" + msgstr "Desligar Wi-Fi" + +-#: panels/network/network-wifi.ui:1828 ++#: panels/network/network-wifi.ui:1831 + msgid "_Connect to Hidden Network…" + msgstr "_Conectar a uma rede oculta…" + +-#: panels/network/network-wifi.ui:1838 ++#: panels/network/network-wifi.ui:1841 + msgid "_Turn On Wi-Fi Hotspot…" + msgstr "_Ligar ponto de acesso Wi-Fi…" + +-#: panels/network/network-wifi.ui:1848 ++#: panels/network/network-wifi.ui:1851 + msgid "_Known Wi-Fi Networks" + msgstr "Redes _Wi-Fi conhecidas" + +@@ -3378,23 +3629,23 @@ msgstr "Faltando firmware" + msgid "Cable unplugged" + msgstr "Cabo desconectado" + +-#: panels/network/wireless-security/eap-method.c:57 ++#: panels/network/wireless-security/eap-method.c:69 + msgid "undefined error in 802.1X security (wpa-eap)" + msgstr "erro indefinido na segurança 802.1X (wpa-eap)" + +-#: panels/network/wireless-security/eap-method.c:233 ++#: panels/network/wireless-security/eap-method.c:245 + msgid "no file selected" + msgstr "nenhum arquivo selecionado" + +-#: panels/network/wireless-security/eap-method.c:264 ++#: panels/network/wireless-security/eap-method.c:276 + msgid "unspecified error validating eap-method file" + msgstr "erro não especificado ao validar arquivo de método eap" + +-#: panels/network/wireless-security/eap-method.c:439 ++#: panels/network/wireless-security/eap-method.c:451 + msgid "DER, PEM, or PKCS#12 private keys (*.der, *.pem, *.p12, *.key)" + msgstr "Chaves privadas DER, PEM ou PKCS#12 (*.der, *.pem, *.p12, *.key)" + +-#: panels/network/wireless-security/eap-method.c:442 ++#: panels/network/wireless-security/eap-method.c:454 + msgid "DER or PEM certificates (*.der, *.pem, *.crt, *.cer)" + msgstr "Certificados DER ou PEM (*.der, *.pem, *.crt, *.cer)" + +@@ -3782,12 +4033,13 @@ msgstr "Notificações" + msgid "Control which notifications are displayed and what they show" + msgstr "Controle quais notificações são exibidas e o que elas mostram" + +-#: panels/notifications/gnome-notifications-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/notifications/gnome-notifications-panel.desktop.in.in:7 + msgid "preferences-system-notifications" + msgstr "preferences-system-notifications" + +-#. Translators: those are keywords for the notifications control-center panel +-#: panels/notifications/gnome-notifications-panel.desktop.in.in:19 ++#. Translators: Search terms to find the Notifications panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/notifications/gnome-notifications-panel.desktop.in.in:20 + msgid "Notifications;Banner;Message;Tray;Popup;" + msgstr "Notificações;Banner;Mensagem;Bandeja;Janelas instantâneas;" + +@@ -3812,19 +4064,19 @@ msgstr "Outro" + + #. translators: This is the title of the "Show Account" dialog. The + #. * %s is the name of the provider. e.g., 'Google'. +-#: panels/online-accounts/cc-online-accounts-panel.c:551 ++#: panels/online-accounts/cc-online-accounts-panel.c:612 + #, c-format + msgid "%s Account" + msgstr "Conta %s" + +-#: panels/online-accounts/cc-online-accounts-panel.c:843 ++#: panels/online-accounts/cc-online-accounts-panel.c:904 + msgid "Error removing account" + msgstr "Erro ao remover conta" + + #. Translators: The %s is the username (eg., debarshi.ray@gmail.com + #. * or rishi). + #. +-#: panels/online-accounts/cc-online-accounts-panel.c:908 ++#: panels/online-accounts/cc-online-accounts-panel.c:969 + #, c-format + msgid "%s removed" + msgstr "%s removido" +@@ -3837,14 +4089,17 @@ msgstr "Contas online" + msgid "Connect to your online accounts and decide what to use them for" + msgstr "Conecte-se às suas contas on-line e decida para que usá-las" + +-#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:7 + msgid "goa-panel" + msgstr "goa-panel" + + # Não podemos esquecer de deixar o sinal de ponto-e-vírgula após a última palavra chave!! --Enrico +-#. Translators: those are keywords for the online-accounts control-center panel ++#. Translators: Search terms to find the Online Accounts panel. ++#. Do NOT translate or localize the semicolons! ++#. The list MUST also end with a semicolon! + #. For ReadItLater and Pocket, see http://en.wikipedia.org/wiki/Pocket_(application) +-#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:19 ++#: panels/online-accounts/gnome-online-accounts-panel.desktop.in.in:22 + msgid "" + "Google;Facebook;Twitter;Yahoo;Web;Online;Chat;Calendar;Mail;Contact;ownCloud;" + "Kerberos;IMAP;SMTP;Pocket;ReadItLater;" +@@ -3992,7 +4247,7 @@ msgid "Media player" + msgstr "Reprodutor de multimídia" + + #. TRANSLATORS: secondary battery +-#: panels/power/cc-power-panel.c:555 panels/wacom/cc-wacom-panel.c:793 ++#: panels/power/cc-power-panel.c:555 panels/wacom/cc-wacom-panel.c:837 + msgid "Tablet" + msgstr "Tablet" + +@@ -4008,7 +4263,7 @@ msgstr "Dispositivo de entrada de jogo" + + #. TRANSLATORS: secondary battery, misc + #: panels/power/cc-power-panel.c:564 panels/power/cc-power-panel.c:804 +-#: panels/power/cc-power-panel.c:2374 ++#: panels/power/cc-power-panel.c:2380 + msgid "Battery" + msgstr "Bateria" + +@@ -4052,100 +4307,100 @@ msgstr "Vazia" + msgid "Batteries" + msgstr "Baterias" + +-#: panels/power/cc-power-panel.c:1236 ++#: panels/power/cc-power-panel.c:1242 + msgid "When _idle" + msgstr "_Quando ocioso" + +-#: panels/power/cc-power-panel.c:1690 ++#: panels/power/cc-power-panel.c:1696 + msgid "Power Saving" + msgstr "Economia de energia" + +-#: panels/power/cc-power-panel.c:1721 ++#: panels/power/cc-power-panel.c:1727 + msgid "_Screen brightness" + msgstr "_Brilho da tela" + +-#: panels/power/cc-power-panel.c:1740 ++#: panels/power/cc-power-panel.c:1746 + msgid "Automatic brightness" + msgstr "Brilho automático" + +-#: panels/power/cc-power-panel.c:1760 ++#: panels/power/cc-power-panel.c:1766 + msgid "_Keyboard brightness" + msgstr "_Brilho do teclado" + +-#: panels/power/cc-power-panel.c:1770 ++#: panels/power/cc-power-panel.c:1776 + msgid "_Dim screen when inactive" + msgstr "_Escurecer a tela quando inativo" + +-#: panels/power/cc-power-panel.c:1795 ++#: panels/power/cc-power-panel.c:1801 + msgid "_Blank screen" + msgstr "A_pagar a tela" + +-#: panels/power/cc-power-panel.c:1832 ++#: panels/power/cc-power-panel.c:1838 + msgid "_Wi-Fi" + msgstr "_Wi-Fi" + +-#: panels/power/cc-power-panel.c:1837 ++#: panels/power/cc-power-panel.c:1843 + msgid "Turn off Wi-Fi to save power." + msgstr "Desligar o Wi-Fi para poupar energia." + +-#: panels/power/cc-power-panel.c:1862 ++#: panels/power/cc-power-panel.c:1868 + msgid "_Mobile broadband" + msgstr "Banda larga _móvel" + +-#: panels/power/cc-power-panel.c:1867 ++#: panels/power/cc-power-panel.c:1873 + msgid "Turn off mobile broadband (3G, 4G, LTE, etc.) to save power." + msgstr "Desligar a banda larga móvel (3G, 4G, LTE, etc.) para poupar energia." + +-#: panels/power/cc-power-panel.c:1920 ++#: panels/power/cc-power-panel.c:1926 + msgid "_Bluetooth" + msgstr "_Bluetooth" + +-#: panels/power/cc-power-panel.c:1925 ++#: panels/power/cc-power-panel.c:1931 + msgid "Turn off Bluetooth to save power." + msgstr "Desligar o Bluetooth para poupar energia." + +-#: panels/power/cc-power-panel.c:1984 ++#: panels/power/cc-power-panel.c:1990 + msgid "When on battery power" + msgstr "Quando estiver usando a energia da bateria" + +-#: panels/power/cc-power-panel.c:1986 ++#: panels/power/cc-power-panel.c:1992 + msgid "When plugged in" + msgstr "Ligado na tomada" + +-#: panels/power/cc-power-panel.c:2081 ++#: panels/power/cc-power-panel.c:2087 + msgid "Suspend" + msgstr "Suspender" + +-#: panels/power/cc-power-panel.c:2082 ++#: panels/power/cc-power-panel.c:2088 + msgid "Power Off" + msgstr "Desligar" + +-#: panels/power/cc-power-panel.c:2083 ++#: panels/power/cc-power-panel.c:2089 + msgid "Hibernate" + msgstr "Hibernar" + +-#: panels/power/cc-power-panel.c:2084 ++#: panels/power/cc-power-panel.c:2090 + msgid "Nothing" + msgstr "Nada" + + #. Frame header +-#: panels/power/cc-power-panel.c:2198 ++#: panels/power/cc-power-panel.c:2204 + msgid "Suspend & Power Button" + msgstr "Botão de suspender & desligar" + +-#: panels/power/cc-power-panel.c:2237 ++#: panels/power/cc-power-panel.c:2243 + msgid "_Automatic suspend" + msgstr "Suspensão _automática" + +-#: panels/power/cc-power-panel.c:2238 ++#: panels/power/cc-power-panel.c:2244 + msgid "Automatic suspend" + msgstr "Suspensão automática" + +-#: panels/power/cc-power-panel.c:2305 ++#: panels/power/cc-power-panel.c:2311 + msgid "_When the Power Button is pressed" + msgstr "_Quando o botão de energia for pressionado" + +-#: panels/power/cc-power-panel.c:2424 shell/cc-window.c:219 ++#: panels/power/cc-power-panel.c:2430 shell/cc-window.c:216 + #: shell/panel-list.ui:45 + msgid "Devices" + msgstr "Dispositivos" +@@ -4159,12 +4414,13 @@ msgid "View your battery status and change power saving settings" + msgstr "" + "Veja o status da sua bateria e altere as configurações de economia de energia" + +-#: panels/power/gnome-power-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/power/gnome-power-panel.desktop.in.in:7 + msgid "gnome-power-manager" + msgstr "gnome-power-manager" + +-#. Translators: those are keywords for the power control-center panel +-#: panels/power/gnome-power-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Power panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/power/gnome-power-panel.desktop.in.in:19 + msgid "" + "Power;Sleep;Suspend;Hibernate;Battery;Brightness;Dim;Blank;Monitor;DPMS;Idle;" + msgstr "" +@@ -4280,18 +4536,18 @@ msgid "Authentication Required" + msgstr "Autenticação necessária" + + #. Translators: %s is the printer name +-#: panels/printers/cc-printers-panel.c:791 ++#: panels/printers/cc-printers-panel.c:842 + #, c-format + msgid "Printer “%s” has been deleted" + msgstr "A impressora “%s” foi excluída" + + #. Translators: Addition of the new printer failed. +-#: panels/printers/cc-printers-panel.c:1036 ++#: panels/printers/cc-printers-panel.c:1142 + msgid "Failed to add new printer." + msgstr "Falha ao adicionar nova impressora." + + #. Translators: The XML file containing user interface can not be loaded +-#: panels/printers/cc-printers-panel.c:1371 ++#: panels/printers/cc-printers-panel.c:1514 + #, c-format + msgid "Could not load ui: %s" + msgstr "Não foi possível carregar a interface: %s" +@@ -4332,12 +4588,13 @@ msgstr "" + "Adicione impressoras, veja trabalhos de impressão e decida como você " + "gostaria de imprimir" + +-#: panels/printers/gnome-printers-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/printers/gnome-printers-panel.desktop.in.in:7 + msgid "printer" + msgstr "Impressora" + +-#. Translators: those are keywords for the printing control-center panel +-#: panels/printers/gnome-printers-panel.desktop.in.in:15 ++#. Translators: Search terms to find the Printers panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/printers/gnome-printers-panel.desktop.in.in:16 + msgid "Printer;Queue;Print;Paper;Ink;Toner;" + msgstr "Impressora;Fila;Imprimir;Papel;Tinta;Toner;" + +@@ -4430,7 +4687,7 @@ msgid "Select Printer Driver" + msgstr "Selecionar driver de impressora" + + #: panels/printers/ppd-selection-dialog.ui:40 +-#: panels/user-accounts/um-photo-dialog.c:104 ++#: panels/user-accounts/um-photo-dialog.c:105 + msgid "Select" + msgstr "Selecionar" + +@@ -4487,55 +4744,55 @@ msgid "Reverse portrait" + msgstr "Retrato invertido" + + #. Translators: Job's state (job is waiting to be printed) +-#: panels/printers/pp-jobs-dialog.c:243 ++#: panels/printers/pp-jobs-dialog.c:234 + msgctxt "print job" + msgid "Pending" + msgstr "Pendente" + + #. Translators: Job's state (job is held for printing) +-#: panels/printers/pp-jobs-dialog.c:249 ++#: panels/printers/pp-jobs-dialog.c:240 + msgctxt "print job" + msgid "Paused" + msgstr "Pausada" + + #. Translators: Job's state (job needs authentication to proceed further) +-#: panels/printers/pp-jobs-dialog.c:254 ++#: panels/printers/pp-jobs-dialog.c:245 + msgctxt "print job" + msgid "Authentication required" + msgstr "Autenticação necessária" + + #. Translators: Job's state (job is currently printing) +-#: panels/printers/pp-jobs-dialog.c:259 ++#: panels/printers/pp-jobs-dialog.c:250 + msgctxt "print job" + msgid "Processing" + msgstr "Processando" + + #. Translators: Job's state (job has been stopped) +-#: panels/printers/pp-jobs-dialog.c:263 ++#: panels/printers/pp-jobs-dialog.c:254 + msgctxt "print job" + msgid "Stopped" + msgstr "Parado" + + #. Translators: Job's state (job has been canceled) +-#: panels/printers/pp-jobs-dialog.c:267 ++#: panels/printers/pp-jobs-dialog.c:258 + msgctxt "print job" + msgid "Canceled" + msgstr "Cancelado" + + #. Translators: Job's state (job has aborted due to error) +-#: panels/printers/pp-jobs-dialog.c:271 ++#: panels/printers/pp-jobs-dialog.c:262 + msgctxt "print job" + msgid "Aborted" + msgstr "Abortado" + + #. Translators: Job's state (job has completed successfully) +-#: panels/printers/pp-jobs-dialog.c:275 ++#: panels/printers/pp-jobs-dialog.c:266 + msgctxt "print job" + msgid "Completed" + msgstr "Concluído" + + #. Translators: This label shows how many jobs of this printer needs to be authenticated to be printed. +-#: panels/printers/pp-jobs-dialog.c:399 ++#: panels/printers/pp-jobs-dialog.c:390 + #, c-format + msgid "%u Job Requires Authentication" + msgid_plural "%u Jobs Require Authentication" +@@ -4543,14 +4800,14 @@ msgstr[0] "%u trabalho requer autenticação" + msgstr[1] "%u trabalhos requerem autenticação" + + #. Translators: This is the printer name for which we are showing the active jobs +-#: panels/printers/pp-jobs-dialog.c:617 ++#: panels/printers/pp-jobs-dialog.c:620 + #, c-format + msgctxt "Printer jobs dialog title" + msgid "%s — Active Jobs" + msgstr "%s — Trabalhos ativos" + + #. Translators: The printer needs authentication info to print. +-#: panels/printers/pp-jobs-dialog.c:622 ++#: panels/printers/pp-jobs-dialog.c:625 + #, c-format + msgid "Enter credentials to print from %s." + msgstr "Digite as credenciais para imprimir de %s." +@@ -4732,127 +4989,127 @@ msgid "Manufacturer" + msgstr "Fabricante" + + #. Translators: This is the label of the button that opens the Jobs Dialog. +-#: panels/printers/pp-printer-entry.c:598 panels/printers/printer-entry.ui:166 ++#: panels/printers/pp-printer-entry.c:613 panels/printers/printer-entry.ui:166 + msgid "No Active Jobs" + msgstr "Sem trabalhos ativos" + + #. Translators: This is the label of the button that opens the Jobs Dialog. +-#: panels/printers/pp-printer-entry.c:603 ++#: panels/printers/pp-printer-entry.c:618 + #, c-format + msgid "%u Job" + msgid_plural "%u Jobs" + msgstr[0] "%u trabalho" + msgstr[1] "%u trabalhos" + ++#. Translators: Name of job which makes printer to clean its heads ++#: panels/printers/pp-printer-entry.c:752 ++msgid "Clean print heads" ++msgstr "Limpeza cabeças de impressão" ++ + #. Translators: The printer is low on toner +-#: panels/printers/pp-printer-entry.c:766 ++#: panels/printers/pp-printer-entry.c:804 + msgid "Low on toner" + msgstr "Com pouco toner" + + #. Translators: The printer has no toner left +-#: panels/printers/pp-printer-entry.c:768 ++#: panels/printers/pp-printer-entry.c:806 + msgid "Out of toner" + msgstr "Sem toner" + + #. Translators: "Developer" is a chemical for photo development, + #. * http://en.wikipedia.org/wiki/Photographic_developer +-#: panels/printers/pp-printer-entry.c:771 ++#: panels/printers/pp-printer-entry.c:809 + msgid "Low on developer" + msgstr "Com pouco revelador" + + #. Translators: "Developer" is a chemical for photo development, + #. * http://en.wikipedia.org/wiki/Photographic_developer +-#: panels/printers/pp-printer-entry.c:774 ++#: panels/printers/pp-printer-entry.c:812 + msgid "Out of developer" + msgstr "Sem revelador" + + #. Translators: "marker" is one color bin of the printer +-#: panels/printers/pp-printer-entry.c:776 ++#: panels/printers/pp-printer-entry.c:814 + msgid "Low on a marker supply" + msgstr "Pouco suprimento de marcador" + + #. Translators: "marker" is one color bin of the printer +-#: panels/printers/pp-printer-entry.c:778 ++#: panels/printers/pp-printer-entry.c:816 + msgid "Out of a marker supply" + msgstr "Sem suprimento de marcador" + + #. Translators: One or more covers on the printer are open +-#: panels/printers/pp-printer-entry.c:780 ++#: panels/printers/pp-printer-entry.c:818 + msgid "Open cover" + msgstr "Abrir capa" + + #. Translators: One or more doors on the printer are open +-#: panels/printers/pp-printer-entry.c:782 ++#: panels/printers/pp-printer-entry.c:820 + msgid "Open door" + msgstr "Abrir porta" + + #. Translators: At least one input tray is low on media +-#: panels/printers/pp-printer-entry.c:784 ++#: panels/printers/pp-printer-entry.c:822 + msgid "Low on paper" + msgstr "Com pouco papel" + + #. Translators: At least one input tray is empty +-#: panels/printers/pp-printer-entry.c:786 ++#: panels/printers/pp-printer-entry.c:824 + msgid "Out of paper" + msgstr "Sem papel" + + #. Translators: The printer is offline +-#: panels/printers/pp-printer-entry.c:788 ++#: panels/printers/pp-printer-entry.c:826 + msgctxt "printer state" + msgid "Offline" + msgstr "Desconectado" + + #. Translators: Someone has stopped the Printer + #. Translators: Printer's state (no jobs can be processed) +-#: panels/printers/pp-printer-entry.c:790 +-#: panels/printers/pp-printer-entry.c:920 ++#: panels/printers/pp-printer-entry.c:828 ++#: panels/printers/pp-printer-entry.c:971 + msgctxt "printer state" + msgid "Stopped" + msgstr "Parado" + + #. Translators: The printer marker supply waste receptacle is almost full +-#: panels/printers/pp-printer-entry.c:792 ++#: panels/printers/pp-printer-entry.c:830 + msgid "Waste receptacle almost full" + msgstr "Recipiente de descarte quase cheio" + + #. Translators: The printer marker supply waste receptacle is full +-#: panels/printers/pp-printer-entry.c:794 ++#: panels/printers/pp-printer-entry.c:832 + msgid "Waste receptacle full" + msgstr "Recipiente de descarte cheio" + + #. Translators: Optical photo conductors are used in laser printers +-#: panels/printers/pp-printer-entry.c:796 ++#: panels/printers/pp-printer-entry.c:834 + msgid "The optical photo conductor is near end of life" + msgstr "O condutor de foto ótica está quase no fim da vida" + + #. Translators: Optical photo conductors are used in laser printers +-#: panels/printers/pp-printer-entry.c:798 ++#: panels/printers/pp-printer-entry.c:836 + msgid "The optical photo conductor is no longer functioning" + msgstr "O condutor de foto ótica não está funcionando" + + #. Translators: Printer's state (can start new job without waiting) +-#: panels/printers/pp-printer-entry.c:906 ++#: panels/printers/pp-printer-entry.c:957 + msgctxt "printer state" + msgid "Ready" + msgstr "Pronto" + + #. Translators: Printer's state (printer is ready but doesn't accept new jobs) +-#: panels/printers/pp-printer-entry.c:911 ++#: panels/printers/pp-printer-entry.c:962 + msgctxt "printer state" + msgid "Does not accept jobs" + msgstr "Não aceitar trabalhos" + + #. Translators: Printer's state (jobs are processing) +-#: panels/printers/pp-printer-entry.c:916 ++#: panels/printers/pp-printer-entry.c:967 + msgctxt "printer state" + msgid "Processing" + msgstr "Processando" + +-#. Translators: Name of job which makes printer to clean its heads +-#: panels/printers/pp-printer-entry.c:940 +-msgid "Clean print heads" +-msgstr "Limpeza cabeças de impressão" +- + #: panels/printers/printer-entry.ui:14 + msgid "Printing Options" + msgstr "Opções de impressão" +@@ -5001,12 +5258,13 @@ msgid "Protect your personal information and control what others might see" + msgstr "Proteja suas informações pessoais e controle o que os outros podem ver" + + #. FIXME +-#: panels/privacy/gnome-privacy-panel.desktop.in.in:7 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/privacy/gnome-privacy-panel.desktop.in.in:8 + msgid "preferences-system-privacy" + msgstr "preferences-system-privacy" + +-#. Translators: those are keywords for the privacy control-center panel +-#: panels/privacy/gnome-privacy-panel.desktop.in.in:19 ++#. Translators: Search terms to find the Privacy panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/privacy/gnome-privacy-panel.desktop.in.in:20 + msgid "" + "screen;lock;diagnostics;crash;private;recent;temporary;tmp;index;name;" + "network;identity;" +@@ -5246,12 +5504,13 @@ msgstr "" + "Selecione o seus idioma de exibição, formatos, fontes de entradas e " + "disposições de teclado" + +-#: panels/region/gnome-region-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/region/gnome-region-panel.desktop.in.in:7 + msgid "preferences-desktop-locale" + msgstr "preferences-desktop-locale" + +-#. Translators: those are keywords for the region control-center panel +-#: panels/region/gnome-region-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Region and Language panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/region/gnome-region-panel.desktop.in.in:19 + msgid "Language;Layout;Keyboard;Input;" + msgstr "Idioma;Disposição;Teclado;Entrada;" + +@@ -5385,12 +5644,13 @@ msgstr "" + "Controle quais aplicativos mostram resultados de pesquisa no Panorama de " + "atividades" + +-#: panels/search/gnome-search-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/search/gnome-search-panel.desktop.in.in:7 + msgid "preferences-system-search" + msgstr "preferences-system-search" + +-#. Translators: those are keywords for the search control-center panel +-#: panels/search/gnome-search-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Search panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/search/gnome-search-panel.desktop.in.in:19 + msgid "Search;Find;Index;Hide;Privacy;Results;" + msgstr "Pesquisa;Localizar;Índice;Ocultar;Privacidade;Resultados;" + +@@ -5427,31 +5687,31 @@ msgstr "Preferências" + msgid "No networks selected for sharing" + msgstr "Sem redes selecionadas para compartilhamento" + +-#: panels/sharing/cc-sharing-panel.c:275 ++#: panels/sharing/cc-sharing-panel.c:283 + msgctxt "service is enabled" + msgid "On" + msgstr "Ligada" + +-#: panels/sharing/cc-sharing-panel.c:277 panels/sharing/cc-sharing-panel.c:304 ++#: panels/sharing/cc-sharing-panel.c:285 panels/sharing/cc-sharing-panel.c:312 + msgctxt "service is disabled" + msgid "Off" + msgstr "Desligada" + +-#: panels/sharing/cc-sharing-panel.c:307 ++#: panels/sharing/cc-sharing-panel.c:315 + msgctxt "service is enabled" + msgid "Enabled" + msgstr "Habilitado" + +-#: panels/sharing/cc-sharing-panel.c:310 ++#: panels/sharing/cc-sharing-panel.c:318 + msgctxt "service is active" + msgid "Active" + msgstr "Ativo" + +-#: panels/sharing/cc-sharing-panel.c:381 ++#: panels/sharing/cc-sharing-panel.c:389 + msgid "Choose a Folder" + msgstr "Escolha uma pasta" + +-#: panels/sharing/cc-sharing-panel.c:693 ++#: panels/sharing/cc-sharing-panel.c:701 + #, c-format + msgid "" + "File Sharing allows you to share your Public folder with others on your " +@@ -5461,7 +5721,7 @@ msgstr "" + "pública com outros na sua rede atual usando: dav://%s" + +-#: panels/sharing/cc-sharing-panel.c:695 ++#: panels/sharing/cc-sharing-panel.c:703 + #, c-format + msgid "" + "When remote login is enabled, remote users can connect using the Secure " +@@ -5472,7 +5732,7 @@ msgstr "" + "usando o comando de Shell Seguro:\n" + "ssh %s" + +-#: panels/sharing/cc-sharing-panel.c:697 ++#: panels/sharing/cc-sharing-panel.c:705 + #, c-format + msgid "" + "Screen sharing allows remote users to view or control your screen by " +@@ -5481,11 +5741,11 @@ msgstr "" + "Compartilhamento de tela permite que usuários remotos vejam e controlem sua " + "tela conectando a vnc://%s" + +-#: panels/sharing/cc-sharing-panel.c:809 ++#: panels/sharing/cc-sharing-panel.c:817 + msgid "Copy" + msgstr "Copiar" + +-#: panels/sharing/cc-sharing-panel.c:1236 ++#: panels/sharing/cc-sharing-panel.c:1294 + #: panels/sharing/gnome-sharing-panel.desktop.in.in:3 + msgid "Sharing" + msgstr "Compartilhar" +@@ -5494,12 +5754,13 @@ msgstr "Compartilhar" + msgid "Control what you want to share with others" + msgstr "Controle o que você quer compartilhar com outros" + +-#: panels/sharing/gnome-sharing-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/sharing/gnome-sharing-panel.desktop.in.in:7 + msgid "preferences-system-sharing" + msgstr "preferences-system-sharing" + +-#. Translators: those are keywords for the sharing control-center panel +-#: panels/sharing/gnome-sharing-panel.desktop.in.in:15 ++#. Translators: Search terms to find the Sharing panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/sharing/gnome-sharing-panel.desktop.in.in:16 + msgid "" + "share;sharing;ssh;host;name;remote;desktop;media;audio;video;pictures;photos;" + "movies;server;renderer;" +@@ -5605,12 +5866,13 @@ msgstr "" + "Alterar níveis, entradas saídas e alertas de som volume de som e eventos de " + "som" + +-#: panels/sound/data/gnome-sound-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/sound/data/gnome-sound-panel.desktop.in.in:7 + msgid "multimedia-volume-control" + msgstr "multimedia-volume-control" + +-#. Translators: those are keywords for the sound control-center panel +-#: panels/sound/data/gnome-sound-panel.desktop.in.in:19 ++#. Translators: Search terms to find the Sound panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/sound/data/gnome-sound-panel.desktop.in.in:20 + msgid "Card;Microphone;Volume;Fade;Balance;Bluetooth;Headset;Audio;" + msgstr "" + "Cartão;Microfone;Volume;Desaparecer;Balanço;Bluetooth;Fone de ouvido com " +@@ -5841,12 +6103,13 @@ msgstr[1] "%d pixels" + msgid "Make it easier to see, hear, type, point and click" + msgstr "Torna mais fácil ver, ouvir, digitar, apontar e clicar" + +-#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:7 + msgid "preferences-desktop-accessibility" + msgstr "preferences-desktop-accessibility" + +-#. Translators: those are keywords for the universal access control-center panel +-#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Universal Access panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/universal-access/gnome-universal-access-panel.desktop.in.in:19 + msgid "" + "Keyboard;Mouse;a11y;Accessibility;Contrast;Zoom;Screen;Reader;text;font;size;" + "AccessX;Sticky;Keys;Slow;Bounce;Mouse;Double;click;Delay;Assist;Repeat;Blink;" +@@ -6458,7 +6721,7 @@ msgstr "De_do indicador esquerdo" + msgid "_Other finger:" + msgstr "_Outro dedo:" + +-#: panels/user-accounts/data/account-fingerprint.ui:262 ++#: panels/user-accounts/data/account-fingerprint.ui:324 + msgid "" + "Your fingerprint was successfully saved. You should now be able to log in " + "using your fingerprint reader." +@@ -6482,12 +6745,13 @@ msgstr "Usuários" + msgid "Add or remove users and change your password" + msgstr "Adicionar ou remover usuários e alterar sua senha" + +-#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:7 + msgid "system-users" + msgstr "system-users" + +-#. Translators: those are keywords for the user accounts control-center panel +-#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:19 ++#. Translators: Search terms to find the Users panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/user-accounts/data/gnome-user-accounts-panel.desktop.in.in:20 + msgid "Login;Name;Fingerprint;Avatar;Logo;Face;Password;" + msgstr "" + "Iniciar sessão;Sessão;Nome;Impressão digital;Avatar;Logotipo;Face;Senha;" +@@ -6935,7 +7199,7 @@ msgstr "%s — %s" + #. Translators: This is a time format string in the style of "22:58". + #. It indicates a login time which follows a date. + #: panels/user-accounts/um-history-dialog.c:177 +-#: panels/user-accounts/um-user-panel.c:767 ++#: panels/user-accounts/um-user-panel.c:766 + msgctxt "login date-time" + msgid "%k:%M" + msgstr "%k:%M" +@@ -6943,7 +7207,7 @@ msgstr "%k:%M" + #. Translators: This indicates a login date-time. + #. The first %s is a date, and the second %s a time. + #: panels/user-accounts/um-history-dialog.c:180 +-#: panels/user-accounts/um-user-panel.c:771 ++#: panels/user-accounts/um-user-panel.c:770 + #, c-format + msgctxt "login date-time" + msgid "%s, %s" +@@ -6980,7 +7244,7 @@ msgstr "A senha não pode ser alterada" + msgid "The passwords do not match." + msgstr "As senhas não conferem." + +-#: panels/user-accounts/um-photo-dialog.c:226 ++#: panels/user-accounts/um-photo-dialog.c:227 + msgid "Browse for more pictures" + msgstr "Procurar por mais imagens" + +@@ -7008,30 +7272,30 @@ msgstr "Senha inválida, por favor tente novamente" + msgid "Couldn’t connect to the %s domain: %s" + msgstr "Não foi possível conectar ao domínio %s: %s" + +-#: panels/user-accounts/um-user-panel.c:201 ++#: panels/user-accounts/um-user-panel.c:200 + msgid "Your account" + msgstr "Sua conta" + +-#: panels/user-accounts/um-user-panel.c:381 ++#: panels/user-accounts/um-user-panel.c:380 + msgid "Failed to delete user" + msgstr "Falha ao excluir usuário" + +-#: panels/user-accounts/um-user-panel.c:439 +-#: panels/user-accounts/um-user-panel.c:498 +-#: panels/user-accounts/um-user-panel.c:550 ++#: panels/user-accounts/um-user-panel.c:438 ++#: panels/user-accounts/um-user-panel.c:497 ++#: panels/user-accounts/um-user-panel.c:549 + msgid "Failed to revoke remotely managed user" + msgstr "Falha ao revogar usuário gerenciado remotamente" + +-#: panels/user-accounts/um-user-panel.c:604 ++#: panels/user-accounts/um-user-panel.c:603 + msgid "You cannot delete your own account." + msgstr "Você não pode excluir sua própria conta." + +-#: panels/user-accounts/um-user-panel.c:613 ++#: panels/user-accounts/um-user-panel.c:612 + #, c-format + msgid "%s is still logged in" + msgstr "%s ainda está conectado" + +-#: panels/user-accounts/um-user-panel.c:617 ++#: panels/user-accounts/um-user-panel.c:616 + msgid "" + "Deleting a user while they are logged in can leave the system in an " + "inconsistent state." +@@ -7039,12 +7303,12 @@ msgstr "" + "Excluindo um usuário enquanto ele está conectado pode deixar o sistema em um " + "estado inconsistente." + +-#: panels/user-accounts/um-user-panel.c:626 ++#: panels/user-accounts/um-user-panel.c:625 + #, c-format + msgid "Do you want to keep %s’s files?" + msgstr "Você deseja manter os arquivos de %s?" + +-#: panels/user-accounts/um-user-panel.c:630 ++#: panels/user-accounts/um-user-panel.c:629 + msgid "" + "It is possible to keep the home directory, mail spool and temporary files " + "around when deleting a user account." +@@ -7052,48 +7316,48 @@ msgstr "" + "É possível manter o diretório home, fila de e-mail e arquivos temporários ao " + "excluir uma conta de usuário." + +-#: panels/user-accounts/um-user-panel.c:633 ++#: panels/user-accounts/um-user-panel.c:632 + msgid "_Delete Files" + msgstr "_Excluir arquivos" + +-#: panels/user-accounts/um-user-panel.c:634 ++#: panels/user-accounts/um-user-panel.c:633 + msgid "_Keep Files" + msgstr "_Manter arquivos" + +-#: panels/user-accounts/um-user-panel.c:648 ++#: panels/user-accounts/um-user-panel.c:647 + #, c-format + msgid "Are you sure you want to revoke remotely managed %s’s account?" + msgstr "" + "Tem certeza de que deseja revogar a conta gerenciada remotamente do %s?" + +-#: panels/user-accounts/um-user-panel.c:652 ++#: panels/user-accounts/um-user-panel.c:651 + msgid "_Delete" + msgstr "_Excluir" + +-#: panels/user-accounts/um-user-panel.c:702 ++#: panels/user-accounts/um-user-panel.c:701 + msgctxt "Password mode" + msgid "Account disabled" + msgstr "Conta desabilitada" + +-#: panels/user-accounts/um-user-panel.c:710 ++#: panels/user-accounts/um-user-panel.c:709 + msgctxt "Password mode" + msgid "To be set at next login" + msgstr "Para ser definido no próximo início de sessão" + +-#: panels/user-accounts/um-user-panel.c:713 ++#: panels/user-accounts/um-user-panel.c:712 + msgctxt "Password mode" + msgid "None" + msgstr "Nenhum" + +-#: panels/user-accounts/um-user-panel.c:760 ++#: panels/user-accounts/um-user-panel.c:759 + msgid "Logged in" + msgstr "Acesso autorizado" + +-#: panels/user-accounts/um-user-panel.c:1107 ++#: panels/user-accounts/um-user-panel.c:1106 + msgid "Failed to contact the accounts service" + msgstr "Falhou ao contactar o serviço de contas" + +-#: panels/user-accounts/um-user-panel.c:1109 ++#: panels/user-accounts/um-user-panel.c:1108 + msgid "Please make sure that the AccountService is installed and enabled." + msgstr "" + "Por favor, certifique-se de que o Serviço de Contas esteja instalado " +@@ -7103,7 +7367,7 @@ msgstr "" + #. * We split the line in 2 here to "make it look good", as there's + #. * no good way to do this in GTK+ for tooltips. See: + #. * https://bugzilla.gnome.org/show_bug.cgi?id=657168 +-#: panels/user-accounts/um-user-panel.c:1141 ++#: panels/user-accounts/um-user-panel.c:1140 + msgid "" + "To make changes,\n" + "click the * icon first" +@@ -7111,12 +7375,12 @@ msgstr "" + "Para fazer alterações,\n" + "clique no ícone * primeiro" + +-#: panels/user-accounts/um-user-panel.c:1181 ++#: panels/user-accounts/um-user-panel.c:1180 + msgid "Create a user account" + msgstr "Cria uma conta de usuário" + +-#: panels/user-accounts/um-user-panel.c:1192 +-#: panels/user-accounts/um-user-panel.c:1371 ++#: panels/user-accounts/um-user-panel.c:1191 ++#: panels/user-accounts/um-user-panel.c:1370 + msgid "" + "To create a user account,\n" + "click the * icon first" +@@ -7124,12 +7388,12 @@ msgstr "" + "Para criar uma conta de usuário,\n" + "clique primeiro no ícone *" + +-#: panels/user-accounts/um-user-panel.c:1202 ++#: panels/user-accounts/um-user-panel.c:1201 + msgid "Delete the selected user account" + msgstr "Exclui a conta de usuário selecionada" + +-#: panels/user-accounts/um-user-panel.c:1214 +-#: panels/user-accounts/um-user-panel.c:1376 ++#: panels/user-accounts/um-user-panel.c:1213 ++#: panels/user-accounts/um-user-panel.c:1375 + msgid "" + "To delete the selected user account,\n" + "click the * icon first" +@@ -7246,7 +7510,7 @@ msgstr "%d de %d" + msgid "Display Mapping" + msgstr "Exibir associação" + +-#: panels/wacom/cc-wacom-panel.c:790 panels/wacom/wacom-stylus-page.ui:127 ++#: panels/wacom/cc-wacom-panel.c:834 panels/wacom/wacom-stylus-page.ui:127 + msgid "Stylus" + msgstr "Caneta" + +@@ -7264,12 +7528,13 @@ msgid "Set button mappings and adjust stylus sensitivity for graphics tablets" + msgstr "" + "Defina mapeamentos de botão e ajuste a sensibilidade de estilo para tablets" + +-#: panels/wacom/gnome-wacom-panel.desktop.in.in:6 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: panels/wacom/gnome-wacom-panel.desktop.in.in:7 + msgid "input-tablet" + msgstr "input-tablet" + +-#. Translators: those are keywords for the wacom tablet control-center panel +-#: panels/wacom/gnome-wacom-panel.desktop.in.in:18 ++#. Translators: Search terms to find the Wacom Tablet panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: panels/wacom/gnome-wacom-panel.desktop.in.in:19 + msgid "Tablet;Wacom;Stylus;Eraser;Mouse;" + msgstr "Tablet;Wacom;Caneta;Borracha;Mouse;" + +@@ -7446,11 +7711,13 @@ msgstr "Ajuda" + msgid "Quit" + msgstr "Sair" + +-#: shell/gnome-control-center.desktop.in.in:4 ++#. Translators: Do NOT translate or transliterate this text (this is an icon file name)! ++#: shell/gnome-control-center.desktop.in.in:5 + msgid "gnome-control-center" + msgstr "gnome-control-center" + +-#: shell/gnome-control-center.desktop.in.in:15 ++#. Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! ++#: shell/gnome-control-center.desktop.in.in:17 + msgid "Preferences;Settings;" + msgstr "Preferências;Configurações;Ajustes;" + +@@ -7533,6 +7800,12 @@ msgstr[1] "%u entradas" + msgid "System Sounds" + msgstr "Sistema de sons" + ++#~ msgid "OS name" ++#~ msgstr "Nome do SO" ++ ++#~ msgid "Check for updates" ++#~ msgstr "Verificar atualizações" ++ + #~ msgid "Back­ground" + #~ msgstr "Plano de fundo" + +@@ -7560,10 +7833,6 @@ msgstr "Sistema de sons" + #~ msgid "Remo­vable Media" + #~ msgstr "Mídia removível" + +-#~ msgctxt "keybinding" +-#~ msgid "Search" +-#~ msgstr "Pesquisa" +- + #~ msgid "Net­work" + #~ msgstr "Rede" + +@@ -7762,9 +8031,6 @@ msgstr "Sistema de sons" + #~ msgid "VPN Type" + #~ msgstr "Tipo de VPN" + +-#~ msgid "Group Name" +-#~ msgstr "Nome do grupo" +- + #~ msgid "Group Password" + #~ msgstr "Senha do grupo" + +@@ -7830,9 +8096,6 @@ msgstr "Sistema de sons" + #~ msgid "Notification _Banners" + #~ msgstr "_Banners de notificação" + +-#~ msgid "Add Account" +-#~ msgstr "Adicionar conta" +- + #~ msgid "Mail" + #~ msgstr "Correio" + +@@ -7919,9 +8182,6 @@ msgstr "Sistema de sons" + #~ msgid "Add a New Printer" + #~ msgstr "Adicionar uma nova impressora" + +-#~ msgid "No printers detected." +-#~ msgstr "Nenhuma impressora detectada." +- + #~ msgctxt "login history week label" + #~ msgid "%s - %s" + #~ msgstr "%s - %s" diff --git a/po/zh_CN.po b/po/zh_CN.po index c3153b1a6..9755999a2 100644 --- a/po/zh_CN.po @@ -23416,5 +25590,5 @@ index c3153b1a6..9755999a2 100644 -#~ "%s\n" -#~ "运行 %s --help 查看所有可用的命令行选项。\n" -- -2.29.2 +2.31.1 diff --git a/SPECS/gnome-control-center.spec b/SPECS/gnome-control-center.spec index 01c5d63..2f3b6ee 100644 --- a/SPECS/gnome-control-center.spec +++ b/SPECS/gnome-control-center.spec @@ -11,7 +11,7 @@ Name: gnome-control-center Version: 3.28.2 -Release: 27%{?dist} +Release: 33%{?dist} Summary: Utilities to configure the GNOME desktop License: GPLv2+ and CC-BY-SA @@ -64,6 +64,26 @@ Patch25: printers-Update-entries.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1876291 Patch26: Update-translations.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1938323 +Patch31: 0001-network-Populate-AP-list-from-idle-handler.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1915411 +Patch32: 0002-ce-page-security-add-SAE-support.patch +Patch33: 0003-ce-page-details-add-SAE-support.patch +Patch34: 0004-net-device-wifi-Decode-SAE-AP-security.patch +Patch35: 0005-network-complete-SAE-support.patch +Patch36: 0006-Add-support-for-Enhanced-Open-WiFi-security.patch +Patch37: 0007-network-Fix-connection-selection-and-SSID-display-fo.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1938944 +Patch38: 0008-network-Fix-saving-passwords-for-non-wifi-connection.patch + +# Backport monitor config policy (#2001655) +Patch39: 0001-display-Only-display-configuration-options-if-apply-.patch + +Patch40: 0001-displays-Don-t-enlarge-display-panel-artificially.patch + +# Workaround for libnma not handling OWE https://gitlab.gnome.org/GNOME/libnma/-/issues/9 +Patch41: 0001-network-Fix-OWE-settings.patch + BuildRequires: chrpath BuildRequires: cups-devel BuildRequires: desktop-file-utils @@ -236,9 +256,38 @@ chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gnome-control-center %dir %{_datadir}/gnome/wm-properties %changelog -* Mon Mar 01 2021 Kalev Lember - 3.28.2-27 +* Thu Feb 24 2022 Benjamin Berg - 3.28.2-33 +- Work around libnma not handling OWE + Related: #2023156 + +* Thu Feb 10 2022 Carlos Garnacho - 3.28.2-32 +- Make displays panel able to fit in 800x600 resolution + Resolves: #1893650 + +* Fri Feb 04 2022 Jonas Ådahl - 3.28.3-31 +- Backport monitor config policy + Resolves: #2001655 + +* Tue Jan 04 2022 Benjamin Berg - 3.28.2-30 +- Fix connection list AP selection and SSID display for OWE + Resolves: #2023156 +- Fix saving passwords for non-wifi connections + Resolves: #1938944 + +* Wed Nov 10 2021 Benjamin Berg - 3.28.2-29 +- Backport SAE/WPA3/OWE support + Resolves: #1915411 + Resolves: #2023156 +- Add patch to fix wifi performance issue + Resolves: #1938323 + +* Fri Sep 10 2021 Kalev Lember - 3.28.2-28 +- Update pt_BR translations +- Resolves: #2003069 + +* Fri Jul 02 2021 Tomas Popela - 3.28.2-27 - Update fr, ja, zh_CN translations -- Resolves: #1876291 +- Resolves: #1933962 * Sun Jan 24 2021 Ray Strode - 3.28.2-26 - Support Simple Content Access from subscription manager